flow-tools-0.68/0000777000076600007660000000000010240421704007327 5flow-tools-0.68/acconfig.h0000644000076600007660000000050610236562402011174 /* Name of package. */ #undef PACKAGE /* Version of package. */ #undef VERSION /* Linux */ #undef _BSD_SOURCE /* Linux */ #undef HAVE_FEATURES_H /* BSD socket */ #undef HAVE_SOCK_SIN_LEN /* MYSQL */ #undef HAVE_MYSQL /* PGSQL */ #undef HAVE_PGSQL /* DEC */ #undef HAVE_LL_STRTOUL /* OPENSSL */ #undef HAVE_OPENSSL flow-tools-0.68/aclocal.m40000644000076600007660000007631010240411626011114 # aclocal.m4 generated automatically by aclocal 1.6.3 -*- Autoconf -*- # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Do all the work for Automake. -*- Autoconf -*- # This macro actually does too much some checks are only needed if # your package does certain things. But this isn't really a big deal. # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... AC_PREREQ([2.52]) # Autoconf 2.50 wants to disallow AM_ names. We explicitly allow # the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_MISSING_PROG(AMTAR, tar) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_][CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_][CC], defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_][CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_][CXX], defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # Copyright 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.6"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.6.3])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright 2001, 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # # Check to make sure that the build environment is sane. # # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # -*- Autoconf -*- # Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # AM_AUX_DIR_EXPAND # Copyright 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. # Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50]) AC_DEFUN([AM_AUX_DIR_EXPAND], [ # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # AM_PROG_INSTALL_STRIP # Copyright 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # serial 4 -*- Autoconf -*- # Copyright 1999, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_$1_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null AC_SUBST([DEPDIR]) ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*- # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST(am__include) AC_SUBST(am__quote) AC_MSG_RESULT($_am_result) rm -f confinc confmf ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright 1997, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 5 AC_PREREQ(2.52) # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([conditional \"$1\" was never defined. Usually this means the macro was only invoked conditionally.]) fi])]) # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. AC_PREREQ([2.52]) # serial 6 # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. We must strip everything past the first ":", # and everything past the last "/". # _AM_DIRNAME(PATH) # ----------------- # Like AS_DIRNAME, only do it during macro expansion AC_DEFUN([_AM_DIRNAME], [m4_if(regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1, m4_if(regexp([$1], [^//\([^/]\|$\)]), -1, m4_if(regexp([$1], [^/.*]), -1, [.], patsubst([$1], [^\(/\).*], [\1])), patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])), patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl ])# _AM_DIRNAME # The stamp files are numbered to have different names. # We could number them on a directory basis, but that's additional # complications, let's have a unique counter. m4_define([_AM_STAMP_Count], [0]) # _AM_STAMP(HEADER) # ----------------- # The name of the stamp file for HEADER. AC_DEFUN([_AM_STAMP], [m4_define([_AM_STAMP_Count], m4_incr(_AM_STAMP_Count))dnl AS_ESCAPE(_AM_DIRNAME(patsubst([$1], [:.*])))/stamp-h[]_AM_STAMP_Count]) # _AM_CONFIG_HEADER(HEADER[:SOURCES], COMMANDS, INIT-COMMANDS) # ------------------------------------------------------------ # We used to try to get a real timestamp in stamp-h. But the fear is that # that will cause unnecessary cvs conflicts. AC_DEFUN([_AM_CONFIG_HEADER], [# Add the stamp file to the list of files AC keeps track of, # along with our hook. AC_CONFIG_HEADERS([$1], [# update the timestamp echo 'timestamp for $1' >"_AM_STAMP([$1])" $2], [$3]) ])# _AM_CONFIG_HEADER # AM_CONFIG_HEADER(HEADER[:SOURCES]..., COMMANDS, INIT-COMMANDS) # -------------------------------------------------------------- AC_DEFUN([AM_CONFIG_HEADER], [AC_FOREACH([_AM_File], [$1], [_AM_CONFIG_HEADER(_AM_File, [$2], [$3])]) ])# AM_CONFIG_HEADER # Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 AC_PREREQ(2.50) # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) flow-tools-0.68/AUTHORS0000644000076600007660000000000007241363005010307 flow-tools-0.68/bin/0000777000076600007660000000000010240421704010077 5flow-tools-0.68/bin/flow-log2rrd0000755000076600007660000000427410240163374012276 #!/usr/local/bin/python import getopt import os import rrdtool import sys import string # # process syslog output from flow-capture and flow-fanout into a rrd # Requires flow-tools-0.66 or above. # # -p allows configuration of the path to the rrd file # # rrd's have a DS of flows, pkts, and lost. When processing the output of # flow-fanout an additional send_nobufs DS is used. # # default to cwd rrdPath = '.' opts, args = getopt.getopt(sys.argv[1:], 'p:') for o, v in opts: if o == '-p' : rrdPath = v; testFile = {} line = sys.stdin.readline() while line : fields = line.split() if (len(fields) < 6) or (fields[5] != 'STAT:'): line = sys.stdin.readline() continue if fields[4][5:11] == 'fanout' : name='fanout' elif fields[4][5:12] == 'capture' : name='capture' else : raise ValueError, "Expecting flow-capture or flow-fanout logs, got %s" %\ fields[4] tv = {} for f in fields : try : type, value = f.split('=') except ValueError : continue tv[type] = value rrdFile = '%s/%s.%s.%s.%s.%s.rrd' %\ (rrdPath, name, fields[3],tv['src_ip'],tv['dst_ip'],tv['d_ver']) update = '%s:%s:%s:%s' % (tv['now'],tv['flows'],tv['pkts'],tv['lost']) if name == 'fanout' : update = '%s:%s' % (update, tv['send_nobufs']) if not testFile.get(rrdFile, 0): if not os.access(rrdFile, os.F_OK) : print 'Creating RRD ', rrdFile if name == 'capture' : # 7 days of 5 minute averages (no averaging) # 365 days of 1 day averages rrdtool.create(rrdFile, '--start', str(int(tv['now']) - 300), 'DS:flows:COUNTER:600:U:U', 'DS:pkts:COUNTER:600:U:U', 'DS:lost:COUNTER:600:U:U', 'RRA:AVERAGE:0.5:1:2016', 'RRA:AVERAGE:0.5:288:365') testFile[rrdFile] = 1 elif (name == 'fanout') : rrdtool.create(rrdFile, '--start', str(int(tv['now']) - 300), 'DS:flows:COUNTER:600:U:U', 'DS:pkts:COUNTER:600:U:U', 'DS:lost:COUNTER:600:U:U', 'DS:nobufs:COUNTER:600:U:U', 'RRA:AVERAGE:0.5:1:2016', 'RRA:AVERAGE:0.5:288:365') testFile[rrdFile] = 1 rrdtool.update(rrdFile, update) line = sys.stdin.readline() flow-tools-0.68/bin/flow-rpt2rrd0000755000076600007660000002321410240246661012316 #!/usr/local/bin/python import getopt import os import rrdtool import sys import string # # flow-rpt2rrd - convert flow-report output to rrd format # # TODO # work with time-series flow-report output # relax 5 minute sample requirement. # # load key file # def load_keyfile(fname): keys = [] f = open(fname, "r") line = f.readline().strip() while line: if line[0:1] == '#': line = f.readline() continue keys.append(line) line = f.readline().strip() f.close() return string.join(keys, ',') # # Class: ftsym # load a symbol table from a file in value symbol format, provide # access methods findbyname and findbyval # class ftsym: # # load symbols # def __init__(self,field): self.sv = {} self.vs = {} __symbol_lookup = { 'ip-source-port' : 'tcp-port.sym', 'ip-destination-port' : 'tcp-port.sym', 'ip-protocol' : 'ip-prot.sym', 'source-as' : 'asn.sym', 'destination-as' : 'asn.sym', 'source-tag' : 'tag.sym', 'destination-tag' : 'tag.sym', 'ip-address-type' : 'ip-type.sym', } fname = "/usr/local/netflow/var/sym/%s" % __symbol_lookup[field] f = open(fname, "r") line = f.readline().strip() while line: (v,s) = line.split(); self.vs[v] = s self.sv[s] = v line = f.readline().strip() f.close() # # access by name, return value. If the name does not exist return the name. # def findbyname(self, name): return self.sv.get(name,name) # # access by value, return name. If the value does not exist return the value. # def findbyval(self, val): return self.vs.get(val,val) # # Class: ftrpt2rrd # # Read in output of flow-report, make suitable for rrd # # pickfields - pick flows,octets,packets for inclusion into new rrd # pickkeys - pick keys for inclusion into new rrds. # mapsym() - replace key values with symbols # setrrd() - set rrd params # convert(stream) - convert to rrd format # class ftrpt2rrd: # # # def __init__(self): # not in data area self.debug = 0 self.verbose = 0 self.in_data = 0 self.use_key_names = {} self.use_key_names_special = {} self.use_key_names_total = 0 self.use_fields = {'flows' : 1, 'octets' : 1, 'packets' : 1} self.mapsym = 0 self.rrd_5min = 0 self.rrd_30min = 0 self.rrd_2hr = 0 self.rrd_1day = 0 self.rrd_path = '.' self.rrd_postfix = '' self.field_names = {} self.field_names2 = {} self.field_total = 0 self.field_keys = {} self.field_vals = {} self.start_time = 0 self.sym = {} self.records_processed = 0 def set_use_fields(self,f): self.use_fields = {} for i in string.split(f, ','): self.use_fields[i] = 1 def set_use_key_names(self,f): self.use_key_names = {} self.use_key_names_special = {} for i in string.split(f, ','): if i[:6] == 'total_': self.use_key_names_special[i] = 1 else: self.use_key_names[i] = 1 self.use_key_names_total += 1 def set_mapsym(self): self.mapsym = 1 def set_debug(self, debug): self.debug = debug def set_verbose(self, verbose): self.verbose = verbose def setrrd(self, storage, path, postfix): (self.rrd_5min, self.rrd_30min, self.rrd_2hr, self.rrd_1day) = \ string.split(storage,':') self.rrd_path = path self.rrd_postfix = postfix def update_rrd(self, key, vals, use_fields_index): # / in the key maps to - for files key = key.replace('/','-') # open an rrd, it it doesn't exist create it. rrdFile = "%s/%s%s.rrd" % (self.rrd_path, key, self.rrd_postfix) # exists? if not os.access(rrdFile, os.F_OK): print "Creating RRD", rrdFile rrdParams = [] t = str(int(self.start_time) - 300) rrdParams.append('--start') rrdParams.append(t) for i in use_fields_index.keys(): rrdParams.append("DS:%s:ABSOLUTE:600:U:U" % use_fields_index[i]) if (self.rrd_5min): rrdParams.append('RRA:AVERAGE:0.5:1:%s' % self.rrd_5min) rrdParams.append('RRA:MAX:0.5:1:%s' % self.rrd_5min) if (self.rrd_30min): rrdParams.append('RRA:AVERAGE:0.5:6:%s' % self.rrd_30min) rrdParams.append('RRA:MAX:0.5:6:%s' % self.rrd_30min) if (self.rrd_2hr): rrdParams.append('RRA:AVERAGE:0.5:24:%s' % self.rrd_2hr) rrdParams.append('RRA:MAX:0.5:24:%s' % self.rrd_2hr) if (self.rrd_1day): rrdParams.append('RRA:AVERAGE:0.5:288:%s' % self.rrd_1day) rrdParams.append('RRA:MAX:0.5:288:%s' % self.rrd_1day) rrdtool.create(rrdFile, *rrdParams) if self.debug: print >>sys.stderr, string.join(rrdParams,' ') # foreach value update = self.start_time for i in use_fields_index.keys(): update = "%s:%s" % (update,vals[i]) if self.debug: print >>sys.stderr, "update", update if (self.verbose): print "Updating RRD", rrdFile rrdtool.update(rrdFile,update) # # # def convert(self, f): # first line line = f.readline().strip() while line: # report data starts after recn comment if (not self.in_data) : if line[:13] == '# first-flow:': self.start_time = (string.split(line[14:]))[0] # handle the totals record differently if line[:53] == '# rec1: records,ignores,flows,octets,packets,duration': tmp = string.split(line[8:], ',') line = f.readline().strip() tmp_use_fields_index = {} tmp_splt = string.split(line, ',') x = 0 ds = 0 for i in tmp: if self.use_key_names_special.get("total_%s" % i,0): tmp_use_fields_index[x] = i ds = ds + 1 x = x + 1 if ds: self.update_rrd('totals', tmp_splt, tmp_use_fields_index) del tmp_splt, tmp_use_fields_index, i, x, ds continue if line[:6] == '# recn': self.in_data = 1 # foreach element in field names for i in string.split(line[8:],','): # remove key designators if i[-1:] == '*': i = i[:-1] self.field_keys[self.field_total] = 1 else: self.field_vals[self.field_total] = 1 # store the field names self.field_names[self.field_total] = i self.field_names2[i] = self.field_total self.field_total += 1 # start time must be set by now if (self.start_time == 0): raise ValueError, "Start time not found, make sure flow-report is including the header" # load symbol tables if self.mapsym == 1: for i in self.field_keys.keys(): self.sym[i] = ftsym(self.field_names[i]) # convert use_fields to use_fields_index for easier access self.use_fields_index = {} for i in self.use_fields.keys(): if self.use_fields[i] and self.field_names2.get(i,'x') != 'x': self.use_fields_index[self.field_names2[i]] = i else : # if in the data area and not a comment, store it if self.in_data and line [:1] != '#': splt = string.split(line, ',') # combine the key fields to form one key k = '' for i in self.field_keys.keys(): # try a symbol table lookup if self.mapsym == 1: t = self.sym[i].findbyval(splt[i]) else: t = splt[i] k = "%s-%s" % (k, t) # done if all entries in key_names list have been stored. if self.use_key_names_total: if self.records_processed == self.use_key_names_total: break # if set, only allow specified keys if self.use_key_names.get(k[1:],0) == 0: line = f.readline().strip() continue # mark this key as processed self.use_key_names[k[1:]] |= 2 self.records_processed += 1 self.update_rrd(k[1:], splt, self.use_fields_index) # next line line = f.readline().strip() # keys which were not available in the report also need to be # updated with 0 values. for i in xrange(len(splt)): splt[i] = 0 for x in self.use_key_names.keys(): if not (self.use_key_names[x] & 2): self.update_rrd(x, splt, self.use_fields_index) # # main # (opts,rags) = getopt.getopt(sys.argv[1:], "dhk:K:f:np:P:r:v") # mrtg defaults opt_rrd_storage = "600:600:600:732" opt_keys = '' opt_fields = 'flows,octets,packets' opt_names = 0 opt_rrd_path = './' opt_keyfile = '' opt_debug = 0 opt_rrd_postfix = '' opt_verbose = 0 for o,v in opts: if o == '-d': opt_debug = 1 elif o == '-k': opt_keys = v elif o == '-K': opt_keys = load_keyfile(v) elif o == '-f': opt_fields = v elif o == '-n': opt_names = 1 elif o == '-p': opt_rrd_path = v elif o == '-P': opt_rrd_postfix = v elif o == '-r': opt_rrd_storage = v elif o == '-v': opt_verbose = 1 elif o == '-h': print "Usage: flow-rpt2rrd [-nv] [-k keys] [-K keyfile] [-f fields]" print " [-p rrd_path] [-P fname_postfix]" print " [-r rrd_storage 5_min:30_min:2_hr:1_day ]" sys.exit(0) if opt_keys == '': print >>sys.stderr, "Keys must be defined with -k or -K." sys.exit(1) ftrrd = ftrpt2rrd() if (opt_names == 1): ftrrd.set_mapsym() ftrrd.setrrd(opt_rrd_storage, opt_rrd_path, opt_rrd_postfix) ftrrd.set_use_key_names(opt_keys) ftrrd.set_use_fields(opt_fields) ftrrd.set_debug(opt_debug) ftrrd.set_verbose(opt_verbose) ftrrd.convert(sys.stdin) flow-tools-0.68/bin/flow-rptfmt0000755000076600007660000003463610240376315012245 #!/usr/local/bin/python import sys import string import getopt import signal # # flow-rptfmt - pretty print flow-report output # # $Id: flow-rptfmt,v 1.3 2005/05/11 12:38:37 maf Exp $ # # TODO: # speed up sorting by first mapping array to long/floats. # better support for older flow-reports with internal list of # key fields. # use the 'totals' line if available. Then don't have to # load entire report for percent totals. # # Class: ftsym # load a symbol table from a file in value symbol format, provide # access methods findbyname and findbyval # class ftsym: # # load symbols # def __init__(self,field): self.sv = {} self.vs = {} __symbol_lookup = { 'ip-source-port' : 'tcp-port.sym', 'ip-destination-port' : 'tcp-port.sym', 'ip-protocol' : 'ip-prot.sym', 'source-as' : 'asn.sym', 'destination-as' : 'asn.sym', 'source-tag' : 'tag.sym', 'destination-tag' : 'tag.sym', 'ip-address-type' : 'ip-type.sym', } fname = "/usr/local/netflow/var/sym/%s" % __symbol_lookup[field] f = open(fname, "r") line = f.readline() while line: line.strip() (v,s) = line.split(); self.vs[v] = s self.sv[s] = v line = f.readline() f.close() # # access by name, return value. If the name does not exist return the name. # def findbyname(self, name): return self.sv.get(name,name) # # access by value, return name. If the value does not exist return the value. # def findbyval(self, val): return self.vs.get(val,val) # # Class: ftrptfmt # # Read in output of flow-report. # # load(stream) - read from the stream # pickdisplay(fields) - configure a comma seperated list of fields to display # sort(field) - sort report -descending or +ascending on field # mapsym() - replace key values with symbols # percent() - replace non key fields with percent totals # dump(format, header, max_lines) - dump output in format (ascii/html). # if header is != 0, then list the header values too. # class ftrptfmt: # # # def __init__(self): # not in data area self.in_data = 0 # no header info yet self.header_info = [] self.field_totals = {} self.field_lens = {} self.field_names = {} self.field_vals = {} self.field_avals = [] self.field_idx = {} self.field_iter = [] self.field_total = 0 self.field_use = {'all' : 1} self.field_display = {} self.field_keys = {} self.recno = int(0) self.display_summary_detail = 0 self.max_lines = 0 self.display_header = 0 self.got_totals = 0 self.soft_field = '' # # # def _fmt_summary_detail(self): if self.got_totals: print "Ignores: %s" % self.field_vals['ignores'] print "Total Flows: %s" % self.field_vals['flows'] print "Total Octets: %s" % self.field_vals['octets'] print "Total Packets: %s" % self.field_vals['packets'] print "Total Duration (ms): %s" % self.field_vals['duration'] print "Real Time: %s" % self.field_vals['time_real'] print "Average Flow Time: %s" % self.field_vals['aflowtime'] print "Average Packets/Second: %s" % self.field_vals['aps'] print "Average Flows/Second: %s" % self.field_vals['afs'] print "Average Packets/Flow: %s" % self.field_vals['apf'] print "Flows/Second: %s" % self.field_vals['fps'] print "Flows/Second (real): %s" % self.field_vals['fps_real'] print "\nAverage IP packet size distribution:" print "\n 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480\n ", for x in range(7,22): print ("%-3.3f" % float(self.field_vals[x]))[1:], print "\n\n 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608\n ", for x in range(22,33): print ("%-3.3f" % float(self.field_vals[x]))[1:], print "\n\nPackets per flow distribution:" print "\n 1 2 4 8 12 16 20 24 28 32 36 40 44 48 52\n ", for x in range(33,48): print ("%-3.3f" % float(self.field_vals[x]))[1:], print "\n\n 60 100 200 300 400 500 600 700 800 900 >900\n ", for x in range(48,59): print ("%-3.3f" % float(self.field_vals[x]))[1:], print "\n\nOctets per flow distribution:" print "\n 32 64 128 256 512 1280 2048 2816 3584 4352 5120 5888 6656 7424 8192\n ", for x in range(59,74): print ("%-3.3f" % float(self.field_vals[x]))[1:], print "\n\n 8960 9728 10496 11264 12032 12800 13568 14336 15104 15872 >15872\n ", print ("%-3.3f" % float(self.field_vals[74]))[1:], for x in range(75,85): print ("%-3.3f " % float(self.field_vals[x]))[1:], print "\n\nFlow Time Distribution (ms):" print "\n 10 50 100 200 500 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000\n ", for x in range(85,100): print ("%-3.3f" % float(self.field_vals[x]))[1:], print "\n\n 12000 14000 16000 18000 20000 22000 24000 26000 28000 30000 >30000\n ", for x in range(100,111): print ("%-3.3f " % float(self.field_vals[x]))[1:], print # # # def fmt_ascii_lines(self) : # summary-detail is a special format if self.display_summary_detail != 1: line = int(self.max_lines) for x in self.field_iter: for y in xrange(self.field_total): if self.field_display[y]: # print "x=",x,"y=",y,"#" i = self.field_avals[x][y] print i.ljust(self.field_lens[y]), if line: line = line - 1 if not line: break print else: self._fmt_summary_detail() # # # def fmt_ascii_header(self) : if not self.display_header: return for i in self.header_info: if i[0:7] == '# rec1:': break print i; print "# ", sys.argv # summary-detail is a special format if self.display_summary_detail != 1: for x in xrange(self.field_total): if self.field_display[x]: i = self.field_names[x] l = self.field_lens[x] print i.ljust(l), print # # # def fmt_ascii_footer(self) : print "\n", # # HTML # def fmt_html_header(self) : if self.display_header: print '''
''' 
      for i in self.header_info:
        if i[0:7] == '#rec1:':
          break
        print i
      print '''
''' print "" print "" if self.display_summary_detail != 1: for x in xrange(self.field_total): if self.field_display[x]: print " ''' print '''''' # # # def fmt_html_lines(self) : if self.display_summary_detail != 1: line = int(self.max_lines) for x in self.field_iter: print "" for y in xrange(self.field_total): if self.field_display[y]: i = self.field_avals[x][y] print " ''' if line: line = line - 1 if not line: break print '''''' else: print '''
''' 
      self._fmt_summary_detail()
      print '''
''' # # # def fmt_html_footer(self) : print '''
", self.field_names[x], '''
", i, '''
''' # # load data in flow-report format # def load(self, f, sort_field, max_lines, opt_percent): self.max_lines = int(max_lines) self.sort_field = sort_field # first line line = f.readline() while line: # lop off trailing and extra whitespace line = line.strip() # report data starts after recn comment if (not self.in_data) : if line[:5] == '# rec' and line[:10] != '# records:': # special totals record if line[:6] == '# rec1': self.got_totals = 1 line2 = f.readline() line2 = line2.strip() splt = string.split(line2,',') x = 0 for i in string.split(line[8:],','): self.field_vals[i] = splt[x] x += 1 elif line[:6] == '# rec2': self.display_summary_detail = 1 line2 = f.readline() line2 = line2.strip() splt = string.split(line2,',') x = 0 for i in string.split(line[8:],','): self.field_vals[i] = splt[x] self.field_vals[x] = splt[x] x += 1 else: if line[:6] == '# recn': self.in_data = 1 # foreach element in field names x = 0 for i in string.split(line[8:],','): # remove key designators if i[-1:] == '*': i = i[:-1] self.field_keys[self.field_total] = 1 i = string.lower(i) self.field_idx[i] = self.field_total # default to the length of the header self.field_lens[self.field_total] = len(i) # append the header name self.field_names[self.field_total] = i self.field_total += 1 else: self.header_info.append(line) else : # if in the data area and not a comment, store it if self.in_data and line [:1] != '#': splt = string.split(line, ',') for i in xrange(self.field_total): if len(splt[i]) > self.field_lens[i]: self.field_lens[i] = len(splt[i]) self.field_avals.append(splt) self.recno += 1 # next line line = f.readline() # short cut, if not sorting and max lines is defined then can stop early if self.max_lines and (self.sort_field == '') and (opt_percent == 0) and (self.recno == self.max_lines): break; # default to sequentially as read self.field_iter = range(self.recno) # # # def pickdisplay(self, f): self.field_use['all'] = 0 for i in string.split(f, ','): self.field_use[i] = 1 # figure out which fields are okay to print if self.field_use['all'] == 1: for x in xrange(self.field_total): self.field_display[x] = 1 else: for x in xrange(self.field_total): self.field_display[x] = self.field_use.get(self.field_names[x],0) # # # def sort(self): sort_field = self.sort_field if self.sort_field != '': i = self.field_idx[sort_field[1:]] if sort_field[0] == '+': if sort_field[1:] == 'pps' or sort_field[1:] == 'bps': self.field_iter.sort(lambda a,b: cmp(float(self.field_avals[a][i]), float(self.field_avals[b][i]))) elif sort_field[1:] == 'ip-next-hop-address' or sort_field[1:] == 'ip-source-address' or sort_field[1:] == 'ip-destination-address' or sort_field[1:] == 'ip-exporter-address': self.field_iter.sort(lambda a,b: cmp(self.field_avals[a][i], self.field_avals[b][i])) else: self.field_iter.sort(lambda a,b: cmp(long(self.field_avals[a][i]), long(self.field_avals[b][i]))) elif sort_field[0] == '-': if sort_field[1:] == 'pps' or sort_field[1:] == 'bps': self.field_iter.sort(lambda b,a: cmp(float(self.field_avals[a][i]), float(self.field_avals[b][i]))) elif sort_field[1:] == 'ip-next-hop-address' or sort_field[1:] == 'ip-source-address' or sort_field[1:] == 'ip-destination-address' or sort_field[1:] == 'ip-exporter-address': self.field_iter.sort(lambda b,a: cmp(self.field_avals[a][i], self.field_avals[b][i])) else: self.field_iter.sort(lambda b,a: cmp(long(self.field_avals[a][i]), long(self.field_avals[b][i]))) # # # def mapsym(self): # foreach key field try to map in symbols for i in self.field_keys.keys(): if self.field_display[i] != 1: continue n = self.field_names[i] sym = ftsym(n) for j in self.field_iter: self.field_avals[j][i] = sym.findbyval(self.field_avals[j][i]) # readjust field len if len(self.field_avals[j][i]) > self.field_lens[i]: self.field_lens[i] = len(self.field_avals[j][i]) # # # def percent(self): # foreach field for i in xrange(self.field_total): # skip key fields if self.field_keys.get(i,0) == 1: continue # for each value for the field self.field_totals[i] = 0 for j in self.field_iter: self.field_totals[i] += long(self.field_avals[j][i]) for j in self.field_iter: self.field_avals[j][i] = "%5.6f" % (float(self.field_avals[j][i]) / float(self.field_totals[i]) * 100) # readjust field len if len(self.field_avals[j][i]) > self.field_lens[i]: self.field_lens[i] = len(self.field_avals[j][i]) # # # def dump(self, format, display_header): self.display_header = display_header if format == 'ascii': fmt_header = ftrptfmt.fmt_ascii_header fmt_lines = ftrptfmt.fmt_ascii_lines fmt_footer = ftrptfmt.fmt_ascii_footer if format == 'html': fmt_header = ftrptfmt.fmt_html_header fmt_lines = ftrptfmt.fmt_html_lines fmt_footer = ftrptfmt.fmt_html_footer fmt_header(self) fmt_lines(self) fmt_footer(self) # # main # (opts,rags) = getopt.getopt(sys.argv[1:], "a:f:F:ghHps:m:n") opt_display_header = 1 opt_display = 'all' opt_format = 'ascii' opt_sort_field = '' opt_mapsym = 0 opt_percent = 0 opt_max_lines = 0 opt_alarm = int(0) for o,v in opts: if o == '-a': opt_alarm = int(v) elif o == '-f': opt_format = v elif o == '-F': opt_display = v elif o == '-H': opt_display_header = 0 elif o == '-m': opt_max_lines = v elif o == '-n': opt_mapsym = 1 elif o == '-p': opt_percent = 1 elif o == '-s': opt_sort_field = v elif o == '-h': print "Usage: flow-rptfmt [-hHnp] [-a alarm] [-f format] [-F display_fields]" print " [-m max_lines] [-s sort_field]" sys.exit(0) def sig_alarm(sig, stack): print "flow-rptfmt exceeded CPU time, consider running report offline." sys.exit(0) signal.signal(signal.SIGALRM, sig_alarm) if opt_alarm: signal.alarm(opt_alarm) rpt = ftrptfmt() rpt.load(sys.stdin, opt_sort_field, opt_max_lines, opt_percent) rpt.pickdisplay(opt_display) rpt.sort() if (opt_mapsym == 1): rpt.mapsym() if (opt_percent == 1): rpt.percent() try: rpt.dump(opt_format, opt_display_header) except IOError: sys.exit(0) flow-tools-0.68/bin/Makefile.am0000644000076600007660000000007310240421456012053 dist_bin_SCRIPTS = flow-log2rrd flow-rptfmt flow-rpt2rrd flow-tools-0.68/bin/Makefile.in0000644000076600007660000001451010240421461012061 # Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CRYPTOLIB = @CRYPTOLIB@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ MYSQLCFLAGS = @MYSQLCFLAGS@ MYSQLINCLUDE = @MYSQLINCLUDE@ MYSQLLIB = @MYSQLLIB@ OPENSSLINCLUDE = @OPENSSLINCLUDE@ PACKAGE = @PACKAGE@ PGSQLCFLAGS = @PGSQLCFLAGS@ PGSQLINCLUDE = @PGSQLINCLUDE@ PGSQLLIB = @PGSQLLIB@ RANLIB = @RANLIB@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YLIB = @YLIB@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ dist_bin_SCRIPTS = flow-log2rrd flow-rptfmt flow-rpt2rrd subdir = bin mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/ftconfig.h CONFIG_CLEAN_FILES = SCRIPTS = $(dist_bin_SCRIPTS) DIST_SOURCES = DIST_COMMON = $(dist_bin_SCRIPTS) Makefile.am Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(dist_binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \ $(dist_binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-dist_binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done uninstall-info-am: tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-dist_binSCRIPTS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-dist_binSCRIPTS uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-dist_binSCRIPTS \ install-exec install-exec-am install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic uninstall uninstall-am \ uninstall-dist_binSCRIPTS uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/ChangeLog0000644000076600007660000007126610240376213011035 * 5-11-2005 flow-tools 0.68 released. * added flow-rpt2rrd - post process flow-report into RRD's. * added flow-log2rrd - post process logs from * added flow-rptfmt - post process flow-report into readable and HTML. * ftstat.c s/psizr256/psize256/ - uebelacker@tuhh.de * rec_v5->engine_id not set properly in ftdecode.c - baldwinL@mynetwatchman.com * --enable-lfs set flags for large file support - alexbrennen@gmail.com * Added CryptoPAn support to flow-xlate req by Abilene * mailing list archive is available at mail-archive.com req by spork@bway.net * flow-cat.c: progress debug output - weinhold@berbee.com * portability: gcc no longer supports goto label which label is at the end of a compound statement - Andreas Jochens * flow-stat.c: protect from divize by zero - should only happen on invalid flows - - Espen.Breivik@uninett.no * flow-filter.c: exaddr filter - Espen.Breivik@uninett.no * ftxlate.c: tag-mask eval_tag_mask() not using correct offsets - Cougar & kgraham@valueclick.com * flow-send: default tx_delay to 0 like flow-fanout - rjd@merit.edu * flow-export: debug should be global - dwatanab@uci.edu * flow-report: path will accept spaces, ie |flow-rpt2rrd -p rrd -k 25 * flow-report: records is in rec1 * flow-fanout: did not set address family for receive fd - noted by fingers@fingers.co.za * docs: add FILES section to man pages * flow-report: -hh to list available reports * flow-report, flow-tag, flow-xlate, flow-nfilter. Run-time variable expansion of the form @VAR or @{VAR:default} for config files. * flow-receive: dropped inline tagging and nfilter support * 12-4-2003 flow-tools 0.67 released. * flow-export: pgsql support from wyu@ateneo.edu * docs: flow-report: Added description of reports. * ftlib: ftfil.c - match_end_time() broken - noted by "Joe Loiacono" * ftlib: fttag.c - better syntax checking for or-src/dst and set-src/dst * ftlib: ftlib.h FT_TAG_TYPE_MATCH_NEXTHOP duplicated - flow-tag crash with next-hop type noted by Maxim Grigoriev * ftlib: ftstat.c - broken ip-destination-address-source-count. patch from "Shigeki Taniguchi" * flow-fanout: filters not loaded - noted by RAR@syssrc.com * ftlib: missing function prototypes for ftstat_*, rename bind to binding to prevent shadowing bind(). patch from Bill Fumerola * flow-fanout, flow-capture. Process SIGTERM like SIGQUIT so flow-tools will work better under daemontools - req by Bernhard Weisshuhn * docs: flow-nfilter and flow-cat TIME/DATE parsing section. * flow-dscan: drp->flags not updated when loading saved state - patch from Jon Snyder * flow-dscan: allow concurrent -w and -W, patch from Dan Thorson * docs: flow-print -f24 - noted by noted by Christian Bauer * dist: tag.sym and tag.cfg example files reversed - noted by * ftlib: ftlib.h - FT_TAG_SET and FT_TAG_OR are broken - patch from Valtteri Vuorikoski * ftlib: ftrec.c - add 1005to5 translation - patch from Valtteri Vuorikoski * flow-stat -f0 will try to divide by 0 with an empty flow file - noted by Mike Hunter * flow-capture: -u preserve unherited umask - patch from Everton da Silva Marques * flow-receive: remove -m and -A. * flow-capture: remove -m and -A, functionality is now in xlate -x -X. * flow-xlate: - config file based now. * docs: flow-report: note which fields are sortable and what the key field is. * flow-capture: accept()'s 3rd arg should be casted to socklen_t*, noted by Alistair.McGlinchy@marks-and-spencer.com * docs: flow-nfilter, port is 0..65535 not 0..255 - noted by Mike Hunter * ftlib: ftlib.h - set-{dst,src} and or-{dst,src} constants not correct - patch from Valtteri Vuorikoski * ftlib: ftchash.c - ftchash_sort() should not try to sort 0 entry table - noted by "Shane D." * flow-import: missing !HAVE_STRSEP compatability - patch from Alistair.McGlinchy@marks-and-spencer.com * ftlib: ftstat.c - output path not parsed correctly with leading whitespace -- noted by Maxim Grigoriev * ftlib: fttag.c - src->source dst->destination * ftlib: fttag.c - ip-address, exporter, interface tag actions, requested by Tim Irwin * ftlib: ftsym.c - ftsym_new() should handle null filename - noted by Celso Alves Vieira * flow-dscan: buf len 64, not 54 - Anil Madhavapeddy * 4-3-2003 flow-tools-0.66 released * reapply flow-fanout linux patch, also infected flow-send * 4-3-2003 flow-tools-0.65 released * flow-send, flow-fanout: -s source IP address spoofing. * build: builddir != srcdir problems - noted by jos@catnook.com * build: All default config files installed by default. * build: config files end in .cfg, symbol files end in .sym. Note this changes the names of the default configuration files. * ftlib: ftfil.c - random sample filter - reqested by Edward Balas * ftlib: ftstat.c - ip-destination-address-source-count missing count - noted by Christian Cinetto * build: example tags file installed by default. * ftlib: ftstat.c - broken ip-source-address/ip-destination-port - noted by Gerhard.Haindl@t-systems.at * ftlib: ftstat.c - broken ip-destination-address/destination-as - noted by carsten.strahler@lambdanet.net * remove bin scripts (mostly historical OSU stuff) * upgrade to automake 1.7.3 and autoconf 2.57 * docs: flow-report.sgml missing ip-source/destination-address/ip-protocol/ip-tos/ip-source/destination-port noted by shane.dawalt@wright.edu * flow-fanout: will not compile under linux - patch from alex.shepard@gettyimages.com * ftlib: ftstat.c - use FMT_SYM_LEN instead of hard coded 32 byte length. increase len to 64 bytes. * ftlib: fmt.c - fmt_uint*s() did not properly null terminate when symbol strlen >= max - noted by jed@onenet.net * 2-23-2003 flow-tools-0.64 released * flow-fanout, flow-capture, flow-receive: add startup= to STAT: line * docs: flow-fanout - missing -f -F - noted by RAR@syssrc.com * flow-split: consuming too many resources, noted by fin@finseth.com * ftlib: ftstat.c - rec2: in summary-detail report missing time_real field - noted by shane.dawalt@wright.edu * build: strouq() -> strtoull(). Check if strtoul() is really strtoull() - noted by shane.dawalt@wright.edu * ftlib: ftstat.c - protect potential divide by 0 errors - noted by shane.dawalt@wright.edu * flow-split: stag not initialized - patch from fin@finseth.com * build: ftlib.h should not require ftconfig.h - noted by jan@kneschke.de * build: lib/ftconfig.h does not belong in dist - noted by jos@catnook.com * ftlib: ftlib.h - FT_SO_RCV_BUFSIZE default to 4MB * ftlib: suppport.c - bigsockbuf() - more agressive reduction on large buffers. Report size. * ftlib: ftmask.c - flow-mask: rn_deladdr(): failed. Missing masklen set - noted by nik.hinson@assurance-dynamics.com * ftlib: ftfil.c - invert option to filter-definition req by mhyde@escape.ca * ftlib: shadowed variable names - fumerola@yahoo-inc.com * flow-cat: exit status 1 if no streams processed - req by mhunter@ack.Berkeley.EDU * ftlib: ftstat.c - bucket_dump_1(): loop typo noted by nik.hinson@assurance-dynamics.com * flow-capture: reload tags and filters with SIGHUP * flow-import: format4 wire format. * ftlib: ftstat.c - tag mask option should not require local tagging - noted by clay@bloomcounty.org * flow-*: catch extra command line args - noted by rcarrara@augustmail.com * ftlib: fttag.c - fix ToS tagging, add ANY tagging. * 12-12-2002 flow-tools-0.63 released * ftlib: ftstat.c - More informative error message when invalid field - patch from wyu@ateneo.edu * docs: flow-capture - hosts.allow requires flow-capture-client, not flow-capture - noted by stewart@net.ohio-state.edu * flow-capture: TCP client port should be same as UDP netflow port - noted by stewart@net.ohio-state.edu * ftlib: ftfil.c: moved primitive initialization code to parse_primitive_type() to avoid state loss when 'default' or 'mask' keyword used before a permit/deny. * ftlib: ftfil.c: tos, marked_tos, tcp_flags mask applied to flow not to a copy - noted by nik.hinson@assurance-dynamics.com * flow-export -f4 wire format - requested by mikeh@ncsa.uiuc.edu * docs: flow-print.sgml - document column headers. * flow-report / ftstat.c - added runtime variable binding and output path substitution support, ie run with -v ROUTER=NYCM and use output path '/report/@ROUTER/report-out' * ftlib: ftvar.c - variable binding functions. * ftlib: ftstat.c - summary-detail report will produce core if no flows are processed - noted by rjd@merit.edu * docs: not all targets included in distribution - noted by Jeje * ftlib: ftio.c byte order of output not always in synch with flags - noted by mikeh@ncsa.uiuc.edu * docs: flow-filter port correction - mhunter@ack.Berkeley.EDU * ftlib: ftstat.c names option works with IP addresses -- DNS lookups. req by nik.hinson@assurance-dynamics.com * ftlib: ftstat.c: min_pps,max_pps,min_bps,max_bps calculations, reduce memory and CPU footprint if *ps calculations are not selected. req by nik.hinson@assurance-dynamics.com * ftlib: ftstat.c: linear-interpolated-flows-octets-packets,first,last, duration,ip-source-address/source-tag,ip-source-address/destination-tag, ip-destination-address/source-tag,ip-destination-address/destination-tag, ip-source/destination-address/source/destination-tag, ip-source/destination-address/ip-protocol/ip-tos reports. req by nik.hinson@assurance-dynamics.com * ftlib: ftstat.c: new fields, index,first,last req by nik.hinson@assurance-dynamics.com * ftlib: ftstat.c: integrated mask eval req by nik.hinson@assurance-dynamics.com * flow-mask: new - replace mask length based on prefix. req by nik.hinson@assurance-dynamics.com * ftlib: fttag.c: tag on tcp-src-port, tcp-dst-port, tcp-port, udp-src-port, udp-dst-port, udp-port, tos. req by nik.hinson@assurance-dynamics.com * ftlib: fttag.c: rework to use jump tables to support more match types w/o performance impact. * flow-stat: -f32 did not have symbol lookups enabled, noted by Michael Redinger in ascii output automatically parsed as -m option. * flow-export: fix -m, -m now allows ascii input, ie -m unix_secs,dpkts,doctets * ftlib: ftstat.c masked tag not restored if filter evaluated to DENY. * ftlib: ftstat.c bucket record count in header not correct. * ftlib: ftstat.c ip-address and ip-port to pick up flow-stat -f7 and -f11 style reports. noted by acidic@apricot.fruit.org * flow-cat / flow-receive: Pay closer attention to FT_FIELD_CAP_START and FT_FIELD_CAP_END so a bogus capture period is not displayed on output from flow-receive > file. noted by ylee@net2phone.com * flow-print: Missing leading 0's on msec formats, noted by ertoz@cs.umn.edu * ftlib: ftfil.c: use consistent naming with flow-report * flow-fanout, flow-receive, flow-capture: handle interrupted recvmsg() syscall which happens on some linux MP configurations. * ftlib: ftfil.c - pps/bps not handled correctly - patch from jon@pdx.edu * flow-print - format 24 from Christian.Bauer@NEFonline.de * flow-import - Cisco NFC format from torppa@polykoira.megabaud.fi * flow-capture - more informative err message on bind() failure - noted by stewart@net.ohio-state.edu * docs: flow-capture.sgml - no -o option - noted by stewart@net.ohio-state.edu * flow-search - remove hard coded path, noted by stewart@net.ohio-state.edu * ftlib: ftdecode.c - ftpdu_verify() can segv on invalid packets < 4 bytes noted by Eric Stewart stewart@net.ohio-state.edu * ftlib: ftfil.c - PERMIT/DENY reversed for many when default PERMIT -- noted by Gerhard.Haindl@t-systems.at * ftlib: ftstat.c - tag mask before filter - noted by wyu@ateneo.edu * 8-27-2002 flow-tools-0.61 released * ftlib: strtoull.c - missing ULLONG_MAX - noted by papaleonardos.3@osu.edu * build: --with-mysql allows path, ie --with-mysql=/usr/local * ftlib: ftstat.c - don't require FT_XFIELD_SRC_MASK / FT_XFIELD_DST_MASK - dynamically add the requirement when FT_STAT_OPT_PREFIX_* is set - noted by mw@uk.yahoo-inc.com * ftlib: ftio.c - more informative warning when trying to process non flow-tools files. * ftlib: ftfile.c - more informative warning when ignoring files. * ftlib: fttag.c - parser requires 'type' for a match and 'term' in a definition. * ftlib: ftdecode.c - allow padded Cat 6K packets. * flow-receive, flow-capture: no longer need ftio_set_xip() - noted by mw@uk.yahoo-inc.com * flow-tag, ftstat: allow retagging - noted by clay@opus.bloomcounty.org * flow-cat: cleanup error message * flow-export: len = 0, mysql typo * ftlib: ftstat.c missed a few , - noted by nik.hinson@assurance-dynamics.com * 8-15-2002 flow-tools-0.60 released * flow-capture,flow-receive,flow-fanout: add filter option. * flow-export: MySQL support based on patch from wyu@ateneo.edu * ftlib: ftfil.c pps and bps filter. * build: scripts in bin directory get installed * build/ftlib: added BSD strtoull.c for DEC portability - noted by shane.dawalt@wright.edu * flow-report: future replacement for flow-stat * ftlib: added ftstat.c - stats and report library * ftlib: FT_RECGET_* macros * docs: updated documentation. * configs: updated asn.txt and asn symbol file * ftlib: fmt.c - fmt_ipv4prefix() was not processing 0/0 correctly. * ftlib: ftfil.c - fix memory leak with ftd->name and ftfil->name * ftlib: ftfil.c - delay primitive resolution until file is parsed -- a filter-definition can precede a filter-primitive * ftlib: ftfil.c - time only primitive implemented. Req by wyu@ateneo.edu * 7-6-2002 flow-tools-0.59 released * build: ftbuild.h created by configure * ftlib: ftfil.c - time -> time-date * flow-cat: -t start_time -T end_time options for file inclusion based on time/date. * contrib: update pyflowtools to pyflowtools-0.3.tar.gz * contrib: updated inter.net to Inter.netPH-1.3.tar.gz * flow-stat: format 23 bug input/output are u_int16 not u_int8. patch from Y.Lachin@transtk.ru * ftlib: ftfil.c - too many hash bits, src/dst reversed, bzero() fed wrong size. Noted by William Emmanuel S. Yu. * flow-receive: tag_active should default to null not "". noted by "Saro Hayan" * 6-11-2002 flow-tools-0.58 released * 0.57 dist stats: 815 downloads (651 unique). 253 mailing list members. * ftlib: fttag.c cleanup, walk_free() * signal() portability, potential SIGCHLD race condition in flow-capture. Noted by Jarkko Torppa * flow-split: split on tags. * flow-filter: -x nexthop_filter patch from Jen Linkova * flow-capture,flow-receive: tagging integration. * ftlib: ftio_header_print() updated for new 8.x agg methods * flow-nfilter: new improved version of flow-filter * ftlib: ftfil.c - new flow filtering library * ftlib: import getdate.c * ftlib: Unitialized variable in ftio_header_print - noted by "Dutky, Steve" * flow-capture,flow-fanout : -p pidfile option. req by "Ed Ravin" * flow-filter,flow-tag,flow-xlate: -k (keep time) option. req by Annie Tong * flow-gen: tos variance, v1005 support * ftlib: byte order fix - noted by Y.h.Lee@motorola.com * ftlib,flow-capture: fix memory leak - noted by Christian.Bauer@NEFkom.de * flow-fanout: missing #include - noted by Gerhard.Haindl@t-systems.at * build: autoconf/automake update 2.53/1.6.1 * 4-20-2002 flow-tools-0.57 released * 0.56 dist stats: 1512 downloads (1269 unique). 209 mailing list members. * flow-print: avoid divide by 0 when processing corrupt flows (dPkts=0) * flow-filter: add -o option to OR instead of AND filters. From Cougar * ftlib: ftfile_pathname() would not properly generate pathnames for nesting level -1 and -2. Patch from Arvids , also fixed by Chris Timmons . * docs: add .sgml source to distribution * contrib: add Robin Sommer's pyflowtools (Python module for ftlib) * contrib: update inter.net * flow-fanout: support multiple exporters. Add -S stat_inverval * flow-tag: new utility. Tag flows using fttag logic. * docs: clean up html formatting of man pages * flow-xlate: add -tT options to mask tag * flow-print: add format 9 for tagged flows * tcp-port: Joe St Sauver - Napster, FastTrack, Gnutella, etc * flow-send: accept -V and -m flags * flow-capture: tcp client support * flow-stat: use system qsort() instead of internal. * build/code: misc harmless compiler warning cleanups * build/code: install ftlib.a in prefix/lib, install ftlib header files in prefix/include. Remove HAVE_CONFIG_H dependency. Combine header files in to ftlib.h * build: ftbuild.sh hostname -s is not portable, whoami may not be in path * ftlib: fttag.c tag flows based on ASN, Prefix, or Next-Hop * ftlib: support.[ch] scan_ip_prefix() * ftlib: ftchash.c sort_offset is not static * flow-xlate: count total flows for -d1 stats, default to no compression * ftlib: import NetBSD radix.c * flow-merge: E. Larry Lidz not processing all flows in certain cases. * flow-export: V1005 mask not set for version 1005 * flow-print: fix -f2 core dump (introduced in 0.56) * flow-export: fix -f1 core dump (introduced in 0.56) * 12-28-2001 flow-tools-0.56 released * cleanup -h in all. Add build information via ftbuild.h * New SGML documentation. * Dave Plonka : patch to allow more file rotations per day. * flow-filter works with the v8 formats. * Jos Backus Superfluous trailing \0's in string literals (actually just need to remove old progname globals) * Maxim Konovalov : use const for fterr_* formats. * Paul Dokas : contrib find_scanners. Perl script to provide compact summarizations of top in/out ip's, ports, etc. * version 8.6 - 8.14 support DESTONLY,SRC_DEST,FULL_FLOW,AS_TOS,PROT_PORT_TOS,SRC_PREFIX_TOS, DST_PREFIX_TOS,PREFIX_TOS,PREFIX_PORT_TOS * -T TCP flags filter option to flow-filter * Robert Wariua rwariua@socrates.Berkeley.EDU : contrib acl-filter.tgz. mrtd + NetFlow. community and as-path acl's. * Updated inter.net contrib. * flow-capture - -R option to specify program to execute on rotate. Based on patch from Stefan Stefanov * flow-capture,flow-receive - store exporter IP when multiple exporters instead of 0. patch from Dave Plonka and Jos Backus * Solaris compile problem - noted by Dave Hartzell * initial support for v1005 - tagged version 5 * off by one malloc() bugs in ftio.c and support.c -- core dump noted by Ferry Korving and probably "Devon True" * flow-cat: o: not i: in getopt - Heiko Schlichting * 7-17-2001 flow-tools-0.55 released * flow-receive,flow-capture: -S option to emit processed packets every n minutes. * flow-receive,flow-capture: accept wildcard source IP, demux on src_ip, dst_ip, and d_version. xlate to common version when possible. * flow-stat: update to use ftsym_*() * flow-stat: format 1,2,3 use hash tables instead of possible overflow * flow-print: wide output option * flow-print: update to use ftsym_*() * ftsym_*() implementation. Dynamic symbol table support. * scan_ip() will try gethostbyname() if arg looks like a hostname. * flow-cat: preload header option (-p). Prescans flow files to create better output header. * Wilhelm Becker set SO_REUSEADDR on multicast socket ttl is u_char, not int * added flow-import: import flows from cflowd or ASCII CSV formats * Dave Plonka - patch for configure to emit an error message if zlib not found. * flow-profile: removed. Outdated ugly hack. * flow-export: cflowd binary file implementation. * fixed off by one bug in fmt_uint8() when formatting value >99 * flow-xlate: Disable header rewrite (stdin) * flow-export: ASCII CSV (comma separated value) implementation. * flow-stat: update to use fts3rec_compute_offsets(). Full support for v8. * flow-stat: engine_type and engine_id reports * added fts3rec_compute_offsets() - provides a cleaner way to handle the many export versions. * 6-22-2001 flow-tools-0.54 released * added flow-xlate. Allow translations including packet/byte scaling, AS 0 substitution, classful address masking, flow mask address masking, and privacy mask. Translate among export version 1, 5, 6, and 7. * Wilhelm Becker - ftio_write() and ftio_close() not properly updating bytes written. Add header size to total size in flow-capture. -E now works in flow-capture again. * added reference to flow-extract in contrib/README * flow-stat: more informative header -- suggested by stanislav shalunov * fixed bug: if using mmap'd files and the flow-file had no records a warning would be displayed and a single corrupt record would be returned by ftio_read() * added Dave Plonka's Cflow perl module to the contrib area. * added inter.net work from Miguel A.L. Paraz and William Emmanuel S. Yu to contrib area. Utils to work with prefix lists and reporting scripts. * flow-stat: format24-26 src prefix, dst prefix, src/dst prefix fopd * committed E. Larry Lidz" flow-merge.c * flow-stat: format23 - Input/Output interface flows,octets,packets,duration * flow-stat: option -w (wide output). Default to not printing duration field. * flow-stat: move large arrays off the stack * flow-stat: implement format21 - src/dst AS flows,octets,packets,duration report * removed -C option to flow-stat (summarize to classful IP networks) -- use flow-xlate instead * flow-stat: implemented sorting options for formats which use hash tables (src ip, dst ip, ip, nexthop, src/dst ip) * integrate Dave Plonka 's offsetof() method for computing structure element offsets. Fixes v1 export packet decode. * Added ToS filter capability to flow-filter * Juniper v8 hack. Juniper sets v8 aggregation version to 0 instead of 2. Reported by Jerome Fleury * updated flow-stat to use ftchash_* * new ftchash_* - generalized constant hash implementation to replace hash_ip*.c * flow-stat - fixed bug in hash_ip.c hash_ip2.c where etime not updated on initial allocation * flow-capture, flow-receive -m option. Mask ip addresses (srcaddr,dstaddr) in version 1,5,6,7 with privacy mask. Defaults to 255.255.255.255. Does not alter multicast S,G's. * flow-capture, flow-send, flow-receive, flow-fanout call bigsockbuf() to allocate large socket buffers instead of setsockopt() directly. * bigsockbuf() implementation. Instead of using a hard coded value when attempting to extend the socket buffer size which can vary among systems, guess, then decrement by 512 bytes on failure until success. Noted by jason@intercom.com * flow-fanout handle signals, log PDU version forwarding. * flow-fanout checks sequence numbers, version, and verifies integrity of received packets before forwarding * flow-capture, flow-fanout utilize fterr_setexit() to ensure removal of pidfile. * fterr_setxit() implementation * flow-gen - do not create bogus flows, use more reasonable initialization. Noted by Robert Hough * flow-stat - ignore bogus 0 packet flows instead of divide by 0 Noted by Robert Hough * working docs/Makefile.am * 4-24-2001 flow-tools-0.53 released * Solaris portability buglets * flow-fanout,flow-receive,flow-capture support joining a multicast group for receiving flows localip/remoteip/port is replaced by s/g/port * flow-send,flow-fanout set the ttl if the destination address is multicast localip/remoteip/port -> localip/remoteip/port/ttl. TTL defaults to 0. * flow-fanout maintaines pidfile * flow-fanout will honor SIGQUIT * flow-capture will unlink pid file on exit * flow-capture log SIGQUIT and SIGHUP * flow-capture will honor SIGQUIT before processing a file * flow-fanout daemonizes by default * flow-fanout,flow-capture,flow-send,flow-receive all use common format to describe peer - localip/remoteip/port * flow-send,flow-fanout can set local IP address when sending * flow-receive,flow-capture,flow-fanout can bind to a specific local IP * added directory support to flow-cat * added directory support to flow-capture and flow-expire * flow-cat all command line options not processed due to unbalanced " * flow-capture - filenames generated have +- GMT offset (example from Dave Plonka ) * ftio_set_ver(): use new ver struct for updating ftio->fth.fields, not old (broken v8 files) * fttlv_enc_uint8(): 1 byte encoding, not 2 (broken v8 files) * 4-8-2001 flow-tools 0.52 released * prepend FT_ to QUEUE* functions to prevent conflicting with BSDI's sys/queue.h * flow-stat.c stat0() also report in realtime. * fterr.c portablilty * 3-14-2001 flow-tools 0.51 released * Fixed byte ordering problem with flow-fanout * Added ToS based format to flow-stat * compsci@cs.fiu.edu time fields byte order problem on BIG_ENDIAN * Added Miguel A.L. Paraz flow-split to contrib * flow-capture header size rewrite fix * fixed longword alignment problem in ftio_write_header() * generalized error/warning/info with fterr_*() * 3-11-2001 flow-tools 0.50 released * added mmap() support for reading flows. flow-cat can enable it. * initial implementation of ifName:ifIndex and alias mappings. flow-receive and flow-capture will add the mappings if they exist. * added SECURITY document * flow-cat handles ^C * new tool, flow-split. Split a flow stream based on # of flows or time * fixed sequence # calculation when encoding * stream version 3 -- variable length header, exporter ip in flows. note, version 2 not supported. * fixed memory dealloc / potential core dump on exit bug in flow-dscan.c * new utility flow-header to just dump the header of a file/stream * flow-capture and flow-receive update lost flows and sequence resets in header * flow-receive rewrites header on close and updates fields properly * flow-capture and flow-receive update new exporter_ip field in header * 2-21-2001 flow-tools 0.411 released * Andrey Zolotnicky" detach in flow-capture main() shadows global * Andrey Zolotnicky" ftpdu_check_seq() fix * 2-20-2001 flow-tools 0.41 released * html and man docs included in make dist * ftpdu_check_seq() implementation. Check and report errors with received sequence numbers * include everything needed for lex/yacc to build acl* including yyerror() for linux * use autoconf macros to include string.h / strings.h * All files use config.h * inspect return val of ftio_set_version() to bomb out earlier * ftio_init(), and ftio_set_version properly return error * flow-gen uses same -V format as flow-receive and flow-capture * flow-receive and flow-capture have -I and -V options. -I required for flow-capture * resurrected flow-export hack to dump flows in pcap format * ftset_init() - code simplify/cleanup * AS 0 substitition option in flow-receive and flow-capture * CFLAGS = -g -ansi -Wall * ftio_set_nflows() uses u_int32 not u_int64 * flow-capture not properly updating nflows in header * ftpdu_verify() implemented * Miguel A.L. Paraz" - linux modifies timeval after select() - fixed flow-capture.c and flow-fanout.c * 2-11-2001 flow-tools 0.40 released * FT_IO_MAXDECODE and FT_IO_MAXENCODE bumped up to 4K flow-tools-0.68/compile0000755000076600007660000000532607470616150010643 #! /bin/sh # Wrapper for compilers which do not understand `-c -o'. # Copyright 1999, 2000 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Usage: # compile PROGRAM [ARGS]... # `-o FOO.o' is removed from the args passed to the actual compile. prog=$1 shift ofile= cfile= args= while test $# -gt 0; do case "$1" in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we do something ugly here. ofile=$2 shift case "$ofile" in *.o | *.obj) ;; *) args="$args -o $ofile" ofile= ;; esac ;; *.c) cfile=$1 args="$args $1" ;; *) args="$args $1" ;; esac shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$prog" $args fi # Name of file we expect compiler to create. cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` # Create the lock directory. # Note: use `[/.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d while true; do if mkdir $lockdir > /dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir $lockdir; exit 1" 1 2 15 # Run the compile. "$prog" $args status=$? if test -f "$cofile"; then mv "$cofile" "$ofile" fi rmdir $lockdir exit $status flow-tools-0.68/configs/0000777000076600007660000000000010240421707010762 5flow-tools-0.68/configs/asn.sym0000644000076600007660000320515607643062405012236 1 GNTY-1 2 DCN-AS 3 MIT-GATEWAYS 4 ISI-AS 5 SYMBOLICS 6 BULL-HN 7 UK-MOD 8 RICE-AS 9 CMU-ROUTER 10 CSNET-EXT-AS 11 HARVARD 12 NYU-DOMAIN 13 BRL-AS 14 COLUMBIA-GW 15 NET-DYNAMICS-EXP 16 LBL 17 PURDUE 18 UTEXAS 19 CSS-DOMAIN 20 UR 21 RAND 22 NOSC 23 RIACS-AS 24 AMES-NAS-GW 25 UCB 26 CORNELL 27 UMDNET 28 DFVLR-SYS 29 YALE-AS 30 SRI-AICNET 31 CIT 32 STANFORD 33 DEC-WRL-AS 34 UDELNET 35 MICATON 36 EGP-TESTOR 37 NSWC 38 UIUC 39 NRL-ITD 40 MIT-TEST 41 AMES 42 WOODYNET-1 43 BNL-AS 44 S1-DOMAIN 45 LLL-TIS-AS 46 RUTGERS 47 USC-OBERON 48 NRL-AS 49 ICST-AS 50 ORNL-MSRNET 51 USAREUR-EM-AS 52 UCLA 53 NORTHROP-AS 54 COA-FIN-NET-AS 55 UPENN-CIS 56 OPTIMIS-P 57 UMN-REI-UC 58 DREA-AS 59 WISC-MADISON-AS 60 DARPA-BFLY 61 DEC-MARLBORO-AS 62 TEKVAXC 63 LL-MI 64 MITRE-B-AS 65 LOGNET-AS 66 ETL-AI 67 SDC-PRC-AS 68 LANL-INET-AS 69 WHARTON-AS 70 NLM-GW 71 HP-INTERNET-AS 72 SCHLUMBERGER-AS 73 WASHINGTON-AS 74 XDRENET-AS 75 ANL-AS 76 SDC-CAM-AS 77 JHUAPL-AS 78 SYNTEGRA 79 DSPO-HC-AS 80 GE-CRD 81 CONCERT 82 TWG-DEMO-AS 83 PICANET-AS 84 DTNSRDC-AS1 85 AERO-NET 86 GENUITY-AS86 87 INDIANA-AS 88 PRINCETON-AS 89 NUSC-CSTLNET-AS 90 SUN-AS 91 RPI-AS 92 CLARKSON-AS 93 VRIO-93 94 BELVOIR-NET 95 NUSCLSB1 96 JTELS-BEN1-AS 97 VERIO-EC 98 ROCKEFELLER-AS 99 INTEL-IWARP 100 FMC-CTC 101 WASH-NSF-AS 102 NSF-HQ-AS 103 NWU-AS 104 COLORADO-AS 105 MOT-MCD-AS 106 GTEGSC-WLO 107 ECSNET-AS 108 XEROX-AS 109 CISCOSYSTEMS 110 XAIT-AS 111 BOSTONU-AS 112 ROOTSERV 113 SCCNET-AS 114 VRIO-114 115 PBAS-BEN2-GW-AS 116 TELCORDIA 117 ALBM-NET-AS 118 NSWSES-NAVY-AS 119 AMS-AS 120 MITRE-OMAHA 121 IH-POE-AS 122 U-PGH-NET-AS 123 LOGAIRCOMNET-AS 124 ENCORE-GW-AS 125 HI-NET-AS 126 MINSY-POE-AS 127 JPL-AS 128 ADS-AS 129 CDA-AS 130 CSOCNET-AS 131 UCSB-NET-AS 132 WPAFB-CSD-NET-AS 133 AFIT-AS 134 CORONA-GW-AS 135 BRL-CDCNET-GW-AS 136 ECONET-AS 137 ITALY-AS 138 BRL-CMCGW-AS 139 NUWESNET-AS 140 DAITC-NET-AS 141 NWCNET-AS 142 WESTPOINT 143 OOG1-AS 144 ATT-INTERNET 145 VBNS 146 HQEIS-AS 147 NAVCAMS-LAN-AS 148 NWSC-GW-AS 149 ADEL-AS 150 SEANET-AS 151 IND-NTC-AS 152 SRI-ACCATT-AS 153 SAAD-ARPA-AS 154 USACEC-NET-AS 155 CACNET-AS 156 NORTHEASTERN-GW-AS 157 INTELLIAUTON 158 ACC-AS 159 SONNET-AS 160 U-CHICAGO-AS 161 TI-AS 162 NOSL-POE-AS 163 IBM-RESEARCH-AS 164 DDN-MB-AS 165 NESEA-DDN-GW-AS 166 IDA-AS 167 WESLEYAN-AS 168 UMASS-AMHERST 169 HANSCOM-NET-AS 170 YKTNPOE-GW-AS 172 CSDA-AS 173 ECLNET 174 PSINET 175 AFWL-AS 176 BCN-AS 177 MERIT-AS 178 IBMYORKTOWN-AS 179 IBMMILFORD-AS 180 MCIRESTON-AS 181 NSFNETTEST1-AS 182 NSFNETTEST2-AS 183 NSFNETTEST3-AS 184 NSFNETTEST4-AS 185 NSFNETTEST5-AS 186 CUA-AS 188 SAIC-AS 189 GENUITY-AS189 190 NSYPTSMH-POE-AS 191 NORDA-AS 192 ROCHINSTTECH 193 FORD-ASN 194 USAN-AS 195 SDSC-AS 196 RISC-SYSTEM 197 RAYTHEON-AS-2 198 ARL-SNI-AS 199 GENUITY-AS199-203 200 GENUITY-AS199-203 201 GENUITY-AS199-203 202 GENUITY-AS199-203 203 GENUITY-AS199-203 204 PSCNET-AS 205 MONTCLAIR-AS 206 CSC-LONS-GW-AS 207 CLI-GW-AS 208 LBNS-POE-AS 209 ASN-QWEST 210 WEST-NET-WEST 211 RADC-LONS-GW-AS 212 HQAFSC-LONS-GW-AS 213 APGEA-NET1-AS 214 USNA-AS 215 RIA-2-AUTO-AS 216 LMSC-HOSTNET-AS 217 UMN-AGS-NET-AS 218 AFOTECPCNET-AS 219 PUGET-POE-AS 220 OOALC-HOSTNET-AS 221 WRALC-HOSTNET-AS 222 SMALC-HOSTNET-AS 223 TISW-AS 224 UNINETT-AS 225 VIRGINIA-AS 226 LOS-NETTOS-AS 227 SHAFTER-AS 228 DC-SUN-NET-AS 229 NSFNETTEST6-AS 230 NSFNETTEST7-AS 231 NSFNETTEST8-AS 232 NSFNETTEST9-AS 233 NSFNETTEST10-AS 234 BLACKROSE-1 235 NSFNETTEST12-AS 236 NSFNETTEST13-AS 237 NSFNETTEST14-AS 238 NSFNETTEST15-AS 239 UTORONTO-AS 240 SAALC-HOSTNET-AS 241 OCALC-HOSTNET-AS 242 SSSD-AS 243 HARRIS-ATD-AS 244 ITT-FEC-AS 245 PRC-AS 246 ASIFICS-GW-AS 247 ROMENET-AS 248 OBL-LINK-AS 249 RDM-LINK-AS 250 LON-LINK-AS 251 CPO-LINK-AS 252 CECOM-A-TACT 253 VRIO253 254 TWG-NET-AS 255 PAFB-GW 256 NCSC-NET-AS 257 NPS-GATOR-AS 258 BRAGGSRI-EGP-AS 259 SCUBED-AS 260 DSI-WR-15 261 EASINET-AS 262 VRIO-262-3 263 VRIO-262-3 264 SRINET-AS 265 DSI-WR-16 267 NETHER-NET 268 USUHSNET-AS 269 INCSYS-AS 270 PSCNI-AS 271 BCNET-AS 272 FTLEENET-AS 273 DARPA-CISCO-AS 274 SOFT-CON-NTS-AS 275 VRIO-275 276 UTX-AUS 277 GENUITY-AS277 278 RAM-AS 279 GENUITY-AS279 280 VRIO-280 281 GENUITY-AS281 282 MERIT-AUX-AS 284 UUNET-AS 285 AVTROS-AS 286 EUNET-AS 287 CNSYD-POE-AS 288 ESA-AS 289 APGNET-AS 290 SHOWNET-AS 291 ESNET-EAST291 292 ESNET-CENTRAL292 293 ESNET-WEST293 294 FRANCE-IP-NET-AS 295 OSI-GW-AS 296 ACFP-NET-TST-AS 297 NSN-UMD-AS 298 RADC-LONEX-AS 299 UCINET-AS 300 GUNTER-LAN-AS 301 C3PO-AS 302 BCM-INFO-NET-AS 303 NPRDC-AS 304 SRIEXPRIGNET-AS 305 WALTER-REED-AS 306 NGNET-AS 307 NGNET-AS 308 NGNET-AS 309 NGNET-AS 310 NGNET-AS 311 NGNET-AS 312 NGNET-AS 313 NGNET-AS 314 NGNET-AS 315 NGNET-AS 316 NGNET-AS 317 NGNET-AS 318 NGNET-AS 319 NGNET-AS 320 NGNET-AS 321 NGNET-AS 322 NGNET-AS 323 NGNET-AS 324 NGNET-AS 325 NGNET-AS 326 NGNET-AS 327 NGNET-AS 328 NGNET-AS 329 NGNET-AS 330 NGNET-AS 331 NGNET-AS 332 NGNET-AS 333 NGNET-AS 334 NGNET-AS 335 NGNET-AS 336 NGNET-AS 337 NGNET-AS 338 NGNET-AS 339 NGNET-AS 340 NGNET-AS 341 NGNET-AS 342 NGNET-AS 343 NGNET-AS 344 NGNET-AS 345 NGNET-AS 346 NGNET-AS 347 NGNET-AS 348 NGNET-AS 349 NGNET-AS 350 NGNET-AS 351 NGNET-AS 352 NGNET-AS 353 NGNET-AS 354 NGNET-AS 355 NGNET-AS 356 NGNET-AS 357 NGNET-AS 358 NGNET-AS 359 NGNET-AS 360 NGNET-AS 361 NGNET-AS 362 NGNET-AS 363 NGNET-AS 364 NGNET-AS 365 NGNET-AS 366 NGNET-AS 367 NGNET-AS 368 NGNET-AS 369 NGNET-AS 370 NGNET-AS 371 NGNET-AS 372 NSN-AMES-AS 373 IE-TESTBED-AS 374 BROOKS-AS 375 TIETOTIE-AS 376 RISQ-AS 377 SNLA-NET-AS 378 ILAN-AS 379 AFCONC-BLOCK1-AS 380 AFCONC-BLOCK1-AS 381 AFCONC-BLOCK1-AS 382 AFCONC-BLOCK1-AS 383 AFCONC-BLOCK1-AS 384 AFCONC-BLOCK1-AS 385 AFCONC-BLOCK1-AS 386 AFCONC-BLOCK1-AS 387 AFCONC-BLOCK1-AS 388 AFCONC-BLOCK1-AS 389 AFCONC-BLOCK1-AS 390 AFCONC-BLOCK1-AS 391 AFCONC-BLOCK1-AS 392 AFCONC-BLOCK1-AS 393 AFCONC-BLOCK1-AS 394 AFCONC-BLOCK1-AS 395 AFCONC-BLOCK1-AS 396 AFCONC-BLOCK1-AS 397 AFCONC-BLOCK1-AS 398 AFCONC-BLOCK1-AS 399 AFCONC-BLOCK1-AS 400 AFCONC-BLOCK1-AS 401 AFCONC-BLOCK1-AS 402 AFCONC-BLOCK1-AS 403 AFCONC-BLOCK1-AS 404 AFCONC-BLOCK1-AS 405 AFCONC-BLOCK1-AS 406 AFCONC-BLOCK1-AS 407 AFCONC-BLOCK1-AS 408 AFCONC-BLOCK1-AS 409 AFCONC-BLOCK1-AS 410 AFCONC-BLOCK1-AS 411 AFCONC-BLOCK1-AS 412 AFCONC-BLOCK1-AS 413 AFCONC-BLOCK1-AS 414 AFCONC-BLOCK1-AS 415 AFCONC-BLOCK1-AS 416 AFCONC-BLOCK1-AS 417 AFCONC-BLOCK1-AS 418 AFCONC-BLOCK1-AS 419 AFCONC-BLOCK1-AS 420 AFCONC-BLOCK1-AS 421 AFCONC-BLOCK1-AS 422 AFCONC-BLOCK1-AS 423 AFCONC-BLOCK1-AS 424 AFCONC-BLOCK1-AS 425 AFCONC-BLOCK1-AS 426 AFCONC-BLOCK1-AS 427 AFCONC-BLOCK1-AS 428 AFCONC-BLOCK1-AS 429 AFCONC-BLOCK1-AS 430 AFCONC-BLOCK1-AS 431 AFCONC-BLOCK1-AS 432 AFCONC-BLOCK1-AS 433 AFCONC-BLOCK1-AS 434 AFCONC-BLOCK1-AS 435 AFCONC-BLOCK1-AS 436 AFCONC-BLOCK1-AS 437 AFCONC-BLOCK1-AS 438 AFCONC-BLOCK1-AS 439 AFCONC-BLOCK1-AS 440 AFCONC-BLOCK1-AS 441 AFCONC-BLOCK1-AS 442 AFCONC-BLOCK1-AS 443 AFCONC-BLOCK1-AS 444 AFCONC-BLOCK1-AS 445 AFCONC-BLOCK1-AS 446 AFCONC-BLOCK1-AS 447 AFCONC-BLOCK1-AS 448 AFCONC-BLOCK1-AS 449 AFCONC-BLOCK1-AS 450 AFCONC-BLOCK1-AS 451 AFCONC-BLOCK1-AS 452 AFCONC-BLOCK1-AS 453 AFCONC-BLOCK1-AS 454 AFCONC-BLOCK1-AS 455 AFCONC-BLOCK1-AS 456 AFCONC-BLOCK1-AS 457 AFCONC-BLOCK1-AS 458 AFCONC-BLOCK1-AS 459 AFCONC-BLOCK1-AS 460 AFCONC-BLOCK1-AS 461 AFCONC-BLOCK1-AS 462 AFCONC-BLOCK1-AS 463 AFCONC-BLOCK1-AS 464 AFCONC-BLOCK1-AS 465 AFCONC-BLOCK1-AS 466 AFCONC-BLOCK1-AS 467 AFCONC-BLOCK1-AS 468 AFCONC-BLOCK1-AS 469 AFCONC-BLOCK1-AS 470 AFCONC-BLOCK1-AS 471 AFCONC-BLOCK1-AS 472 AFCONC-BLOCK1-AS 473 AFCONC-BLOCK1-AS 474 AFCONC-BLOCK1-AS 475 AFCONC-BLOCK1-AS 476 AFCONC-BLOCK1-AS 477 AFCONC-BLOCK1-AS 478 AFCONC-BLOCK1-AS 479 AFCONC-BLOCK1-AS 480 AFCONC-BLOCK1-AS 481 AFCONC-BLOCK1-AS 482 AFCONC-BLOCK1-AS 483 AFCONC-BLOCK1-AS 484 AFCONC-BLOCK1-AS 485 AFCONC-BLOCK1-AS 486 AFCONC-BLOCK1-AS 487 AFCONC-BLOCK1-AS 488 AFCONC-BLOCK1-AS 489 AFCONC-BLOCK1-AS 490 AFCONC-BLOCK1-AS 491 AFCONC-BLOCK1-AS 492 AFCONC-BLOCK1-AS 493 AFCONC-BLOCK1-AS 494 AFCONC-BLOCK1-AS 495 AFCONC-BLOCK1-AS 496 AFCONC-BLOCK1-AS 497 AFCONC-BLOCK1-AS 498 AFCONC-BLOCK1-AS 499 AFCONC-BLOCK1-AS 500 AFCONC-BLOCK1-AS 501 AFCONC-BLOCK1-AS 502 AFCONC-BLOCK1-AS 503 AFCONC-BLOCK1-AS 504 AFCONC-BLOCK1-AS 505 AFCONC-BLOCK1-AS 506 AFCONC-BLOCK1-AS 507 AFCONC-BLOCK1-AS 508 AFCONC-BLOCK1-AS 509 WORMS-GW1-AS 510 CSNET-INT-AS 511 CSNET-MIS-AS 512 NAVDEC-NET1 514 EDMICS-POE 515 PMS312GATE-ASN 516 KODAK-BTC 517 XLINK-UKA 518 CONCORD-POE-AS 519 ISCNET 520 COINSDISNET3 521 FORD-SRL-AS 522 AFSC-SSD-AS 523 REDSTONE-AS 524 GENUITY-AS524 525 WUERZBURG-GW1-AS 526 ASCHAFFENBURG-GW1-AS 527 ANSBACH-GW1-AS 528 AUGSBURG-GW1-AS 529 BURTONWOOD-GW1-AS 530 GEOPPINGEN-GW1-AS 531 GRAFENWOEHR-GW1-AS 532 HEIDELBERG-GW1-AS 533 HEILBRONN-GW1-AS 534 KARLSRUHE-GW1-AS 535 MUNICH-GW1-AS 536 NUERNBERG-GW1-AS 537 ULM-GW1-AS 538 SCHWEINFURT-GW1-AS 539 STUTTGART-GW1-AS 540 BAMBERG-GW1-AS 541 IGAUTON 542 ARNET 543 CONVEX 544 SONERA 545 NRI 546 SPARTA-AS 547 TST-RGN-47-AS 548 HQUSAF-AS 549 ONET-AS 550 CORNETT-AS 551 TIS-AS 552 PATCH-AS 553 BELWUE-AS 554 CALINET-AS 555 NETWORKCS 556 CALREN-AS 557 UMAINE-SYS-AS 558 OLIVETTI-AS1 559 SWITCH-AS 560 GENUITY-AS560 561 3COM-A 562 3COM-B 563 3COM-C 564 OPSNET 565 VTTNET-AS 566 CSSP-ASN 567 ASN-DART-AS 568 SUMNET-AS 569 DIMNET-AS 570 SSD-NET-AS 571 CENTCOM-AS 573 NAVDEC-NET3-AS 574 PSC-TEST-AS 575 WIESBADDN-GW1 576 NAVDAC-NET3-AS 577 BACOM 580 MAINZ-GW1-AS 581 GDSS-XRSNET-AS 582 GDSS-21AF-AS 583 GDSS-22AF-AS 584 GDSS-23AF-AS 585 GDSS-322ALD-AS 586 GDSS-834ALD-AS 587 GDSS-ANG-AS 588 FRANKFRT-GW1-AS 589 UNT-CAMPUS-AS 590 EASINET-AS1 591 NSTN-AS 592 USNA-NADN-AS 593 EASINET-AS1 594 GENUITY-AS594-598 595 GENUITY-AS594-598 596 GENUITY-AS594-598 597 GENUITY-AS594-598 598 GENUITY-AS594-598 599 NISC-AS 600 OARNET-AS 601 BACOM4-AS 602 BACOM3-AS 603 BACOM2-AS 610 CANET10-AS 611 CANET11-AS 612 CANET12-AS 613 ARCO-AS 614 CSUNET-AS 615 AS-RITCHIE-GW1 616 PENS-NET-AS 617 PENS-NET-AS 618 PENS-NET-AS 619 PENS-NET-AS 620 PENS-NET-AS 621 PENS-NET-AS 622 PENS-NET-AS 623 PENS-NET-AS 624 PENS-NET-AS 625 PENS-NET-AS 626 PENS-NET-AS 627 PENS-NET-AS 628 PENS-NET-AS 629 PENS-NET-AS 630 PENS-NET-AS 631 PENS-NET-AS 632 PENS-NET-AS 633 PENS-NET-AS 634 PENS-NET-AS 635 PENS-NET-AS 636 PENS-NET-AS 637 PENS-NET-AS 638 PENS-NET-AS 639 PENS-NET-AS 640 PENS-NET-AS 641 PENS-NET-AS 642 PENS-NET-AS 643 PENS-NET-AS 644 PENS-NET-AS 645 PENS-NET-AS 646 PENS-NET-AS 647 PENS-NET-AS 648 PENS-NET-AS 649 PENS-NET-AS 650 PENS-NET-AS 651 PENS-NET-AS 652 PENS-NET-AS 653 PENS-NET-AS 654 PENS-NET-AS 655 PENS-NET-AS 656 PENS-NET-AS 657 PENS-NET-AS 658 PENS-NET-AS 659 PENS-NET-AS 660 PENS-NET-AS 661 PENS-NET-AS 662 PENS-NET-AS 663 PENS-NET-AS 664 PENS-NET-AS 665 PENS-NET-AS 666 CSTA-CISCO-AS 667 FSTC-MIL-AS 668 ASN-ASNET-NET-AS 669 OFRIR-IP-INTERNET-AS 670 DARMSTADT-GW1-AS 671 BAUMHOLDER-GW1-AS 672 FULDA-GW1-AS 673 HANAU-GW1-AS 674 BBN-DSI 675 MSUS-AS 676 ARNET-AS 677 ASU-AS 678 NTSC-IELN-AS 679 TUNET-AS 680 DFN-WIN-AS 681 KAWAIHIKO-1 682 AS-ORNL-IGRP1-AS 683 ARGONNE-AS 684 MBNET-AS 685 VRIO-685 686 OSD-GW-AS 687 NATC-CSDRD-AS 688 RECNET-AS 689 AS-NSFNET-T3-BB-AS 690 NSFNET-T3-RT-AS 691 PEINET-AS 692 SEMATECH-AS 693 NOTRE-DAME-AS 694 UTACCS-ASN 695 SWITCH-R1-AS 696 SWITCH-R2-AS 697 EASINET-AS2 698 ASN-UIUC-REGION-AS 700 ROKNET-AS 701 ALTERNET-AS 702 ALTERNET-AS 703 ALTERNET-AS 704 ALTERNET-AS 705 ALTERNET-AS 706 TEST-AUSTIN-IBM-AS 707 ELAN-AS 708 SB-COMM-AS 709 UHEY-NET-AS 710 BENT-NET-AS 711 SB-COMM-AS 712 ALCON-NET-AS 713 AFMPCGW-AS 714 APPLE-ENGINEERING 715 ZOCALO-AS 716 ZAMA-AS 717 PEOCU-NET-AS 718 SEABAT-AS 719 LANLINK-AS 720 WR-LOGDIS-AS 721 DLA-ASNBLOCK-AS 722 DLA-ASNBLOCK-AS 723 DLA-ASNBLOCK-AS 724 DLA-ASNBLOCK-AS 725 DLA-ASNBLOCK-AS 726 DLA-ASNBLOCK-AS 727 AFCONC-BLOCK2-AS 728 AFCONC-BLOCK2-AS 729 AFCONC-BLOCK2-AS 730 AFCONC-BLOCK2-AS 731 AFCONC-BLOCK2-AS 732 AFCONC-BLOCK2-AS 733 AFCONC-BLOCK2-AS 734 AFCONC-BLOCK2-AS 735 AFCONC-BLOCK2-AS 736 AFCONC-BLOCK2-AS 737 AFCONC-BLOCK2-AS 738 AFCONC-BLOCK2-AS 739 AFCONC-BLOCK2-AS 740 AFCONC-BLOCK2-AS 741 AFCONC-BLOCK2-AS 742 AFCONC-BLOCK2-AS 743 AFCONC-BLOCK2-AS 744 AFCONC-BLOCK2-AS 745 AFCONC-BLOCK2-AS 746 AFCONC-BLOCK2-AS 747 TAEGU-AS 748 USCAPAC-AS 749 ANAD-AS 750 NSFNETTEST16-AS 751 NSFNETTEST17-AS 752 NSFNETTEST18-AS 753 NSFNETTEST19-AS 754 NSFNETTEST20-AS 755 NSFNETTEST21-AS 756 NSFNETTEST22-AS 757 NSFNETTEST23-AS 758 NSFNETTEST24-AS 759 NSFNETTEST25-AS 760 UNIVIE-AS 761 TIETORAITTI-AS 762 WELLFLEET-AS 763 SQNT-TEAMNET-AS 764 VN-VERKKO-AS 765 DCA-JDSSC 766 IRIS-AS 767 NTSC-PEN-AS 768 NCCS-A-AS 769 NTSC-LANT-AS 770 NTSC-PAC-AS 771 NSN-RICE-AS 772 WALTER-REED1-AS 773 SPARTA-MD-AS 774 OFRIR-IP-ASNBLOCK-AS 775 OFRIR-IP-ASNBLOCK-2 776 OFRIR-IP-ASNBLOCK-3 777 OFRIR-IP-ASNBLOCK-4 778 OFRIR-IP-ASNBLOCK-5 779 OFRIR-IP-ASNBLOCK-6 780 ARAMIS 781 OFRIR-IP-ASNBLOCK-7 782 OFRIR-IP-ASNBLOCK-8 783 OFRIR-IP-ASNBLOCK-9 784 HJFNET-AS 785 ASN-ETLASN-AS 786 JANET 787 CRCASN-AS 788 SUBMEPP-ASN 789 IN2P3-LYON-AS 790 FUUG-NET-AS-AS 791 DWS-ASN 792 ORACLE-ASNBLOCK-ASN 793 ORACLE-ASNBLOCK-ASN 794 ORACLE-ASNBLOCK-ASN 795 AMERITECH-AS 796 AMERITECH-AS 797 AMERITECH-AS 798 BERLIN-ASN-AS 799 HDLBRG-ASN-AS 800 CABLEATLANTIC 801 MFRC1-AS 802 YORKU-AS 803 SASKTEL 804 ISTS-AS-AS 805 CANET1-ASN 806 ALCIDE-AS 807 CANET1-ASN-2 808 CANET1-ASN-3 809 CANET1-ASN-4 810 SSCWEST 811 SSCEAST 812 ROGERS-AS 813 UUNET-AS1 814 UUNET-AS2 815 UUNET-AS3 816 UUNET-AS4 817 UUNET-AS5 818 DOC-AS 819 LARG-NET 820 ISTC-AS 821 DISC 822 STJOSEPHS-AS 823 UWO-AS 824 GLAXOCA-AS 825 CFWS-NET 826 CRTC-GC-AS 827 ALCAN-AS 828 NLC-BNC-GC-AS 829 SYGMA-INT-OR 830 SYGMA-INT-QR 831 SYGMA-EXT-OR 832 SYGMA-EXT-QR 833 CANET1-ASN-5 834 ATTCLDS-MIS 835 CANET1-ASN-6 836 CANET1-ASN-7 837 RCMP 838 CANET2-ASN 839 CANET2-ASN 840 CANET2-ASN 841 CANET2-ASN 842 CANET2-ASN 843 REPTILIAN-ASN 844 CANET3-ASN 845 CANET3-ASN-2 846 CANET3-ASN-3 847 CANET3-ASN-4 848 CANET3-ASN-5 849 CANET3-ASN-6 850 CANET3-ASN-7 851 RISQ-QIX 852 ASN852 853 CANET-ASN-2 854 CANET-ASN-3 855 CANET-ASN-4 856 NBIX4 857 CANET-ASN 858 CANET-ASN 859 CANET-ASN 860 CANET-ASN 861 CANET-ASN 862 CANET-ASN 863 CANET-ASN 864 CANET-ASN 865 CANET-ASN 866 CANET-ASN 867 CANET-ASN 868 CANET-ASN 869 CANET-ASN 870 CANET-ASN 871 CANET-ASN 872 CANET-ASN 873 CANET-ASN 874 CANET-ASN 875 CANET-ASN 876 CANET-ASN 877 CANET-ASN 878 CANET-ASN 879 CANET-ASN 880 CANET-ASN 881 CANET-ASN 882 CANET-ASN 883 CANET-ASN 884 CANET-ASN 885 CANET-ASN 886 CANET-ASN 887 CANET-ASN 888 CANET-ASN 889 CANET-ASN 890 CANET-ASN 891 CANET-ASN 892 CANET-ASN 893 CANET-ASN 894 CANET-ASN 895 CANET-ASN 896 CANET-ASN 897 CANET-ASN 898 CANET-ASN 899 CANET-ASN 900 CANET-ASN 901 CANET-ASN 902 CANET-ASN 903 CANET-ASN 904 CANET-ASN 905 CANET-ASN 906 CANET-ASN 907 CANET-ASN 908 CANET-ASN 909 CANET-ASN 910 CANET-ASN 911 CANET-ASN 912 CANET-ASN 913 CANET-ASN 914 CANET-ASN 915 CANET-ASN 916 CANET-ASN 917 CANET-ASN 918 CANET-ASN 919 CANET-ASN 920 CANET-ASN 921 CANET-ASN 922 CANET-ASN 923 CANET-ASN 924 CANET-ASN 925 CANET-ASN 926 CANET-ASN 927 CANET-ASN 928 CANET-ASN 929 CANET-ASN 930 CANET-ASN 931 CANET-ASN 932 CANET-ASN 933 CANET-ASN 934 CANET-ASN 935 CANET-ASN 936 CANET-ASN 937 CANET-ASN 938 CANET-ASN 939 CANET-ASN 940 CANET-ASN 941 CANET-ASN 942 CANET-ASN 943 CANET-ASN 944 CANET-ASN 945 CANET-ASN 946 CANET-ASN 947 CANET-ASN 948 CANET-ASN 949 CANET-ASN 950 CANET-ASN 951 CANET-ASN 952 CANET-ASN 953 CANET-ASN 954 CANET-ASN 955 CANET-ASN 956 CANET-ASN 957 CANET-ASN 958 CANET-ASN 959 CANET-ASN 960 CANET-ASN 961 CANET-ASN 962 CANET-ASN 963 CANET-ASN 964 CANET-ASN 965 CANET-ASN 966 CANET-ASN 967 CANET-ASN 968 CANET-ASN 969 CANET-ASN 970 CANET-ASN 971 CANET-ASN 972 CANET-ASN 973 CANET-ASN 974 CANET-ASN 975 CANET-ASN 976 CANET-ASN 977 CANET-ASN 978 CANET-ASN 979 CANET-ASN 980 CANET-ASN 981 CANET-ASN 982 CANET-ASN 983 CANET-ASN 984 CANET-ASN 985 CANET-ASN 986 CANET-ASN 987 CANET-ASN 988 CANET-ASN 989 CANET-ASN 990 CANET-ASN 991 CANET-ASN 992 CANET-ASN 993 CANET-ASN 994 CANET-ASN 995 CANET-ASN 996 CANET-ASN 997 CANET-ASN 998 CANET-ASN 999 CANET-ASN 1000 CANET-ASN 1001 CANET-ASN 1002 CANET-ASN 1003 CANET-ASN 1004 CANET-ASN 1005 CANET-ASN 1006 CANET-ASN 1007 CANET-ASN 1008 CANET-ASN 1009 CANET-ASN 1010 CANET-ASN 1011 CANET-ASN 1012 CANET-ASN 1013 CANET-ASN 1014 CANET-ASN 1015 CANET-ASN 1016 CANET-ASN 1017 CANET-ASN 1018 CANET-ASN 1019 CANET-ASN 1020 CANET-ASN 1021 CANET-ASN 1022 CANET-ASN 1023 CANET-ASN 1024 CANET-ASN 1025 CANET-ASN 1026 CANET-ASN 1027 CANET-ASN 1028 CANET-ASN 1029 CANET-ASN 1030 CANET-ASN 1031 CANET-ASN 1032 CANET-ASN 1033 CANET-ASN 1034 CANET-ASN 1035 CANET-ASN 1036 CANET-ASN 1037 CANET-ASN 1038 CANET-ASN 1039 CANET-ASN 1040 CANET-ASN 1041 CANET-ASN 1042 CANET-ASN 1043 CANET-ASN 1044 CANET-ASN 1045 CANET-ASN 1046 CANET-ASN 1047 CANET-ASN 1048 CANET-ASN 1049 CANET-ASN 1050 CANET-ASN 1051 CANET-ASN 1052 CANET-ASN 1053 CANET-ASN 1054 CANET-ASN 1055 CANET-ASN 1056 CANET-ASN 1057 CANET-ASN 1058 CANET-ASN 1059 CANET-ASN 1060 CANET-ASN 1061 CANET-ASN 1062 CANET-ASN 1063 CANET-ASN 1064 CANET-ASN 1065 CANET-ASN 1066 CANET-ASN 1067 CANET-ASN 1068 CANET-ASN 1069 CANET-ASN 1070 CANET-ASN 1071 CANET-ASN 1072 CANET-ASN 1073 CANET-ASN 1074 CANET-ASN 1075 CANET-ASN 1076 CANET-ASN 1077 CANET-ASN 1078 CANET-ASN 1079 CANET-ASN 1080 CANET-ASN 1081 CANET-ASN 1082 CANET-ASN 1083 CANET-ASN 1084 CANET-ASN 1085 CANET-ASN 1086 CANET-ASN 1087 CANET-ASN 1088 CANET-ASN 1089 CANET-ASN 1090 CANET-ASN 1091 CANET-ASN 1092 CANET-ASN 1093 CANET-ASN 1094 CANET-ASN 1095 CANET-ASN 1096 CANET-ASN 1097 CANET-ASN 1098 CANET-ASN 1099 CANET-ASN 1100 CANET-ASN 1101 SURFNET-AS 1102 SURFNET-AS 1103 SURFNET-AS 1104 SURFNET-AS 1105 SURFNET-AS 1106 SURFNET-AS 1107 SURFNET-AS 1108 SURFNET-AS 1109 SURFNET-AS 1110 SURFNET-AS 1111 SURFNET-AS 1112 SURFNET-AS 1113 SURFNET-AS 1114 SURFNET-AS 1115 SURFNET-AS 1116 SURFNET-AS 1117 SURFNET-AS 1118 SURFNET-AS 1119 SURFNET-AS 1120 SURFNET-AS 1121 SURFNET-AS 1122 SURFNET-AS 1123 SURFNET-AS 1124 SURFNET-AS 1125 SURFNET-AS 1126 SURFNET-AS 1127 SURFNET-AS 1128 SURFNET-AS 1129 SURFNET-AS 1130 SURFNET-AS 1131 SURFNET-AS 1132 SURFNET-AS 1133 SURFNET-AS 1134 SURFNET-AS 1135 SURFNET-AS 1136 SURFNET-AS 1137 SURFNET-AS 1138 SURFNET-AS 1139 SURFNET-AS 1140 SURFNET-AS 1141 SURFNET-AS 1142 SURFNET-AS 1143 SURFNET-AS 1144 SURFNET-AS 1145 SURFNET-AS 1146 SURFNET-AS 1147 SURFNET-AS 1148 SURFNET-AS 1149 SURFNET-AS 1150 SURFNET-AS 1151 SURFNET-AS 1152 SURFNET-AS 1153 SURFNET-AS 1154 SURFNET-AS 1155 SURFNET-AS 1156 SURFNET-AS 1157 SURFNET-AS 1158 SURFNET-AS 1159 SURFNET-AS 1160 SURFNET-AS 1161 SURFNET-AS 1162 SURFNET-AS 1163 SURFNET-AS 1164 SURFNET-AS 1165 SURFNET-AS 1166 SURFNET-AS 1167 SURFNET-AS 1168 SURFNET-AS 1169 SURFNET-AS 1170 SURFNET-AS 1171 SURFNET-AS 1172 SURFNET-AS 1173 SURFNET-AS 1174 SURFNET-AS 1175 SURFNET-AS 1176 SURFNET-AS 1177 SURFNET-AS 1178 SURFNET-AS 1179 SURFNET-AS 1180 SURFNET-AS 1181 SURFNET-AS 1182 SURFNET-AS 1183 SURFNET-AS 1184 SURFNET-AS 1185 SURFNET-AS 1186 SURFNET-AS 1187 SURFNET-AS 1188 SURFNET-AS 1189 SURFNET-AS 1190 SURFNET-AS 1191 SURFNET-AS 1192 SURFNET-AS 1193 SURFNET-AS 1194 SURFNET-AS 1195 SURFNET-AS 1196 SURFNET-AS 1197 SURFNET-AS 1198 SURFNET-AS 1199 SURFNET-AS 1200 SURFNET-AS 1201 ASN-ODU-AS-AS 1202 JSC-JIN-AS 1203 ITALTEL-AS 1204 SUNYNET-ASN-AS 1205 JKU-LAN-ASN-AS 1206 PSCNET-HS-AS 1207 PSCNET-HS-TEST-AS 1208 ONREUR-ASN 1209 SOSGNET-ASN 1210 ASN-NET-AS 1211 TOBY-GW1-AS 1212 WILDFLCKN-GW1-AS 1215 ORACLE-NA-AS 1216 ORACLE-EUROPE-AS 1217 ORACLE-PACRIM-AS 1218 NCUBE-BELMONT-AS 1219 NCUBE-OREGON-AS 1220 INFOASN-AS 1222 EPCC-AS 1223 DSI-WR-17 1224 NCSA-AS 1225 VRIO1225 1226 TEALE-AS 1227 SDSC-TEST1-AS 1228 UNINET-ASNBLOCK 1229 UNINET-ASNBLOCK 1230 UNINET-ASNBLOCK 1231 UNINET-ASNBLOCK 1232 UNINET-ASNBLOCK 1233 NASDA-ASN 1234 IVOWAN-AS 1235 CICB-AS-AS 1236 GTEGSC 1237 KREONET 1238 ICM-MALAYSIA 1239 SprintLink 1240 ICM-Pacific 1241 GR-AUTO-AS 1242 PLH-AS 1243 APG-GW1-AS 1244 AMOCO-AS 1245 DET4LAN-AS 1246 GENUITY-AS1246 1247 AFTERLIFE-GW-AS 1248 NOKIA-AS 1249 FIVE-COLLEGES-AS 1250 SINGAPORE-AS 1251 ANBR-AS 1252 UNMC-AS 1253 VEROAUTOSYS-AS 1254 NASA-LARC-AS 1255 SMITHCOLLEGE-AS 1256 MASSNET-AS 1257 SWIPNET-AS 1258 XKL-NET-AS 1259 CAC-GW2-AS 1260 PLE 1261 NATINST-AS-AS 1262 NSN-NCAR-AS-AS 1263 NSN-NCAR-AS-AS 1264 USACESPK-AS 1265 SAINT-MARYS-AS 1266 NAVPGSCOL-AS 1267 IUNET-AS 1268 IUNET1-AS 1269 IUNET2-AS 1270 CW-ECRC 1271 CW-ECRC 1272 CW-ECRC 1273 CW-ECRC 1274 CW-ECRC 1275 CW-ECRC 1276 DSI-WR-18 1278 UNIONCARBIDE-AS 1279 MCDOUGLAS-AS 1280 CIX-AS1 1281 CIX-AS2 1282 CIX-AS3 1283 CIX-AS4 1284 CIX-AS5 1285 CMC-AS 1290 UKNET-AS1290 1291 NAVSWC-WOASN-AS 1292 ITESM-AS 1293 GM-EDS-AS 1294 PS-NETPLEX-AS 1295 GE-AEROSPACE-AS 1296 CHILI-AS-AS 1297 CERN1-AS 1298 SEA06-NET-AS 1299 TCN-AS 1300 FRANCE-ASNBLOCK-AS 1301 FRANCE-ASNBLOCK-AS 1302 FRANCE-ASNBLOCK-AS 1303 FRANCE-ASNBLOCK-AS 1304 FRANCE-ASNBLOCK-AS 1305 FRANCE-ASNBLOCK-AS 1306 FRANCE-ASNBLOCK-AS 1307 FRANCE-ASNBLOCK-AS 1308 FRANCE-ASNBLOCK-AS 1309 FRANCE-ASNBLOCK-AS 1310 CACI-FED 1311 BARRA-NET-AS 1312 VA-TECH-AS 1313 ADOBE1-AS-AS 1314 NWSCHS-AS 1315 GENUITY-AS1315 1316 LERC-AS-AS 1317 BUMED-SDIEGO-AS 1318 ICRFNET-AS 1319 BUMED-CPEND-AS 1320 BUMED-LBEACH-AS 1321 ANSBB-ASNNET-1 1322 ANSBB-ASNNET-1 1323 ANSBB-ASNNET-1 1324 ANSBB-ASNNET-1 1325 ANSBB-ASNNET-1 1326 ANSBB-ASNNET-1 1327 ANSBB-ASNNET-1 1328 ANSBB-ASNNET-1 1329 ANSBB-ASNNET-1 1330 ANSBB-ASNNET-1 1331 ANSBB-ASNNET-1 1332 ANSBB-ASNNET-1 1333 ANSBB-ASNNET-1 1334 ANSBB-ASNNET-1 1335 ANSBB-ASNNET-1 1336 ANSBB-ASNNET-1 1337 ANSBB-ASNNET-1 1338 ANSBB-ASNNET-1 1339 ANSBB-ASNNET-1 1340 ANSBB-ASNNET-1 1341 AB-AS 1342 NOKIA-DATA-AS 1343 CISCO-SHONET-AS-AS 1344 BUMED-ORLANDO-AS 1345 BUMED-JAX-AS 1346 BUMED-PENSA-AS 1347 MRNET-AS 1348 CA-DOTNET-AS 1349 QUOTRON-AS-AS 1350 SEARSNET-AS 1351 UVM-EDU-AS 1352 SISSA-AS1-AS 1353 SISSA-AS2-AS 1354 NEXT-ASN-AS 1355 GENUITY-AS1355 1356 GENUITY-AS1356 1357 ORYX-ENERGY-AS 1358 HNSNET-AS 1361 BUMEDMILLTON-AS 1362 BUMEDLEMOORE-AS 1363 BUMEDLEJEUNE-AS 1364 BUMEDGROTON-AS 1365 BUMEDGLAKES-AS 1366 BUMEDCORPUS-AS 1367 BUMEDCHERRYP-AS 1368 BUMEDCHARLES-AS 1369 BUMEDBEAUFORT-AS 1370 BUMEDNEWPORT-AS 1371 BUMEDRROADS-AS 1372 BUMEDBREMTON-AS 1373 BUMEDSEATTLE-AS 1374 BUMEDNHPORTS-AS 1375 BUMEDPHIL-AS 1376 BUMEDOAKHARB-AS 1377 BUMEDOAKLAND-AS 1381 ANSBB-ASNNET-2 1382 ANSBB-ASNNET-2 1383 ANSBB-ASNNET-2 1384 ANSBB-ASNNET-2 1385 ANSBB-ASNNET-2 1386 ANSBB-ASNNET-2 1387 ANSBB-ASNNET-2 1388 ANSBB-ASNNET-2 1389 ANSBB-ASNNET-2 1390 ANSBB-ASNNET-2 1391 ANSBB-ASNNET-2 1392 ANSBB-ASNNET-2 1393 ANSBB-ASNNET-2 1394 ANSBB-ASNNET-2 1395 ANSBB-ASNNET-2 1450 NCCS-STI-GW 1485 TACOM-AS-ASN 1528 STRICOM-NET1 1653 SUNET 1654 SWEDEN 1655 SPAWAR-GW-AS 1656 PAGENET 1657 LOUISVILLE 1658 NMI-NET 1659 TANET-ASN1 1660 ANS-CORP-NY 1661 ANS-ATLANTA 1662 ANS-1662-AS 1663 BERTELSMANN 1664 AOL-CORP 1665 ANS-NY 1666 ANS-DC 1667 ANS-DC2 1668 AOL-PRIMEHOST 1669 ANS-BB2 1670 ANS-UK 1671 ANS-1671-AS 1672 ANS-CHICAGO 1673 ANS-BB 1674 ANS-SANFRAN 1675 ANS-NY2-AS 1676 TRANE 1677 ANS-NY3-AS 1678 DOW 1679 RMTECH 1680 NETVISION 1681 ANS-CORP-MI 1682 AOL-1682-AS 1683 ANS-NY4-AS 1684 ANS-1684-AS 1685 ANS-JAPAN 1686 ANS-1686-AS 1687 ANS-1687-AS 1688 ANS-AT-PACBELL-NAP 1689 ANS-1689-AS 1690 BOCES 1691 TELUS 1692 ANS-1692-AS 1693 ANS-1693-AS 1694 ANS-SANFRAN2-AS 1695 ANS-1695-AS 1696 SMITH-BARNEY 1697 ANS-1697-AS 1698 PRODIGY 1699 ANS-1699-AS 1700 SESQUI-3 1701 EOSDIS-V0 1703 MIX 1704 KAIST-NET 1705 GM-INDY-NET 1706 UNIV-ARIZ 1707 RENATER-ASNBLOCKA 1727 MRMS-WEST 1728 SRI-TPA-GW1 1729 TIPNET1 1731 THIOKOL 1732 MIKROK-AS 1733 CENTAF-SWA 1734 ROP-COCA-AS01 1735 FISHER-AS 1736 MU-AS 1737 RAYTHEON-AS-1 1738 OKOBANK-AS 1739 TAMNET 1740 CERFNET 1741 FUNET 1742 HARVARD-UNIV 1743 MCI-SF-AS 1744 LOCKHEED 1745 CRT-AS 1746 DRANET-AS 1747 IBMWATSON-AS 1748 FINNAIR-AS 1749 NASA-GSFC-AS 1750 GURU 1751 LEXMARK-AS 1752 BT-MH 1753 OBT-ESCOM 1754 DESY-HAMBURG 1755 EBONE-INTERNAL 1756 EBONE-EXTERNAL 1757 LEXIS-AS 1758 AFMPCGW1-AS 1759 SONERA-2 1760 INTELNET 1761 TGSCNET 1762 DMIS-VAX 1763 ITTHARTFORD 1764 EUNET-CH-AS1 1765 PM-NAWC 1766 MOBIL-CORP 1767 IHETSDATANET 1768 SEEDNET-ASN1 1769 IIINET-ASN1 1770 NORTELE-A 1771 NORTELE-T 1772 SENTRY 1774 HEANET-IE 1775 FMCC-1 1776 ASN-WU-WIEN 1778 DMSSC-GATEWAY 1779 PSTAR-AS 1780 VALNET 1781 KAIST-NET1 1784 GNAPS 1785 APPLIED 1786 AIXSERV-AS 1787 EJV-ALPHA 1788 SONAMNET 1789 SPRINTLINK1 1790 SPRINTLINK2 1791 SPRINTLINK3 1792 SPRINTLINK4 1793 SPRINTLINK5 1794 SPRINTLINK6 1795 SPRINTLINK7 1797 AS1797 1798 AS1798 1799 ICMNET-1 1800 ICM-Atlantic 1801 ICMNET-3 1802 ICMNET-4 1803 ICMNET-5 1804 ICMNET-6 1805 ICMNET-7 1806 ICMNET-8 1807 ICMNET-9 1808 ICMNET-10 1809 GENUITY-AS1809-1828 1810 GENUITY-AS1809-1828 1811 GENUITY-AS1809-1828 1812 GENUITY-AS1809-1828 1813 GENUITY-AS1809-1828 1814 GENUITY-AS1809-1828 1815 GENUITY-AS1809-1828 1816 GENUITY-AS1809-1828 1817 GENUITY-AS1809-1828 1818 GENUITY-AS1809-1828 1819 GENUITY-AS1809-1828 1820 GENUITY-AS1809-1828 1821 GENUITY-AS1809-1828 1822 GENUITY-AS1809-1828 1823 GENUITY-AS1809-1828 1824 GENUITY-AS1809-1828 1825 GENUITY-AS1809-1828 1826 GENUITY-AS1809-1828 1827 GENUITY-AS1809-1828 1828 GENUITY-AS1809-1828 1829 NOTES 1830 IACNET2 1831 ITESO-GWY 1832 SMU 1833 TELIANET 1834 NCTAMS-ETHER 1835 DENET 1836 EUNET-CH-AS2 1837 NC3A 1838 CERFNET-2 1839 DNA-SCN 1840 UDLAP-NET 1841 NETCS-AS1 1842 USGS-AS 1843 NASA-KSC-AS 1844 NASA-KSC-AS 1845 NASA-KSC-AS 1846 NASA-KSC-AS 1847 NASA-KSC-AS 1848 NASA-KSC-AS 1849 PIPEX-AS 1850 SURIS 1851 ADELAIDE-UNI 1852 UCDLA-AS 1853 AT-BONE 1854 KTT 1855 DISN-PILOTNET1 1856 DISN-PILOTNET2 1857 DISN-PILOTNET3 1858 DISN-PILOTNET4 1859 DISN-PILOTNET5 1860 DISN-PILOTNET6 1861 DISN-PILOTNET7 1862 DISN-PILOTNET8 1863 DISN-PILOTNET9 1864 DISN-PILOTNET10 1865 DISN-PILOTNET11 1866 DISN-PILOTNET12 1867 DISN-PILOTNET13 1868 DISN-PILOTNET14 1869 DISN-PILOTNET15 1870 3COM-EUR 1871 3COM-USA 1872 3COM-HDQ 1873 DMSSCA-AS 1874 DMSSCH-AS 1875 CIS 1876 SEAS 1877 ASNBLK-RIPE 1878 ASNBLK-RIPE 1879 ASNBLK-RIPE 1880 ASNBLK-RIPE 1881 ASNBLK-RIPE 1882 ASNBLK-RIPE 1883 ASNBLK-RIPE 1884 ASNBLK-RIPE 1885 ASNBLK-RIPE 1886 ASNBLK-RIPE 1887 ASNBLK-RIPE 1888 ASNBLK-RIPE 1889 ASNBLK-RIPE 1890 ASNBLK-RIPE 1891 ASNBLK-RIPE 1892 ASNBLK-RIPE 1893 ASNBLK-RIPE 1894 ASNBLK-RIPE 1895 ASNBLK-RIPE 1896 ASNBLK-RIPE 1897 ASNBLK-RIPE 1898 ASNBLK-RIPE 1899 ASNBLK-RIPE 1900 ASNBLK-RIPE 1901 ASNBLK-RIPE 1889 AS1889 1893 DKRZ-HAMBURG 1895 ERLANGEN-VFR 1902 FESNET-L 1903 CHEMNET-FES 1904 JITC-TESTBED 1905 DRC 1906 INRI-AS 1907 IPSERV-AS 1908 NAWC-AD-INDY 1909 ALPHA-NAP-AS 1910 DLA1 1911 DLA2 1912 DLA3 1913 DLA4 1914 DLA5 1915 SEQUOIA-AS 1916 RNP-AS 1917 CTCSERV-AS 1918 CNAP-INTRANET 1919 UMASS-AMHERST1 1920 QUOTRON-WAN 1921 UDNVIE 1922 UAKOM-DAMIS 1923 TAYS 1924 DAFFY 1925 DISA-EUROPE 1926 UTANET-AS 1927 NADC-LAN-AS 1928 WRNL-PDVS 1929 UMASSNET-NET 1930 RCCNET 1931 GM-EDS-EURO 1932 CONED 1933 NAVAIRHQ 1934 ANS-RESTON-AS 1935 RENATER-ASNBLOCK 1936 RENATER-ASNBLOCK 1937 RENATER-ASNBLOCK 1938 RENATER-ASNBLOCK 1939 RENATER-ASNBLOCK 1940 RENATER-ASNBLOCK 1941 RENATER-ASNBLOCK 1942 RENATER-ASNBLOCK 1943 RENATER-ASNBLOCK 1944 RENATER-ASNBLOCK 1945 RENATER-ASNBLOCK 1946 RENATER-ASNBLOCK 1947 RENATER-ASNBLOCK 1948 RENATER-ASNBLOCK 1949 RENATER-ASNBLOCK 1950 RENATER-ASNBLOCK 1951 RENATER-ASNBLOCK 1952 RENATER-ASNBLOCK 1953 RENATER-ASNBLOCK 1954 RENATER-ASNBLOCK 1955 HBONE 1956 IBMEVS-AS 1957 ANSCIX-AS 1958 NCRWIN1958 1959 DMSLABNET 1960 MARS-EUROPE 1961 MARS-AMERICAS 1962 MARS-ASIA-PACIFIC 1963 PENRIL-AS 1964 MCI-NETCS 1965 TUELECTRIC 1966 MASSO-GW 1967 TR-NET 1968 UMASSP-DOM 1969 TELEDYNE-AS 1970 TAMUS-NET 1971 GITN-JITC 1972 HPC-NET 1973 PHNSY-POEGW 1974 GSI-DISNNT 1975 UMI-AS 1976 BUMEDPORTSNH 1977 BUMED29PALMS 1978 BUMEDLONDON 1979 BUMEDKINGSBY 1980 BUMEDKEFLAVK 1981 BUMEDADAK 1982 ASN-NWNEXUS 1983 BERNALILLO 1984 BUMEDSIGONEL 1985 BUMEDYOKOSUKA 1986 BUMEDROTA 1987 BUMEDPHARBOR 1988 BUMEDPAXRVER 1989 BUMEDOKINAWA 1990 BUMEDORLEANS 1991 BUMEDNAPLES 1992 BUMEDKEYWEST 1993 BUMEDHUENEME 1994 BUMEDGBAY 1995 BUMEDGUAM 1997 IBMDES-AS 1998 STATE-OF-MN 1999 HOUSE-AS-1 2002 IBM-PV-AS 2003 EPRI-PA 2004 TNO-HDO 2005 INFONET1 2006 INFONET2 2007 INFONET3 2008 INFONET4 2009 INFONET5 2010 INFONET6 2011 WACHOVIA 2012 UNINET1 2013 PACIFIC-GAS 2014 SPRINT-INTL 2015 MSEN-SYSTEM 2016 OTANET 2017 KRPNET 2018 TERTIARY-1 2019 MORGAN-AS 2020 HWWILSON-AS 2021 UNISYS-INT 2022 SIEMENS-AS 2023 RUTYC 2024 NU 2025 UTOLEDO 2026 HELSINKI 2028 NORTEL-HARLOW 2029 GGR-AS 2030 RDYNE 2031 COWACONET 2032 CSC-TMD-CC 2033 Panix 2034 ATK-AS1 2035 ATK-AS2 2036 JOANNEUM 2037 CSUFRESNO 2038 INFN-AS1 2039 INFN-AS2 2040 INFN-AS3 2041 CRL-GATE 2042 JARING 2043 EMPB-AS 2044 WORLDNET-AS 2045 FACILITIES 2046 DECCO-AS 2048 LANET-1 2049 AVL-GRAZ 2050 SPRINTCORP 2051 CISCO-EXT 2052 RJRNI-NFGI 2053 SPRINTCORP1 2054 PAC-DISA 2055 LSU-1 2056 AOL-AS 2057 RENATER_ASNBLOCK1 2058 RENATER_ASNBLOCK1 2059 RENATER_ASNBLOCK1 2060 RENATER_ASNBLOCK1 2061 RENATER_ASNBLOCK1 2062 RENATER_ASNBLOCK1 2063 RENATER_ASNBLOCK1 2064 RENATER_ASNBLOCK1 2065 RENATER_ASNBLOCK1 2066 RENATER_ASNBLOCK1 2067 RENATER_ASNBLOCK1 2068 RENATER_ASNBLOCK1 2069 RENATER_ASNBLOCK1 2070 RENATER_ASNBLOCK1 2071 RENATER_ASNBLOCK1 2072 RENATER_ASNBLOCK1 2073 RENATER_ASNBLOCK1 2074 RENATER_ASNBLOCK1 2075 RENATER_ASNBLOCK1 2076 RENATER_ASNBLOCK1 2077 RENATER_ASNBLOCK1 2078 RENATER_ASNBLOCK1 2079 RENATER_ASNBLOCK1 2080 RENATER_ASNBLOCK1 2081 RENATER_ASNBLOCK1 2082 RENATER_ASNBLOCK1 2083 RENATER_ASNBLOCK1 2084 RENATER_ASNBLOCK1 2085 RENATER_ASNBLOCK1 2086 RENATER_ASNBLOCK1 2087 RENATER_ASNBLOCK1 2088 RENATER_ASNBLOCK1 2089 RENATER_ASNBLOCK1 2090 RENATER_ASNBLOCK1 2091 RENATER_ASNBLOCK1 2092 RENATER_ASNBLOCK1 2093 RENATER_ASNBLOCK1 2094 RENATER_ASNBLOCK1 2095 RENATER_ASNBLOCK1 2096 RENATER_ASNBLOCK1 2097 RENATER_ASNBLOCK1 2098 RENATER_ASNBLOCK1 2099 RENATER_ASNBLOCK1 2100 RENATER_ASNBLOCK1 2101 RENATER_ASNBLOCK1 2102 RENATER_ASNBLOCK1 2103 RENATER_ASNBLOCK1 2104 RENATER_ASNBLOCK1 2105 RENATER_ASNBLOCK1 2106 RENATER_ASNBLOCK1 2107 RIPE-ASNBLOCK2 2108 RIPE-ASNBLOCK2 2109 RIPE-ASNBLOCK2 2110 RIPE-ASNBLOCK2 2111 RIPE-ASNBLOCK2 2112 RIPE-ASNBLOCK2 2113 RIPE-ASNBLOCK2 2114 RIPE-ASNBLOCK2 2115 RIPE-ASNBLOCK2 2116 RIPE-ASNBLOCK2 2117 RIPE-ASNBLOCK2 2118 RIPE-ASNBLOCK2 2119 RIPE-ASNBLOCK2 2120 RIPE-ASNBLOCK2 2121 RIPE-ASNBLOCK2 2122 RIPE-ASNBLOCK2 2123 RIPE-ASNBLOCK2 2124 RIPE-ASNBLOCK2 2125 RIPE-ASNBLOCK2 2126 RIPE-ASNBLOCK2 2127 RIPE-ASNBLOCK2 2128 RIPE-ASNBLOCK2 2129 RIPE-ASNBLOCK2 2130 RIPE-ASNBLOCK2 2131 RIPE-ASNBLOCK2 2132 RIPE-ASNBLOCK2 2133 RIPE-ASNBLOCK2 2134 RIPE-ASNBLOCK2 2135 RIPE-ASNBLOCK2 2136 RIPE-ASNBLOCK2 2137 DISA-PAC 2138 DOW2-AS 2139 DOW1-AS 2140 ISSC-AS 2141 BUMEDQUANTIC 2142 NSI-FFIX-E 2143 NSN-FFIX-W 2144 ETAFE 2145 ALERON-AS 2146 CRNET 2147 COMPNEWS-AS 2148 ITEP-MOSCOW 2149 PSINET-2 2150 CSUNET-SW 2151 CSUNET-SE 2152 CSUNET-NW 2153 CSUNET-NE 2154 EDS 2155 EDS 2156 EDS 2157 EDS 2158 EDS 2159 EDS 2160 EDS 2161 EDS 2162 EDS 2163 EDS 2164 EDS 2165 EDS 2166 EDS 2167 EDS 2168 EDS 2169 EDS 2170 EDS 2171 EDS 2172 EDS 2173 EDS 2174 FR-ASNBLOCK 2175 FR-ASNBLOCK 2176 FR-ASNBLOCK 2177 FR-ASNBLOCK 2178 FR-ASNBLOCK 2179 FR-ASNBLOCK 2180 FR-ASNBLOCK 2181 FR-ASNBLOCK 2182 FR-ASNBLOCK 2183 FR-ASNBLOCK 2184 FR-ASNBLOCK 2185 FR-ASNBLOCK 2186 FR-ASNBLOCK 2187 FR-ASNBLOCK 2188 FR-ASNBLOCK 2189 FR-ASNBLOCK 2190 FR-ASNBLOCK 2191 FR-ASNBLOCK 2192 FR-ASNBLOCK 2193 FR-ASNBLOCK 2194 FR-ASNBLOCK 2195 FR-ASNBLOCK 2196 FR-ASNBLOCK 2197 FR-ASNBLOCK 2198 FR-ASNBLOCK 2199 FR-ASNBLOCK 2200 FR-ASNBLOCK 2201 FR-ASNBLOCK 2202 FR-ASNBLOCK 2203 FR-ASNBLOCK 2204 FR-ASNBLOCK 2205 FR-ASNBLOCK 2206 FR-ASNBLOCK 2207 FR-ASNBLOCK 2208 FR-ASNBLOCK 2209 FR-ASNBLOCK 2210 FR-ASNBLOCK 2211 FR-ASNBLOCK 2212 FR-ASNBLOCK 2213 FR-ASNBLOCK 2214 FR-ASNBLOCK 2215 FR-ASNBLOCK 2216 FR-ASNBLOCK 2217 FR-ASNBLOCK 2218 FR-ASNBLOCK 2219 FR-ASNBLOCK 2220 FR-ASNBLOCK 2221 FR-ASNBLOCK 2222 FR-ASNBLOCK 2223 FR-ASNBLOCK 2224 FR-ASNBLOCK 2225 FR-ASNBLOCK 2226 FR-ASNBLOCK 2227 FR-ASNBLOCK 2228 FR-ASNBLOCK 2229 FR-ASNBLOCK 2230 FR-ASNBLOCK 2231 FR-ASNBLOCK 2232 FR-ASNBLOCK 2233 FR-ASNBLOCK 2234 FR-ASNBLOCK 2235 FR-ASNBLOCK 2236 FR-ASNBLOCK 2237 FR-ASNBLOCK 2238 FR-ASNBLOCK 2239 FR-ASNBLOCK 2240 FR-ASNBLOCK 2241 FR-ASNBLOCK 2242 FR-ASNBLOCK 2243 FR-ASNBLOCK 2244 FR-ASNBLOCK 2245 FR-ASNBLOCK 2246 FR-ASNBLOCK 2247 FR-ASNBLOCK 2248 FR-ASNBLOCK 2249 FR-ASNBLOCK 2250 FR-ASNBLOCK 2251 FR-ASNBLOCK 2252 FR-ASNBLOCK 2253 FR-ASNBLOCK 2254 FR-ASNBLOCK 2255 FR-ASNBLOCK 2256 FR-ASNBLOCK 2257 FR-ASNBLOCK 2258 FR-ASNBLOCK 2259 FR-ASNBLOCK 2260 FR-ASNBLOCK 2261 FR-ASNBLOCK 2262 FR-ASNBLOCK 2263 FR-ASNBLOCK 2264 FR-ASNBLOCK 2265 FR-ASNBLOCK 2266 FR-ASNBLOCK 2267 FR-ASNBLOCK 2268 FR-ASNBLOCK 2269 FR-ASNBLOCK 2270 FR-ASNBLOCK 2271 FR-ASNBLOCK 2272 FR-ASNBLOCK 2273 FR-ASNBLOCK 2274 CBO 2275 EUR-DISA 2276 OCS-AS1 2277 ECUANET 2278 FRANCE-TELECOM-AS 2279 FRANCE-TELECOM-AS 2280 FRANCE-TELECOM-AS 2281 FRANCE-TELECOM-AS 2282 FRANCE-TELECOM-AS 2283 FRANCE-TELECOM-AS 2284 FRANCE-TELECOM-AS 2285 FRANCE-TELECOM-AS 2286 FRANCE-TELECOM-AS 2287 FRANCE-TELECOM-AS 2288 FRANCE-TELECOM-AS 2289 FRANCE-TELECOM-AS 2290 FRANCE-TELECOM-AS 2291 FRANCE-TELECOM-AS 2292 FRANCE-TELECOM-AS 2293 FRANCE-TELECOM-AS 2294 FRANCE-TELECOM-AS 2295 FRANCE-TELECOM-AS 2296 FRANCE-TELECOM-AS 2297 FRANCE-TELECOM-AS 2298 FRANCE-TELECOM-AS 2299 FRANCE-TELECOM-AS 2300 FRANCE-TELECOM-AS 2301 FRANCE-TELECOM-AS 2302 FRANCE-TELECOM-AS 2303 FRANCE-TELECOM-AS 2304 FRANCE-TELECOM-AS 2305 FRANCE-TELECOM-AS 2306 FRANCE-TELECOM-AS 2307 FRANCE-TELECOM-AS 2308 FRANCE-TELECOM-AS 2309 FRANCE-TELECOM-AS 2310 FRANCE-TELECOM-AS 2311 FRANCE-TELECOM-AS 2312 FRANCE-TELECOM-AS 2313 FRANCE-TELECOM-AS 2314 FRANCE-TELECOM-AS 2315 FRANCE-TELECOM-AS 2316 FRANCE-TELECOM-AS 2317 FRANCE-TELECOM-AS 2318 FRANCE-TELECOM-AS 2319 FRANCE-TELECOM-AS 2320 FRANCE-TELECOM-AS 2321 FRANCE-TELECOM-AS 2322 FRANCE-TELECOM-AS 2323 FRANCE-TELECOM-AS 2324 FRANCE-TELECOM-AS 2325 FRANCE-TELECOM-AS 2326 FRANCE-TELECOM-AS 2327 FRANCE-TELECOM-AS 2328 FRANCE-TELECOM-AS 2329 FRANCE-TELECOM-AS 2330 FRANCE-TELECOM-AS 2331 FRANCE-TELECOM-AS 2332 FRANCE-TELECOM-AS 2333 FRANCE-TELECOM-AS 2334 FRANCE-TELECOM-AS 2335 FRANCE-TELECOM-AS 2336 FRANCE-TELECOM-AS 2337 FRANCE-TELECOM-AS 2338 FRANCE-TELECOM-AS 2339 FRANCE-TELECOM-AS 2340 FRANCE-TELECOM-AS 2341 FRANCE-TELECOM-AS 2342 FRANCE-TELECOM-AS 2343 FRANCE-TELECOM-AS 2344 FRANCE-TELECOM-AS 2345 FRANCE-TELECOM-AS 2346 FRANCE-TELECOM-AS 2347 FRANCE-TELECOM-AS 2348 FRANCE-TELECOM-AS 2349 FRANCE-TELECOM-AS 2350 FRANCE-TELECOM-AS 2351 FRANCE-TELECOM-AS 2352 FRANCE-TELECOM-AS 2353 FRANCE-TELECOM-AS 2354 FRANCE-TELECOM-AS 2355 FRANCE-TELECOM-AS 2356 FRANCE-TELECOM-AS 2357 FRANCE-TELECOM-AS 2358 FRANCE-TELECOM-AS 2359 FRANCE-TELECOM-AS 2360 FRANCE-TELECOM-AS 2361 FRANCE-TELECOM-AS 2362 FRANCE-TELECOM-AS 2363 FRANCE-TELECOM-AS 2364 FRANCE-TELECOM-AS 2365 FRANCE-TELECOM-AS 2366 FRANCE-TELECOM-AS 2367 FRANCE-TELECOM-AS 2368 FRANCE-TELECOM-AS 2369 FRANCE-TELECOM-AS 2370 FRANCE-TELECOM-AS 2371 FRANCE-TELECOM-AS 2372 FRANCE-TELECOM-AS 2373 FRANCE-TELECOM-AS 2374 FRANCE-TELECOM-AS 2375 FRANCE-TELECOM-AS 2376 FRANCE-TELECOM-AS 2377 FRANCE-TELECOM-AS 2378 DOI-BIA 2379 UNIT-TEL-FLA 2380 ESTNET 2381 WISCNET1-AS 2382 WISCNET2-AS 2383 OTA 2384 AOCNET 2385 STARNET 2386 INS-AS 2387 FR-ASNBLOCK2 2388 FR-ASNBLOCK2 2389 FR-ASNBLOCK2 2390 FR-ASNBLOCK2 2391 FR-ASNBLOCK2 2392 FR-ASNBLOCK2 2393 FR-ASNBLOCK2 2394 FR-ASNBLOCK2 2395 FR-ASNBLOCK2 2396 FR-ASNBLOCK2 2397 FR-ASNBLOCK2 2398 FR-ASNBLOCK2 2399 FR-ASNBLOCK2 2400 FR-ASNBLOCK2 2401 FR-ASNBLOCK2 2402 FR-ASNBLOCK2 2403 FR-ASNBLOCK2 2404 FR-ASNBLOCK2 2405 FR-ASNBLOCK2 2406 FR-ASNBLOCK2 2407 FR-ASNBLOCK2 2408 FR-ASNBLOCK2 2409 FR-ASNBLOCK2 2410 FR-ASNBLOCK2 2411 FR-ASNBLOCK2 2412 FR-ASNBLOCK2 2413 FR-ASNBLOCK2 2414 FR-ASNBLOCK2 2415 FR-ASNBLOCK2 2416 FR-ASNBLOCK2 2417 FR-ASNBLOCK2 2418 FR-ASNBLOCK2 2419 FR-ASNBLOCK2 2420 FR-ASNBLOCK2 2421 FR-ASNBLOCK2 2422 FR-ASNBLOCK2 2423 FR-ASNBLOCK2 2424 FR-ASNBLOCK2 2425 FR-ASNBLOCK2 2426 FR-ASNBLOCK2 2427 FR-ASNBLOCK2 2428 FR-ASNBLOCK2 2429 FR-ASNBLOCK2 2430 FR-ASNBLOCK2 2431 FR-ASNBLOCK2 2432 FR-ASNBLOCK2 2433 FR-ASNBLOCK2 2434 FR-ASNBLOCK2 2435 FR-ASNBLOCK2 2436 FR-ASNBLOCK2 2437 FR-ASNBLOCK2 2438 FR-ASNBLOCK2 2439 FR-ASNBLOCK2 2440 FR-ASNBLOCK2 2441 FR-ASNBLOCK2 2442 FR-ASNBLOCK2 2443 FR-ASNBLOCK2 2444 FR-ASNBLOCK2 2445 FR-ASNBLOCK2 2446 FR-ASNBLOCK2 2447 FR-ASNBLOCK2 2448 FR-ASNBLOCK2 2449 FR-ASNBLOCK2 2450 FR-ASNBLOCK2 2451 FR-ASNBLOCK2 2452 FR-ASNBLOCK2 2453 FR-ASNBLOCK2 2454 FR-ASNBLOCK2 2455 FR-ASNBLOCK2 2456 FR-ASNBLOCK2 2457 FR-ASNBLOCK2 2458 FR-ASNBLOCK2 2459 FR-ASNBLOCK2 2460 FR-ASNBLOCK2 2461 FR-ASNBLOCK2 2462 FR-ASNBLOCK2 2463 FR-ASNBLOCK2 2464 FR-ASNBLOCK2 2465 FR-ASNBLOCK2 2466 FR-ASNBLOCK2 2467 FR-ASNBLOCK2 2468 FR-ASNBLOCK2 2469 FR-ASNBLOCK2 2470 FR-ASNBLOCK2 2471 FR-ASNBLOCK2 2472 FR-ASNBLOCK2 2473 FR-ASNBLOCK2 2474 FR-ASNBLOCK2 2475 FR-ASNBLOCK2 2476 FR-ASNBLOCK2 2477 FR-ASNBLOCK2 2478 FR-ASNBLOCK2 2479 FR-ASNBLOCK2 2480 FR-ASNBLOCK2 2481 FR-ASNBLOCK2 2482 FR-ASNBLOCK2 2483 FR-ASNBLOCK2 2484 FR-ASNBLOCK2 2485 FR-ASNBLOCK2 2486 FR-ASNBLOCK2 2487 MOSCOW-HEP 2488 IIASA-NET 2489 NETIOWA-AS 2490 MILNET-T20 2491 SPRNT-CA-AS-3 2492 SPRNT-CA-AS-2 2493 SPRNT-CA-AS-1 2494 AKHNET 2495 KANREN 2496 UKANS 2497 APNIC-AS-X-BLOCK 2498 APNIC-AS-X-BLOCK 2499 APNIC-AS-X-BLOCK 2500 APNIC-AS-X-BLOCK 2501 APNIC-AS-X-BLOCK 2502 APNIC-AS-X-BLOCK 2503 APNIC-AS-X-BLOCK 2504 APNIC-AS-X-BLOCK 2505 APNIC-AS-X-BLOCK 2506 APNIC-AS-X-BLOCK 2507 APNIC-AS-X-BLOCK 2508 APNIC-AS-X-BLOCK 2509 APNIC-AS-X-BLOCK 2510 APNIC-AS-X-BLOCK 2511 APNIC-AS-X-BLOCK 2512 APNIC-AS-X-BLOCK 2513 APNIC-AS-X-BLOCK 2514 APNIC-AS-X-BLOCK 2515 APNIC-AS-X-BLOCK 2516 APNIC-AS-X-BLOCK 2517 APNIC-AS-X-BLOCK 2518 APNIC-AS-X-BLOCK 2519 APNIC-AS-X-BLOCK 2520 APNIC-AS-X-BLOCK 2521 APNIC-AS-X-BLOCK 2522 APNIC-AS-X-BLOCK 2523 APNIC-AS-X-BLOCK 2524 APNIC-AS-X-BLOCK 2525 APNIC-AS-X-BLOCK 2526 APNIC-AS-X-BLOCK 2527 APNIC-AS-X-BLOCK 2528 APNIC-AS-X-BLOCK 2529 DEMON-SYS 2530 CIBA-AS 2531 EUCOM-GW 2532 LOC 2533 HOU-METRO-AS 2534 SYNTEX 2535 BP 2536 TCADA 2537 STATS-GOVTNZ 2538 IBM-KINGS-AS 2539 SMITHKLINE-AS 2540 INGRES-AS 2541 WM-NET 2542 VOUGHT 2543 UCIMC-AS 2544 METRO-AS 2545 STRATHOST 2546 ARIADNE 2547 BMENET-AS 2548 ICIX-MD-AS 2549 REDUDG 2550 STRATS 2551 ICG 2552 WUSTL-ASN 2553 FSU-AS 2554 INTER-GRP-A 2555 INTER-GRP-B 2556 INTER-GRP-C 2557 INTER-GRP-D 2558 CIWMBNET 2559 VISANET 2560 BOCA-AS 2561 FRCU-EUN 2562 TI-US/INTL 2563 KREN-GATEWAY 2564 GLO 2565 TX-REHAB 2566 ISINM 2567 WAII-AS 2568 CTSNET 2569 NETWAY-0 2570 NETWAY-1 2571 DHLNET 2572 MORENET 2573 QED-SYS 2574 TRS 2575 SRPNET 2576 DOT-AS 2577 AFIP-OSD 2578 RELCOM-DEMOS 2579 NEWBRIDGE-AS 2580 ASSEMBLY 2581 GAO 2582 CDE 2583 CDI 2584 CUMMINS 2585 ASNBLK-RIPE-NCC 2586 ASNBLK-RIPE-NCC 2587 ASNBLK-RIPE-NCC 2588 ASNBLK-RIPE-NCC 2589 ASNBLK-RIPE-NCC 2590 ASNBLK-RIPE-NCC 2591 ASNBLK-RIPE-NCC 2592 ASNBLK-RIPE-NCC 2593 ASNBLK-RIPE-NCC 2594 ASNBLK-RIPE-NCC 2595 ASNBLK-RIPE-NCC 2596 ASNBLK-RIPE-NCC 2597 ASNBLK-RIPE-NCC 2598 ASNBLK-RIPE-NCC 2599 ASNBLK-RIPE-NCC 2600 ASNBLK-RIPE-NCC 2601 ASNBLK-RIPE-NCC 2602 ASNBLK-RIPE-NCC 2603 ASNBLK-RIPE-NCC 2604 ASNBLK-RIPE-NCC 2605 ASNBLK-RIPE-NCC 2606 ASNBLK-RIPE-NCC 2607 ASNBLK-RIPE-NCC 2608 ASNBLK-RIPE-NCC 2609 ASNBLK-RIPE-NCC 2610 ASNBLK-RIPE-NCC 2611 ASNBLK-RIPE-NCC 2612 ASNBLK-RIPE-NCC 2613 ASNBLK-RIPE-NCC 2614 ASNBLK-RIPE-NCC 2615 BECHTEL 2616 NAVNET-BLOCK2 2617 NAVNET-BLOCK2 2618 NAVNET-BLOCK2 2619 NAVNET-BLOCK2 2620 NAVNET-BLOCK2 2621 STDN4-AS1 2622 STDN4-AS2 2623 JWICS 2624 TECNET-EXP 2625 DSIBBN 2626 STDN4-AS3 2627 STDN4-AS4 2628 STDN4-AS5 2629 DMSSCE 2630 NUWCDETHINET 2631 DISCOVERY-AS 2632 NCTSLNDN-AS 2633 NAS1-AS 2634 CENTEL-VA 2635 CENTEL-NV 2636 NCR-FT-COL 2637 GEORGIA-TECH 2638 RAIN 2639 CENTEL 2640 AMESLAB-AS 2641 TSRI-AS 2642 LEG-CA-GOV 2643 SU-IHEP 2644 SMARTS-AS 2645 ASN-CAVENET 2646 CONEXANT 2647 SITA 2648 NIST-BOULDER 2649 NAS2-AS 2650 EOP_GATEKEEPER 2651 CDAGOVN 2652 CDAGOVN 2653 CDAGOVN 2654 CDAGOVN 2655 CDAGOVN 2656 CDAGOVN 2657 CDAGOVN 2658 CDAGOVN 2659 CDAGOVN 2660 CDAGOVN 2661 CDAGOVN 2662 CDAGOVN 2663 CDAGOVN 2664 CDAGOVN 2665 CDAGOVN 2666 CDAGOVN 2667 CDAGOVN 2668 CDAGOVN 2669 CDAGOVN 2670 CDAGOVN 2671 CDAGOVN 2672 CDAGOVN 2673 CDAGOVN 2674 CDAGOVN 2675 CDAGOVN 2676 CDAGOVN 2677 CDAGOVN 2678 CDAGOVN 2679 CDAGOVN 2680 CDAGOVN 2681 CDAGOVN 2682 CDAGOVN 2683 RADIO-MSU 2684 NET-ASSEMBLY-CA-GOV 2685 IBM-MMD-AS 2686 IBM-MMD-AS 2687 IBM-MMD-AS 2688 IBM-MMD-AS 2689 IBM-MMD-AS 2690 IBM-MMD-AS 2691 IBM-MMD-AS 2692 IBM-MMD-AS 2693 IBM-MMD-AS 2694 IBM-MMD-AS 2695 RJRT01-TOB1 2696 IREN-AS 2697 ERNET-AS 2698 IASTATE-AS 2699 BBN-DSI1 2700 CLARIS-CORP 2701 KSU-NET 2702 INTERSERVE 2703 NCR-FRMRELAY 2704 HOOKUP-NET-A 2705 CARENET 2706 HKSUPER 2707 WEC 2708 REDUGTO 2709 AOS-AS 2710 AMSINC-NET 2711 SUNBELT-AS 2712 LGC 2713 INTERSPIN-AS 2714 GSA_GOV 2715 REDERIO-AS 2716 TCHE-AS 2717 CUMMINS-AS1 2718 APSCN-AR 2719 GENUITY-AS2719-2738 2720 GENUITY-AS2719-2738 2721 GENUITY-AS2719-2738 2722 GENUITY-AS2719-2738 2723 GENUITY-AS2719-2738 2724 GENUITY-AS2719-2738 2725 GENUITY-AS2719-2738 2726 GENUITY-AS2719-2738 2727 GENUITY-AS2719-2738 2728 GENUITY-AS2719-2738 2729 GENUITY-AS2719-2738 2730 GENUITY-AS2719-2738 2731 GENUITY-AS2719-2738 2732 GENUITY-AS2719-2738 2733 GENUITY-AS2719-2738 2734 GENUITY-AS2719-2738 2735 GENUITY-AS2719-2738 2736 GENUITY-AS2719-2738 2737 GENUITY-AS2719-2738 2738 GENUITY-AS2719-2738 2739 RUTYC-ASN 2740 ATTCLDS 2741 DSMC 2742 TASDAC-LAFB 2743 AFIWC01 2744 DECCO-EUROPE 2745 NAPC 2746 DDN-WEATHER 2747 AF-PROTEUS 2748 CASC-NET 2749 CNET-AS 2750 CIO 2751 ATT-PARADYNE 2752 THOMSONCA-AS 2753 LARSECOM 2754 EPNG-AS 2755 SJHMC_CHW 2756 EYNZ-O 2757 MCI-NETA 2758 MCI-NETB 2759 MCI-NETC 2760 MCI-NETD 2761 MCI-NETE 2762 GENUITY-AS2762 2763 GENUITY-AS2763 2764 CONNECT-NET 2765 CONNECTED 2766 GLASNET 2767 ATTCTSC-3 2768 ATTCLDS-DVPN 2769 NEBRASKA 2770 TDHS-WEL-NET 2771 TRW-HSV 2772 HKIGS 2773 ASN-BLKRIPE2 2774 ASN-BLKRIPE2 2775 ASN-BLKRIPE2 2776 ASN-BLKRIPE2 2777 ASN-BLKRIPE2 2778 ASN-BLKRIPE2 2779 ASN-BLKRIPE2 2780 ASN-BLKRIPE2 2781 ASN-BLKRIPE2 2782 ASN-BLKRIPE2 2783 ASN-BLKRIPE2 2784 ASN-BLKRIPE2 2785 ASN-BLKRIPE2 2786 ASN-BLKRIPE2 2787 ASN-BLKRIPE2 2788 ASN-BLKRIPE2 2789 ASN-BLKRIPE2 2790 ASN-BLKRIPE2 2791 ASN-BLKRIPE2 2792 ASN-BLKRIPE2 2793 ASN-BLKRIPE2 2794 ASN-BLKRIPE2 2795 ASN-BLKRIPE2 2796 ASN-BLKRIPE2 2797 ASN-BLKRIPE2 2798 ASN-BLKRIPE2 2799 ASN-BLKRIPE2 2800 ASN-BLKRIPE2 2801 ASN-BLKRIPE2 2802 ASN-BLKRIPE2 2803 ASN-BLKRIPE2 2804 ASN-BLKRIPE2 2805 ASN-BLKRIPE2 2806 ASN-BLKRIPE2 2807 ASN-BLKRIPE2 2808 ASN-BLKRIPE2 2809 ASN-BLKRIPE2 2810 ASN-BLKRIPE2 2811 ASN-BLKRIPE2 2812 ASN-BLKRIPE2 2813 ASN-BLKRIPE2 2814 ASN-BLKRIPE2 2815 ASN-BLKRIPE2 2816 ASN-BLKRIPE2 2817 ASN-BLKRIPE2 2818 ASN-BLKRIPE2 2819 ASN-BLKRIPE2 2820 ASN-BLKRIPE2 2821 ASN-BLKRIPE2 2822 ASN-BLKRIPE2 2823 BT-AU-1 2824 BT-EU-1 2825 BT-NA-1 2826 GTE-PACIFIC 2827 KH-AS 2828 XO-AS15 2829 I-LINK 2830 ASN-BLKRIPE3 2831 ASN-BLKRIPE3 2832 ASN-BLKRIPE3 2833 ASN-BLKRIPE3 2834 ASN-BLKRIPE3 2835 ASN-BLKRIPE3 2836 ASN-BLKRIPE3 2837 ASN-BLKRIPE3 2838 ASN-BLKRIPE3 2839 ASN-BLKRIPE3 2840 ASN-BLKRIPE3 2841 ASN-BLKRIPE3 2842 ASN-BLKRIPE3 2843 ASN-BLKRIPE3 2844 ASN-BLKRIPE3 2845 ASN-BLKRIPE3 2846 ASN-BLKRIPE3 2847 ASN-BLKRIPE3 2848 ASN-BLKRIPE3 2849 ASN-BLKRIPE3 2850 ASN-BLKRIPE3 2851 ASN-BLKRIPE3 2852 ASN-BLKRIPE3 2853 ASN-BLKRIPE3 2854 ASN-BLKRIPE3 2855 ASN-BLKRIPE3 2856 ASN-BLKRIPE3 2857 ASN-BLKRIPE3 2858 ASN-BLKRIPE3 2859 ASN-BLKRIPE3 2860 ASN-BLKRIPE3 2861 ASN-BLKRIPE3 2862 ASN-BLKRIPE3 2863 ASN-BLKRIPE3 2864 ASN-BLKRIPE3 2865 ASN-BLKRIPE3 2866 ASN-BLKRIPE3 2867 ASN-BLKRIPE3 2868 ASN-BLKRIPE3 2869 ASN-BLKRIPE3 2870 ASN-BLKRIPE3 2871 ASN-BLKRIPE3 2872 ASN-BLKRIPE3 2873 ASN-BLKRIPE3 2874 ASN-BLKRIPE3 2875 ASN-BLKRIPE3 2876 ASN-BLKRIPE3 2877 ASN-BLKRIPE3 2878 ASN-BLKRIPE3 2879 ASN-BLKRIPE3 2880 NIIT 2881 RHGC-AS 2882 RSNG-PACBELL 2883 NAP-AADS 2884 NAP-THREE 2885 NAP-MAEEAST 2886 EPO-TEST-0 2887 RRM-ASN 2888 MCI-AREA-1 2889 MCI-AREA-2 2890 MCI-AREA-3 2891 MCI-AREA-4 2892 MCI-AREA-5 2893 CLI-NET 2894 CALIF-DWR 2895 FREE-NET-AS 2897 GEORGIA-1 2898 GEORGIA-2 2899 WN-ID-AS 2900 WN-AZ-AS 2901 WN-NM-AS 2902 WN-WY-AS 2904 RED-UACJ 2905 TICSA-ASN 2906 NCR-CANADA 2907 SINET-AS 2908 CITI1 2909 CITI2 2910 CITI3 2911 CITI4 2912 CITI5 2913 CITI6 2914 VERIO 2915 SPIN-NET 2916 CYBER-AS 2917 OLEANE 2918 ERCNET 2919 DIRECTV 2920 LACOE 2921 SAS-SDD 2922 CRSS 2923 AS-TIAA-NET 2924 EQUIFAX-NS 2925 FIS 2926 DB-2 2927 ZONE-NET1 2928 COAT 2929 SUN-RM 2930 NASCA-AS 2931 BIS 2932 NEDI-GIS 2933 REALTIME 2934 TXASHLTH 2935 CDOLNET-GOV 2936 NERSC 2937 NERSC 2938 SPRINT-MRN 2939 SCAROLINA-AS 2940 NET-UEN-UTAH 2941 LINECOAST 2942 SPRINT-MRN-BLOCK 2943 SPRINT-MRN-BLOCK 2944 SPRINT-MRN-BLOCK 2945 SPRINT-MRN-BLOCK 2946 SPRINT-MRN-BLOCK 2947 SPRINT-MRN-BLOCK 2948 SPRINT-MRN-BLOCK 2949 SPRINT-MRN-BLOCK 2950 SPRINT-MRN-BLOCK 2951 SPRINT-MRN-BLOCK 2952 SPRINT-MRN-BLOCK 2953 SPRINT-MRN-BLOCK 2954 SPRINT-MRN-BLOCK 2955 SPRINT-MRN-BLOCK 2956 SPRINT-MRN-BLOCK 2957 SPRINT-MRN-BLOCK 2958 SPRINT-MRN-BLOCK 2959 SPRINT-MRN-BLOCK 2960 SPRINT-MRN-BLOCK 2961 SPRINT-MRN-BLOCK 2962 SPRINT-MRN-BLOCK 2963 SPRINT-MRN-BLOCK 2964 SPRINT-MRN-BLOCK 2965 SPRINT-MRN-BLOCK 2966 SPRINT-MRN-BLOCK 2967 SPRINT-MRN-BLOCK 2968 SPRINT-MRN-BLOCK 2969 SPRINT-MRN-BLOCK 2970 SPRINT-MRN-BLOCK 2971 SPRINT-MRN-BLOCK 2972 SPRINT-MRN-BLOCK 2973 SPRINT-MRN-BLOCK 2974 SPRINT-MRN-BLOCK 2975 SPRINT-MRN-BLOCK 2976 SPRINT-MRN-BLOCK 2977 SPRINT-MRN-BLOCK 2978 SPRINT-MRN-BLOCK 2979 SPRINT-MRN-BLOCK 2980 SPRINT-MRN-BLOCK 2981 SPRINT-MRN-BLOCK 2982 SPRINT-MRN-BLOCK 2983 SPRINT-MRN-BLOCK 2984 SPRINT-MRN-BLOCK 2985 SPRINT-MRN-BLOCK 2986 SPRINT-MRN-BLOCK 2987 SPRINT-MRN-BLOCK 2988 SPRINT-MRN-BLOCK 2989 SPRINT-MRN-BLOCK 2990 SPRINT-MRN-BLOCK 2991 SPRINT-MRN-BLOCK 2992 SPRINT-MRN-BLOCK 2993 SPRINT-MRN-BLOCK 2994 SPRINT-MRN-BLOCK 2995 SPRINT-MRN-BLOCK 2996 SPRINT-MRN-BLOCK 2997 SPRINT-MRN-BLOCK 2998 SPRINT-MRN-BLOCK 2999 SPRINT-MRN-BLOCK 3000 SPRINT-MRN-BLOCK 3001 SPRINT-MRN-BLOCK 3002 SPRINT-MRN-BLOCK 3003 SPRINT-MRN-BLOCK 3004 SPRINT-MRN-BLOCK 3005 SPRINT-MRN-BLOCK 3006 SPRINT-MRN-BLOCK 3007 SPRINT-MRN-BLOCK 3008 SPRINT-MRN-BLOCK 3009 SPRINT-MRN-BLOCK 3010 SPRINT-MRN-BLOCK 3011 SPRINT-MRN-BLOCK 3012 SPRINT-MRN-BLOCK 3013 SPRINT-MRN-BLOCK 3014 SPRINT-MRN-BLOCK 3015 SPRINT-MRN-BLOCK 3016 SPRINT-MRN-BLOCK 3017 SPRINT-MRN-BLOCK 3018 SPRINT-MRN-BLOCK 3019 SPRINT-MRN-BLOCK 3020 SPRINT-MRN-BLOCK 3021 SPRINT-MRN-BLOCK 3022 SPRINT-MRN-BLOCK 3023 SPRINT-MRN-BLOCK 3024 SPRINT-MRN-BLOCK 3025 SPRINT-MRN-BLOCK 3026 SPRINT-MRN-BLOCK 3027 SPRINT-MRN-BLOCK 3028 SPRINT-MRN-BLOCK 3029 SPRINT-MRN-BLOCK 3030 SPRINT-MRN-BLOCK 3031 SPRINT-MRN-BLOCK 3032 SPRINT-MRN-BLOCK 3033 SPRINT-MRN-BLOCK 3034 SPRINT-MRN-BLOCK 3035 SPRINT-MRN-BLOCK 3036 SPRINT-MRN-BLOCK 3037 SPRINT-MRN-BLOCK 3038 SPRINT-MRN-BLOCK 3039 SPRINT-MRN-BLOCK 3040 SPRINT-MRN-BLOCK 3041 SPRINT-MRN-BLOCK 3042 LACHMAN-ASN 3043 AMPHIB-AS 3044 SNAP-01 3045 SNAP-02 3046 SNAP-03 3047 SNAP-04 3048 SNAP-05 3049 SNAP-06 3050 SNAP-07 3051 SNAP-08 3052 SNAP-09 3053 SNAP-10 3054 FIRST-FLOOR 3055 SHL 3056 AB-ASN 3057 3COM-BGPTEST 3058 EMNET 3059 IBMCANAS 3060 SC-YORKTECH 3061 NCR-AUGSBURG 3062 CBIS-NET 3063 TIS-BA-NET 3064 CYBER-ASN 3065 NYCENET-AS 3066 RS-AS 3067 DENINF-IPLAN 3068 DENINF-IVAN 3069 DSI-WR-1 3070 DSI-WR-2 3071 DSI-WR-3 3072 DSI-WR-4 3073 CITI7 3074 CITI8 3075 CITI9 3076 CITI10 3077 CITI11 3078 CITI12 3079 CITI13 3080 CITI14 3081 CITI15 3082 ADVANTIS 3083 LINK1 3084 LINK1 3085 LINK1 3086 LINK1 3087 LINK1 3088 LINK1 3089 LINK1 3090 LINK1 3091 LINK1 3092 LINK1 3093 LINK1 3094 LINK1 3095 LINK1 3096 LINK1 3097 LINK1 3098 LINK1 3099 LINK1 3100 LINK1 3101 LINK1 3102 LINK1 3103 LINK1 3104 LINK1 3105 LINK1 3106 LINK1 3107 LINK1 3108 LINK1 3109 LINK1 3110 HOLONET 3111 DIRECT 3112 OARNET-AS-1 3113 DOC-ESA-ASN 3114 DOJ-CRT-ASN 3115 DSMNET 3116 PPCI 3117 TXMHMR 3118 NCR-UK 3119 DATAPOINT 3120 MAGIC-INTRNL 3121 MAGIC-INTRNL 3122 MAGIC-INTRNL 3123 MAGIC-INTRNL 3124 MAGIC-INTRNL 3125 MAGIC-INTRNL 3126 MAGIC-INTRNL 3127 CAPRICA-AS 3128 WISC1-AS 3129 WISC2-AS 3130 RG-BIWA 3131 DIALNET 3132 RCP-AS 3133 DHHS-NET-ASN 3134 USAID-ASN 3135 MITC 3136 STATE1-AS 3137 STATE2-AS 3138 GSA-DDN 3139 ASEE 3140 TJHSST-AS 3141 BUAP-MEX 3142 DORSAI 3143 VANET 3144 PINNACLE 3145 WESTPUB-AS 3146 DMSSC 3147 FIRSTBANK 3148 WISC-CS 3149 SOSI-AS 3150 VRIO-3150 3151 CEDEL-MRS 3152 FERMILAB 3153 FEMANET 3154 RIPE-ASNBLOCK4 3155 RIPE-ASNBLOCK4 3156 RIPE-ASNBLOCK4 3157 RIPE-ASNBLOCK4 3158 RIPE-ASNBLOCK4 3159 RIPE-ASNBLOCK4 3160 RIPE-ASNBLOCK4 3161 RIPE-ASNBLOCK4 3162 RIPE-ASNBLOCK4 3163 RIPE-ASNBLOCK4 3164 RIPE-ASNBLOCK4 3165 RIPE-ASNBLOCK4 3166 RIPE-ASNBLOCK4 3167 RIPE-ASNBLOCK4 3168 RIPE-ASNBLOCK4 3169 RIPE-ASNBLOCK4 3170 RIPE-ASNBLOCK4 3171 RIPE-ASNBLOCK4 3172 RIPE-ASNBLOCK4 3173 RIPE-ASNBLOCK4 3174 RIPE-ASNBLOCK4 3175 RIPE-ASNBLOCK4 3176 RIPE-ASNBLOCK4 3177 RIPE-ASNBLOCK4 3178 RIPE-ASNBLOCK4 3179 RIPE-ASNBLOCK4 3180 RIPE-ASNBLOCK4 3181 RIPE-ASNBLOCK4 3182 RIPE-ASNBLOCK4 3183 RIPE-ASNBLOCK4 3184 RIPE-ASNBLOCK4 3185 RIPE-ASNBLOCK4 3186 RIPE-ASNBLOCK4 3187 RIPE-ASNBLOCK4 3188 RIPE-ASNBLOCK4 3189 RIPE-ASNBLOCK4 3190 RIPE-ASNBLOCK4 3191 RIPE-ASNBLOCK4 3192 RIPE-ASNBLOCK4 3193 RIPE-ASNBLOCK4 3194 RIPE-ASNBLOCK4 3195 RIPE-ASNBLOCK4 3196 RIPE-ASNBLOCK4 3197 RIPE-ASNBLOCK4 3198 RIPE-ASNBLOCK4 3199 RIPE-ASNBLOCK4 3200 RIPE-ASNBLOCK4 3201 RIPE-ASNBLOCK4 3202 RIPE-ASNBLOCK4 3203 RIPE-ASNBLOCK4 3204 RIPE-ASNBLOCK4 3205 RIPE-ASNBLOCK4 3206 RIPE-ASNBLOCK4 3207 RIPE-ASNBLOCK4 3208 RIPE-ASNBLOCK4 3209 RIPE-ASNBLOCK4 3210 RIPE-ASNBLOCK4 3211 RIPE-ASNBLOCK4 3212 RIPE-ASNBLOCK4 3213 RIPE-ASNBLOCK4 3214 RIPE-ASNBLOCK4 3215 RIPE-ASNBLOCK4 3216 RIPE-ASNBLOCK4 3217 RIPE-ASNBLOCK4 3218 RIPE-ASNBLOCK4 3219 RIPE-ASNBLOCK4 3220 RIPE-ASNBLOCK4 3221 RIPE-ASNBLOCK4 3222 RIPE-ASNBLOCK4 3223 RIPE-ASNBLOCK4 3224 RIPE-ASNBLOCK4 3225 RIPE-ASNBLOCK4 3226 RIPE-ASNBLOCK4 3227 RIPE-ASNBLOCK4 3228 RIPE-ASNBLOCK4 3229 RIPE-ASNBLOCK4 3230 RIPE-ASNBLOCK4 3231 RIPE-ASNBLOCK4 3232 RIPE-ASNBLOCK4 3233 RIPE-ASNBLOCK4 3234 RIPE-ASNBLOCK4 3235 RIPE-ASNBLOCK4 3236 RIPE-ASNBLOCK4 3237 RIPE-ASNBLOCK4 3238 RIPE-ASNBLOCK4 3239 RIPE-ASNBLOCK4 3240 RIPE-ASNBLOCK4 3241 RIPE-ASNBLOCK4 3242 RIPE-ASNBLOCK4 3243 RIPE-ASNBLOCK4 3244 RIPE-ASNBLOCK4 3245 RIPE-ASNBLOCK4 3246 RIPE-ASNBLOCK4 3247 RIPE-ASNBLOCK4 3248 RIPE-ASNBLOCK4 3249 RIPE-ASNBLOCK4 3250 RIPE-ASNBLOCK4 3251 RIPE-ASNBLOCK4 3252 RIPE-ASNBLOCK4 3253 RIPE-ASNBLOCK4 3254 RIPE-ASNBLOCK4 3255 RIPE-ASNBLOCK4 3256 RIPE-ASNBLOCK4 3257 RIPE-ASNBLOCK4 3258 RIPE-ASNBLOCK4 3259 RIPE-ASNBLOCK4 3260 RIPE-ASNBLOCK4 3261 RIPE-ASNBLOCK4 3262 RIPE-ASNBLOCK4 3263 RIPE-ASNBLOCK4 3264 RIPE-ASNBLOCK4 3265 RIPE-ASNBLOCK4 3266 RIPE-ASNBLOCK4 3267 RIPE-ASNBLOCK4 3268 RIPE-ASNBLOCK4 3269 RIPE-ASNBLOCK4 3270 RIPE-ASNBLOCK4 3271 RIPE-ASNBLOCK4 3272 RIPE-ASNBLOCK4 3273 RIPE-ASNBLOCK4 3274 RIPE-ASNBLOCK4 3275 RIPE-ASNBLOCK4 3276 RIPE-ASNBLOCK4 3277 RIPE-ASNBLOCK4 3278 RIPE-ASNBLOCK4 3279 RIPE-ASNBLOCK4 3280 RIPE-ASNBLOCK4 3281 RIPE-ASNBLOCK4 3282 RIPE-ASNBLOCK4 3283 RIPE-ASNBLOCK4 3284 RIPE-ASNBLOCK4 3285 RIPE-ASNBLOCK4 3286 RIPE-ASNBLOCK4 3287 RIPE-ASNBLOCK4 3288 RIPE-ASNBLOCK4 3289 RIPE-ASNBLOCK4 3290 RIPE-ASNBLOCK4 3291 RIPE-ASNBLOCK4 3292 RIPE-ASNBLOCK4 3293 RIPE-ASNBLOCK4 3294 RIPE-ASNBLOCK4 3295 RIPE-ASNBLOCK4 3296 RIPE-ASNBLOCK4 3297 RIPE-ASNBLOCK4 3298 RIPE-ASNBLOCK4 3299 RIPE-ASNBLOCK4 3300 RIPE-ASNBLOCK4 3301 RIPE-ASNBLOCK4 3302 RIPE-ASNBLOCK4 3303 RIPE-ASNBLOCK4 3304 RIPE-ASNBLOCK4 3305 RIPE-ASNBLOCK4 3306 RIPE-ASNBLOCK4 3307 RIPE-ASNBLOCK4 3308 RIPE-ASNBLOCK4 3309 RIPE-ASNBLOCK4 3310 RIPE-ASNBLOCK4 3311 RIPE-ASNBLOCK4 3312 RIPE-ASNBLOCK4 3313 RIPE-ASNBLOCK4 3314 RIPE-ASNBLOCK4 3315 RIPE-ASNBLOCK4 3316 RIPE-ASNBLOCK4 3317 RIPE-ASNBLOCK4 3318 RIPE-ASNBLOCK4 3319 RIPE-ASNBLOCK4 3320 RIPE-ASNBLOCK4 3321 RIPE-ASNBLOCK4 3322 RIPE-ASNBLOCK4 3323 RIPE-ASNBLOCK4 3324 RIPE-ASNBLOCK4 3325 RIPE-ASNBLOCK4 3326 RIPE-ASNBLOCK4 3327 RIPE-ASNBLOCK4 3328 RIPE-ASNBLOCK4 3329 RIPE-ASNBLOCK4 3330 RIPE-ASNBLOCK4 3331 RIPE-ASNBLOCK4 3332 RIPE-ASNBLOCK4 3333 RIPE-ASNBLOCK4 3334 RIPE-ASNBLOCK4 3335 RIPE-ASNBLOCK4 3336 RIPE-ASNBLOCK4 3337 RIPE-ASNBLOCK4 3338 RIPE-ASNBLOCK4 3339 RIPE-ASNBLOCK4 3340 RIPE-ASNBLOCK4 3341 RIPE-ASNBLOCK4 3342 RIPE-ASNBLOCK4 3343 RIPE-ASNBLOCK4 3344 RIPE-ASNBLOCK4 3345 RIPE-ASNBLOCK4 3346 RIPE-ASNBLOCK4 3347 RIPE-ASNBLOCK4 3348 RIPE-ASNBLOCK4 3349 RIPE-ASNBLOCK4 3350 RIPE-ASNBLOCK4 3351 RIPE-ASNBLOCK4 3352 RIPE-ASNBLOCK4 3353 RIPE-ASNBLOCK4 3354 THENET-AS-1 3355 LITC 3356 LEVEL3 3357 SEC 3358 UCIA-AS 3359 U-ALBERTA 3360 CSC-ASN 3362 GROUP-NAMES 3363 HKUST 3364 CSDCO-AS 3365 MCSNET 3366 A2I-WEST 3367 RHS-ROP 3368 CHARMNET 3369 MCI-ASN 3370 MCI-ASN 3371 MCI-ASN 3372 MCI-ASN 3373 MCI-ASN 3374 MCI-ASN 3375 MCI-ASN 3376 MCI-ASN 3377 MCI-ASN 3378 MCI-ASN 3379 KAISER-NCAL 3380 PPPL-AS1 3381 MHPCC-AS 3382 JUITA-UINET 3383 REDBRICK-HQ 3385 EUREKA-BROADBAND-AS 3386 USNET-AS 3387 USIA 3388 UNM-AS 3389 FORDSRL-AS 3390 UMKCNET 3391 ASCII-NET 3392 INFINET 3394 ELPRESS-AS 3395 HUMAN-HEALTH 3396 EGG 3397 EMI-AS 3398 SAND-NET 3399 ITSKR 3400 POWERDOG 3401 SEATTLE 3402 MAPS-2 3403 TIAC 3404 COLORADOCOOP 3405 QNSNET 3406 UUN 3407 INTERPATH-NC 3408 INET-1-AS 3409 INET-1-AS 3410 INET-1-AS 3411 INET-1-AS 3412 LINK2 3413 LINK2 3414 LINK2 3415 LINK2 3416 SIPR-NETWORK1 3417 SIPR-NETWORK2 3418 SIPR-NETWORK3 3419 SIPR-NETWORK4 3420 AADS-DETROIT 3421 AADS-CHICAGO 3422 AADS-GRAPIDS 3423 AADS-LANSING 3424 SATURN 3425 ESNET-AS 3426 ESNET-AS 3427 ESNET-AS 3428 ESNET-AS 3429 ESNET-AS 3430 ESNET-AS 3431 ESNET-AS 3432 ESNET-AS 3433 ESNET-AS 3434 ESNET-AS 3435 ESNET-AS 3436 ESNET-AS 3437 ESNET-AS 3438 ESNET-AS 3439 ESNET-AS 3440 ESNET-AS 3441 ESNET-AS 3442 ESNET-AS 3443 ESNET-AS 3444 ESNET-AS 3445 ESNET-AS 3446 KANSAS 3447 CENTEL-CMDS 3448 MCCAW-AS 3449 REDUBA 3450 UTK 3451 DTD-AS 3452 UAB-AS 3453 COMMNET 3454 UANL 3455 WAUSAU-INS 3456 TW-CABLE 3457 PORTAL-COM 3458 VWNA-AS 3459 PRIMENET2 3460 HEPCAS-AS 3461 GONZAGA-ASN 3462 HINET-AS 3463 ACES-AS 3464 ASC-NET 3465 JBHUNT 3466 ITSDN-ASN1 3467 ITSDN-ASN2 3468 ITSDN-ASN3 3469 ITSDN-ASN4 3470 DODEA-ODE 3471 JCSE01 3472 JCSE02 3473 JCSE03 3474 JCSE04 3475 LANT-AFLOAT 3476 JIEO-ITSI-BB 3477 NOAA-BOULDER 3478 IGC-BACKBONE 3479 PEACHNET-AS1 3480 PEACHNET-AS2 3481 STOFCTDAS 3482 MTSTGOV 3483 RECKITT-MRS 3484 IPN-MX 3485 FCMCNET 3486 JPMORGAN-ASN 3487 LAGOVEN-ASN 3488 SPACENETJP 3489 UNIFYNET 3490 CDINET 3491 CAIS-ASN 3492 ATLANTA 3493 INTERLINK 3494 INS-COM 3495 SENATE-AS 3496 MRVNET 3497 NET-DPA-CA-GOV 3498 NET-SEN-CA-GOV 3499 NET-DMV-CA-GOV 3500 BLACK-STAR 3501 ES-USDA 3502 INTNET 3503 SMSNET 3504 MWDSOCA 3505 VNET-GA 3506 FSU-SCRI 3507 CAPASSOC-AS 3508 CALL-AMERICA 3509 NET-CALPUC 3510 RWC-NET 3511 INFONET 3512 EUSHC 3513 INET-ON-RAMP 3514 INS-INFOSERVICES 3515 DSI-WR 3516 DSI-WR 3517 DSI-WR 3518 DSI-WR 3519 DSI-WR 3520 DSI-WR 3521 DSI-WR 3522 DSI-WR 3523 DSI-WR 3524 DSI-WR 3525 ALBERTSONS 3526 SCCS1 3527 NIH-NET 3528 ITSDN-S1 3529 ITSDN-S2 3530 ITSDN-S3 3535 ITSDN-S8 3536 ITSDN-S9 3537 ITSDN-S10 3538 ITSDN-U1 3539 ITSDN-U2 3540 ITSDN-U3 3541 ITSDN-U4 3542 ITSDN-U5 3543 ITSDN-U6 3544 ITSDN-U7 3545 ITSDN-U8 3546 ITSDN-U9 3547 ITSDN-U10 3548 CINVESRED 3549 GBLX 3550 PHILNET 3551 PANNET 3552 UMI-AS2 3553 COVANET 3554 USIT-ASN 3555 GRCI-WAN 3556 INTEVEP 3557 VIX 3558 MRWA 3559 KORNET 3560 GDSAS 3561 CWUSA 3562 SNLB-NET-AS 3563 PILOT-ASN 3564 PENTELEDATA-1 3565 GHS-ASN 3566 JRIVER-LINK 3567 AGATE 3568 WAIS-AS 3569 ANDERSEN 3570 FMC-1 3571 EY-AS 3572 TEXAS-TYC 3573 AC-PALO-ALTO 3574 ICTV-NET 3575 SEANET-ASN 3578 MV-1 3579 DATABANK 3580 ACCESSCOOP 3581 OBS-NET 3582 UONET 3583 IPTEK-ASN 3584 PUBNIX2-ASN 3585 AMPNET-AS 3586 JAMNET 3587 TWA 3588 EVERGREEN-AS 3589 DIALCORP 3590 C-TEC 3591 EMORY 3592 TRINCOLL-AS 3593 EPIX 3594 RAIN1 3595 NETDEPO-AS 3596 TELEAUM 3597 NET-RETINA 3598 AS-BABOON 3599 BINCNET 3600 SUNNET-AS 3601 IXA-NET 3602 SPRINT-CA-AS 3603 NET-INTERCOL 3604 CPBX 3605 KUENTOS-AS 3606 CONNCOLL-AS 3607 EDS-PLANO-AS 3608 NBNIC-NCA 3609 CYBER-NET 3610 MHV-NET 3611 PIC 3612 DELL-BLK 3613 DELL-BLK 3614 DELL-BLK 3615 DELL-BLK 3616 IP-NET-AS 3617 MCIASN-BLK 3618 MCIASN-BLK 3619 MCIASN-BLK 3620 MCIASN-BLK 3621 MCIASN-BLK 3622 MCIASN-BLK 3623 MCIASN-BLK 3624 CONCERTMANSER 3625 MCIASN-2-BLK 3626 MCIASN-2-BLK 3627 NRAO-VLBA 3628 NYSERNET-BLK 3629 NYSERNET-BLK 3630 NYSERNET-BLK 3631 MRECIC 3632 CONACYT 3633 BC-SYSTEMS 3634 SFASU-AS 3635 BEA 3636 CPVNET 3637 ASN-NWNEXUS2 3638 DASH 3639 AS-BIZNET 3640 RED-CICESE 3641 NETHEAVEN 3642 GSA-PAN-DDN 3643 SPRINT-BB-NETBLK 3644 SPRINT-BB-NETBLK 3645 SPRINT-BB-NETBLK 3646 SPRINT-BB-NETBLK 3647 SPRINT-BB-NETBLK 3648 SPRINT-BB-NETBLK 3649 SPRINT-BB-NETBLK 3650 SPRINT-BB-NETBLK 3651 SPRINT-BB-NETBLK 3652 SPRINT-BB-NETBLK 3653 SKYMALL 3654 AMSTD-NET 3655 GE-IPS 3656 CITYPHX1 3657 TSS-NET 3658 LIGHTLINK 3659 CLAREMONT 3660 CENTEL-OMAN 3661 CUHKNET 3662 HARNET 3663 NETNET-NET 3664 JWID-AS 3665 JWID-AS 3666 JWID-AS 3667 JWID-AS 3668 GNP-DCN 3669 IQUEST 3670 OPTIMUM-AS 3671 SLAC 3672 WINCOM-AS 3673 SYNERGYNET 3674 RCN-AS6 3675 IS-NET 3676 UIOWA-AS 3677 UIOWA-EXTERNAL 3678 GLOBAL-ASN 3679 SKYPOINT-NET 3680 NOVELL 3681 FIU 3682 RACIN 3683 AMERICAN-NET 3684 DDI 3685 BUFFALO-ASN 3686 BBSSYS-ASN 3687 GLOBALCOM-1 3688 PING-INC 3689 HKIGS-BLCK 3690 HKIGS-BLCK 3691 HKIGS-BLCK 3692 HKIGS-BLCK 3693 HKIGS-BLCK 3694 NOAA-SUITLAND 3696 OSD-CPMS 3697 FOXMEYER 3698 RJRNI-INTL1 3699 SENSE 3700 CLOUD9 3701 NERONET 3702 ICSI-NET 3703 EARTHLINK 3704 INTERMIND-ASN 3705 GPO-NET 3706 DIGEX-AS2 3707 DIGEX3707 3708 FF-ASN 3709 NET-CITY-SA 3710 REALM-AS 3711 ISIS-NZ-0 3712 CHASE-US 3713 ICFKAISER 3714 KEC-NET 3715 ECS2 3716 DATAWAVE 3717 BUCT-NET 3718 TCD-CONNECT 3719 CT-JIS 3720 TIMS-AS 3721 ASN-MIKUNI 3722 SCSN 3723 ELECPRESS-AS 3724 ALASKA-ANET 3725 ASN-SONY 3726 JCALS-NET 3727 SHRUBB 3728 ONR-ADDR 3729 CARE-AS 3732 CVCORP 3733 GULF-COAST 3734 SJEN 3735 CONNECTION 3736 RABBITNET 3737 PTD-AS 3738 SSB-ASN 3739 SLPO 3740 CHICAGO-REN 3741 IS 3742 SEMAPHORE-1 3743 SIERRA-NET 3744 CAN-NET 3745 VWAG-AS 3746 IPAC-WORLD 3747 WANG-1 3748 ETRINET 3749 TECNET 3750 NETPOINT1-NET 3751 SNET-AS 3752 ELIZA-NETAXIS 3753 NSCEE 3754 NYSERNET3-AS 3755 NYSERNET3-AS 3756 NYSERNET3-AS 3757 TRAN 3758 SINGNET 3759 CALTEX-AS 3760 TX-DEPT-AGR 3762 INSTINET-AS 3764 NEONET 3765 DNDCFNET1 3766 DNDCFNET2 3767 SOSCORP-AS 3768 DIALOG-AS 3769 HEARST-AS 3770 MONADNET 3771 SPERRY-AS 3772 CETYS-AS 3773 TGE-1 3774 SECARDNEON 3775 IBMAP-MPN 3776 ALOHANET 3777 HAVERFORD 3778 TEMPLE 3779 CRISIS-WORLD 3780 ASN-ADVANTIS2 3781 USBM-PGH 3782 SWARTHMORE 3783 AIU-GATEWAY 3784 POSTECHNET 3785 TPOINT 3786 DACOMNET 3787 MOBILE-1 3788 TEXAS-DOT 3789 INTERACCESS2 3790 RACSANET 3792 CIS2 3793 TIC 3794 TAMU 3795 BRYNMAWR 3796 OUTERNET 3797 METASYS-VNET 3798 LAW-SERVICES 3799 IDS 3800 NMC 3801 MISNET 3802 LGHS 3803 RCN-AS1 3804 WORLDLINX 3805 ASN-LAMB 3806 SCOOP 3807 UMTNET-ASN 3808 CYBERGATE-AS 3809 NWCORP1 3810 VWMX-AS 3811 INTAC-AS 3812 LTVIAS 3813 SOGANGNET 3814 IMS-INTERCOM 3815 AQUILA 3816 SAITEL-CO 3817 FREESIDE-NET 3818 STEP2-AS 3820 ACP 3821 ABLECOM 3822 ITSNET 3823 CIMTG 3825 HANANET 3826 REDLION 3827 ELECTRICITI 3828 CIRRUS 3829 METROBBS 3830 NET99 3831 FIBRNET-B1 3832 CINE-NET 3833 WYOMING 3834 PERFTECH 3835 STATIS-AS 3836 THAISARN 3837 ELK-MOUNTAIN 3838 SVJAVA 3839 CHULANET 3840 LABTAM 3841 BIHS-NET 3843 INTEXO-MRS 3844 VRIO-3844 3845 STATE-NET 3846 NANDO 3847 GENUITY 3848 WORLDLINX-2 3849 NET-HA 3850 LTECNET 3851 SCS-NV 3852 MAG-AS 3853 WHIDBEY 3854 DNACO-AS 3855 IBL-LYNX 3856 PCH-AS 3857 INC 3858 NPPDNET 3859 AMEDD-EUR 3860 AMEDD-EUR 3861 AMEDD-EUR 3862 AMEDD-EUR 3863 AMEDD-EUR 3864 AMEDD-EUR 3865 AMEDD-EUR 3866 AMEDD-EUR 3867 AMEDD-EUR 3868 AMEDD-EUR 3869 AMEDD-EUR 3870 AMEDD-EUR 3871 AMEDD-EUR 3872 AMEDD-EUR 3873 AMEDD-EUR 3874 AMEDD-EUR 3875 AMEDD-EUR 3876 AMEDD-EUR 3877 AMEDD-EUR 3878 AMEDD-EUR 3879 AMEDD-EUR 3880 AMEDD-EUR 3881 AMEDD-EUR 3882 AMEDD-EUR 3883 AMEDD-EUR 3884 AMEDD-EUR 3885 AMEDD-EUR 3886 AMEDD-EUR 3887 AMEDD-EUR 3888 AMEDD-EUR 3889 AMEDD-EUR 3890 AMEDD-EUR 3891 AMEDD-EUR 3892 AMEDD-EUR 3893 AMEDD-EUR 3894 AMEDD-EUR 3895 AMEDD-EUR 3896 AMEDD-EUR 3897 AMEDD-EUR 3898 UCSF-HISD 3899 CHICO-NET 3900 YOKUBAITIS 3901 ARRAKIS 3902 GLAXOCA-1 3903 NAG-AS 3904 ASTHOUGHTPRT 3905 REDUNO 3906 ADS-1-AS 3907 CONNECT-1-NET 3908 SUPERNETASBLK 3909 SUPERNETASBLK 3910 SUPERNETASBLK 3911 MIS-AS 3912 NMSU-AS 3913 UMMEDICAL 3914 DX-NET 3916 OSIS-PACOM 3917 SCIS-NL 3918 SCIS-UK 3919 HARBORNET 3920 IMS-RTFM 3921 GEIS-OOCL 3922 GEIS-YAM 3923 FAA-MMAC 3924 TX-OAG 3925 ICO-SV 3926 FFX-CNTY 3927 RGNET-WAO 3928 VALLEY-TECH 3929 FINSYS-NET 3930 FERC-FED-US 3931 LOGICAL 3932 VOICENET 3933 OPEN 3934 VRIO-3934 3935 EASTWAUNIV 3936 VRIO-3936-3942 3937 VRIO-3936-3942 3938 VRIO-3936-3942 3939 VRIO-3936-3942 3940 VRIO-3936-3942 3941 VRIO-3936-3942 3942 VRIO-3936-3942 3943 DMM 3944 PARTAN-LAB 3945 VRIO-3945 3946 VRIO-3946-3949 3947 VRIO-3946-3949 3948 VRIO-3946-3949 3949 VRIO-3946-3949 3950 IXL-AS 3951 QWST 3952 TELLABS-ASN 3953 PROFILE 3954 DFAS-PC-NET 3955 WANG-US-1 3956 TX-METRO 3957 AIP 3958 AIRCANADA 3959 ONEWORLD 3960 AASAMERITECH 3961 INDUSTRYNET 3963 INTERLINK-2 3964 INTERLINK-3 3965 INTERLINK-4 3966 INTERLINK-5 3967 CW-AS3967 3968 COLMEX-AS 3969 STPHNET 3970 RG-PART 3971 NETS-ABQ-VA 3972 AS-SPRINTLINK-NYSERN1 3973 AS-SPRINTLINK-NYSERN2 3974 REZONET 3975 AMSC 3976 NURI-ASN 3977 UTELFLA 3978 UTELFLA 3979 UTELFLA 3980 UTELFLA 3981 UTELFLA 3982 UTELFLA 3983 UTELFLA 3984 UTELFLA 3985 UTELFLA 3986 UTELFLA 3987 UTELFLA 3988 UTELFLA 3989 UTELFLA 3990 UTELFLA 3991 UTELFLA 3992 UTELFLA 3993 KW-NET 3994 INET-CORE-AS 3995 IWEB 3996 FIRN 3997 ACM-AS 3998 CITY-NET 3999 PENN-STATE 4000 GLOBAL-SPLK 4001 GLOBAL-SPLK 4002 GLOBAL-SPLK 4003 GLOBAL-SPLK 4004 GLOBAL-SPLK 4005 GLOBAL-SPLK 4006 NETRAIL 4007 HKSUPER-1 4008 UNIVERSAL 4009 INET 4010 USACE-WEST 4011 USACE-EAST 4012 DCM 4013 ASN-GAN 4014 WIS 4015 USWEST 4016 RIS 4017 BELLST 4018 DIA-AS 4019 IIE-AS 4020 TASDAC 4021 TASDAC 4022 TASDAC 4023 TASDAC 4024 TASDAC 4025 TASDAC 4026 TASDAC 4027 TASDAC 4028 TASDAC 4029 TASDAC 4030 TASDAC 4031 TASDAC 4032 TASDAC 4033 TASDAC 4034 TASDAC 4035 TASDAC 4036 TASDAC 4037 TASDAC 4038 TASDAC 4039 ALBANYNET 4040 KORNET-PS 4041 RGNET-SJ0 4042 DURANGONET 4043 MIC-ASN 4044 AKSI-NET-AS 4045 AS-WINTERNET 4046 FAA 4047 CIRS-AS 4048 SPTEL 4049 OTP-1 4050 OMNINET-PRI-AS 4051 PACAFINY-GW 4053 USRX-AS 4054 EZNETNY-AS 4055 UDEL-1 4056 LASC-USAF 4057 I2020 4058 LINKAGENET 4059 WENG-AS 4060 KORNET-DJ 4061 GTTW-NET 4062 SIGNALDATA 4063 ELCSCI-ASN 4064 NET99-1 4065 APPOC 4066 APPOC 4067 APPOC 4068 APPOC 4069 APPOC 4070 APPOC 4071 APPOC 4072 APPOC 4073 APPOC 4074 APPOC 4075 APPOC 4076 APPOC 4077 APPOC 4078 APPOC 4079 APPOC 4080 APPOC 4081 APPOC 4082 APPOC 4083 APPOC 4084 APPOC 4085 APPOC 4086 APPOC 4087 APPOC 4088 APPOC 4089 APPOC 4090 APPOC 4091 APPOC 4092 APPOC 4093 APPOC 4094 APPOC 4095 APPOC 4096 APPOC 4097 APPOC 4098 APPOC 4099 APPOC 4100 APPOC 4101 APPOC 4102 APPOC 4103 APPOC 4104 APPOC 4105 APPOC 4106 APPOC 4107 APPOC 4108 APPOC 4109 APPOC 4110 APPOC 4111 APPOC 4112 APPOC 4113 APPOC 4114 APPOC 4115 APPOC 4116 APPOC 4117 APPOC 4118 APPOC 4119 APPOC 4120 APPOC 4121 APPOC 4122 APPOC 4123 APPOC 4124 APPOC 4125 APPOC 4126 SPTEL2 4127 DUPONT-SCD 4128 RG-SPARE 4129 WIRED-NET 4130 UPITT-AS 4131 USIS-AS 4132 NET99-2 4133 BITWISE 4134 CHINALINK 4135 ENVISIONET 4136 GLOBIX-AS 4137 DIRECTNET 4138 REACH 4139 INTERSRV 4140 INMIND 4141 ICA 4142 GIN-HK 4143 UNIBASE 4144 INTERGUIDE 4145 FRITZNET 4146 TACH-NET 4147 AFLOAT-MED 4148 ACTCOM 4149 UCCS-II 4150 SUPRANET-WIS 4151 USDA-1 4152 USDA-1 4153 USDA-1 4154 USDA-1 4155 USDA-1 4156 USDA-1 4157 USDA-1 4158 CITYUHK 4159 ONEWORLD-AS-1 4160 SPECTRA 4161 TIN-1 4162 TIN-1 4163 TIN-1 4164 TIN-1 4165 DISASD 4166 APPL-AS-4166 4167 CONNECTSOFT-COM 4168 GULFSTAR 4169 ECHNET 4170 DIA-HOCNET 4171 EUROGRAFIX 4172 WAYNESBURG 4173 WATER 4174 CONNECT-COM 4175 CONNECT-NCM 4176 PGH-NET 4177 WORLTEK 4178 ASN-AZTEC 4179 CITY-OF-LA 4180 CHAPUB 4181 TDS-AS 4182 RE-INFOLINK 4183 UUNET-MCIWCOM 4184 STORTEK-WHQ 4185 AADS-INDY 4186 AADS-SAGINAW 4187 INFOBAHN 4188 GILBARCO-AS 4189 OSSHENET1 4190 BINGHAMTON-U 4191 STORTEK-NAT 4192 STORTEK-INT 4193 WA-STATE-GOV 4194 SDINTERNET 4195 SHAW 4196 NMB-NETS 4197 GLOBALONLINE 4198 RADIXNET 4200 AGIS-NET 4201 ORST-AS 4202 SAMSUNG-SEC2 4203 TGF-TIS 4204 ALLWARE-AS 4206 INMS 4207 NET-INTRNET 4208 ISERV-AS 4209 PQVNET 4210 Y 4211 ASN-MARICOPA1 4212 SPRINT-MAT 4214 NAPLESCLIN 4215 NAPLESCLIN 4216 NAPLESCLIN 4217 NAPLESCLIN 4218 NAPLESCLIN 4219 NAPLESCLIN 4220 NAPLESCLIN 4221 NAPLESCLIN 4222 LEN-NET 4223 CONNIX 4224 CALYX-AS 4225 NAV-AS 4226 ASN-PERSIS 4227 TCCGI-AS 4228 CDFA-CA-GOV 4229 DIRECT-NET2 4230 EMBRATEL-BR 4231 FASTNET-ASN 4232 EDEN-AS 4233 DWRSCADA 4234 CT-WCC 4235 DGS-2 4236 CITIZENS-AS 4237 INTERLINK-S 4238 TX-TREASNET 4239 COAST-NET 4240 NJNET-AS 4241 FTB 4242 SOLAR-NET 4243 NC-FUNB-AS 4244 RTN-1 4245 ECHO-AS 4246 NJIT-AS 4247 CAPCON-AS 4248 CYBERTRIBE 4249 LILLY-AS 4250 NUKE-NET 4251 TWICS 4252 GMS-AS 4253 RWJNET 4254 PICA-ISAN 4255 BAIN 4256 INTERGATE-GW 4257 CYBERCASH-AS 4258 WOLFENET 4259 IOCOM 4260 DCCI-AS 4261 BLUEGRASSNET 4262 CERNET-ASN-BLOCK 4263 CERNET-ASN-BLOCK 4264 CERNET-ASN-BLOCK 4265 CERNET-ASN-BLOCK 4266 CERNET-ASN-BLOCK 4267 CERNET-ASN-BLOCK 4268 CERNET-ASN-BLOCK 4269 CERNET-ASN-BLOCK 4270 RIU 4271 WORX 4272 MDN 4273 JSC-NET-ASN 4274 AU-NET 4275 CLIPPER 4276 INCH 4277 KIVEX 4278 IADFW 4279 INTERSOURCE 4281 CWUSA-BLK 4282 CWUSA-BLK 4283 CWUSA-BLK 4284 CWUSA-BLK 4285 CWUSA-BLK 4286 MCI-WORLD 4287 CWUSA-2BLK 4288 CWUSA-2BLK 4289 CWUSA-2BLK 4290 CWUSA-2BLK 4291 CWUSA-2BLK 4292 CWUSA-2BLK 4293 CWUSA-2BLK 4294 CWUSA-2BLK 4295 CWUSA-2BLK 4296 CWUSA-2BLK 4297 CWUSA-2BLK 4298 CWUSA-2BLK 4299 JSC-NET-ASN2 4300 JSC-NET-ASN2 4301 JSC-NET-ASN2 4302 BUPERSLAN 4303 DDN-S-AS 4304 YPN-NET 4305 PREMIER 4306 NOVIA 4307 SVINET-1 4308 TEZCAT-ASN 4309 FRMCO 4311 WINC 4312 FYI 4313 DELTANET 4314 COMMNET-ASN 4315 STACCS-A 4316 DSI-CUST-BLK 4318 FMI-NET-AS 4319 CORTLAND 4320 TASA-GW 4321 INSINC2 4322 EBTECH 4323 TW-COMM 4324 WHC-NET 4325 PWCYOKO 4326 TNTONLINE 4327 SNA-NET 4328 STACCS-A1-24 4329 STACCS-A1-24 4330 STACCS-A1-24 4331 STACCS-A1-24 4332 STACCS-A1-24 4333 STACCS-A1-24 4334 STACCS-A1-24 4335 STACCS-A1-24 4336 STACCS-A1-24 4337 STACCS-A1-24 4338 STACCS-A1-24 4339 STACCS-A1-24 4340 STACCS-A1-24 4341 STACCS-A1-24 4342 STACCS-A1-24 4343 STACCS-A1-24 4344 STACCS-A1-24 4345 STACCS-A1-24 4346 STACCS-A1-24 4347 STACCS-A1-24 4348 STACCS-A1-24 4349 STACCS-A1-24 4350 STACCS-A1-24 4351 STACCS-A1-24 4352 GLOBAL-LINK 4353 WNET-AS 4355 ERMS-EARTHLNK 4356 RICOCHET-4356 4357 PHASE4-RO 4358 XNET 4359 DIGIPRESS-AS 4360 AGNES-SCOTT 4361 PCIX-AS 4362 DIGITOPIA-AS 4363 ALPHA-BETA 4364 IGLOU 4365 DIGITAL-CAFE-ASN 4366 GE-AMC 4367 SECSTATE-CA-GOV 4368 CRCNET 4369 IQUEST-ASN 4370 TELERES-NET 4371 FEMA-GOV 4372 NET-LM 4373 OCLC-AS 4374 CONNECT 4375 KEY 4376 DSW-INET 4377 SSSI-NETS 4378 EXPRESS-TECH-4378 4379 SIPRNCC 4380 USACAA-NET1 4381 CONNECT-COM2 4382 LINTASARTA 4383 NAIC 4384 MULTI-NET 4385 RIT-ASN 4386 OSPASN 4387 RECYT 4388 NET99-3 4389 DATASERVE-AS 4390 BELLATLANTIC-COM 4391 BRI-NET 4392 CROWN-NET 4393 PATHFINDER 4394 DSI-CUST-BLK2 4395 DSI-CUST-BLK2 4396 DSI-CUST-BLK2 4397 DSI-CUST-BLK2 4398 DSI-CUST-BLK2 4399 DSI-CUST-BLK2 4400 DSI-CUST-BLK2 4401 DSI-CUST-BLK2 4402 DSI-CUST-BLK2 4403 DSI-CUST-BLK2 4404 DSI-CUST-BLK2 4405 LINK3 4406 LINK3 4407 LINK3 4408 LINK3 4409 LINK3 4410 LINK3 4411 LINK3 4412 LINK3 4413 LINK3 4414 LINK3 4415 LINK3 4416 LINK3 4417 LINK3 4418 LINK3 4419 LINK3 4420 LINK3 4421 LINK3 4422 LINK3 4423 LINK3 4424 LINK3 4425 LINK3 4426 LINK3 4427 LINK3 4428 LINK3 4429 LINK3 4430 LINK3 4431 LINGNAN 4432 CSTONE-NET 4433 ACCESS-ONE 4434 RADNET1-AS 4435 INCH-AS-1 4436 AS-SCRUZ-NET 4437 WEBB 4438 NEPTUNE 4439 IMEFDJOSS 4440 IIIMEFDJOSS 4441 MARFORPACDJOSS 4442 TRACWS 4444 CISNET-AS 4445 CWI-AS 4446 INFINET-ASN 4447 HOOKED-AS 4448 OPEN-ACCESS-AS 4449 ASN-GALSTAR 4450 WEBNET 4452 AMERICA 4453 TDS-TELECOM 4454 TNET-AS 4455 RICOCHET-4455 4456 GSNET-NETS 4457 NESTE-NET 4458 CCNET 4459 KDD-NET 4460 RVCC 4461 OPUSTEL-AS 4462 NDLINK 4463 ONET3-DOM 4464 TWNAO-AS 4465 EASYLINK1 4466 EASYLINK2 4467 EASYLINK3 4468 EASYLINK4 4469 SPHERENET-AS 4470 ASN-CITENET 4471 MICAE91-AS 4472 IONET 4473 AADS-MI-UP 4474 GVIL1 4475 GVIL2 4477 BBDATA 4478 PNET-STL 4479 JTM 4480 EMTF-RMAIN 4481 EMTF-SEM 4482 EMTF-GEIL 4483 EMTF-SPANG 4484 EMTF-BIT 4485 EMTF-RAMDEN 4486 EMTF-RAM 4487 EMTF-UPW 4488 EMTF-CRO 4489 EMTF-MOL 4490 EMTF-LAK 4491 MULTIPRO 4492 RTD 4493 UNI-SON 4494 INTERBYTES 4495 TERRAPORT 4496 UUCOM-AS 4497 UPSTEL-NET 4498 GLOBALONE 4499 WEBNET-ASN 4500 NET-TIVOLI 4501 MICAE91-MICA 4502 CINCOM-MRS 4503 EGINTERLINK 4504 GSASNETXGW 4506 SEW-AS 4507 ASN-SUDRCSS-NET 4508 NETSOUTH 4509 ONRAMP-CA1 4510 ONRAMP-CA1 4511 MIAMI-EDU 4512 PCWNET 4513 TIG 4515 STAR 4516 TRENDLINE 4517 VOLANT 4518 TELECOM 4519 MAAS 4520 AQUA 4521 MIRACLE 4522 COMPUCALL 4523 GEIS 4524 TRU-MRS 4525 POPPE 4526 ARMY-FMO 4527 RCN-AS-1 4528 HKUNET 4529 RIS-NET 4530 RCN-AS5 4531 MEDWEB 4532 WARWICK 4533 GLOBESAT 4534 IXA-ASN 4535 TRUE 4536 PEARLY-GATE 4537 BAILEYS-GWS1 4538 CERNET-BKB 4539 NETROPOLIS 4540 WELL 4541 IWORK 4542 RRNET-AS 4543 TIMESNET 4544 CONXION-A 4545 SONNET-ASN 4546 MCGRAW-AS 4547 BLS-AS 4548 AG 4549 ESPN-AS 4550 AN-CMSPP 4551 EP0-BLK-ASNBLOCK 4552 EP0-BLK-ASNBLOCK-2 4553 NAP-MAEWEST 4554 EP0-BLK-ASNBLOCK-4 4555 EP0-BLK-ASNBLOCK-5 4556 EP0-BLK-ASNBLOCK-6 4557 EP0-BLK-ASNBLOCK-7 4558 EP0-BLK-ASNBLOCK-8 4559 EP0-BLK-ASNBLOCK-9 4560 EP0-BLK-ASNBLOCK-10 4561 EP0-BLK-ASNBLOCK-11 4562 INTEX 4564 NIPRNET 4565 EPOCH-INTERNET 4566 3COMMW 4567 DEC-ENET 4568 WALLACE-NET 4569 ASHTON-NET1 4570 IH2000 4571 UUNET-SA 4572 JAXINTER 4573 SEQUEL2 4574 NETDOOR 4575 CYBERHOUSE 4578 NETCENTER 4580 CORSAIR 4581 SOCKET 4582 REALLINK 4583 WESTPUB-A 4584 PTI-NET 4585 NAVISOFT 4586 TX-TNRIS 4587 ONEWORLD2 4588 FINNPAP-MRS 4589 TECHNOCOM 4590 MARCAM-GW 4591 SYRANET-GW 4592 OPENMARKET-NET 4593 RELIANCE 4594 INOAC-HK 4595 ICNET 4596 MONGTOMERY 4597 MILLIPORE 4598 HRB 4599 MINNNET-NET 4600 UO-TRANSIT 4601 PAGESAT 4602 NAVO 4603 SONETIS 4604 HOUSTON-ISD 4605 HKBUNET 4606 HCI 4607 NORAD-SPACE 4608 APNIC-AS-BLOCK 4609 APNIC-AS-BLOCK 4610 APNIC-AS-BLOCK 4611 APNIC-AS-BLOCK 4612 APNIC-AS-BLOCK 4613 APNIC-AS-BLOCK 4614 APNIC-AS-BLOCK 4615 APNIC-AS-BLOCK 4616 APNIC-AS-BLOCK 4617 APNIC-AS-BLOCK 4618 APNIC-AS-BLOCK 4619 APNIC-AS-BLOCK 4620 APNIC-AS-BLOCK 4621 APNIC-AS-BLOCK 4622 APNIC-AS-BLOCK 4623 APNIC-AS-BLOCK 4624 APNIC-AS-BLOCK 4625 APNIC-AS-BLOCK 4626 APNIC-AS-BLOCK 4627 APNIC-AS-BLOCK 4628 APNIC-AS-BLOCK 4629 APNIC-AS-BLOCK 4630 APNIC-AS-BLOCK 4631 APNIC-AS-BLOCK 4632 APNIC-AS-BLOCK 4633 APNIC-AS-BLOCK 4634 APNIC-AS-BLOCK 4635 APNIC-AS-BLOCK 4636 APNIC-AS-BLOCK 4637 APNIC-AS-BLOCK 4638 APNIC-AS-BLOCK 4639 APNIC-AS-BLOCK 4640 APNIC-AS-BLOCK 4641 APNIC-AS-BLOCK 4642 APNIC-AS-BLOCK 4643 APNIC-AS-BLOCK 4644 APNIC-AS-BLOCK 4645 APNIC-AS-BLOCK 4646 APNIC-AS-BLOCK 4647 APNIC-AS-BLOCK 4648 APNIC-AS-BLOCK 4649 APNIC-AS-BLOCK 4650 APNIC-AS-BLOCK 4651 APNIC-AS-BLOCK 4652 APNIC-AS-BLOCK 4653 APNIC-AS-BLOCK 4654 APNIC-AS-BLOCK 4655 APNIC-AS-BLOCK 4656 APNIC-AS-BLOCK 4657 APNIC-AS-BLOCK 4658 APNIC-AS-BLOCK 4659 APNIC-AS-BLOCK 4660 APNIC-AS-BLOCK 4661 APNIC-AS-BLOCK 4662 APNIC-AS-BLOCK 4663 APNIC-AS-BLOCK 4664 APNIC-AS-BLOCK 4665 APNIC-AS-BLOCK 4666 APNIC-AS-BLOCK 4667 APNIC-AS-BLOCK 4668 APNIC-AS-BLOCK 4669 APNIC-AS-BLOCK 4670 APNIC-AS-BLOCK 4671 APNIC-AS-BLOCK 4672 APNIC-AS-BLOCK 4673 APNIC-AS-BLOCK 4674 APNIC-AS-BLOCK 4675 APNIC-AS-BLOCK 4676 APNIC-AS-BLOCK 4677 APNIC-AS-BLOCK 4678 APNIC-AS-BLOCK 4679 APNIC-AS-BLOCK 4680 APNIC-AS-BLOCK 4681 APNIC-AS-BLOCK 4682 APNIC-AS-BLOCK 4683 APNIC-AS-BLOCK 4684 APNIC-AS-BLOCK 4685 APNIC-AS-BLOCK 4686 APNIC-AS-BLOCK 4687 APNIC-AS-BLOCK 4688 APNIC-AS-BLOCK 4689 APNIC-AS-BLOCK 4690 APNIC-AS-BLOCK 4691 APNIC-AS-BLOCK 4692 APNIC-AS-BLOCK 4693 APNIC-AS-BLOCK 4694 APNIC-AS-BLOCK 4695 APNIC-AS-BLOCK 4696 APNIC-AS-BLOCK 4697 APNIC-AS-BLOCK 4698 APNIC-AS-BLOCK 4699 APNIC-AS-BLOCK 4700 APNIC-AS-BLOCK 4701 APNIC-AS-BLOCK 4702 APNIC-AS-BLOCK 4703 APNIC-AS-BLOCK 4704 APNIC-AS-BLOCK 4705 APNIC-AS-BLOCK 4706 APNIC-AS-BLOCK 4707 APNIC-AS-BLOCK 4708 APNIC-AS-BLOCK 4709 APNIC-AS-BLOCK 4710 APNIC-AS-BLOCK 4711 APNIC-AS-BLOCK 4712 APNIC-AS-BLOCK 4713 APNIC-AS-BLOCK 4714 APNIC-AS-BLOCK 4715 APNIC-AS-BLOCK 4716 APNIC-AS-BLOCK 4717 APNIC-AS-BLOCK 4718 APNIC-AS-BLOCK 4719 APNIC-AS-BLOCK 4720 APNIC-AS-BLOCK 4721 APNIC-AS-BLOCK 4722 APNIC-AS-BLOCK 4723 APNIC-AS-BLOCK 4724 APNIC-AS-BLOCK 4725 APNIC-AS-BLOCK 4726 APNIC-AS-BLOCK 4727 APNIC-AS-BLOCK 4728 APNIC-AS-BLOCK 4729 APNIC-AS-BLOCK 4730 APNIC-AS-BLOCK 4731 APNIC-AS-BLOCK 4732 APNIC-AS-BLOCK 4733 APNIC-AS-BLOCK 4734 APNIC-AS-BLOCK 4735 APNIC-AS-BLOCK 4736 APNIC-AS-BLOCK 4737 APNIC-AS-BLOCK 4738 APNIC-AS-BLOCK 4739 APNIC-AS-BLOCK 4740 APNIC-AS-BLOCK 4741 APNIC-AS-BLOCK 4742 APNIC-AS-BLOCK 4743 APNIC-AS-BLOCK 4744 APNIC-AS-BLOCK 4745 APNIC-AS-BLOCK 4746 APNIC-AS-BLOCK 4747 APNIC-AS-BLOCK 4748 APNIC-AS-BLOCK 4749 APNIC-AS-BLOCK 4750 APNIC-AS-BLOCK 4751 APNIC-AS-BLOCK 4752 APNIC-AS-BLOCK 4753 APNIC-AS-BLOCK 4754 APNIC-AS-BLOCK 4755 APNIC-AS-BLOCK 4756 APNIC-AS-BLOCK 4757 APNIC-AS-BLOCK 4758 APNIC-AS-BLOCK 4759 APNIC-AS-BLOCK 4760 APNIC-AS-BLOCK 4761 APNIC-AS-BLOCK 4762 APNIC-AS-BLOCK 4763 APNIC-AS-BLOCK 4764 APNIC-AS-BLOCK 4765 APNIC-AS-BLOCK 4766 APNIC-AS-BLOCK 4767 APNIC-AS-BLOCK 4768 APNIC-AS-BLOCK 4769 APNIC-AS-BLOCK 4770 APNIC-AS-BLOCK 4771 APNIC-AS-BLOCK 4772 APNIC-AS-BLOCK 4773 APNIC-AS-BLOCK 4774 APNIC-AS-BLOCK 4775 APNIC-AS-BLOCK 4776 APNIC-AS-BLOCK 4777 APNIC-AS-BLOCK 4778 APNIC-AS-BLOCK 4779 APNIC-AS-BLOCK 4780 APNIC-AS-BLOCK 4781 APNIC-AS-BLOCK 4782 APNIC-AS-BLOCK 4783 APNIC-AS-BLOCK 4784 APNIC-AS-BLOCK 4785 APNIC-AS-BLOCK 4786 APNIC-AS-BLOCK 4787 APNIC-AS-BLOCK 4788 APNIC-AS-BLOCK 4789 APNIC-AS-BLOCK 4790 APNIC-AS-BLOCK 4791 APNIC-AS-BLOCK 4792 APNIC-AS-BLOCK 4793 APNIC-AS-BLOCK 4794 APNIC-AS-BLOCK 4795 APNIC-AS-BLOCK 4796 APNIC-AS-BLOCK 4797 APNIC-AS-BLOCK 4798 APNIC-AS-BLOCK 4799 APNIC-AS-BLOCK 4800 APNIC-AS-BLOCK 4801 APNIC-AS-BLOCK 4802 APNIC-AS-BLOCK 4803 APNIC-AS-BLOCK 4804 APNIC-AS-BLOCK 4805 APNIC-AS-BLOCK 4806 APNIC-AS-BLOCK 4807 APNIC-AS-BLOCK 4808 APNIC-AS-BLOCK 4809 APNIC-AS-BLOCK 4810 APNIC-AS-BLOCK 4811 APNIC-AS-BLOCK 4812 APNIC-AS-BLOCK 4813 APNIC-AS-BLOCK 4814 APNIC-AS-BLOCK 4815 APNIC-AS-BLOCK 4816 APNIC-AS-BLOCK 4817 APNIC-AS-BLOCK 4818 APNIC-AS-BLOCK 4819 APNIC-AS-BLOCK 4820 APNIC-AS-BLOCK 4821 APNIC-AS-BLOCK 4822 APNIC-AS-BLOCK 4823 APNIC-AS-BLOCK 4824 APNIC-AS-BLOCK 4825 APNIC-AS-BLOCK 4826 APNIC-AS-BLOCK 4827 APNIC-AS-BLOCK 4828 APNIC-AS-BLOCK 4829 APNIC-AS-BLOCK 4830 APNIC-AS-BLOCK 4831 APNIC-AS-BLOCK 4832 APNIC-AS-BLOCK 4833 APNIC-AS-BLOCK 4834 APNIC-AS-BLOCK 4835 APNIC-AS-BLOCK 4836 APNIC-AS-BLOCK 4837 APNIC-AS-BLOCK 4838 APNIC-AS-BLOCK 4839 APNIC-AS-BLOCK 4840 APNIC-AS-BLOCK 4841 APNIC-AS-BLOCK 4842 APNIC-AS-BLOCK 4843 APNIC-AS-BLOCK 4844 APNIC-AS-BLOCK 4845 APNIC-AS-BLOCK 4846 APNIC-AS-BLOCK 4847 APNIC-AS-BLOCK 4848 APNIC-AS-BLOCK 4849 APNIC-AS-BLOCK 4850 APNIC-AS-BLOCK 4851 APNIC-AS-BLOCK 4852 APNIC-AS-BLOCK 4853 APNIC-AS-BLOCK 4854 APNIC-AS-BLOCK 4855 APNIC-AS-BLOCK 4856 APNIC-AS-BLOCK 4857 APNIC-AS-BLOCK 4858 APNIC-AS-BLOCK 4859 APNIC-AS-BLOCK 4860 APNIC-AS-BLOCK 4861 APNIC-AS-BLOCK 4862 APNIC-AS-BLOCK 4863 APNIC-AS-BLOCK 4864 APNIC-AS-BLOCK 4908 XO-AS17 4909 FCDNA 4910 SPRINTNET-NC 4911 USW-INTERNET 4913 IWL 4914 HONDUNET 4915 TRANE-UPG 4916 HQINSCOM 4917 AMDOCS-AS 4918 THEPOINT-NET 4919 CONSOLIDATED 4920 CYBERPORTS 4921 EX-SV-GW5 4922 GLOBALCOM 4923 MCIX 4924 NIIA-NET 4925 FIRSTDATA 4926 TELINTAR 4927 ASN-SBCNET 4928 VAIS 4929 BENCHMARK 4930 DMG1 4931 INTERSRV2 4932 I3 4933 WPE 4934 LANIER-WW 4936 HC-LIB 4937 IAMERICA-NET 4938 SPRINTNET-SC 4939 ASN-SOLECT 4940 SOUTHWINDNET 4941 FDT 4942 B-NET 4943 NOL-AS 4944 PDVNET 4945 HARRIS-SEMICONDUCTOR 4947 NEONET-LA 4948 AIX-NET 4949 UCINET-EIGRP 4950 ASN-SPRN-NYSERNET1 4951 SPRINTLINK-NYSERNET2B 4952 CAPECOD 4953 BCPL 4954 CARR 4955 NDL 4956 LOGICSYS 4957 VCNET 4958 LDSNET 4959 CORPCOMM 4960 PERNET 4961 DHI-NET 4962 WINKCOMM 4963 TEXOMA 4964 4964 4965 AMER 4966 TELEPATH 4967 STARTEL 4969 NETACCESS 4971 NWPROS 4972 FRITZNET2 4973 FRITZNET3 4974 GROVE-MRS 4975 LASER-NET-BLOCK 4976 SUNGLASSES 4977 NET1 4978 GDI-NET-AS 4979 GEIS-GENIE 4981 TECLINK 4982 JAZZIE 4983 INTEL-SC-AS 4984 INGRESS 4986 SHASTA-NET 4987 ALOHANET2 4988 ALOHANET1 4989 CFT-NET 4990 AADS-MILWAUKEE2 4991 NET99-4-7-BLK 4992 NET99-4-7-BLK 4993 NET99-4-7-BLK 4994 NET99-4-7-BLK 4995 NETUP 4996 SBI 4997 VELOCITUS 4998 LANDE 4999 SPRINTIPDIAL 5000 IOS-NET 5001 SONIC 5002 BBSATLGA 5003 INSYNC-1 5004 EAGLENET 5005 LAT 5006 MIXNET-NET 5007 COMPUTOPIA 5009 ADVTEL 5010 KISNET-1 5011 EMTF-AVI 5012 EMTF-AZO 5013 EMTF-IZM 5014 EMTF-INC 5015 SHOUTING 5016 BRAGG-GCC 5017 HUGE-NET 5018 HUGE-NET 5019 DATACOM-GATE 5020 MEA 5021 PACAF-GCCS 5022 FANEUIL 5023 FIREBALL 5024 BRIDGE 5025 ASN-DATABANK 5026 LVVWD 5027 ACSIL 5028 GATEWAYNORTH 5029 VEGAS-NET 5030 TAL 5031 DOCCNET 5033 ISW 5034 AS-STARNET 5035 CYNET 5036 WCA 5037 NSTCPVAX 5038 NSAN-DOM 5039 TECNET2 5040 MINT 5041 SUPERLINK-NET 5042 DISC2 5043 PERRAUT 5044 ASN-DATABANK1 5045 ASN-DATABANK1 5046 RANDOMC 5047 ARNET2 5048 FIBER 5049 MORGAN-ASN 5050 PSC-EXT 5051 KOREAPC 5052 SETA-DMS 5053 HTP 5054 PROGNET 5055 WANET 5056 INS-NET-2 5057 XENITEC 5058 NRL-EXP 5059 STARPAGING 5060 APPLIEDTHEORY 5061 APPLIEDTHEORY 5062 APPLIEDTHEORY 5063 APPLIEDTHEORY 5064 APPLIEDTHEORY 5065 APPLIEDTHEORY 5066 APPLIEDTHEORY 5067 APPLIEDTHEORY 5068 APPLIEDTHEORY 5069 APPLIEDTHEORY 5070 COMED 5071 WESTEL-1 5072 INDYNET 5073 GM-EDS-1 5074 ASN-ATTELS 5075 ASN-ATTGMS 5076 UNICOM 5077 ASN-WSNET 5078 ONENET-AS-1 5079 DIAL-CALL 5080 ARAMCO-AS 5081 WINTERLAN 5082 CLOVERLEAF 5083 DRAKE-NET 5084 GSL-HQ 5085 NETFUN 5086 IDNET 5087 LANKA-COM 5088 NIS-1 5089 CABLETEL 5090 CWI-NYD 5092 NNE 5093 OVID-AS 5094 PARAGON-AS 5095 BOOKLINK-AS 5097 SOFTAWARE 5099 NWUC 5100 ASN-TX-DDC 5101 SII 5102 AADS-CHAMPAIGN 5103 AADS-INDY3 5104 AADS-CHAMPAIGN2 5105 AADS-COLUMBUS2 5106 AADS-COLUMBUS 5107 AADS-CLEVELAND2 5108 AADS-CLEVELAND 5109 AS-NTER-NET 5111 CABLE-ASN 5112 SIDLINGER 5113 HGEA-AS 5114 KBI-NET-GW 5115 ONESTEP 5120 DODNIC 5121 DODNIC 5122 DODNIC 5123 DODNIC 5124 DODNIC 5125 DODNIC 5126 DODNIC 5127 DODNIC 5128 DODNIC 5129 DODNIC 5130 DODNIC 5131 DODNIC 5132 DODNIC 5133 DODNIC 5134 DODNIC 5135 DODNIC 5136 DODNIC 5137 DODNIC 5138 DODNIC 5139 DODNIC 5140 DODNIC 5141 DODNIC 5142 DODNIC 5143 DODNIC 5144 DODNIC 5145 DODNIC 5146 DODNIC 5147 DODNIC 5148 DODNIC 5149 DODNIC 5150 DODNIC 5151 DODNIC 5152 DODNIC 5153 DODNIC 5154 DODNIC 5155 DODNIC 5156 DODNIC 5157 DODNIC 5158 DODNIC 5159 DODNIC 5160 DODNIC 5161 DODNIC 5162 DODNIC 5163 DODNIC 5164 DODNIC 5165 DODNIC 5166 DODNIC 5167 DODNIC 5168 DODNIC 5169 DODNIC 5170 DODNIC 5171 DODNIC 5172 DODNIC 5173 DODNIC 5174 DODNIC 5175 DODNIC 5176 DODNIC 5177 DODNIC 5178 DODNIC 5179 DODNIC 5180 DODNIC 5181 DODNIC 5182 DODNIC 5183 DODNIC 5184 DODNIC 5185 DODNIC 5186 DODNIC 5187 DODNIC 5188 DODNIC 5189 DODNIC 5190 DODNIC 5191 DODNIC 5192 DODNIC 5193 DODNIC 5194 DODNIC 5195 DODNIC 5196 DODNIC 5197 DODNIC 5198 DODNIC 5199 DODNIC 5200 DODNIC 5201 DODNIC 5202 DODNIC 5203 DODNIC 5204 DODNIC 5205 DODNIC 5206 DODNIC 5207 DODNIC 5208 DODNIC 5209 DODNIC 5210 DODNIC 5211 DODNIC 5212 DODNIC 5213 DODNIC 5214 DODNIC 5215 DODNIC 5216 DODNIC 5217 DODNIC 5218 DODNIC 5219 DODNIC 5220 DODNIC 5221 DODNIC 5222 DODNIC 5223 DODNIC 5224 DODNIC 5225 DODNIC 5226 DODNIC 5227 DODNIC 5228 DODNIC 5229 DODNIC 5230 DODNIC 5231 DODNIC 5232 DODNIC 5233 DODNIC 5234 DODNIC 5235 DODNIC 5236 DODNIC 5237 DODNIC 5238 DODNIC 5239 DODNIC 5240 DODNIC 5241 DODNIC 5242 DODNIC 5243 DODNIC 5244 DODNIC 5245 DODNIC 5246 DODNIC 5247 DODNIC 5248 DODNIC 5249 DODNIC 5250 DODNIC 5251 DODNIC 5252 DODNIC 5253 DODNIC 5254 DODNIC 5255 DODNIC 5256 DODNIC 5257 DODNIC 5258 DODNIC 5259 DODNIC 5260 DODNIC 5261 DODNIC 5262 DODNIC 5263 DODNIC 5264 DODNIC 5265 DODNIC 5266 DODNIC 5267 DODNIC 5268 DODNIC 5269 DODNIC 5270 DODNIC 5271 DODNIC 5272 DODNIC 5273 DODNIC 5274 DODNIC 5275 DODNIC 5276 DODNIC 5277 DODNIC 5278 DODNIC 5279 DODNIC 5280 DODNIC 5281 DODNIC 5282 DODNIC 5283 DODNIC 5284 DODNIC 5285 DODNIC 5286 DODNIC 5287 DODNIC 5288 DODNIC 5289 DODNIC 5290 DODNIC 5291 DODNIC 5292 DODNIC 5293 DODNIC 5294 DODNIC 5295 DODNIC 5296 DODNIC 5297 DODNIC 5298 DODNIC 5299 DODNIC 5300 DODNIC 5301 DODNIC 5302 DODNIC 5303 DODNIC 5304 DODNIC 5305 DODNIC 5306 DODNIC 5307 DODNIC 5308 DODNIC 5309 DODNIC 5310 DODNIC 5311 DODNIC 5312 DODNIC 5313 DODNIC 5314 DODNIC 5315 DODNIC 5316 DODNIC 5317 DODNIC 5318 DODNIC 5319 DODNIC 5320 DODNIC 5321 DODNIC 5322 DODNIC 5323 DODNIC 5324 DODNIC 5325 DODNIC 5326 DODNIC 5327 DODNIC 5328 DODNIC 5329 DODNIC 5330 DODNIC 5331 DODNIC 5332 DODNIC 5333 DODNIC 5334 DODNIC 5335 DODNIC 5336 DODNIC 5337 DODNIC 5338 DODNIC 5339 DODNIC 5340 DODNIC 5341 DODNIC 5342 DODNIC 5343 DODNIC 5344 DODNIC 5345 DODNIC 5346 DODNIC 5347 DODNIC 5348 DODNIC 5349 DODNIC 5350 DODNIC 5351 DODNIC 5352 DODNIC 5353 DODNIC 5354 DODNIC 5355 DODNIC 5356 DODNIC 5357 DODNIC 5358 DODNIC 5359 DODNIC 5360 DODNIC 5361 DODNIC 5362 DODNIC 5363 DODNIC 5364 DODNIC 5365 DODNIC 5366 DODNIC 5367 DODNIC 5368 DODNIC 5369 DODNIC 5370 DODNIC 5371 DODNIC 5372 DODNIC 5373 DODNIC 5374 DODNIC 5375 DODNIC 5376 DODNIC 5377 RIPE-ASNBLOCK5 5378 RIPE-ASNBLOCK5 5379 RIPE-ASNBLOCK5 5380 RIPE-ASNBLOCK5 5381 RIPE-ASNBLOCK5 5382 RIPE-ASNBLOCK5 5383 RIPE-ASNBLOCK5 5384 RIPE-ASNBLOCK5 5385 RIPE-ASNBLOCK5 5386 RIPE-ASNBLOCK5 5387 RIPE-ASNBLOCK5 5388 RIPE-ASNBLOCK5 5389 RIPE-ASNBLOCK5 5390 RIPE-ASNBLOCK5 5391 RIPE-ASNBLOCK5 5392 RIPE-ASNBLOCK5 5393 RIPE-ASNBLOCK5 5394 RIPE-ASNBLOCK5 5395 RIPE-ASNBLOCK5 5396 RIPE-ASNBLOCK5 5397 RIPE-ASNBLOCK5 5398 RIPE-ASNBLOCK5 5399 RIPE-ASNBLOCK5 5400 RIPE-ASNBLOCK5 5401 RIPE-ASNBLOCK5 5402 RIPE-ASNBLOCK5 5403 RIPE-ASNBLOCK5 5404 RIPE-ASNBLOCK5 5405 RIPE-ASNBLOCK5 5406 RIPE-ASNBLOCK5 5407 RIPE-ASNBLOCK5 5408 RIPE-ASNBLOCK5 5409 RIPE-ASNBLOCK5 5410 RIPE-ASNBLOCK5 5411 RIPE-ASNBLOCK5 5412 RIPE-ASNBLOCK5 5413 RIPE-ASNBLOCK5 5414 RIPE-ASNBLOCK5 5415 RIPE-ASNBLOCK5 5416 RIPE-ASNBLOCK5 5417 RIPE-ASNBLOCK5 5418 RIPE-ASNBLOCK5 5419 RIPE-ASNBLOCK5 5420 RIPE-ASNBLOCK5 5421 RIPE-ASNBLOCK5 5422 RIPE-ASNBLOCK5 5423 RIPE-ASNBLOCK5 5424 RIPE-ASNBLOCK5 5425 RIPE-ASNBLOCK5 5426 RIPE-ASNBLOCK5 5427 RIPE-ASNBLOCK5 5428 RIPE-ASNBLOCK5 5429 RIPE-ASNBLOCK5 5430 RIPE-ASNBLOCK5 5431 RIPE-ASNBLOCK5 5432 RIPE-ASNBLOCK5 5433 RIPE-ASNBLOCK5 5434 RIPE-ASNBLOCK5 5435 RIPE-ASNBLOCK5 5436 RIPE-ASNBLOCK5 5437 RIPE-ASNBLOCK5 5438 RIPE-ASNBLOCK5 5439 RIPE-ASNBLOCK5 5440 RIPE-ASNBLOCK5 5441 RIPE-ASNBLOCK5 5442 RIPE-ASNBLOCK5 5443 RIPE-ASNBLOCK5 5444 RIPE-ASNBLOCK5 5445 RIPE-ASNBLOCK5 5446 RIPE-ASNBLOCK5 5447 RIPE-ASNBLOCK5 5448 RIPE-ASNBLOCK5 5449 RIPE-ASNBLOCK5 5450 RIPE-ASNBLOCK5 5451 RIPE-ASNBLOCK5 5452 RIPE-ASNBLOCK5 5453 RIPE-ASNBLOCK5 5454 RIPE-ASNBLOCK5 5455 RIPE-ASNBLOCK5 5456 RIPE-ASNBLOCK5 5457 RIPE-ASNBLOCK5 5458 RIPE-ASNBLOCK5 5459 RIPE-ASNBLOCK5 5460 RIPE-ASNBLOCK5 5461 RIPE-ASNBLOCK5 5462 RIPE-ASNBLOCK5 5463 RIPE-ASNBLOCK5 5464 RIPE-ASNBLOCK5 5465 RIPE-ASNBLOCK5 5466 RIPE-ASNBLOCK5 5467 RIPE-ASNBLOCK5 5468 RIPE-ASNBLOCK5 5469 RIPE-ASNBLOCK5 5470 RIPE-ASNBLOCK5 5471 RIPE-ASNBLOCK5 5472 RIPE-ASNBLOCK5 5473 RIPE-ASNBLOCK5 5474 RIPE-ASNBLOCK5 5475 RIPE-ASNBLOCK5 5476 RIPE-ASNBLOCK5 5477 RIPE-ASNBLOCK5 5478 RIPE-ASNBLOCK5 5479 RIPE-ASNBLOCK5 5480 RIPE-ASNBLOCK5 5481 RIPE-ASNBLOCK5 5482 RIPE-ASNBLOCK5 5483 RIPE-ASNBLOCK5 5484 RIPE-ASNBLOCK5 5485 RIPE-ASNBLOCK5 5486 RIPE-ASNBLOCK5 5487 RIPE-ASNBLOCK5 5488 RIPE-ASNBLOCK5 5489 RIPE-ASNBLOCK5 5490 RIPE-ASNBLOCK5 5491 RIPE-ASNBLOCK5 5492 RIPE-ASNBLOCK5 5493 RIPE-ASNBLOCK5 5494 RIPE-ASNBLOCK5 5495 RIPE-ASNBLOCK5 5496 RIPE-ASNBLOCK5 5497 RIPE-ASNBLOCK5 5498 RIPE-ASNBLOCK5 5499 RIPE-ASNBLOCK5 5500 RIPE-ASNBLOCK5 5501 RIPE-ASNBLOCK5 5502 RIPE-ASNBLOCK5 5503 RIPE-ASNBLOCK5 5504 RIPE-ASNBLOCK5 5505 RIPE-ASNBLOCK5 5506 RIPE-ASNBLOCK5 5507 RIPE-ASNBLOCK5 5508 RIPE-ASNBLOCK5 5509 RIPE-ASNBLOCK5 5510 RIPE-ASNBLOCK5 5511 RIPE-ASNBLOCK5 5512 RIPE-ASNBLOCK5 5513 RIPE-ASNBLOCK5 5514 RIPE-ASNBLOCK5 5515 RIPE-ASNBLOCK5 5516 RIPE-ASNBLOCK5 5517 RIPE-ASNBLOCK5 5518 RIPE-ASNBLOCK5 5519 RIPE-ASNBLOCK5 5520 RIPE-ASNBLOCK5 5521 RIPE-ASNBLOCK5 5522 RIPE-ASNBLOCK5 5523 RIPE-ASNBLOCK5 5524 RIPE-ASNBLOCK5 5525 RIPE-ASNBLOCK5 5526 RIPE-ASNBLOCK5 5527 RIPE-ASNBLOCK5 5528 RIPE-ASNBLOCK5 5529 RIPE-ASNBLOCK5 5530 RIPE-ASNBLOCK5 5531 RIPE-ASNBLOCK5 5532 RIPE-ASNBLOCK5 5533 RIPE-ASNBLOCK5 5534 RIPE-ASNBLOCK5 5535 RIPE-ASNBLOCK5 5536 RIPE-ASNBLOCK5 5537 RIPE-ASNBLOCK5 5538 RIPE-ASNBLOCK5 5539 RIPE-ASNBLOCK5 5540 RIPE-ASNBLOCK5 5541 RIPE-ASNBLOCK5 5542 RIPE-ASNBLOCK5 5543 RIPE-ASNBLOCK5 5544 RIPE-ASNBLOCK5 5545 RIPE-ASNBLOCK5 5546 RIPE-ASNBLOCK5 5547 RIPE-ASNBLOCK5 5548 RIPE-ASNBLOCK5 5549 RIPE-ASNBLOCK5 5550 RIPE-ASNBLOCK5 5551 RIPE-ASNBLOCK5 5552 RIPE-ASNBLOCK5 5553 RIPE-ASNBLOCK5 5554 RIPE-ASNBLOCK5 5555 RIPE-ASNBLOCK5 5556 RIPE-ASNBLOCK5 5557 RIPE-ASNBLOCK5 5558 RIPE-ASNBLOCK5 5559 RIPE-ASNBLOCK5 5560 RIPE-ASNBLOCK5 5561 RIPE-ASNBLOCK5 5562 RIPE-ASNBLOCK5 5563 RIPE-ASNBLOCK5 5564 RIPE-ASNBLOCK5 5565 RIPE-ASNBLOCK5 5566 RIPE-ASNBLOCK5 5567 RIPE-ASNBLOCK5 5568 RIPE-ASNBLOCK5 5569 RIPE-ASNBLOCK5 5570 RIPE-ASNBLOCK5 5571 RIPE-ASNBLOCK5 5572 RIPE-ASNBLOCK5 5573 RIPE-ASNBLOCK5 5574 RIPE-ASNBLOCK5 5575 RIPE-ASNBLOCK5 5576 RIPE-ASNBLOCK5 5577 RIPE-ASNBLOCK5 5578 RIPE-ASNBLOCK5 5579 RIPE-ASNBLOCK5 5580 RIPE-ASNBLOCK5 5581 RIPE-ASNBLOCK5 5582 RIPE-ASNBLOCK5 5583 RIPE-ASNBLOCK5 5584 RIPE-ASNBLOCK5 5585 RIPE-ASNBLOCK5 5586 RIPE-ASNBLOCK5 5587 RIPE-ASNBLOCK5 5588 RIPE-ASNBLOCK5 5589 RIPE-ASNBLOCK5 5590 RIPE-ASNBLOCK5 5591 RIPE-ASNBLOCK5 5592 RIPE-ASNBLOCK5 5593 RIPE-ASNBLOCK5 5594 RIPE-ASNBLOCK5 5595 RIPE-ASNBLOCK5 5596 RIPE-ASNBLOCK5 5597 RIPE-ASNBLOCK5 5598 RIPE-ASNBLOCK5 5599 RIPE-ASNBLOCK5 5600 RIPE-ASNBLOCK5 5601 RIPE-ASNBLOCK5 5602 RIPE-ASNBLOCK5 5603 RIPE-ASNBLOCK5 5604 RIPE-ASNBLOCK5 5605 RIPE-ASNBLOCK5 5606 RIPE-ASNBLOCK5 5607 RIPE-ASNBLOCK5 5608 RIPE-ASNBLOCK5 5609 RIPE-ASNBLOCK5 5610 RIPE-ASNBLOCK5 5611 RIPE-ASNBLOCK5 5612 RIPE-ASNBLOCK5 5613 RIPE-ASNBLOCK5 5614 RIPE-ASNBLOCK5 5615 RIPE-ASNBLOCK5 5616 RIPE-ASNBLOCK5 5617 RIPE-ASNBLOCK5 5618 RIPE-ASNBLOCK5 5619 RIPE-ASNBLOCK5 5620 RIPE-ASNBLOCK5 5621 RIPE-ASNBLOCK5 5622 RIPE-ASNBLOCK5 5623 RIPE-ASNBLOCK5 5624 RIPE-ASNBLOCK5 5625 RIPE-ASNBLOCK5 5626 RIPE-ASNBLOCK5 5627 RIPE-ASNBLOCK5 5628 RIPE-ASNBLOCK5 5629 RIPE-ASNBLOCK5 5630 RIPE-ASNBLOCK5 5631 RIPE-ASNBLOCK5 5633 ONLINE-SA 5634 MILESTONE 5635 SBVDN 5636 LISTING 5637 CAIDA-CACHE 5638 GENUITY-AS5638 5639 TSTT-NET 5640 NCSA-VBNS-EX 5641 ABS-NET 5642 KERSUR-TECH 5643 SILKROAD-US 5644 ASN-USA 5645 JUMP-NET 5646 NN-CNSM 5647 ASN-KODAK 5648 SATLINK 5649 KEVNET-ASN 5650 ELIX 5651 DESTEK 5652 IN-NET 5653 UCSF 5654 TISHNET 5655 DECADE-DOM 5656 ACCESSUS-DOM 5657 NOVAIAC-ASN 5658 CCE-NET 5659 VIVANET 5660 JCI-NET 5661 USF 5662 ASN-TBS-1 5663 EDCNET 5664 SHERIDAN-NET 5665 DELMARVA-ASN 5666 OMNES-NET 5667 FASTNET2-ASN 5668 CENTURY 5669 VIA-NET 5670 MONTEREY 5671 PBI-NET-BLK 5672 PBI-NET-BLK 5673 PBI-NET-BLK 5674 PBI-NET-BLK 5675 PBI-NET-BLK 5676 PBI-NET-BLK 5677 PBI-NET-BLK 5678 PBI-NET-BLK 5679 PBI-NET-BLK 5680 PBI-NET-BLK 5681 PBI-NET-BLK 5682 NETONE 5683 CWI-CORE 5684 GANNETT-NET 5685 DRANET-NORTH 5686 CSERVE-CIS 5687 AA-NET 5688 PASSPORT 5689 HOOSIERNET 5690 VIANET-NO 5691 MITRE-WASH 5692 UNLP 5693 INTELENET 5694 UNIFIED-NET 5695 MAILROOM-NT 5696 WNST 5697 SG-INTER 5698 NETPUB-AS 5700 IV-NET 5701 HEALTH-ONE 5702 GALAXY 5703 TIGERFUND 5704 CARIBE-NET 5705 VERADO-AS 5706 UUPCQUOTE 5707 UTH-HSC 5708 UAGRO 5709 KMB-1 5710 GIA-ASN-1 5711 CYBER2 5712 RCN-AS4 5713 SAIX-NET 5714 EDS-WEBS 5715 MIXNET2-NET 5716 CYBERCOM 5717 IWIN-NET 5718 MECNET 5719 SUNYSB 5720 ASTSOFT 5721 NDU-NET 5722 UNALCOL-NET 5723 JHU 5724 UMMCNET 5725 NEXTLAND 5726 INTERWORLD 5727 WORLDNET-0 5728 WORLDNET1 5729 WORLDNET2 5730 WORLDNET3 5731 5731 5732 ACCESINDIANA 5733 TMC-RING 5734 TIENET 5735 GALT-TECHNO 5736 CLUBNET 5737 USW-INTERACT2 5738 SOVER-ASN 5739 UCSC 5740 SALTMINE 5741 TRIAD-LVK 5742 CCINET 5743 NOAA-FSL 5744 USPTO 5745 SALUD-AR 5746 CELESTAR-ASN 5747 ASN-RISQ-QIX 5748 BBNET 5750 FLEXNET-HAWAII 5751 SYTEX 5752 GREATBASIN 5753 EMPAC-DOM 5754 PIXINET1 5755 QNETIX-AS 5756 POINTCAST 5758 UMS-EDU 5759 RAINSTORM 5760 BIDDEFORD1 5761 MSN-SEATTLE 5762 NETMAG 5763 TRI-DEV-GRP 5764 CONVOKE 5765 TELUS-AS-5765 5766 IHS-MD-AS 5767 INFINITY 5768 ICANECT 5769 VIDEOTRON 5770 EMPLINK-AS 5771 INET-AK 5772 UNINET-BR-RJ 5773 SPEEDSITE 5774 USPS-001 5776 WORLDWEB 5778 SMATNET-TAC 5779 Y-BR-SERV 5780 GIGASD3 5781 CSI-GATEWAY-2 5782 EXTREMES 5783 KCSOS-NET 5784 GETNET 5785 DCPS-DC-AS 5786 UPRENET 5788 WWWI 5789 EZNET 5790 NETMARKET 5791 CSI-GATEWAY-1 5792 SIMPLE-NET 5793 PENTELEDATA-2 5794 NWREGION-ESD 5795 MVISION 5796 COMET 5797 SECAPL-AS 5798 TELEPORT 5799 IGCNET 5800 DDN-ASNBLK 5801 DDN-ASNBLK 5802 DDN-ASNBLK 5803 DDN-ASNBLK 5804 DDN-ASNBLK 5805 DDN-ASNBLK 5806 DDN-ASNBLK 5807 DDN-ASNBLK 5808 DDN-ASNBLK 5809 DDN-ASNBLK 5810 DDN-ASNBLK 5811 DDN-ASNBLK 5812 DDN-ASNBLK 5813 DDN-ASNBLK 5814 DDN-ASNBLK 5815 DDN-ASNBLK 5816 DDN-ASNBLK 5817 DDN-ASNBLK 5818 DDN-ASNBLK 5819 DDN-ASNBLK 5820 DDN-ASNBLK 5821 DDN-ASNBLK 5822 DDN-ASNBLK 5823 DDN-ASNBLK 5824 DDN-ASNBLK 5825 DDN-ASNBLK 5826 DDN-ASNBLK 5827 DDN-ASNBLK 5828 DDN-ASNBLK 5829 DDN-ASNBLK 5830 DDN-ASNBLK 5831 DDN-ASNBLK 5832 DDN-ASNBLK 5833 DDN-ASNBLK 5834 DDN-ASNBLK 5835 DDN-ASNBLK 5836 DDN-ASNBLK 5837 DDN-ASNBLK 5838 DDN-ASNBLK 5839 DDN-ASNBLK 5840 DDN-ASNBLK 5841 DDN-ASNBLK 5842 DDN-ASNBLK 5843 DDN-ASNBLK 5844 DDN-ASNBLK 5845 DDN-ASNBLK 5846 DDN-ASNBLK 5847 DDN-ASNBLK 5848 DDN-ASNBLK 5849 DDN-ASNBLK 5850 DDN-ASNBLK 5851 DDN-ASNBLK 5852 DDN-ASNBLK 5853 DDN-ASNBLK 5854 DDN-ASNBLK 5855 DDN-ASNBLK 5856 DDN-ASNBLK 5857 DDN-ASNBLK 5858 DDN-ASNBLK 5859 DDN-ASNBLK 5860 DDN-ASNBLK 5861 DDN-ASNBLK 5862 DDN-ASNBLK 5863 DDN-ASNBLK 5864 DDN-ASNBLK 5865 DDN-ASNBLK 5866 DDN-ASNBLK 5867 DDN-ASNBLK 5868 DDN-ASNBLK 5869 DDN-ASNBLK 5870 DDN-ASNBLK 5871 DDN-ASNBLK 5872 DDN-ASNBLK 5873 DDN-ASNBLK 5874 DDN-ASNBLK 5875 DDN-ASNBLK 5876 DDN-ASNBLK 5877 DDN-ASNBLK 5878 DDN-ASNBLK 5879 DDN-ASNBLK 5880 DDN-ASNBLK 5881 DDN-ASNBLK 5882 DDN-ASNBLK 5883 DDN-ASNBLK 5884 DDN-ASNBLK 5885 DDN-ASNBLK 5886 DDN-ASNBLK 5887 DDN-ASNBLK 5888 DDN-ASNBLK 5889 DDN-ASNBLK 5890 DDN-ASNBLK 5891 DDN-ASNBLK 5892 DDN-ASNBLK 5893 DDN-ASNBLK 5894 DDN-ASNBLK 5895 DDN-ASNBLK 5896 DDN-ASNBLK 5897 DDN-ASNBLK 5898 DDN-ASNBLK 5899 DDN-ASNBLK 5900 DDN-ASNBLK 5901 DDN-ASNBLK 5902 DDN-ASNBLK 5903 DDN-ASNBLK 5904 DDN-ASNBLK 5905 DDN-ASNBLK 5906 DDN-ASNBLK 5907 DDN-ASNBLK 5908 DDN-ASNBLK 5909 DDN-ASNBLK 5910 DDN-ASNBLK 5911 DDN-ASNBLK 5912 DDN-ASNBLK 5913 DDN-ASNBLK 5914 DDN-ASNBLK 5915 DDN-ASNBLK 5916 DDN-ASNBLK 5917 DDN-ASNBLK 5918 DDN-ASNBLK 5919 DDN-ASNBLK 5920 DDN-ASNBLK 5921 DDN-ASNBLK 5922 DDN-ASNBLK 5923 DDN-ASNBLK 5924 DDN-ASNBLK 5925 DDN-ASNBLK 5926 DDN-ASNBLK 5927 DDN-ASNBLK 6056 COLBY 6057 ANTEL1 6058 NWT-AS 6059 UMS2-ASN 6060 MAGI-NET-GW 6061 DLI-IBS 6062 NETPLEX 6063 INETCORP-MEX-AS 6064 ASN-INTERVAN2 6065 INFOSEL-MX 6066 WCOM-MAE 6067 OCTACON-AS 6068 LG-AS 6069 IGC-AS 6070 FUTURIS 6071 UNISYS-AS-E 6072 UNISYS-AS-C 6073 CYBERENET 6074 LIUNET 6075 LM-CORP 6076 ERINET 6078 JERSEY 6079 RCN-AS 6080 LINKNET-LA 6081 AISNET 6082 HARVARDNET 6083 OLIVETTI-ZA 6084 INETCORP 6085 SITA-IPNET 6086 INFOMAGIC 6087 IPRO-NET 6088 BOX 6089 INTERTECH-LTD 6090 TIA-AS 6091 BOSS-TECH 6092 HARFORDCC-AS 6093 INFSYS-ASN 6094 GRAPEVINEINC 6095 APK-NET 6096 SYSNET-1 6097 ASN-CKS-CU 6098 WEBSPINNERS 6099 BAE-NET-ASN 6100 NAME 6101 TAC-NET 6102 CBSCORPORATE 6103 MIDWEST1 6104 STARGATE 6106 UCR-EDU 6107 GLOBENET 6108 POND 6109 NDCORP-NET 6110 BOXTOP 6111 FHIS 6112 AUBURN 6113 GRIDNET 6114 VYZYNZ 6115 HTW 6116 WB-DUPLEX 6117 SJMERCURY 6118 KRI 6119 WWWPASS 6120 INTERGLOBE 6121 RMJN-AS 6122 ICN-AS 6123 WEBPROS-ASN-1 6124 MARIST 6125 RNP-POP-DF 6126 CA-INTL-AS 6127 IDSC-RITSEC 6128 CABLE-NET-1 6129 RIDDLER 6130 ADN-WEST 6131 HOSP-INFO-NET 6132 INGRESSNET 6133 MAYANET 6134 EXABYTE 6135 INFOSEL-RF 6136 NWRAINET 6137 SISNA 6138 CIOE 6139 SAUDI 6140 IMPSAT-USA 6142 SUN-JAVA 6144 SOUND-ADVICE-LTD 6147 UNIRED 6148 EDITORA-ELSOL 6149 TERTIARY-2 6150 NCIFCRF 6151 Q-AS 6152 NANDO-NET 6153 ASN-SPRN-NYSERNET 6154 SPRINTLINK-NYSERNET5 6155 SPRINTLINK-NYSERNET6 6156 SPRINTLINK-NYSERNET7 6157 SPRINTLINK-NYSERNET8 6158 SPRINTLINK-NYSERNET9 6159 TWAVE 6160 SMARTS-1 6161 TCINC 6162 ISI-ISP 6163 MOZCOM-NETWRK 6164 NET66UU 6165 SII-6165 6166 RADIOMAIL 6167 CELLCO-PART 6168 EK-GROUP-AS 6169 PENTELEDATA-3 6170 PENTELEDATA-3 6171 WORLDGATE 6172 NEN-AS 6173 SMARTLINK 6174 SPRINTLINK8 6175 SPRINTLINK9 6176 SPRINTLINK10 6177 SPRINTLINK11 6178 INLINK 6179 WESTWOOD 6180 NIS-CT 6181 FUSE-NET 6182 MSNMAIL-SEA 6183 FTN-INTERNET 6184 DATASTORM 6185 APPLE-AUSTIN 6186 GARCIA-ASN 6187 SPRINT-ZA 6188 FSTW2 6189 EPFL-AS 6191 CECLFROC 6192 UCDAVIS-CORE 6193 PRENSA 6194 MSNMANGA1 6195 GSCO 6196 INTERNET-SYSTEMS 6197 BATI-ATL 6198 BATI-MIA 6199 COOPERUNION 6200 UIC-AS 6201 ATEXT 6202 NEXTRON 6203 ISDN-NET 6204 PARK-5 6205 PARK-2 6206 PARK-3 6207 PARK-4 6208 PARK-1 6209 NFL2 6210 NFL1 6211 SPRNTDATANET 6212 IGC-DC-AS 6213 GETONTHENET 6214 INSNET-CHI 6215 AS-ALTO-EXT1 6216 VORTEXINTSYS 6217 ANS-AXISNET 6218 MIBX 6219 NBIX3-AS 6220 ILINK 6221 USCYBERSITES 6222 SPRINT-LTD 6223 USW-INTERACT3 6224 USW-INTERACT8 6225 USW-INTERACT6 6226 USW-INTERACT5 6227 USW-INTERACT4 6228 BSDI-ASN 6229 NETVOYAGE 6230 GANET 6231 SCANA 6232 WINS 6233 NETRUS 6234 ETAK-NET2 6235 ICIX-AS 6236 BBCON 6237 WEBBED 6238 DPSC-AS 6239 RF-NETWORKS 6240 CHILENET 6241 IGS-GATE 6242 TELEMAIL 6243 INET-AMERICA 6245 INTERNIC 6247 SPANIT 6248 WILTELUU 6249 RCN-AS3 6250 NORTEL-NET 6251 PSNET 6252 EVOLUTION 6253 PRUDENT 6254 EGGINC 6255 CHANNEL1 6256 LTECNET2 6257 NOVALINK-GW 6258 SUPERIOR-NET 6259 ASN-FIBERNET 6260 CROSSLINK 6261 VISINET 6262 CSIRO 6263 NDIN 6264 AS-ALTO-EXT2 6265 SIVENSA 6266 ICONN-AS 6267 EPOCH-INTERNET2 6268 EXPRESS 6269 ATT-INTERNET2 6270 NETRAIL-BLK8 6271 NETRAIL-BLK8 6272 NETRAIL-BLK8 6273 NETRAIL-BLK8 6274 NETRAIL-BLK8 6275 NETRAIL-BLK8 6276 NETRAIL-BLK8 6277 NETRAIL-BLK8 6278 NOC-BB 6279 CAIS-TWO 6280 SYNAPSE 6281 CMSA 6282 UNETY 6283 LYCEUM 6284 METRONET 6285 EN-AS 6287 SPACESTAR 6288 PERTECH-CA-01 6289 AHM-CORP 6290 ALASCOM-DIAL 6291 MSNMAIL-TEST 6292 FCI 6293 ESKIMO 6294 CTEKUSA 6295 WHIDBEY1 6296 MIND 6297 NETBLK-ORGANIC-2 6298 COX-PHX 6299 TELALINK 6300 LCTC1 6301 COMPAQ 6302 PHOENIX 6303 LEHMAN 6304 IWAY-ASN1 6305 AENT-AS 6306 T-NET-AS 6307 AMERICAN-EXPRESS 6308 ALASCOM-MIS 6309 DLINC 6310 MAXPERTS-AS 6311 MEGALINK 6312 WESTWORLD-AS 6313 PROMETHEUS 6314 CDC-AS 6315 XMISSION 6316 STARNETINC-IL 6317 MILLENNIANET 6318 CHECKFREE 6319 MARRIOT-ASN 6320 VBC-WEST 6321 INTERSURF 6322 INFRONT 6323 ENEWS 6324 MFS-EAST-AS 6325 ILLINOIS-CENTURY 6326 LEBANET1 6327 SHAWFIBER 6328 SYNAPSETOASN1 6330 WORLDWIDE-AS 6331 AIT-NET 6332 TELNOR 6333 INFOCOM 6334 ASN-TSG 6335 NTRNET 6337 HIWAAY 6338 MIX-COMMUNICATIONS 6339 I95-NET 6340 EMPIRE 6341 WIEC 6342 ITESM-AS2 6343 PICS 6344 VALUENET 6345 ZIPNET-AS 6346 VUI 6347 DIAMOND 6348 BETTYPLATFORMS 6349 TRCACCESS 6350 BAWAVEDC 6351 PIX-NET 6352 ETRADE-AS 6353 NETZONE 6354 LYCOS 6355 VALLEYNET 6356 NERDCNET 6357 DBTECH 6358 MERC-AS 6359 INTREPID 6360 UNIVHAWAII 6361 4GL-NET 6362 VAULTLINE-AS 6363 CABLETRON-SYSTEMS-INC 6364 ATLANTIC-NET 6365 I1 6366 PDXNET 6367 NWLINK 6368 NETNITCO-ASN 6369 NETRUNNER 6370 LUCENT-ASN 6371 AMERICATEL 6372 DCANET 6373 OPUS1 6374 MFS-WEST-AS 6375 XROADS 6376 BRODER207 6377 4JNET 6378 NWNT 6379 ALINK 6380 BELLSOUTH-NET-BLK 6381 BELLSOUTH-NET-BLK 6382 BELLSOUTH-NET-BLK 6383 BELLSOUTH-NET-BLK 6384 BELLSOUTH-NET-BLK 6385 BELLSOUTH-NET-BLK 6386 BELLSOUTH-NET-BLK 6387 BELLSOUTH-NET-BLK 6388 BELLSOUTH-NET-BLK 6389 BELLSOUTH-NET-BLK 6390 KANSASCITY 6392 MWCI-NET 6393 PRYSM-AS 6394 DATA-BROADCASTING 6395 BROADWING 6396 COASTALNET-ASN 6397 LIBBY 6398 TELEDESIC 6399 NEREP-ASN 6400 ASN-CODETEL 6401 ATT-CA-6401 6402 ONECALL 6403 OPN 6404 FACTSET 6405 AIN 6406 CEBAF 6407 PRIMUSTCAN 6408 PRADO 6409 RESEARCHMAG 6410 ASICOM 6411 INSWEB 6412 KW 6413 SOCOMM 6414 IPNET 6415 SILICONREEF 6416 NOVELL-AS 6417 AGENTS-INC 6418 SATELNET-AS 6419 IDD 6420 INTERPLAY 6421 GLOBEINTERNET 6422 JUNCTION 6423 EASYSTREET-ONLINE 6424 NETROVER 6425 TEN 6426 NETCOAST 6427 HURRICANE-ELEC 6428 CDM 6429 ATTLA-CL-AS 6430 DIGITALINK 6431 ATT-RESEARCH 6432 DOUBLECLICK 6433 JLC 6434 OPNET 6435 LAVANET-ASN 6436 INTERACCESS-NET 6437 NETREX 6438 OUTWEST 6439 WEBMATE 6440 EMF-AS 6441 BIGBOOK 6442 GLOBALLINK-ASN 6443 EMANON 6444 SBSIB 6445 SIEMENS-US 6446 SIEMENS-IPO 6447 UOREGON-IX 6448 QAD 6449 SPRINT-ISP 6450 PIXNET-AS 6451 ACCESSCOMNET 6452 WESTWORLD 6453 TELEGLOBE-AS 6454 PIONET-NET 6455 TOMCO 6456 ALTOPIA 6457 KDCOL-ASN 6458 GUATEL 6459 I-2000 6460 INTERNEXT 6461 ABOVENET 6462 NATGEOGRAPH-AS 6463 ATTCTSC-1 6464 FUTURELABS 6465 PACWEST 6466 MULTIVERSE 6467 ESPIRECOMM 6468 FAXSAV-AS 6469 ARTEMIS 6470 WEB2000-ASN 6471 ENTELCHILE 6472 NETASSET 6473 MINDPORT 6474 FLASHNET-AS 6475 KESMAI 6476 MIWORLD 6477 DIRECTMEDIA-AS 6478 ATT-INTERNET3 6479 MCHENRY 6480 LITLE 6481 SWRI 6482 NYNEX-ITC 6483 DIGEX-AS3 6484 PWCI-AS 6485 TDC-AS 6486 NEWREACH 6487 GUATEMALA-NET 6488 AMUG 6489 INOW-AS 6490 DESERTEYE 6491 TELEKACHINA 6492 PCCD 6493 CHESCO 6494 IDCI 6495 BANCO-INTERNACIONAL 6496 ANET 6497 ACQUION 6498 INTERCALL 6500 NIELSEN 6501 SOUTHERNET 6502 FRONTIER-ASN 6503 AVANTEL 6504 NOVAGATE 6505 GLOBAL-ONE-BRASIL 6506 HOYT 6507 REDROSESUPERNET 6508 WARENETASN 6509 CANARIE-NTN 6510 BYU 6511 STRATANET 6512 GLOBAL2000 6513 PROXIMUS 6514 SRMC 6515 INTERSTICE 6516 TRUENET 6517 YIPESCOM 6518 CIX-GCCC 6519 KETCHUM 6520 NOLA-INXP-1 6521 AROSNET 6522 LEHIGH 6523 NETLINK207 6524 ASN-GE-IS-NAP 6525 INFO-HIGHWAY 6526 MAVERICK-BBS 6527 MASSACHUSETTS 6528 WORLD-LYNX 6529 PLAN-B 6530 XENSEI 6532 SGN 6533 VARNER 6534 OCEANIC-CABLE 6535 CHILESATSER 6536 MOUNTAINNET 6537 ATTCLDS-PDA 6538 KINTEK-AS 6539 GROUPTLCOM 6540 CALWEB 6541 GTE-INS 6542 MICL-AS-MELBOURNE 6543 ALTERNEX-AS 6544 ADICON-ASN 6545 TRUEVISION 6546 AGAIN-NET-1 6547 DCT-ASN 6548 GLOB 6549 VIEWPOINTDATALABSASN 6550 SBSERVICES-AS 6551 ENHANCEDTECH 6552 C2NET 6553 DIGISLE 6554 BDM 6555 RCN-AS6555 6557 CLINIC 6558 SKYGATE 6559 NCIH 6560 GEM 6561 OPTIG 6562 WALLTECH 6563 NECANET 6564 CONSTANT 6565 FREDNET-AS 6566 TROWE-NET 6567 CIA 6568 BOLNET 6569 NATIONWIDEASN 6570 ISOANET 6571 CU-ONLINE 6572 USVI-ASN 6573 MPATH 6574 WVS-ASN 6575 WISEASN 6576 SERVNET 6577 OSSINC 6578 AXXIS 6579 MEMORIALU 6580 RAPIDNET-ASN 6581 PATHLINK 6582 FRII 6583 WEBSECURE 6584 GPS-AS 6585 AIMTECH 6586 WEBCENTRIC 6587 AMICUS-ASN 6588 IN-QUICK 6589 BTCPROD 6590 SUPERNET 6591 INGR-ASN 6592 NETUS 6593 CITIZEN1 6594 MICROSERV-1 6595 DODDSEUR 6596 ASN-BUNGI 6597 COMSTAR 6598 CYBERZONE 6599 ICCOM-ASN 6600 GHGNETASN 6601 SOLTEC-AS 6602 LS-NET 6603 MTWEST208 6604 PTW 6605 ATSC-ASN 6606 WIZNET 6607 HOMENET 6608 NBTEL-AS1 6609 MIINT 6610 INTERSTATE 6611 MAGICCARPET 6612 JAGUNET 6613 DIGITAL-MEDIA 6614 USCC-ASN 6615 PCIS 6616 DATASTAR 6617 PBB-MY 6619 SIGMA-NET 6620 ARNET3 6621 HNS-DIRECPC 6622 ZENOX 6623 CNET-BGP 6624 GOWER 6625 UI 6626 MULTITASKING 6627 GRAPEVINE 6628 PPS 6629 NOAA-AS 6630 LOA 6631 NN-CAE 6632 IMAGINATION 6633 CMGDI 6634 WTCI 6635 NARROWLINE207 6636 ARMIGERON 6637 INFOEX 6638 OANET 6639 CWCAYMAN 6640 LCI 6641 SPORTSLINE 6642 DUNBRAD 6643 EPRESENCE 6644 PARSECWEB-AS 6645 DBS2-MIA-DOM 6646 AETNA 6647 VFI-ICD 6648 SKY-INTERNET 6649 SIRWEB-NET 6650 DTI-AS 6652 GLOBECOMM-ASN 6653 PRIVATEI 6654 PROTEON 6655 GTE-IM 6656 RIPE-ASNBLOCK6 6657 RIPE-ASNBLOCK6 6658 RIPE-ASNBLOCK6 6659 RIPE-ASNBLOCK6 6660 RIPE-ASNBLOCK6 6661 RIPE-ASNBLOCK6 6662 RIPE-ASNBLOCK6 6663 RIPE-ASNBLOCK6 6664 RIPE-ASNBLOCK6 6665 RIPE-ASNBLOCK6 6666 RIPE-ASNBLOCK6 6667 RIPE-ASNBLOCK6 6668 RIPE-ASNBLOCK6 6669 RIPE-ASNBLOCK6 6670 RIPE-ASNBLOCK6 6671 RIPE-ASNBLOCK6 6672 RIPE-ASNBLOCK6 6673 RIPE-ASNBLOCK6 6674 RIPE-ASNBLOCK6 6675 RIPE-ASNBLOCK6 6676 RIPE-ASNBLOCK6 6677 RIPE-ASNBLOCK6 6678 RIPE-ASNBLOCK6 6679 RIPE-ASNBLOCK6 6680 RIPE-ASNBLOCK6 6681 RIPE-ASNBLOCK6 6682 RIPE-ASNBLOCK6 6683 RIPE-ASNBLOCK6 6684 RIPE-ASNBLOCK6 6685 RIPE-ASNBLOCK6 6686 RIPE-ASNBLOCK6 6687 RIPE-ASNBLOCK6 6688 RIPE-ASNBLOCK6 6689 RIPE-ASNBLOCK6 6690 RIPE-ASNBLOCK6 6691 RIPE-ASNBLOCK6 6692 RIPE-ASNBLOCK6 6693 RIPE-ASNBLOCK6 6694 RIPE-ASNBLOCK6 6695 RIPE-ASNBLOCK6 6696 RIPE-ASNBLOCK6 6697 RIPE-ASNBLOCK6 6698 RIPE-ASNBLOCK6 6699 RIPE-ASNBLOCK6 6700 RIPE-ASNBLOCK6 6701 RIPE-ASNBLOCK6 6702 RIPE-ASNBLOCK6 6703 RIPE-ASNBLOCK6 6704 RIPE-ASNBLOCK6 6705 RIPE-ASNBLOCK6 6706 RIPE-ASNBLOCK6 6707 RIPE-ASNBLOCK6 6708 RIPE-ASNBLOCK6 6709 RIPE-ASNBLOCK6 6710 RIPE-ASNBLOCK6 6711 RIPE-ASNBLOCK6 6712 RIPE-ASNBLOCK6 6713 RIPE-ASNBLOCK6 6714 RIPE-ASNBLOCK6 6715 RIPE-ASNBLOCK6 6716 RIPE-ASNBLOCK6 6717 RIPE-ASNBLOCK6 6718 RIPE-ASNBLOCK6 6719 RIPE-ASNBLOCK6 6720 RIPE-ASNBLOCK6 6721 RIPE-ASNBLOCK6 6722 RIPE-ASNBLOCK6 6723 RIPE-ASNBLOCK6 6724 RIPE-ASNBLOCK6 6725 RIPE-ASNBLOCK6 6726 RIPE-ASNBLOCK6 6727 RIPE-ASNBLOCK6 6728 RIPE-ASNBLOCK6 6729 RIPE-ASNBLOCK6 6730 RIPE-ASNBLOCK6 6731 RIPE-ASNBLOCK6 6732 RIPE-ASNBLOCK6 6733 RIPE-ASNBLOCK6 6734 RIPE-ASNBLOCK6 6735 RIPE-ASNBLOCK6 6736 RIPE-ASNBLOCK6 6737 RIPE-ASNBLOCK6 6738 RIPE-ASNBLOCK6 6739 RIPE-ASNBLOCK6 6740 RIPE-ASNBLOCK6 6741 RIPE-ASNBLOCK6 6742 RIPE-ASNBLOCK6 6743 RIPE-ASNBLOCK6 6744 RIPE-ASNBLOCK6 6745 RIPE-ASNBLOCK6 6746 RIPE-ASNBLOCK6 6747 RIPE-ASNBLOCK6 6748 RIPE-ASNBLOCK6 6749 RIPE-ASNBLOCK6 6750 RIPE-ASNBLOCK6 6751 RIPE-ASNBLOCK6 6752 RIPE-ASNBLOCK6 6753 RIPE-ASNBLOCK6 6754 RIPE-ASNBLOCK6 6755 RIPE-ASNBLOCK6 6756 RIPE-ASNBLOCK6 6757 RIPE-ASNBLOCK6 6758 RIPE-ASNBLOCK6 6759 RIPE-ASNBLOCK6 6760 RIPE-ASNBLOCK6 6761 RIPE-ASNBLOCK6 6762 RIPE-ASNBLOCK6 6763 RIPE-ASNBLOCK6 6764 RIPE-ASNBLOCK6 6765 RIPE-ASNBLOCK6 6766 RIPE-ASNBLOCK6 6767 RIPE-ASNBLOCK6 6768 RIPE-ASNBLOCK6 6769 RIPE-ASNBLOCK6 6770 RIPE-ASNBLOCK6 6771 RIPE-ASNBLOCK6 6772 RIPE-ASNBLOCK6 6773 RIPE-ASNBLOCK6 6774 RIPE-ASNBLOCK6 6775 RIPE-ASNBLOCK6 6776 RIPE-ASNBLOCK6 6777 RIPE-ASNBLOCK6 6778 RIPE-ASNBLOCK6 6779 RIPE-ASNBLOCK6 6780 RIPE-ASNBLOCK6 6781 RIPE-ASNBLOCK6 6782 RIPE-ASNBLOCK6 6783 RIPE-ASNBLOCK6 6784 RIPE-ASNBLOCK6 6785 RIPE-ASNBLOCK6 6786 RIPE-ASNBLOCK6 6787 RIPE-ASNBLOCK6 6788 RIPE-ASNBLOCK6 6789 RIPE-ASNBLOCK6 6790 RIPE-ASNBLOCK6 6791 RIPE-ASNBLOCK6 6792 RIPE-ASNBLOCK6 6793 RIPE-ASNBLOCK6 6794 RIPE-ASNBLOCK6 6795 RIPE-ASNBLOCK6 6796 RIPE-ASNBLOCK6 6797 RIPE-ASNBLOCK6 6798 RIPE-ASNBLOCK6 6799 RIPE-ASNBLOCK6 6800 RIPE-ASNBLOCK6 6801 RIPE-ASNBLOCK6 6802 RIPE-ASNBLOCK6 6803 RIPE-ASNBLOCK6 6804 RIPE-ASNBLOCK6 6805 RIPE-ASNBLOCK6 6806 RIPE-ASNBLOCK6 6807 RIPE-ASNBLOCK6 6808 RIPE-ASNBLOCK6 6809 RIPE-ASNBLOCK6 6810 RIPE-ASNBLOCK6 6811 RIPE-ASNBLOCK6 6812 RIPE-ASNBLOCK6 6813 RIPE-ASNBLOCK6 6814 RIPE-ASNBLOCK6 6815 RIPE-ASNBLOCK6 6816 RIPE-ASNBLOCK6 6817 RIPE-ASNBLOCK6 6818 RIPE-ASNBLOCK6 6819 RIPE-ASNBLOCK6 6820 RIPE-ASNBLOCK6 6821 RIPE-ASNBLOCK6 6822 RIPE-ASNBLOCK6 6823 RIPE-ASNBLOCK6 6824 RIPE-ASNBLOCK6 6825 RIPE-ASNBLOCK6 6826 RIPE-ASNBLOCK6 6827 RIPE-ASNBLOCK6 6828 RIPE-ASNBLOCK6 6829 RIPE-ASNBLOCK6 6830 RIPE-ASNBLOCK6 6831 RIPE-ASNBLOCK6 6832 RIPE-ASNBLOCK6 6833 RIPE-ASNBLOCK6 6834 RIPE-ASNBLOCK6 6835 RIPE-ASNBLOCK6 6836 RIPE-ASNBLOCK6 6837 RIPE-ASNBLOCK6 6838 RIPE-ASNBLOCK6 6839 RIPE-ASNBLOCK6 6840 RIPE-ASNBLOCK6 6841 RIPE-ASNBLOCK6 6842 RIPE-ASNBLOCK6 6843 RIPE-ASNBLOCK6 6844 RIPE-ASNBLOCK6 6845 RIPE-ASNBLOCK6 6846 RIPE-ASNBLOCK6 6847 RIPE-ASNBLOCK6 6848 RIPE-ASNBLOCK6 6849 RIPE-ASNBLOCK6 6850 RIPE-ASNBLOCK6 6851 RIPE-ASNBLOCK6 6852 RIPE-ASNBLOCK6 6853 RIPE-ASNBLOCK6 6854 RIPE-ASNBLOCK6 6855 RIPE-ASNBLOCK6 6856 RIPE-ASNBLOCK6 6857 RIPE-ASNBLOCK6 6858 RIPE-ASNBLOCK6 6859 RIPE-ASNBLOCK6 6860 RIPE-ASNBLOCK6 6861 RIPE-ASNBLOCK6 6862 RIPE-ASNBLOCK6 6863 RIPE-ASNBLOCK6 6864 RIPE-ASNBLOCK6 6865 RIPE-ASNBLOCK6 6866 RIPE-ASNBLOCK6 6867 RIPE-ASNBLOCK6 6868 RIPE-ASNBLOCK6 6869 RIPE-ASNBLOCK6 6870 RIPE-ASNBLOCK6 6871 RIPE-ASNBLOCK6 6872 RIPE-ASNBLOCK6 6873 RIPE-ASNBLOCK6 6874 RIPE-ASNBLOCK6 6875 RIPE-ASNBLOCK6 6876 RIPE-ASNBLOCK6 6877 RIPE-ASNBLOCK6 6878 RIPE-ASNBLOCK6 6879 RIPE-ASNBLOCK6 6880 RIPE-ASNBLOCK6 6881 RIPE-ASNBLOCK6 6882 RIPE-ASNBLOCK6 6883 RIPE-ASNBLOCK6 6884 RIPE-ASNBLOCK6 6885 RIPE-ASNBLOCK6 6886 RIPE-ASNBLOCK6 6887 RIPE-ASNBLOCK6 6888 RIPE-ASNBLOCK6 6889 RIPE-ASNBLOCK6 6890 RIPE-ASNBLOCK6 6891 RIPE-ASNBLOCK6 6892 RIPE-ASNBLOCK6 6893 RIPE-ASNBLOCK6 6894 RIPE-ASNBLOCK6 6895 RIPE-ASNBLOCK6 6896 RIPE-ASNBLOCK6 6897 RIPE-ASNBLOCK6 6898 RIPE-ASNBLOCK6 6899 RIPE-ASNBLOCK6 6900 RIPE-ASNBLOCK6 6901 RIPE-ASNBLOCK6 6902 RIPE-ASNBLOCK6 6903 RIPE-ASNBLOCK6 6904 RIPE-ASNBLOCK6 6905 RIPE-ASNBLOCK6 6906 RIPE-ASNBLOCK6 6907 RIPE-ASNBLOCK6 6908 RIPE-ASNBLOCK6 6909 RIPE-ASNBLOCK6 6910 RIPE-ASNBLOCK6 6911 RIPE-ASNBLOCK6 6912 HCSNET-ASNBLK 6913 HCSNET-ASNBLK 6914 HCSNET-ASNBLK 6915 HCSNET-ASNBLK 6916 EXCO-NA 6917 MULTEXSYS 6918 PENNCOM 6920 TRADEMED-AS 6921 ARACHNITEC 6922 TEXASAGENCYNET 6923 OKNET 6924 STARTRIB 6925 DIGADV-AS 6926 SOLLUNA-AS 6927 GRUPOIMSA 6928 RAINNET 6929 COSITE-ASN-1 6930 GOLD-AS 6931 RINGLING 6932 EPNET 6933 HARBING-ASN 6934 ATT-COLUMBUS-AS 6935 IDG-ISG 6936 NETGATE-SC1 6937 WWWPROD-AS 6938 GREENLAKE-IOC 6939 HURRICANE 6940 COMSTREAM 6941 HEALTHEON 6942 CLARINET 6943 INFOTECHSYS 6944 VRIO-6944 6945 SVNET 6946 MTELTECH 6947 AMCITY 6948 INTERCOM 6949 CHARLES-SCHWAB 6950 LAMBDA 6951 SPAR-AERO 6952 WMEX 6953 NETONLINE208 6954 NACS 6956 INTERACT-ASN1 6957 SPIN-MEXICO 6958 DTS-WORLDWIDE 6959 DTS-AFRICA 6960 DTS-INTER-AMER 6961 DTS-EAST-ASIAN 6962 DTS-EUROPE 6963 DTS-CANADA 6964 DTS-NEAR-EAST 6965 DTS-SOUTH-ASIAN 6966 USDOS 6967 ORBIS-AS 6968 PEER-ZA 6969 N2K-ASN 6970 BSG-AIR-NET 6971 ATG-1 6972 INETWEST 6973 LOMBARD-AS 6974 ROSS-ASN 6975 LEX2 6976 GTE-INS2 6977 IAC-AS 6978 SECURITIES-AS 6979 SAP 6980 CAJUNNET-AS 6981 FDNCOM 6982 VECNET 6983 ITCDELTA 6984 NYNEX-AS 6985 DIXON 6986 ANGEL-NETWORKS 6987 AXIONINTERNET 6988 STREAM 6989 GTSI 6990 ONE-O 6991 USLD-ASN 6992 NETSCAPE-AS 6993 INTERNAP-SEA 6994 ISPNET 6995 BAISNJ 6996 ATT-CANADA 6997 ATTCTSC-2 6998 BRITEVOICE 6999 UU-ITNNET 7000 DBEACH 7001 ECINS 7002 MEXICO-COMMUNICATES 7003 BRIGADOON 7004 CTCMUNDO 7005 ISOL-AS 7006 CYBERNEX 7007 FLIX 7008 TIBA-AS 7009 QDECK-MDR 7010 DRKNGS-ASN 7011 CITLINK 7012 PACIFICNET 7013 NETSELECT 7014 ANAWAVE 7015 ATT-BBND-A 7016 ATT-BBND-A 7017 SCRR-7015 7018 ATT-INTERNET4 7019 VRIO-7019 7020 QDATA-AS 7021 BAISPHIL 7022 SBTAS 7023 ICI 7024 FTEL 7025 AMLIBS 7026 IME-AS 7027 ENGAGE 7028 IBS 7029 ALLTELNET 7030 FOOTHILL 7031 MOONLIGHT-AS 7032 NMB-AS 7033 FIREWALL 7034 IMEDIA 7035 ECLIPSE 7036 WESLINK-GW1 7037 GSTINTERNET-ASN 7038 ITESM-CEGS 7039 OAKNET 7041 DALCOMP 7042 OLYMPUSNET 7043 FASEB-AS 7044 CSACNETWORKS 7045 WEATHER 7046 UUNET-CUSTOMER 7047 TDSYS 7048 FASTLANE-BR 7049 SMINTER-ASN 7050 UW-MILWAUKEE-AS1 7051 ASN-SNS 7052 HTS-AS 7053 AIMEDIA 7054 MERCK 7055 QIS 7056 DATANET-AS 7057 MANAGEDNETWORK 7059 HOTSITES 7060 EA 7061 PLANET-GROUP 7062 NACCESS 7063 INSIDE-RJ-BR 7064 ACI-NET-AS 7065 SONOMA 7066 ACCESS-VIRGINIA 7067 TECHINTER 7068 PFIZERNET 7069 NORTH-AMERICAN-INT 7070 NSN-NET-AS 7071 PENET-ASN 7072 NN-RS00-RS06 7073 NN-RS00-RS06 7074 NN-RS00-RS06 7075 NN-RS00-RS06 7076 NN-RS00-RS06 7077 NN-RS00-RS06 7078 MONMOUTH 7079 AYRIX 7080 ECSANET 7081 CARIN-AS-BLOCK 7082 CARIN-AS-BLOCK 7083 CARIN-AS-BLOCK 7084 CARIN-AS-BLOCK 7085 CARIN-AS-BLOCK 7086 WOMBATNET 7087 COLOMSAT 7088 NEONSOFT 7089 REALITYON 7090 IDNET-AS2 7091 VIANET-ASN 7092 ICIGAMES 7093 REM-AS 7094 WA-IXA 7095 NETUSA 7096 DSOURCE 7097 WEBVISION 7098 CORE1-WWISPNET 7099 NORTELRCH 7100 PTC-AS 7101 SANDBOX 7102 APLATFORM-AS 7103 PTY 7104 APC-AS 7105 DOWJONES-AS 7106 OHIOBRIGHTNET 7107 3DO 7108 BIZNEXUS 7109 DATEK 7110 QUEBEC-NET 7111 ASPEN-SYSTEMS 7112 MTSI-ASN 7113 NFIC-AS 7114 USFG-AS 7115 INDEPTH-DATA-AS 7116 TOYOTA-EXT 7117 NETCAST 7118 4DCOMM 7119 FORSYTHCOUNTY 7120 CITI-AS 7121 PALACEGROUP 7122 MTS-AS 7123 NILENET-T1-0 7124 LJX 7125 NET-UDEM-AS 7126 UNITEDMEDIA 7127 SCE 7128 ITN 7129 ANC-AS 7130 THEMALL 7131 ITE-AS 7132 SBIS-AS 7133 NYPP-AS 7134 OTBB 7135 KOHALA 7136 ONLY 7137 TELEMATIX 7138 CRAWFORD-ANS 7139 BIZTRAVELCAM 7140 DIMCOM 7141 AUS-AS 7142 AZSTARNET 7143 CLEAR-DATA 7144 VOYAGERONLINE 7145 MENO 7146 GABN 7147 NEWSALERT-NET 7148 GRAPHNET-NET 7149 TAMNET-MX-ASN 7151 BAYAREA-AS 7152 REDCROSS-ASN 7153 ASN-NEPOOL 7154 FDDNET-ASN 7156 AGATE2 7157 AMERCOL 7158 NETFEED-AS 7159 NTTCNET 7160 NETDYNAMICS 7161 USW-INTERACT7 7162 ITANET-BR-AS 7163 NYLI-AS 7164 LIPS-AS 7165 MONY-ASN 7166 C-ECOMM 7167 ANTEL-AS 7168 NW-LINK 7169 WALRUS 7170 ATT-DISC 7171 TM-NET-AS 7173 REDINAOE-PUE 7174 ONWARD-ASN 7175 AUSSIE 7176 GENUITY-AS7176 7177 DFWNET 7178 CLR-AS 7179 PCSERVICE 7180 HILINESWHITESTAR 7181 DGS-NET 7182 CMGDI-EAST 7183 SALLIEMAE 7184 UNIVERACRUZANA 7185 QNIS-ASN 7186 NETRICS-INC 7187 RITE-AS 7188 ETCNET-AS 7189 ATT-CA-7189 7190 CYBORGANIC 7191 CSWNET 7192 BAISNFK 7193 BAISPIT 7194 CORECOMM 7195 INTERRED 7196 TRINET-AS 7197 SMS 7198 SCR 7199 INTERNETCO-AS 7200 G1ENGLAB 7201 TELESCAN 7202 FAMU 7203 SHORE 7204 GIS 7205 POINTBREAK 7206 NETDIRECT 7207 INTREXNET 7208 MEGANET 7209 HOOKUP-NET-WIN-A 7210 SPRINT-ISP2 7211 GBLNAPSBOSFEED 7212 VANDERBILT 7213 TEGRIS-CORP 7214 CURSUS 7215 AHNET-AS 7216 RJL-AS 7217 EARTHWEB 7218 DUNBAR 7219 HOMECOM 7220 DIAMONDMM 7222 SBIS-KCSYMO 7223 CSRLINK 7224 AMAZON-AS 7225 GLOBALNETCORP 7226 VONOC 7227 KPMGUS-AS 7228 MCLEOD 7229 GLOBAL-ONE-RESTON 7230 ORBITEL 7231 ISP-ZA 7232 USWEB 7233 YAHOO-US 7234 RUSSELL 7235 LANMINDS 7236 UNIREGIO 7237 LFCI 7238 UVSG 7239 COMSOURCE-AS 7240 URAEUS 7241 INFINEX-SF 7242 NORTEL-TECHNOLOGY 7243 HDSHQ-AS 7244 ALAMEDANET 7245 TECLINK-AS 7246 BMS-AS 7247 MOJO 7248 SURENET 7249 SKYSCAPE 7250 TEIR-INET1-ASN 7251 TEIR-CORE1-ASN 7252 LTINET 7253 IPA-AS 7254 SURFSOUTH 7255 SAFCO 7256 VIACOM-AS 7257 PREMIERECOM 7258 ETHOS-COMM 7259 NETGEN 7260 NORLIGHT 7261 JDEDWARDS 7262 CAIS-THREE 7263 GOFASTNET 7264 SBCC 7265 SNOWHILL 7266 INFOSEEK 7267 GLOBALCOMMERCE 7268 ATHENET 7269 ONESOURCE 7270 NET2PHONE 7271 LOOKAS 7272 TCIMET 7273 TPLNET 7274 TKI 7275 WINGBERLIN 7276 UH-AS 7277 NEWEASTWIRELESS 7278 ACCRUE 7279 AMOSPRESS 7280 INKTOMI 7281 BOOZ-AS 7282 DXNET-AS 7283 THERIVER 7284 CDSINTERNET 7285 SPACENET 7286 PBI-NET-BLK2 7287 PBI-NET-BLK2 7288 PBI-NET-BLK2 7289 PLATINUM 7290 SBIS-BLK 7291 SBIS-BLK 7292 SBIS-BLK 7293 SBIS-BLK 7294 SBIS-BLK 7295 NETWORKAMERICA 7296 ALCHEMYNET 7297 AP-AS 7298 TELERJ-BR-AS 7299 PRONET 7300 GBLX-2AS 7301 NAS-AS 7302 ADVANCEDINTERNETCOMM 7303 TASF 7304 THECIA 7305 INNERSET-AS 7306 ASIANDEVBANK 7307 HIPPOCAMPUS 7308 SPRINT-PCS 7309 VMC-INTL 7310 GARTNERGROUP 7312 SSA-US 7313 CERTISIGN-AS 7314 TIS-ASN 7315 GRM 7316 NETECH 7317 CSPS-AS 7318 FOCALINK-AS 7319 WEBSPAN 7320 LANCITY 7321 LNET-ASN 7322 MARSWEB 7323 ADVEST 7324 APPLIEDBUSINESS 7325 UAT-ASN 7326 NUNET 7327 7THLEVEL 7328 CHOP 7329 ATT-CMS 7330 INTERNETLABS 7331 IARC 7332 IQUEST-AS 7333 WINNET 7334 WALLSTREET 7335 LOOP 7336 COMPASS 7337 SNIP 7338 GLOBALENET 7339 SIEMENS-CREDIT 7340 TELETEL 7341 VELOCITY 7342 VERISIGN-AS 7343 VISA-INTERACTIVE 7344 VIVIDNET 7345 LUCENTTECH 7346 ARACNET 7347 USXPRESS 7348 CRYSTALBALL 7349 INTERLAN 7350 METROCON 7351 BLARG 7353 PRIMUS 7355 MEITCA-AS 7356 WESTNETCOMMS 7357 AMERICANDATANET 7358 DNB-NBIC 7359 USWMEDIA 7360 PUREATRIA 7361 BCONNEX-ISP 7362 HST-CHRON 7363 IFCI 7364 GROOVE 7365 CENTROIN 7366 FTN-OTTAWA 7367 SYSONE 7368 MTEL-ATC-AS 7369 IAS-HYPERMALL 7370 CDSINC 7371 COASTALCORPORATION 7372 IPEXCHANGE-NJ 7373 GORGON-NJ 7374 VALUSERVE 7375 HULANET 7376 INFORONICS 7377 UCSD 7378 CONNETIX 7379 VIEWCALL 7380 CAPUNET 7381 SUNGARDRS 7382 CAMALOTT 7383 PWDL 7384 INTUIT 7385 LINKPORTCOMMUNICATION 7386 ILLINOIS-STATE-UNIV 7387 TIOCOM 7388 DFXNET 7389 NETDOX 7390 NLSLAN 7391 NTCC-NET 7392 DELPHI-INTERNET-AS 7393 CYBERCON 7394 FLYINGPENGUIN 7395 ESCHELON 7396 OREGON-IX 7397 DIGILINK-AS-MDR 7398 PANGEA-AS 7399 CANCUN-AS 7400 WYOMING-UTAH 7401 FWINET 7402 MULTIACTIVE 7403 COLBA 7404 ACS 7405 GENUITY-XATL 7406 NETGUIDE 7407 MCI-SGUM 7408 COMIMSA 7409 CONFLUX-NET 7410 BIGPLANET 7411 WINTERSTORM 7412 COMSEC-NET 7413 DONNAKARAN 7414 PONTOCOM 7415 ACILINK 7416 UCM 7417 MEYOSP 7418 PROVDESERV 7420 ZAMNET-AS 7421 SPRINT-GSD-AS 7422 JAYHAWK-ASN 7423 PUTNAMFT 7424 USANET 7425 DAI 7426 IPASS-AS 7427 MKTSYS 7428 INTERVAN 7429 CYBERMEDIA 7430 TANDEM 7431 PDNT-AS 7432 EGENIUS 7433 CYBERMAX 7434 SEGASOFT 7435 ATM-CIN 7436 IRON 7437 GSL-RND 7438 OPTEL 7439 VOYAGER-AS 7440 TRIPOD 7441 DRG 7442 WIZARD 7443 PRIMUSCA 7444 SYSTEL-AS 7445 TELUS-AS-7445 7446 INTERNET-LOGIN 7447 ONLINEINTERACTIVE 7448 CHOICE-HOTELS 7449 TIOGA-NET 7450 ADVANCED-ASN 7451 SHOP-NET 7452 NEIS-NET 7453 GTINET 7454 CLICNET 7455 DSL-NET 7456 INTERHOP 7457 THESPHERE-AS 7458 THIRD-COAST 7459 THRIFTYCALL 7460 LIA-NET 7461 MCIA-AS 7462 SRVNET 7463 GOPROTO-AS 7464 I-WAYNET 7465 PROCERGS-AS 7466 FRB 7467 APNIC-AS-2-BLOCK 7468 APNIC-AS-2-BLOCK 7469 APNIC-AS-2-BLOCK 7470 APNIC-AS-2-BLOCK 7471 APNIC-AS-2-BLOCK 7472 APNIC-AS-2-BLOCK 7473 APNIC-AS-2-BLOCK 7474 APNIC-AS-2-BLOCK 7475 APNIC-AS-2-BLOCK 7476 APNIC-AS-2-BLOCK 7477 APNIC-AS-2-BLOCK 7478 APNIC-AS-2-BLOCK 7479 APNIC-AS-2-BLOCK 7480 APNIC-AS-2-BLOCK 7481 APNIC-AS-2-BLOCK 7482 APNIC-AS-2-BLOCK 7483 APNIC-AS-2-BLOCK 7484 APNIC-AS-2-BLOCK 7485 APNIC-AS-2-BLOCK 7486 APNIC-AS-2-BLOCK 7487 APNIC-AS-2-BLOCK 7488 APNIC-AS-2-BLOCK 7489 APNIC-AS-2-BLOCK 7490 APNIC-AS-2-BLOCK 7491 APNIC-AS-2-BLOCK 7492 APNIC-AS-2-BLOCK 7493 APNIC-AS-2-BLOCK 7494 APNIC-AS-2-BLOCK 7495 APNIC-AS-2-BLOCK 7496 APNIC-AS-2-BLOCK 7497 APNIC-AS-2-BLOCK 7498 APNIC-AS-2-BLOCK 7499 APNIC-AS-2-BLOCK 7500 APNIC-AS-2-BLOCK 7501 APNIC-AS-2-BLOCK 7502 APNIC-AS-2-BLOCK 7503 APNIC-AS-2-BLOCK 7504 APNIC-AS-2-BLOCK 7505 APNIC-AS-2-BLOCK 7506 APNIC-AS-2-BLOCK 7507 APNIC-AS-2-BLOCK 7508 APNIC-AS-2-BLOCK 7509 APNIC-AS-2-BLOCK 7510 APNIC-AS-2-BLOCK 7511 APNIC-AS-2-BLOCK 7512 APNIC-AS-2-BLOCK 7513 APNIC-AS-2-BLOCK 7514 APNIC-AS-2-BLOCK 7515 APNIC-AS-2-BLOCK 7516 APNIC-AS-2-BLOCK 7517 APNIC-AS-2-BLOCK 7518 APNIC-AS-2-BLOCK 7519 APNIC-AS-2-BLOCK 7520 APNIC-AS-2-BLOCK 7521 APNIC-AS-2-BLOCK 7522 APNIC-AS-2-BLOCK 7523 APNIC-AS-2-BLOCK 7524 APNIC-AS-2-BLOCK 7525 APNIC-AS-2-BLOCK 7526 APNIC-AS-2-BLOCK 7527 APNIC-AS-2-BLOCK 7528 APNIC-AS-2-BLOCK 7529 APNIC-AS-2-BLOCK 7530 APNIC-AS-2-BLOCK 7531 APNIC-AS-2-BLOCK 7532 APNIC-AS-2-BLOCK 7533 APNIC-AS-2-BLOCK 7534 APNIC-AS-2-BLOCK 7535 APNIC-AS-2-BLOCK 7536 APNIC-AS-2-BLOCK 7537 APNIC-AS-2-BLOCK 7538 APNIC-AS-2-BLOCK 7539 APNIC-AS-2-BLOCK 7540 APNIC-AS-2-BLOCK 7541 APNIC-AS-2-BLOCK 7542 APNIC-AS-2-BLOCK 7543 APNIC-AS-2-BLOCK 7544 APNIC-AS-2-BLOCK 7545 APNIC-AS-2-BLOCK 7546 APNIC-AS-2-BLOCK 7547 APNIC-AS-2-BLOCK 7548 APNIC-AS-2-BLOCK 7549 APNIC-AS-2-BLOCK 7550 APNIC-AS-2-BLOCK 7551 APNIC-AS-2-BLOCK 7552 APNIC-AS-2-BLOCK 7553 APNIC-AS-2-BLOCK 7554 APNIC-AS-2-BLOCK 7555 APNIC-AS-2-BLOCK 7556 APNIC-AS-2-BLOCK 7557 APNIC-AS-2-BLOCK 7558 APNIC-AS-2-BLOCK 7559 APNIC-AS-2-BLOCK 7560 APNIC-AS-2-BLOCK 7561 APNIC-AS-2-BLOCK 7562 APNIC-AS-2-BLOCK 7563 APNIC-AS-2-BLOCK 7564 APNIC-AS-2-BLOCK 7565 APNIC-AS-2-BLOCK 7566 APNIC-AS-2-BLOCK 7567 APNIC-AS-2-BLOCK 7568 APNIC-AS-2-BLOCK 7569 APNIC-AS-2-BLOCK 7570 APNIC-AS-2-BLOCK 7571 APNIC-AS-2-BLOCK 7572 APNIC-AS-2-BLOCK 7573 APNIC-AS-2-BLOCK 7574 APNIC-AS-2-BLOCK 7575 APNIC-AS-2-BLOCK 7576 APNIC-AS-2-BLOCK 7577 APNIC-AS-2-BLOCK 7578 APNIC-AS-2-BLOCK 7579 APNIC-AS-2-BLOCK 7580 APNIC-AS-2-BLOCK 7581 APNIC-AS-2-BLOCK 7582 APNIC-AS-2-BLOCK 7583 APNIC-AS-2-BLOCK 7584 APNIC-AS-2-BLOCK 7585 APNIC-AS-2-BLOCK 7586 APNIC-AS-2-BLOCK 7587 APNIC-AS-2-BLOCK 7588 APNIC-AS-2-BLOCK 7589 APNIC-AS-2-BLOCK 7590 APNIC-AS-2-BLOCK 7591 APNIC-AS-2-BLOCK 7592 APNIC-AS-2-BLOCK 7593 APNIC-AS-2-BLOCK 7594 APNIC-AS-2-BLOCK 7595 APNIC-AS-2-BLOCK 7596 APNIC-AS-2-BLOCK 7597 APNIC-AS-2-BLOCK 7598 APNIC-AS-2-BLOCK 7599 APNIC-AS-2-BLOCK 7600 APNIC-AS-2-BLOCK 7601 APNIC-AS-2-BLOCK 7602 APNIC-AS-2-BLOCK 7603 APNIC-AS-2-BLOCK 7604 APNIC-AS-2-BLOCK 7605 APNIC-AS-2-BLOCK 7606 APNIC-AS-2-BLOCK 7607 APNIC-AS-2-BLOCK 7608 APNIC-AS-2-BLOCK 7609 APNIC-AS-2-BLOCK 7610 APNIC-AS-2-BLOCK 7611 APNIC-AS-2-BLOCK 7612 APNIC-AS-2-BLOCK 7613 APNIC-AS-2-BLOCK 7614 APNIC-AS-2-BLOCK 7615 APNIC-AS-2-BLOCK 7616 APNIC-AS-2-BLOCK 7617 APNIC-AS-2-BLOCK 7618 APNIC-AS-2-BLOCK 7619 APNIC-AS-2-BLOCK 7620 APNIC-AS-2-BLOCK 7621 APNIC-AS-2-BLOCK 7622 APNIC-AS-2-BLOCK 7623 APNIC-AS-2-BLOCK 7624 APNIC-AS-2-BLOCK 7625 APNIC-AS-2-BLOCK 7626 APNIC-AS-2-BLOCK 7627 APNIC-AS-2-BLOCK 7628 APNIC-AS-2-BLOCK 7629 APNIC-AS-2-BLOCK 7630 APNIC-AS-2-BLOCK 7631 APNIC-AS-2-BLOCK 7632 APNIC-AS-2-BLOCK 7633 APNIC-AS-2-BLOCK 7634 APNIC-AS-2-BLOCK 7635 APNIC-AS-2-BLOCK 7636 APNIC-AS-2-BLOCK 7637 APNIC-AS-2-BLOCK 7638 APNIC-AS-2-BLOCK 7639 APNIC-AS-2-BLOCK 7640 APNIC-AS-2-BLOCK 7641 APNIC-AS-2-BLOCK 7642 APNIC-AS-2-BLOCK 7643 APNIC-AS-2-BLOCK 7644 APNIC-AS-2-BLOCK 7645 APNIC-AS-2-BLOCK 7646 APNIC-AS-2-BLOCK 7647 APNIC-AS-2-BLOCK 7648 APNIC-AS-2-BLOCK 7649 APNIC-AS-2-BLOCK 7650 APNIC-AS-2-BLOCK 7651 APNIC-AS-2-BLOCK 7652 APNIC-AS-2-BLOCK 7653 APNIC-AS-2-BLOCK 7654 APNIC-AS-2-BLOCK 7655 APNIC-AS-2-BLOCK 7656 APNIC-AS-2-BLOCK 7657 APNIC-AS-2-BLOCK 7658 APNIC-AS-2-BLOCK 7659 APNIC-AS-2-BLOCK 7660 APNIC-AS-2-BLOCK 7661 APNIC-AS-2-BLOCK 7662 APNIC-AS-2-BLOCK 7663 APNIC-AS-2-BLOCK 7664 APNIC-AS-2-BLOCK 7665 APNIC-AS-2-BLOCK 7666 APNIC-AS-2-BLOCK 7667 APNIC-AS-2-BLOCK 7668 APNIC-AS-2-BLOCK 7669 APNIC-AS-2-BLOCK 7670 APNIC-AS-2-BLOCK 7671 APNIC-AS-2-BLOCK 7672 APNIC-AS-2-BLOCK 7673 APNIC-AS-2-BLOCK 7674 APNIC-AS-2-BLOCK 7675 APNIC-AS-2-BLOCK 7676 APNIC-AS-2-BLOCK 7677 APNIC-AS-2-BLOCK 7678 APNIC-AS-2-BLOCK 7679 APNIC-AS-2-BLOCK 7680 APNIC-AS-2-BLOCK 7681 APNIC-AS-2-BLOCK 7682 APNIC-AS-2-BLOCK 7683 APNIC-AS-2-BLOCK 7684 APNIC-AS-2-BLOCK 7685 APNIC-AS-2-BLOCK 7686 APNIC-AS-2-BLOCK 7687 APNIC-AS-2-BLOCK 7688 APNIC-AS-2-BLOCK 7689 APNIC-AS-2-BLOCK 7690 APNIC-AS-2-BLOCK 7691 APNIC-AS-2-BLOCK 7692 APNIC-AS-2-BLOCK 7693 APNIC-AS-2-BLOCK 7694 APNIC-AS-2-BLOCK 7695 APNIC-AS-2-BLOCK 7696 APNIC-AS-2-BLOCK 7697 APNIC-AS-2-BLOCK 7698 APNIC-AS-2-BLOCK 7699 APNIC-AS-2-BLOCK 7700 APNIC-AS-2-BLOCK 7701 APNIC-AS-2-BLOCK 7702 APNIC-AS-2-BLOCK 7703 APNIC-AS-2-BLOCK 7704 APNIC-AS-2-BLOCK 7705 APNIC-AS-2-BLOCK 7706 APNIC-AS-2-BLOCK 7707 APNIC-AS-2-BLOCK 7708 APNIC-AS-2-BLOCK 7709 APNIC-AS-2-BLOCK 7710 APNIC-AS-2-BLOCK 7711 APNIC-AS-2-BLOCK 7712 APNIC-AS-2-BLOCK 7713 APNIC-AS-2-BLOCK 7714 APNIC-AS-2-BLOCK 7715 APNIC-AS-2-BLOCK 7716 APNIC-AS-2-BLOCK 7717 APNIC-AS-2-BLOCK 7718 APNIC-AS-2-BLOCK 7719 APNIC-AS-2-BLOCK 7720 APNIC-AS-2-BLOCK 7721 APNIC-AS-2-BLOCK 7722 APNIC-AS-2-BLOCK 7723 EMERGENCY24-AS 7724 IECBAL 7725 MEDIA1-CAB 7726 FITC-AS 7727 HONDUTEL 7728 GRILLO 7729 CHI-IX 7730 NETLAN 7731 WEBSTOR 7732 CDC-AS2 7733 FRZRMTN 7734 TDBANK 7735 REDSHIFT 7736 MARKETGUIDE 7737 ASWELLNET 7738 TELEBAHIA 7739 AUTOWEB 7740 WJP 7741 OPCO-AS 7742 DOITNOWDOTCOM 7743 B1C-AS 7744 WCD-AS 7745 BIGSKY-AS 7746 APMTECH 7747 EXECUTRAIN 7748 MYRIAD 7749 VR1 7750 ONSALE 7751 DANCRIS 7752 2ALPHA-NET 7753 GOLDENGATE 7754 MCAFEE 7755 COMBASE 7756 SCRR-7756 7757 ATT-BBND-C 7758 GLOBAL-ONE-NMC 7759 OSTER 7760 STAC 7761 MORNINGSTAR 7762 NETMAS 7763 CYBERAMERICACORP 7764 CENSUSBUREAU 7765 ISITE 7766 GRINNET 7767 EB 7768 TECHNICOLOR 7769 INTERNETEXTRA 7770 TRITON 7771 AMULET 7772 MAGPAGE 7773 SD-NET 7774 ALASKA 7775 INVCOINS 7776 AMCINTERNET 7777 VIX2 7778 PARACEL 7779 LD 7780 CALL-NET 7781 NETCONNECT 7782 PTINET 7783 EARTHSTATION 7784 ATLANTECH 7785 ALEXUS 7786 NPAC 7787 FAN-NETWORK 7788 MAGMA-COMM 7789 FISHBONE 7790 PACIFIER 7791 EARLY 7792 3M-HDQ-AS 7793 JMX-AS 7794 GOLDEN 7795 CFWNET 7796 ATMLINK 7797 YAB 7798 SYRLANG 7799 OLYPENASN 7800 ALLINA 7801 BOSNET 7802 INTELLI 7803 MINIPHONE 7804 SOFTWOOD 7805 ACRUX 7806 BINARY-NET 7807 RURALNET 7808 ECCOMPANY 7809 SYNOPSYS 7810 CMPC 7811 ITOCHU 7812 AEGISSTAR-ASN1 7813 NPL 7814 CNS-NETWORK 7815 MADENTECH 7816 NORTHWESTCTCNET 7817 SURFNET 7819 FREDNET-ASN 7820 CHORUS-COMM 7821 MEANS 7822 AVICENNA 7823 DUPONT-ASN 7824 GWIS-AS0 7825 IMAGINENET-AS1 7826 CANUCK-AS1 7827 ABII-AS 7828 DRMSCPASN 7829 GLOBALPACIFIC 7830 COMMWERKS 7831 WEBWARP 7832 PCISYS 7833 EXTRA-AS 7834 BTGCOM 7835 ABRAXIS 7836 XO-AS16 7837 ZNET-AS 7838 USAA 7839 MARKTRAVEL 7840 TLN-AS 7841 DEMINET 7842 WEBWORLD 7843 ADELPHIA-AS 7844 OASIS 7845 IMAGINA 7846 RIGHTLINE 7847 NASA-HPCC-ESS 7848 RCN-AS2 7849 CROCKERCOM 7850 IHIGHWAY 7851 ASN-ADELPHIA2 7852 CALIS 7853 BLAZENET 7854 DSSVAUS 7855 TELECOMPLUS 7856 INREACH-ASN 7857 EMPIRE2-ASN 7858 EXECUTELE 7859 PAIR-NETWORKS 7860 UPEI-AS 7861 TELUS-7861 7862 TEXACO-GROUP 7863 ACADIAN 7864 ACLA 7865 SWITCHBOARD-MA 7866 BTI 7867 TECHDATA 7868 DATA-LIFE 7869 DATADEPOT-ASN 7870 WHY 7871 SEIDATA 7872 MCMURDO 7873 MICROTEC-AS 7874 SHKOO 7875 ENTECH 7876 CNGNET-AS 7877 ONLINE-MAGIC 7878 TCEL-AS 7879 DIMENSION-NET-1 7880 NEURAL-AS 7881 IMGIS 7882 SPRINT-HAWAII 7883 CYBERTOURS 7884 ASN-NC-FUCAPMARK 7885 YUKONCOLLEGE 7886 EMPIRICAL-AS 7887 AS-CCPL 7888 CSI-CORP 7889 FULL-ECLIPSE 7890 REDE-UNILINK 7891 BELLSOUTH-NET-BLK2 7892 BELLSOUTH-NET-BLK2 7893 BELLSOUTH-NET-BLK2 7894 BELLSOUTH-NET-BLK2 7895 FABRIK 7896 UNL-AS 7897 XINGNET 7898 DNA-ASN 7899 EXAMCO 7900 HOOSIER 7901 CYPHERCOM 7902 PINS 7903 OASIS-AS 7904 NISI 7905 GARDEN-NET 7906 VERA-NET 7907 NETWORLDTRON 7908 COMSAT-AR 7909 CITYNET-AS 7910 ANDINET 7911 WCG 7912 STATEFARMINSCO 7913 METROLINK 7914 CSI 7915 LIGHTREALM 7916 ISDNET 7917 PHS 7918 LARKOM-AS 7919 DIGITALDATA-AS 7920 LEAPSPOURCE 7921 THEGRID-AS 7922 CCIBB 7923 UPLANET-AS 7924 ADVANCEDONLINE 7925 WVNET 7926 FAIRISAAC 7927 GIPVE 7928 AICOM-AS 7929 WETWARE 7930 TSCNET 7931 ACVI 7932 NUMERIX 7933 BORDERS-GROUP 7934 DATAMARKETS 7935 PO-ASN 7936 NPDGROUP 7937 SOUTHTECH 7938 CIRCLE 7939 UNIVCENTFLA 7940 JCI-INC 7941 ARCHIVE 7942 GE-AS5 7943 TDS-SA-ISP 7944 DMVOL-ASN 7945 CYBERG8T 7946 MET-NET 7947 RADIO 7948 GEOPLEX 7949 WMIS-AS 7950 HC-AS 7951 PCEZ 7952 PCMAGIC-GATEWAY 7953 SUPERNET-MEDELLIN 7954 MAPS-3 7955 SOURCENET 7956 NETRESOURCE 7957 SHOPX 7958 IDI 7959 VICON 7960 GLOBAL-NAPS 7961 TSOFT 7962 EXISNET 7963 STDIO 7964 ARCFOUR 7965 UCAB 7966 HARBOR 7967 SECUREDOC 7968 LOYOLA-UNIV-CHICAGO 7969 CYB-VAN 7970 LEON-FL-SCHL 7971 IWEBTT 7972 GPG 7973 MAYO 7974 ASNIMP 7975 CONFERENCE-AMERICA 7976 SEDONA-AS 7977 EMCCORP 7978 PRISM 7979 BARROWS 7980 GIPAR 7981 DIGIMARK 7982 COGENT-WAN 7983 DOMAIN 7984 GIPCO 7985 CHRONICLE 7986 SAVVISCHI 7987 SAVVISDAL 7988 SAVVISLA 7989 SAVVISNY 7990 SAVVISSF 7991 SAVVISSTL 7992 COGECOWAVE 7993 GIPCL 7994 GIP-PE 7995 GIP-MX 7996 LIMITED 7997 EMTELCO 7998 CYTEC 7999 GAMES-ONLINE 8000 DWX-AS 8001 NET-ACCESS-CORP 8002 STEALTH 8003 THENETDIGITAL 8004 DTG 8005 SUNLINK1 8006 SYSCI 8007 VIA-MEXICO 8008 CICCORP 8009 TRANSAMERICA 8010 PUBLICNET 8011 EXECPC 8012 PCFN 8013 TELUS-AS-8013 8014 BATELNET 8015 VISI-AS 8016 BAISBLT 8017 BAISRNK 8018 VEL-AS 8019 ORCALINK 8020 CAVECOMM-ASN 8021 PCNET 8022 WTNET 8023 CASTLES 8024 CIBNOR-LP 8025 BRIGHTOK-AS 8026 ECOPETROL 8027 GBLNAPSBOSMIX 8028 PROAXIS 8029 MSERVE-AS 8030 WORLDNET5-10 8031 WORLDNET5-10 8032 WORLDNET5-10 8033 WORLDNET5-10 8034 WORLDNET5-10 8035 WORLDNET5-10 8036 UTULSA-AS 8038 QTI 8039 WCS-1 8040 MMD 8041 ATW 8042 WCS 8043 SMARTNAPASN 8044 SELECT-AS 8045 EMIMUSICPUB-NY 8046 NAPANET 8047 GCI 8048 CANTVNET 8049 POL-AS 8050 DNC-AS 8051 NXS 8052 SCRR-8052 8053 ELDISH 8054 TICSA-MEDELLIN 8055 WTCOL-R1 8056 INTERNET-VENEZUELA 8057 VISIONNET 8058 LEAPFROG 8059 ASN-BWAY 8060 BELLSOUTH-NET-BLK3 8061 BELLSOUTH-NET-BLK3 8062 BELLSOUTH-NET-BLK3 8063 BELLSOUTH-NET-BLK3 8064 UABMC 8065 EEPPM 8066 INEA-INTSA 8067 WSCNET-AS 8068 MICROSOFT-AS-BLOCK 8069 MICROSOFT-AS-BLOCK 8070 MICROSOFT-AS-BLOCK 8071 MICROSOFT-AS-BLOCK 8072 MICROSOFT-AS-BLOCK 8073 MICROSOFT-AS-BLOCK 8074 MICROSOFT-AS-BLOCK 8075 MICROSOFT-AS-BLOCK 8076 HUD 8077 OHIOONLINE 8078 I-2 8079 ONC-AS 8080 ZIP2 8081 FTLNET 8082 WORLDSITE 8083 CONGQTLY 8084 CENDANT 8085 AMERITRADE 8086 PBD-NET 8087 NEUMEDIA 8088 SRTNET 8089 ESPIRE-FLN 8090 ENRON 8091 ICOMS 8092 BBNOW 8093 PROFOUND 8094 PUKNET 8095 NETVALUE 8096 INTERPLANET-MEDELLIN 8098 IFN 8099 ASN-280 8100 AYENET 8101 RTCI-AS 8102 FALLON-MPLS 8103 STATE-OF-FLA 8105 DAKOTACOM 8106 SPRINT97 8107 SPRINT97 8108 SPRINT97 8109 SPRINT97 8110 SPRINT97 8111 DALUNIV 8112 BAIS-ASBLK 8113 BAIS-ASBLK 8114 BAIS-ASBLK 8115 BAIS-ASBLK 8116 GUIDANT 8117 DRF 8118 MAAZ-AS 8119 DTN-AS 8120 BESTWEB 8121 TCH 8122 DQNAS 8123 POLYBASE 8124 TUMBLEWEED 8125 CYBERPORTAL-ASN 8126 KENTROX 8127 CONNECTEXPRESS 8128 UOL-AS 8129 CAIWIRELESS 8130 INFICAD 8131 PEPBOYS 8132 ENTEX 8133 CYBERCOMCORP 8134 UP-NET 8135 TROYST 8136 IFSI 8137 INFOSEEK2 8138 JADE 8139 RACALDATAGROUP 8140 REDIFE-PREP 8141 TBAINFORMATICA 8142 EAGLEQUEST 8143 4PUBLICOM-AS 8144 WORLDNOWONLINE 8145 GW 8146 GNAC 8147 ASERICY 8148 TIES 8149 UNICOMP 8150 MOBILEPS 8151 UNINET-MX 8152 BRODERBUND 8153 NORTELRCH2 8154 GTC 8155 THE-LINK-MGM 8156 INTI 8157 INTERNETCONNECTUSA 8158 LUCENT-WHATS 8159 KANSASNET 8160 ROGERS-AS-8160 8161 INSIGHT-AS 8162 IMPULSEGATEWAY 8163 METROTEL 8164 JUNO 8165 DATABOSS 8166 PRISMNET 8167 TELESC 8168 RAVENET-DE 8169 ACCESSINDY 8170 MICROAGE 8171 ENET 8172 MTI 8174 MHPCC-ASNET2 8175 CETLINK 8176 NETSCAPE-ASN 8177 QADAS 8178 OVERNET 8179 SFCU-1 8180 MDM-INET 8181 VCINET 8182 DIGITALRIVER 8183 INTERNETSECURE-AS 8184 LAFFITEMORGAN 8185 THAWEB 8186 HPI 8187 NEWTEL-COMM 8188 BLOOMBERG 8189 STRATOS 8190 VIATEL 8191 WIDOMAKER 8192 RIPE-ASNBLOCK7 8193 RIPE-ASNBLOCK7 8194 RIPE-ASNBLOCK7 8195 RIPE-ASNBLOCK7 8196 RIPE-ASNBLOCK7 8197 RIPE-ASNBLOCK7 8198 RIPE-ASNBLOCK7 8199 RIPE-ASNBLOCK7 8200 RIPE-ASNBLOCK7 8201 RIPE-ASNBLOCK7 8202 RIPE-ASNBLOCK7 8203 RIPE-ASNBLOCK7 8204 RIPE-ASNBLOCK7 8205 RIPE-ASNBLOCK7 8206 RIPE-ASNBLOCK7 8207 RIPE-ASNBLOCK7 8208 RIPE-ASNBLOCK7 8209 RIPE-ASNBLOCK7 8210 RIPE-ASNBLOCK7 8211 RIPE-ASNBLOCK7 8212 RIPE-ASNBLOCK7 8213 RIPE-ASNBLOCK7 8214 RIPE-ASNBLOCK7 8215 RIPE-ASNBLOCK7 8216 RIPE-ASNBLOCK7 8217 RIPE-ASNBLOCK7 8218 RIPE-ASNBLOCK7 8219 RIPE-ASNBLOCK7 8220 RIPE-ASNBLOCK7 8221 RIPE-ASNBLOCK7 8222 RIPE-ASNBLOCK7 8223 RIPE-ASNBLOCK7 8224 RIPE-ASNBLOCK7 8225 RIPE-ASNBLOCK7 8226 RIPE-ASNBLOCK7 8227 RIPE-ASNBLOCK7 8228 RIPE-ASNBLOCK7 8229 RIPE-ASNBLOCK7 8230 RIPE-ASNBLOCK7 8231 RIPE-ASNBLOCK7 8232 RIPE-ASNBLOCK7 8233 RIPE-ASNBLOCK7 8234 RIPE-ASNBLOCK7 8235 RIPE-ASNBLOCK7 8236 RIPE-ASNBLOCK7 8237 RIPE-ASNBLOCK7 8238 RIPE-ASNBLOCK7 8239 RIPE-ASNBLOCK7 8240 RIPE-ASNBLOCK7 8241 RIPE-ASNBLOCK7 8242 RIPE-ASNBLOCK7 8243 RIPE-ASNBLOCK7 8244 RIPE-ASNBLOCK7 8245 RIPE-ASNBLOCK7 8246 RIPE-ASNBLOCK7 8247 RIPE-ASNBLOCK7 8248 RIPE-ASNBLOCK7 8249 RIPE-ASNBLOCK7 8250 RIPE-ASNBLOCK7 8251 RIPE-ASNBLOCK7 8252 RIPE-ASNBLOCK7 8253 RIPE-ASNBLOCK7 8254 RIPE-ASNBLOCK7 8255 RIPE-ASNBLOCK7 8256 RIPE-ASNBLOCK7 8257 RIPE-ASNBLOCK7 8258 RIPE-ASNBLOCK7 8259 RIPE-ASNBLOCK7 8260 RIPE-ASNBLOCK7 8261 RIPE-ASNBLOCK7 8262 RIPE-ASNBLOCK7 8263 RIPE-ASNBLOCK7 8264 RIPE-ASNBLOCK7 8265 RIPE-ASNBLOCK7 8266 RIPE-ASNBLOCK7 8267 RIPE-ASNBLOCK7 8268 RIPE-ASNBLOCK7 8269 RIPE-ASNBLOCK7 8270 RIPE-ASNBLOCK7 8271 RIPE-ASNBLOCK7 8272 RIPE-ASNBLOCK7 8273 RIPE-ASNBLOCK7 8274 RIPE-ASNBLOCK7 8275 RIPE-ASNBLOCK7 8276 RIPE-ASNBLOCK7 8277 RIPE-ASNBLOCK7 8278 RIPE-ASNBLOCK7 8279 RIPE-ASNBLOCK7 8280 RIPE-ASNBLOCK7 8281 RIPE-ASNBLOCK7 8282 RIPE-ASNBLOCK7 8283 RIPE-ASNBLOCK7 8284 RIPE-ASNBLOCK7 8285 RIPE-ASNBLOCK7 8286 RIPE-ASNBLOCK7 8287 RIPE-ASNBLOCK7 8288 RIPE-ASNBLOCK7 8289 RIPE-ASNBLOCK7 8290 RIPE-ASNBLOCK7 8291 RIPE-ASNBLOCK7 8292 RIPE-ASNBLOCK7 8293 RIPE-ASNBLOCK7 8294 RIPE-ASNBLOCK7 8295 RIPE-ASNBLOCK7 8296 RIPE-ASNBLOCK7 8297 RIPE-ASNBLOCK7 8298 RIPE-ASNBLOCK7 8299 RIPE-ASNBLOCK7 8300 RIPE-ASNBLOCK7 8301 RIPE-ASNBLOCK7 8302 RIPE-ASNBLOCK7 8303 RIPE-ASNBLOCK7 8304 RIPE-ASNBLOCK7 8305 RIPE-ASNBLOCK7 8306 RIPE-ASNBLOCK7 8307 RIPE-ASNBLOCK7 8308 RIPE-ASNBLOCK7 8309 RIPE-ASNBLOCK7 8310 RIPE-ASNBLOCK7 8311 RIPE-ASNBLOCK7 8312 RIPE-ASNBLOCK7 8313 RIPE-ASNBLOCK7 8314 RIPE-ASNBLOCK7 8315 RIPE-ASNBLOCK7 8316 RIPE-ASNBLOCK7 8317 RIPE-ASNBLOCK7 8318 RIPE-ASNBLOCK7 8319 RIPE-ASNBLOCK7 8320 RIPE-ASNBLOCK7 8321 RIPE-ASNBLOCK7 8322 RIPE-ASNBLOCK7 8323 RIPE-ASNBLOCK7 8324 RIPE-ASNBLOCK7 8325 RIPE-ASNBLOCK7 8326 RIPE-ASNBLOCK7 8327 RIPE-ASNBLOCK7 8328 RIPE-ASNBLOCK7 8329 RIPE-ASNBLOCK7 8330 RIPE-ASNBLOCK7 8331 RIPE-ASNBLOCK7 8332 RIPE-ASNBLOCK7 8333 RIPE-ASNBLOCK7 8334 RIPE-ASNBLOCK7 8335 RIPE-ASNBLOCK7 8336 RIPE-ASNBLOCK7 8337 RIPE-ASNBLOCK7 8338 RIPE-ASNBLOCK7 8339 RIPE-ASNBLOCK7 8340 RIPE-ASNBLOCK7 8341 RIPE-ASNBLOCK7 8342 RIPE-ASNBLOCK7 8343 RIPE-ASNBLOCK7 8344 RIPE-ASNBLOCK7 8345 RIPE-ASNBLOCK7 8346 RIPE-ASNBLOCK7 8347 RIPE-ASNBLOCK7 8348 RIPE-ASNBLOCK7 8349 RIPE-ASNBLOCK7 8350 RIPE-ASNBLOCK7 8351 RIPE-ASNBLOCK7 8352 RIPE-ASNBLOCK7 8353 RIPE-ASNBLOCK7 8354 RIPE-ASNBLOCK7 8355 RIPE-ASNBLOCK7 8356 RIPE-ASNBLOCK7 8357 RIPE-ASNBLOCK7 8358 RIPE-ASNBLOCK7 8359 RIPE-ASNBLOCK7 8360 RIPE-ASNBLOCK7 8361 RIPE-ASNBLOCK7 8362 RIPE-ASNBLOCK7 8363 RIPE-ASNBLOCK7 8364 RIPE-ASNBLOCK7 8365 RIPE-ASNBLOCK7 8366 RIPE-ASNBLOCK7 8367 RIPE-ASNBLOCK7 8368 RIPE-ASNBLOCK7 8369 RIPE-ASNBLOCK7 8370 RIPE-ASNBLOCK7 8371 RIPE-ASNBLOCK7 8372 RIPE-ASNBLOCK7 8373 RIPE-ASNBLOCK7 8374 RIPE-ASNBLOCK7 8375 RIPE-ASNBLOCK7 8376 RIPE-ASNBLOCK7 8377 RIPE-ASNBLOCK7 8378 RIPE-ASNBLOCK7 8379 RIPE-ASNBLOCK7 8380 RIPE-ASNBLOCK7 8381 RIPE-ASNBLOCK7 8382 RIPE-ASNBLOCK7 8383 RIPE-ASNBLOCK7 8384 RIPE-ASNBLOCK7 8385 RIPE-ASNBLOCK7 8386 RIPE-ASNBLOCK7 8387 RIPE-ASNBLOCK7 8388 RIPE-ASNBLOCK7 8389 RIPE-ASNBLOCK7 8390 RIPE-ASNBLOCK7 8391 RIPE-ASNBLOCK7 8392 RIPE-ASNBLOCK7 8393 RIPE-ASNBLOCK7 8394 RIPE-ASNBLOCK7 8395 RIPE-ASNBLOCK7 8396 RIPE-ASNBLOCK7 8397 RIPE-ASNBLOCK7 8398 RIPE-ASNBLOCK7 8399 RIPE-ASNBLOCK7 8400 RIPE-ASNBLOCK7 8401 RIPE-ASNBLOCK7 8402 RIPE-ASNBLOCK7 8403 RIPE-ASNBLOCK7 8404 RIPE-ASNBLOCK7 8405 RIPE-ASNBLOCK7 8406 RIPE-ASNBLOCK7 8407 RIPE-ASNBLOCK7 8408 RIPE-ASNBLOCK7 8409 RIPE-ASNBLOCK7 8410 RIPE-ASNBLOCK7 8411 RIPE-ASNBLOCK7 8412 RIPE-ASNBLOCK7 8413 RIPE-ASNBLOCK7 8414 RIPE-ASNBLOCK7 8415 RIPE-ASNBLOCK7 8416 RIPE-ASNBLOCK7 8417 RIPE-ASNBLOCK7 8418 RIPE-ASNBLOCK7 8419 RIPE-ASNBLOCK7 8420 RIPE-ASNBLOCK7 8421 RIPE-ASNBLOCK7 8422 RIPE-ASNBLOCK7 8423 RIPE-ASNBLOCK7 8424 RIPE-ASNBLOCK7 8425 RIPE-ASNBLOCK7 8426 RIPE-ASNBLOCK7 8427 RIPE-ASNBLOCK7 8428 RIPE-ASNBLOCK7 8429 RIPE-ASNBLOCK7 8430 RIPE-ASNBLOCK7 8431 RIPE-ASNBLOCK7 8432 RIPE-ASNBLOCK7 8433 RIPE-ASNBLOCK7 8434 RIPE-ASNBLOCK7 8435 RIPE-ASNBLOCK7 8436 RIPE-ASNBLOCK7 8437 RIPE-ASNBLOCK7 8438 RIPE-ASNBLOCK7 8439 RIPE-ASNBLOCK7 8440 RIPE-ASNBLOCK7 8441 RIPE-ASNBLOCK7 8442 RIPE-ASNBLOCK7 8443 RIPE-ASNBLOCK7 8444 RIPE-ASNBLOCK7 8445 RIPE-ASNBLOCK7 8446 RIPE-ASNBLOCK7 8447 RIPE-ASNBLOCK7 8448 RIPE-ASNBLOCK7 8449 RIPE-ASNBLOCK7 8450 RIPE-ASNBLOCK7 8451 RIPE-ASNBLOCK7 8452 RIPE-ASNBLOCK7 8453 RIPE-ASNBLOCK7 8454 RIPE-ASNBLOCK7 8455 RIPE-ASNBLOCK7 8456 RIPE-ASNBLOCK7 8457 RIPE-ASNBLOCK7 8458 RIPE-ASNBLOCK7 8459 RIPE-ASNBLOCK7 8460 RIPE-ASNBLOCK7 8461 RIPE-ASNBLOCK7 8462 RIPE-ASNBLOCK7 8463 RIPE-ASNBLOCK7 8464 RIPE-ASNBLOCK7 8465 RIPE-ASNBLOCK7 8466 RIPE-ASNBLOCK7 8467 RIPE-ASNBLOCK7 8468 RIPE-ASNBLOCK7 8469 RIPE-ASNBLOCK7 8470 RIPE-ASNBLOCK7 8471 RIPE-ASNBLOCK7 8472 RIPE-ASNBLOCK7 8473 RIPE-ASNBLOCK7 8474 RIPE-ASNBLOCK7 8475 RIPE-ASNBLOCK7 8476 RIPE-ASNBLOCK7 8477 RIPE-ASNBLOCK7 8478 RIPE-ASNBLOCK7 8479 RIPE-ASNBLOCK7 8480 RIPE-ASNBLOCK7 8481 RIPE-ASNBLOCK7 8482 RIPE-ASNBLOCK7 8483 RIPE-ASNBLOCK7 8484 RIPE-ASNBLOCK7 8485 RIPE-ASNBLOCK7 8486 RIPE-ASNBLOCK7 8487 RIPE-ASNBLOCK7 8488 RIPE-ASNBLOCK7 8489 RIPE-ASNBLOCK7 8490 RIPE-ASNBLOCK7 8491 RIPE-ASNBLOCK7 8492 RIPE-ASNBLOCK7 8493 RIPE-ASNBLOCK7 8494 RIPE-ASNBLOCK7 8495 RIPE-ASNBLOCK7 8496 RIPE-ASNBLOCK7 8497 RIPE-ASNBLOCK7 8498 RIPE-ASNBLOCK7 8499 RIPE-ASNBLOCK7 8500 RIPE-ASNBLOCK7 8501 RIPE-ASNBLOCK7 8502 RIPE-ASNBLOCK7 8503 RIPE-ASNBLOCK7 8504 RIPE-ASNBLOCK7 8505 RIPE-ASNBLOCK7 8506 RIPE-ASNBLOCK7 8507 RIPE-ASNBLOCK7 8508 RIPE-ASNBLOCK7 8509 RIPE-ASNBLOCK7 8510 RIPE-ASNBLOCK7 8511 RIPE-ASNBLOCK7 8512 RIPE-ASNBLOCK7 8513 RIPE-ASNBLOCK7 8514 RIPE-ASNBLOCK7 8515 RIPE-ASNBLOCK7 8516 RIPE-ASNBLOCK7 8517 RIPE-ASNBLOCK7 8518 RIPE-ASNBLOCK7 8519 RIPE-ASNBLOCK7 8520 RIPE-ASNBLOCK7 8521 RIPE-ASNBLOCK7 8522 RIPE-ASNBLOCK7 8523 RIPE-ASNBLOCK7 8524 RIPE-ASNBLOCK7 8525 RIPE-ASNBLOCK7 8526 RIPE-ASNBLOCK7 8527 RIPE-ASNBLOCK7 8528 RIPE-ASNBLOCK7 8529 RIPE-ASNBLOCK7 8530 RIPE-ASNBLOCK7 8531 RIPE-ASNBLOCK7 8532 RIPE-ASNBLOCK7 8533 RIPE-ASNBLOCK7 8534 RIPE-ASNBLOCK7 8535 RIPE-ASNBLOCK7 8536 RIPE-ASNBLOCK7 8537 RIPE-ASNBLOCK7 8538 RIPE-ASNBLOCK7 8539 RIPE-ASNBLOCK7 8540 RIPE-ASNBLOCK7 8541 RIPE-ASNBLOCK7 8542 RIPE-ASNBLOCK7 8543 RIPE-ASNBLOCK7 8544 RIPE-ASNBLOCK7 8545 RIPE-ASNBLOCK7 8546 RIPE-ASNBLOCK7 8547 RIPE-ASNBLOCK7 8548 RIPE-ASNBLOCK7 8549 RIPE-ASNBLOCK7 8550 RIPE-ASNBLOCK7 8551 RIPE-ASNBLOCK7 8552 RIPE-ASNBLOCK7 8553 RIPE-ASNBLOCK7 8554 RIPE-ASNBLOCK7 8555 RIPE-ASNBLOCK7 8556 RIPE-ASNBLOCK7 8557 RIPE-ASNBLOCK7 8558 RIPE-ASNBLOCK7 8559 RIPE-ASNBLOCK7 8560 RIPE-ASNBLOCK7 8561 RIPE-ASNBLOCK7 8562 RIPE-ASNBLOCK7 8563 RIPE-ASNBLOCK7 8564 RIPE-ASNBLOCK7 8565 RIPE-ASNBLOCK7 8566 RIPE-ASNBLOCK7 8567 RIPE-ASNBLOCK7 8568 RIPE-ASNBLOCK7 8569 RIPE-ASNBLOCK7 8570 RIPE-ASNBLOCK7 8571 RIPE-ASNBLOCK7 8572 RIPE-ASNBLOCK7 8573 RIPE-ASNBLOCK7 8574 RIPE-ASNBLOCK7 8575 RIPE-ASNBLOCK7 8576 RIPE-ASNBLOCK7 8577 RIPE-ASNBLOCK7 8578 RIPE-ASNBLOCK7 8579 RIPE-ASNBLOCK7 8580 RIPE-ASNBLOCK7 8581 RIPE-ASNBLOCK7 8582 RIPE-ASNBLOCK7 8583 RIPE-ASNBLOCK7 8584 RIPE-ASNBLOCK7 8585 RIPE-ASNBLOCK7 8586 RIPE-ASNBLOCK7 8587 RIPE-ASNBLOCK7 8588 RIPE-ASNBLOCK7 8589 RIPE-ASNBLOCK7 8590 RIPE-ASNBLOCK7 8591 RIPE-ASNBLOCK7 8592 RIPE-ASNBLOCK7 8593 RIPE-ASNBLOCK7 8594 RIPE-ASNBLOCK7 8595 RIPE-ASNBLOCK7 8596 RIPE-ASNBLOCK7 8597 RIPE-ASNBLOCK7 8598 RIPE-ASNBLOCK7 8599 RIPE-ASNBLOCK7 8600 RIPE-ASNBLOCK7 8601 RIPE-ASNBLOCK7 8602 RIPE-ASNBLOCK7 8603 RIPE-ASNBLOCK7 8604 RIPE-ASNBLOCK7 8605 RIPE-ASNBLOCK7 8606 RIPE-ASNBLOCK7 8607 RIPE-ASNBLOCK7 8608 RIPE-ASNBLOCK7 8609 RIPE-ASNBLOCK7 8610 RIPE-ASNBLOCK7 8611 RIPE-ASNBLOCK7 8612 RIPE-ASNBLOCK7 8613 RIPE-ASNBLOCK7 8614 RIPE-ASNBLOCK7 8615 RIPE-ASNBLOCK7 8616 RIPE-ASNBLOCK7 8617 RIPE-ASNBLOCK7 8618 RIPE-ASNBLOCK7 8619 RIPE-ASNBLOCK7 8620 RIPE-ASNBLOCK7 8621 RIPE-ASNBLOCK7 8622 RIPE-ASNBLOCK7 8623 RIPE-ASNBLOCK7 8624 RIPE-ASNBLOCK7 8625 RIPE-ASNBLOCK7 8626 RIPE-ASNBLOCK7 8627 RIPE-ASNBLOCK7 8628 RIPE-ASNBLOCK7 8629 RIPE-ASNBLOCK7 8630 RIPE-ASNBLOCK7 8631 RIPE-ASNBLOCK7 8632 RIPE-ASNBLOCK7 8633 RIPE-ASNBLOCK7 8634 RIPE-ASNBLOCK7 8635 RIPE-ASNBLOCK7 8636 RIPE-ASNBLOCK7 8637 RIPE-ASNBLOCK7 8638 RIPE-ASNBLOCK7 8639 RIPE-ASNBLOCK7 8640 RIPE-ASNBLOCK7 8641 RIPE-ASNBLOCK7 8642 RIPE-ASNBLOCK7 8643 RIPE-ASNBLOCK7 8644 RIPE-ASNBLOCK7 8645 RIPE-ASNBLOCK7 8646 RIPE-ASNBLOCK7 8647 RIPE-ASNBLOCK7 8648 RIPE-ASNBLOCK7 8649 RIPE-ASNBLOCK7 8650 RIPE-ASNBLOCK7 8651 RIPE-ASNBLOCK7 8652 RIPE-ASNBLOCK7 8653 RIPE-ASNBLOCK7 8654 RIPE-ASNBLOCK7 8655 RIPE-ASNBLOCK7 8656 RIPE-ASNBLOCK7 8657 RIPE-ASNBLOCK7 8658 RIPE-ASNBLOCK7 8659 RIPE-ASNBLOCK7 8660 RIPE-ASNBLOCK7 8661 RIPE-ASNBLOCK7 8662 RIPE-ASNBLOCK7 8663 RIPE-ASNBLOCK7 8664 RIPE-ASNBLOCK7 8665 RIPE-ASNBLOCK7 8666 RIPE-ASNBLOCK7 8667 RIPE-ASNBLOCK7 8668 RIPE-ASNBLOCK7 8669 RIPE-ASNBLOCK7 8670 RIPE-ASNBLOCK7 8671 RIPE-ASNBLOCK7 8672 RIPE-ASNBLOCK7 8673 RIPE-ASNBLOCK7 8674 RIPE-ASNBLOCK7 8675 RIPE-ASNBLOCK7 8676 RIPE-ASNBLOCK7 8677 RIPE-ASNBLOCK7 8678 RIPE-ASNBLOCK7 8679 RIPE-ASNBLOCK7 8680 RIPE-ASNBLOCK7 8681 RIPE-ASNBLOCK7 8682 RIPE-ASNBLOCK7 8683 RIPE-ASNBLOCK7 8684 RIPE-ASNBLOCK7 8685 RIPE-ASNBLOCK7 8686 RIPE-ASNBLOCK7 8687 RIPE-ASNBLOCK7 8688 RIPE-ASNBLOCK7 8689 RIPE-ASNBLOCK7 8690 RIPE-ASNBLOCK7 8691 RIPE-ASNBLOCK7 8692 RIPE-ASNBLOCK7 8693 RIPE-ASNBLOCK7 8694 RIPE-ASNBLOCK7 8695 RIPE-ASNBLOCK7 8696 RIPE-ASNBLOCK7 8697 RIPE-ASNBLOCK7 8698 RIPE-ASNBLOCK7 8699 RIPE-ASNBLOCK7 8700 RIPE-ASNBLOCK7 8701 RIPE-ASNBLOCK7 8702 RIPE-ASNBLOCK7 8703 RIPE-ASNBLOCK7 8704 RIPE-ASNBLOCK7 8705 RIPE-ASNBLOCK7 8706 RIPE-ASNBLOCK7 8707 RIPE-ASNBLOCK7 8708 RIPE-ASNBLOCK7 8709 RIPE-ASNBLOCK7 8710 RIPE-ASNBLOCK7 8711 RIPE-ASNBLOCK7 8712 RIPE-ASNBLOCK7 8713 RIPE-ASNBLOCK7 8714 RIPE-ASNBLOCK7 8715 RIPE-ASNBLOCK7 8716 RIPE-ASNBLOCK7 8717 RIPE-ASNBLOCK7 8718 RIPE-ASNBLOCK7 8719 RIPE-ASNBLOCK7 8720 RIPE-ASNBLOCK7 8721 RIPE-ASNBLOCK7 8722 RIPE-ASNBLOCK7 8723 RIPE-ASNBLOCK7 8724 RIPE-ASNBLOCK7 8725 RIPE-ASNBLOCK7 8726 RIPE-ASNBLOCK7 8727 RIPE-ASNBLOCK7 8728 RIPE-ASNBLOCK7 8729 RIPE-ASNBLOCK7 8730 RIPE-ASNBLOCK7 8731 RIPE-ASNBLOCK7 8732 RIPE-ASNBLOCK7 8733 RIPE-ASNBLOCK7 8734 RIPE-ASNBLOCK7 8735 RIPE-ASNBLOCK7 8736 RIPE-ASNBLOCK7 8737 RIPE-ASNBLOCK7 8738 RIPE-ASNBLOCK7 8739 RIPE-ASNBLOCK7 8740 RIPE-ASNBLOCK7 8741 RIPE-ASNBLOCK7 8742 RIPE-ASNBLOCK7 8743 RIPE-ASNBLOCK7 8744 RIPE-ASNBLOCK7 8745 RIPE-ASNBLOCK7 8746 RIPE-ASNBLOCK7 8747 RIPE-ASNBLOCK7 8748 RIPE-ASNBLOCK7 8749 RIPE-ASNBLOCK7 8750 RIPE-ASNBLOCK7 8751 RIPE-ASNBLOCK7 8752 RIPE-ASNBLOCK7 8753 RIPE-ASNBLOCK7 8754 RIPE-ASNBLOCK7 8755 RIPE-ASNBLOCK7 8756 RIPE-ASNBLOCK7 8757 RIPE-ASNBLOCK7 8758 RIPE-ASNBLOCK7 8759 RIPE-ASNBLOCK7 8760 RIPE-ASNBLOCK7 8761 RIPE-ASNBLOCK7 8762 RIPE-ASNBLOCK7 8763 RIPE-ASNBLOCK7 8764 RIPE-ASNBLOCK7 8765 RIPE-ASNBLOCK7 8766 RIPE-ASNBLOCK7 8767 RIPE-ASNBLOCK7 8768 RIPE-ASNBLOCK7 8769 RIPE-ASNBLOCK7 8770 RIPE-ASNBLOCK7 8771 RIPE-ASNBLOCK7 8772 RIPE-ASNBLOCK7 8773 RIPE-ASNBLOCK7 8774 RIPE-ASNBLOCK7 8775 RIPE-ASNBLOCK7 8776 RIPE-ASNBLOCK7 8777 RIPE-ASNBLOCK7 8778 RIPE-ASNBLOCK7 8779 RIPE-ASNBLOCK7 8780 RIPE-ASNBLOCK7 8781 RIPE-ASNBLOCK7 8782 RIPE-ASNBLOCK7 8783 RIPE-ASNBLOCK7 8784 RIPE-ASNBLOCK7 8785 RIPE-ASNBLOCK7 8786 RIPE-ASNBLOCK7 8787 RIPE-ASNBLOCK7 8788 RIPE-ASNBLOCK7 8789 RIPE-ASNBLOCK7 8790 RIPE-ASNBLOCK7 8791 RIPE-ASNBLOCK7 8792 RIPE-ASNBLOCK7 8793 RIPE-ASNBLOCK7 8794 RIPE-ASNBLOCK7 8795 RIPE-ASNBLOCK7 8796 RIPE-ASNBLOCK7 8797 RIPE-ASNBLOCK7 8798 RIPE-ASNBLOCK7 8799 RIPE-ASNBLOCK7 8800 RIPE-ASNBLOCK7 8801 RIPE-ASNBLOCK7 8802 RIPE-ASNBLOCK7 8803 RIPE-ASNBLOCK7 8804 RIPE-ASNBLOCK7 8805 RIPE-ASNBLOCK7 8806 RIPE-ASNBLOCK7 8807 RIPE-ASNBLOCK7 8808 RIPE-ASNBLOCK7 8809 RIPE-ASNBLOCK7 8810 RIPE-ASNBLOCK7 8811 RIPE-ASNBLOCK7 8812 RIPE-ASNBLOCK7 8813 RIPE-ASNBLOCK7 8814 RIPE-ASNBLOCK7 8815 RIPE-ASNBLOCK7 8816 RIPE-ASNBLOCK7 8817 RIPE-ASNBLOCK7 8818 RIPE-ASNBLOCK7 8819 RIPE-ASNBLOCK7 8820 RIPE-ASNBLOCK7 8821 RIPE-ASNBLOCK7 8822 RIPE-ASNBLOCK7 8823 RIPE-ASNBLOCK7 8824 RIPE-ASNBLOCK7 8825 RIPE-ASNBLOCK7 8826 RIPE-ASNBLOCK7 8827 RIPE-ASNBLOCK7 8828 RIPE-ASNBLOCK7 8829 RIPE-ASNBLOCK7 8830 RIPE-ASNBLOCK7 8831 RIPE-ASNBLOCK7 8832 RIPE-ASNBLOCK7 8833 RIPE-ASNBLOCK7 8834 RIPE-ASNBLOCK7 8835 RIPE-ASNBLOCK7 8836 RIPE-ASNBLOCK7 8837 RIPE-ASNBLOCK7 8838 RIPE-ASNBLOCK7 8839 RIPE-ASNBLOCK7 8840 RIPE-ASNBLOCK7 8841 RIPE-ASNBLOCK7 8842 RIPE-ASNBLOCK7 8843 RIPE-ASNBLOCK7 8844 RIPE-ASNBLOCK7 8845 RIPE-ASNBLOCK7 8846 RIPE-ASNBLOCK7 8847 RIPE-ASNBLOCK7 8848 RIPE-ASNBLOCK7 8849 RIPE-ASNBLOCK7 8850 RIPE-ASNBLOCK7 8851 RIPE-ASNBLOCK7 8852 RIPE-ASNBLOCK7 8853 RIPE-ASNBLOCK7 8854 RIPE-ASNBLOCK7 8855 RIPE-ASNBLOCK7 8856 RIPE-ASNBLOCK7 8857 RIPE-ASNBLOCK7 8858 RIPE-ASNBLOCK7 8859 RIPE-ASNBLOCK7 8860 RIPE-ASNBLOCK7 8861 RIPE-ASNBLOCK7 8862 RIPE-ASNBLOCK7 8863 RIPE-ASNBLOCK7 8864 RIPE-ASNBLOCK7 8865 RIPE-ASNBLOCK7 8866 RIPE-ASNBLOCK7 8867 RIPE-ASNBLOCK7 8868 RIPE-ASNBLOCK7 8869 RIPE-ASNBLOCK7 8870 RIPE-ASNBLOCK7 8871 RIPE-ASNBLOCK7 8872 RIPE-ASNBLOCK7 8873 RIPE-ASNBLOCK7 8874 RIPE-ASNBLOCK7 8875 RIPE-ASNBLOCK7 8876 RIPE-ASNBLOCK7 8877 RIPE-ASNBLOCK7 8878 RIPE-ASNBLOCK7 8879 RIPE-ASNBLOCK7 8880 RIPE-ASNBLOCK7 8881 RIPE-ASNBLOCK7 8882 RIPE-ASNBLOCK7 8883 RIPE-ASNBLOCK7 8884 RIPE-ASNBLOCK7 8885 RIPE-ASNBLOCK7 8886 RIPE-ASNBLOCK7 8887 RIPE-ASNBLOCK7 8888 RIPE-ASNBLOCK7 8889 RIPE-ASNBLOCK7 8890 RIPE-ASNBLOCK7 8891 RIPE-ASNBLOCK7 8892 RIPE-ASNBLOCK7 8893 RIPE-ASNBLOCK7 8894 RIPE-ASNBLOCK7 8895 RIPE-ASNBLOCK7 8896 RIPE-ASNBLOCK7 8897 RIPE-ASNBLOCK7 8898 RIPE-ASNBLOCK7 8899 RIPE-ASNBLOCK7 8900 RIPE-ASNBLOCK7 8901 RIPE-ASNBLOCK7 8902 RIPE-ASNBLOCK7 8903 RIPE-ASNBLOCK7 8904 RIPE-ASNBLOCK7 8905 RIPE-ASNBLOCK7 8906 RIPE-ASNBLOCK7 8907 RIPE-ASNBLOCK7 8908 RIPE-ASNBLOCK7 8909 RIPE-ASNBLOCK7 8910 RIPE-ASNBLOCK7 8911 RIPE-ASNBLOCK7 8912 RIPE-ASNBLOCK7 8913 RIPE-ASNBLOCK7 8914 RIPE-ASNBLOCK7 8915 RIPE-ASNBLOCK7 8916 RIPE-ASNBLOCK7 8917 RIPE-ASNBLOCK7 8918 RIPE-ASNBLOCK7 8919 RIPE-ASNBLOCK7 8920 RIPE-ASNBLOCK7 8921 RIPE-ASNBLOCK7 8922 RIPE-ASNBLOCK7 8923 RIPE-ASNBLOCK7 8924 RIPE-ASNBLOCK7 8925 RIPE-ASNBLOCK7 8926 RIPE-ASNBLOCK7 8927 RIPE-ASNBLOCK7 8928 RIPE-ASNBLOCK7 8929 RIPE-ASNBLOCK7 8930 RIPE-ASNBLOCK7 8931 RIPE-ASNBLOCK7 8932 RIPE-ASNBLOCK7 8933 RIPE-ASNBLOCK7 8934 RIPE-ASNBLOCK7 8935 RIPE-ASNBLOCK7 8936 RIPE-ASNBLOCK7 8937 RIPE-ASNBLOCK7 8938 RIPE-ASNBLOCK7 8939 RIPE-ASNBLOCK7 8940 RIPE-ASNBLOCK7 8941 RIPE-ASNBLOCK7 8942 RIPE-ASNBLOCK7 8943 RIPE-ASNBLOCK7 8944 RIPE-ASNBLOCK7 8945 RIPE-ASNBLOCK7 8946 RIPE-ASNBLOCK7 8947 RIPE-ASNBLOCK7 8948 RIPE-ASNBLOCK7 8949 RIPE-ASNBLOCK7 8950 RIPE-ASNBLOCK7 8951 RIPE-ASNBLOCK7 8952 RIPE-ASNBLOCK7 8953 RIPE-ASNBLOCK7 8954 RIPE-ASNBLOCK7 8955 RIPE-ASNBLOCK7 8956 RIPE-ASNBLOCK7 8957 RIPE-ASNBLOCK7 8958 RIPE-ASNBLOCK7 8959 RIPE-ASNBLOCK7 8960 RIPE-ASNBLOCK7 8961 RIPE-ASNBLOCK7 8962 RIPE-ASNBLOCK7 8963 RIPE-ASNBLOCK7 8964 RIPE-ASNBLOCK7 8965 RIPE-ASNBLOCK7 8966 RIPE-ASNBLOCK7 8967 RIPE-ASNBLOCK7 8968 RIPE-ASNBLOCK7 8969 RIPE-ASNBLOCK7 8970 RIPE-ASNBLOCK7 8971 RIPE-ASNBLOCK7 8972 RIPE-ASNBLOCK7 8973 RIPE-ASNBLOCK7 8974 RIPE-ASNBLOCK7 8975 RIPE-ASNBLOCK7 8976 RIPE-ASNBLOCK7 8977 RIPE-ASNBLOCK7 8978 RIPE-ASNBLOCK7 8979 RIPE-ASNBLOCK7 8980 RIPE-ASNBLOCK7 8981 RIPE-ASNBLOCK7 8982 RIPE-ASNBLOCK7 8983 RIPE-ASNBLOCK7 8984 RIPE-ASNBLOCK7 8985 RIPE-ASNBLOCK7 8986 RIPE-ASNBLOCK7 8987 RIPE-ASNBLOCK7 8988 RIPE-ASNBLOCK7 8989 RIPE-ASNBLOCK7 8990 RIPE-ASNBLOCK7 8991 RIPE-ASNBLOCK7 8992 RIPE-ASNBLOCK7 8993 RIPE-ASNBLOCK7 8994 RIPE-ASNBLOCK7 8995 RIPE-ASNBLOCK7 8996 RIPE-ASNBLOCK7 8997 RIPE-ASNBLOCK7 8998 RIPE-ASNBLOCK7 8999 RIPE-ASNBLOCK7 9000 RIPE-ASNBLOCK7 9001 RIPE-ASNBLOCK7 9002 RIPE-ASNBLOCK7 9003 RIPE-ASNBLOCK7 9004 RIPE-ASNBLOCK7 9005 RIPE-ASNBLOCK7 9006 RIPE-ASNBLOCK7 9007 RIPE-ASNBLOCK7 9008 RIPE-ASNBLOCK7 9009 RIPE-ASNBLOCK7 9010 RIPE-ASNBLOCK7 9011 RIPE-ASNBLOCK7 9012 RIPE-ASNBLOCK7 9013 RIPE-ASNBLOCK7 9014 RIPE-ASNBLOCK7 9015 RIPE-ASNBLOCK7 9016 RIPE-ASNBLOCK7 9017 RIPE-ASNBLOCK7 9018 RIPE-ASNBLOCK7 9019 RIPE-ASNBLOCK7 9020 RIPE-ASNBLOCK7 9021 RIPE-ASNBLOCK7 9022 RIPE-ASNBLOCK7 9023 RIPE-ASNBLOCK7 9024 RIPE-ASNBLOCK7 9025 RIPE-ASNBLOCK7 9026 RIPE-ASNBLOCK7 9027 RIPE-ASNBLOCK7 9028 RIPE-ASNBLOCK7 9029 RIPE-ASNBLOCK7 9030 RIPE-ASNBLOCK7 9031 RIPE-ASNBLOCK7 9032 RIPE-ASNBLOCK7 9033 RIPE-ASNBLOCK7 9034 RIPE-ASNBLOCK7 9035 RIPE-ASNBLOCK7 9036 RIPE-ASNBLOCK7 9037 RIPE-ASNBLOCK7 9038 RIPE-ASNBLOCK7 9039 RIPE-ASNBLOCK7 9040 RIPE-ASNBLOCK7 9041 RIPE-ASNBLOCK7 9042 RIPE-ASNBLOCK7 9043 RIPE-ASNBLOCK7 9044 RIPE-ASNBLOCK7 9045 RIPE-ASNBLOCK7 9046 RIPE-ASNBLOCK7 9047 RIPE-ASNBLOCK7 9048 RIPE-ASNBLOCK7 9049 RIPE-ASNBLOCK7 9050 RIPE-ASNBLOCK7 9051 RIPE-ASNBLOCK7 9052 RIPE-ASNBLOCK7 9053 RIPE-ASNBLOCK7 9054 RIPE-ASNBLOCK7 9055 RIPE-ASNBLOCK7 9056 RIPE-ASNBLOCK7 9057 RIPE-ASNBLOCK7 9058 RIPE-ASNBLOCK7 9059 RIPE-ASNBLOCK7 9060 RIPE-ASNBLOCK7 9061 RIPE-ASNBLOCK7 9062 RIPE-ASNBLOCK7 9063 RIPE-ASNBLOCK7 9064 RIPE-ASNBLOCK7 9065 RIPE-ASNBLOCK7 9066 RIPE-ASNBLOCK7 9067 RIPE-ASNBLOCK7 9068 RIPE-ASNBLOCK7 9069 RIPE-ASNBLOCK7 9070 RIPE-ASNBLOCK7 9071 RIPE-ASNBLOCK7 9072 RIPE-ASNBLOCK7 9073 RIPE-ASNBLOCK7 9074 RIPE-ASNBLOCK7 9075 RIPE-ASNBLOCK7 9076 RIPE-ASNBLOCK7 9077 RIPE-ASNBLOCK7 9078 RIPE-ASNBLOCK7 9079 RIPE-ASNBLOCK7 9080 RIPE-ASNBLOCK7 9081 RIPE-ASNBLOCK7 9082 RIPE-ASNBLOCK7 9083 RIPE-ASNBLOCK7 9084 RIPE-ASNBLOCK7 9085 RIPE-ASNBLOCK7 9086 RIPE-ASNBLOCK7 9087 RIPE-ASNBLOCK7 9088 RIPE-ASNBLOCK7 9089 RIPE-ASNBLOCK7 9090 RIPE-ASNBLOCK7 9091 RIPE-ASNBLOCK7 9092 RIPE-ASNBLOCK7 9093 RIPE-ASNBLOCK7 9094 RIPE-ASNBLOCK7 9095 RIPE-ASNBLOCK7 9096 RIPE-ASNBLOCK7 9097 RIPE-ASNBLOCK7 9098 RIPE-ASNBLOCK7 9099 RIPE-ASNBLOCK7 9100 RIPE-ASNBLOCK7 9101 RIPE-ASNBLOCK7 9102 RIPE-ASNBLOCK7 9103 RIPE-ASNBLOCK7 9104 RIPE-ASNBLOCK7 9105 RIPE-ASNBLOCK7 9106 RIPE-ASNBLOCK7 9107 RIPE-ASNBLOCK7 9108 RIPE-ASNBLOCK7 9109 RIPE-ASNBLOCK7 9110 RIPE-ASNBLOCK7 9111 RIPE-ASNBLOCK7 9112 RIPE-ASNBLOCK7 9113 RIPE-ASNBLOCK7 9114 RIPE-ASNBLOCK7 9115 RIPE-ASNBLOCK7 9116 RIPE-ASNBLOCK7 9117 RIPE-ASNBLOCK7 9118 RIPE-ASNBLOCK7 9119 RIPE-ASNBLOCK7 9120 RIPE-ASNBLOCK7 9121 RIPE-ASNBLOCK7 9122 RIPE-ASNBLOCK7 9123 RIPE-ASNBLOCK7 9124 RIPE-ASNBLOCK7 9125 RIPE-ASNBLOCK7 9126 RIPE-ASNBLOCK7 9127 RIPE-ASNBLOCK7 9128 RIPE-ASNBLOCK7 9129 RIPE-ASNBLOCK7 9130 RIPE-ASNBLOCK7 9131 RIPE-ASNBLOCK7 9132 RIPE-ASNBLOCK7 9133 RIPE-ASNBLOCK7 9134 RIPE-ASNBLOCK7 9135 RIPE-ASNBLOCK7 9136 RIPE-ASNBLOCK7 9137 RIPE-ASNBLOCK7 9138 RIPE-ASNBLOCK7 9139 RIPE-ASNBLOCK7 9140 RIPE-ASNBLOCK7 9141 RIPE-ASNBLOCK7 9142 RIPE-ASNBLOCK7 9143 RIPE-ASNBLOCK7 9144 RIPE-ASNBLOCK7 9145 RIPE-ASNBLOCK7 9146 RIPE-ASNBLOCK7 9147 RIPE-ASNBLOCK7 9148 RIPE-ASNBLOCK7 9149 RIPE-ASNBLOCK7 9150 RIPE-ASNBLOCK7 9151 RIPE-ASNBLOCK7 9152 RIPE-ASNBLOCK7 9153 RIPE-ASNBLOCK7 9154 RIPE-ASNBLOCK7 9155 RIPE-ASNBLOCK7 9156 RIPE-ASNBLOCK7 9157 RIPE-ASNBLOCK7 9158 RIPE-ASNBLOCK7 9159 RIPE-ASNBLOCK7 9160 RIPE-ASNBLOCK7 9161 RIPE-ASNBLOCK7 9162 RIPE-ASNBLOCK7 9163 RIPE-ASNBLOCK7 9164 RIPE-ASNBLOCK7 9165 RIPE-ASNBLOCK7 9166 RIPE-ASNBLOCK7 9167 RIPE-ASNBLOCK7 9168 RIPE-ASNBLOCK7 9169 RIPE-ASNBLOCK7 9170 RIPE-ASNBLOCK7 9171 RIPE-ASNBLOCK7 9172 RIPE-ASNBLOCK7 9173 RIPE-ASNBLOCK7 9174 RIPE-ASNBLOCK7 9175 RIPE-ASNBLOCK7 9176 RIPE-ASNBLOCK7 9177 RIPE-ASNBLOCK7 9178 RIPE-ASNBLOCK7 9179 RIPE-ASNBLOCK7 9180 RIPE-ASNBLOCK7 9181 RIPE-ASNBLOCK7 9182 RIPE-ASNBLOCK7 9183 RIPE-ASNBLOCK7 9184 RIPE-ASNBLOCK7 9185 RIPE-ASNBLOCK7 9186 RIPE-ASNBLOCK7 9187 RIPE-ASNBLOCK7 9188 RIPE-ASNBLOCK7 9189 RIPE-ASNBLOCK7 9190 RIPE-ASNBLOCK7 9191 RIPE-ASNBLOCK7 9192 RIPE-ASNBLOCK7 9193 RIPE-ASNBLOCK7 9194 RIPE-ASNBLOCK7 9195 RIPE-ASNBLOCK7 9196 RIPE-ASNBLOCK7 9197 RIPE-ASNBLOCK7 9198 RIPE-ASNBLOCK7 9199 RIPE-ASNBLOCK7 9200 RIPE-ASNBLOCK7 9201 RIPE-ASNBLOCK7 9202 RIPE-ASNBLOCK7 9203 RIPE-ASNBLOCK7 9204 RIPE-ASNBLOCK7 9205 RIPE-ASNBLOCK7 9206 RIPE-ASNBLOCK7 9207 RIPE-ASNBLOCK7 9208 RIPE-ASNBLOCK7 9209 RIPE-ASNBLOCK7 9210 RIPE-ASNBLOCK7 9211 RIPE-ASNBLOCK7 9212 RIPE-ASNBLOCK7 9213 RIPE-ASNBLOCK7 9214 RIPE-ASNBLOCK7 9215 RIPE-ASNBLOCK7 9216 APNIC-AS-3-BLOCK 9217 APNIC-AS-3-BLOCK 9218 APNIC-AS-3-BLOCK 9219 APNIC-AS-3-BLOCK 9220 APNIC-AS-3-BLOCK 9221 APNIC-AS-3-BLOCK 9222 APNIC-AS-3-BLOCK 9223 APNIC-AS-3-BLOCK 9224 APNIC-AS-3-BLOCK 9225 APNIC-AS-3-BLOCK 9226 APNIC-AS-3-BLOCK 9227 APNIC-AS-3-BLOCK 9228 APNIC-AS-3-BLOCK 9229 APNIC-AS-3-BLOCK 9230 APNIC-AS-3-BLOCK 9231 APNIC-AS-3-BLOCK 9232 APNIC-AS-3-BLOCK 9233 APNIC-AS-3-BLOCK 9234 APNIC-AS-3-BLOCK 9235 APNIC-AS-3-BLOCK 9236 APNIC-AS-3-BLOCK 9237 APNIC-AS-3-BLOCK 9238 APNIC-AS-3-BLOCK 9239 APNIC-AS-3-BLOCK 9240 APNIC-AS-3-BLOCK 9241 APNIC-AS-3-BLOCK 9242 APNIC-AS-3-BLOCK 9243 APNIC-AS-3-BLOCK 9244 APNIC-AS-3-BLOCK 9245 APNIC-AS-3-BLOCK 9246 APNIC-AS-3-BLOCK 9247 APNIC-AS-3-BLOCK 9248 APNIC-AS-3-BLOCK 9249 APNIC-AS-3-BLOCK 9250 APNIC-AS-3-BLOCK 9251 APNIC-AS-3-BLOCK 9252 APNIC-AS-3-BLOCK 9253 APNIC-AS-3-BLOCK 9254 APNIC-AS-3-BLOCK 9255 APNIC-AS-3-BLOCK 9256 APNIC-AS-3-BLOCK 9257 APNIC-AS-3-BLOCK 9258 APNIC-AS-3-BLOCK 9259 APNIC-AS-3-BLOCK 9260 APNIC-AS-3-BLOCK 9261 APNIC-AS-3-BLOCK 9262 APNIC-AS-3-BLOCK 9263 APNIC-AS-3-BLOCK 9264 APNIC-AS-3-BLOCK 9265 APNIC-AS-3-BLOCK 9266 APNIC-AS-3-BLOCK 9267 APNIC-AS-3-BLOCK 9268 APNIC-AS-3-BLOCK 9269 APNIC-AS-3-BLOCK 9270 APNIC-AS-3-BLOCK 9271 APNIC-AS-3-BLOCK 9272 APNIC-AS-3-BLOCK 9273 APNIC-AS-3-BLOCK 9274 APNIC-AS-3-BLOCK 9275 APNIC-AS-3-BLOCK 9276 APNIC-AS-3-BLOCK 9277 APNIC-AS-3-BLOCK 9278 APNIC-AS-3-BLOCK 9279 APNIC-AS-3-BLOCK 9280 APNIC-AS-3-BLOCK 9281 APNIC-AS-3-BLOCK 9282 APNIC-AS-3-BLOCK 9283 APNIC-AS-3-BLOCK 9284 APNIC-AS-3-BLOCK 9285 APNIC-AS-3-BLOCK 9286 APNIC-AS-3-BLOCK 9287 APNIC-AS-3-BLOCK 9288 APNIC-AS-3-BLOCK 9289 APNIC-AS-3-BLOCK 9290 APNIC-AS-3-BLOCK 9291 APNIC-AS-3-BLOCK 9292 APNIC-AS-3-BLOCK 9293 APNIC-AS-3-BLOCK 9294 APNIC-AS-3-BLOCK 9295 APNIC-AS-3-BLOCK 9296 APNIC-AS-3-BLOCK 9297 APNIC-AS-3-BLOCK 9298 APNIC-AS-3-BLOCK 9299 APNIC-AS-3-BLOCK 9300 APNIC-AS-3-BLOCK 9301 APNIC-AS-3-BLOCK 9302 APNIC-AS-3-BLOCK 9303 APNIC-AS-3-BLOCK 9304 APNIC-AS-3-BLOCK 9305 APNIC-AS-3-BLOCK 9306 APNIC-AS-3-BLOCK 9307 APNIC-AS-3-BLOCK 9308 APNIC-AS-3-BLOCK 9309 APNIC-AS-3-BLOCK 9310 APNIC-AS-3-BLOCK 9311 APNIC-AS-3-BLOCK 9312 APNIC-AS-3-BLOCK 9313 APNIC-AS-3-BLOCK 9314 APNIC-AS-3-BLOCK 9315 APNIC-AS-3-BLOCK 9316 APNIC-AS-3-BLOCK 9317 APNIC-AS-3-BLOCK 9318 APNIC-AS-3-BLOCK 9319 APNIC-AS-3-BLOCK 9320 APNIC-AS-3-BLOCK 9321 APNIC-AS-3-BLOCK 9322 APNIC-AS-3-BLOCK 9323 APNIC-AS-3-BLOCK 9324 APNIC-AS-3-BLOCK 9325 APNIC-AS-3-BLOCK 9326 APNIC-AS-3-BLOCK 9327 APNIC-AS-3-BLOCK 9328 APNIC-AS-3-BLOCK 9329 APNIC-AS-3-BLOCK 9330 APNIC-AS-3-BLOCK 9331 APNIC-AS-3-BLOCK 9332 APNIC-AS-3-BLOCK 9333 APNIC-AS-3-BLOCK 9334 APNIC-AS-3-BLOCK 9335 APNIC-AS-3-BLOCK 9336 APNIC-AS-3-BLOCK 9337 APNIC-AS-3-BLOCK 9338 APNIC-AS-3-BLOCK 9339 APNIC-AS-3-BLOCK 9340 APNIC-AS-3-BLOCK 9341 APNIC-AS-3-BLOCK 9342 APNIC-AS-3-BLOCK 9343 APNIC-AS-3-BLOCK 9344 APNIC-AS-3-BLOCK 9345 APNIC-AS-3-BLOCK 9346 APNIC-AS-3-BLOCK 9347 APNIC-AS-3-BLOCK 9348 APNIC-AS-3-BLOCK 9349 APNIC-AS-3-BLOCK 9350 APNIC-AS-3-BLOCK 9351 APNIC-AS-3-BLOCK 9352 APNIC-AS-3-BLOCK 9353 APNIC-AS-3-BLOCK 9354 APNIC-AS-3-BLOCK 9355 APNIC-AS-3-BLOCK 9356 APNIC-AS-3-BLOCK 9357 APNIC-AS-3-BLOCK 9358 APNIC-AS-3-BLOCK 9359 APNIC-AS-3-BLOCK 9360 APNIC-AS-3-BLOCK 9361 APNIC-AS-3-BLOCK 9362 APNIC-AS-3-BLOCK 9363 APNIC-AS-3-BLOCK 9364 APNIC-AS-3-BLOCK 9365 APNIC-AS-3-BLOCK 9366 APNIC-AS-3-BLOCK 9367 APNIC-AS-3-BLOCK 9368 APNIC-AS-3-BLOCK 9369 APNIC-AS-3-BLOCK 9370 APNIC-AS-3-BLOCK 9371 APNIC-AS-3-BLOCK 9372 APNIC-AS-3-BLOCK 9373 APNIC-AS-3-BLOCK 9374 APNIC-AS-3-BLOCK 9375 APNIC-AS-3-BLOCK 9376 APNIC-AS-3-BLOCK 9377 APNIC-AS-3-BLOCK 9378 APNIC-AS-3-BLOCK 9379 APNIC-AS-3-BLOCK 9380 APNIC-AS-3-BLOCK 9381 APNIC-AS-3-BLOCK 9382 APNIC-AS-3-BLOCK 9383 APNIC-AS-3-BLOCK 9384 APNIC-AS-3-BLOCK 9385 APNIC-AS-3-BLOCK 9386 APNIC-AS-3-BLOCK 9387 APNIC-AS-3-BLOCK 9388 APNIC-AS-3-BLOCK 9389 APNIC-AS-3-BLOCK 9390 APNIC-AS-3-BLOCK 9391 APNIC-AS-3-BLOCK 9392 APNIC-AS-3-BLOCK 9393 APNIC-AS-3-BLOCK 9394 APNIC-AS-3-BLOCK 9395 APNIC-AS-3-BLOCK 9396 APNIC-AS-3-BLOCK 9397 APNIC-AS-3-BLOCK 9398 APNIC-AS-3-BLOCK 9399 APNIC-AS-3-BLOCK 9400 APNIC-AS-3-BLOCK 9401 APNIC-AS-3-BLOCK 9402 APNIC-AS-3-BLOCK 9403 APNIC-AS-3-BLOCK 9404 APNIC-AS-3-BLOCK 9405 APNIC-AS-3-BLOCK 9406 APNIC-AS-3-BLOCK 9407 APNIC-AS-3-BLOCK 9408 APNIC-AS-3-BLOCK 9409 APNIC-AS-3-BLOCK 9410 APNIC-AS-3-BLOCK 9411 APNIC-AS-3-BLOCK 9412 APNIC-AS-3-BLOCK 9413 APNIC-AS-3-BLOCK 9414 APNIC-AS-3-BLOCK 9415 APNIC-AS-3-BLOCK 9416 APNIC-AS-3-BLOCK 9417 APNIC-AS-3-BLOCK 9418 APNIC-AS-3-BLOCK 9419 APNIC-AS-3-BLOCK 9420 APNIC-AS-3-BLOCK 9421 APNIC-AS-3-BLOCK 9422 APNIC-AS-3-BLOCK 9423 APNIC-AS-3-BLOCK 9424 APNIC-AS-3-BLOCK 9425 APNIC-AS-3-BLOCK 9426 APNIC-AS-3-BLOCK 9427 APNIC-AS-3-BLOCK 9428 APNIC-AS-3-BLOCK 9429 APNIC-AS-3-BLOCK 9430 APNIC-AS-3-BLOCK 9431 APNIC-AS-3-BLOCK 9432 APNIC-AS-3-BLOCK 9433 APNIC-AS-3-BLOCK 9434 APNIC-AS-3-BLOCK 9435 APNIC-AS-3-BLOCK 9436 APNIC-AS-3-BLOCK 9437 APNIC-AS-3-BLOCK 9438 APNIC-AS-3-BLOCK 9439 APNIC-AS-3-BLOCK 9440 APNIC-AS-3-BLOCK 9441 APNIC-AS-3-BLOCK 9442 APNIC-AS-3-BLOCK 9443 APNIC-AS-3-BLOCK 9444 APNIC-AS-3-BLOCK 9445 APNIC-AS-3-BLOCK 9446 APNIC-AS-3-BLOCK 9447 APNIC-AS-3-BLOCK 9448 APNIC-AS-3-BLOCK 9449 APNIC-AS-3-BLOCK 9450 APNIC-AS-3-BLOCK 9451 APNIC-AS-3-BLOCK 9452 APNIC-AS-3-BLOCK 9453 APNIC-AS-3-BLOCK 9454 APNIC-AS-3-BLOCK 9455 APNIC-AS-3-BLOCK 9456 APNIC-AS-3-BLOCK 9457 APNIC-AS-3-BLOCK 9458 APNIC-AS-3-BLOCK 9459 APNIC-AS-3-BLOCK 9460 APNIC-AS-3-BLOCK 9461 APNIC-AS-3-BLOCK 9462 APNIC-AS-3-BLOCK 9463 APNIC-AS-3-BLOCK 9464 APNIC-AS-3-BLOCK 9465 APNIC-AS-3-BLOCK 9466 APNIC-AS-3-BLOCK 9467 APNIC-AS-3-BLOCK 9468 APNIC-AS-3-BLOCK 9469 APNIC-AS-3-BLOCK 9470 APNIC-AS-3-BLOCK 9471 APNIC-AS-3-BLOCK 9472 APNIC-AS-3-BLOCK 9473 APNIC-AS-3-BLOCK 9474 APNIC-AS-3-BLOCK 9475 APNIC-AS-3-BLOCK 9476 APNIC-AS-3-BLOCK 9477 APNIC-AS-3-BLOCK 9478 APNIC-AS-3-BLOCK 9479 APNIC-AS-3-BLOCK 9480 APNIC-AS-3-BLOCK 9481 APNIC-AS-3-BLOCK 9482 APNIC-AS-3-BLOCK 9483 APNIC-AS-3-BLOCK 9484 APNIC-AS-3-BLOCK 9485 APNIC-AS-3-BLOCK 9486 APNIC-AS-3-BLOCK 9487 APNIC-AS-3-BLOCK 9488 APNIC-AS-3-BLOCK 9489 APNIC-AS-3-BLOCK 9490 APNIC-AS-3-BLOCK 9491 APNIC-AS-3-BLOCK 9492 APNIC-AS-3-BLOCK 9493 APNIC-AS-3-BLOCK 9494 APNIC-AS-3-BLOCK 9495 APNIC-AS-3-BLOCK 9496 APNIC-AS-3-BLOCK 9497 APNIC-AS-3-BLOCK 9498 APNIC-AS-3-BLOCK 9499 APNIC-AS-3-BLOCK 9500 APNIC-AS-3-BLOCK 9501 APNIC-AS-3-BLOCK 9502 APNIC-AS-3-BLOCK 9503 APNIC-AS-3-BLOCK 9504 APNIC-AS-3-BLOCK 9505 APNIC-AS-3-BLOCK 9506 APNIC-AS-3-BLOCK 9507 APNIC-AS-3-BLOCK 9508 APNIC-AS-3-BLOCK 9509 APNIC-AS-3-BLOCK 9510 APNIC-AS-3-BLOCK 9511 APNIC-AS-3-BLOCK 9512 APNIC-AS-3-BLOCK 9513 APNIC-AS-3-BLOCK 9514 APNIC-AS-3-BLOCK 9515 APNIC-AS-3-BLOCK 9516 APNIC-AS-3-BLOCK 9517 APNIC-AS-3-BLOCK 9518 APNIC-AS-3-BLOCK 9519 APNIC-AS-3-BLOCK 9520 APNIC-AS-3-BLOCK 9521 APNIC-AS-3-BLOCK 9522 APNIC-AS-3-BLOCK 9523 APNIC-AS-3-BLOCK 9524 APNIC-AS-3-BLOCK 9525 APNIC-AS-3-BLOCK 9526 APNIC-AS-3-BLOCK 9527 APNIC-AS-3-BLOCK 9528 APNIC-AS-3-BLOCK 9529 APNIC-AS-3-BLOCK 9530 APNIC-AS-3-BLOCK 9531 APNIC-AS-3-BLOCK 9532 APNIC-AS-3-BLOCK 9533 APNIC-AS-3-BLOCK 9534 APNIC-AS-3-BLOCK 9535 APNIC-AS-3-BLOCK 9536 APNIC-AS-3-BLOCK 9537 APNIC-AS-3-BLOCK 9538 APNIC-AS-3-BLOCK 9539 APNIC-AS-3-BLOCK 9540 APNIC-AS-3-BLOCK 9541 APNIC-AS-3-BLOCK 9542 APNIC-AS-3-BLOCK 9543 APNIC-AS-3-BLOCK 9544 APNIC-AS-3-BLOCK 9545 APNIC-AS-3-BLOCK 9546 APNIC-AS-3-BLOCK 9547 APNIC-AS-3-BLOCK 9548 APNIC-AS-3-BLOCK 9549 APNIC-AS-3-BLOCK 9550 APNIC-AS-3-BLOCK 9551 APNIC-AS-3-BLOCK 9552 APNIC-AS-3-BLOCK 9553 APNIC-AS-3-BLOCK 9554 APNIC-AS-3-BLOCK 9555 APNIC-AS-3-BLOCK 9556 APNIC-AS-3-BLOCK 9557 APNIC-AS-3-BLOCK 9558 APNIC-AS-3-BLOCK 9559 APNIC-AS-3-BLOCK 9560 APNIC-AS-3-BLOCK 9561 APNIC-AS-3-BLOCK 9562 APNIC-AS-3-BLOCK 9563 APNIC-AS-3-BLOCK 9564 APNIC-AS-3-BLOCK 9565 APNIC-AS-3-BLOCK 9566 APNIC-AS-3-BLOCK 9567 APNIC-AS-3-BLOCK 9568 APNIC-AS-3-BLOCK 9569 APNIC-AS-3-BLOCK 9570 APNIC-AS-3-BLOCK 9571 APNIC-AS-3-BLOCK 9572 APNIC-AS-3-BLOCK 9573 APNIC-AS-3-BLOCK 9574 APNIC-AS-3-BLOCK 9575 APNIC-AS-3-BLOCK 9576 APNIC-AS-3-BLOCK 9577 APNIC-AS-3-BLOCK 9578 APNIC-AS-3-BLOCK 9579 APNIC-AS-3-BLOCK 9580 APNIC-AS-3-BLOCK 9581 APNIC-AS-3-BLOCK 9582 APNIC-AS-3-BLOCK 9583 APNIC-AS-3-BLOCK 9584 APNIC-AS-3-BLOCK 9585 APNIC-AS-3-BLOCK 9586 APNIC-AS-3-BLOCK 9587 APNIC-AS-3-BLOCK 9588 APNIC-AS-3-BLOCK 9589 APNIC-AS-3-BLOCK 9590 APNIC-AS-3-BLOCK 9591 APNIC-AS-3-BLOCK 9592 APNIC-AS-3-BLOCK 9593 APNIC-AS-3-BLOCK 9594 APNIC-AS-3-BLOCK 9595 APNIC-AS-3-BLOCK 9596 APNIC-AS-3-BLOCK 9597 APNIC-AS-3-BLOCK 9598 APNIC-AS-3-BLOCK 9599 APNIC-AS-3-BLOCK 9600 APNIC-AS-3-BLOCK 9601 APNIC-AS-3-BLOCK 9602 APNIC-AS-3-BLOCK 9603 APNIC-AS-3-BLOCK 9604 APNIC-AS-3-BLOCK 9605 APNIC-AS-3-BLOCK 9606 APNIC-AS-3-BLOCK 9607 APNIC-AS-3-BLOCK 9608 APNIC-AS-3-BLOCK 9609 APNIC-AS-3-BLOCK 9610 APNIC-AS-3-BLOCK 9611 APNIC-AS-3-BLOCK 9612 APNIC-AS-3-BLOCK 9613 APNIC-AS-3-BLOCK 9614 APNIC-AS-3-BLOCK 9615 APNIC-AS-3-BLOCK 9616 APNIC-AS-3-BLOCK 9617 APNIC-AS-3-BLOCK 9618 APNIC-AS-3-BLOCK 9619 APNIC-AS-3-BLOCK 9620 APNIC-AS-3-BLOCK 9621 APNIC-AS-3-BLOCK 9622 APNIC-AS-3-BLOCK 9623 APNIC-AS-3-BLOCK 9624 APNIC-AS-3-BLOCK 9625 APNIC-AS-3-BLOCK 9626 APNIC-AS-3-BLOCK 9627 APNIC-AS-3-BLOCK 9628 APNIC-AS-3-BLOCK 9629 APNIC-AS-3-BLOCK 9630 APNIC-AS-3-BLOCK 9631 APNIC-AS-3-BLOCK 9632 APNIC-AS-3-BLOCK 9633 APNIC-AS-3-BLOCK 9634 APNIC-AS-3-BLOCK 9635 APNIC-AS-3-BLOCK 9636 APNIC-AS-3-BLOCK 9637 APNIC-AS-3-BLOCK 9638 APNIC-AS-3-BLOCK 9639 APNIC-AS-3-BLOCK 9640 APNIC-AS-3-BLOCK 9641 APNIC-AS-3-BLOCK 9642 APNIC-AS-3-BLOCK 9643 APNIC-AS-3-BLOCK 9644 APNIC-AS-3-BLOCK 9645 APNIC-AS-3-BLOCK 9646 APNIC-AS-3-BLOCK 9647 APNIC-AS-3-BLOCK 9648 APNIC-AS-3-BLOCK 9649 APNIC-AS-3-BLOCK 9650 APNIC-AS-3-BLOCK 9651 APNIC-AS-3-BLOCK 9652 APNIC-AS-3-BLOCK 9653 APNIC-AS-3-BLOCK 9654 APNIC-AS-3-BLOCK 9655 APNIC-AS-3-BLOCK 9656 APNIC-AS-3-BLOCK 9657 APNIC-AS-3-BLOCK 9658 APNIC-AS-3-BLOCK 9659 APNIC-AS-3-BLOCK 9660 APNIC-AS-3-BLOCK 9661 APNIC-AS-3-BLOCK 9662 APNIC-AS-3-BLOCK 9663 APNIC-AS-3-BLOCK 9664 APNIC-AS-3-BLOCK 9665 APNIC-AS-3-BLOCK 9666 APNIC-AS-3-BLOCK 9667 APNIC-AS-3-BLOCK 9668 APNIC-AS-3-BLOCK 9669 APNIC-AS-3-BLOCK 9670 APNIC-AS-3-BLOCK 9671 APNIC-AS-3-BLOCK 9672 APNIC-AS-3-BLOCK 9673 APNIC-AS-3-BLOCK 9674 APNIC-AS-3-BLOCK 9675 APNIC-AS-3-BLOCK 9676 APNIC-AS-3-BLOCK 9677 APNIC-AS-3-BLOCK 9678 APNIC-AS-3-BLOCK 9679 APNIC-AS-3-BLOCK 9680 APNIC-AS-3-BLOCK 9681 APNIC-AS-3-BLOCK 9682 APNIC-AS-3-BLOCK 9683 APNIC-AS-3-BLOCK 9684 APNIC-AS-3-BLOCK 9685 APNIC-AS-3-BLOCK 9686 APNIC-AS-3-BLOCK 9687 APNIC-AS-3-BLOCK 9688 APNIC-AS-3-BLOCK 9689 APNIC-AS-3-BLOCK 9690 APNIC-AS-3-BLOCK 9691 APNIC-AS-3-BLOCK 9692 APNIC-AS-3-BLOCK 9693 APNIC-AS-3-BLOCK 9694 APNIC-AS-3-BLOCK 9695 APNIC-AS-3-BLOCK 9696 APNIC-AS-3-BLOCK 9697 APNIC-AS-3-BLOCK 9698 APNIC-AS-3-BLOCK 9699 APNIC-AS-3-BLOCK 9700 APNIC-AS-3-BLOCK 9701 APNIC-AS-3-BLOCK 9702 APNIC-AS-3-BLOCK 9703 APNIC-AS-3-BLOCK 9704 APNIC-AS-3-BLOCK 9705 APNIC-AS-3-BLOCK 9706 APNIC-AS-3-BLOCK 9707 APNIC-AS-3-BLOCK 9708 APNIC-AS-3-BLOCK 9709 APNIC-AS-3-BLOCK 9710 APNIC-AS-3-BLOCK 9711 APNIC-AS-3-BLOCK 9712 APNIC-AS-3-BLOCK 9713 APNIC-AS-3-BLOCK 9714 APNIC-AS-3-BLOCK 9715 APNIC-AS-3-BLOCK 9716 APNIC-AS-3-BLOCK 9717 APNIC-AS-3-BLOCK 9718 APNIC-AS-3-BLOCK 9719 APNIC-AS-3-BLOCK 9720 APNIC-AS-3-BLOCK 9721 APNIC-AS-3-BLOCK 9722 APNIC-AS-3-BLOCK 9723 APNIC-AS-3-BLOCK 9724 APNIC-AS-3-BLOCK 9725 APNIC-AS-3-BLOCK 9726 APNIC-AS-3-BLOCK 9727 APNIC-AS-3-BLOCK 9728 APNIC-AS-3-BLOCK 9729 APNIC-AS-3-BLOCK 9730 APNIC-AS-3-BLOCK 9731 APNIC-AS-3-BLOCK 9732 APNIC-AS-3-BLOCK 9733 APNIC-AS-3-BLOCK 9734 APNIC-AS-3-BLOCK 9735 APNIC-AS-3-BLOCK 9736 APNIC-AS-3-BLOCK 9737 APNIC-AS-3-BLOCK 9738 APNIC-AS-3-BLOCK 9739 APNIC-AS-3-BLOCK 9740 APNIC-AS-3-BLOCK 9741 APNIC-AS-3-BLOCK 9742 APNIC-AS-3-BLOCK 9743 APNIC-AS-3-BLOCK 9744 APNIC-AS-3-BLOCK 9745 APNIC-AS-3-BLOCK 9746 APNIC-AS-3-BLOCK 9747 APNIC-AS-3-BLOCK 9748 APNIC-AS-3-BLOCK 9749 APNIC-AS-3-BLOCK 9750 APNIC-AS-3-BLOCK 9751 APNIC-AS-3-BLOCK 9752 APNIC-AS-3-BLOCK 9753 APNIC-AS-3-BLOCK 9754 APNIC-AS-3-BLOCK 9755 APNIC-AS-3-BLOCK 9756 APNIC-AS-3-BLOCK 9757 APNIC-AS-3-BLOCK 9758 APNIC-AS-3-BLOCK 9759 APNIC-AS-3-BLOCK 9760 APNIC-AS-3-BLOCK 9761 APNIC-AS-3-BLOCK 9762 APNIC-AS-3-BLOCK 9763 APNIC-AS-3-BLOCK 9764 APNIC-AS-3-BLOCK 9765 APNIC-AS-3-BLOCK 9766 APNIC-AS-3-BLOCK 9767 APNIC-AS-3-BLOCK 9768 APNIC-AS-3-BLOCK 9769 APNIC-AS-3-BLOCK 9770 APNIC-AS-3-BLOCK 9771 APNIC-AS-3-BLOCK 9772 APNIC-AS-3-BLOCK 9773 APNIC-AS-3-BLOCK 9774 APNIC-AS-3-BLOCK 9775 APNIC-AS-3-BLOCK 9776 APNIC-AS-3-BLOCK 9777 APNIC-AS-3-BLOCK 9778 APNIC-AS-3-BLOCK 9779 APNIC-AS-3-BLOCK 9780 APNIC-AS-3-BLOCK 9781 APNIC-AS-3-BLOCK 9782 APNIC-AS-3-BLOCK 9783 APNIC-AS-3-BLOCK 9784 APNIC-AS-3-BLOCK 9785 APNIC-AS-3-BLOCK 9786 APNIC-AS-3-BLOCK 9787 APNIC-AS-3-BLOCK 9788 APNIC-AS-3-BLOCK 9789 APNIC-AS-3-BLOCK 9790 APNIC-AS-3-BLOCK 9791 APNIC-AS-3-BLOCK 9792 APNIC-AS-3-BLOCK 9793 APNIC-AS-3-BLOCK 9794 APNIC-AS-3-BLOCK 9795 APNIC-AS-3-BLOCK 9796 APNIC-AS-3-BLOCK 9797 APNIC-AS-3-BLOCK 9798 APNIC-AS-3-BLOCK 9799 APNIC-AS-3-BLOCK 9800 APNIC-AS-3-BLOCK 9801 APNIC-AS-3-BLOCK 9802 APNIC-AS-3-BLOCK 9803 APNIC-AS-3-BLOCK 9804 APNIC-AS-3-BLOCK 9805 APNIC-AS-3-BLOCK 9806 APNIC-AS-3-BLOCK 9807 APNIC-AS-3-BLOCK 9808 APNIC-AS-3-BLOCK 9809 APNIC-AS-3-BLOCK 9810 APNIC-AS-3-BLOCK 9811 APNIC-AS-3-BLOCK 9812 APNIC-AS-3-BLOCK 9813 APNIC-AS-3-BLOCK 9814 APNIC-AS-3-BLOCK 9815 APNIC-AS-3-BLOCK 9816 APNIC-AS-3-BLOCK 9817 APNIC-AS-3-BLOCK 9818 APNIC-AS-3-BLOCK 9819 APNIC-AS-3-BLOCK 9820 APNIC-AS-3-BLOCK 9821 APNIC-AS-3-BLOCK 9822 APNIC-AS-3-BLOCK 9823 APNIC-AS-3-BLOCK 9824 APNIC-AS-3-BLOCK 9825 APNIC-AS-3-BLOCK 9826 APNIC-AS-3-BLOCK 9827 APNIC-AS-3-BLOCK 9828 APNIC-AS-3-BLOCK 9829 APNIC-AS-3-BLOCK 9830 APNIC-AS-3-BLOCK 9831 APNIC-AS-3-BLOCK 9832 APNIC-AS-3-BLOCK 9833 APNIC-AS-3-BLOCK 9834 APNIC-AS-3-BLOCK 9835 APNIC-AS-3-BLOCK 9836 APNIC-AS-3-BLOCK 9837 APNIC-AS-3-BLOCK 9838 APNIC-AS-3-BLOCK 9839 APNIC-AS-3-BLOCK 9840 APNIC-AS-3-BLOCK 9841 APNIC-AS-3-BLOCK 9842 APNIC-AS-3-BLOCK 9843 APNIC-AS-3-BLOCK 9844 APNIC-AS-3-BLOCK 9845 APNIC-AS-3-BLOCK 9846 APNIC-AS-3-BLOCK 9847 APNIC-AS-3-BLOCK 9848 APNIC-AS-3-BLOCK 9849 APNIC-AS-3-BLOCK 9850 APNIC-AS-3-BLOCK 9851 APNIC-AS-3-BLOCK 9852 APNIC-AS-3-BLOCK 9853 APNIC-AS-3-BLOCK 9854 APNIC-AS-3-BLOCK 9855 APNIC-AS-3-BLOCK 9856 APNIC-AS-3-BLOCK 9857 APNIC-AS-3-BLOCK 9858 APNIC-AS-3-BLOCK 9859 APNIC-AS-3-BLOCK 9860 APNIC-AS-3-BLOCK 9861 APNIC-AS-3-BLOCK 9862 APNIC-AS-3-BLOCK 9863 APNIC-AS-3-BLOCK 9864 APNIC-AS-3-BLOCK 9865 APNIC-AS-3-BLOCK 9866 APNIC-AS-3-BLOCK 9867 APNIC-AS-3-BLOCK 9868 APNIC-AS-3-BLOCK 9869 APNIC-AS-3-BLOCK 9870 APNIC-AS-3-BLOCK 9871 APNIC-AS-3-BLOCK 9872 APNIC-AS-3-BLOCK 9873 APNIC-AS-3-BLOCK 9874 APNIC-AS-3-BLOCK 9875 APNIC-AS-3-BLOCK 9876 APNIC-AS-3-BLOCK 9877 APNIC-AS-3-BLOCK 9878 APNIC-AS-3-BLOCK 9879 APNIC-AS-3-BLOCK 9880 APNIC-AS-3-BLOCK 9881 APNIC-AS-3-BLOCK 9882 APNIC-AS-3-BLOCK 9883 APNIC-AS-3-BLOCK 9884 APNIC-AS-3-BLOCK 9885 APNIC-AS-3-BLOCK 9886 APNIC-AS-3-BLOCK 9887 APNIC-AS-3-BLOCK 9888 APNIC-AS-3-BLOCK 9889 APNIC-AS-3-BLOCK 9890 APNIC-AS-3-BLOCK 9891 APNIC-AS-3-BLOCK 9892 APNIC-AS-3-BLOCK 9893 APNIC-AS-3-BLOCK 9894 APNIC-AS-3-BLOCK 9895 APNIC-AS-3-BLOCK 9896 APNIC-AS-3-BLOCK 9897 APNIC-AS-3-BLOCK 9898 APNIC-AS-3-BLOCK 9899 APNIC-AS-3-BLOCK 9900 APNIC-AS-3-BLOCK 9901 APNIC-AS-3-BLOCK 9902 APNIC-AS-3-BLOCK 9903 APNIC-AS-3-BLOCK 9904 APNIC-AS-3-BLOCK 9905 APNIC-AS-3-BLOCK 9906 APNIC-AS-3-BLOCK 9907 APNIC-AS-3-BLOCK 9908 APNIC-AS-3-BLOCK 9909 APNIC-AS-3-BLOCK 9910 APNIC-AS-3-BLOCK 9911 APNIC-AS-3-BLOCK 9912 APNIC-AS-3-BLOCK 9913 APNIC-AS-3-BLOCK 9914 APNIC-AS-3-BLOCK 9915 APNIC-AS-3-BLOCK 9916 APNIC-AS-3-BLOCK 9917 APNIC-AS-3-BLOCK 9918 APNIC-AS-3-BLOCK 9919 APNIC-AS-3-BLOCK 9920 APNIC-AS-3-BLOCK 9921 APNIC-AS-3-BLOCK 9922 APNIC-AS-3-BLOCK 9923 APNIC-AS-3-BLOCK 9924 APNIC-AS-3-BLOCK 9925 APNIC-AS-3-BLOCK 9926 APNIC-AS-3-BLOCK 9927 APNIC-AS-3-BLOCK 9928 APNIC-AS-3-BLOCK 9929 APNIC-AS-3-BLOCK 9930 APNIC-AS-3-BLOCK 9931 APNIC-AS-3-BLOCK 9932 APNIC-AS-3-BLOCK 9933 APNIC-AS-3-BLOCK 9934 APNIC-AS-3-BLOCK 9935 APNIC-AS-3-BLOCK 9936 APNIC-AS-3-BLOCK 9937 APNIC-AS-3-BLOCK 9938 APNIC-AS-3-BLOCK 9939 APNIC-AS-3-BLOCK 9940 APNIC-AS-3-BLOCK 9941 APNIC-AS-3-BLOCK 9942 APNIC-AS-3-BLOCK 9943 APNIC-AS-3-BLOCK 9944 APNIC-AS-3-BLOCK 9945 APNIC-AS-3-BLOCK 9946 APNIC-AS-3-BLOCK 9947 APNIC-AS-3-BLOCK 9948 APNIC-AS-3-BLOCK 9949 APNIC-AS-3-BLOCK 9950 APNIC-AS-3-BLOCK 9951 APNIC-AS-3-BLOCK 9952 APNIC-AS-3-BLOCK 9953 APNIC-AS-3-BLOCK 9954 APNIC-AS-3-BLOCK 9955 APNIC-AS-3-BLOCK 9956 APNIC-AS-3-BLOCK 9957 APNIC-AS-3-BLOCK 9958 APNIC-AS-3-BLOCK 9959 APNIC-AS-3-BLOCK 9960 APNIC-AS-3-BLOCK 9961 APNIC-AS-3-BLOCK 9962 APNIC-AS-3-BLOCK 9963 APNIC-AS-3-BLOCK 9964 APNIC-AS-3-BLOCK 9965 APNIC-AS-3-BLOCK 9966 APNIC-AS-3-BLOCK 9967 APNIC-AS-3-BLOCK 9968 APNIC-AS-3-BLOCK 9969 APNIC-AS-3-BLOCK 9970 APNIC-AS-3-BLOCK 9971 APNIC-AS-3-BLOCK 9972 APNIC-AS-3-BLOCK 9973 APNIC-AS-3-BLOCK 9974 APNIC-AS-3-BLOCK 9975 APNIC-AS-3-BLOCK 9976 APNIC-AS-3-BLOCK 9977 APNIC-AS-3-BLOCK 9978 APNIC-AS-3-BLOCK 9979 APNIC-AS-3-BLOCK 9980 APNIC-AS-3-BLOCK 9981 APNIC-AS-3-BLOCK 9982 APNIC-AS-3-BLOCK 9983 APNIC-AS-3-BLOCK 9984 APNIC-AS-3-BLOCK 9985 APNIC-AS-3-BLOCK 9986 APNIC-AS-3-BLOCK 9987 APNIC-AS-3-BLOCK 9988 APNIC-AS-3-BLOCK 9989 APNIC-AS-3-BLOCK 9990 APNIC-AS-3-BLOCK 9991 APNIC-AS-3-BLOCK 9992 APNIC-AS-3-BLOCK 9993 APNIC-AS-3-BLOCK 9994 APNIC-AS-3-BLOCK 9995 APNIC-AS-3-BLOCK 9996 APNIC-AS-3-BLOCK 9997 APNIC-AS-3-BLOCK 9998 APNIC-AS-3-BLOCK 9999 APNIC-AS-3-BLOCK 10000 APNIC-AS-3-BLOCK 10001 APNIC-AS-3-BLOCK 10002 APNIC-AS-3-BLOCK 10003 APNIC-AS-3-BLOCK 10004 APNIC-AS-3-BLOCK 10005 APNIC-AS-3-BLOCK 10006 APNIC-AS-3-BLOCK 10007 APNIC-AS-3-BLOCK 10008 APNIC-AS-3-BLOCK 10009 APNIC-AS-3-BLOCK 10010 APNIC-AS-3-BLOCK 10011 APNIC-AS-3-BLOCK 10012 APNIC-AS-3-BLOCK 10013 APNIC-AS-3-BLOCK 10014 APNIC-AS-3-BLOCK 10015 APNIC-AS-3-BLOCK 10016 APNIC-AS-3-BLOCK 10017 APNIC-AS-3-BLOCK 10018 APNIC-AS-3-BLOCK 10019 APNIC-AS-3-BLOCK 10020 APNIC-AS-3-BLOCK 10021 APNIC-AS-3-BLOCK 10022 APNIC-AS-3-BLOCK 10023 APNIC-AS-3-BLOCK 10024 APNIC-AS-3-BLOCK 10025 APNIC-AS-3-BLOCK 10026 APNIC-AS-3-BLOCK 10027 APNIC-AS-3-BLOCK 10028 APNIC-AS-3-BLOCK 10029 APNIC-AS-3-BLOCK 10030 APNIC-AS-3-BLOCK 10031 APNIC-AS-3-BLOCK 10032 APNIC-AS-3-BLOCK 10033 APNIC-AS-3-BLOCK 10034 APNIC-AS-3-BLOCK 10035 APNIC-AS-3-BLOCK 10036 APNIC-AS-3-BLOCK 10037 APNIC-AS-3-BLOCK 10038 APNIC-AS-3-BLOCK 10039 APNIC-AS-3-BLOCK 10040 APNIC-AS-3-BLOCK 10041 APNIC-AS-3-BLOCK 10042 APNIC-AS-3-BLOCK 10043 APNIC-AS-3-BLOCK 10044 APNIC-AS-3-BLOCK 10045 APNIC-AS-3-BLOCK 10046 APNIC-AS-3-BLOCK 10047 APNIC-AS-3-BLOCK 10048 APNIC-AS-3-BLOCK 10049 APNIC-AS-3-BLOCK 10050 APNIC-AS-3-BLOCK 10051 APNIC-AS-3-BLOCK 10052 APNIC-AS-3-BLOCK 10053 APNIC-AS-3-BLOCK 10054 APNIC-AS-3-BLOCK 10055 APNIC-AS-3-BLOCK 10056 APNIC-AS-3-BLOCK 10057 APNIC-AS-3-BLOCK 10058 APNIC-AS-3-BLOCK 10059 APNIC-AS-3-BLOCK 10060 APNIC-AS-3-BLOCK 10061 APNIC-AS-3-BLOCK 10062 APNIC-AS-3-BLOCK 10063 APNIC-AS-3-BLOCK 10064 APNIC-AS-3-BLOCK 10065 APNIC-AS-3-BLOCK 10066 APNIC-AS-3-BLOCK 10067 APNIC-AS-3-BLOCK 10068 APNIC-AS-3-BLOCK 10069 APNIC-AS-3-BLOCK 10070 APNIC-AS-3-BLOCK 10071 APNIC-AS-3-BLOCK 10072 APNIC-AS-3-BLOCK 10073 APNIC-AS-3-BLOCK 10074 APNIC-AS-3-BLOCK 10075 APNIC-AS-3-BLOCK 10076 APNIC-AS-3-BLOCK 10077 APNIC-AS-3-BLOCK 10078 APNIC-AS-3-BLOCK 10079 APNIC-AS-3-BLOCK 10080 APNIC-AS-3-BLOCK 10081 APNIC-AS-3-BLOCK 10082 APNIC-AS-3-BLOCK 10083 APNIC-AS-3-BLOCK 10084 APNIC-AS-3-BLOCK 10085 APNIC-AS-3-BLOCK 10086 APNIC-AS-3-BLOCK 10087 APNIC-AS-3-BLOCK 10088 APNIC-AS-3-BLOCK 10089 APNIC-AS-3-BLOCK 10090 APNIC-AS-3-BLOCK 10091 APNIC-AS-3-BLOCK 10092 APNIC-AS-3-BLOCK 10093 APNIC-AS-3-BLOCK 10094 APNIC-AS-3-BLOCK 10095 APNIC-AS-3-BLOCK 10096 APNIC-AS-3-BLOCK 10097 APNIC-AS-3-BLOCK 10098 APNIC-AS-3-BLOCK 10099 APNIC-AS-3-BLOCK 10100 APNIC-AS-3-BLOCK 10101 APNIC-AS-3-BLOCK 10102 APNIC-AS-3-BLOCK 10103 APNIC-AS-3-BLOCK 10104 APNIC-AS-3-BLOCK 10105 APNIC-AS-3-BLOCK 10106 APNIC-AS-3-BLOCK 10107 APNIC-AS-3-BLOCK 10108 APNIC-AS-3-BLOCK 10109 APNIC-AS-3-BLOCK 10110 APNIC-AS-3-BLOCK 10111 APNIC-AS-3-BLOCK 10112 APNIC-AS-3-BLOCK 10113 APNIC-AS-3-BLOCK 10114 APNIC-AS-3-BLOCK 10115 APNIC-AS-3-BLOCK 10116 APNIC-AS-3-BLOCK 10117 APNIC-AS-3-BLOCK 10118 APNIC-AS-3-BLOCK 10119 APNIC-AS-3-BLOCK 10120 APNIC-AS-3-BLOCK 10121 APNIC-AS-3-BLOCK 10122 APNIC-AS-3-BLOCK 10123 APNIC-AS-3-BLOCK 10124 APNIC-AS-3-BLOCK 10125 APNIC-AS-3-BLOCK 10126 APNIC-AS-3-BLOCK 10127 APNIC-AS-3-BLOCK 10128 APNIC-AS-3-BLOCK 10129 APNIC-AS-3-BLOCK 10130 APNIC-AS-3-BLOCK 10131 APNIC-AS-3-BLOCK 10132 APNIC-AS-3-BLOCK 10133 APNIC-AS-3-BLOCK 10134 APNIC-AS-3-BLOCK 10135 APNIC-AS-3-BLOCK 10136 APNIC-AS-3-BLOCK 10137 APNIC-AS-3-BLOCK 10138 APNIC-AS-3-BLOCK 10139 APNIC-AS-3-BLOCK 10140 APNIC-AS-3-BLOCK 10141 APNIC-AS-3-BLOCK 10142 APNIC-AS-3-BLOCK 10143 APNIC-AS-3-BLOCK 10144 APNIC-AS-3-BLOCK 10145 APNIC-AS-3-BLOCK 10146 APNIC-AS-3-BLOCK 10147 APNIC-AS-3-BLOCK 10148 APNIC-AS-3-BLOCK 10149 APNIC-AS-3-BLOCK 10150 APNIC-AS-3-BLOCK 10151 APNIC-AS-3-BLOCK 10152 APNIC-AS-3-BLOCK 10153 APNIC-AS-3-BLOCK 10154 APNIC-AS-3-BLOCK 10155 APNIC-AS-3-BLOCK 10156 APNIC-AS-3-BLOCK 10157 APNIC-AS-3-BLOCK 10158 APNIC-AS-3-BLOCK 10159 APNIC-AS-3-BLOCK 10160 APNIC-AS-3-BLOCK 10161 APNIC-AS-3-BLOCK 10162 APNIC-AS-3-BLOCK 10163 APNIC-AS-3-BLOCK 10164 APNIC-AS-3-BLOCK 10165 APNIC-AS-3-BLOCK 10166 APNIC-AS-3-BLOCK 10167 APNIC-AS-3-BLOCK 10168 APNIC-AS-3-BLOCK 10169 APNIC-AS-3-BLOCK 10170 APNIC-AS-3-BLOCK 10171 APNIC-AS-3-BLOCK 10172 APNIC-AS-3-BLOCK 10173 APNIC-AS-3-BLOCK 10174 APNIC-AS-3-BLOCK 10175 APNIC-AS-3-BLOCK 10176 APNIC-AS-3-BLOCK 10177 APNIC-AS-3-BLOCK 10178 APNIC-AS-3-BLOCK 10179 APNIC-AS-3-BLOCK 10180 APNIC-AS-3-BLOCK 10181 APNIC-AS-3-BLOCK 10182 APNIC-AS-3-BLOCK 10183 APNIC-AS-3-BLOCK 10184 APNIC-AS-3-BLOCK 10185 APNIC-AS-3-BLOCK 10186 APNIC-AS-3-BLOCK 10187 APNIC-AS-3-BLOCK 10188 APNIC-AS-3-BLOCK 10189 APNIC-AS-3-BLOCK 10190 APNIC-AS-3-BLOCK 10191 APNIC-AS-3-BLOCK 10192 APNIC-AS-3-BLOCK 10193 APNIC-AS-3-BLOCK 10194 APNIC-AS-3-BLOCK 10195 APNIC-AS-3-BLOCK 10196 APNIC-AS-3-BLOCK 10197 APNIC-AS-3-BLOCK 10198 APNIC-AS-3-BLOCK 10199 APNIC-AS-3-BLOCK 10200 APNIC-AS-3-BLOCK 10201 APNIC-AS-3-BLOCK 10202 APNIC-AS-3-BLOCK 10203 APNIC-AS-3-BLOCK 10204 APNIC-AS-3-BLOCK 10205 APNIC-AS-3-BLOCK 10206 APNIC-AS-3-BLOCK 10207 APNIC-AS-3-BLOCK 10208 APNIC-AS-3-BLOCK 10209 APNIC-AS-3-BLOCK 10210 APNIC-AS-3-BLOCK 10211 APNIC-AS-3-BLOCK 10212 APNIC-AS-3-BLOCK 10213 APNIC-AS-3-BLOCK 10214 APNIC-AS-3-BLOCK 10215 APNIC-AS-3-BLOCK 10216 APNIC-AS-3-BLOCK 10217 APNIC-AS-3-BLOCK 10218 APNIC-AS-3-BLOCK 10219 APNIC-AS-3-BLOCK 10220 APNIC-AS-3-BLOCK 10221 APNIC-AS-3-BLOCK 10222 APNIC-AS-3-BLOCK 10223 APNIC-AS-3-BLOCK 10224 APNIC-AS-3-BLOCK 10225 APNIC-AS-3-BLOCK 10226 APNIC-AS-3-BLOCK 10227 APNIC-AS-3-BLOCK 10228 APNIC-AS-3-BLOCK 10229 APNIC-AS-3-BLOCK 10230 APNIC-AS-3-BLOCK 10231 APNIC-AS-3-BLOCK 10232 APNIC-AS-3-BLOCK 10233 APNIC-AS-3-BLOCK 10234 APNIC-AS-3-BLOCK 10235 APNIC-AS-3-BLOCK 10236 APNIC-AS-3-BLOCK 10237 APNIC-AS-3-BLOCK 10238 APNIC-AS-3-BLOCK 10239 APNIC-AS-3-BLOCK 10240 MOTLEYFOOL 10241 OCI 10242 USINTERNET 10243 HERMESNET1 10244 EDIFY 10245 INNETIX 10246 AGT 10247 NETLINE 10248 IPINC 10249 TIR-ASN 10250 INET-SOLUTIONS 10251 DIALI 10252 DOTNETUNIFIEDNETWORK 10253 IENG 10254 WATSONWYATT 10255 SINISTER 10256 AKULA 10257 TSTONRAMP 10258 SHN-AS 10259 BLUEMOON 10260 ACCESS-CHICAGO 10261 ACCESS 10262 IMPROTECH 10263 MATCHMAKER 10264 SCOTIACAPTIAL 10265 DIGIWEB-NETWORK 10266 NETWAY-AS 10267 GVI-AS 10268 ASN-USS 10269 BTL-ASN 10270 IDEX 10271 TCIX 10272 SSIS 10273 FPL 10274 EXCELNET 10275 AS-UNITEDNETWORK 10276 GATEKEY 10277 ASN-MCYE 10278 CARIBSURF 10279 OT-AS 10280 DIALIP-E-SW 10281 DIALIP-E-NE 10282 DIALIP-PR 10283 DIALIP-AMERICAS 10284 DIALIP-ASIA 10285 IMAGEBBS-RJ 10286 TIESOFT 10287 XTNNET 10288 MIN-NET 10289 WEBNETWORKS 10290 RDANET 10291 PLANETALL 10292 TOJ 10293 VENRED 10294 CCCD-AS 10295 COMPUTERDOTNET 10296 GBNETMPNNETWORK 10297 COLUMBUSNAP 10298 CACI 10299 EMCATEL 10300 NETSPEAK 10301 NEXTGEN 10302 NEGIA-NET 10303 AS-PRIORI 10304 NETCHANNEL 10305 VERINET 10306 CNETECHNET 10307 GRENTEL 10308 NEIUNET 10309 MARIN-MIDAS 10310 YAHOO-1 10311 SCRR-10311 10312 HEARTPORT 10313 PEQUOT 10314 WORLDPATH-AS 10315 EZNETWORK 10316 ABACUS-NET-AS 10317 CUCINT 10318 CV-TCI 10319 ADVANTANET 10320 ISPN-TJ 10321 MERCOMUSA 10322 ERCOT-ISO 10323 PLANET 10324 WAZOO-AS 10325 INGRAMMICRO 10326 WPI 10327 CLAND 10328 IKONUN 10329 INFOSHARE 10330 VOYAGER 10331 BANKMED 10332 BROADBAND 10333 DIGITALINSIGHT 10334 NAVISITE-EAST 10335 RELAYTECH 10336 PFN-AS 10337 IBMAS400DIV 10338 COBITE 10339 COMMTEL 10340 TELE-TECH 10341 IBC-AS 10342 INETINFOSVCS-AS 10343 NASA-AERONET-AS 10344 FOXBERRY-10344 10345 INCONNECT 10346 MIDCOAST 10347 RANDMCNALLY 10348 HTDC 10349 TULANE 10350 NETSCHOOLS 10351 COMPUAID 10352 WCTC 10353 AWODCHS 10354 GLOBETROTTER 10355 DSCGA 10356 WINDYCITY 10357 JMUNET 10358 EQUINOX 10360 SOFTWARE-ALBERTA 10361 BLOOMBERG-NET 10362 NETHALL 10363 PULITZER-TECH 10364 UAHNET 10365 WEBEXPRESS 10366 ASN-NKN1 10367 METRO2000 10368 RCN-AS10368 10369 CAMPBELLSOUP-AS 10370 NORTHWEST-AIRLINES 10371 NASA-DARWIN-AS 10372 NORWEST 10373 NORWEST 10374 NORWEST 10375 NORWEST 10376 NORWEST 10377 SOUNDCHOICE 10378 NODEWARRIOR 10379 DELUXE 10380 NETXS 10381 SWCP-AS 10382 NPTI 10383 USW-INTERACT9 10384 TVA 10385 EIGER 10386 IC-ASN 10387 CHARIOTNET 10388 NETINC 10389 BEARCLEARNET 10390 TELECHECK 10391 INTERED 10392 GLASSCITY-INTERNET 10393 MWEB 10394 ALLWAYS 10395 VUE-AS1 10396 COQUI-NET 10397 ICX-AS 10398 GBI 10399 AMAP-AUSTIN-TX-WALLER 10400 THETORONTOSTAR 10401 SFAAOA 10402 HSD2-AS 10403 DYNASTY 10404 ICN-1 10405 ASN-UP 10406 ASN-TEKTRONIX 10407 IAAVC 10408 SPECTRUME 10409 ALLEGRONET 10410 AUTO-GRAPHICS 10411 ESRI 10412 TECPAR-AS 10413 GLOBALLY 10414 QUESTLINK 10415 VSCAPEII 10416 EVCOM-ASN 10417 POP-MG 10418 TEKNOS 10419 NORTHERNLIGHT 10420 BANCO-DE-MEXICO 10421 TTUNET 10422 NETEXPLORER 10423 MIAMINAP 10424 USW-INTERACT10 10425 ASN-FIBERNAP 10426 AUTOBAHN 10427 RAMS-FIE-AS 10428 CWV-NETWORKS 10429 TELESP 10430 WA-K20 10431 BCNET-1 10432 APC-AS-2 10433 USA-NET 10434 SAT-TEL 10435 IDCOMM 10436 ITESM-RZS 10437 UKY 10438 BLUE-HWY 10439 CARI 10441 CH2M 10442 ED-GOV 10443 WOLFENET2 10444 ZIONSBANCORP 10445 HTG 10446 AMIGO-NET 10447 SKYLINKUS-AS1 10448 VILLANOVA-UNIV 10449 DISCOVER 10450 ADVANTECH 10451 WARPDRIVE 10452 ANICE 10453 CNIWEB 10454 HORIZONTES 10455 LUCENT-CIO 10456 ATT-DISCNET 10457 ILX-ASN 10458 JUNIPER-TEST-AS 10459 WANSASN 10460 SCOOP-AS 10461 TOWNSENDANALYTICSLTD 10462 SHADOW 10463 ENLARED-PLM 10464 TEAMTECH 10465 DOCKNET-1 10466 MAGPI 10467 NEWMEDIA 10468 ASLAN 10469 FIRSTNET 10470 ASN-PCORDER 10471 TECHNIMETRICS-AS 10472 CWNET 10473 COMPUSA 10474 NETACTIVE 10475 SNS 10476 SINFONET 10477 CEPHAS 10478 PTINETCORP 10479 ITESM-RZN 10480 NMNAP 10481 PRIMA 10482 VIDEONCSAI 10483 AKPERMFUND 10484 OLDE 10485 UW-STOUT 10486 FASTRANS 10487 SIMPLENET 10488 TFM-ASN 10489 FUTUREONE-AS 10490 GEORGIA-GIGA-POP 10491 DIAMONDLINK 10492 CACMEDIANET 10493 GCN-AS 10494 AAI 10495 GCSNET-AS 10496 LIVINGSTON 10497 WORLDBANK-AS 10498 IWAVE-ASN 10499 RGE 10501 PACLINK 10502 IFX-CHILE 10503 I-55 10504 DHLAIRWAYS 10505 DOCKSIDE 10506 PROSPECT 10507 SPCS 10508 ARKNET-AS 10509 IEWAY 10510 QNIKC 10512 EFOREX-AS 10513 RCN-AS7 10514 SPLITROCK 10515 CLT-NIC 10516 ORB-BIT 10517 MELLONBANK 10518 WALLNET-AS 10519 ANS97 10520 EXECULINK 10521 MARCOM 10522 BLUESTAR 10523 ROADRUNNER-003-ALBANY 10525 SIMON-SCHUSTER 10526 DRCORP 10527 PULVER 10528 INTELISYS 10529 AFSB 10530 INTERPACKET 10531 GLOBALSITE 10532 CYMITAR 10533 HYPNOVISTA 10534 GOAMERICACOMM 10535 USNETWAY 10536 INDIVIDUAL 10537 INFONLINE 10538 ARCTICNET 10539 NETMORE 10540 INFODOOR 10541 PREDICTIVE 10542 MSDNSD 10543 UPTIMEWEB 10544 DLPTECHNOLOGIES 10545 LCOL 10546 MSSTATE 10548 LCGM-AS1 10549 EMINET 10550 UTAUSTIN 10552 CATAPULTNET 10553 SILVERPLATTER-AS 10554 MIDPLAINSNET 10555 SCLI 10556 ATN-AS 10557 CNW 10558 WEBLINK 10559 WEBSTREETSECURITIES 10560 ITESM-RZC 10561 BRANDEIS 10562 AIRNET 10563 ROCHELLEUTILITIES 10564 TCSI 10565 MEER-AS 10566 VIAGENIE 10567 TNA 10568 PROXY-ASN 10569 AS-CUBA 10570 HYPNO-NTT 10571 GEOACCESS-AS 10572 RESROCKET 10573 WEBNEXUS 10574 BJKE 10575 CISP-AS 10576 CDNOW 10577 WIPC 10578 GIGAPOP-NE 10579 HIGHWAY1-AS 10580 INTURNET-ASN 10581 TM3 10582 MONDONET-USA-AS 10583 CHIME 10584 TRADEWEB 10585 NETLIMITED 10586 OSI-GUATEMALA 10587 CYBERHIGHWAY 10588 ICSNET 10589 HALNET 10590 BOOKSTACKS 10591 IONSNET 10592 NET1PLUS 10593 AOL-DTC2 10594 CEC 10595 MAUSWERKS 10596 JETNET 10597 CRUSOE-AS 10598 CIRR 10599 MCKESSON 10600 CD-GRAF-BR 10601 ELNET 10602 TDL 10603 TYPEHOUSE-GROUP 10604 KINKO 10605 SERVICE-NET 10606 TALNET 10607 GCIC 10608 ENS-INTERWEB 10609 TELEVAR 10610 APA 10611 REOHR 10612 NORTHCOAST-INTERNET 10613 MAUINET 10614 OLYWA 10615 PAINEWEBBER-ASN 10616 NTIS 10617 SION 10618 NBNET 10619 PUBLICONLINE 10620 CABLENET-AS 10621 FIRSTNETHOU 10622 NIEHS 10623 ANNAPOLIS-INTERNET 10624 NETPOINT-DE-VENEZUELA 10625 SPCOMSTOCK 10626 INTRANET-INC 10627 CRITICALPATH 10628 LVDI-NET 10629 INTERPAC 10630 PROVER 10631 GEORGIA-STATE 10632 PSE-AS 10633 PINNACLESYS 10634 CORNERSTONE 10635 THE-BASTILLE 10636 ACADEMY-D20 10637 TROYSAT 10638 KANA 10639 ALPHABLOX 10640 DATANETSA 10641 TICKETMASTER-AS 10642 POWERNET 10643 SUBURBCABLE 10644 ALLIEDSIGNAL-AA 10645 APPLIEDINNOVATIONS 10646 TVCN-AS 10647 NACM 10648 PACIFICBROK 10649 TELEPAR-NET 10650 EXTREME-AS 10651 INCC 10652 NETSIDE 10653 MVANET 10654 CONXNETASN0 10655 BUREAU-NAT-AFF 10656 ECOL 10657 GIANTSTEP 10658 GEEKLAB 10659 SEQUENT-CS2 10660 SYSNET-AS 10661 AUGLINK 10662 NORFOLK-SOUTHERN 10663 DISCOVERNET-ASN1 10664 ISD 10665 SKYNET 10666 ALLERGAN 10667 FSIWEBS-NET1-AS 10668 LEE-ASN 10669 JOBTRAK-AS 10670 PRODEMGE-AS 10671 CONAE 10672 REDSTORM 10673 AFFINI 10674 GRUCOM 10675 VIET-MY 10676 GLOBALEC 10677 OMNCS 10678 TRENDS-NET 10679 INET-SVCS-AS 10680 IUPUI 10681 AOL-DTC1 10682 VISION21ASN 10683 CRUZIO 10684 EMPIRENET 10685 SSI 10686 MYXA-ASN 10687 CYBERUS 10688 ISMNET 10689 FVI-CHI 10690 NETSCOUT 10691 COLINTERNET 10692 DLS-LITH 10693 VSPN-ASN 10694 TMPW-DATANET 10695 WAL-MART 10696 MICROPATENT 10697 CABLENET 10698 WR-TECH 10699 TELSOFT-AS 10700 TECINFO 10701 FIBERPLUS 10702 INEL-AS 10703 QUADR 10704 LNCC 10705 NU01-WS-NC 10706 GEMTEL 10707 MAGIBOXINC 10708 SELECTNET-AS 10709 NETUSA-AS 10710 USCATL 10711 RCONNECT 10712 ISTRADA 10713 HCNAP 10714 RIGROUP 10715 RCT-SC 10716 OIS 10717 SCHOLASTIC 10718 CONSECO 10719 BAIS12 10720 BAIS12 10721 EMINETDOMAIN 10722 ALCOA 10724 HECENTER 10725 GENENTECH 10726 INAV-NET 10727 NETACCESS-1 10728 VOICESTREAM 10729 BUSINESSPRODUCTS 10730 TBCNET 10731 DAEDAL-AS 10732 TIERRANET 10733 MATRIX 10734 SVWIRELESS 10735 DATACOURSE 10736 ITLTD 10737 BACTC 10738 MASTERLINK 10739 CYBERNET 10740 OWO-AS 10741 WAMNET 10742 DENIZ 10743 GLOBALFEED 10744 IBT 10745 ARIN 10746 TAIS 10748 QRC 10749 AFFINET 10750 COHESIVE 10751 GTS-ASN 10752 SUPERHIGHWAY 10753 XCOM 10754 GOV-FRB-BOG 10755 DARTMOUTH-AS 10756 VVM-AS 10757 SSDNET 10758 INWAVE-AS 10760 THEBEAM 10761 TRICETEL 10762 TESTDRIVE 10763 WEBSIDESTORY 10764 STARTAP 10765 CLOUDNET-AS 10766 ASN-TAIS-CSE 10767 HIPERNET-AS 10768 INFORAMP 10769 TIDALWAVE 10770 SBIS-ASN-BLK-2 10771 SBIS-ASN-BLK-2 10772 SBIS-ASN-BLK-2 10773 SBIS-ASN-BLK-2 10774 SBIS-ASN-BLK-2 10775 CAREERMOSAIC-00 10776 NETSCAN 10777 ZEONET 10778 MCL 10779 CHARTERMEDIA 10780 USXCHANGE 10781 VINEYARD 10782 DIGITALIMCANDOVER 10783 IWSC-AS1 10784 TOTALITY 10785 ISSANET 10786 OTTAWAGIGAPOP 10787 MOTHER-ASN 10788 CDW 10789 BIGNET-AS 10790 INREACH-2 10791 PDQNETINC 10792 WEBNETWORLWIDE 10793 IDSOFT 10794 BANKAMERICA 10795 ASN-DESARROLLOS 10796 SCRR-10796 10797 MICH-COM 10798 SBICSA 10799 PITTENCRIEF 10800 INTERNETARENA-GW 10801 AMSOUTH 10802 KOPPELNET 10803 EASTCOASTACCESS 10804 RSCS-AS-1 10805 9NETAVENUE 10806 AFP-NET 10807 HOLE-IN-ONE 10808 THE-GLOBE-AND-MAIL 10809 NCIA 10810 HARVESTCOMM01 10811 IENET 10812 THENET-HOUSTON-1 10813 DELTATHREE 10814 XSBANDWIDTH 10815 KCNET 10816 DESKTALK-AS 10817 GACONNECT 10818 FULLNETOK 10819 ICC 10820 MECKLERMEDIA 10821 PIONEERINTERNET 10822 UNISTAR 10823 NETCARRIER 10824 BRHNET 10825 USW-INTERACT11-19 10826 USW-INTERACT11-19 10827 USW-INTERACT11-19 10828 USW-INTERACT11-19 10829 USW-INTERACT11-19 10830 USW-INTERACT11-19 10831 USW-INTERACT11-19 10832 USW-INTERACT11-19 10833 USW-INTERACT11-19 10834 ADVANCE-AS 10835 VISIONARY 10836 ASN-NJCC 10837 WELLSFARGO 10838 OCEANIC-INTERNET-RR 10839 CIN 10840 CAHWNET 10841 SOLBR 10842 ESCA-AS 10843 AITNET 10844 VASTNET 10845 HITCOMASN 10846 DEERE 10847 PODERNET 10848 TELLURIAN-AS 10849 DCCCD 10850 MARC-GROUP 10851 NREP 10852 PREMIER-INTERNET 10853 ANDERSENCORP 10854 AIRMEDIA 10855 AUTO-BY-TEL 10856 LINKDATA 10857 JCPENNEY-AS 10858 EUREKA-NET 10859 DYNCORP 10860 TOWERRECORDS-AS 10861 E-Z-NET 10862 CURTISMATHES 10863 WAVEFRONT 10864 ELOGIC 10865 ABACOM-ASN 10866 REDSAT-HOUSTON 10867 FHDA-AS 10868 DOWNCITY 10869 ANX 10870 LINK-1 10871 NOAANWSERH 10872 DV-ASN 10873 SIEMENS-SMI 10874 SUNSET-DIRECT 10875 POP-RS 10876 MAOZ-ASN 10877 CHAMBERS 10878 IBS-AS 10879 UHC 10880 OTI 10881 POP-PR 10882 CLARITYCONNECT 10883 WIZZARDS-MAGICK 10884 FRYMULTI-AS 10885 ASAMINI 10886 BWI-GIGA-POP 10887 BPSI-AS 10888 EI-AIX 10889 TRENSEN 10890 PNI 10891 UTSWEB 10892 ISSI 10893 ILLINETWORKS 10894 U11912 10895 DNS 10896 VERIFONE 10897 CAMARA-DEPUTADOS 10898 BI-NET-SA 10899 TANDYAS 10900 EDUC-NET-PROV 10901 TERABIT 10902 BISYS-ATL-AS 10903 DHC 10904 EQUISTAR-AS 10905 CYBERTOONS 10906 TELEMIG-ASN 10907 XENERGY 10908 UWORLD-NET 10909 STOCKMARKETPHOTO 10910 INTERNAP-BLK 10911 INTERNAP-BLK 10912 INTERNAP-BLK 10913 INTERNAP-BLK 10914 BRIN 10915 CQL-AS 10916 TCTC 10917 IPNAV 10918 CTAZ-AS 10919 BITS 10920 ILI 10921 KIHNETWORK 10922 ACENET 10923 THIRDPOINT 10924 USCSNET 10925 HARR 10926 DIGITALGREENHOST 10927 PCH-SD-NAP 10928 CTI-NETRAX 10929 DATAART-AS 10930 NOVA-INTERNET 10931 AS-EXARIO 10932 RAEX 10933 ATXNET-AS 10934 BROWNCO 10935 RLC-INTERNET 10936 CX-TO 10937 IIS 10938 POP-PE 10939 NETREX-DNVR 10940 LAS-VEGASNET 10941 MNNING-NPR-INFO-SERV 10942 DSNET-AS 10943 SIRIUS-SYSTEMS 10944 CBOOKS-AS 10945 WEBCC-AS1 10946 FUTURESOUTH-COM 10947 1WYO-NET 10948 APPLIEDMANAGEMENT 10949 ATHENSISP 10950 DNSCENTRAL 10951 TFSNET 10952 NETRUNNERS-1 10953 PECO 10954 SERPRO 10955 WILPATERSON 10956 VALUEAMERICA 10957 REALMED 10958 METRONETWORKS 10959 NPCCORP 10960 USW-INTERACT20 10961 BGP-AS 10962 SMS-CORP-ASN 10963 TRIBUNE-TV 10964 ASN-RCC 10965 MRNET 10966 ALASKA-AIR 10967 HOMEDEPOTNET 10968 CARGILL-NET 10969 JPSNET 10970 LH 10971 APEX 10972 NF-CANET2 10973 KALAMA 10974 Q-TEK 10975 NET-AIG 10976 DURHAMNET 10977 IWBC 10978 RONCONET 10979 DAVE-WORLD 10980 VIFI 10981 CON-OK 10982 INTERNET-GATEWAY-NET 10983 TS 10984 BAYOU-INTERNET-INC 10985 PCSLINK 10986 INTERMEDIA 10987 PLUMCREEK-AS 10988 METRONTECH-AS 10989 COBWEB 10990 WINSTAR-TELEBASE 10991 DISCLOSURE-BETHESDA 10992 GIGA 10993 IDIOM-AS 10994 TAMPA2-TWC-5 10995 PNCBANK 10996 CONCORDE 10997 INTDATA-AS 10998 MLAMRS 10999 MLAMRS 11000 MLAMRS 11001 MLAMRS 11002 MLAMRS 11003 PANDG 11004 KNOWLEDGESOFT 11005 CHX-AS 11006 MBCO-AS 11007 INCREDIBYTE 11008 NETVERK-1 11009 BIGCHALK 11010 PRC 11011 UPR 11012 DDC-AS 11013 USMO-ASN 11014 CPS 11015 NET-YBP-ASN 11016 DV2U 11017 GREATLAND 11018 GLOBALACCESS 11019 BERNSTEIN-AS 11020 QNET-ASN 11021 INETONE-CORP 11022 ALABANZA-BALT 11023 SYSSRC 11024 FORWARDNET 11025 IMS-NET 11026 AADS-ANX 11027 KEMPER-INSURANCE 11028 TLDPANAMERICANA 11029 ASN-LATINEX-NET 11030 QUALCOMM 11031 NETAMERICA-INC 11032 PYRAMIDNELSONS 11033 GVCINC 11034 RRD-FINANCIAL-HUDSON 11035 TICNET 11036 SISCOM 11037 MCI-AIAG 11038 DIVERSIFIED-COMM 11039 GWU 11040 FMR-AS1 11041 INTERNET-CONNECT-FL 11042 ONSI-NET1 11043 USIWAY 11044 HPLD 11045 STERLING 11046 CHROMATIC 11047 IAG 11048 ZAPCOM 11049 ILINK-2 11050 KENT-STATE 11051 CYBERVERSE 11052 IHC-NET 11053 SISTECOL 11054 ETHERNETIX 11055 COMCAST 11056 NEWNORTH-NET 11057 WTHOMPSONCO 11058 NAP-CABASE-AR 11059 NEODYME 11060 NEO-RR-COM 11061 HUGHES-EC 11062 MTCO 11063 AS-MICROSTAR 11064 STB-ASN 11065 NCI 11066 CNFNET 11067 PTSINET 11068 IMAGEWORKS-COMPUTING 11069 IEI-NET-ASN 11070 LINC 11071 INFOWEST 11072 AUTO-WEB 11073 LEXITECH-BRANFORD 11074 INTER-POL-1 11075 TEL-NETCOM-NET-01 11076 NETUSER-AS 11077 MOSSADAMS 11078 BROWN 11079 ATT-CA-11079 11080 LINKMAX 11081 ANTELNET 11082 BRAINLINK-INTL-INC 11083 SEXCOM 11084 HURONTEL 11085 PLAYGROUND-NORTEL 11086 PITNEYBOWES-AS-1 11087 CFE-NET 11088 UTW-AVTEL 11089 WEBTASN 11090 MTAONLINE-AS 11091 ORONET 11092 HEVANET 11093 DATAWAY 11094 ASN-UMDNJ 11095 FLORIDANET 11096 FLORIDANET 11097 EMBRAPA 11098 SBC-NET 11099 SBC-NET 11100 TOADNET 11101 CHARTER-COMM 11102 CLIPPERNET 11103 EXECULINK-ASN 11104 USW-INTERACT21 11105 OCSLINK 11106 WOLFRAM-AS 11107 ICS-MONTANA 11108 WIIG 11109 STATE-OF-ALABAMA-ISD 11110 FASTINET-AS 11111 MEDICAL-ECONOMICS 11112 STOCKPOINT-NAC 11113 ANASERVE 11114 WINTEK-CORP 11115 BIZSERVE 11116 EUROPA 11117 TEKCONNECT-AS 11118 COMTECK 11119 CA-WMMERCER-11119 11120 NETREACH 11121 FIRSTDATACORP-DB 11122 CACI-NET 11123 UIA 11124 WAVO 11125 EBIZ 11126 CARLE-ASN 11127 NETSAT-AS 11128 DONBEST 11129 COMPATIBLESYSTEMS 11130 TC3NET-AS 11131 UMBC-AS 11132 DSS-ONLINE 11133 REITERASSOC1 11134 WEBFIRE-MILTEL 11135 COMNET-COMMUNICATIONS 11136 ITESM-RZP 11137 ACCESSINTERNET 11139 CWDOM 11140 GTE-WIRELESS-DATA 11141 FOREX-MG 11142 FLC-ASN 11143 NORFOLK-COUNTY 11144 ADVENT-SOFTWARE 11145 BAIS14 11146 BAIS14 11147 BAIS14 11148 BAIS14 11149 BAIS14 11150 ALTINET-AS1 11151 INTERLIANT-AS 11152 WAVEPHORE 11153 NOMURA-AS 11154 SWS 11155 QUADCITIESONLINE 11156 POP-CE 11157 ELAB-AS 11158 NETDEPON 11159 LAPL-LAPUBLICLIBRARY 11160 COMPS-AS 11161 800-FLOWERS 11162 MXNET 11163 THEINTERNETSHOP 11164 WILLINET 11165 DPI 11166 JFAX 11167 BORG 11168 ASN-DPC 11169 NET-WEIRNET-US-01 11170 BEWELLNET 11171 REPIND 11172 ALESTRA-NET-BACKBONE 11173 NMIX 11174 ONESOFT-ASN 11175 CYBERSURF 11176 ASTRAMERCK 11177 QUESTAR 11178 AUGUST-ASN 11179 SPECDATA 11180 UFMS-POP-MS 11182 RIMES01 11183 MHTC-NET 11184 INTERGRAM 11185 CORE 11186 DMCI-NET 11187 ANXO 11188 LACOUNTY-ISD 11189 GRIC 11190 SILCON 11191 ELITE-NET 11192 AT-FINANCIAL 11193 COMNET 11194 NUNETPA 11195 COHO-ASN 11196 NESTLE-USA 11197 DART-HITCH 11198 APC 11199 VMT 11200 UACT 11201 BFA-NET-AS 11202 DBNA 11203 SEITZ-TECH 11204 IAI-NET-AS 11205 CITY-OF-PHILADELPHIA 11206 EAZENET 11207 BOSTONGLOBENET 11208 NET-BOWNE-GS 11209 ONLINE2000 11210 EVERENSEC 11211 HEARTNET 11212 REALTIMEQUOTES-1 11213 LVLT 11214 ADGRAFIX 11215 LOGIXCOMM-AS 11216 HOSTCENTRIC 11217 CABLEVISION-LOUDOUN 11218 WARPONE 11219 INXPRESS 11220 THIRD-COAST-2 11221 WHRONET 11222 LOGICAL-ASN 11223 UTAHINTERNETSERVICES 11224 SIR 11225 USW-INTERACT22 11226 USW-INTERACT23 11227 N-LINK 11228 ARINC 11229 BRANDYWINENET 11230 INT-OF-GREENVILLE 11231 GETTYSBURG-DOM 11232 MIDCO-NET 11233 GORGE-NETWORKS 11234 NTCN 11235 BHCIHC 11236 UNIFI 11237 EAFIT 11238 NWOL-AS 11239 KENNETT 11240 ACCESSATC 11241 DLRYANPARTNERSHIP 11242 POP-SC 11243 YNINET 11244 COMPBANK 11245 GOODYEAR-US-AKRONHQ01 11246 WATERHOUSE 11247 IBSINC 11248 MULTISERVICE-NET 11249 CONTROLNET 11250 TRI-STATE-G-AND-T 11251 TECHWAVE 11252 ISU-NET-AS 11253 SPECTRACOM-INC 11254 POP-RN 11255 SBT-NET 11256 ABACONET 11257 UNIVERSITY-LETHBRIDGE 11258 EDOC 11259 ANGOLATELECOM 11260 ANDARA-HSI 11261 ADVSYS-AS 11262 CWAIPNETWORK 11263 INTERNOVA 11264 IDIR 11265 RAPID 11266 VALLEYBUSEQ 11267 DYNALINKTEL 11268 WNM-ORG 11269 CWBDA 11270 NETWRIGHT 11271 COMSAT-BR 11272 TELAPEX 11273 FDCSGNET 11274 ADHOST 11275 ART-SEA-1 11276 DATAHUB 11277 NIPSCO 11278 NINTENDO 11279 GEORGE-MASON-UNIV 11280 US-OFFICE-PRODUCTS 11281 COFFEE 11282 INDUSTRIAL-STRENGTH 11283 COSTCO 11284 TELEBRASILIA 11285 FLYCAST-OPEN-NETWORK 11286 KEYBANK 11287 NETRESPONSE 11288 PREFERRED-INTERNET 11289 CYBERWORKS 11290 RAPIDUS 11291 USDIAL 11292 QNET 11293 UCOP-ASN 11294 MHSC-NET 11295 BRHS 11296 INTERPATH2 11298 GREENNET-ASN 11299 DIALISDN 11300 LYMANBROS 11301 CMN-AS 11302 GTECH 11303 DATARETURN 11304 SPLUS 11305 INTERLAND-NET1 11306 IOWNC-IOA 11307 6750REI 11308 PDXINTEGRITY-1 11309 IMF 11310 BOSTONPUB 11311 SINECTIS 11312 NETWORKTWO 11313 FANNIEMAE 11314 SRCFINDER-NET 11315 CRM-AR 11316 NERC 11317 GPN 11318 GU 11319 DATARECALL 11320 INTERNET-EXPRESS-INC 11321 EXPANSION-PROGRAMS 11322 EFORTRESS 11323 GETTYIMAGES 11324 ARTNET 11325 LIGHTSTREAM 11326 ASN-EASTMAN-CHEMICAL 11327 ETHERGATE 11328 BIO-RAD-ASN 11329 ASN-USI 11330 IMALL 11331 DETESAT-AS 11332 MAINSTREAM-COM-1 11333 CYBERTRAILS 11334 MIDAMERICAN 11335 APISNET 11336 BGLOBAL 11337 APLNYC-ASN 11338 LINKEXPRESS 11339 AS-BONZI 11340 REUNA-1 11341 EASYNET-US 11342 PATHWAY 11343 ICOM-NET 11344 MAXWELL-NET1 11345 ASN-ONEIPNET 11346 MDCONSULT 11347 ORC-F2 11348 BENCHMARKONLINE-ASN0 11349 ACCUCOMM 11350 PGC 11351 RR-NYSREGION-ASN-01 11352 POLLAK 11353 RAE575 11354 DBN 11355 SHELL 11356 TELECOM-AR 11357 INFO-IQTINC 11358 RECOM 11359 RMCNEVADA 11360 ELECFORIMAG 11361 IVTWPCO-BB1 11362 IBE300 11363 FUJITSU-USA 11364 ACTEL-USA-AS 11365 STENTOR-ISN 11366 MINERVA-NETWORK-SYS 11367 ICENET 11368 T3TECH 11369 CDSASN 11370 UNEED 11371 UUNET-AS-11371 11373 PEOPLES-NETWORK 11374 META-AS1 11375 JANUS-NET 11376 JWSC 11377 LATINET 11378 DVN 11379 EAGLENETCTI 11380 INTERNETOFFICEPARKS 11381 NFIS 11382 WRF-NET 11383 XAND 11384 ASN-MORGAN2 11385 MADOFFNY1 11386 WWNET-AS 11387 HOBONET 11388 MAXIM 11389 CYBERPORT-AS 11390 UNIEMP-AS 11391 MICROGRAFX0001 11392 NOSIS 11393 METROPOL 11394 DAMEDIA 11395 NETWORKWORLD 11396 TWC-ASN 11397 EMJ-INTERNET 11398 SPWR 11399 WILLIAMSCOLLEGE 11400 TELCOM 11401 CPINTERNET-1 11402 ADVHEALTH-ASN 11403 NYINTERNET 11404 POINTSHARE-SEA 11405 EIC 11406 CZINET 11407 WARP9-TECH 11408 KWE-AS 11409 EFXSECURE 11410 REGIONALNETWORK 11411 TOURNET 11412 USW-INTERACT25 11413 BXCOM 11414 NVIDIA-NET 11415 IMPSAT-BR 11416 METAWIRE 11417 NIU 11418 AVALON 11419 CTBCAMPO 11420 TRIBUNE-COMPANY 11421 ACMENET 11422 CALREN-2 11423 CALREN-2 11424 FCCC-EDU 11425 VARCOINTERNATIONAL 11426 SCRR-11426 11427 SCRR-11427 11428 1-MICRONPC 11429 VSTREAMINC 11430 BESTNAP 11431 PLANETARIUM-ASN 11432 BRASILNET 11433 PORTALS 11434 ASN-PEAKTOP 11435 INTONLINE 11436 CRC-GIGAPOP 11437 DATAONAIR 11438 BIGDOG-CISA 11439 INTERNETREVEALED 11440 NETSVILLE 11441 WEBBLAZERS-TFS 11442 MIEN1 11443 OLM 11444 PRIMUSDSLINC 11446 XYLANMASS-AS 11447 IWM 11448 VGT 11449 INTERACTIVEBROKERS 11450 XLNET 11451 ASN-INTERLINK-NETWORK 11452 MOUNT-SINAI 11453 ASN-SWITCHVIEW 11454 VERACITI 11455 WORLD-NET 11456 CAROLINA-ONLINE 11457 TAYLOR 11458 IMBRIS 11459 BURGOYNE-DOM 11460 PNBD-AS 11461 SPRINTBWG 11462 PARACOM 11463 CDB-INFOTEK 11464 SKYWAVES-NEWSOURCE-1 11465 AISI-NET 11466 INTERNET-ALLEGIANCE 11467 UNET-TW-ST 11468 NSDATA 11469 WAVECOM 11470 RSNA-ASN 11471 EASTLAND-INTERNET 11472 COM-LINK-AS 11473 WCOILASN 11474 BMC 11475 WARPONE-2 11476 CORPEXP 11477 GOC-AS 11478 OPENFACE 11479 BRM-SUN-AS 11480 MDXNET 11481 LABRATS 11482 ANSON 11483 WCNET 11484 NET-LINK 11485 ARC2 11486 WAN 11487 GREY-NY 11488 REDSTONECOM 11489 BACI 11490 MASH-COM 11491 TRIVALENT 11492 CABLEONE 11493 ICENET-2 11494 NET-TTC-ASN 11495 HRL-WINS 11496 PAYMENTECH 11497 BESC 11498 DIBI 11499 WHOI-WOODSHOLE 11500 PEAKPEAK 11501 BTSR-ASN 11502 IJNT 11503 DATACOOP 11504 WHITE-CASE-1155 11505 FIBERDIRECT 11507 TOUCHAMERICA 11508 FISERV-DENVER 11509 PAJO 11510 CLOVERNET 11511 U1-NET 11512 SAILNET 11513 GETUS 11514 TOWERNET 11515 QUESTNET-ASN 11516 PENCOM 11517 SKYCACHE 11518 ASN-SKYE 11519 GFNORTE-AS 11520 ALLSTATE-INSURANCE-CO 11521 MMI 11522 SUD-WIREDAS 11523 RAYVA 11524 SEGNET 11525 HRTC 11526 USHOST-AS 11527 CYBERCENTER 11528 PHOTRONICS 11529 NIMO-AS 11530 SPUN 11531 INTRAWORLD-NET 11532 IMCONLINE 11533 VERITY-AS 11534 PHILA-SCHOOL-DISTRICT 11535 NET-UALNET-AS 11536 FORE-AS 11537 ABILENE 11538 USW-INTERACT24 11539 REPRAHDUCE-LA 11540 WANS-LACA1 11541 GREATLAKES 11542 ZEBRANET-MOB 11543 COLLECTIVE 11544 DAIN-ASN1 11545 IXL-TOC 11546 UNOMAHA-AS 11547 TRILOBYTE 11548 DRAGONNET 11549 ACCELERNET 11550 BMISBLM-AS 11551 PRESSROOM 11552 PHL 11553 CALICO 11554 ACADIANET 11555 ASCENTRIX-AS 11556 CW-PANAMA 11557 HOLLISTER-INTERNET 11558 DOMAINGR 11559 PERFEKT 11560 WEST 11561 PARTES-CORPORATION 11562 NET1-VENEZUELA 11563 NETENTERPRISE 11564 BINDCO 11565 COMETSYSTEM 11566 ESCAPE-AS 11567 GANNETT3-NET 11568 SHOPPING-COM 11569 SATDATA 11570 MSLO-1 11571 LANACION 11572 MEDIACOM 11573 BUCKEYEWEB 11574 AVALONSYS 11575 SIRS-ASN 11576 THUNDERBIRD-AGSIM 11577 GOVNET-ASN 11578 GANNETT2-NET 11579 LANLINE 11580 POWERTEL-INC 11581 TRANSTEL-SA 11582 ATCALL 11583 NET4PROFIT 11584 INTERGATE-E 11585 ZUPERNET 11586 NETVITALITY 11587 EWOL-COM 11588 AS-ELDOSALES 11589 DATAWAVE-TECH 11590 CUMBERLAND-TECH 11591 KLONDYKE 11592 NET-ALAGOAS 11593 IBS-INTERNATIONAL 11594 COLLEGEEDGE 11595 NETSONIC 11596 BESTBUY 11597 SW19NET 11598 RECOL-CT 11599 NETV-AR 11600 TUTTLE-ASN 11601 VERTONET 11602 SDSMT-AS 11603 THE-SPA 11604 HIS-NOC 11605 ASN-XEDIA 11606 WOL-AS 11607 SD-STATE-UNIVERSITY 11608 ACTTG 11609 NOVA 11610 INETNEBR-1 11611 WNONLINE 11612 CW-NC 11613 WPNET-AS 11614 VIP-CONNECT 11615 WEBEXNET 11616 PEAPOD 11617 COMSATMEX-ARIN 11618 REXALL-SUNDOWN 11619 INTRACO-ARIN 11620 SUCCEED-NET 11621 ASN-TOWNHALL 11622 INFOSPACE 11623 CTCN 11624 INTEREALTYNET 11625 VP63-ORG-ASN 11626 ULSTERNET 11627 LEXITRANS 11628 MPLANET-ASN1 11629 DOTSTAR-INTERNET 11630 AOL-RTC2 11631 AOL-DTC 11632 COMDISCO 11633 WALLDATA 11634 PROMUS-HOTEL-CORP 11635 ADPESNET-ASN 11636 ISIS2000 11637 SHADOWLINK 11638 MATCHLOGIC 11639 FSCNET 11640 GROUP-ONE-TRADING 11641 INTUIT-SD 11642 SICOAR-AR 11643 EBAY 11644 ACESSONET 11645 NASPERS 11646 NETWORKS-PLUS 11647 SENTEX-NET 11648 TCE-AS 11649 TECH-EDGE 11650 PLDI 11651 FREEIASN 11652 DATATONE 11653 ESS-PR-WEBMASTERS 11654 RR-BINGHAMTON-ASN-01 11655 RELIANCE-INSURANCE-GP 11656 CITICOM-AS 11657 LEGG-MASON-CORP-NET 11658 NCITECH 11659 KUMC 11660 BANKGATE 11661 AVHOSPITAL 11662 LASVEGAS-COM 11663 SERVERCOM-INC 11664 KEYTECH-LD 11665 IMG-AS 11666 NEXICOM-CA 11667 INTEGRITYONLINE7 11668 WCI-NET 11669 ASN-REALSELECT-HQ 11670 XPRESSTRADE 11671 BIGCHARTS 11672 GV-NET-AS-1 11673 LATIN1 11674 RADIAN-AUSTIN-001 11675 ZEBECDATA 11676 ACSBPS 11677 ITESM-RUV 11678 DOE-NTS-AS 11679 WGIS-ASN 11680 CPQ-ALF-IOMC 11682 NET2-CTCNET-ASN 11683 ELNK-CHARTER-CONN 11684 VLAN 11685 HNBCOL-AS 11686 ENA 11687 CITY-OF-HOPE 11688 WFRMLS 11689 NN-JORSM-CHI01 11690 PLANETCABLE 11691 EVOCATIVE 11692 NMSMN 11693 WEST-GA-NET 11694 USB-NET 11695 THESTREET-DOT-COM 11696 SIMLABCEDARGROVE 11697 NET-SUPERNEWS 11698 ATT-PWSS 11699 BMI-NET 11700 CA-WEDNET 11701 LITESPEED 11702 CONVERGENT 11703 AVENUEA-ASN 11704 ROBERTSON 11705 MOSQUITONET 11706 BHNET 11707 SCRR-11707 11708 FIRSTUSA 11709 VIC 11710 IPLUS 11711 NETMDC 11712 BELLSOUTH 11713 TRUSTEDNET 11714 ASN-UNEB 11716 WON-AS 11717 T-NET 11718 GREENAPPLE 11719 EATON-CORPORATION 11720 PCSHS-COM 11721 NTRNET-NC 11722 GISCO-ASN 11723 TP-NET 11724 AMARILLO 11725 JGROUP-AS 11726 GUIWARE1 11727 BMTS 11728 EGLNETWORKS-NET 11729 SMART 11730 PEPSI 11731 RFWAS 11732 IEI-LVGN-INET 11733 TBI-LTD 11734 CATALYST-SOLUTIONS 11735 NAS 11736 USD 11737 THEBOOK 11738 EPPG-DBQ 11739 DIGITAL-FOREST-NW 11740 PROGRESSIVE-AS 11741 BENTONREA 11742 MPACT-IMMEDIA 11743 EBSCO 11744 INVESTEC 11745 USNH 11746 WAGGENER-EDSTROM 11747 KAGI 11748 TYLERNET 11749 ITHINK 11750 ARGENTINA-ON-LINE-SA 11751 REDEPINHASRTE 11752 SOFTONE 11753 PA-ONLINE 11754 GUS 11755 WAYMARKCOMM 11756 BITSTORM-INC 11757 WHIRLPOOL-ASN 11758 APPNET-FALLSCHURCH1 11759 WHISTLE-AS 11760 INETONE-BLUE 11761 3RD-MILLENNIUM 11762 NET-CONNECTION 11763 SAFECONNECT-INC-ASN 11764 PANAMSAT-NET 11765 OTMP 11766 AIS-AS 11767 IMC-ASSOCIATES 11768 M1CR0WAREH0USE 11769 MOBILENETICS-LA-GW1 11770 NET56 11771 AMES-DEPT-STORES 11772 US-TELECOM 11773 UTMDACC 11774 CYPRESSCOMM 11775 CRV-INC 11776 CONEN 11777 AUTOFUSION 11778 FRONTLINE-ASN 11779 MCC-GROUPZ 11780 CORPLINK 11781 AUTO-ICMI-100 11782 AS-BIZNESSWEB 11783 SDRDC 11784 ASN-AV8 11785 BROADWAY-BANDWIDTH 11786 SOLINFO-AS-01 11787 PACOURTS-AS 11788 FRANKLINDAVIS-ASN1 11789 BALLISTIC 11790 RANDOMHOUSE 11791 DIGSIGTRUST 11792 BRIDGESTONE-FIRESTONE 11793 NEXTREND-COM 11794 NCWEB-AS 11795 989STUDIOS 11796 WINBRIGHT-NET 11797 VNU-MIS 11798 ERILAB 11799 FULLWAVE 11800 DOMAIN-ASN 11801 OGRL 11802 CIASC 11803 QUOTECOM 11804 THIRD-RAIL 11805 FORTNOCS 11806 LEEPFROG 11807 ABMINTERNET 11808 UIDAHO 11809 NET-ERAU-PRC 11810 DELIAS-AS 11811 BOONE-NET 11812 ELIANCE 11813 CDC-NORTH-AMERICA 11814 IGS-GTA 11815 COOPVGG-COM-AR 11816 SETAR 11817 STAFFORDNET 11819 SMITH-ASSOC 11820 ZOOMNET 11821 BLAUTECHNOLOGYGROUP 11822 SOWESTWEB 11823 LORDABBETTCO 11824 CAREERBUILDER 11825 JDFI-AS 11826 RISS2 11827 WSU-AS 11828 SOINET 11829 CADENCE 11830 ICENETCR 11831 CLAIMCARD 11832 EBI-COMM 11833 KA-NET-INTERNET-SVCS 11834 DREXEL-ASN 11835 SULBBS 11836 ICNET-ASN 11837 SAWNET 11838 IOWA-LEGISLATURE 11839 LOGICAREINC 11840 NSI-REGISTRY-AS 11841 LINKLINE 11842 AS-REGAL 11843 EXPRESS-NEWS 11844 NEWSITE-BRASIL 11845 DPBOL 11846 INFOHOUSE 11847 MIDMAINE 11848 MMIND-NET 11849 DATACOMNET 11850 MAGSNETLLC 11851 PICTUREVISION-ASN 11852 ALANET 11853 ASN-INTERNAP-BLK 11854 ASN-INTERNAP-BLK 11855 ASN-INTERNAP-BLK 11856 ASN-ECI 11857 AEGONUSA 11858 CM2COM 11859 AIR2LAN 11860 IMAGINEX 11861 INTELLIGENT 11862 NORTHPOINT 11863 PLU 11864 VISTO1937 11865 PC-PROS1 11866 SCTCORP 11867 PRIMUSTEL 11869 INRNET 11870 AMWAY-CORPORATION 11871 CINERGY-ASN 11872 SYRACUSE-UNIVERSITY 11873 MC2-AS 11874 BOWMANCAPITAL 11875 IANA-VLUSA 11876 ARCC868 11877 FROGNET 11878 LFGLLC 11879 MEDSCAPE 11880 LEASE-PROPHET 11881 SHREVENET 11882 ERIENET 11883 ASN-SOFTDISK 11884 JPSOS-ARIN 11885 COMMMED 11886 BEYOND 11887 PIONEER-HI-BRED-INTL 11888 INTERCABLE-NET-CORE 11889 IVANET-NYC 11890 IVANET-LA 11891 MEGAVISION 11892 NATCOMPSYS 11893 LOLIGO-ASN 11894 GUESSINC 11895 EZNET-ASN1 11896 MCAINFO 11897 RELTEC 11898 ESSEXCOMP 11899 SYMET 11900 DATACRUZ 11901 TRADINGEDGE-SM 11902 WORLD-LINK 11903 ACTIONWEB 11904 ALLENTEL 11905 BIDSPLUS-ABCADVISORS 11906 WISPLB1 11907 MSXI-INET 11908 VERESTAR 11909 BRWNET 11910 DIRECTLINK 11911 BANKOFNEWYORK-AS 11912 TAMUSIBT-NET 11913 STARSTREAM 11914 HUMONGOUS 11915 VOICE-NET-SOLUTIONS 11916 UNDP 11917 I-SITES-AS 11918 INTERTEX-1 11919 ONSI-NET2 11920 UNK-AS 11921 SECREL 11922 RBN 11923 GNOFN-LFN 11924 ISG-LC 11925 SIGNALCORE 11926 YMP 11927 ADVANCE-GW 11928 TW-TRADEPUBLISHING 11929 K2-DESIGN 11930 FUSION-FISERV 11931 DELGROUP-AS 11932 PACKETENGINES 11933 ILI-NET 11934 IPERFORM 11935 ASN-XSTREAM 11936 LIFECYCLESYSTEMS 11937 TRX-ARIN 11938 NET-SENTRY 11939 MATHWORKS 11940 DIRECTSCOM 11941 ZI-NET 11942 LCONN 11943 GLOBE 11944 WEBTRENDS-CORP 11945 IGSI 11946 MANCHESTER-EQUIPMENT 11947 TRININET 11948 JOURNEYCOM 11949 CYBERBEACH 11950 AIRSWITCH 11951 MCSP 11952 NASDINC 11953 DSN-MO-IL 11954 VIRTUALIS 11955 SCRR-11955 11956 NOAA-NWN 11957 CACHEFLOW-AS 11958 WIR-INT-RES 11959 OMNETTECH 11960 INFOCOM-ETECSA 11961 MIDRIVERS 11962 GLOBESET-ASN 11963 ASN-PENNWELL 11964 OREGRADNET 11965 PANDACOMM-AS 11966 GLOBALREACH-ASN 11967 ESPER-SYSTEMS 11968 DBT-SOUTH-FLORIDA-01 11969 PYTH-COMM 11970 VCI-MDVL 11971 PFIZERNET-GROTON 11972 HELUS 11973 INTRACORP 11974 CALLTECH 11975 WM 11976 FIDN 11977 NORTHLINK-NET-LLC 11978 VEGAS 11979 BLUENET 11980 BDO-SEIDMAN 11981 SPECIALSYSTEMS 11982 SCOTTANDSTRING 11983 ACCESSHUBNET 11984 NETWALK 11985 ASN-SSA 11986 RIO-COMM 11987 INDYWEB 11988 SURFSIDEINTERNET 11989 SOUTHNET 11990 IMPULSE 11991 IGRCORP 11992 INTEGRATED-SYSTEMS 11993 BBINTERNET 11994 DELANET-COM 11995 OHSU 11996 LOBOIS 11997 DASM 11998 PNB 11999 HSACORP-NET 12000 FMR-AS4 12001 INTERNET-TRADELINE 12002 MCC8900MCHENRY 12003 INTEGRATELECOM 12004 ASN-SUD-EDU 12005 SC-AS 12006 ELNK 12007 RAYASN 12008 ULTRADNS 12009 EONI 12010 API-NETWORKSERVICES1 12011 ACG 12012 CYBERREALM 12013 FAUNET 12014 INDIGONETWORKS01 12015 SUNFLOWER-CABLEVISION 12016 HEART-COMM-AS 12017 SERVICEMETRICSASN 12018 OOCL-SJC 12019 ARSNET-LJ-1999 12020 ASCINET 12021 HHES 12022 HANOVERDIRECT 12023 PENSAT-NET1 12024 ASN-ACN 12025 WHITEPINESOFTWAREEAST 12026 SIGECOM 12027 IKON-TS 12028 MMINTERNET 12029 COWTOWNNETDFW 12030 PACIFIC-ONLINE-PON 12031 LORD-CORP 12032 APLDIGITAL 12033 ASN-ANW 12034 MIDINET-MEX01 12035 DIALACCESS-ISP 12036 DIXIE-NET 12037 FDIC-GOV 12038 CSI-7206 12039 TIMEINC 12040 OGDEN 12041 CONNECTIONSUSA 12042 MPTELECOM 12043 CANDLE 12044 WVINET 12045 PACIFIC-TELEKEY 12046 CSC-UOM 12047 AUDIOVOX 12048 GDEXONLINE 12049 ONLINETODAY 12050 TELOCITY 12051 ESCONDIDO-CA 12052 VFC 12053 DISCOVERY-NET 12054 BNYCS 12055 CASTLEONLINE 12056 IBLP 12057 SUMTERNET 12058 TRAVELSCAPE 12059 ILAP 12060 ASCENTNETWORKING 12061 24HOURFITNESS 12062 DECISIONONE 12063 FLYNT-DIGITAL 12064 COXFIBERNET-HR 12065 AMERISTAR 12066 TRICOM 12067 SHAWNEELINK 12068 MOORE-BCS-EXTRANET 12069 REV-NET-TECHNOLOGIES 12070 EZYNET 12071 ASN-KU-AS 12072 SNI 12073 CCSINET-1 12074 ISERVE-INC 12075 JACOBS 12076 HOTMAIL-AS 12077 COMMUNITECH-NET 12078 THE-ICEHOUSE 12079 AIRTOUCH-CELLULAR 12080 DCCI-NOC 12081 GREENHECK 12082 BNS-AS 12083 KNOLOGY-NET 12084 T3-LINK 12085 ENCOREMUSICCOMPANY 12086 UNREAL-AS 12087 SALSGIVER 12088 MCDONALDCOMPUTERCORP 12089 MIDWESTACCESS 12090 NET-AAA 12091 MTNNS-1 12092 LODGENET 12093 UWATERLOO 12094 WALKABOUT 12095 NACK 12096 AMPNET-ASN 12097 MASSCOM 12098 UNIONBANKOFCAL 12099 HITTER-NET-1 12100 RIFKIN-VA-BEDFORD-ASN 12101 EMS 12102 OPSS 12103 KEYNOTE 12104 WLCI-1 12105 ISAT 12106 CORBIS 12107 UNEX-AS 12108 AS-SCREAMINGMEDIA 12109 CALGATE 12110 SOUNDSCAN 12111 AVISTA 12112 MCTCNET-NET 12113 SKYLYNX-FRESNO 12114 BARNESANDNOBLE-COM 12115 D2000 12116 FHLB 12117 GEEKTECH 12118 WVU 12119 BITWISESYSTEMS 12120 IDEAL 12121 IASERVICE 12122 CYBERSOUTH10-18-93NET 12123 1972IVANCAMETOEXIST 12124 THORN 12125 N2H2 12126 PWI-NET 12127 TELEFONICA-SAL 12128 TFSMD-RV-001 12129 123NET 12130 ENOREO 12131 IJ-NET 12132 MEDIASTREAM-ASNBLK1 12133 LISCO 12134 FMB-BANK 12135 PROINTERNET-DO-BRASIL 12136 E-NET-BR 12137 BABYCENTER 12138 VICOR 12139 AMNET 12140 CNI 12141 EPOCHWIDE-01 12142 SULLIVAN-CROMWELL 12143 STARTEL-AS 12144 NET-TEL 12145 COLORADOSTATEUNIV 12146 MVS-NET 12147 AMERICANBACKHAULERS 12148 CLEMSONU 12149 CHI-STAFFORD1-NET 12150 COTELNET 12151 ESAT-ORG 12152 ASN-BISYS-BPS 12153 SLSS-ASN1 12154 INFOUSA 12155 RR-ORLANDOFLORIDA-01 12156 STSN-SLC-UT-US 12157 TRADINGEDGE-NJ 12158 NAL-GO-LAS-ASN 12159 SECURITIESAMERICA 12160 IMAGINET 12161 HUALNOR-AS 12162 COMTEX-GW-SEATTLE 12163 BNSI 12164 JBX-COM 12165 XACTWARE 12166 OWC-NET 12167 OMEGA 12168 MII-XPC 12169 IBM-BRS-SERVICE 12170 GALILEO 12171 AREA-BANCHSHARES-CORP 12173 UA 12174 FUSIVE-COM 12175 YELMNET 12176 GOVPX-ASN 12177 CMSIJAX-01 12178 INTERNAP-2BLK 12179 INTERNAP-2BLK 12180 INTERNAP-2BLK 12181 INTERNAP-2BLK 12182 INTERNAP-2BLK 12183 RTC-ASN 12184 FORRESTER-RESEARCH 12185 AS-INOW 12186 US-NET-SOLUTIONS 12187 MTAHQ1 12188 Q9-AS 12189 SHOWNET-HSTF-AS 12190 OOCL-NET 12191 IN-MOTION 12192 ASN-AMERITRADE-2 12193 BANXQUOTE 12194 NEXTLECNET 12195 FAME-AN 12196 PRISM-CSI 12197 DRUGSTORE-COM 12198 THE-NETWORK-GROUP 12199 UUNET-RD-AS 12200 PEACHTREESOFT 12201 SCIENT-AS 12202 INTERLNK-NETWORK 12203 ASTORIA-FEDERAL-SL 12204 SCN-NET 12205 ARC-NY 12206 ARC-NY 12207 ARC-NY 12208 ARC-NY 12209 ARC-NY 12210 ARC-NY 12211 ARC-NY 12212 ARC-NY 12213 ARC-NY 12214 ARC-NY 12215 ARC-NY 12216 ARC-NY 12217 UPS 12218 USAGLOBALLINK 12219 GMSNET-ASN 12220 NET-CREATIONS 12221 SCOTTSAVE-COM 12222 AKAMAI 12223 PRCO 12224 CROSSROADS-ACCESS 12225 SDCYBER 12226 INTRIA-HP 12227 ASN-PROBOOST 12228 NCD-AS 12229 SAS-WHQ 12230 OKBRIDGE 12231 CONWAYCORP 12232 XPR 12233 TOTATEL-AS 12234 ASN-UUNET-INT 12235 COVE-AS-01 12236 GOMEZNET 12237 WMA-NET 12238 AECOM-CCSI 12239 GLINX1 12240 ACCUWEATHER 12241 GRIP 12242 OCELOT 12243 WEBSERVE-AS 12244 ECOM 12245 ADAPTIVEBROADBAND 12246 JTC 12247 ASN-MICROHOUSE 12248 CCO-PLATINO 12249 YUBACITY 12250 UNITEDBANK 12251 INVISION 12252 ATT-PERU 12253 LAMBESIS 12254 THINKLINK 12255 IMMUNEX 12256 CITYLINQ 12257 DGC 12258 YEBO-AS 12259 FGINET 12260 KRAMER-CEILLEY 12261 DEKALB 12262 RR-CINCINNATI-ASN-01 12263 TBTEL-AS 12264 NETIZEN-ISP 12265 SDSNY-1 12266 STORERUNNER-AS 12267 HORWATH 12268 DEXSTA 12269 HWWILSON-UUNET-ATT 12270 RR-TEXAS-ELPASO-ASN 12271 SCRR-12271 12272 BELLSOUTHONLINE 12273 TRUELINK 12274 FENICS 12275 INTERNET-CONNECT 12276 TRISTAN 12277 TRACON 12278 SX 12279 LAYER-EIGHT 12280 NTCOR-NET 12281 APAC-AS 12282 SELECTRONICS 12283 RITSYS001 12284 CSOLUTIONS 12285 ONE-ELEVEN 12286 VISIONONE 12287 CYBER-QUEST 13312 GBGM 13313 ABCS-COM 13314 DIALPOINTNC 13315 HBSNET 13316 SESNET-BUE 13317 RA-PS-NET-21 13318 JUJUYTEL 13319 S-I-S 13320 MEDIALAB-LTDA 13321 BROADWAY-BANDWIDTH2 13322 FMR-AS3 13323 FMR-AS2 13324 EPC-INC 13325 STOMI 13326 TUFTS-UNIVERSITY 13327 EKU 13328 VALCORECOMMUNICATIONS 13329 ISC 13331 IBROADCAST 13332 SYSTEMIP-DALLAS 13333 NAUTICOM-NET 13334 MCG-IX-1 13335 AGENCYWORKS 13336 ASN-WR-COM 13337 WI-INET 13338 HARBORNET2 13339 FUSION 13340 TIMESYNC-001 13341 TRANQUILITY 13342 VISTAINFO 13343 SCRR-13343 13344 MUNINET 13345 ROCKYNET-COM 13346 WIZARDCO 13347 INTELLISWITCH 13348 IBT-R 13349 SPEEDEX-ASN 13350 WEB-SERVICES-GROUP 13351 B-U-C 13352 C-S-S-C 13353 NETSTREAM 13354 INTERTEK 13355 TEXASRRIASN 13356 INNERX 13357 CONVOY 13358 CITIPAGE 13359 ISPCHANNEL 13360 TBSHC 13361 ACPG 13362 PCWASN1 13363 LANDMARK-SYSTEMS-CORP 13364 COX-SD 13365 AAC 13366 CHGNET 13367 ATT-BBND-B 13368 JCP 13369 EFAX-AS 13370 NORTHWEST-INTERNET 13371 COMMERCEONE 13372 FEDERATEDINV 13373 MERCK-MEDCO 13374 IAP 13375 PAYLESS-ASN 13376 MERRILL-CORPORATION 13377 CLAIRCOM-AS 13378 TCTTECH 13379 BVIG-ORLANDO-FACILITY 13380 ASN-CUST 13381 CMETNET 13382 EVOLV-ADAPTIVE 13383 SPEEDGATE-NET 13384 DCRNET 13385 COMCAST-TELECOMM 13386 TNS-NET 13387 MEDIAGENERAL 13388 EGYPTIAN-TELEPHONE 13389 HHSI 13390 RADIKS-AS 13391 UNOS 13392 EMSCORP1 13393 AGAPE 13394 CTGINC 13395 TFP-WEB 13396 HRD-INFOSY 13397 ITLNET 13398 K12LINK 13399 MICROSOFT-SMD 13400 CHERNOFFDIAMOND 13401 STARWOOD-HOTELS 13402 PURPLE 13403 ALAWEB-INTERNET 13404 GESTALT-ASN 13405 AS-OCNET 13406 VALUENET-CORP 13407 CTC-BGP2 13408 SIERRALAKES 13409 PDX 13410 MSTRARIN-1 13411 AFSIP 13412 VULCAN-NORTHWEST 13413 NEARPOINT 13414 FIRSTNET-NETWORK 13415 LUMIX 13416 R-GREENBERG-ASSOC 13417 SFX-ENTERTAINMENT 13418 MAXLINKCOM 13419 2ACCESS-NET 13420 SBCIS-LUBKTX 13421 SBCIS-ABLNTX 13422 SBCIS-BUMTTX 13423 WORLDINTERNET 13424 INTERCITY 13425 JUNO-DC-1 13426 JUNO-DC-2 13427 SOFTCOM-RANCHO 13428 CSI-INTERNET-ACCESS 13429 MUSC 13430 AVC-ASN 13431 MILLENNIUM-AS 13432 COXCOMM-LAS-VEGAS 13433 COXNET 13434 CORVELCORP 13435 MORELLI 13437 BRAVE 13438 WCO-NET 13439 OVIS-INC 13440 SAT 13441 SCOTIABANK 13442 SHAMAN-AS 13443 VIPTX-NET 13444 ATTAIN-DIRECT 13445 ACTIVE-TOUCH 13446 AS-NETZERO 13447 NEXTCARD-SC 13448 IOWN 13449 FRICK 13450 AAFC 13451 CHECKOUTAS1 13452 DTPI-HANCOCK 13453 ASN-PCH-PAIX-AS 13454 RIGHTSXCHANGE 13455 NETMONGER 13456 TRANSARC-AS 13457 CPSC 13458 TOTALSPORTS 13459 PCSOLUTION 13460 EARTHCAM 13461 THEOCC 13462 IEEE 13463 CHASE 13464 QXRZRICANET6669 13465 OUTLOOK-NET 13466 CHANNELPOINT 13467 POWERSCOURT 13468 CUSTOMREVOLUTIONS 13469 ARCSYSTEMS 13470 USAONLINE-1 13471 DAISYTEK 13472 TRADEWEB-ASN 13473 INTOP-NET 13474 BGBA-AR 13475 UTI-SYSTEMS 13476 MONTANA-STATE-UNIV 13477 FAYETTEVILLE 13478 LAFAYETTE 13479 ANET-ACCESSUS 13480 ASN-GUELPHHYDRO 13481 DRFASN 13482 ZWEIG-DIMENNA 13483 SYMIX-NET1 13484 NAME-SPACE 13488 CIBERLYNX-DB-FL 13489 ORBITEL-01 13490 ACCESSTOLEDO 13491 MCSI 13492 OBJECTSPACE 13493 ASN-COX-OC 13494 MORNINGSTAR-COM 13495 NTTB 13496 1TRAVEL 13497 SHERWOOD-ASN 13498 COLDSPRINGHARBORLAB 13499 GSI-ONLINE 13500 ATLANCOMP 13501 OARNET-AS-2 13502 RELIASTAR-FINANCIAL 13503 VBW 13504 ASN-LANET-GP1 13505 SANDATA-INC 13506 USDEPTOFTHETREASURY 13507 KMARTCORPORATION 13508 EOTEK 13509 TLPEAST-ASN1 13510 OMSDAL-ASN1 13511 ITXC 13512 REALNAMES-AS 13513 INET-SYSTEMS-ATL 13514 ISP-CANOPUS-SA 13515 PBAC-TNT 13516 PCNLP 13517 BAKER-MCKENZIE 13518 GR8 13519 MEDIAPOSTJINKS 13520 UEIC-BGP 13521 INFONETISP-BO 13522 PUC-PR 13523 SARAIDE 13524 ARW-MEL 13525 TCSN-NET 13526 FACETIME 13527 99MAIN 13528 IXPRES-US 13529 INTEGRITYONL32 13530 DANA-CORPORATION 13531 EQUINIX-RS-VA 13532 MVX-COM 13533 HJ-NET 13534 ADVANCE-PARADIGM 13535 ZEPANET 13536 MHCOMMUNICATIONS 13537 ITXC-2 13538 TELEHOUSE 13539 ASAP-BGP-60089 13540 SAFECO 13541 MENTORGRAPHICS 13542 ACEP-AS 13543 CPCNET-NET 13544 PSIMEX 13545 POWERHOSTING 13546 VT-RICHMOND-AS 13547 UPRAMP 13548 TELECT-LL 13549 MERCURY 13550 GOON-LINE 13551 AVENEW 13552 SMN-COPORATE 13553 CNET-BGP2 13554 TRADESHARP 13555 CENTENNIALBOCES 13556 IVANET-MIAMI 13557 NETIN 13558 ZIMMERMAN 13559 COPLEYPRESS-AS 13560 SCRR-13560 13561 IOLT 13562 GTENS 13563 VIN 13564 BELLSOUTHINTERNATIONL 13565 ORVIS 13566 SIEBERT 13567 KMB1 13568 MEDIAWIRE 13569 UTRADE 13570 AGCO-ASN 13571 VIDEOTRON-LTEE 13572 PLANETRX 13573 SFX-NETWORK-GROUP 13574 EASTKYNET 13575 GEOCAST 13576 SDNET 13577 IBEAM 13578 BUTLERMFG 13579 C-N-D-C-Y-T 13580 TPI-NET 13581 SOFTWAREHOUSE 13582 NETLINK 13583 ACCESS-TECH 13584 ASN-MAXITEL-BR 13585 POWERNET-ASN 13586 MONTANA-COMM-NETWORK 13587 CITIDIRECT-GCS 13588 PAYCHEX 13589 PANAMSAT-1 13590 AAC-TEC 13591 METRORED 13592 ADVERTISNET 13593 MEDIA3 13594 MTC 13595 XPLORIUM 13596 TOKAIBANKOFCA 13597 OLE-990608 13598 FREIGHTLINER-CORP 13599 APPNET 13600 GUSTA 13601 ASN-INNERHOST 13602 CYBERZONE-INC 13603 SERVETHEWEB 13604 ENGRAM 13605 EDC 13606 1-WEB 13607 WEBZONE-ASN 13608 DC-IS-EVV1 13609 CHOICEONECOM 13610 NWP-NET 13611 CDC 13612 PG-E-GT-NW 13613 TRANSPARENT 13614 ALLWEST 13615 CTII 13616 DXSTORM-AS 13617 REGENCY-VOICE-SYSTEMS 13618 CARONET-ASN 13619 BASELINEFINANCIALWTC 13620 BIZNET 13621 REINSURANCE 13622 UREACH 13623 ACCESSCOM-COM 13624 MORTGAGE 13625 PHENIXCABLE-NET 13626 WALGREESN 13627 DIALTONE-INTERNET 13628 CSINET-AS1 13629 TELERGYNET 13630 CSXT-AS-1 13631 THEBIGSTORE 13632 VWRSP 13633 OOCL-CHS 13634 OOCL-CHI 13635 SYNTELLECT 13636 NEC-RESEARCH-INST 13637 NETSTAR 13638 METALINK 13639 WAVENETINC 13640 NORTH-EAST-VAULT 13641 PDMNET 13642 FORUM-FINANCIAL 13643 CANAL13 13644 IDSWEB 13645 USDATA 13646 CIGNAL 13647 WORLD-DATA-INC 13648 VIRGINIA-LOTTERY 13649 ASN-RNB 13650 HUMMINGBIRD-1 13651 EMPNET 13652 SPDCC 13653 EMPLOYEASE-ASN 13654 T3MEDIA 13655 WORLDACCESS 13656 OPTIMAWEB 13657 E-GATE-COMMUNICATIONS 13658 CNM-NETWORK 13659 INTERTECH 13661 BAGNI-ASBLK 13662 BAGNI-ASBLK 13663 BAGNI-ASBLK 13664 BAGNI-ASBLK 13665 BAGNI-ASBLK 13666 BAGNI-ASBLK 13667 BAGNI-ASBLK 13668 BAGNI-ASBLK 13669 BAGNI-ASBLK 13670 BAGNI-ASBLK 13671 BAGNI-ASBLK 13672 BAGNI-ASBLK 13673 BAGNI-ASBLK 13674 BAGNI-ASBLK 13675 BAGNI-ASBLK 13676 ILAND-AS 13677 A-C-S 13678 PAETEC 13679 UP-GDL 13680 CITY-GUIDE-INTERNET 13681 AS-AESTUS 13682 INFOVIA-GT 13683 ACCESS-TECHNOLGIES 13684 ASN-MEDTRONIC-1 13685 NETPATH-NPAC01 13686 WTELENET 13687 TELEHUBINTER-NET 13688 PSEG 13689 NETO 13690 TEAM401K-AS 13691 800-COM-AS 13692 3KWORLD-GATEWAY 13693 NTS-ONLINE 13694 XECUNET 13695 AEP 13696 NETROM 13697 DSIS 13698 SHAWINDUSTRIES 13699 KIHONLINE-AS 13700 CAPITAL-NETWORKS 13701 BENCHMARK-ELECTRONICS 13702 INGRAM-BOOK-GROUP 13703 NETSYSTECHINC 13704 FASTSERVE-NETWORK 13705 IDIRECT-MTL 13706 COMPLETEWEBNET 13707 NETWORK5 13708 ONR 13709 CMLSIS 13710 SYSTEMS-METHODS 13711 GEORGIA-PACIFIC 13712 SMUMN 13713 ACTN-ASN 13714 ASN-NVST 13715 NETADVANT 13716 HEWITT-ASSOCIATES 13717 EBC-ASN 13718 DIAGEO-NA-MPLS 13719 GOSPELCOM 13720 SONYONLINE 13721 INTERNETPICTURES 13722 INCOM 13723 TGCNET-NY 13724 SPARKSCOM 13725 EVANS-SUTHERLAND 13726 VISION-I-SYSTEMS-ASN 13727 SAW 13728 ICGSS 13729 DANCKER-AS 13730 LEWIS-COMP-SOLUTIONS 13731 BCHARRIS 13732 AXISPOINT-INC 13733 COL-NC-705A 13734 BEESKY 13735 SMARTWEB 13736 FACTUAL-DATA 13737 HP-LIS 13738 MRSTOCK-DOWNERS 13739 EQUITABLE 13740 HYPERNET-AS 13741 AMTECH 13742 DVNCINTERNET 13743 HEALTHSTREET 13744 SITESPECIFIC 13745 DAWSON 13746 THEMONEYSTORE 13747 MAAGNUM-AS 13748 SMN-WAGON 13749 EVERYONES-INTERNET 13750 TNSI-AS 13751 SUMMIT 13752 VICLINK 13753 BLACK-HOLE 13754 INFOCOM-CORP 13755 SPJC 13756 INFLOW-NET 13757 ING-NO-AMERICA 13758 AMERIX-ASN 13759 ASN-MIADORA 13760 CFN 13761 BSI 13762 HUNTERDOUGLAS 13763 CARDSERVICE 13764 NET-DAMARK 13765 NEDELCO 13766 NTWO-COM 13767 NW2-AA 13768 PEER1 13769 SAVINGS-BANK-LIFE 13770 NEON-1 13771 BOOMERANG 13772 AMERITRADE-3 13773 INTERLINKS 13774 CORPBANCA 13775 MATHBOX 13776 QX-NET-ASN-1 13777 QTM-BENTONHARBOR 13778 JOHNSON-AND-JOHNSON 13779 BASISTECH 13780 NTNCOMMUNICATIONS 13781 HOPKINSVILLE 13782 FAFCO 13783 RADFORD-UNIV-AS 13784 AFOTEC 13785 TCCISP 13786 ARIN-LRBCG-5770 13787 CAPTECH 13788 USCOURTS 13789 INTERNAP-BLK3 13790 INTERNAP-BLK3 13791 INTERNAP-BLK3 13792 INTERNAP-BLK3 13793 MATTEL-HIA 13794 QCS 13795 SACHS-GROUP 13796 UCONN-ARIN 13797 BIZTRANS-TECHNOLOGY 13798 NETJAVA-NET 13799 POWERQUEST 13800 MOBILEDATA 13801 ASN-PROFESSO-NYC 13802 NRCASN 13803 E-SYNCNET 13804 MARKETDAY 13805 WORLD-COMMUNICATIONS 13806 NCRCORP 13807 IKON-TECHNOLOGY 13808 WEBPERFECT 13809 UAMS-ASN 13810 OAO 13811 MSLI 13812 1999FISHERSYS 13813 DITECH-COM 13814 ART-SJ-1 13815 11THENETCONNECTION720 13816 BLUEBONNET 13817 RWAY-NET1-SYRNY 13818 PHX-INTL-TELEPORT 13819 FWIN-NET 13820 BALLOU 13821 ACML 13822 UCASYS 13823 CALYX-USA 13824 VIGORIS-AS1 13825 FASTWEB 13826 E-OFFERING 13827 ASN-STEADFAST 13828 I2K 13829 HYPERION-SOLUTIONS 13830 PROPERTYFIRST 13831 NAS-COM 13832 ATG-COM 13833 ASN-NOS 13834 AGLRSC 13835 IMPSAT-ARG 13836 ISLAND 13837 P-ECOM 13838 LIVING 13839 HANDSPRING 13840 SHERIDAN-HEALTHCORP 13841 IHSENERGY-DENVER 13842 TXK-NET 13843 PHOENIX-AMERICAN 13844 LL-NET 13845 WEBACCESS 13846 INTERACTIVEMARKETING 13847 ARINET 13848 ARIBA 13849 BRAZORIA-NET 13850 ENRONONLINE 13851 LIND 13852 UTILICORP 13853 NW-NETWORK 13854 JSE 13855 CFU-NET 13856 INFINETWORX 13857 ONLINEMAC 13858 COLUMBIAENERGYGROUP 13859 CERNER 13860 LFG 13861 ASN-NETAL 13862 RECOM-SYS 13863 ALVAKA 13864 UNIONPARTNERS 13865 HLPUSD-NET 13866 CCOUNTRY 13867 MYSIMON-CORPORATE 13868 PEAK 13869 IXC-TELECOM 13870 MINDFRAME 13871 TELEBYTE-NW 13872 TAMARACK 13873 KAPLAN 13874 OPENLINK 13875 PGEX 13876 DIGITALMATRIX 13877 WENDYS-DUBLIN 13878 DIGINET 13879 SITA-EQUANT-MPLSNET 13880 ACI-AS 13881 PARADOX 13882 HLIC 13883 BB-FAX-SERVER 13884 ASN-THEPLANET 13885 DUNDEE 13886 C-GATE2000 13887 CALLWAVE 13888 BEARCREEK-AS 13889 INTEX-SOLUTIONS 13890 SITESTREAM-01 13891 INTLINE-COM-INC 13892 BIPERFORMANCE-ASN 13893 ERAC-CORP 13894 SECUREWEBS 13895 WMG 13896 COBALTNETWORKS-AS 13897 CDC1 13898 LIBERTYENTERPRISES 13899 KRICKET 13900 WWW-SCIENCES 13901 WIZNET-ASN 13902 DKGINTERNET 13903 KCINET 13904 COSLINK 13905 MAJIQ 13906 AVTC 13907 JTC-SOUTH-AMERICA 13908 BLOOMBERG-700 13909 MESSAGEMEDIA-BLK1 13910 REGISTER 13911 TERA-BYTE 13912 COMMTOUCH-INC 13913 GIFTCERTIFICATES 13914 ASN-CDLBH-BR 13915 INNOLOG-ATC 13916 COSUSA-AS1 13917 NETMAGIC 13918 CITYOFTUCSON 13919 ALLDATA-NET01 13920 ASN-TGNT 13921 I-T-E 13922 CHIPSHOT 13923 CONVERGENCE 13924 IDS-UCI01 13925 CHEMICALDESK 13926 EMPIREONE 13927 ISI-IMT-E-TROOP 13928 DIGITALMATRIX2 13929 TECHNISYS 13930 UGO-NOC-ARIN 13931 UNIVANCE 13932 FIX-NET 13933 SHAWPITTMAN 13934 APUNET 13935 AMCHAMNET-BR 13936 SINTESOFT 13937 PACCOAST 13938 SSNC-AS 13939 IPEXPRESS 13940 SJCOE 13941 VISP 13942 CREDITCARDS 13943 YK-COMMUNICATIONS 13944 ASN-ENTERZONE 13945 TTSG 13946 WOLSI 13947 SILVERLINK-NET1 13948 PIXELON 13949 GAMESPY 13950 FSINET-AS 13951 CENTER-SEVEN 13952 BD-08-99 13953 NASDSL-AS 13954 CORPORATEEXPRESS 13955 VANKAMPEN 13956 FUTUREDONTICS 13957 ASN-NETSET 13958 LONGABERGER 13959 NETSCORP 13960 AOTECH 13961 ELI-COLO 13962 AS-HISPEED-1 13963 VALLEYNET-ISP 13964 SBCIS-TPKAKS 13965 SBCIS-FYTVAR 13966 RAZORFISH-NEW-YORK 13967 YESMAIL-ASN 13968 CAISO-NET-BLK 13969 NTOWN 13970 INSATEL-LATAM 13971 INDIVIDUALINVESTOR 13972 WADSWORTH-CENTER 13973 ASN-REACTION97 13974 R2KLLC 13975 HAVENSSTEEL 13976 STARCD 13977 SMARTHOMEBUY 13978 ITOOLCOM 13979 ATT-IPFR 13980 MAINECOAST 13981 MPIAS-COM 13982 INSYNQ-NET 13983 EPRIME 13984 BIT-NET 13985 SINEWAVE1 13986 ECSIS-HST 13987 IVANET-LONDON 13988 IVANET-FRANKFURT 13990 COUNTYOFORANGE 13991 CURINFO 13992 AMHEART 13993 MOTIVE-COMM 13994 OMU-1 13995 MBCC 13996 ECHOSTAR 13997 FLASHLINE 13998 SWMED 13999 MEGACABLE 14000 AXTELNET 14001 VISION-NET 14002 RAILINC 14003 SMS800-PRODUCTION-STL 14004 FORCE3 14005 Y2K-ICC 14006 BRANTHYDRO 14007 SOHOSKYWAY1 14008 OPTIKAINC-ORG 14009 INTERACTIONCOMM 14010 JACKHENRY 14011 DESIGNDATA 14012 PSGHS 14013 HEALTHAXIS-ASN 14014 CNRAIL-AS 14015 RWBECK-AS 14016 FAX2NET 14017 BNSF-AS 14018 EZLINK 14019 MORTICEKERNSYSTEMSINC 14020 FICOMNETWORK 14021 PSECU 14022 BBCOM 14023 AICS-NET 14024 DDCI 14025 EZL-DOT-COM 14026 DIALDATA 14027 ICS-INC 14028 FULBRIGHT-JAWORSKI 14029 DC-ECONET-ZW 14030 FINEP-AS 14031 SCXY 14032 IMATION 14033 LYNK 14034 MLMEDIA-AS 14035 PAYERPATH-ASN 14036 AMERISERVE 14037 NESCROW 14038 SAVANTNET 14039 V-SPAN 14040 XO-ASN1 14041 FRGP 14042 UNIVERSAL-INTERNET 14043 SCANSOURCE 14044 LEGION-WI 14045 ENVOY 14046 KCOL 14047 AMERIMARKETTECH1 14048 MEMPHIS-EDU 14049 GOLDEN-GATE-UNIV 14050 EVENSTREET 14051 RCSIS 14052 SPACEAGE 14053 DORSEYWRIGHT-ONE 14054 CYBERSTATION 14055 GRS-SAU 14056 SEI 14057 CODSL-ASN 14058 TROPITONE 14059 WEBLICATIONS 14060 NNCGATEWAY 14061 LIQUID-AUDIO 14062 MIDAMERICA-NET 14063 PAYNET-NETWORK 14064 IISG 14065 GSCOM 14066 DISPATCH 14067 1800DAYTRADE 14068 PLAYBOY-BLK-1 14069 TCSA 14070 PTN2 14071 COMMUNIQUE 14072 WASH-DC-CITY-GOVT 14073 CLICK-INTERCONNECT 14074 COLGATE 14075 VCRT 14076 REDHERRING 14077 ARSC 14078 CANNECT 14079 EZGOV 14080 FIRSTCOM-COLOMBIA 14081 COOLSAVINGS-2 14082 GLOBAL-ONLINE 14083 CITRIX-AS 14084 MULTIPHONE-NET1 14085 WIRED-ENTERPRISES 14086 LENDERS-SERVICE 14087 LOL 14088 WIU7 14089 CANNET 14090 NDTELCO 14091 DSM 14092 NJACCESS 14093 ITRIBE 14094 MASTERFINANCIAL 14095 WEBEXGC 14096 INDEXSTOCK 14097 TELUSA-AS 14098 L-I-T 14099 LIPSTREAM-ASN-001 14100 UCIX 14101 NTON-NGI 14102 JONCTION 14103 ACDNET-ASN1 14104 THENET-I2 14105 PEARLNET 14106 RAREMEDIUM1 14107 PCIWEST-PN001 14108 MAMAMEDIA 14109 SIAL 14110 GENESYS-ASN 14111 SALTEL 14112 NET-SECURENET-MTL 14113 EXPRESS-TECHNOLOGIES 14114 EMAGINATION 14115 AMALGAMATED-BSA 14116 INFB-AS 14117 TELSUR 14118 INTERTAINER 14119 UTMCK 14120 FINGERHUT 14121 CIBC-WORLD-MARKETS 14122 ASN-VECTOR 14123 SFSNET 14124 IPCC 14125 VIRTUALSELLERS 14126 WITNET 14127 ILAND 14128 BEDFORDNET 14129 NMIA 14130 ASN-SOUTHNET-AL 14131 DONET 14132 INTERNETGATEWAY 14133 ELIXISCORP 14134 NAVISITE-WEST-2 14135 NAVISITE-EAST-2 14136 PCCC 14137 MIDMICH 14138 REES 14139 PANDESIC-ONLINE 14140 INTERCHANGE 14141 AMX 14142 KEWILL-US 14143 GERALDSTEVENSINC 14144 ASN-CI 14145 SPECTRUM 14146 LEVENGER 14147 CNCI-NET1 14148 ENDINFOSYS 14149 ICONFITNESS-MAIN 14150 AMERICANISP 14151 ASN-ICI-ORG 14152 INTTEL-ASN 14153 SYNCOMMASN01 14154 HUDSONET 14155 RURAL-TELEPHONE-SVCCO 14156 SAN-MARCOS-INTERNET 14157 INTUIT-CANADA-EAST 14158 MBUSA-LTINET 14159 ROCKRIVERINTERNET 14160 WINFIRE 14161 LANDOLAKES 14162 PCENERGY 14163 SHEARMAN 14164 THEBIGLOAN 14165 COSMOZASN 14166 SOFTCOMCA 14167 MULTI-AD 14168 POTOMACNET-ASN 14169 MEAD 14170 CANONCITYSCHOOLS 14171 REEDTECH-GW01 14172 ADVANCED-PROJECTS 14173 ENTREVISION 14174 NCKCN 14175 HAWORTH 14176 SEACOVE 14177 PACKETXPRESS-NORTEL 14178 MCM-TELECOM-MEX 14179 ITSS-1 14180 INTERNETPRO-GAD 14181 MAUIGATEWAY 14182 EDATA 14183 UALR-ASN 14184 DATAGLYPHICS 14185 GC3 14186 NETCOM-S-A 14187 COMSATCOL 14188 ASHLANDFIBERNETWORK 14189 FIREDROP-SJ 14190 FUTURESHOP 14191 HSL 14192 RPII2122086500 14193 MCC-SYSTEMS 14194 VISTRANET11600SUNRISE 14195 LOFTNET 14196 CARDCOM-AS 14197 BEAR-COM 14198 ASN-NEVIS 14199 HARCOURT-SD 14200 AKOO 14201 TELETECH 14202 GEONET-MDE 14203 JUNIPER-NETWORKS 14204 TKSTELE 14205 WANC 14206 DPTI 14207 REDBACK 14208 KPCORP 14209 UT-CHATTANOOGA 14210 WNCLINK 14211 HUBSERV 14212 SANTA-CRUZ-EDNET 14213 MONTEREY-BAY-K12 14214 VALINUX 14215 REFLEX 14216 ISHIP 14217 DATAFRAMELO 14218 ASN-ECIS 14219 TRIBUTEINTL 14220 NWAISP 14221 ICSS 14222 MAVER 14223 NYSDOH 14224 PYGMY 14225 DELAWARE-ONLINE 14226 TWP-TAILWIND 14227 FORBIN-COM 14228 CVM-TROY 14229 WMS-CHICAGO 14230 CSW 14231 BDV-AS 14232 TELPINET 14233 ANCESTRY-INC 14234 ZFM-ANTEL-PANAMSAT 14235 STATE-NM-US 14236 NETPLIANCE 14237 PROPOINT 14238 ASR-ISP-01 14239 WIRELESSKNOWLEDGE 14240 PMC-AS-1 14241 NUTEL 14242 LOGICALSOLUTIONS 14243 SIGHTPATH 14244 T-ONE-INTERNET 14245 SEGAOADC 14246 CHEMDEX-AS 14247 SBIS-WACOTX 14248 PANJA-01 14249 MPSNET 14250 DATASYS 14251 MLSLI 14252 SCHOOLSPECIALTY 14253 TSSL 14254 AUNET-US 14255 CINNETIC 14256 GO-EASY-ACCESS 14257 EZ-NET 14258 ANYLOAN-CORP 14259 GTD-INTERNET 14260 USROYALINS 14261 USNETWORK-ASN 14262 P-MAN 14263 DAKOTA-DIGITAL 14264 CONCOURSE-C 14265 US-TELEPACIFIC 14266 IPAG 14267 PTC 14268 BROOKMAYSMUSIC 14269 VA-DMV 14270 RADIOWAVE-COM 14271 LAMC-NET 14272 ACSNET 14273 ONLINE-RESOURCES 14274 NETEASE 14275 WEATHERNET 14276 CONNEXT-SEATTLE-WA 14277 NOKIAIPNET 14278 NORSTAN 14279 WEBCOMBO 14280 NETNATION 14281 MISSIONCRITICALLINUX 14282 NET21 14283 INHERENT-COM 14284 ROCKHURST 14285 ASNBANCOMERCANTIL-1 14286 TECNET-SA 14287 USAESOLUTIONS 14288 DURO-MPINET 14289 1SOURCE-TECHNOLOGIES 14290 ORGANIZER-SYSTEMS-INC 14291 ANTIETAM 14292 DISCNET 14293 WPGINVEST 14294 LIBERTYTEL 14295 CWIA 14296 NETALLIANCE 14297 S1-PROD-DATA-CENTER 14298 EPA-NET 14299 ADP1 14300 BALT-VOIP 14301 BOS-VOIP 14302 NNJ-BELLATLANTIC-VOIP 14303 NYC-BELLATLANTIC-VOIP 14304 PHIL-VOIP 14305 WASH-VOIP 14306 GLAXO-WELLCOME 14307 WEBTANK 14308 OAG-WORLDWIDE 14309 G2ANET 14310 WAMNET-AS 14311 XO-ASN2 14312 1-800CONTACTS 14313 BOSTONNETWORKS 14314 GW-SUPERIORTECHNICAL 14315 HDMPEARSON 14316 TWINNEYVILLE 14317 ACCNETWORKS 14318 PSINET-CL-ASN 14319 BDXP 14320 GENEX 14321 SERVICIO-UNITELLER 14322 ARLINGTON-CG 14323 AXIENT 14324 TAFG 14325 OSHEAN 14326 CONCEPT-NET 14327 PGE-ONLINE 14328 RRD 14329 OPEN-ACCESS-TECH 14330 DIGITAL-INSIGHT 14331 TCM-NETWORKS-0098 14332 MIDDLE-NET 14333 ON-RAMP-INDIANA 14334 LEARNINGSTATION 14335 CONTERRA-COMM 14336 ESUHSD 14337 FWHT-FL1 14338 PROSOLUTIONS-ASNUM 14339 SADESA 14340 SALESFORCE 14341 MAILBITS 14342 ADN-INTERNET 14343 I2-TECHNOLOGIES 14344 MSDW-CLIENTSERV 14345 CRESCENT-TECH 14346 OESPNET 14347 POWER-NET 14348 URI-AS 14349 KCPLASN-1 14350 BLASTNET-ISP 14351 SOUTHWESTERN-EDU 14352 AS-ONEM-CORP 14353 IGO 14354 XPLAIN 14355 GETRELEVANT 14356 MAPICS-INC 14357 VETCENTRICASN1 14358 MACKENZIEFINANCIAL-AS 14359 ITS-USNET 14360 OBSIDIAN 14361 HOPONE-DCA1 14362 CCIS 14363 OUTFITTERS 14364 HARDING-LAWSON 14365 BIZNET-2 14366 MTNCABLE 14367 USLINK-PEQUOT 14368 INTERWEB-NETWORKS 14369 NMAX 14370 EUREKA-BROADBAND 14371 PBNET 14372 RPAWIRELESS 14373 UTMB 14374 AGRI-VALLEY 14375 ALTRA-ENERGY 14376 SIS-EAST 14377 PSI-PANAMA 14378 INTERLINK-1 14379 N-T-C 14380 OPUS-CREATIVE-GROUP 14381 CATERPILLAR-INC 14382 OIB 14383 OPTICNET-AS 14384 OPTICNET-AS 14385 OPTICNET-AS 14386 OPTICNET-AS 14387 OPTICNET-AS 14388 OPTICNET-AS 14389 COMPSOL-NET 14390 CORENET 14391 PROBIZ 14392 ABQ2-DOM 14393 SILVERBACKTECH 14394 KBCFP-NYC 14395 FHLBATL 14396 IVANET-BURLINGTON 14397 IDG-WEB 14398 AUTODESK 14399 FLASHNET-AS3 14400 IWIDGETSNETWORKS 14401 ROLLINS-LEASING-CORP 14402 VWPT-AS 14403 TUCKER-USA 14404 DIRECT-ALLIANCE 14405 XO-ASN4 14406 XO-ASN3 14407 XO-ASN5 14408 AIAC 14409 TRIP-COM-AS 14410 DALTON 14411 WWCDLR-ASN 14412 VIRTUALBANK 14413 AVT-MEDIALINQ 14414 AMERICAN-MOBILE 14415 DOWNTOWN-XCEED 14416 BRAVO-NET 14417 LANDSTAR 14418 DTCC-AS1 14419 CREATIONSNET 14420 ANDINATEL-AS 14421 ADVANCED-MEDICINE 14422 SIMPLIX 14423 MEDIAPASSAGE 14424 ASN-ADERO 14425 MENDO-COMMUNITY-NET 14426 NET1-INC 14427 INFOTECSOLUTIONS 14428 EXTENDEDCARE 14429 SONOROUS-NETWORKS 14430 NCT-BACKBONE 14431 LOGICALCONSULTING 14432 CMEDIAINCNET 14433 SUNY-OSWEGO-ASN 14434 VITELCOM 14435 INTERNETWEBS3201 14436 INTUIT-MV 14437 FLEMING 14438 USA-CHOICE-OIL-CITY 14439 ROGERS-CORP 14440 CYTECH 14441 WEBHOSTING 14442 LIBERATE 14443 OTS-YOURACCOUNTS 14444 MAM207 14445 AOSYS-ABQ 14446 CNT-ASN 14447 IHIGH 14448 DERIVION-CORP 14449 IDIGI-NET 14450 GEICO01 14451 GEICO02 14452 IOS-ASN 14453 NETSURF 14454 CYBERGNOSTIC 14455 COMDISCO-1 14456 PUC-CA 14457 TELEMIGCELULAR-BR 14458 CCPC-ASN-1A 14459 TELECOMP 14460 RADISYS-HILLSBORO 14461 NTSL 14462 CYSHOP-COMMERCE 14463 TDKOM 14464 RINET 14465 BURLEE 14466 FREEMARKETS 14467 KUA-NET 14468 ACENETX 14469 DSLDESIGNS 14470 ATT-PWSS-2 14471 ENCODING 14472 FIBRETECH-TEL 14473 KNET 14474 CONCENTREX 14475 PREV-TRAV 14476 PANDANET 14477 SOLBRIGHTASN 14478 BAYTSP 14479 TBTOR155 14480 CTTEL-2 14481 SERVICEMERCHANDISE 14482 BENECO 14483 INLAND 14484 EOS-AS 14485 KEWILLERP-JOBBOSS 14486 OXY-AS 14487 VIDEONETWORKS 14488 CAPITALTHINKING 14489 DENDRITE 14490 EXTRNET 14491 FGLIFE 14492 HI-SPEED 14493 INTERACTIVE-SEARCH 14494 EPINIONS 14495 NASDAQTRM 14496 AGILENT-AS 14497 EID-1 14498 EQUITY-PLUS-FINANCIAL 14499 HUSSMANN-CDC 14500 INTERDESIGNS 14501 CIHOST 14502 TRAVEL-NET 14503 HOOVERS 14504 EUREKA-BROADBAND-2 14505 ISLC 14506 JAFFCOMM-NET01 14507 ALTAIRE 14509 OPTICNET 14510 COREEXPRESS 14511 POLAR-COMMUNICATIONS 14512 EDDIEBAUER-1 14513 OPTICNET-2 14514 PHJW 14515 STATENET 14516 INVESTEC-2 14517 REACHONE 14518 FLEISHMAN-HILLARD 14519 EBONDTRADE 14520 NEWINET 14521 PACIFIC-LIFE 14522 SATNET-SA 14523 LEWISIG-ASN-R01 14524 ICELEBRATE 14525 EPIDEMIC 14526 AGILLION-ASN1 14527 CABELAS 14528 OPTICNET-ASN-BLOCK 14529 OPTICNET-ASN-BLOCK 14530 OPTICNET-ASN-BLOCK 14531 OPTICNET-ASN-BLOCK 14532 CBOSS 14533 CSC-FSG 14534 CYBERAGENCY-FTL 14535 DIPER 14536 ASN-SOL 14537 MOHAWK-INTERNET-AS 14538 INTELLISWITCH-NY 14539 COTELLIGENT 14540 CERTICOM 14541 GE-AIRCRAFT-ENGINES 14542 HOLLYWOOD-INTERACTIVE 14543 SRT-ASN 14544 RETEK 14545 MACI 14546 MIDWESTINTER 14547 RPTK 14548 LISTEN-SF-1 14549 CYBRTOWN 14550 MIDDLEBURY-COLLEGE 14551 ALTERNET-SA-AS 14552 SKILLLEARNING 14553 PUC-RIO 14554 NY-INTERNET-CENTER 14555 KENDARA 14556 INBUILDING 14557 ACCESS-ORLANDO 14558 DANDY 14559 GLOBUSANDCOSMOS 14560 IHOLDING 14562 VIDEON-AS 14563 MICROCAST 14564 ELECTROLUX 14565 TEKNET 14566 ACS-INTERNET 14567 CLIPSCOM 14568 NAVL 14569 MP3-COM 14570 CYBERCONNECTICS 14571 IGB 14572 GLOBAL-ROUTE 14573 KEYSPANENERGY-NE1 14574 RTCCOM 14575 RIVALS-COM 14576 VIPIS-NET 14577 PTNC 14578 WMJBGABL99 14579 EDWARDJONES 14580 PTELCORP 14581 UAI 14582 BUSINESSONLINE 14583 COLONY1 14584 BAKER-AND-TAYLOR 14585 CIFNET 14586 FITCHIBCA-NEWYORK 14587 GIANT-CR 14588 COMSAT-INTERNATIONAL 14589 DIGITALWEST-NET1 14590 DESERTSCHOOLS-ASN-1 14591 SWPNET 14592 NORTHGATE-ASN 14593 BRAND-INSTITUTE 14594 INNET 14595 ECONEX 14596 COMPUTERCONCEPTS 14597 DETM10777 14598 FCS-AS 14599 DNC-INTERNET-SERVICES 14600 SNG-NET 14601 INTRACOMCORP 14602 GENEVACO-1 14603 INTERNET-PR 14604 NFRONT-ATL 14605 DETTER-DESIGN 14606 TRENDWEST 14607 OTA-LTD 14608 AFS-1 14609 EQUINIX-CORP-AS 14610 FUSAFS 14611 VANGUARD 14612 2656MAINSTREET 14613 TELECOMRG 14614 FUZION 14615 FUTURESTEP-CA 14616 IVANET-AMSTERDAM 14617 MICROTECH-TEL 14618 TSICABLENY 14619 RANGENET 14620 INTRACONNECT-1 14621 NPSNET 14622 CORP-BUYANDHOLD 14623 QUADNETCOMM 14624 PSINET-BRAZIL 14625 RISCO 14626 COLUMBIA-HCA 14627 PARKCITYNET 14628 SMUD-ELECTRIC 14629 SOLUCIAN 14630 AIM-MANAGEMENT 14631 CALIFORNIA-GOV-PR 14632 MAGSNOW 14633 TRANSTEL 14634 SPINNNET 14635 GASONICS 14636 INTERNAP-BLK4 14637 PRESTIGE-CABLE 14638 IMARK-COM 14639 ALLEGIANCE-AS1 14640 COMPGEEKS 14641 HANNAFORD 14642 WORLDSTREAM 14643 PULSITY 14644 IONCOMPUTER 14645 ACTIVEWEBSERVICES 14646 LOGANREC 14647 NETOS-ASN1 14648 RANDFINANCIAL 14649 NEBS 14650 VANT 14651 RSLCOMCA-1 14652 COSTARGROUPASN 14653 C1-INET 14654 WAYPORT 14655 INTERNET-WISCONSIN 14656 VIVIANCE 14657 WEBSERVEPRO 14658 SPACEY-NET 14659 LIVEPERSON 14660 INTERSURVEY-217691 14661 LAURENTIANU 14662 EPSONAR 14663 CLEARNET 14664 IFXNW-AS 14665 REWARDSPLUS 14666 MENDELSON-ASSOCIATES 14667 MYLINUXISP-01 14668 G-BONE-NET 14669 RINC-NET 14670 SMARTNET 14671 TACONIC 14672 CARROLL-NET 14673 SITESMITH 14674 DILHARD 14675 PARABLEGROUP 14676 DEVELOPMENTDIMENSIONS 14677 CLICK-NETWORK 14678 BROKERSYS 14679 WEBMASTER 14680 TELERA-AS 14681 ROOTSWEB 14682 GGS 14683 INTRAWARE-ORINDA 14684 LOUISVILLENOC 14685 COUNTRYWIDE-CREDIT1 14686 YISI 14687 NATIONALLIFE 14688 GVSI 14689 AGEDWARDS 14690 PEORIAUSD11 14691 AEACU-ROUTEDOMAIN 14692 PSINETSTI 14693 WESTCON-1 14694 LOGICTIER 14695 HOMESEEKERS 14696 E-ASSIST 14697 VDOTNET 14698 CLEARSOURCE 14699 BTCBCI 14700 GAZOOBA 14701 COLLECTIVETECH 14702 ARGONNE-WEST-AS 14703 MAQSNET 14704 COMSCAPE-TELECOM 14705 INTER-TAINMENT 14706 LB1 14707 AS-MADGEUS 14708 WEBHOST-ASN 14709 BELLSOUTHPANAMA 14710 COX-OMAHA 14711 NETWORK-TRAINING 14712 WHITNEY 14713 ICI-HSNP 14714 CONCERT-ASN 14715 NICORINC 14716 LIGHTHOUSE 14717 ECINET 14718 GSIT220E42 14719 BCENTRAL-AS 14720 WARPSPEED 14721 IPING 14722 WEBCONNECTRIXINC 14723 BMS-BR 14724 PROCARERX 14725 KEMPER-TECHSERVICES 14726 BLUE-MOUNTAIN-ARTS 14727 TECHLINE 14728 PCRDATACOM 14729 TIER1NET 14730 CAVTEL01 14731 NETWAY 14732 THESTREET-COM-AS2 14733 BARCAP-NORTH-AMERICA 14734 LASERLINK-NET 14735 CREATIVE-CHANGE 14736 VELOCITYENTERPRISES 14737 CCCOES 14738 DIGIKEY 14739 WCFU-UTAH 14740 ETBYTE-NET 14741 NETWORKS-WEB-HOSTING 14742 INTERNAP-BLOCK-4 14743 INTERNAP-BLOCK-4 14744 INTERNAP-BLOCK-4 14745 INTERNAP-BLOCK-4 14746 SUMMIT-SOLUTIONS 14747 SHOPNOW 14748 DAYCO 14749 AVGO 14750 SIERRA-TEL-INTERNET 14751 CONVERSENT 14752 FREEDOM-NET 14753 SMARTMONEY 14754 TELGUA 14755 MHO 14756 PROGNOSTICS 14757 DSW-NET 14758 CAJUNNET-ASN 14759 EICISA 14760 CCMCOMPUTER 14761 MOCC 14762 AMGEN 14763 CJI 14764 SUNGARD 14765 TECHE 14766 ABCIMAGING 14767 THEAIMSGROUP 14768 STOCKSCOPE-AS1 14769 I-SOLUTIO 14770 APPLIEDCARD 14771 STONEAGE 14772 SOURCEALLIANCE 14773 ZAPME-30 14774 CCMNET 14775 C-COR 14776 INKTOMI-LAWSON 14777 INKTOMI-LAWSON 14778 INKTOMI-LAWSON 14779 INKTOMI-LAWSON 14780 INKTOMI-LAWSON 14781 INKTOMI-LAWSON 14782 EVELOCITY-NETWORK 14783 SCANSOFT 14784 CPR 14785 POGO 14786 NETCHIEF-NET 14787 ASN1GUARD23ATTWINSTAR 14788 LALLY-MCFARLAND 14789 DONORNETWORK 14790 CENTRILNET-CMI 14791 ASN-CENTRAMEDIA-ISP 14792 DST-ASN 14793 INTEGRITYONLINE12 14794 AIRLIANCE 14795 BCI 14796 CVC-INTERNET 14797 OUTPURCHASE 14798 WESTARTECH 14799 EXP-EC2000 14800 METRATECH 14801 HPU 14802 AVEO-INC 14803 SEGACOM 14804 DYNAMEX 14805 WAVO-CORP 14806 BUY-COM 14807 TRADING-EDGE 14808 PONCACITY-NET 14809 CCI-INTERNET 14810 ADCOM 14811 HELLMANN-US 14812 CIBOLAES 14813 GRAYBARON 14814 TRVNET 14815 MYCFO-ASN 14816 AMDAHL-CORP 14817 SCL-SHAW 14818 CYBERMESA-ASN 14819 AMER-COLLEGE-OF-CARD 14820 HOMESTORE 14821 SOFTBOOK 14822 MSKCC 14823 FLARE 14824 NEWSOUTH 14825 CONSONUS 14826 AVANA-ASN1 14827 WSDOT-ASN 14828 HBCI-1999TA 14829 ASN-IWON 14830 NOTXWEBSERINC 14831 ANSRTHINK 14832 VAIX-NET 14834 PAIRODOXX 14835 RENTECH 14836 CITY-OF-TORONTO 14837 ART-LA-1 14838 ELDORADOBGP4-1 14839 SARCOM 14840 CONEX-BR 14841 ANDALE-COM 14842 ZCOM-LA 14843 SCREENHOUSE 14844 I-100 14845 UNS-RED-TCP-IP 14846 NBCI 14847 RCG-INFO-TECH 14848 INTERVU-NET 14849 CLEARWORKS 14850 KLEINTECH-INTERNET-AS 14851 SYSTEM-INTEGRATORS 14852 DCX 14853 AOL-MTC3 14854 AOL-MTC2 14855 AOL-MTC1 14856 PINKDOT-AS1 14857 MOTOROLA-ICSD 14858 HISNET 14859 CLASSIC 14860 SC2000AS 14861 ISC-GROUP 14862 OCEANEERING 14863 VISITALK 14864 GREENWICH 14865 LIBERTY-ENTERPRISES 14866 TELIC 14867 DIVEO-COLOMBIA 14868 COPEL 14869 ADAM-COM 14870 INTRAWARE-SC4 14871 YOUNG-AMERICA 14872 PROCURE-NET 14873 C3-COMMUNICATIONS 14874 OSBORNGROUP-HQ01 14875 COMPFIRSTONLINE 14876 QUOKKASPORTS-CORP 14877 VIRTUALINC 14878 FLINTHILLS 14879 SWBT 14880 HOOKUP-JOPLIN 14881 MICROJURIS 14882 QUAD-GRAPHICS 14883 TRACI 14884 ADVANCEDACCESS 14885 SATSOP 14886 ORIGINBR 14887 RETAIL-TECHNOLOGIES 14888 FNBOMAHA-AS 14889 DNRG-DAL1 14890 HAYBOONET 14891 EACOM 14892 STOCKPOINTSF 14893 BOTTOMLINE-TECH 14894 BANK-UNITED 14895 LAWSON-SOFTWARE 14896 CSNOC 14897 E-ACCESS 14898 ODINTERNET 14899 SYLLOGISTICS-REDMOND 14900 USLEC-CORP-1 14901 TAOSNET-NEWMEX 14902 VISTAVDI 14903 BLCLINKS-FLINT-MI-POP 14904 IBMUSF-RTP 14905 CAMPUSPIPELINE 14906 NETSITE 14907 HONESTY 14908 TNT-NM 14909 PNG-TELECOM 14910 CAREERPATH 14911 MOMENTUM-ONLINE 14912 IBMUSF-SBY 14913 MEDIA-NEWS-GROUP 14914 CONNECTSOUTH 14915 HYPERION-SOLUTIONS-SV 14916 JUNROO 14917 FBS-NET 14918 TECHNOVISION 14919 NETLEDGER 14920 BPOP 14921 CATALYST-CAPITAL-COM 14922 NOWDOCS 14923 CM-TEL 14924 NAP-PAIX-VA1 14925 DELTA 14926 IBMUSF-BLD 14927 CREATIVELABS 14928 GEOSERVE 14929 CECOMET 14930 ALLANT-GROUP 14931 STPAUL-W-AS 14932 CELERA-GENOMICS 14933 LONDONCONNECT 14934 VSTECHNOLOGY 14935 MONTICELLO 14936 SVG 14937 DOCUMENT-SYSTEMS 14938 BET-AS 14939 NAVINET-CANADA 14940 OPTICNET-3 14941 OPTICNET-3 14942 OPTICNET-3 14943 OPTICNET-3 14944 OPTICNET-3 14945 OPTICNET-3 14946 OPTICNET-3 14947 OPTICNET-3 14948 OPTICNET-3 14949 OPTICNET-3 14950 NFOR 14951 REL-625 14952 ACCENTURE 14953 SWS-AS 14954 FHCRC 14955 N-V-C 14956 BROADVISION-ASN 14957 HOALE 14958 NATIONS-KS 14959 MODISPRO 14960 DATA-PRO-ACCT-SOFTWAR 14961 RBMG 14962 NCR-252 14963 TMCS 14964 GOINVEST 14965 FBR 14966 LARRAIN-VIAL 14967 IOS-INT-SOL 14968 LESEA-01 14969 IOL1263 14970 NAP-COLOMBIA 14971 RAF 14972 AWWWSOME-NET-SERVICES 14973 SUMMIT-COMPUTERS 14974 VIRTUAL-INC 14975 ABN-AMRO-NA 14976 AZLINK 14977 CORNERSTONE-ALLIANCE 14978 COMPUTER-CLEARING 14979 SSA 14980 RTCOL 14981 KIRKLAND-ELLIS 14982 TURBOWAVE-ASN 14983 XUMA 14984 GLGT 14985 VEROXITY 14986 WPEDUC 14987 NII 14988 BTC-GATE1 14989 BROADVIEWNET 14990 AVNET-NA 14991 ELKNET 14992 CRYSTALTECH 14993 BRICKROAD 14994 I3INC-ASN 14995 MASERGY-AS 14996 NYSEG-AS 14997 NORTHPOINT-COMM 14998 NORTHPOINT-COMM 14999 SKYNETWORKSAS01 15000 TERABEAM 15001 ALLEGRIX 15002 DRUGSTORE 15003 TEGRIS-CORP-ASN2 15004 ROWECOMNA1 15005 NATIONAL-CITY-CORP 15006 IBMUSF-STL 15007 NPC-REGIONS-4-MW-5-SE 15008 NPC-REGIONS-4-MW-5-SE 15009 UNISYS-OUTSOURCING 15010 IT-DIMENSIONS 15011 DESKMEDIA-1 15012 IINC 15013 LINMOR-TECH-INC 15014 EDPWW-EXECOMM 15015 GLOBALINK 15016 NORANDEX-REYNOLDS 15017 CONTACT-EAST 15018 DATAPEX-ASN 15019 TVTAXI 15020 WSOL 15021 NOOSH 15022 ADEPT-ZA 15023 QUIK-US 15024 PACKET-WORKS 15025 CTF 15026 ACXIOM 15027 ACTEL-COMM-MOBL 15028 QVTECH 15029 GEORGE-COM 15030 CORREIONET 15031 VELOCET 15032 AAAIS 15033 GENERATION-21 15034 TIBA-SA 15035 SILICON-VALLEY-N 15036 AXISTEL 15037 KEMET-ELECTRONICS 15038 CAMBINC-1 15039 MSCDIRECT-1 15040 CYBERSURFERS 15041 BILLPOINT-AS 15042 WHAC 15043 GWIS 15044 ECHO-GROUP-AS 15045 KITTELSON 15046 DVIC 15047 NONSTOP 15048 METLIFE-ASN 15049 NETSECURITYTECH 15050 VPNET 15051 DVIN 15052 NETPLUS-ASN 15053 NETBYTEL 15054 TELNEXT-UK 15055 TELNEXT-NA 15056 XO-ASN9 15057 XO-ASN6 15058 XO-ASN8 15059 BLOODSTOCK-RESEARCH 15060 XO-ASN7 15061 ICBC-INET 15062 LOSCH 15063 PWEH-ASN 15064 INTERNET-ARGENTINA-1 15065 SLIC-COM-INTERNET 15066 SKYNET-COLOMBIA-1999 15067 BURR-BROWN 15068 CLICKSHIPDIRECT 15069 SBA 15070 HNV-AS 15071 BAX-BGP 15072 DYNAMICS 15073 APPNETNYC 15074 VIEWSONIC 15075 WIRELESSCOMMPAN 15076 LERWO34OS 15077 MAG-TEK 15078 ASN-TELELATINA-AR 15079 CARCLUB-COM 15080 EDESTINY 15081 ASN-CROS-1 15082 PRIMEINTER 15083 INFOLINK-MIA-US 15084 CONVERGYS 15085 REALITY-ONLINE-NOR 15086 QVC 15087 MEAGTELECOM 15088 FNG-NET 15089 MASSMUTUAL 15090 STARKINVESTMENTS 15091 XPEDE 15092 NETQUICK 15093 SYNIMAX 15094 CPWM 15095 COAIR2000 15096 SONN 15097 WALLSTREETACCESS 15098 VML-COM 15099 ELCOM 15100 BEVCOMM-AS1 15101 RRM-COM 15102 ASN-WIBAND-1 15103 NEWAGECITIES 15104 MBNA-NET-AS1 15105 NETWORKTELEPHONE 15106 SIU-BACKBONE 15107 GFB-BANCOMER 15108 932411002351 15109 ALTER-EGO-NET 15110 BLUEMOUNTAINARTS 15111 HERMANMILLER 15112 GATX-CORP 15113 DATASOFT-DEVELOPMENT 15114 HOSTDEPOT-ASN 15115 MEDIABASE 15116 WEBKORNER 15117 ANHEUSER-BUSCH 15118 SIU-BB-2 15119 SIU-BB-2 15120 SIU-BB-2 15121 CALTEL-COM 15122 KVN 15123 LATINNODE 15124 CHICAGONET-NET 15125 COMSAT-PERU 15126 LATINFUSION 15127 REALITY-ONLINE-2NOR 15128 PETOPIA 15129 TRICOM-IL 15130 USDOJ-GOV 15131 MEGNET-SPOKANE-NETWRK 15132 CITYNATIONALBANK 15133 NEXUS-ISP-NJFL-LASZLO 15134 IMPRESSE-COM 15135 IBUYLINE 15136 AS-GNC2000 15137 VECTRIX-DALLAS 15138 GLOBALTRON 15139 PANASONIC 15140 AZURIX 15141 ASN-BAUSCH-LOMB 15142 ADSNET-COM 15143 HYPERBANNER 15144 TEKINTERACTIVE 15145 GLOBALSCAPE 15146 CABLEBAHAMAS 15147 E-VEND 15148 BLACKBAUD-ASN 15149 EZZI-101-BGP 15150 BELLTECH-AS 15151 CIGB 15152 SPEEDFACTORY 15153 INTERSTARCOMM 15154 SBBSNET 15155 INTELLIMARK 15156 CARGOLARGO-1 15157 NORWORLD 15158 TOTAL-INFO-SERVICES 15159 PEER-POINT 15160 BMO-SCARB 15161 STRADLEY 15162 CRICKETCOMM 15163 MTD 15164 REPLYNET 15165 HELLONETWORK 15166 TCNJ 15167 SECTORBASE-COM 15168 LOANTRADERINC 15169 GOOGLE 15170 MATCHNET 15171 BLUEGRAVITY 15172 NETDOTCOM 15173 WAHOOCOMMUNICATIONS 15174 NETSALES 15175 ACC-1 15176 AS-INOC 15177 ENVISIONET-US1 15179 ALLOUTDOORS 15180 DIVEO-BRASIL 15181 ECHOWEB-LLC 15182 ALCATELIND 15183 POWERWAVETECH 15184 NRTC-ISP 15185 HIBBERT-EAST 15186 SUPERUSER 15187 OHIOHILLS-COM 15188 DIALI-INTERNETWORK-01 15189 LSFI-INTERNET-AS 15190 GATXCAP 15191 WAN-TECHNOLOGIES 15192 TELENISUS-0001 15193 APPLIX-WAN-ROUTER 15194 CONSORTIO 15195 BANK-2UNITED 15196 TJMC 15197 RAETEK-NET 15198 EAZNET 15199 IMSURENETWORK 15200 FOODTRADER 15201 UOL-BR 15202 APDI-151-200-110-0 15203 INTERNET-COLORADO 15204 MIMECOM 15205 OVEN 15206 MDSG-PACWEST 15207 TBC 15208 S-D-I-I 15209 LEAPNET 15210 NNEX-ASN 15211 COMMSCAN 15212 BSIS 15213 THIGNET 15214 MERCURY-INTERACTIVE 15215 FARMERS-NETWORK 15216 HOSTWAY 15217 LOUDCLOUD00 15218 COX-OKC 15219 TELTRUST-TELESERVICES 15220 BLINK 15221 VANION 15222 ITCA 15223 TXWES 15224 MYCOMPUTER 15225 PERSECO 15226 SV-BLK-1 15227 WVFIBERNET 15228 NEVADAHOSTING 15229 JPC 15230 HOMESTEAD 15231 VIEWNETHQ 15232 EBASEONE 15233 WEBSITEPROS 15234 BERTMEDIASYS 15235 TIME-CUSTOMER-SERVICE 15236 UNIV-DE-COLIMA-MX 15237 ISTARTVENTURES 15238 GATESFOUNDATION 15239 KOZMO 15240 PARTICIPATE-COM 15241 UNETEPANAMA 15242 ICAST-IBEAM-NET 15243 WIDENER 15244 JAJONES 15245 HHI 15246 TELESATSA 15247 RADIANT-VANCOUVER 15248 K2NET 15249 P-S-B 15250 CONCEPT-SHOPPING 15251 GRAND-CENTRAL-STATION 15252 ESCAPE-AR 15253 CIERRASOL 15254 CCP-ASN1 15255 BISK 15256 BANESTADO 15257 CERIOUS 15258 PALM-NET1 15259 ATT-ITSNCS-1 15260 BVIG 15261 CENTRA 15262 HELLER-FINANCIAL 15263 GALLUP1 15264 DAEDALUS-TECHNOLOGY 15265 ISPOT-SC 15266 CSGI 15267 702COM 15268 MDARCHIVES 15269 PAI-AS 15270 AS-PAETEC-NET 15271 FHS-INC-ENT-NET 15272 ONLYLINK 15273 WEBSCOPE 15274 HOUSE-INTERNET 15275 GREENFIELDNET-WLT-CT 15276 MAX-LV 15277 I-NET 15278 SAVVY-NET 15279 CENDANT-08054 15280 EPICCENTRAL-DALLAS 15281 OFFICE-COM 15282 SAKON-NET 15283 VIAGENIE-IPV6 15284 THGNET 15285 IIS-ADMGR1 15286 IIS-AUTOBENE1 15287 O-H-C 15288 ALCATEL-NA 15289 VNI 15290 ATTCA-IES-AS 15291 POLAROID 15292 FORINDIA-NET-SERVICES 15293 ASN-ISS-ATL 15294 JATO 15295 AS-BROADBASE 15296 NETERA 15297 EPLUS-ASN 15298 INDIAINFO-NJ-01 15299 COLUMBIA-MANAGEMENT 15300 4IMPRINT 15301 STREAMSEARCH 15302 WRQ-NET 15303 NIKE-SECURITIES 15304 EXTERNET-WORLD 15305 LINKTEL-NETWORKS 15306 SELLS 15307 CHILDRENS-SEATTLE 15308 B-A-C-S 15309 SUBMITORDER-COM 15310 PHARMASMARKET-COM 15311 TIE 15312 CYBERNETENTERTAINMENT 15313 PACKETEER 15314 JENZABAR-ASN1 15315 IVANET-CAMBRIDGE-1 15316 IVANET-VANCOUVER 15317 ENCRYPTIX 15318 WINE-AS 15319 BSWD1 15320 PRIMELINK 15321 CPSHIPS-AS 15322 FIRSTCOMINC 15323 MDLI 15324 ECIRCLES 15325 TPK-NET 15326 NETTHEORY 15327 PRINTCAFE 15328 QROUTE 15329 CUSTOMEDGE 15330 CORPORATE-INTERLAND 15331 JTEL 15332 IPB 15333 TRWASP 15334 RESPONSYS 15335 KAPLAN-TELEPHONE 15336 SAMEDAY-COM 15337 WRHARPER 15338 BOSTON 15339 3HT 15340 CVI-BORDER-1 15341 ALLEGHENYINTEL 15342 DDPMI-1 15343 AM-EX 15344 BRANDERS 15345 NET-BALL 15347 TELESPECTRUM 15348 TUCOWS 15349 SPEEDUS 15350 WHN 15351 KADCAPNET 15353 GNAC-PA 15354 LIBERTY-MUTUAL 15355 BNP-COOPERNEFF 15356 THEBANCORP 15357 AISMEDIA 15358 JONESINTERACTIVE 15359 AS-ARTISANNETWORK-ATL 16384 NET-PORT 16385 BNYESI-AND-CO 16386 OPTICNET-4 16387 OPTICNET-4 16388 OPTICNET-4 16389 OPTICNET-4 16390 FT-ASN 16391 CELITO-1 16392 PIONEER-STANDARD 16393 HOLT 16394 KPENY-AS 16395 GLOBALMUSIC 16396 AETHER-SYSTEMS 16397 COMDOMINIO 16398 EPSON-AMERICA 16399 NETWORKGCI 16400 INTERFOLD 16401 NETASN-SAINTVS 16402 UNIVERSAL-TELECOM 16403 BOISE-CASCADE 16404 ALBRIGHT-COLLEGE 16405 MNC 16406 AS-INTERMEDIA 16407 NOTARA-AS-1 16409 AMERICANSTERLING 16410 REYREY 16411 EMCOR-GROUP 16412 NETWORK-SERVICES 16413 TELEBERMUDA 16414 RIPNET 16415 PRCNET-DOM 16416 MYCOMAX 16417 E247 16418 NOANET 16419 FIDELITYLEASING 16420 IDEAMAX-CORPORATION 16421 HARDNOC 16422 NEWSKIES-NETWORKS 16423 NETTOGO-BLK 16424 MVN-NET 16425 QUESTCOMP-AS 16426 CYBEAR 16427 PALM-HQ 16428 CNI-AREA-1 16429 CATAPULSE 16430 USM 16431 CLARK-CONSTRUCTION 16432 EZ-PRINTS 16433 ATROAD 16434 ACSSPORTS-01 16435 FLUKE-ELECTRONICS 16436 NANC1 16437 ONESECURE 16438 MILINX 16439 AMTRAK-IB 16440 ISPACE 16441 ISPACE 16442 ISPACE 16443 ISPACE 16444 ISPACE 16445 ISPACE 16446 ISPACE 16447 ISPACE 16448 ISPACE 16449 ISPACE 16450 ISPACE 16451 ISPACE 16452 ISPACE 16453 ISPACE 16454 ISPACE 16455 ISPACE 16456 ISPACE 16457 ISPACE 16458 ISPACE 16459 ISPACE 16460 ISPACE 16461 ASN-UTEP 16462 SAFEHARBOR 16463 DPSINET 16464 CT-CORPORATION-SYSTEM 16465 CENTEX-TECH 16466 LYNXUS 16467 ASN-NEXTWEB 16468 EMERON-00 16469 BANKOFAMERICAGCIB 16470 WINGNET-AS1 16471 ADEXUS-IDC-CL-1 16472 WEBEXQWST 16473 TNII 16474 RESPONSYS-1 16475 AVV 16476 MKG 16477 ACNIELSEN-AS 16478 COLLEGECLUB 16479 MERITANORDBANKEN 16480 AMERICANHORIZON 16481 BABSON-GNET 16482 XODIAX 16483 KOLA 16484 ELINK-COMMUNICATIONS 16485 NEW-CHANNEL-TECH 16486 AUTHORIZE-NET 16487 FREEPORT 16488 RJTHOMPSON-SECURITIES 16489 WEBSTER 16490 KEYFIN 16491 ACCESSPORT 16492 DECHERT 16493 ABERCROMBIE-FITCH 16494 EQUALFOOTING 16495 MAXCESS 16496 PCONLINE 16497 TIMBERLINE-SOFTWARE 16498 LASALLE 16499 ZEPHYRTELE 16500 APCI 16501 EVANTAGES 16502 PHXGOV 16503 N-W-TELEPHONE 16504 AS-LABORREADY 16505 INTERCOMM-RENO-ASN 16506 AYAYAI 16507 DELWEBBCORP 16508 AIRPOWER-NET 16509 AMAZON-02 16510 IHSENERGY-FIELDDIRECT 16511 NSICORE 16512 VISITUS 16513 COXNEWS 16514 TRIPOS-INC 16515 ALTAVISTA 16516 FTLINFO 16517 MULTICASTTECH 16518 FIBERCLOUD-BHAM 16519 CUDENVER 16520 SBS-CAN 16521 SHELTON 16522 CHELLO 16523 CONNECT-COMM 16524 METTEL 16525 NATIONALSYSTEM 16526 BIRCH-TELECOM 16527 GVTCINTERNET 16528 IMPSAT-COLOMBIA 16529 CYBERBURY 16530 POWERSHIFT 16531 PROTEL 16532 CIDCMTL 16533 LIVETRADE 16534 SEPHORA-COM 16535 CEBRA 16536 JPMORGAN 16537 MIDAS 16538 PDC 16539 ENVISION-DEVELOPMENT 16540 TELCOPOINT 16541 PHOTOPOINT 16542 MGIC 16543 GATEWEST-AS 16544 CHANNING-BETE 16545 CFTECHNOLOGYSERVICES 16546 VNU-USA 16547 CONSYS 16548 MERCURY-COMPUTER-SYS 16549 AMI1 16550 KONNECTIONS 16551 LIQUIDPRINT 16552 FLEET-SECURITIES 16553 VBNET 16554 ANP 16555 MEDSHOPPE-KAS1 16556 IKI 16557 RE-STAFFORD 16558 TOWERGROUP 16559 REALCONNECT-01 16560 LIB-NET 16561 ARIBANETWORK 16562 RESPOND-COM 16563 BBDO-SOUTH 16564 ADAMS-WELLS-INTERNET 16565 ZIGGY-KY-01 16566 DESERTSKY 16567 OSINET 16568 ANYTIMEACCESS 16569 NELSONCOMM 16570 EXECUSTAY 16571 COSAWEB 16572 CELLULARONE-INTERNET 16573 THEBEAST 16574 QVTRADING 16575 EDGIX 16576 YORK-COUNTY 16577 TELSEON-AS 16578 EAA-AS 16579 RADIANZ 16580 WOODCO 16581 TITAN 16582 NEXTLEVELINTERNET 16583 HEADHUNTER 16584 MARKETINGCONCEPTS 16585 STREAMAUDIO 16586 NETSERV-ASN-1 16587 CYRUNNER 16588 SPIDER 16589 E-QUILL-SJ-ABOVE-001 16590 CCSI-ASN 16591 POP-COM 16592 CYBERNET-SV 16593 ADFORCE-CU 16594 COMPUGRAF 16595 TORO 16596 UABC-AS 16597 SPC 16598 DIGIDYNE 16599 BENTLEY-SYSTEMS 16600 UTHEALTHCENTER-TYLER 16601 GNEWSASN1 16602 EBANK-COM 16603 BELLAMIA 16604 HUNTEL-NET 16605 ABWC 16606 IB2B 16607 UNE-AS 16608 KENTEC 16609 AIS-1 16610 EYAK-BOS01 16611 KISCOMPUTERS-NET 16612 DEXMANET 16613 SPECIALIZEDSOFTWARE 16614 WESTFIELD-AMERICA 16615 HOMEGROCER-COM 16616 MEDPOOL 16617 COMMUNITYISP 16618 CAVION 16619 BITMO 16620 BREAKWATER 16621 OWDS-GP 16622 COMPUBASIX 16623 CLICKTHINGS 16624 HYDRO-QUEBEC 16625 SPEEDERA 16626 DV2-NET 16627 TRITONPCS 16628 WATTERS 16629 TELEFONICA-EMPRESAS 16630 ACCGRP 16631 COGENT-ASN 16632 ARPRO-01 16633 I-3 16634 GOAMERICA 16635 OTHERWORLDNET 16636 KANA-COMM 16637 JOHNNIC-E-VENTURES 16638 CORNINGINC01 16639 COMMERX 16640 SILICON-VALLEY-BANK 16641 E-OFFERING-SF 16642 OGILVYGROUP 16643 VCU-ASN1 16644 SUNGARDBI-TECH 16645 EPIQSYSTEMS 16646 DIGISTAR 16647 IMAGINE-AS 16648 PCSIA-NET 16649 ARISTASOFT 16650 WEBANGO 16651 SOCKET-2 16652 CELPAGE-NET 16653 INETMAX 16654 QUACK-COM 16655 CENTERPOINT 16656 IVANET-HAWAII 16657 CYRSH-TECH 16658 TALK2-ASN 16659 CROWN-AS-1 16660 APPTUS-DC 16661 ELARKIN 16662 AZUS01 16663 UOLCOLOMBIA 16664 CC-COMMUNICATIONS 16665 PLANET-ID 16666 LSAC-ASN 16667 MIRAGERESORTS 16668 GBPSW-AS 16669 APPLIED-MATERIALS 16670 AERO-VISION 16671 ESCROW 16672 INTERCERVE 16673 BAYER-US-ASN 16674 COMPASS-GROUP-NAD 16675 WINMILL 16676 BARCHARTCOM 16677 AZO 16678 NANO-AS 16679 JBOXFORD-ASN1 16680 EULER2000 16681 ETS 16682 EPIGRAPHX-AS 16683 CFI 16684 PORTONE 16685 AS-OPTIGLOBE 16686 IDIAL-DALLAS 16687 KTC-INET 16688 PEOPLENET-COMM-AS 16689 AZTECANETMX 16690 ANADARKO 16691 KFORCE 16692 HHMI 16693 HOCH-247 16694 ICSI 16695 ECX 16696 NONSTOPNET-AS 16697 RIEDEL-ENT 16698 BRIGHTNET 16699 ENTER-ASN 16700 ROSENET-1 16701 AFIP-ASN 16702 SPECTRUM-HOUSTON 16703 ASN-CHUBBCORP 16704 DATAEX-CAM1 16705 STORAGEAPPS 16706 COMPUNLTD 16707 UNIFI-INC 16708 THOMSONFINANCIAL 16709 IPOP 16710 PBS 16711 ANC 16712 I2SOFT 16713 NOANET-WA 16714 SPACEWORKS-INC 16715 ARISTOTLE-ASN 16716 ZIONSBANK 16717 CRAWKANINTERNET 16718 BROWNWOODLAW 16719 NASD 16720 OPTICNET-5 16721 OPTICNET-5 16722 OPTICNET-5 16723 QUIOSNET 16724 APERIAN 16725 ONLINERETAILPARTNERS 16726 ROCHE-NUTLEY 16727 PRIVATE-CABLE 16728 MATTEL 16729 ROYALBANKFINGROUP 16730 ROYALBANKGROUP-2 16731 ROYALBANKGROUP-3 16732 VELOCOM-AR 16733 AXENTTECH 16734 SMARTBASKET 16735 CTBC-TELECOM 16736 JAVALI-01 16737 GO2CALL-1 16738 LMI 16739 HOMEPAGECORP 16740 ASN-DYNAMIC 16741 ISATPLATFORM 16742 UCV-CHILE 16743 EYT-ASP 16744 WORLDWIDEONLINE 16745 STERLINGTESTING 16746 RELIANTENERGY 16747 REAL-TIME 16748 ONE-SOURCE 16749 AUTOLIVASP1 16750 ECPI 16751 OPEN-TEXT-1 16752 BBOX-NET 16753 BELO 16754 HOTCITYNETWORKING 16755 TOPICA 16756 ABC-VIRTUAL 16757 CPI-CORP 16758 IKON 16759 SWA-MKT-INET 16760 CBOE 16761 FEDMOG-ASN-01 16762 GRUPO-BIMBO 16763 TIDEWORKS 16764 TASC 16765 ENRONCORP 16766 SPRINGBOARD 16767 TOL 16768 NETWHISTLE 16769 SOTHEBYS-INC 16770 BROADSLATE-AS 16771 KPCB 16772 TDU01 16773 IPH99SCH 16774 MERCURYINS 16775 EXOTROPE 16776 HOMESTORE-IBS 16777 NET-PROVPHP 16778 ACT01-ASN 16779 TELSTRA-USA 16780 BSANTANDERCL 16781 POCKETSCRIPT-1 16782 CORELAB-AS 16783 DAVNETINC 16784 INETZ 16785 USANA-INC 16786 MESSAGEBAY-NET 16787 HSACORPORATION 16788 PURCHASEPRO 16789 RENTGROW 16790 DSNYCGW01 16791 DIGITAL-AGENT 16792 JETTIS 16793 DATA-TRONICS 16794 INT-SOL-PR 16795 COMP-COMF 16796 REALTYIQ-COM 16797 2C2-ASN-1 16798 WORLDXCHANGE 16799 PAYMASTER 16800 NBS90 16801 ENRONCORP2 16802 IMO 16803 COMPVDC 16804 SEI-ISS 16805 DIGITAL 16806 FUTURESIGHTS 16807 IBM-EI 16808 FRESHWATER 16809 DOLLARBANK 16810 NET2000 16811 SPACENET-GTH 16812 SPACENET-ENT 16813 AMNH 16814 IPLAN-NETWORKS 16815 EXPERTCITY 16816 AVENUEA 16818 CORESYS 16819 HAWAII-DENTAL 16820 FREEBORN 16821 DUQUESNELIGHT 16822 CREATIVE-EXODUS 16823 NORTEXNET 16824 INTERNETSEER 16825 LIVELINE 16826 JCCC 16827 MULTIPHONE-LA 16828 ASYMMERTICAL 16829 TESSCO-MD 16830 PORTERASYSTEMS 16831 FUJITSU 16832 CLICVU 16833 PREBONYAMANEUSA 16834 WEBSTER-BANK 16835 MADISONRIVER 16836 UDATA 16837 MILLSCORP 16838 VERISIGN-CORP 16839 ENKIDO-NET 16840 I-ESCROW 16841 ATOMCORP 16842 CHRISTAL-GROUP 16843 NORTHEAST-COMNET 16844 FIRMBUY 16845 PF 16846 FASTPOINT 16847 ELMERCURIO 16848 TELECOM-EDNA 16849 SOUTHERNPLANET 16850 ITI 16851 HOSTTECH-NET 16852 FOCAL-CHICAGO 16853 GALAXY-PORT 16854 GENLABS 16855 CHORDIANT 16856 ONENETWORK 16857 CENTEX 16858 WEBVAN 16859 WYATT-SD 16860 ACCELENET 16861 REVELEX 16862 MEDITECH 16863 NET-EXCHANGE-INC 16864 E-FATO 16865 PERSONTEL 16866 HUT-WHL-DIT 16867 DCT-CA-ASN 16868 PRAXAIR-INC 16869 MIRAPOINT-RDOM 16870 ZOHO 16871 MCDONAGHBROTHERS 16872 COMCASTOAKRIDGE 16873 ACR 16874 SONDA 16875 AON-BGP 16876 IASNET 16877 VITAL 16878 ISERVE 16879 SUSQ-CTALK 16880 ALPHARMAUSPD 16881 BADPUPPY 16882 INTERWISE 16883 CIBERLYNX-ORL 16884 MJI 16885 GLOBALTELECOM 16886 LVMH-SDG 16887 INFOSERVE 16888 ECYBERCONST 16889 STEVENS-TECH 16891 SMC-BR 16892 UCS-NETWORKS 16893 WILD-NET 16894 ECGLOBAL-COM 16895 IREADYWORLD-CLT2 16896 XENERGYENT 16898 LOG-NET 16899 F-SECURE 16900 SEDGWICK-CMS 16901 MUTUAL 16902 TXU2 16903 WACSEC 16904 ARVIG 16905 ALL-GIGAPOP 16906 SALNET 16907 ISPKENYA 16908 KOTA-ASN-1 16909 ROIDIRECTW01 16910 FARM-CREDIT 16911 TCO 16912 4-LESS-NETWORK 16913 SFTI 16914 UNAMAX 16915 EESIS 16917 FTCI-COM 16918 TECNICO-DBNLINK 16919 CBNY 16920 A1COM-NET 16921 PNV-FL-ASN-01 16922 IVMG 16923 PRECISION 16924 IISIDC 16925 BROADDAYLIGHT 16926 INTERSTATE-BRANDS 16927 USCO 16928 UTCNET 16929 MINDSYNC 16930 UPSHOT 16931 GLOBAL-PAYMENTS-1 16932 LEVEL4 16933 BROADBAND-AVE 16934 LEACO-INTERNET 16935 KSC-NETWORKS 16936 LOGICSTREAM-PA 16937 MASTERFILES 16938 COMPETITRACK 16939 TRX-DALLAS 16940 VOXEO 16941 ROUNDHEAVEN 16942 CITIZENS 16943 SOURCE 16944 XYSTOS-PROD 16945 NOVACON-LLC 16946 SASSC 16947 QUIXI-INC 16948 STRATUSWAVE 16949 EDAP 16950 COLUMBIA 16951 IVANET-LIMA 16952 LIGHTSPEED 16953 LIGHTNET 16954 DODOTS 16955 XPRESSNET 16956 TREASURY 16957 IDACORP-NETWORK 16958 LUCRE 16959 SBIS-AMRLTX 16960 VISION-RED 16961 SBIS-ODMDTX 16962 SBIS-LNGVTX 16963 SBIS-WCFLTX 16964 SBIS-HRLNTX 16965 SBIS-SPFDMO 16966 SBCIDC-LSAN03 16967 SBCIDC-DLLSTX 16968 ISTRATEGY 16970 CHATPER2-IDC-SA 16971 VIACCESS 16972 AANDMTECH01 16973 HOSTARICA 16974 SHOCKWAVE 16975 ALTOCITY 16976 FIVEK 16977 SUNFIRE 16978 WEBPG 16979 VCV 16980 UNITEDGUARANTY 16981 EMMIS-1 16982 UNION-SQUARE 16983 ACSEAST 16984 CFHOSTINGATL 16985 LTYR-NET 16986 INSTALL 16987 POPMAIL 16988 IPAPER 16989 UTMEM 16990 TRANSBANK 16991 ACHEX-INC 16992 DOL 16993 XCEED-ATL 16994 EDGECONN 16995 ASPONE 16996 VCITIES 16997 PROPHET21 16998 ISG 16999 WFSCORP 17000 12OAKSWC 17001 ATMOSPHERE 17002 JESTER 17003 AHP 17004 NVSMEDIA 17005 OUTBOUND 17006 STRATEGIC 17007 ORBITAL-GRTN 17008 CARPENTER 17009 CAYENTA 17010 IMANDI-01 17011 PPG-INDUSTRIES 17012 X-COM 17013 INFOAGE 17014 NAIILLC 17015 NMTINET 17016 ASCOLTA 17017 CRISP 17018 HERAKLES 17019 JTAN 17020 COMP-SCIENCE 17021 UNXCOM1 17022 PRENET 17023 MASSHYSTERIA 17024 VISTAIT 17025 MFNX-CUSTOMER 17026 ARBELLA 17027 PEAK10JAX 17028 PRIZ 17029 EMAILCHANNEL 17030 PRIMERICA 17031 PREDICTIVE-NET 17032 QUALCOMM-QWBS-SD 17033 AVENTISBEHRING 17034 SOLIDTECHCTR 17035 OXYGEN 17036 AURIGIN-SYS 17037 GOINET 17038 EFORCE 17039 SUPPLYPRO 17040 SEATTLE-TIMES 17041 PALUCH 17042 AS-NICHEWW 17043 AERIS-SJC-BGPNET 17044 TRUENORTHCOMM 17045 SCAIS-ASN-RMG-01 17046 ACTION-COMM 17047 CENTURYTELECOMM 17048 MIMEO 17049 MBO-NET 17050 PMB1 17051 PURDUEPHARMA 17052 TARGET 17053 TRADING 17054 SLC-EXPEDIENT 17055 UTAH 17056 ABILIZER 17057 CASPIAN 17058 TEMS-1 17059 VIAIRNET 17060 E-NETWORKS 17061 MARITIMEDIRECTNY 17062 INTERNAP-052600 17063 INTERNAP-052600 17064 TISD-VIC 17065 REALMED-PROD 17067 IP-CLEARING 17068 NOBELL 17069 COTEL 17070 UBSW-CHICAGO 17071 UBSW-STAMFORD 17072 GRUPO-IUS 17073 ALLEGISGROUP7312 17074 WAKUL 17075 GILSBAR 17076 PIXELPUSHERS 17077 NETSTEP 17078 ALLENCO 17079 TELEMOVIL 17080 MORE-COM 17081 NETEGRITY 17082 MOORE-CORP 17083 SKYAUCTION 17084 LCCAS-RACK01 17085 APOGEENETWORKS 17086 AMERICATEL-CA 17087 NYSA 17088 CURRENEX 17089 CINCCHILDRENS 17090 ONLINE-NET 17091 HOLLCORP 17092 E-GREETINGS 17093 FAIRPOINT 17094 MUTOMAHA-I 17095 BELENOSINC 17096 SUMMITRACING 17097 PRICEINTER 17098 NBIBX1 17099 THEGTX 17100 ISDI 17101 CENTRECOM 17102 BARTERTRUST 17103 CAMPSIX 17104 PGE-NEG 17105 MEDIAPLAN-HQ 17106 MIDWESTWIRELESS 17107 HALEANDDORR 17108 TELENOVA 17109 WEBINESS 17110 YAHOO-US2 17111 PICKLE-TECH 17112 BBDO-NY 17113 COMMRAIL 17114 BANKLINK 17115 THEWIREINT 17116 BHPHOTO 17117 NEXTERANYO1 17118 VIMS 17119 KAMPUNG 17120 NBDOE 17121 WORLDMULT1 17122 JUILLIARD 17123 REELPLAYINCSM 17124 ATLANTIS 17125 SOFTBANKINT 17126 E-MONEY 17127 ALLIANCE-INFO-SYSTEMS 17128 IBIZ 17129 FIDALGO-NET-1 17130 JONESDAY 17131 HOBBICO 17132 MPOOLJXN1 17133 NEXTEL-DEV 17134 WESTLAKEGROUP-1 17135 OHIOU 17136 GULFNET-DESTIN 17137 EZ-GAME-CR 17138 EBG 17139 CIS-AS17139 17140 PAYMAP 17141 ACCESSINGNET-MIA 17142 WIRELESS-FIR 17143 DRIVEWAY 17144 P18004BVOCAL 17145 TEAJAX 17146 CILLNET 17147 GOBIERNOCHILE 17148 FIRST-NATIONAL 17149 JAVELINSOLUTIONS 17150 AFCU 17152 BATES 17153 ALLGOOD 17154 BOAW-AS 17155 THE-SUPPLY 17156 ZIXI 17157 CLEAR-CHANNEL 17158 ABDINSURANCE-HQ 17159 SPEEDTRAK 17160 YELLOWSHIRT 17161 MARSH 17162 DONALDSON 17163 INTRANOLOGY 17164 CALDWELL 17165 ACCESS-SYSTEMS 17166 TRAVELERSPCAS 17167 HBAFRAG 17168 TFO-BOSTON 17169 TJBA 17170 DOWNEY-SAVINGS 17171 SEAGULL 17172 VANTAGEPOINT 17173 NETLINK-SERV 17174 LIPSTREAM-002 17175 NSS-UK 17176 NETAPPSERV 17177 TIDEPOINT 17178 MOTIONINDUSTRIES 17179 INTESNET 17180 ACCELICA27 17181 EVARE 17182 PROVEED 17183 VIDEOTECHNOLOGIES 17184 ATL-CBEYOND 17185 EXATT-1 17186 DOTTV 17187 LEGATO 17188 TEETIMES 17189 DIGITALINGENUITY 17190 GISNET-ISP-000001 17191 JOPLIN-209 17192 LEK 17193 NETLINC-SERVICES 17194 ALGOR 17195 JAMES-TOWER 17196 COD-GE-IL 17197 DAEDELUS 17198 INNOVATIONSLAB 17199 SWAGELOK 17200 SEATTLECOLL 17201 ZANG-NET 17202 HOTELWORKS 17203 FUNDSXPRESS 17204 NOMINUM-GLOBAL 17205 CORPBANCA-VEN 17206 MOUNTAIN-AMERICA 17207 COLOR-COLL 17208 PROJESOM 17209 BIGFOOTINTER 17210 RLM-SOFT 17211 GTEC-ORG-ARIN 17212 UHC1700 17213 NDB-COM 17214 IEEE-COMSOC 17215 EMCONSULTING 17216 VERITECT-EAST 17217 ADMWORLD 17218 VIACOREHQ 17219 GEACCESS 17220 GDS-LOAN00 17221 GRAUBARD 17222 MUNDIVOX 17223 SAPE01 17224 ATT-CERFNET-BLOCK 17225 ATT-CERFNET-BLOCK 17226 ATT-CERFNET-BLOCK 17227 ATT-CERFNET-BLOCK 17228 ATT-CERFNET-BLOCK 17229 ATT-CERFNET-BLOCK 17230 ATT-CERFNET-BLOCK 17231 ATT-CERFNET-BLOCK 17232 ATT-CERFNET-BLOCK 17233 ATT-CERFNET-BLOCK 17234 DEERFIELD-COM 17235 COMTIME 17236 TULSAL-74103 17237 CHICAGOREADER 17238 MSPNI 17239 GENESIS2NET 17240 CLASSMATES-1 17241 JKGROUP 17242 UNIPAC 17243 STAX-NET 17244 SYSTEMSFUSION 17245 QUIXI-1 17246 QUIXI-2 17247 QUIXI-3 17248 AVT-MEDIALINQ-2 17249 CENTRO-BURSATIL 17250 ADETEL 17251 TMPW-MKE 17252 VDI 17253 COMMUNIGROUP 17254 WEB2YOUFLA 17255 DIVEO-URUG 17256 GLOBAL-MESSA 17257 COLLECT 17258 DOBSON-COMM 17259 EAGLE-GLOB 17260 ARMSCOR 17261 KEELING 17262 CIC-CSOC 17263 ZIANET 17264 CERNER-COM 17265 VISIONCOM 17266 CAVENET 17267 AAAINET 17268 COSMOCOM 17269 SBF 17270 DCDIRECTOR 17271 NETCENTREX 17272 CLARION-GLOB 17273 CTX-MORTGAGE 17274 RWBAIRD 17275 FMAC-I-BILLING 17276 SEIC-CORP-1 17277 SEREN 17278 OAKASN 17279 WOLFGROUP 17280 FAMILYCONNECT 17281 DOVEBID 17282 HSNI-LLC 17283 MARKET-FACTS 17284 NSF 17285 PREMIO 17286 CYBER-001 17287 VZ-UC 17288 SENTIRE 17289 EMBARCADERO 17290 BLUE-MOUNTAIN 17291 MMA599320 17292 BROOKSOFT 17293 VALTEL 17294 CARL 17295 EHI-CALLCENTER 17296 PENTAWAVE 17297 INDIGO 17298 VERTAFORM 17299 SYNTELEOS 17300 PROCARD 17301 FASTENAL 17302 HARTE-HANKS 17303 GLS3C-SYSTEMS 17304 STERLING-GRP 17305 WORLDPOST-AS-01 17306 NETCONX 17307 VIRTELA-1 17308 I2I-ASN 17309 TECNET-INC 17310 BVUB 17311 TERABEAM-NET 17312 TERNETCONNEC 17313 GATEWAY-NET 17314 NOCPULSE 17315 E0PS-4-C0NCUR 17316 PRG 17317 XSNET 17318 FUTURELINK-SNA-1 17319 HIGHSPEED-WA 17320 SCOUR 17321 OMNISKY 17322 CHARTERONE 17323 ARA-SWD 17324 ALNET 17325 CLEARWAY 17326 PRIMEMED 17327 TSTC-AS 17328 MANULIFE 17329 ELOGICA 17330 NEXTELPARTNERS 17331 ENTER-PART 17332 SCIENTECH 17333 C2CELECOM 17334 SMC-DIST01 17335 TWN 17336 VECTRIS 17337 WA-CENTURASOFT 17338 NIS 17339 SAFELITE 17340 SSTAR 17341 MONTEREYBAY 17342 COMTEXNEWS 17343 SFWMD 17344 AMPLESPACE 17345 XCERT 17346 SENDOUTMAIL 17347 PEPCO 17348 CAA 17349 SUNGARD-AMS-DOM 17350 KMV-LLC 17351 GC-NJ-EQUX 17352 GC-NJ-CARL 17353 CODEXA-CORP 17354 GCI-NET 17355 WAYZATA-ISD-284 17356 VERMONT-TELE 17357 GUIDANCE 17358 ETOLL1 17359 TELEGIS 17360 GLOHO 17361 BRASS 17362 NESTEGG 17363 WAGNER 17364 AUTO-SOFT-COM 17365 CITY-OF-FRESNO 17366 ARINCASN 17367 MARKTECH-GRO 17368 FANTASTIC 17369 CHAPNET 17370 MCAFEE-COM 17371 BMO-TOR1 17372 BMO-TOR2 17373 MCI-COV 17374 WALMART 17375 ESC-TPA-CW-AP 17376 LFC-NET 17377 PWI-DFW 17378 DBSINTL1 17379 INTELIG-TEL 17380 PROJ-MUT-TEL 17381 ELOCAL 17382 4SURE-COM 17383 INTERNET-UNLIM 17384 USBX-COM 17385 ALPHANETSOL 17386 GRAINGER 17387 EXPRESSACT 17388 KEEN-US1 17389 IHS-GROUP 17390 EXPERTPRACTICE 17391 KS-2520 17392 STOCKGROUP 17393 TRIPNET-HOU 17394 NETAPP-AS 17395 SAGHILL007 17396 TL5-1 17397 SFCOMMERCE 17398 IPASS-COM 17399 COMSATVEN-VE 17400 EBONET 17401 MILLICOM-AR 17402 BYEBYENOW 17403 BJT-NET 17404 AIRLINK 17405 NDB-GROUP 17406 EPSCU 17407 SENECA-COMM 18432 NORTHPOINTCORP 18433 BLUEBAND-NET 18434 METAVANTE 18435 THEJUNCTION 18436 SERVON 18437 PVI 18438 BROWNB 18439 SALINAS-GROUP 18440 NCCI 18441 INFOCURE 18442 JFKASN 18443 DAX 18444 MCGETTIGAN 18445 LUXLOOK 18446 NETRASPECT 18447 AFFINITY-INTER 18448 GIANTEAGLE 18449 MVS-TELECOM-MEX 18450 VISHAYNA 18451 ROCKETBGP 18452 ALORICA 18453 ENGIN-ANIM 18454 AUGSBURG 18455 NETDATA 18456 SIGNALCORP 18457 BOURNS 18458 VIRT-STOCK 18459 IMAGEMASTER-HQ 18460 OSAGEDIGITAL 18461 BELL-ATL 18462 TILTED 18463 RULESPACE 18464 BBIS-COMM 18465 SHORTCYCLES 18466 GEMINICOM 18467 PACIBELWIRE 18468 POOR-DOUGLAS 18469 LOGIKA 18470 FUTURE-NET 18471 GIMNET 18472 WEBEMP-1 18473 NBGISP-ARIN 18474 AENEAS-CWUS 18475 M-I5 18476 QUISIC 18477 ESATEL 18478 NATAL-MED 18479 PLUGIN-VANET 18480 ATS-SERVICES 18481 MP-DC-1 18482 SIERRACITIES 18483 INNUITY 18484 VTLA 18485 VTLA 18486 VTLA 18487 VTLA 18488 VTLA 18489 VTLA 18490 VTLA 18491 VTLA 18492 ALPAR 18493 RRD-FIN-LANCASTER 18494 CATTECH 18495 FORT-BEND 18496 GLOBAL-NET-AR 18497 UTSI-AS 18498 INTEGRATED 18499 SJCASN 18500 PACCAR 18501 MB-ASN 18502 WESTCORP 18503 LOGICSOUTH 18504 BLUEBARNINT 18505 B2PORT 18506 NETSWORK 18507 DICARTA 18508 FORCE10-NET 18509 CORILLIAN 18510 COR-THERAPEUTICS 18511 FOCAL-SANFR 18512 IKANO-OHIO 18513 KNOWX 18514 INSURE2000 18515 UTARLINGTON 18516 MOLALLACOM 18517 CASCONET 18518 ZEBUINC 18519 DSLWISCONSIN 18520 ESCALATE 18521 IMX 18522 TITAN-HOST 18523 CHEP-AS1 18524 MICRONEIL 18525 THRU 18526 GOTO-AS 18527 PARTSBASE 18528 DOMINION 18529 PLEXUSSYSTEMS 18530 ISOMEDIA-1 18531 JWT-NY 18532 SECRETA 18533 SYMBOLTECH 18534 ARBINET 18535 ROCHEDIAG 18536 BLUESPRING 18537 PERKS 18538 CTBS 18539 WCN 18540 FFEDERAL 18541 EDIRECT 18542 EJASENT 18543 LIQUID-THINKING 18544 CYBERPUNK 18545 OSMNET 18546 CINCINNATI 18547 TELNET-BR 18548 18VO 18549 01004-3962253177 18550 INSERV-E-CUST 18551 ROTHINC 18552 SPATACOMM 18553 OPTICNET-RIS 18554 SOFTCOIN 18555 THE-ART-INST 18556 SCIF 18557 HAWKCOMM 18558 NETBLK-RCOEK 18559 WORLDCHAIN 18560 CYBERSHORE 18561 ONTIMEONLINE 18562 EMERGING-SYSTEM-1 18563 CGINET-01 18564 SYSCOMDUALROUTE 18565 FORTIX-01 18566 COVAD 18567 EARNWARE 18568 ZEKES 18569 CANBOX 18570 LOCKWOOD 18571 INTELESIS 18572 PCGLOBAL-PROM 18573 WCOM-TSENGR-AS 18574 EECAD 18575 BITSTREAM-NET 18576 EDUCAR 18577 IDSAS001 18578 ONCALDERA 18579 DALINCO 18580 GREEN-BRIDGE 18581 ALLIANZLIFE 18582 CONSUMERINFO 18583 IBSI-KCMO-NET 18584 ABC-CNLX 18585 COMMERCEHUB 18586 TEXRAMP 18587 AGUTL 18588 VANTRA-GROUP 18589 OZCAP-NYC 18590 BENEFITPOINT 18591 OPNIX 18592 RED-CUDI 18593 HTC 18594 VOM 18595 PGA-INC 18596 MADISONTELCO 18597 LISTEN-SF-2 18598 APERIAN-ATLANTA 18599 APERIAN-DALLAS 18600 WPIA-NET 18601 B2EMARKETS 18602 PWRWG 18603 CMSPPLC 18604 INCOR 18605 DIGIBLAZE 18606 WHERETOLIVE 18607 WEBUSENET 18608 SIERRA 18609 SOLUNET 18610 WALKERINFO 18611 ATRION 18612 PALL-CORP 18613 TODAYLINK 18614 SOFAST 18615 UNITEDMESSAGING 18616 AS-2103 18617 ONPLAN 18618 WCENTRALN 18619 BRIT-NUMBER-1 18620 IBDINCASN 18621 CONESTOGA-COL 18622 IVANET-YTO 18623 TWC-MISP-1 18624 BB2W-BOS 18625 SCIONASP 18626 NET-IDEO 18627 IBILL 18628 ENYMEX 18629 LTF-001 18630 DCSS 18631 MARSNYC 18632 VOLCANO-NET 18633 GIANTWEB 18634 RENTWAY 18635 EXPEDI 18636 AGEX 18637 VDS 18638 ZOOLINK-COM 18639 DIGITAL-COMM 18640 IDEALAB 18641 KENNETH-COLE 18642 SPACENET-ENT2 18643 SMARTCITY 18644 IDC-DIVEO-BR 18645 MITEC 18646 SENTAI 18647 NEXTJET 18648 BROADCASTAMER 18649 M5-NETWORKS 18650 KORAX 18651 EJASENT2 18652 TOTALITY-2 18653 TOTALITY-2 18654 TOTALITY-2 18655 THOUGHTWARE 18656 FIRST-FRANKLIN 18657 LEAD-TECH 18658 CLBN 18659 HORMELFOODS 18660 AMERICANIC 18661 ASERA-CUSTOMER-NET 18662 AFLAC 18663 UOP-AS 18664 EMPIRE-HEAL 18665 CKC-HM-92100-3215-1 18666 NOKIA-AMER 18667 WEB2MIL 18668 MFM 18669 EZ2GET 18670 MESAINTERNET 18671 FLASHCOM 18672 TSTAR-NET 18673 CFP-ASN 18674 FROST-NAT-BANK 18675 CADENCENETWORK 18676 AVAYA 18677 HISYNERGY 18678 ISA-INTERNEXA 18679 WORKNET 18680 DATALINK 18681 CPS-ASN 18682 TRILUTIONS 18683 OPTIVO 18684 UBTANET 18685 TECKMAN 18686 MAD-MACS 18687 MPOWER-2 18688 TGIX 18689 GENESISINTER 18690 MEDIDATA 18691 LUMINET 18692 EAGLEDIRECT-COM 18693 GOLDPOCKET 18694 SDWARREN 18695 BANDX-US-1 18696 AXIOM-NET-PTP-01 18697 NISHANSYSTEMS 18698 TSNC 18699 SMIG-001 18700 PRG-ASN01 18701 PPCO-US 18702 SEALED-MED 18703 IBMCCH-ASH 18704 T-SYSTEM 18705 RIMBLACKBERRY 18706 LISTEN-SF-3 18707 PREMIERLINK 18708 RLUSA-ATLANTA1 18709 SANWABANK 18710 GKG-NET 18711 RICHARD-STOCK 18712 UTILICORP2 18713 IBMCCH-SJO 18714 IP-COMMUNICATIONS 18715 ANNUNCIO 18716 BUZZSAW 18717 ASDELRAYTECH 18718 MARVELL 18719 TSRSOLUTIONS 18720 PACSUN 18721 DENNIS-PUBLISHING 18722 SUPERVALU 18723 SEAGATE-USA-MN-1 18724 TEK-GYCB 18725 ICOTECH 18726 DEFENDNET-RI 18727 DNPS 18728 ISINJ 18729 SHAWMUT 18730 CYBERSOURCE-SC4 18731 NAINO 18732 QOSNETWORKS 18733 XYMED 18734 BESTEL 18735 M4FINANCIAL 18736 XAP-CORP 18737 NYC-ZENTROPY 18738 MPOWER 18739 AGENCIA-MOD 18740 YELLOWBRIX 18741 PROMISANT 18742 PPOP 18743 MMA-ONLINE 18744 LAKESNET 18745 HTCOMP 18746 BUILDPOINT-PRODA 18747 IFX-NW 18748 AT-WAN 18749 PREMINC-INTER 18750 LEXICOM 18752 NETENGINES-INC 18753 SKYDESK 18754 LOOKSMART 18755 VOXEO-SERVICE 18756 PATEAM 18757 ADT-SECURADT 18758 SUNGARD-PHASE3 18759 VIRAGE 18760 RANCHO-CUCA 18761 BLM-WAN 18762 DOMDOMINICK 18763 PHJW-LLP 18764 PHJW-LLP 18765 PHJW-LLP 18766 PHJW-LLP 18767 PHJW-LLP 18768 PHJW-LLP 18769 PHJW-LLP 18770 PHJW-LLP 18771 ACDI 18772 MARCUSABGP4 18773 DISAPPEARING-INC 18774 TIMESPUBLISHING 18775 ENGEN-PET 18776 VALASSIS 18777 CTN-MAIN 18778 GOULSTON 18779 TEAMGURU 18780 ME-NET 18781 BITSHOP 18782 UNINCOR 18783 BIG-VALLEY 18784 MCD-US-ASN 18785 MIDWAVE 18786 GEMNETS 18787 DANAHER 18788 TLCINC-AS-01 18789 SOLNTECNA 18790 ALPHANET 18791 TCU 18792 EXTANT 18793 BIZFINITY 18794 RAMAPO-COLLEGE 18795 ULV-AS 18796 HOME-INTER 18797 1-800-DATA 18798 IPTEL 18799 1INCUBATOR 18800 ASPRING 18801 ZDTV 18802 MUT-AMER 18803 MUNIS-ASP 18804 EASTLINK-SYDNEY 18805 FOCAL-PENNSYLVANIA 18806 ENSYNCH 18807 OCTOPUS 18808 BEANNET-INT 18809 CABLE-ONDA 18810 EHI-PRODUCTION 18811 ESILICON 18812 NWMLS 18813 DEERFIELD 18814 TELSOUTH 18815 VULCANSYS 18816 ANDREWCORP-AOP 18817 AMERICOM 18818 LSUHSCS-NET2 18819 ENTERGY-CORP-US 18820 PFS-ASN-001 18821 AVISTA-2 18822 MANQUEHUE-CL 18823 MEDICALERT 18824 WWW-THESEAM 18825 INFOPOWER 18826 CITADEL 18827 SPECTRUM-RETAIL 18828 VIANT 18829 VERIDIAN 18830 ERNST-YOUNG 18831 XPRESSWEB 18832 INFLOW 18833 ASHP-NETWORK 18834 NETWORKIP 18835 FIDUCIAL 18836 PROCEDA 18837 INFOLINE-LA 18838 ECTONE 18839 2000FISHERISSS 18840 EQUIPOS 18841 SCHEDUL-DOT 18842 VERTICAL-SCR 18843 CROSSMARK 18844 SHERWIN-AS 18845 NAVAHONETWORKS 18846 PEMEX 18847 NETFIRE 18848 ALTEC-IND-DOM 18849 VEHIX 18850 TOOLWIRE 18851 VAYUSPHERE 18852 ATP 18853 WDUQ-FM 18854 NETCOMPUTING-COM 18855 SACASN 18856 SCCA 18857 AMERICO 18858 ISVS-216169032000-19 18859 GVEC-NET 18860 ITNNETMEDIA 18861 IVANET-BUE 18862 NCS-HEALTHCARE 18863 BROADRIVER 18864 STARTEC 18865 IMARK101 18866 ATJEU 18867 VERIZONWIRELESS-MSG 18868 1STUP 18869 MANI-VIRTUAL 18870 CLICKCOM 18871 YOURINTERNET 18872 VERITAS 18873 REDROCK-COMM 18874 EWI-ASN-1 18875 ANGSTROM-INTERNET 18876 ARRIVAL-COMM 18877 CGTC-Q1 18878 HDVEST001 18879 MUSKOGEENET 18880 LAMRC 18881 GVT-NET 18882 SLRASN1 18883 SEMTRIBE-NET 18884 RCLS 18885 WAVE2WAVE 18886 INLINE-NET 18887 ROAMTEST 18888 CONNECTDELSOL 18889 MERCANTIL 18890 LUCY-COM 18891 CONFLUENCE 18892 RESTAURANTTRADE 18893 DYCOM-NET 18894 NEXTPAGE 18895 NUSTREAM 18896 RSVL-ONLINE 18897 FEDERALNET 18898 TETRATECH 18899 ITSOLUTIONS-INC 18900 CQG-INC 18901 PERCEPTIONTECH 18902 MOTORCARGO 18903 LENDINGTREE 18904 EBALANCE 18905 LECSTAR-GA-1 18906 MOBILELOGIC 18907 BITSTREAM 18908 FACTORY23 18909 TELEIAS 18910 YORK-INTL-CORP 18911 CHANNEL-OF-CHOICE 18912 INNOMEDIA-LA 18913 ROFNET 18914 PARAGONSOL 18915 ICCINET-US 18916 PSFT-ECENTER 18917 KSLAW-001 18918 FIRSTVIRTUAL 18919 FEEDROOM 18920 HEI 18921 PLURIS 18922 AFRICA-ZIMBABWE 18923 SPEEDERA-2 18924 RPTK2 18925 APERIAN-PHOENIX 18926 MEALS-SEA 18927 CHIPDATA 18928 LINEO-INC 18929 ELLIANCE-COM 18930 DOWCORNING151-163 18931 SAINTERNET1 18932 CCHA-BGP 18933 IPEER-NETWORKS 18934 BROOKTINC250 18935 ROIDIRECT-SFHQ 18936 GLENCOM 18937 IPIN-SJ 18938 PRESSGANEY 18939 DBC-SALT-LAKE 18940 SHPS-INC 18941 EL-MERCURIO 18942 3WCORP 18943 YELCOT 18944 LPB-2000 18945 BUILDINGCOLO 18946 FANNIEMAE-2 18947 LMA 18948 NYMC2000-ARIN 18949 IMNISP 18950 SYLVAN-LEARN 18951 WEBHELP 18952 ILUMIN 18953 ETOYS 18954 LITTLEFEET 18955 YZK1 18956 NYK 18957 TRIRIGA 18958 CRRESEARCH 18959 NETSTREAM-COMM 18960 CISGI 18961 MCLANECO 18962 MEDITECH-1 18963 OFDA 18964 AHSSSCI 18965 STRATASOURCE 18966 MEDIACENTERSINC 18967 USAWPG 18968 QUADRANT 18969 EYADA 18970 XNPD 18971 JUNIPER-FIN 18972 PROMENET 18973 TAG-ONLINE 18974 EDOCS 18975 EVITE-COM 18976 FREIGHTQUOTE 18977 GEOTEC-NOC 18978 CJDS1999 18979 UPBNA-BGP4AS 18980 PEACEHEALTH 18981 WCANMILLER 18982 VIRTUAL-ESI 18983 SATOTRAVEL 18984 FOCAL-NEWJERSEY 18985 GAPINC-NET 18986 PACIFICONLINE 18987 EDIAL 18988 MONARCH-CABLELTD 18989 GABRIELCOMM 18990 AIRBAND-COMM 18991 PWCG-COM 18992 GCTR-ANAHEIM 18993 GCTR-BOSTON 18994 GCTR-CHICAGO 18995 GCTR-NEWYORK 18996 GCTR-HERNDON 18997 GCTR-SUNNYVALE 18998 CREDOMATIC 18999 POPLAR-BLUFF 19000 TECHREPUBLIC 19001 POWERNET-INC 19002 FDBS-AS 19003 IHSENERGY-CALGARY 19004 SCHWABPLAN 19005 7-ELEVEN 19006 CLICK1 19007 QUESTIA 19008 PSCI 19009 NOTLTD 19010 ENSERA-PROD-01 19011 ODETICS 19012 AIG 19013 PERF-FOOD 19014 EPSILON-HHONORS1 19015 HCSTNET 19016 WCG-AS 19017 QUALCOMM-QWBS-LV 19018 NETIFICE 19019 IPREVOLUTION-NET-1 19020 SOLTECH 19021 ECONIUM-TOTOWA 19022 TIAI 19023 SERVICEMASTER 19024 INTERNAP-BLK5 19025 XO-ASN12 19026 XO-ASN14 19027 XO-ASN11 19028 XO-ASN10 19029 NEWEDGENETS 19030 HARCOURT-ENT 19031 WESCO 19032 GESI-KCBSC 19033 WTFE 19034 NORCOMNETWORKS-CORP 19035 HIX 19036 INTELLICOM-1 19037 CTI 19038 GF-INVERLAT 19039 PROMPTU 19040 FIRSTMERIT 19041 ATOMZ 19042 VISUALNY-01 19043 SHOCKING 19044 INNER 19045 OLLIANCE 19046 NEWFOCUS 19047 LUNDWALL-1 19048 CORIO 19049 REDENVELOPE-US-1 19050 AKC 19051 CADRE-FINANC 19052 CYRAS1 19053 NUPNA 19054 PENFORD-CORP 19055 CAC-EAST 19056 IETF-49 19057 IBMCCH-CHI 19058 ACSTORONTO 19059 ERASJV 19060 PINNACLE-COM 19061 WEBLINK-WIR 19062 W3MEDIA 19063 JOHN-HEALTH 19064 NET-EXPRESS 19065 KORKSOFT 19066 NAMETREE 19067 VAILSYS 19068 INYC1 19069 THE-ISLAND 19070 TRANSCORE 19071 LFG-CT 19072 OFFICEMAX 19073 DIGITRADE 19074 EDGECONN-NYC 19075 MONARCH-CANMORE 19076 IT-DEVELOPMENT 19077 CYBERCENTER-NAP 19078 S8 19079 LOCL-NET 19080 MITRUST 19081 GFSI-INC 19082 EVERESTBROADBAND 19083 FLEETSECURITIES 19084 COURTLINK-MAIN 19085 INVADO-BLK1 19086 COGNICASE 19087 MAILBOXES-ECT 19088 ECG 19089 DEDALUS-BR 19090 CANBRASNET 19091 WORLD-VPN-NET 19092 TA-DAY1 19093 IBMUSF-SCH 19094 ABS-AS 19095 OPTICNET-ARC 19096 OPTICNET-ARC 19097 OPTICNET-ARC 19098 CHI-SOLTEC-AS-ACCT 19099 RAMBUS 19100 ASSETTRADE-COM 19101 HOSTIT 19102 DENTISTRY 19103 NEPCO 19104 NEXTMDCLINITEC 19105 FIRST-DATA-CORP 19106 ANDREWS 19107 CENTERPOST-CORP 19108 RUSTON 19109 NETBLK-CETELEM 19110 CARIBBEAN-ONLINE 19111 NATURES-BOUN 19112 JIVENETWORK 19113 DUKE-ENERGY 19114 CYBERWEB 19115 CHARTER-LEBANON 19116 AIRBAND-COMM1 19117 ALLCONNECT-CORP 19118 AS-SIT 19119 ULTRAK 19120 ARGIA 19121 KAVI 19122 VVL-ASSOCIAT 19123 USW-INTERACT27 19124 USW-INTERACT26 19125 ROCK-NET 19126 RAIL-EUROPE-GROUP 19127 SEI-MER 19128 UTTCORP 19129 PLAINS-NET 19130 DOCKNET 19131 EOHIONET 19132 BAIRES-NET-ASN 19133 CAL-ASSOC 19134 FTBONLINE 19135 PLEXIS-1 19136 NNET 19137 STREAMPIPE 19138 SWEET-BRIAR-COLLEGE 19139 MARINERSYSTEMS 19140 MENTOR-TECHNOLOGIES 19141 CSC-ENYU 19142 AAFES 19143 FWS-NET 19144 DEALTIME 19145 NEUTRON 19146 ILGYUW19L 19147 JALSYS 19148 OPTICNET-1 19149 MOTLABS 19150 GFORCE 19151 WEBUSENET-1 19152 IBMCCH-TOR 19153 UTMARTIN 19154 SOLUTIONARY 19155 JAXNFCU 19156 SIEMENS-SEA 19157 CHARTER-TN 19158 USCARRIER 19159 STING 19160 REDWOODPARTNERS 19161 INNOCOM-TELECOM 19162 SUPERIORBROADBAND 19163 FRONTCOM-SD-01 19164 OPTICNET-BLK 19165 OPTICNET-BLK 19166 OPTICNET-BLK 19167 OPTICNET-BLK 19168 OPTICNET-BLK 19169 TELCONET-MIAMI 19170 MISN 19171 STARGATE-VAN 19172 XROADS-NET 19173 ASAP-INC 19174 SEARCH-GROUP 19175 NETSTAR-ASN 19176 PAISP 19177 GO-NET-NETWORK 19178 ESPEED-LONDON 19179 BUYMEDIA 19180 DIVEOPERU-ISP-1 19181 CWIE 19182 AJATO 19183 CDI-CORPORATION 19184 UWECNET 19185 TRACENT-TECH 19186 CEUTAS 19187 IFOXNETLE 19188 EMSINC 19189 NORTHSHOREMKTG 19190 FASTWIRE-COM 19191 SPRINGNET1-EOS 19192 UCV 19193 MEDI-COM 19194 JOVITA 19195 ASCHWEBHOSTING1104 19196 BELLSOUTH-CHILE 19197 NATIONAL-TECH 19198 GREENLYNK-NET 19199 PANAMSAT-ATL 19200 UFDRGDS 19201 ETC 19202 TX3 19203 IPINETBGP01 19204 CMSONG 19205 MONEYLINE2 19206 FCS-001 19207 ACOMSOLUTIONS 19208 ENETIS 19209 GMO-BOSTON 19210 SYNCHRONOSS 19211 BACKROADS-LAURENS 19212 BACKROADS-NEWBERRY 19213 SABRE-DFW 19214 ADX-COM 19215 SCHWABCANADA00 19216 ACKERMAN-MCQUEEN 19217 IVYTECHSC 19218 VIZIONAL-LA01 19219 VIZIONAL-LA02 19220 SORRENTO-NETWORKS 19221 1AZTECH 19222 SCALESERVERS-1 19223 TAYLORGIFTS 19224 SUNAMERICA 19226 AURA-SOUTH 19227 TERRAWORLD-316 19228 NAP-ENTEL 19229 I-STRUCTURE 19230 UPROMISE 19231 ASPEHQ 19232 MONASH-ZA 19233 PRIORITY 19234 CCB 19235 MACATAWA 19236 STEELCASEINET 19237 OMNIS 19238 ALLAIRE01 19239 KLA-TENCOR 19240 SPORTSTICKER 19241 LOCAL-ISP-NJ-2000 19242 CRANK-TECHNOLOGIES 19243 SEVENSPACE 19244 ATT-LATIN-AMERICA 19245 MONEYLINE 19246 ACT2000 19247 AAOMS-NATIONAL 19248 ACSC1000 19249 COREEXPRESS-STLCORP 19250 WILEYNET 19251 DIVEO-DE-PANAMA 19252 KITE-NET 19253 SBAINC-AS 19254 KOCH-INDUSTRIES 19255 TRILOGYWIRELESS 19256 SITECONNECT 19257 GLTG 19258 DEVRY-INC 19259 TODITO 19260 INETACON 19261 ASPSTATION 19262 VZGNI-TRANSIT 19263 NETIGY 19264 NETIGY-CORP 19265 FOCAL-WASHINGTON-DC 19266 CLEARFUSION-ASN01 19267 FUSIONSTORM-COM 19268 POWERADZ 19269 AERZONE 19270 PAYMENTECH-INC 19271 PEAKCLT 19272 CENTERBEAM 19273 LGEENERGY 19274 LIVETECHNOLOGY 19275 INTERVAL 19276 CTI-EARTH 19277 RELERA 19278 ALO-MEX 19279 VISTAAR 19280 AKER-MARITIME 19281 FOXINTERNET 19282 DIGI-NET 19283 PHOENIXNET 19284 AIRBAND-COMMU1 19285 WRH64 19286 ALPHASTAR 19287 INFLOW1 19288 INFLOW2 19289 INFLOW3 19290 INFLOW4 19291 INFLOW5 19292 INFLOW6 19293 INFLOW7 19294 INFLOW8 19295 INFLOW9 19296 INFLOW10 19297 BIOPOP 19298 NET-NETPOINT 19299 IMAGEDATA-TRUEID 19300 PC-PLUS-ONLINE 19301 CERIDIAN-TAX 19302 WEBSITEBILLING1 19303 CRAWFORD123-COMPANY45 19304 GEORGETOWN-COLLEGE 19305 USWIRELESSDATA 19306 CNI-HMB-001 19307 WORLDQUEST 19308 INTEL-ONLINE-SERV 19309 INTEL-ONLINE-SERV1 19310 INTEL-ONLINE-SERV2 19311 STEWART-1 19312 ASIP-VISTAIT-COM 19313 DATACOR 19314 ESYLVAN 19315 BANELCO 19316 SPECTRUMACCESS 19317 TARANET 19318 ALBINT-AS1 19319 CCN-DMZ 19320 NETINFRASTRUCTURE 19321 WEDBUSHMORGAN 19322 GCIJOBS 19323 HGE-NET 19324 KENNEDYKRIEGER 19325 DVI-MISHAWAKA 19326 IP2GO 19327 WEBUSENE-CORP 19328 SOFTREKWEB2 19329 MCNET 19330 JONES1-WEB 19331 BIMCORP 19332 MARCATEL-MEX 19333 ACML-2 19334 SPORTLINE-DBC 19335 APRIA-HEALTHCARE 19336 UNIQUEVACATIONS 19337 COSERV-COMM-10001 19338 ATTLACHILE-PIT 19339 DIDATA-NE 19340 ECSASN 19341 ZOIDIAL 19342 NETLEVER 19343 WNYCS 19344 MULTI-HOMED 19345 SERVICEREPS-MTL 19346 NCTIMES-NET 19347 INDYMACBANK 19348 CARD-EXPRESS 19349 OLTRONICS 19350 CENTENNIALCOLLEGE 19351 MODELN 19352 SINTAKS-COMPANY 19353 WEB-ELITE 19354 FOCAL-SEATTLE 19355 SMRN-NET 19356 TOUA-NOC 19357 RESOURCING 19358 NVT-LANTHANUM 19359 SYMMETRY-COMM 19360 XOUTDOORS 19361 ATRIUMTELECOM 19362 RDA-CUSTOMSOFTWARE 19363 ASIMOV 19364 ECHOPASS-UT1 19365 NETWURX-01 19366 MNS 19367 DAKOTA 19368 SANRISE 19369 DISCOUNTLABELS 19370 WRENCHEADAS01 19371 MI8-CORP-63-240-6 19372 NCOGROUP-FTW 19373 TRIARA 19374 NEXISCO-COM 19375 NUMERICINVESTORS 19376 JUSTNET 19377 CONNECTIVA 19378 TRANSAMERICA-COMM 19379 IFOXNETNX 19380 CHROBINSON 19381 BROADBAND-LAB 19382 FAULTLESS-STARCH 19383 WORLD-WEB-USA 19384 GRAMTEL001 19385 SG-DR-SNTC 19386 HEXAGONNET 19387 DANTIS-AS 19388 IPASS-COMM 19389 GOLUB 19390 MICROSERV-JACKSON 19391 MICRO-VIS 19392 JCOM 19393 REON-BROADBAND-01 19394 CSO 19395 RESCLUB 19396 C-GROUP 19397 CLICKARRAY 19398 INDENET 19399 SLLNET 19400 SPX-CORP-AS 19401 SENECACAPITAL 19402 CACTUS 19403 TECHALLIANCEGROUP 19404 QUEST 19405 WORLDWITHOUTWIRE 19406 TOWERSTREAM 19407 FUNTODO 19408 PANTELLOS 19409 VWCREDIT-COM 19410 BENTONREA2 19411 NAP-CHILE 19412 CLARITASPRODUCTS 19413 LUMBERMENS-COM 19414 MMCWEB 19415 SIAC-CAP 19416 IDACORPENERGY 19417 DEVISE-COM 19418 WPPUSA 19419 GLOBALSTREAMS 19420 THINCNET 19421 1GLOBALCITY-PEER1 19422 MOVINET 19423 LCC-AB-CA 19424 MIGHTYNET 19425 CITYSCAPE-COMM 19426 BANDWIDTHCENTER 19427 BREMER-FINANCIAL 19428 TOSCO 19429 007MUNDO 19430 ACXIOM-CORP 19431 INTELLICLAIM 19432 HOMERELAY 19433 MISO-AS 19434 FUTURE-DESIGNS 19435 WBEB-WEB 19436 RELERA-1 19437 RELERA-2 19438 PRIME-BROKERAGE 19439 NEBOSBOY 19440 AICENT-NET 19441 NCUBE 19442 NELSONJOBS 19443 STAPLES 19444 CHARTER-STL 19445 HEWM 19446 E3C-INTERBUILD 19447 ALFANUMERIC 19448 TVINTERACTIVE 19449 CONCURRENT 19450 INVESTIN 19451 CANINVEST 19452 OAKTREECAP-COM 19453 INFINT 19454 PRAIRIESYSTEMSINC 19455 SYNERTECH-SYSTEMS 19456 WATERS-CORPORATION 19457 RUDIN 19458 NETZEE-BIRMY 19459 DADE-BEHRING-01 19460 SUTH 19461 QSI 19462 UNITED-STAT 19463 SOPS-NET 19464 WASHINGTON-AND-LEE 19465 THINKCENTRIC-PYRAMID 19466 INFOCHI 19467 NEXTERABOS1 19468 CONOCONET 19469 CENTERLYNX1 19470 PAGOOCORP 19471 ITGSI 19472 CAROLLO-ENGINEERS 19473 ISOT-001 19474 MFTI 19475 CREDITRISK 19476 ITOL 19477 FLYINGJ 19478 ICMARC 19479 CERVALIS 19480 ATFS 19481 PANAX 19482 SCOUTCOM-1 19483 SBCASI-AKRON-OH 19484 SBCASI-AKRON-OH 19485 SBCASI-AKRON-OH 19486 SBCASI-AKRON-OH 19487 SBCASI-AKRON-OH 19488 SBCASI-AKRON-OH 19489 SBCASI-AKRON-OH 19490 SBCASI-AKRON-OH 19491 SBCASI-AKRON-OH 19492 SBCASI-AKRON-OH 19493 SBCASI-AKRON-OH 19494 SBCASI-AKRON-OH 19495 SBCASI-AKRON-OH 19496 SBCASI-AKRON-OH 19497 SBCASI-AKRON-OH 19498 SBCASI-AKRON-OH 19499 OPTICNET-BLK1 19500 OPTICNET-BLK1 19501 OPTICNET-BLK1 19502 OPTICNET-BLK1 19503 MEDIBUY 19504 WTCC 19505 RESCON 19506 LOCKSTREAM 19507 NYC-TRANSIT 19508 DEL-VAL-FINANCIAL-SRV 19509 OLLUSA 19510 HUMANAASN1 19511 ELECTROLUX-NA 19512 LYONDELL 19513 IBTCO 19514 USCENTRAL 19515 ORICOM-QUEBEC1 19516 SMITH 19517 VISUAL-LINK-INOC 19518 ROCKISLAND 19519 ACRON 19520 FDINET 19521 AKIBIA 19522 XYLO 19523 AZTECSYSTEMS 19524 COMERICA-INC 19525 3E-COMPANY 19526 SUMNER 19527 PETROCOSM-CORP 19528 GEORGE-CONS 19529 E-HUB-NETWORKS 19530 NDIN-STATE 19531 VDL2-MONTREAL 19532 VISILINX-DAL-1 19533 WEARGUARD 19534 MLXML 19535 JETBLUE-AIRWAYS-01 19536 DIRECTV-DENVER 19537 EMPLANET 19538 ADVANTAGECOM 19539 IPONLY-US-AS 19540 CINGULAR-WIRELESS 19541 COMARK 19542 CERIDIAN-PERF 19543 OAKSWINT 19544 CNATRUST 19545 BANG 19546 NOWIRE 19547 DMCSTRATEX 19548 ABS 19549 IDIGLOBAL 19550 SIHOPE-AS 19551 COCSD-1 19552 BLS 19553 PSINET-AR 19554 RELERA4 19555 RELERA5 19556 RELERA6 19557 RELERA7 19558 RELERA8 19559 WWC-CLEC 19560 GWHA 19561 BIGPIPE 19562 FAMILYNETINC 19563 IDX-SYSTEMS-CORP 19564 LATECH 19565 WATKINSIT 19566 INDIGOB2B-EWR 19567 NEOVI-NET-SYS 19568 ISUPPLI 19569 PHOENIX-TEC 19570 MAPLETRONICSCOMP 19571 HAX-IRVING 19572 BEACON-TW-COLO 19573 PACIFIC-NATIONAL 19574 COOLCALL-COM 19575 2001-NEWCENTURY-CORP 19576 OTEC-COM 19577 DATABURST 19578 TRUENET-INC 19579 MANAGEDSTORAGE 19580 CSTN 19581 DALLAS-COUNTY 19582 BRAVCO 19583 IMPSAT-CL 19584 ADVANCED-NET 19585 BCSLLC 19586 CREATIVE-DATA-PNS 19587 ACTS-TESTING 19588 AEA5-K12-IA-US 19589 TELENISUS-DOWN 19590 TELENISUS-ASH 19591 FOCAL-SAN-JOSE 19592 TELEPHONY 19593 NCISP 19594 KEY3 19595 NETMORF-CORP 19596 CCNY 19597 SENETS 19598 AIRFONE-001 19599 BLUEMARK 19600 MUSICVISION 19601 FOOTHOLDTECHNOLOGY 19602 ESPEED-NY 19603 IBMCCH-STV 19604 IBMCCH-GPV 19605 RELERA9 19606 RELERA10 19607 CHIARO-NETWORKS 19608 WVMCCD 19609 MANDA-VEEDIX-NET 19610 AURORA-CENTRETECH 19611 UNISINOS-BR 19612 VASTERA 19613 MICRO-GENERAL 19614 EXARIO-1 19615 FSCV-AS 19616 ACCESS-OHIO 19617 SAA 19618 GLOBEOP-2000 19619 8498500 19620 STATCAN 19621 VIRTUAL-GIANT 19622 4ANYTHING 19623 KCI-EPAY 19624 HAMPSHIRE 19625 KEYSTONE-CONNECT-1 19626 EVC-AS 19627 SOCANTEL-001 19628 WOODARDCURRAN 19629 ZAFFIRE 19630 SOUNDADVANTAGE 19631 WORLDSPAN-LP 19632 MTROPOLIS-INTER 19633 DIGITAL-MED-CAMP 19634 ARENET 19635 MARK-ASSET 19636 EHEALTHDIRECT 19637 AGERESYSTEMS 19638 GEOUTILITIES 19639 LOGICAL2 19640 OUT-TI 19641 DRAPERS 19642 TAPNET 19643 NETSYN 19644 MAGNIFI-1 19645 MAGNIFI-2 19646 MAGNIFI-HQ 19647 HPOD20001 19648 LDSCHURCH1 19649 NEW-WORLD-APPS 19650 BUNZLUSA 19651 BLUEMARTINI 19652 MARCUSCORP 19653 CTSTELECOM 19654 HOSTING-NETWORK 19655 FOCAL-LOS-ANGELES 19656 ICGCOMMERCE-COM 19657 JP-MORGAN 19658 BROWARD-HOSPTL 19659 METSTREAM 19660 NASSAU-LIB 19661 SUSQ-BALA 19662 UNISERVE-ONLINE 19663 CASS-STL 19664 VITALCHEK 19665 RAMPANT 19666 DIGITALLIGHTHOUSE 19667 LEETECH-ATLANTA 19668 KPMG-ADMI 19669 NAPSTER 19670 CYCHILDS 19671 EVERESTBROADBAND1 19672 EVERESTBROADBAND1 19673 SUPPLYSTREAM 19674 NAVPOINT 19675 EMINDBIZ 19676 SWIFT-GLOBAL 19677 NJTRANSIT 19678 UOP 19679 EFFECTNET 19680 MONDERA 19681 CSI-TTA 19682 ADVANTICOM-AS01 19683 DOVER-CORP 19684 MHMB 19685 HCIS-1 19686 PACAMTEL-COM 19687 FIBERSTREET 19688 SANTANDER-MEXICANO 19689 BPI 19690 HYATT-INTERNET1 19691 SG-DR-STNG 19692 BLUELIGHT 19693 SYNERGYX 19694 TERABEAM12 19695 SUNTRAVELSYSTEMS 19696 NUCACHE 19697 BELZBERG 19698 XO-19698-19699 19699 XO-19698-19699 19700 DIALPAD 19701 YODLEE 19702 LATIS 19703 VALUELINE 19704 ACCUQUOTE 19705 NEXTED-USA 19706 SOS116W23 19707 THARPE-COMPANY-INC 19708 NEED2KNOW 19709 TERABEAM1 19710 S4R 19711 SWAZI-NET 19713 STATE-OF-NH-USA 19714 IPIN-BEL 19715 YOUBET 19716 ITERICOM 19717 CIDERA-MAINSTREAM 19718 NCNI 19719 TRADESCAPE-COM 19720 CABLEVISION-CORP 19721 MHN 19722 CNXASN001 19723 CELEPAR 19724 CAPITOL1-AUTO-FINANCE 19725 CARRERA-MAXIMUS 19726 WEBPUBLISHINGCOM 19727 TOWERGROUP1 19728 CORADIANT 19729 ATINAV2001 19730 DIMTEK-COM 19731 CODENSA 19732 PROTIER01 19733 SEVEN 19734 HALO 19735 SEISMICINTERNET 19736 ORDERFUSION-COM 19737 RMC 19738 FORTIS 19739 COUNTY-SANBERNARDINO 19740 SKILLGAMES 19741 NEXTELINTERNATIONAL 19742 MARLIN 19743 EVERDREAM-CORP 19744 SPARTAN-INT 19745 BIRKMANINT 19746 TELEPHIA 19747 RPA 19748 SECTORLINK 19749 GNC-LIVE-WELL 19750 C2C-FIBER 19751 CCRTC 19752 HYDROONETELECOM 19753 BSC-NET 19754 NETPOINT-COM 19755 KIMBANET 19756 DNS-ONLINE 19757 COASISBETHELASN 19758 STERLINGFINANCIALNET 19759 VIRTUAL-TRAINING 19760 CALPINE 19761 SLEDGE 19762 PENTAMARKWORLDWIDE 19763 UNIVALI 19764 EVOLVE01 19765 IMCWV 19766 QUIK-HOUSTON 19767 G1-GUATEMALA 19768 EMT-BOSTON 19769 CAPITALONE 19770 SATURATED 19771 USADATAINC01 19772 CORPORATE-WEB 19773 MOTOROLA 19774 AVISTA-CORP 19775 INTRASYSTEMS 19776 HOBSONS-US 19777 ACCENTURE-CIO-HOSTING 19778 CTSBGP 19779 KVINET 19780 SANDSTREAM-NW 19781 NATSOURCE140 19782 INDIANAGIGAPOP 19783 APPRISS 19784 NEWSGRADESRC 19785 SOLUTIONPRO-NET 19786 FTI-FGN-A001 19787 BLEICHROEDER1 19788 GETRONICS 19789 PARKSTONE 19790 SNAACASN 19791 ULTRAPRISE 19792 EVENTSDIGITAL-NYC 19793 IMPULSEMG 19794 HILTON 19795 SONO-NODE-LA1 19796 SHUBERT 19797 DEXAGON-NET 19798 TBOL 19799 INFINITE 19800 GCPUD-ORG 19801 GENZYME 19802 DILIGENZ 19803 ASNBLK-VTLA2 19804 ASNBLK-VTLA2 19805 ASNBLK-VTLA2 19806 ASNBLK-VTLA2 19807 ASNBLK-VTLA2 19808 ASNBLK-VTLA2 19809 ASNBLK-VTLA2 19810 ASNBLK-VTLA2 19811 TOTALACCESS-NET 19812 RADIANZ-NUTLEY 19813 EXCALIBUR 19814 GEO-HOU-WESTHIEMER1 19815 QOSI-NET 19816 NCSDATACOM 19817 DSLEXTREME 19818 MBFX 19819 NTTC 19820 REXAM-ASN01 19821 MERALLIS 19822 TPAC-SD-01 19823 TPAC-SJ-01 19824 TPAC-LV-01 19825 LABONE 19826 FIBERCITYNETWORKS 19827 SAIC-RAPIDAPPS 19828 IST-NET 19829 1STFIDELITY 19830 RTC-RINGGOLD-GA 19831 STAMPIN 19832 20TWENTY 19833 EDURUS 19834 FYI-NETWORKS 19835 FUTWAY 19836 VERISIGNGRS 19837 CAROLINAHOLDINGS 19838 PARCOM 19839 EONBUSINESS 19840 OAKTREECAP 19841 THESEAM-COM 19842 COLOSSEUM-ONL 19843 CHIPSHOT-INC 19844 SYNAPTA 19845 ADAYTUM 19846 PLANETCOMM-HAR 19847 NHA 19848 BCEEMERGIS-THL 19849 BTC-ONLINE 19850 RYLAND-GROUP 19851 BRE-PROPERTIES 19852 GATOR 19853 RUSHTRADE-01 19854 ERUCES 19855 MASERGY 19856 BRAZOSPORT-COLLEGE 19857 PETROCOSM-COM 19858 GENSLER 19859 FLAIR-DATA-SYSTEMS 19860 EHE-NET 19861 FACILITY-GROUP 19862 BECNET 19863 GUYANA-TELEPHONE 19864 O1COMM 19865 ICARZ 19866 OCI-CHEMICAL-CORP 19867 TOTALINK-BGP4 19868 EMIGRE 19869 AECNET 19870 IN-TOUCH 19871 NUPNY 19872 CONNECTLIVE 19873 INFOLINK 19874 DMIND 19875 IPWORLDNET 19876 HYPERSURF 19877 LORE-NET 19878 MEDIMPACT 19879 BESTNETPC 19880 REALCOMPII 19881 VTCNET 19882 AS-LL 19883 BUEHNER-FRY 19884 UNITED-DEVICES-COM 19885 ISOCENTRIC 19886 BOFABROKERDEALERSVCS 19887 KIASN 19888 ATECHNO 19889 COOPDELVISO 19890 CSCI-VA-COM 19891 VELO-PHX 19892 VELO-PORT 19893 RWT 19894 INTRAWORLD 19895 WEBUSENETCOR 19896 TELEPLACE-US-TAMPA 19897 NEXBELL 19898 FIBERLINK 19899 MDCC-EDU 19900 OOMCASN 19901 ALLEGRO 19902 NET-STATE-OHIO 19903 DYDACOMP 19904 TERRASPRING 19905 XD-SM-01 19906 CHARLES-RIVER 19907 PIONEER-TEC 19908 HOENIGRYENY9149359000 19909 DAYLIGHT 19910 ONLIGHTINC 19911 SKYVAUS 19912 ESP-GROUP 19913 ULTRAEX 19914 INTELISPAN 19915 AHAZA1 19916 ASTRUM-0001 19917 MOHEGANSUN 19918 LUCASFILM 19919 INFORMUS 19920 AKINBGP 19921 ACCESSPENNSYLVANIA 19922 ARDSLEY-PARTNERS 19923 SHENANDOAH-UNIV 19924 PROVIDENET 19925 SWCHSC 19926 GNRCHTX-AS001 19927 NHMCCD 19928 ITRACKS 19929 VERBINDASNFORBGPROUTE 19930 TSPLLC 19931 NETGENESIS 19932 FREELIANT 19933 WATER-VALLEY 19934 TRANSPLACE 19935 FIRSTONLINEAUTO 19936 GORDONFOODS 19937 MENLO-EDU 19938 INTEQ-BOS 19939 BCTELCO 19940 ACECAPE-INC 19941 CORPAYSOLUTIONS 19942 AREALTECH-01 19943 IRMI 19944 ITG26632 19945 FRIESENS 19946 FOCAL-BOSTON 19947 DEVRY-PHX 19948 IAS 19949 INFOTECH-NJ 19950 NEW-YORK-PARADE 19951 DCTI-SLC-ASN-BGP4 19952 NSPAN-BOSTON 19953 NSPAN-BOSTON 19954 ITXC-BEAVERTON 19955 PINELAND-TELEPHONE 19956 TENNESSEE-NET 19957 TENNESSEE-NET 19958 USICA-NET 19959 DELANOTECH 19960 NETSITE-INFOR 19961 DYNAMIC-PIPE 19962 EPIK 19963 DOSUB-1 19964 INVACARE 19965 AEVIA-NET 19966 CTR1-WSTR 19967 CTR1-WSTR 19968 CTR1-WSTR 19969 CTR1-WSTR 19970 CTR1-WSTR 19971 COREFACTORY 19972 DIGEO-BROADBAND 19973 WBS-JAN-1 19974 NETCONEX 19975 PIL 19976 EXELUS 19977 MBPCHICAGO 19978 IMPSAT-VEN 19979 CIBER-NET 19980 TECHTRAIN-RTR 19981 HELLER-INT 19982 TOWERSTREAM-PROV 19983 ONVIA-SEA 19984 WINENT-NET 19985 OPTICNET-ALL 19986 BUC-INTL 19987 CECOMM 19988 ROUSE-208-210-186 19989 DIAMONDCONSULTING01 19990 PEGASUS-TELE 19991 FIRSTENERGYCORP 19992 CALOP-63-66-184-224 19993 RJOBRIEN 19994 REDMON-GROUP 19995 VSECORP 19996 LEBANON-MOBILE 19997 PENNNATIONALINSURANCE 19998 RELEASENOW 19999 JETNET-INT 20000 HNR-COM 20001 ROADRUNNER-WEST 20002 TECHTEL-UY 20003 PARAGON-FCU 20004 MISO 20005 SANDHILLS-SA 20006 CORTELNET 20007 POND-AND-CO 20008 DIRECT-FOCUS-INC 20009 WADSNET 20010 PUTNAMLOVELL-SF 20011 INTERNET-SOLUTIONS 20012 INTERWRX-NETWORK 20013 CYRUSONE 20014 GEARWORKS-INC 20015 INFOPYME-SA 20016 B3CORP 20017 DAT-CORP 20018 ATWORK-NORCROSS 20019 CURTIS-MALLET-PREVOST 20020 VITCOM-AS-1 20021 LNH-INC 20022 EVERESTBROADBAND-NET 20023 EVERESTBROADBAND-NET 20024 EVERESTBROADBAND-NET 20025 EVERESTBROADBAND-NET 20026 EVERESTBROADBAND-NET 20027 LTOA 20028 ENHTECH 20029 QUANTITUDE 20030 OSDL 20031 ZOOGA 20032 VITRO 20033 NCDC-NCREN 20034 AXIOM-INT 20035 CONCUR-NET 20036 MICRO-R-D 20037 SEBL 20038 WENDOTNET 20039 COMKT1 20040 SPARKLIST 20041 NY-DATARETURN 20042 GCEC-TECHNOLOGIES 20043 DKA-1 20044 UAI-ESTADO-DE-MINAS 20045 ABSFAX-COM 20046 PLACEWARE 20047 CITYOFVABEACH 20048 AMECCMI01 20049 USATELEPORT 20050 SPPINTERNET01 20051 RENTRAK 20052 ARBOR 20053 AIRCLIC 20054 ATG-WEST 20055 SURGIENT-NET 20056 DOTCOM 20057 ATTWIRELESS-GPRS 20058 CCTC-LINK1 20059 CAR-PART 20060 PMSC-B 20061 INTELLIGROUP 20062 WASTE-MAN 20063 COFFEECREEKNET 20064 INPHACT 20065 CNA 20066 LIVCONSULT-COM 20067 FORSYTHE01 20068 MAXNETWORK 20069 RBCDSI 20070 ZIPREALTY 20071 ALH 20072 I2EYENET-COM 20073 KOMATSU-AMERICA-INT 20074 KNOWLEDGENET 20075 RFERL-ORG 20076 ADVANIS 20077 HYDRAWEB 20078 OFFICEGENIE 20079 ADSW 20080 AMPATH-AS 20081 NET2ATLANTA 20082 TAGDS1 20083 EDGARFILINGS-0001 20084 WHITEHORSE 20085 UAKRON 20086 UHIS 20087 TCW-SC 20088 2GEEKSANDAPIPE 20089 SEVENSPACE-INC 20090 THESPIEGELGROUP-1 20091 EFRAME-BGP-01 20092 OWENS-MINOR 20093 VINY 20094 MIDWEST-TEL 20095 UNIHOLD 20096 ESS00-ASN00 20097 VIRTUAL-IMAGE-TECH 20098 BCBS-AL 20099 E-MARKETS 20100 SALIENCE 20101 ERIELINK-INC 20102 A-LA-MODE 20103 VALMONT-INDUSTRIES 20104 SOLIDDATA 20105 URICHMOND 20106 INTERBANKING 20107 ROHMHAAS-ASN 20108 PIVOTTECH 20109 HORIZONS 20110 NTT 20111 DEVRY-KC 20112 DHRNETWORKS 20113 AFBIS-AS 20114 KEATING 20115 CHARTER-NET-HKY-NC 20116 CEF-GOV-BR 20117 HSBC-AR 20118 AFFINITAS 20119 KTBNET 20120 VAWEBPROP-DC-FBURG 20121 BAND-X-BR 20122 SFNB-CORP 20123 TTA 20124 DE-TELECOMM 20125 VOLERA 20126 UC-DOM 20127 KLEINSCHMIDT 20128 ASPWARE-01A 20129 MIZUHO-SC 20130 DEPAUL 20131 QUIKCAT 20132 DSC-AS 20133 CASS-COL 20134 NEURO 20135 MILLENIUM 20136 MCGASN1 20137 USIBB 20138 SELECT-COMFORT 20139 PUBLIC-SYSTEMS1 20140 MWG-1920 20141 EDELTACOM-SUW-300 20142 SIMPLEWEB 20143 SUNET-1 20144 L-ROOT 20145 UDCOMM 20146 INKTELDIRECT 20147 CONTINENTALBROADBAND 20148 PRAECIS-ASN01 20149 NHLICE 20150 ENTEGRITY-1 20151 MEDTECHINC 20152 NETBEYOND 20153 ARGUSHEALTH 20154 AMEX-TAX 20155 OCO-1 20156 EMICAP 20157 AHL 20158 BOKU-00 20159 REALESTATEFEDERATION 20160 DATACONVSPEC 20161 TRGO 20162 UTDALLAS 20163 SUNMED 20164 GO-GRAPHICS 20165 BOREALIS 20167 281 20168 NETWORLDNOC-SLC 20169 GOTHAM-1 20170 MARITZFENTONMO 20171 VANECK 20172 WINFIRST-SAC 20173 TELEVISA 20174 PARTNERS-INTL 20175 LXTNKYSETEL 20176 MERCHANTWIRED 20177 FOCAL-DALLAS 20178 INTERNETEMC 20179 BONDS-AS 20180 MERCANTRADE 20181 SORCERON 20182 XTIME-ASN 20183 VERICENTER 20184 STUDENT-FINANCE 20185 GEUS-CABLE-INTERNET 20186 BASELINEFINANCIALPHI 20187 PASSPORTHEALTH 20188 GTESS 20189 TRIENEASN01 20190 ZONZORP-NET 20191 PUC 20192 MATRIXTI 20193 NCWSINC-BLK 20194 BEARTECH 20195 RELERA-CO 20196 OGDEN-N 20197 MSS-ECL 20198 ALIBRIS 20199 FLACCESS 20200 AMBAC-FINANCIAL-GROUP 20201 SPACECOM 20202 HAIR-CLUB-FOR-MEN 20203 RCGINET 20204 NOVOLINK-HOUSTON 20205 AMPLEX 20206 SUNDT-SDG 20207 GIGARED 20208 WEBJOGGER 20209 GLATFELTERS-INTERNET1 20210 NOWONLINE 20211 HWI-ASN00 20212 MOTION-INTERNET 20213 DSLBROADBAND 20214 ATT-BROADBAND 20215 SEFL 20216 PCCVAL 20217 PERCEPTA-GW1-AS 20218 BLACKSUN 20219 INTERACTIVE-INK 20220 INDIAN-WELLS 20221 IATA 20222 PLTE 20223 AS-RJSON 20224 SYNERGYINVESTMENTS 20225 TELJET 20226 ROADWAY-EXPRESS 20227 MOUNTAINNET-SWV 20228 PACNET-MX 20229 MERRICK 20230 IQWORKS 20231 ROADRUNNER-CENTRAL 20232 AS1-ORBITALL 20234 HNTB 20235 EFFORTS 20236 PERACON-NY 20237 XPORTA 20238 TELENISUS-CHARLOTTE 20239 ALL-IN-1 20240 VENTURAFOODS 20241 TAEC 20242 NETLIBRARY-1 20243 OPTIUS 20244 DIAN 20245 OZ-TELEGLOBE 20246 AS-IMS 20247 IC531954 20248 AS-IVMG 20249 JEFFERIES 20250 RMWC-NET 20251 RCG-PSD 20252 JSIWMC 20253 VISA-DPS 20254 ALLTEL-WIRELESS-DATA 20255 TECNOWIND 20256 ULTRAMAR 20257 FTC-INET 20258 ANALOG-DEVICES 20259 VELO-RENO 20260 TRAFFIC01 20261 REDSQ-NET 20262 SCHOLARONE 20263 SAFEWEB 20264 JONESBORO 20265 UMR 20266 VESPER-BR 20267 INTERNETSERVER 20268 MNNS 20269 DANTIS-AS-LOOP 20270 ENTERPRISE 20271 DOGEAR 20272 TALKINGNETS 20273 TELXAR 20274 GENESYS-SOFT 20275 SIERRA-ATLANTIC-FREMT 20276 TECHSPACE-AUSTIN 20277 TECHSPACE-SF 20278 TECHSPACE-TORONTO 20279 MEDIAONDEMAND 20280 WORLDQUEST-1 20281 GOLIN-HARRIS 20282 NYFX-RTR 20283 CTC-INTERNET-MN 20284 INETUASN1 20285 SUTRA-NETWORKS 20286 3DAYBLINDS 20287 DODORA-1 20288 UBARRY-NET 20289 BENTLEYCOM 20290 LYNCHINC 20291 INFYNET 20292 EXECUTIVE-CON 20293 LOCALASN1 20294 MTN-UGA 20295 FILERTELEPHONE 20296 VIANETA 20297 CCDV 20298 TIBBANK 20299 NEWCOM-AMERICAS 20300 GAP-INSTRUMENT-CORP 20301 NASA-PROTO-NET 20302 SARES 20303 PRONET-CHEN 20304 JVLNET 20305 BSCH-ARGENTINA 20306 ADELPHI 20307 CTOLO 20308 STARTEKUSA 20309 NASDAQFINSYS 20310 ITW-CORPORATE 20311 VALERO 20312 CNTI-REACCIUN 20313 SMSI 20314 CONAGRAFOODS 20315 STELLCOM 20316 SECTOR-NET1 20317 TDECU 20318 MOONGLOBAL 20319 DALTON-U 20320 EVENLINK 20321 ALTGSA 20322 WOWEMPLOYERS 20323 SEEBEYOND 20324 BLOUNTSVILLE-TEL-CO 20325 PATELCOCU 20326 GLOBESPAN 20327 FORBES-COM 20328 MURATA-ELECTRONICS 20329 EFRUIT 20330 NYS-UNIFIED-COURTS 20331 GMACMR 20332 SFSLTD 20333 EXANIUM 20334 DDSCONNECT01 20335 ADVERTISING-AS 20336 CARESCIENCE 20337 SQUARE1 20338 AXCL 20339 MAREXATLANTA 20340 ISPHONE-NET 20341 MARCONI-MEDICAL 20342 PSKNET 20343 PROVALUE-1 20344 MAGNOLIA-NET 20345 GEONET 20346 SOC-OF-ACTUARIES1 20347 WEBCOUNTRY 20348 PMCO-AS 20349 ESTOREFIXTURE 20350 MCT-TELECOM-INTERNET 20351 PARTS123 20352 LHS 20353 IRGCORP 20354 AVICI-SYSTEMS 20355 SOLID-BRTECH 20356 BACAVALLEY-COM 20357 LIVEVAULT 20358 MBPSANTAFE 20359 NANOCORE 20360 MOBSHOP 20361 NET-GLOBALNET-SA 20362 THOMSON-THOMSON 20363 IMPSAT-PERU 20364 LMS-NA 20365 EW-SCRIPPS 20366 GTRIADUSA 20367 COMMERCEQUESTTPAFLA 20368 ALPHABLOX-1 20369 PALMER-CAY 20370 USAT 20371 LIBGO 20372 GOBIERNOPR-AS 20373 PARAGONSMARTTECH 20374 FOX-INC 20375 IBM-CORPORATE 20376 HUBRIS 20377 MLODE-COM 20378 FUSIONONE 20379 NET-BAKER 20380 TRICOMPICTURES 20381 CABLELABS 20382 CLIFTONGUNDERSON 20383 GREENBAYNET 20384 NWLRBD 20385 ACCESSLINE-COM-1000 20386 IONEX 20387 PANAMSAT 20388 KEYLIME 20389 AS-SAVINGS 20390 FSS 20391 011AV8ER810QUALITY223 20392 WESTPANET 20393 BEANSTALK 20394 LOCAL-ACCESS 20395 DECORATETODAY 20396 FIDMXV15 20397 BOXLAKE 20398 NETISUN 20399 ASN-NET 20400 CUDIRECTCORPORATION 20401 HOSTWAY-1 20402 OSRAM-SYLVANIA 20403 DSL-ONLY-PDX 20404 RRIHOUSTON 20406 BRASLINK 20407 CALPRTECH-CAUSA 20408 NTTA 20409 AUTONATION-ASP2 20410 AIRBAND-COMMUN1 20411 SPEAR-LEADS-KELLOGG 20412 BHFC-NET 20413 CCIU-1 20414 ELBO 20415 VP-MSN 20416 GCC-01 20417 WHEELHOUSE 20418 DACAS-NET 20419 AXILAR 20420 ANGARA-AS1 20421 1STTECHCU 20422 WEKZ-NET 20423 MULTICAST-MEDIA 20424 ZOOMLOT 20425 VIRAGELOGIC 20426 PWC-AS 20427 AAAE 20428 WIREONE-AS 20429 GUITAR-CENTER-AS2 20430 EQUISERVE-LP 20431 WINFIRST-DAL 20432 PEOPLES-COMMUNICATION 20433 TL-MABOS 20434 ALLIANCE-NETWORKS 20435 GEMPLEX 20436 PGTC-COM 20437 PROVIDENT-MUTUAL 20438 LAQUINTA 20439 LACERTE 20440 COMMSOUTH 20441 HEALTHALLIES 20442 IFLOOR 20443 ONE-BUCKHEAD 20444 INSTILL-CORP-AS1 20445 METROFIBERLINK 20446 VITCOM-AS-2 20447 CADMUSCOMMNET 20448 VPNTRANET-LLC 20449 EDUPOP 20450 SANITORS05022001 20451 CPCNET 20452 BSU 20453 ROGERS-WIRELESS 20454 HIGHHOSTING-COM 20455 NRTC-ORG 20456 BINDLEY 20457 INACOM-MADISON-WI-USA 20458 CATSKILL-ON-LINE 20459 TELECOM-NAMIBIA-AS 20460 TFBNET 20461 MYPT-SCH 20462 COMPUGEN 20463 TRSYSTEMS7704489008 20464 POLYCOM 20465 PARADYM 20466 BEEFNET 20467 SW-ORG-AS 20468 VALORTELECOM 20469 TRIMETNET 20470 CYGNIFI-AS 20471 MONCUR 20472 SYNN 20473 NETTRANS 20474 NCI-VERISTAR-1 20475 GLOOP 20476 TELVERSE 20477 RANDOLPHTELEPHONE 20478 GENMILLS 20479 TCF-ASN-TCF 21504 AMERICATAB 21505 EXENET-AS 21506 FUB 21507 HASTINGS 21508 ATT-BROADBAND-1 21509 APOLLONYC 21510 TRISTAR 21511 NCSBN 21512 ETELECARE 21513 PIKE-ONLINE 21514 PROXYMED 21515 NET-SISQTEL-NET1 21516 TECHSPACE-BOSTON-MASS 21517 TECHSPACE-95-MORTON 21518 INTEGRIS-HEALTH 21519 FISHERCOMM 21520 AS-ITAM 21521 BANCTEC 21522 ROADRUNNER-MNPLS 21523 LEASENET 21524 REDIFFVALUCOMONLINE 21525 AS-SPL 21526 NETGATEWAY-1 21527 COVENANT-EYES 21528 ALASCONNECTINC 21529 CDC-AMN 21530 EPSIIA-HEPSIIAN 21531 CTUSA-NET 21532 IHE 21533 TERREMARK 21534 FREEBAIRN 21535 BALSER-COMPANIES 21536 DPI-MERCHANT-SERVICES 21537 MBPPALOALTO 21538 GENELOGIC-BGP 21539 VONAGE 21540 LEWIS-ROCALLP 21541 CCORB 21542 ENERGYSERVICESGROUP 21543 RITEAID 21544 RIVERSTONE 21545 KCOENET 21546 WWCLLC 21547 REVNETS 21548 VDN 21549 IRON-MOUNTAIN 21550 JUNTOS 21551 HIGHBRIDGENY 21552 ALLAMERICANSEMI 21553 HENEGAN 21554 CYBERLYNK 21555 LHTC 21556 RELOACTION 21557 ERS 21558 SC-JOHNSON 21559 MICROFINANCIAL 21560 CAPITAL-TECHNOLOGY 21561 LESSCHWABMO 21562 THEINNET 21563 COVISINT 21564 NS-PROVINCIAL 21565 HTCC 21566 OSIRISCOMM 21567 BSI-NCP-00A-00001 21568 NYTD 21569 SHAWGRP 21570 ACI-1 21571 MLS-WIRELESS 21572 HOLAI 21573 HEALTHPARTNERS 21574 BIS-BR 21575 MILLICOM-PERU 21576 TELENTENTEUS 21577 TOLEDOTELNET 21578 UNAB 21579 ALLC 21580 ARBROS 21581 MMCC-AS 21582 NAU-AS 21583 WORLD-INTERNET-ONLINE 21584 ECHOPLEX 21585 WAVEOPIA 21586 SWKO 21587 SAI-AS 21588 USH 21589 1800CON-TECHCENTRE 21590 OPTIGLOBE-ARGENTINA 21591 NSINOC-KC1 21592 MGRENCODING 21593 ZANTAZ-US 21594 IBSA 21595 BAXTER 21596 SECURE-LINK 21597 KORE 21598 PROGRESS-ENERGY 21599 NETDIRECT-1 21600 LMR 21601 WEBSOFT-NET 21602 WEBBASIS 21603 ULSAMEX001 21604 CHEMONICS-USA 21605 INCURRENTCORP 21606 ECASHMGT-COM 21607 ALP1 21608 MATERIALNET 21609 CSI-01 21610 CRYSTAL 21611 NET-WSGWIN 21612 FIOCRUZ-RJ 21613 LIGHTNINGX 21614 LATLINK-NET 21615 SHAWUS 21616 NECA 21617 NARA 21619 VELOCITEL 21620 VESTANET 21621 RESPONSYS-2 21622 PR-NEWSWIRE-USA-1 21623 SPACELINK 21624 GLOBALBUSINESSCOMM-TC 21625 VODAFONEGROUP-GLOBAL 21626 DMPAYROLL 21627 RICHMOND-CONNECTIONS 21628 ELOGEX 21629 AMCC-NET 21630 PDS-NEWROADS 21631 MTREX-NET 21632 MUDDLEWORKS 21633 DOI-NBC-NET 21634 EUCLIDNETWORK 21635 PCCWBTN-AS 21636 PROMETRIC 21637 BROADBANDIP 21638 PRINCESS-COM 21639 MH2 21640 CDY 21641 MBPHOUSTON 21642 MBPWASHDC 21643 MBPNY 21644 MBPLA 21645 MBPCHARLOTTE 21646 FISHER 21647 AS-NETWORKS 21648 GRAVITON 21649 DCAS 21650 WESTTELCORP 21651 AAL 21652 PWC 21653 NET-KENOKOZIE-01 21654 GJ-USA 21655 ENCODA-ECOMMERCE-NET 21656 FIRST-ANALYSIS 21657 INTERNETAVENUES 21658 TENASN1 21659 CAMBRIDGE-CO-OP 21670 AUDIBLE 21671 MBHYDRO 21672 EDGE2NET 21673 MEDIFAX 21674 WORLDCONNECTION 21675 INTER-TEL-NET 21676 NETWORKS-ONLINE 21677 DISTRIBUTEL-QC 21678 NEW-BREED 21679 IWT-01 21680 GWLNET 21681 ANDOVER-TRADING 21682 PFHQ-ASN1 21683 INVESTEC-EC 21684 CYBERINETBGP 21685 GRSGROUP 21686 SYSTEMMETRICS-1 21687 HVDN-ROUTING 21688 CTWISP 21689 ANVICOM-AS 21690 ACYBERLINK-NET1 21691 NETZOA 21692 SECODAM 21693 XCEL-ENERGY 21694 FRESNOCOE 21695 MAUIBUILT 21696 PER-SE 21697 JMXI 21698 NEBRIX-CA 21699 SVSKYLAN 21700 V-N-HERMES 21701 SOLUCIENT 21702 HADDAD 21703 NETWORKS-AND-MORE 21704 NYCBOE-BGPNET 21705 COLOGIX-COMMUNICATION 21706 KHHTE 21707 LASD 21708 SDCOE 21709 IMPLEX-NET 21710 AN-PVL-AS 21711 WEB-IDEALS 21712 MOTE-MARINE-LAB 21713 BULLOCH 21714 LFBGPAS01 21715 NSPNET 21716 TRADOS-ASN01 21717 MCCANN-ERICKSON 21718 NW-NATURAL-GAS 21719 CHL 21720 SUNGARD-PENTAMATION 21721 LEMI 21722 UNITEL-AMERICA 21723 RADIANT-VAN2 21724 RADIANT-TORONTO 21725 BIGRIVER 21726 RGT-48W 21727 HAMLINE-EDU 21728 OCSNY 21729 CROWN-EQUIPMENT 21730 RRV-NET 21731 SHARED-IP 21732 NETGURU 21733 INCUOFFICE 21734 TRADINGTECH-TTNET 21735 GANNETT5-NET 21736 GANNETT4-NET 21737 SPRINGNET 21738 WORLDSITES 21739 TSOL 21740 ENOMAS1 21741 VISUALBYTE 21742 SAVITECH 21743 VIAFONE-BLK1 21744 SST-US 21745 FSAFOOD 21746 IDTTVTV-REMOTEFARMS 21747 SHERBTEL-NET 21748 MPAA 21749 MOLAM 21750 CPOINT-NET-1 21751 TELECORP-PCS 21752 SAINT-ROSE 21753 CONSORCIOCHILE 21754 MARKEL-CORPORATION 21755 HSLNET 21756 OT-DST 21757 HTC-COMM 21758 MODINE-MANUFACTURING 21759 NRUCFC 21760 XEROX-OPB 21761 EVOLVEONE 21762 QUALITY-DISTRIBUTION 21763 SEMPRA-ENERGY-TRADING 21764 ESOFTINC-NET 21765 MAGENTA 21766 BEN-LOMAND-TEL 21767 WASHINGTON-COLLEGE 21768 PROMOCION 21769 HERE 21770 GLOBALCO-43771 21771 NUCOR 21772 SKY-WEB 21773 EXODUSPERFORMANCELABS 21774 IDYIANET 21775 1HAYES-LEMMERZ 21776 CLSAIKMN 21777 EGCS 21778 NET-DIDATA-NY 21779 VIGILINXIPDUB 21780 GRIFFITH-LABORATORIES 21781 WCASD-NET 21782 PLATEAU 21783 SILVERNET 21784 ARCHCORP 21785 DWHOMES 21786 SAN-MATEO 21787 CERIDIAN 21788 HOSTNOC 21789 168-244 21790 LIKEWHOA 21791 TOOLCASE 21792 WORKGROUPVIDEO 21793 TENINOTELEPHONE 21794 ILLINOISPOWER 21795 DALTILE-DALCORP 21796 SPE 21797 WCCS 21798 INTERNATIONALDELIVERS 21799 MWDSC 21800 KHINET 21801 EXCALNET 21802 GLOBALIS1 21803 MYDURANGO-NET 21804 ACCESS-SK 21805 RICOH-SILICON-VALLEY 21806 NATIONAL-FUEL 21807 DOLE-PACKAGED-FOODS 21808 STUDIO-216-240-102 21809 LAVANTURE-DOM 21810 TEMPESCHOOLS 21811 POPULATION-SERVICES 21812 IMAGROUP 21813 SCHEFFEL-COMPUTERS 21814 PARSONS 21815 INFICORP 21816 TITANTELECOM 21817 COLOCO 21818 BWTELCOM 21819 WTN 21820 AXISPOINT-60HUDSON 21821 MONTEFIORE 21822 JDBS 21823 CMIT-1 21824 EASYCO 21825 BTS-XNET 21826 ICNET-1 21827 OCCAMNETWORKS 21828 TCOE 21829 JADETECH-NET 21830 CSTEL-NET 21831 DFSAS-3500 21832 ICODE 21833 SBS-TECH 21834 INTERLINK1 21835 KEIL-GATEWAY 21836 CWI-PACKETEXPRESS 21837 CYBERMILL 21838 IMPSAT-PIT 21839 CLASSMATES-2 21840 SAGONET-TPA 21841 ETRIEVENET 21842 PJM 21843 TERAWAVE-GW 21844 INFLOW-CO 21845 INFLOW-PH 21846 INFLOW-IRVINE 21847 INFLOW-MN 21848 INFLOW-PRTLND 21849 PENTON 21850 OPAY-SR 21851 POSITIONTECH 21852 DISNW1 21853 KRASDALE-FOODS 21854 DP-IS 21855 GOODTECH-SC5 21856 NOKIA-SALO 21857 PROHEALTH 21858 ACCESS-DATA-CORP 21859 DASH-1 21860 FL-GRIP 21861 FOSSIL 21862 ISIS 21863 DMVNOC 21864 BEND-BROADBAND 21865 ARA-AS-1 21867 CDSINET-NET 21868 NESL 21869 IWAY-NET1 21870 JUNIPER-HERNDON 21871 UCICOM 21872 TOWERS-PERRIN 21873 NEWMN 21874 MERCER 21875 SANDSRIVER-WIRELESS 21876 GLOBALI 21877 CSC-USA 21878 ACTIVE-COMM 21879 TIDALSOFT 21880 BERKLEY-PUREFISHING 21881 INSIGHT-HEALTH 21882 PRIORITYNETWORKS 21883 C-COM-PMA 21884 LIGHTSPAN 21885 GEO-PERCEPTION 21886 MINDSHIFT 21887 FICFIG 21888 SITEC-MX 21889 RAPIDSYSTEMS 21890 DURACOM-OK1 21891 BUGGS-NET 21892 MACROVISION 21893 TRENWICK62901 21894 BROCADE-COM 21895 EMIS-INTL 21896 ABN-AMRO 21897 VIRTUA-HEALTH 21898 KROLL 21899 ABBOTT 21900 LBPC 21901 GLOBALSERVE-1 21902 WCTA 21903 AESREDFISH 21904 INTIRA 21905 NEWRIVER 21906 US-UNWIRED 21907 EMOTION-VA01 21908 FAMILY-VIDEO-INTERNET 21909 LONGFIBRE 21910 INTIRA-1 21911 HEXXA-NETWORKS 21912 MAGICINETSERVINC 21913 ELN-MERRIMACK 21914 MCCLIER 21915 MCOEORG95340 21916 WEST-LINK65NETWORK 21917 BBVA-BANCO-BHIF 21918 ELECTRONET 21919 SUITE500 21920 BCE-PROCURON 21921 MMAERO 21922 MREP-1 21923 SCIMAGE 21924 HARDROCK-CAFE 21925 HKS 21926 HTSOLUTIONS 21927 MARKETLINX 21928 VOICESTREAMAS21928 21929 FEMA 21930 INFORMATICA 21931 KATELECOM 21932 ADITECH 21933 MSC-SOFTWARE 21934 REFCO 21935 EPSILONDATA50 21936 DONCASTER 21937 HOTSPOTFXASN1 21938 YAMAHA-DEALERS 21939 LENDINGSPACE 21940 SHAKERADVERTISING 21941 SYNCSORT-INC 21942 ON-SEMICONDUCTOR-INC 21943 ACC-HSD-AS-1 21944 DTSI-1 21945 ONESOURCEDATA 21946 EONSTREAMS-US1 21947 PANGUICH-10 21948 MCDATA 21949 BEANFIELD 21950 AUTOTEC 21951 STOLAF 21952 NEILL-CORPORATION 21953 AASAGECORP 21954 RTG 21955 SAPPHIRECOMM537947122 21956 TENASKAMARKETING 21957 RADIANT 21958 STERLINGHAGER 21959 RMI-NETWORK-ATLANTA 21960 EDSS 21961 NASDAQ-TOOLS 21962 REMOTEPIPES 21963 EVERTEK 21964 THE-SCOTTS-COMPANY 21965 BLUECROSS-BLUESHIELD 21966 OLRCORP 21967 HINES-2800-POST-OAK 21968 OAKVILLE 21969 ASG 21970 CALMCO-NET 21971 VELOCITA-US 21972 PPI 21973 CAPITAL-INTERNET 21974 ALTER-NET 21975 THREE-PILLARS 21976 NJEDGE-NET 21977 PEGASUS-BROADBAND01 21978 NCWYOGOV 21979 ETRADE-CANADA 21980 DAYCOHOST 21981 GOEASTON 21982 PICKETFENCE 21983 DOUBLE-G-COMM-WFTX 21984 FCPS 21985 ARCHSTONE 21986 YRIRV 21987 4151EXECFDCISP 21988 HENDRICK-AUTO-GROUP 21989 GREENPOINT 21990 CREDIT-ONLINE 21991 LATITUDE 21992 MTGINFO 21993 NH-HARTFORD 21994 ABNAMROPBDNJEX 21995 MSC-NETWORK 21996 GUAMCELL 21997 PROLIANCE-ENERGY 21998 SETA 21999 NBN 22000 PATERRA 22001 INVITROGEN 22002 SSI-NET 22003 SR-FUNDS-ASN001 22004 ABOUT-BLK 22005 VWR 22006 ASG-1 22007 ARADIGM 22008 LIBRARYVIDEO 22009 IDM 22010 BANISTMO 22011 XERTIX 22012 GEMINIVOICE 22013 LIBERATE-CALO 22014 LIBERATE-USHSHM 22015 LIBERATE-USSLC 22016 PHS-OR 22017 ADP-EDC 22018 TAUNTON-MUNICIPAL 22019 GETE-CCS 22020 PLANETMAGPIE 22021 ONTV-PITTSBURGH 22022 HUB-GROUP 22023 BCBSMO 22024 PARTNERRE-GREENWICH 22025 DEMOCRACYDATA 22026 TWTC-HI 22027 WORKNET-1 22028 EOSBIOTECH 22029 SKJERVEN 22030 ZIPCON-AS-1 22031 WYNNCOM-WYNNNET 22032 FLIGHTLINE 22033 CYBERSHIFT-INC 22034 MCMNET 22035 STCASN 22036 TRIVIN-AS0001 22037 IKNOWMED 22038 OZONA-NET 22039 CICADACORP 22040 SOLUTECH-INC 22041 ATSI-DAL 22042 TELETRACK 22043 STERIS 22044 SMARTFORCE01 22045 GUINNESSUDV-NA 22046 COFFMAN 22047 VTRNET 22048 WHOLE-FOODS 22049 INTERNETNAMES 22050 LOUISDREYFUS 22051 BROADBAND-HIGHWAY-AS 22052 MARINAR 22053 RIF 22054 HOOD-CANAL 22055 RSFN 22056 SITEL-1 22057 SSGNET-1 22058 VOYANTTECH 22059 AW-CHESTERTON 22060 NETWORK-DOMAIN 22061 FOXCABLENET 22062 PIXELGATE 22063 JPGETTYTRUST 22064 FXALL-FXALLIANCE 22065 LPL 22066 ENTERPRISE-SRV 22067 ZULUNET 22068 TJC-62001 22069 FOOTSTAR 22070 CVILLEHOSTING 22071 ACCESS-COVERAGE 22072 DEFINITYHEALTH 22073 GLENDALEAZ1 22074 EMSANET-NET 22075 DEVRY-DALLAS 22076 NEWSBANK 22077 RENAISSANCE-TECH 22078 ANALYSTS-INT 22079 APTNET-AS-01 22080 BROADBANDTECH 22081 CITILAB 22082 DSS-QUADRELISERVICE 22083 MEMORIAL-HEALTH-CARE 22084 RAPATTONI-ASN1 22085 TELET 22086 AMERICAN-CENTRAL-GAS 22087 CHAPEL 22088 STRATEGIC-STAFFING 22089 HALLMARK 22090 AMERIVAULT 22091 INSYNCMEDIA 22092 CONVEXX-BRASIL 22093 CCF-NETWORK 22094 CAHNERS 22095 IRELL 22096 BOOTHCREEKSKIHOLDINGS 22097 PRESTONGATES 22098 TRANSCEND-ATLANTA 22099 NET-UFO 22100 CRITICAL-PATH 22101 SRJC 22102 EASTERN-NET 22103 CYBERSCOPE-NET 22104 ATRICA 22105 ONCORP 22106 FRONTEX 22107 COLLABNET 22108 RESEARCH-INT 22109 UNIVERSAL-INSURANCE 22110 LIGTEL-COMMUNICATIONS 22111 NYBOT 22112 ALLIED-WORLDWIDE 22113 THE-DATA-CORPORATION 22114 DARIENTEL 22115 BNCHMRK1 22116 NYCEDC-AS 22117 CSATLANTA 22118 HIDDENMIND 22119 DMXAEI-LAX-01 22120 DMXAEI-SEA-01 22121 DMXAEI-DEN-01 22122 UADY-MX 22123 LEONETTI 22124 FINNEGANBGP 22125 PFPCASN 22126 EBIPSPNET 22127 PHENOMINET 22128 SINOSNET 22129 TASK 22130 MCKENNA-GROUP 22131 USDCO-2001 22132 SOCKEYE 22133 OCTETBRASIL 22134 ONECOM 22135 SKECHERS-USA 22136 NYCT 22137 VIRGINIAN-PILOT 22138 POCATLANTA 22139 DKBTPDASN 22140 VOICE-WIRE 22141 CSG-COMM-NETWORK 22142 BWI-OPER-CORP 22143 NETMAR 22144 CHAPMAN 22145 RDSI 22146 INFO1 22147 SPANET 22148 MPS 22149 PSC-AS 22150 UNITEDSERVICESOURCE 22151 BREAN-MURRAY 22152 OCHS-AS 22153 CCI-NET01-HAWAII 22154 NUTECH 22155 MSAPP 22156 MUSICNET 22157 AS1-A2W 22158 HOSTREMOTE 22159 OTSUKA-USA 22160 SIMPATA 22161 DASS-SYSUS 22162 ECPCLS-AS 22163 WASATCHCREST 22164 LLAMACOM 22165 BGP-DUCKS-CA 22166 DOTNET-INT 22167 FINTECH-INTERNET 22168 INSORS 22169 FLORIST-TRANSWORLD94 22170 NEFMLS-JAX 22171 IPSV-ASN1 22172 BAYCENGERCAR 22173 AUDITS-SURVEYS650 22174 NET-SUC-TECH-ALF 22175 TWOSIGMA 22176 PCI-ASN 22177 BUSINESSNET1808 22178 PA-SENATE 22179 ADREM 22180 CONPOINT 22181 IVNET 22182 LSGSKYCHEFS 22183 NETSOLVEOPS 22184 IRIDIUM-SATELLITE 22185 TELEFONICA-ULD 22186 PWG-BOCA 22187 VINTACOM 22188 MOBILELOGIC-INC 22189 EYESHAKE1 22190 KNIGHT 22191 THEVILLAGES 22192 SSHENET 22193 THOMSONCORP 22194 MOTISLLC 22195 ALL-INCLUSIVE 22196 SUMC 22197 APPS 22198 GLOBALIPX 22199 GOBEAM 22200 P5EHS 22201 MASTEC 22202 IMAGINE-SOFTWARE 22203 NAVITAIRE 22204 ACETO 22205 DATAPIPE-SEA 22206 GOOD-SAM 22207 ETRADEMORTGAGE 22208 NETVMG 22209 NETVMG 22210 NETVMG 22211 NETVMG 22212 NETVMG 22213 NETVMG 22214 EQUICO 22215 BHSU 22216 UGS 22217 SALU 22218 PETROCOM 22219 NEXL 22220 EACOMARTS 22221 GMACI-COMM 22222 OMAHASTEAKS 22223 IGNITE-SPORTS 22224 KNORR 22225 SPICNSPAN 22226 SFUSD 22227 BACBANK 22228 UPR-MAYAGUEZ 22229 BILLSERV 22230 NETBLK-STREAM 22231 ITC 22232 IVERSON 22233 INFORMATION-RES 22234 WEBWORKZ 22235 MI-SERVICES-WAYNE 22236 UNITEDBANCORP 22237 TMG 22238 DARPA 22239 TRADINGTECH-CORP 22240 CCS 22241 ICCEPTS 22242 NOVASTAR 22243 CENTRACOMM 22244 MOTOROLA-PHX 22245 WICHITA-STATE-U 22246 NASDAQMRKTST 22247 LETOURNEAUUNIVERSITY 22248 STORAGE-ACCESS 22249 BISSELL 22250 NAP-ABRANET 22251 REMC 22252 NYC-GOV 22253 CHADBOURNE 22254 MTGINFOSERV 22255 WPAHS 22256 FIRST-SOUTHWEST 22257 NETLINE-HL-1 22258 ATT-BROADBAND-CO 22259 VITAMIX-001 22260 PD-DLJ 22261 SDCWA-ORG 22262 ELEC 22263 DIAMOND-DATA-SYSTEMS 22264 NYCPORTNET 22265 GENESIS-OMAHA-NE 22266 KNIGHT-INC 22267 COMPUTRON 22268 NETLINKIP 22269 CHTR-WV-MID-ATLANTIC 22270 PEAKXVNET 22271 CALLSCIENCES 22272 BIG-DOG-TECH 22273 GWCCNET-ASN 22274 BRIO-ASN 22275 WEBSTREAM 22276 WYNDCOMM 22277 FASTCLICK 22278 LINUXLABS 22279 ALCI2001 22280 FIRSTHEALTHBGP 22281 PRIVATEBUSINESSINC 22282 CATAVO 22283 SIDLEY 22284 DIOS 22285 ELEADS2 22286 INTERSPOTS 22287 HMV 22288 FRBKONLINE 22289 POWERWEB 22290 STLONL 22291 CHARTER-LA 22292 PHASE2SOLUTIONS 22293 REALM-CORP 22294 NAVIGANT 22295 AWT 22296 CONN-NET 22297 PLANETGUIDE-1 22298 SECURED-PRIVATE 22299 GCRONLINE 22300 NETCONNECT-RICHMOND 22301 EARTHSAT 22302 INOC 22303 VISIONTEK 22304 BLUE-RIDGE-NOC 22305 GAMACOM 22306 FISC-JM 22307 COLOCATEAMERICA 22308 PULVERTECH-1 22309 TRANSPLATINUM 22310 LOI 22311 FAIRNET-LLC 22312 TECO-ENERGY 22313 SUPERCAB-VE 22314 INTERNETEK 22315 SBCSS 22316 MPGSITE 22317 F5-NETWORKS 22318 COX-NCF 22319 AMERIQUEST-MORTGAGE 22320 SCITX 22321 SURGE 22322 QIPNET 22323 UC-MERCED 22324 XTEL 22325 COLOCENTRAL 22326 SAMLINK 22327 GXCNET 22328 CSHS 22329 BAYMOUNTAIN 22330 CATALINAMKT 22331 HANMIDOMAIN 22332 WDC-US 22333 DATACONSTRUCTS 22334 FERGUSON 22335 MREN 22336 PELLA 22337 MCFA-NET 22338 MBTRADING1 22339 CARRERACOMMUNICATIONS 22340 ACTIONTEC 22341 RTM-BR 22342 ADEXPEDIA 22343 CLEARSKY 22344 BRADCO-SUPPLY 22345 JARAM 22346 NRZ-NETWORK 22347 DORSEY-WHITNEY 22348 GSB-COM 22349 ANTIOCH 22350 MLIBGP4 22351 INTELSAT-1 22352 APPLIED-TECHNOLOGY 22353 TAYLOR-LINK1 22354 UNIV-DAR 22355 FROGFOOT 22356 DURAND 22357 NETWORK-PHYSICS 22358 KRAMER-WILSON 22359 QNITY-NETWORKS 22360 MOBILESYS 22361 SNTI 22362 MIDMO 22363 CONTINET-BLK-1 22364 TDUS-AS 22365 MINDVISION 22366 ORIGIX-D 22367 TMISERVICES 22368 TB 22369 ACE-CASH 22370 FG1 22371 ICONET-BR 22372 EMAT-INET-1 22373 PEGS 22374 TOMAX 22375 CREDCO 22376 GOOD 22377 TRANSATLANTIC 22378 MATRIXCONSULTINGCOLA 22379 TRADETREK 22380 INCOVA 22381 MEGATELECOM 22382 MOSSFON 22383 BBA 22384 NATIONALNET-1 22385 VZ-AVENUE 22386 SARB 22387 SONOPRESS-ASH 22388 TRANSPAC 22389 ONTONOGANTELEPHONECO 22390 XEROX-WB 22391 TERABEAM-1 22392 REDINET 22393 US-OPERON-ALAMEDA 22394 SPEEDLINK 22395 TRANSACTPLUS 22396 VIVIDON 22397 MENTOR-COMM 22398 ESSEXCORP001 22399 DRKW-NYC-1 22400 SYLANTRO 22401 GBS 22402 HAMILTON-PARTNERS 22403 TRINICOM 22404 YIPES-WEB-SERVICES 22405 ENGCC 22406 HARTEHANKSDIRECT 22407 TAHO 22408 WKNET 22409 LACKAWAXEN 22410 AURUM-NET 22411 DIGITALWAY 22412 EIS-SC-1 22413 SCOTT-HEALTH 22414 SCORPIONS 22415 KASNET 22416 SOCCCD-CC-CA-US-NET1 22417 AF-COMM 22418 DIGIMARC-1 22419 ACNINC-01 22420 INCURRENTCORP1 22421 BIO2ARIZONA 22422 G-TRADE 22423 GLOBALE 22424 ARRASGROUP 22425 LEASEPLAN-USA 22426 ILINKADV 22427 ECI-EXC-01 22428 XCITENET 22429 RED-RIVER 22430 OPENREACH 22431 ABASE 22432 WORLDSTREET 22433 HRMC 22434 INTRIEVE 22435 PSFT-INC 22436 NET-CI-1 22437 TRANSWAN-00 22438 ONETTA 22439 CAT-CATWORKS-NET 22440 LOU-TELECOM-NET 22441 WHITWORTH-NET 22442 HOU-PHONOSCOPE 22443 VIRTICAL 22444 UDR-TENANT-SCREENING 22445 HARWARDINVESTMENTS 22446 MEDLINE 22447 MICRO-MAINFRAME 22448 MICRO-SPEC 22449 AES-IRONWOOD 22450 SOMERSET-NET 22451 MAITLAND-AS1-GOCO-OP 22452 NOMINUMII-GLOBAL-NET 22453 ITASBGP01 22454 PINNACLE-ACCESS 22455 ESL-FCU 22456 INTEGRAIPS 22457 CSJSC 22458 SC-ITRU 22459 MCKESSON-HEALTH-SVCS 22460 QUAKEROATS-REDUNDANT 22461 ARCUS-DIGITAL 22462 DEFS 22463 PIONEER-INET 22464 NORTHEAST-TEL 22465 INFINITY-INSURANCE 22466 OSA-CA 22467 MIRRORPLUS 22468 GAMMA-ROUTERS 22469 WISENUT 22470 NBME 22471 TFE 22472 FLCOURTS 22473 SALT-LAKE-CITY 22474 DYN-HOU-01 22475 MVP 22476 WAI-NY 22477 VYVXMXN-CDN 22478 COASTDENTAL 22479 GRAND-CENTRAL 22480 CPMC 22481 CYSIVE 22482 THEBANKERSBANK 22483 FOCUS24 22484 GKNET 22485 BRIDGEBAND 22486 TUMI 22487 VALENCIA 22488 TL-NYALB 22489 CASTLE-ACCESS 22490 ZLINK-SYSTEM 22491 EPIX-NETWORK 22492 OASYS-BGP-4 22493 RVAPC 22494 PIXELWORKS 22495 SIMON-208-0 22496 NETCOM-SYS 22497 SEAINTERNET 22498 DEVELOPONLINE 22499 FIRST-FEDERAL 22500 SKYCOMM-ASN 22501 COPETEL 22502 COVANCE-IPAS 22503 TRIGO-66-77-109-24 22504 MANDELL-KATZ 22506 PDCRP-1 22507 IPSHADOW 22508 MILENIO 22509 BANFIELD 22510 CELERA-DIAGNOSTICS 22511 CTINET 22512 OPENBSD 22513 MAGNET 22514 NOVUS 22515 DPFNET 22516 INTER-RESPONSE 22517 HOIKENETWORKS 22518 CYBORG 22519 GULFCOMP 22520 COX-NO 22521 CHTR-VA-WEST 22522 NTCH 22523 IMS-WEST-AS 22524 NOVANTHEALTH 22525 AEGM 22526 PACKETDESIGN 22527 SAFEWAY-INC 22528 DMSP 22529 RED-SEIT 22530 PATLQ-0000 22531 STEELCITY 22532 ANCURO 22533 IMS 22534 PROFICIENT 22535 EPLINC 22536 VNU-LOSANGELES 22537 ALBEMARLE-CORP 22538 KIV-CORP1 22539 BORSCHOW 22540 GLOBALATMOSPHERICS 22541 MEGALINK-AS 22542 BNET 22543 PIXELWEB 22544 DWCINET 22545 COPPERSTRIKE 22546 ZIANET-YWBA 22547 WINFIRST-CORP 22548 COMITE-GESTOR 22549 TBDSL-01 22550 PUBLICANS 22551 ANOBI 22552 SUNDT-TUC 22553 ECONOMIST-GROUP-NY 22554 MERCEDNET 22555 UTC 22556 BLACKBOARD 22557 METRON 22558 DICKCORPORATION 22559 GNF-ORG 22560 LEAPFROG-1 22561 DIGITAL-TELEPORT 22562 CSC-IGN-EMEA 22563 COZEN-PHL 22564 TRABON-SOLUTIONS 22565 CHECK-PRINTERSINC 22566 MAXCOM 22567 BROADCASTMEDIA 22568 BELL-HOWELL 22569 ADPALLIANCE-BHAM 22570 AUTODESK-1 22571 ARSALON 22572 INFOSAT-IP 22573 NWTEL 22574 COCONET 22575 MASSMUTUAL2 22576 VIRTUAL-PURCHASE 22578 PBI-CUSTNET-4528 22579 CONFUSION 22580 GUARD 22581 INTEGRAMED 22582 UPROD 22583 MFX-INTERNET 22584 ARCLIGHT 22585 ELUXURY-COM 22586 GULFAERO 22587 DOTSCONNECT-1 22588 TRADERPUBLISHINGCO 22589 AMERICAN-RELAY 22590 IGW1 22591 SNDV 22592 HBP 22593 BCBSNC-AS 22594 UNI-NET-ASN 22595 MIRANT-AS 22596 MARKETING-SOFTWARE 22597 SYNYGYASN 22598 ELECTRACASH-LB1 22599 UC-TELECOM 22600 AS-IOCENTER 22601 BONNPOWERNET 22602 EXPOEXCHANGE 22603 AIRFLASH 22604 KB-TOYS 22605 BYTEHEAD 22606 NET2TG-ASN 22607 DES-MOINES-EDU 22608 BENEFITPORT 22609 HOTJOBS-MIAMI 22610 CVH-NETBLK-1 22611 FUSIONTECH 22612 KIDZONLINE 22613 NDCHEALTH-PHX 22614 CRPUD 22615 MONROECOUNTYCOMMSCH 22616 VERTISINC-IRVING 22617 PENDERGAST-SCHOOLS 22618 GOARMY-REC-KNOX 22619 TICON-NET-1 22620 WIRELESS-RETAIL-INC 22621 UNIGROUP 22622 MIPPS-INC 22623 UTILICORP3 22624 FREMONTBANK 22625 LIGHTSPEED-1 22626 LADYLYNN 22627 UBQTMEDIA 22628 ALTEC1 22629 MONTANA-POWER 22630 MKK-CONSULTING-ENG 22631 DIGITAL-GLASS-NETWORK 22632 ULTRASW 22633 FISHERBROTHERS 22634 UBISOFT-COM 22635 DEGT 22636 NOVA-SCOTIA-POWER 22637 C-R-T 22638 ENTIRETY 22639 CAM-NET-1 22640 DBM-1 22641 NNPI 22642 CROSSCURRENT 22643 ALLPOSTERS 22644 TJUH 22645 DNS-00000000000000001 22646 HARCOM1 22647 ELLTEL 22648 SWG 22649 ATCIS 22650 KNIGHT-FINANCIAL 22651 SITELITE-A 22652 NXHOP 22653 GLOBALCOMPASS 22654 NOV-NET-01 22655 THOMCOMP 22656 VWAINC-6317575100 22657 KERNDIRECT 22658 EARTHNET 22659 LIQUIDIX 22660 ODYSSEYHEALTHCARE 22661 TELEXCLSA 22662 NATEL 22663 PROMINIC-NET-INC 22664 CUSTOM-NETWORK 22665 CHTR-CBN-NCR 22666 MAN-FIN-CHICAGO 22667 VISTA 22668 CAC-LIFE 22669 TELEGLOBE-IDC 22670 AS4VIPSASP 22671 AAAS 22672 COMPUTERHORIZONS-CORP 22673 ADVANTAGEPLAZA 22674 SOUTHERNWINE 22675 HOPS 22676 THEWEBUNWIRED 22677 SENSIENT 22678 OSDE 22679 INTEGRATED-TEL 22680 ALIGNTECH 22681 BLUENILE-NETBLK-1 22682 OCREGISTER 22683 PNA-WEB-HOSTING 22684 SSIMICRO 22685 PLUSWEB 22686 THECOMPUTERKING 22687 MDSPHARMA 22688 DOLGENCORP 22689 IBYS 22690 SYBAWEBCTN 22691 ISPNET-1 22692 NYF-CORP 22693 NERIC 22694 JEWISH-HOSPITAL 22695 AELERA-01 22696 HOLYOKE-MUTUAL 22697 FOXGAL 22698 AVANTEL-1 22699 ACSA-1 22700 TOWERSDATA 22701 ULTRADNS-1 22702 X5SOLUTIONS 22703 ANTHEM 22704 AAXICO 22705 MBI 22706 WDA-MEGANET 22707 TELSTAR 22708 CITY-OF-ELBERTON 22709 NSTELCO 22710 BRENCOURT 22711 GEFA-GENUITY 22712 LIBCOM-1 22713 CAC-EAST2 22714 LIBCOM-4AVE 22715 HART-INTL 22716 NETARX 22717 HALLIBURTON 22718 INTERIM-HEALTHCARE 22719 FLOODCITY 22720 LEXENT-INC-3NYP-301 22721 SPC-1 22722 CITADEL-1 22723 ADSNETCURVE 22724 PUNTONET-UIO 22725 NEWNET-1 22726 VENCEMOSNET 22727 USADATANET 22728 TAYLORBEANWHITAKER 22729 SPRINGCOMM 22730 MATRIXSEMI 22731 NETVOLUTION 22732 LINKNET 22733 ABN-AMRO-2 22734 DEVRY-CHICAGO 22735 NAMIBIA-OPM 22736 CPS-BGP 22737 SCHENKERUSA 22738 LANLOGIC 22739 BYU-H 22740 CAUNET-1 22741 WESTLBNY1 22742 CT-ED-NET 22743 FIRST-AMERICAN-REIS 22744 WRIGHT-EXPRESS 22745 BRTURBO 22746 FIRST-AMERICAN-FLOOD 22747 TCIS 22748 CROP-DATA 22749 MNL 22750 BCSNET 22751 JATERRANSON 22752 CW-OPTICAL-XO 22753 REDHAT-0 22754 GAPARTNERS-CT 22755 DAVISVISION 22756 ISLC-BLUFFTON 22757 DAVIDGROUP 22758 SMG-MIA 22759 SEREN-CALIFORNIA 22760 ADVANCED-FINANCIAL-S 22761 CENTER-RURAL 22762 OFIDEN 22763 EJASENT-ESJ 22764 FD-MFG 22765 EJASENT-ESJ2 22766 EDMS-NET 22767 NASA-ESDIS-NET 22768 NOPLACE 22769 FONES-WEST-ISP 22770 WHEELS-COM 22771 THE-COMMON-FUND 22772 LOGIN 22773 CCINET-2 22774 AGNS-CANADA 22775 MOORECAP 22776 CONRES01730 22777 XOR 22778 LOEAHI 22779 ASGAARD 22780 ABOUT-CORP-BLK 22781 RBLHST 22782 DSGI 22783 WEBPOWER 22784 PORTMORGAN 22785 LABVELOCITY 22786 EHELP 22787 ARRIS 22788 ACSIS 22789 VALUELINX 22790 ACTWORLDNET 22791 PENGUINPUTNAMINC 22792 MNET 22793 CASSOCORP 22794 AQR 22795 ABOUT-COM-BLK2 22796 CCC-HART 22797 GDFS 22798 REDLINK 22799 DCC 22800 NPLHUBNET 22801 INTAP-1 22802 NIVIS 22803 ENCOMPASS-2 22804 LIFETIME-TV 22805 WORLDWIDE-WEB 22806 TENCO-INC 22807 CINEMARK-US 22808 DMB-B 22809 AMFAM-INS 22810 BROOKS-AUTOMATION 22811 WSGR 22812 ADP-CA 22813 EPOLICY 22814 ATCF-NETBLK-1 22815 KELLY-INSURANCE-GROUP 22816 VIT 22817 VIC-USEXPRESS 22818 DIRECTNET-BR 22819 UCS-NPDU 22820 CYBERA 22821 AIPSO-COM 22822 LLNW 22823 HEARTLANDAMERICA 22824 ACP-ASIM 22825 OMTOOL-BLOCK1 22826 CALIPER 22827 SMARTCITY2 22828 CCBN 22829 RNKTEL 22830 SIMFLEX 22831 WOODFRUITTICHER 22832 CCHCANADA 22833 SVCTEANTL-FRTLCOM-NAV 22834 BOSTONCOLLEGE 22835 BDLAWBGP 22836 CGI-1 22837 SWIFTCOMM-NET 22838 GIONA-US 22839 STANDARDAERO 22840 RMI-NETWORKSERVICES 22841 ENERMETRIX 22842 MERCHANTS 22843 MIIS 22844 RETRIEVER 22845 MICHIGAN-CONNECT 22846 DTVLA 22847 BOWDOIN 22848 XL-CAPITAL 22849 ATT-WIRELESS-NDVN 22850 EPANA 22851 NSU-SD 22852 FMCTEL 22853 EMULEX-1 22854 CATAWBA-COLLEGE 22855 CARDINALHEALTH1 22856 DORADO 22857 NATIONAL-ADVISORS 22858 TOGETHERSOFT 22859 ON2-TECH-DUCK 22860 TECNOERA 22861 ASYMTEKPRIMARY 22862 EXTROVERSIVE 22863 MIST 22864 UTPA 22865 ITXC-HQ 22866 MAGLIA 22867 IHN 22868 BDPINTERNATIONAL 22869 ASN-SULANET 22870 TSI-GRX 22871 ASN-HOTBAR-COM 22872 HAPPEWARE-AZ-1 22873 ORIENTAL-FINANCIAL 22874 WESTERN-ILLINOIS-NET 22875 HETCO-GW 22876 JNJBRAZIL 22877 UMUC 22878 NET-KN 22879 MICRONET 22880 PRIMED-HPMG 22881 USBANCORP-2 22882 CEMEX-MEXICO 22883 CONDENAST 22884 TELECOSMO01 22885 ASI 22886 OGI 22887 CHARTER-NET-NW 22888 SUAGM 22889 TRANSTELCO 22890 ASERA-INC 22891 STANDARDINSURANCE 22892 WIKIDATANET 22893 CYBERWORLD-INT 22894 NIC-MEXICO 22895 UNER 22896 INTERNET-ACCESS 22897 PUBLISHER-INQUIRY 22898 DEBTMANAGEMENT 22899 NBO-INC 22900 ITRON 22901 INCIPIO-001 22902 INSC-SSCSD 22903 EDGEWEBHOSTING 22904 BBDO-MINN 22905 WCOX 22906 FRB-TWAI 22907 ACSSLS 22908 KIONETWORKS 22909 DNEO-OSP1 22910 LOBLAW-COMPANIES 22911 NY2-EXT1-PNAP 22912 CITGO-PETROLEUM 22913 CSSTRIPARISH 22914 CLASNET 22915 FUTUREQUEST-INC 22916 ONFS-BGP1 22917 INFOCHANNEL 22918 REGENERON 22919 PCCNET 22920 BIAEDNET-INTERNET 22921 CURIOUSPICTURES 22922 SHGREENPOINTS 22923 NIKONET 22924 BDD-01 22925 ALLIED-TELECOM 22926 11EZEEWEB-24WIRELESS 22927 TELEFONICA-ARGENTINA 22928 CMR1385 22929 VC3 22930 MARY-BALDWIN-COLLEGE 22931 ONEBEACON 22932 MOMINC 22933 TCIGATEWAY 22934 EBROADBANDNOW 22935 WAYNE-BOCES 22936 ONEEIGHTY 22937 SIMON-WEBB-NET 22938 BIGCITY-NET 22939 IQBUS 22940 DPR-CONSTRUCTION 22941 MARYVILLE-DATA-SYS 22942 DRKW-NYC-2 22943 ISO-BLK 22945 CONGRESS-FINANCIAL 22946 BRIGHTMAIL 22947 ACS-NM 22948 SONICISP 22949 CHEMCONNECT 22950 USASK 22951 WTIS-NET 22952 ALKINET-1 22953 MEDSOLVE 22954 SEECOMM-1 22955 UNOCAL 22956 DATARECOVERY-INC 22957 MONEYLINE-LENDING 22958 FIDELITY-001 22959 PHI-EXT1-PNAP 22960 RIGAKU-MSC 22961 DEEPSKYTECH 22962 KENNEDY-NW-DC-US 22963 VOSN 22964 ISPT 22965 ALLDATA-NETWORKS 22966 GOSHEN-COLLEGE 22967 CIMATELECOM1 22968 MIAMI-UNIVERSITY 22969 MARIETTA-FIBERNET 22970 MAINETECHCOLLEGESYS 22971 CEIVA-GEN-WC 22972 NWHSEA 22973 NORWEST-VENTURE 22974 STMI-COM 22975 BANCOCHILE 22976 FIRST-CITIZENS-01 22977 ALPHAGRAPHICS 22978 GSU 22979 DUPACO-COM-BGP 22980 APOGEE-TELECOM 22981 HYGRADEBUSINESS 22982 LIVE365 22983 MADDEN-BGP 22984 M4LT1BAND 22985 UL-LAFAYETTE-1 22986 SONICFOUNDRY 22987 USCABLE 22988 CAMBARASN1 22989 CHPT 22990 ALBANYEDU 22991 TRENDMLS 22992 SECUREWORKS 22993 FETTERLOGIC 22994 FN 22995 SENSORMED 22996 DFNOW 22997 PREM 22998 TAXSIMPLE 22999 RAMALLO-BROTHERS 23000 WESCOM 23001 WEBWIZARDS 23002 PRIMESYS 23003 MWAA 23004 VIEWTRADE 23005 POWER-PULSE 23006 VIALTA 23007 UNIVERSIDAD-LOS-ANDES 23008 NORC-1 23009 NORC-2 23010 FFHSJ 23011 ADI 23012 MICROCORE-MAIN 23013 NET-COM 23014 COCENTRAL-DSL 23015 INFOBLVD 23016 WAPROTOCOL 23017 TRANSIP 23018 VALICERT 23019 BGP1-BOH 23020 IMPSAT-MEXICO 23021 SECUR-ASSOCIATES 23022 CFC-CHIC-1 23023 INTUITIVE 23024 OCDE 23025 BONDDESK 23026 WHIZ 23027 BOINGO 23028 SAUNET 23029 US-FACTION-BGP 23030 SBLK 23031 QUIK-EC-AS 23032 FCS-INDUSTRIES-01 23033 WOW 23034 DESCARTES-SVC1 23035 VOLOGIC-NET 23036 N2-THE-NET 23037 IMC-BGP 23038 BRDBND-USER-GRP 23039 BURLINGTON-RES 23040 WEBRASKA 23041 THT 23042 JALAN 23043 ROVER-WIRELESS 23044 VMOBILE-CORP 23045 WEBCLIENTS 23046 STANDARD 23047 MCKINSEY-US 23048 IPSWITCH-INC 23049 ECOLAB 23050 IBCWIRELESS 23051 AEDORG 23052 IHOST-SOLUTIONS-1 23053 EXPRESS-MEDIA-GROUP 23054 NETSCOPE 23055 AMERICAN-DATAMED 23056 NRT-BOSTON 23057 MONEYPIT 23058 DHN-BGP-AS2002 23059 LLNW-LAX 23060 VDGC-HOU 23061 HSH 23062 JWPEPPER 23063 GOVITAL 23064 FULLAUDIO 23065 SBCEO 23066 SSQI-1 23067 OCBCC 23068 MEIJERNET 23069 STAMATS-COMM-CR 23070 RESERVEFUNDS-1 23071 HUNTING-INTL 23072 SEM 23073 BIGZOO-001 23074 PETROBRAS 23075 SKOTOS-AS 23076 QUARRY-WATERLOO 23077 SUNCOM 23078 LOUDOUN-CNTY-VA-GOVT 23079 ARVEST-AS1 23080 NETCOM 23081 VENTURE-NOC 23082 QUANGO-INTERACTIVE 23083 FRAGOMEN 23084 CNA-INSURANCE 23085 WATSONPHARM 23086 PROVWASH 23087 CDG 23088 TBG 23089 CARMEUSENORTHAMERICA 23090 PETCO 23091 CHAPINGO-MX 23092 ISUNET 23093 UICIMKTG 23094 YELLOWBOOK 23095 SHARP 23096 PARADIGM 23097 COHEN-STEERS 23098 PHOENIX-PLANO-EDS 23099 VANS-AS-NUMBER 23100 EASTERN-CABLE 23101 PERCEPTA-GW2-AS 23102 HGO-NET 23103 CITADONCORP 23104 HEAFNER-TIRE 23105 COASTALWAY 23106 EMPRESA-DE-INFOVIAS 23107 CYBERPORT-MONTANA 23108 CORSOLUTIONS 23109 MONEYLINE-TELERATE 23110 GENESIS-ASN 23111 IANA-VENALI 23112 SINGLEPOINT-RESOURCES 23113 MULTITEL-UY 23114 CRITICALHUBNET 23115 HEALTHBRIDGE 23116 MPA-ASN1 23117 ICOE-NETWORK 23118 SKYBEST 23119 SITESNOW 23120 E-BUILDER 23121 XSPEDIUS 23122 DSU 23123 CBCMEDIA 23124 MILLER-TABAK 23125 WORLDWIDE 23126 KMCTELCOM-DIA 23127 SOFNETINC 23128 HSBC-BRAZIL 23129 SUTTERHEALTH 23130 BURNADISC 23131 STARLAN 23132 GENERICMEDIA 23133 HOTELREVMAX 23134 METROLIST-SERVICES 23135 LLNW-SJC 23136 ONX 23137 TRI-VALLEY 23138 FIRST-STEP 23139 LEEHEC01 23140 UNIVERSIDAD-CHILE 23141 DTCNET 23142 FULCRUM 23143 ADMC-ONLINE 23144 ROADRUNNER-COM-CENT 23145 DAKEMPA1970 23146 BOD 23147 COOK-INLET 23148 TERRENAP 23149 AFASYSTEMS 23150 VMSINFO1 23151 TERC-1 23152 INTERNETCONCOURSE 23153 KENNAMETAL 23154 SANMINA-SCI 23155 HTC-NET 23156 EEMERGE44010001 23157 INFORMATICS 23158 MEDUNITE 23159 BLUEWAVE 23160 HEILIND 23161 GAB-ROBINS 23162 KCI-BSC2 23163 N9E7X5E3N1I2N4C 23164 LLNW-SFO 23165 THE-NAT-RESCRH-GRP 23166 EXPRESS-NETWORKS 23167 FARPOINTER 23168 PC-ETAILER 23169 ARNEILL-PY 23170 US-ICAP-001 23171 MANHATTAN-EDU 23172 PENTAGONFEDERALCU 23173 CSRSD 23174 ESPED-BLOCK 23175 SWANK 23176 SERCO 23177 TNB-NET 23178 MMI-NET 23179 EMJMETALS-COM-BREA 23180 BARRA-CO 23181 BIS-NET 23182 ELOCAL-TRADING 23183 SWIFTSYSTEMS 23184 PERSONA 23185 GHXUS 23186 CYBERLOGTECH 23187 ICEPTS 23188 WIN 23189 SKY-ACCESS 23190 AES 23191 LEMOYNE 23192 VERIZON 23193 CCAC 23194 CGXCOIN 23195 REDWOOD-TELEPHONE 23196 SYSTEMS-APPL-ENG 23197 HAWTHORNE 23198 NCI-AS1 23199 COMDATA-NETWORK 23200 KCI-BSC3 23201 MIC-PY 23202 MLS-WIRE-LESS 23203 PITCOMM 23204 HMSA-ASNID 23205 BBSC-NET-SLCUT 23206 DATAVOX-TECHNOLOGIES 23207 NORTHWESTERN-STATE 23208 ACIESNET1 23209 VHDA20011260123220 23210 EIDETIK 23211 JCOM-2 23212 ELIZABETH 23213 ASAMXP 23214 EAUTOCLAIMS 23215 MEGAPATH-US 23216 RAMTELECOM 23217 EY-CANADA 23218 GARTNER 23219 MICROCERV 23220 NASHFINCH 23221 ROUTING 23222 CBS-INC 23223 HHLC-1 23224 HHLC-2 23225 HHLC-3 23226 ASI-INTERNET1 23227 NIKON 23228 ACSE 23229 TRANSCANADA 23230 FARMERS-BRANCH 23231 IGETSMART-COM23502 23232 IREN-PGH 23233 FENWICK 23234 FUJIFUTURES 23235 BOSMED-88-ENEWTON 23236 NETV 23237 MCMASTER 23238 VANYON-INET-SVCS 23239 MERCHANT 23240 LCA-EXTRANET 23241 DELAWARENET 23242 E-CONNEXUS 23243 AMIGONET-ASN01 23244 CALPOP2 23245 TAK 23246 GIGAIPNET 23247 HFMUS 23248 SMARTCONNECT 23249 AVECTRA 23250 DIGICON 23251 BFRC 23252 IK 23253 DNEO-OSP2 23254 CARR-INTERNET 23255 PACIFICORP 23256 BLUETELEGRAPH 23257 IBMCCH-BOS 23258 PARAMOUNTPICTURES 23259 PLANES-INCORPORATED 23260 DATA-FORTRESS-GROUP 23261 JOHN-MORRELL-1 23262 LINCOLN-UNIVERSITY 23263 UCGI 23264 INTERCERVE-CLT-COLO 23265 POCKETINET 23266 COMCAST-CABLE 23267 TRIDENT 23268 TRADEWINDNET 23269 ICONS-RKE-VA-01 23270 CBAY-ANNAPOLIS 23271 PLUG-PAY 23272 CCSI2572274 23273 SBWH 23274 PRICELINE-COM-AS-01 23275 UICIINSCTR 23276 MVM01 23277 SMARTCITY-SDCC 23278 SMARTCITY-ANACC 23279 SMARTCITY-LACC 23280 CETROM 23281 CITY-OF-SACRAMENTO 23282 COUNTYOFSB 23283 AMEREN 23284 LCSYS 23285 GES-NATIONAL-LV 23286 THRIFTY-CAR5310 23287 SCRIPPS 23288 RWE-AMERICAS 23289 CONNECTION-ISP-BR 23290 ALVION 23291 FLAGSTAR-BANK-US 23292 MILLENIUM-DIGITAL 23293 JAMECO-ELECTRONICS 23294 ULM-1 23295 INET-HDC 23296 LINCARE 23297 EMASON-CLRWTR-01 23298 TVSCOMMUNICATIONS 23299 MRM-BERMUDA 23300 MDCONNECT 23301 WISC-INVESTMENT-BOARD 23302 SMTUSA 23303 NEXTEL-IT 23304 DIGITAL-FOUNTAIN 23305 WORTHINGTONINDUSTRIES 23306 PLASTIPAK-PACKAGING 23307 IENTRY-NETWORK 23308 SWEETWATER 23309 CCCOE-NET 23310 TASTYLIME 23311 HINDANET-01 23312 MARIANNA-TELEPHONE 23313 GCS-USA 23314 ORLANDOTELCO 23315 HALLDICKLER 23316 ATM-CDN-MTL-AS-001 23317 WHITMANCOLLEGE 23318 PDL 23319 MEDIASPACE 23320 DID-IT 23321 MEDIACHRON 23322 AMERICAN-AUTO 23323 NET-DVC 23324 MFEDS01 23325 US1NET 23326 BROADCOM-CORP 23327 ITINET 23328 ZURICH-GLOBAL-ASSETS 23329 FRSI 23330 OMEGA-ADVISORS 23331 EQT 23332 MANUHQ 23333 AGIS306 23334 COMM-OF-BASEBALL 23335 SEVIN 23336 DATATWIST-NETWORK 23337 PATRIOT 23338 NTERA 23339 TACHYON-INC 23340 AFFMANAGERSGRP 23341 PPSINCLITTLEROCK 23342 UNITEDLAYER 23343 TRNS 23344 DUPONTDISPLAYS 23345 WEBCORE 23346 JLTSERVICES 23347 DCC-US 23348 ARCHWIRELESS 23349 FARMERS-NETWORK-WEST 23350 EQUIVA 23351 FLUENTNH 23352 SERVER-CENTRAL-CHI 23353 DIVEOMX 23354 MEDIARING 23355 DICTAPHONE-ICHART 23356 WOW-PAGES 23357 CXP 23358 MIDFL-NSOURCE 23359 INDIVISUAL-LEARNING 23360 MORIMOR 23361 CARADASLABS 23362 DATATXT 23363 RHINO-NET 23364 ACI-NA 23365 SPIRIAN-455-23-60611 23366 LSUHEALTHSCIENCESCTR 23367 SWANK-ELMHURST 23368 PCSCONNECT 23369 SCOE 23370 NET-TY 23371 REFLECTONE 23372 IDCGLOBAL 23373 CYENCE-01 23374 FORT-PEARCE-UTILITY 23375 GTA-COM 23376 SPROCKETDATA 23377 CARLSON 23378 FRANKLINMINT 23379 CHECKAGAIN 23380 COBBEMC 23381 TRAVELERS 23382 USERVERS 23383 METROREDHN 23384 STORAGE 23385 ITCONVERGENCE 23386 CRYE-LEIKE-REALTORS 23387 SENECA 23388 DUANE-MORRIS-CHICAGO 23389 VIDNET 23390 OPMR-1 23391 OASIS-SALUDA 23392 VWFS 23393 ISPRIME 23394 PSPINC-BDC 23395 ELIASSPORTSBUREAU 23396 NUTRISYSTEM 23397 CBOT 23398 ZHONE 23399 ISP-MANAGEMENT 23400 IAPC 23401 NAC-TRANSIT 23402 OMNIPLEX 23403 DESIGNRITE-NET 23404 RITTERNET 23405 COMMERZBANKUSA 23406 VERISITY-DESIGN 23407 ALT-N 23408 TBI-001 23409 HERALD-ASN1 23410 NET-NASSAU-BOCES 23411 PRISTINE 23412 NET-CI-2 23413 SEEDRG 23414 AUTORIDAD 23415 MD1NET-1 23416 NURIA-CHILE 23417 PACKAGING-CORP 23418 GMP1701 23419 TIARA 23420 NASHVILLEWRAPS 23421 CTS-MNS 23422 SECDOG-NET01 23423 SATELLITE-NY 23424 STATSINC 23425 SVTINC 23426 BKD-LLP 23427 CMISERVICES 23428 CVC 23429 LUCEFORWARDHS-SD-1 23430 HCCTEL 23431 BROKERAGE-SYSTEMS 23432 TUSCO-NET-1 23433 STAMPS-COM 23434 LANDMARKEDUCATION 23435 VANDERWEIL-ENGINEERS1 23436 US-WAMU-NET 23437 WEBMETHODS 23438 ADCNAP-MIA-01 23439 AMADAAMERICA 23440 V1SF1-NET 23441 OPTIDYNAMIC 23442 LLW 23443 JDCAPITAL-BGPASN-001 23444 SEVERN-TRENT-LABS 23445 NETFIDO 23446 NSAI 23447 PLAYERSCOMPUTER 23448 EPCOR 23449 UNEXT-DEERFIELD 23450 SEEUTHERE 23451 WIRELESSFACILITIES 23452 NTS-INTERNET 23453 NPBI-NOC 23454 CDI-ASP 23455 ORCO-CORP1 23456 IANA-ASTRANS 23457 SUREBRIDGE 23458 DHH-AUTHORITY 23459 MORINDA 23460 CISCO-PHOENIX-DNET 23461 DDMS-ECI2 23462 SAUNSTAR-PARKPLAZA 23463 LONEPINECAPITAL 23464 ILCSNET 23465 NUTELECOM 23466 COURIERPOSTNEWSPAPER 23467 ADVANTECH-SOLUTIONS 23468 XBOX-ONLINE 23469 HIGHWOODS 23470 RQSI 23471 ATHERSYS-MAIN 23472 SONICWALL-BGP 23473 EMB-FLL 23474 SNL-FINANCIAL 23475 COMB-SPEC 23476 OAKASSOCIATES 23477 AIRLINE-AUTOMATION 23478 INTERNET-SECURITIES 23479 TSPEC 23480 AIRBORNE 23481 HCTC-LINK1 23482 IMAPDATA 23483 SHASTACOE 23484 PACENET 23485 LE-MERIDIAN 23486 NETSPAN 23487 CONECEL1 23488 INDEXA-CL 23490 SERANOA-NETWORKS 23491 DECIBELPRODUCTS 23492 NEZPERCETRIBE 23493 COOP-RES-SERVICES 23494 HSC 23495 EDSMXINTASN-01 23496 REGENCE 23497 PHATPIPE-NOCAL 23498 THTI 23499 45700ZMBL 23500 GREYWOLF-TECHNOLOGIES 23501 TMX 23502 MORAGA 23503 BGE-INTERNET1 23504 SPEAKEASY 23505 ECG-CHARLOTTE 23506 NUBRIDGES 23507 NET3G 23508 GECMF 23509 INVLOCSVC 23510 BRUT 23511 CONGOLEUM 23512 RGTS-SJ 23513 WHALEY 23514 ACCELACOM-BWI 23515 ONLINESERVICESUSAINC 23516 ALLOY-INC 23517 IGNW 23518 ING 23519 XNETCORV 23520 NEW-WORLD-NETWORK 23521 SHOREWEST 23522 CIT-FOONET 23523 RAINYDAYSOFTWARECORP 23524 MAGNUM 23525 SCI 23526 CARLSONCAPITAL 23527 COTELLIGENCE 23528 BASELL 23529 BONAPPETIT 23530 CASECENTRAL 23531 TTLC-INTERNET 23532 YADA 23533 KBTOYS 23534 HANLEY-WOOD 23535 HOSTROCKET 23536 FANIZZI 23537 MICROSOURCEASN 23538 IPI 23540 DNX-NET-01 23541 ANMCUR01 23542 TOTALSPEED 23543 IDX-SYSTEMS-CORP-ISD 23544 SKYPILOT 23545 LCA-VISION 23546 LEVINCO-NY 23547 WINSTON-STRAWN 23548 THEDACARE 23549 DATA-IXP 23550 ULTRACOM 23551 1-INGWILDE 24489 MARINK12 25539 ARISTOTLE 25600 MATRIKON-1 25601 TMANAGE-64-218-169 25602 TRAVELERSPCAS2 25603 SCOTTSDALE-INSURANCE 25604 3NT3RGY-K0CH 25605 RGB-INTERNET-SYSTEMS 25606 CPVCOM 25607 IBW-BGP 25608 WISUSA 25609 DMC 25610 FLAGLERTITLECOMPANY01 25611 NSLIJHS 25612 DSL-EXPRESS 25613 PMECOMPANIES-DOM 25614 UBIQUITEL 25615 BBV 25616 AR-GROUP-HOUSTON 25617 SMITHNEPHEW 25618 PCESYSTEMS-INTERNET1 25619 VECTOR-CAPITAL 25620 COTAS 25621 ONEVOICE 25622 DEGNAN 25623 MSDCAPITAL-ASN01 25624 QUESTERRA 25625 IPAI 25626 POTEN 25627 BTS-USA 25628 FCFCU-AS 25629 695ONLINE 25630 CARROTWEST 25631 GALLAUDET 25632 SPDE 25633 DATAMATX-ATL 25634 KIODEX 25635 SAIT-CA 25636 ONTL-2002 25637 PRMTC 25638 4GUYS 25639 CASELOGIC 25640 HAWAII-DEPT-OF-EDUC 25641 ABC-SCH-SUPP 25642 SPIDERHOST 25643 TYKHE 25644 LOGICLINK 25645 OPENREACH-2 25646 NCCN 25647 TIPG 25648 PARALLAXSYSTEMS 25649 MONTGOMERYCOUNTY200PR 25650 PAXCOM 25651 SDIATTMCI 25652 BRAND-X-INTERNET 25653 PEGASUS 25654 LPCAPWILTON 25655 OSTK-COM 25656 OLEMISSS 25657 DSL-SERVICES 25658 EQUINIX-RS-SJO 25659 MERIDIANTELESIS 25660 ALTERITYNET 25661 SUNESIS-PHARM 25662 DDPSC 25663 PRIDEMOBILITY 25664 SOLANOCOE 25665 LIVEOFFICE 25666 BAREWEB 25667 HOME-SHOPPING-NETWORK 25668 MERIDIANTELESIS2 25669 MERIDIANTELESIS3 25670 TWISTEDPAIRCA 25671 VALEXIA 25672 GRIZZARD229 25673 RMSSLB 25674 GDC 25675 PICTUREPEOPLE 25676 FEDEX-FREIGHT 25677 ONFS-BGP2 25678 SCHIFFHARDIN 25679 TDC-DATA3 25680 EMUNET-HBGVA 25681 SWNM 25682 CONTRACTDATASCAN 25683 WBSSC 25684 WEBERSHANDWICK 25685 E-VILLAGE 25686 UNGARETTI-HARRIS 25687 KVH02842 25688 AMERITIF 25690 MAMSI 25691 CTSTATEU 25692 AEGISINFOSYS 25693 CLEARPATH-NETWORKS 25694 ATOMIC 25695 LEO 25696 NABNY 25697 WAITSFIELD-NETWORK 25698 SMART-CITY 25699 WILSONART-INTL 25700 SWIFTDESK 25701 AMERICATEL-PERU 25702 RELIASERVE 25703 ONEWORKPLACE 25704 MULTIVISION-INC 25705 AMERICATEL-PERU2 25706 INTERLINKCI-AS1 25707 ITECH 25708 GOODAD-1 25709 LAMARUNIV 25710 FULL-CHANNEL 25711 SNYDERSDRUGSTORES 25712 CSIPADKY 25713 FDS 25714 ACTIVAR 25715 UREACH-C 25716 OCEANWIDE-PRODNET-01 25717 RAVENSFIELD 25718 COCHA 25719 MERIDIANTELESIS4 25720 HONEYCOMB 25721 DATA-CONTROL-CORP 25722 IMARKCOMMUNICATIONS 25723 AOLTW-WMG-DE 25724 MANGROVE 25725 TE 25726 AVES-WAN 25727 UBSW-ENERGY 25728 ASO 25729 CITY-OF-IRVING 25730 USENIX 25731 TEKSOLVERS 25732 BLUEPUMPKIN 25733 WAVETEL 25734 AMERICANET 25735 ANYSITE-TECHNOLGIES 25736 TRADEONEMKTG 25737 ENFRA-AV 25738 CONNACTIVITY 25739 ADTRAN 25740 SAC 25741 MESA 25742 DONERUS 25743 EEA-EPSON 25744 ONYX-ACCEPTANCE 25745 ALENTUS 25746 UNISYS-SLC 25747 VSC-SATELLITE-CO 25748 CQGNET-CHICAGO 25749 ISLANDINT 25750 COMMERSEL 25751 VALUECLICK 25752 NEO 25753 CALPERS 25754 INSFL 25755 NOC1-INSIDECREW 25756 MS-SOC 25757 VAILNET 25758 CADRE-04012002 25759 MOTIVATION-EXCELLENCE 25760 BROOKFIELD-HOMES-WASH 25761 STAMINUS-COMM 25762 BOCUSA 25763 DDSRC-NET 25764 TELCO-NETWORK 25765 CQGNET-NEWYORK 25766 MAXUPTIME 25767 WAVEFORM 25768 AQ-1 25769 GVTEL 25770 RESGEN 25771 HUBERLAW 25772 TRATEXAS 25773 EJOURNEY 25774 CHAPMORTCORP 25775 LABFS 25776 UNIV-OF-OKLAHOMA 25777 SNE 25778 URBAN-INSTITUTE 25779 HAMAMATSU-CORPORATION 25780 NFA-INTERNET1 25781 GREENHILL 25782 EDGE-1-AIRLOGIC 25783 HBK-NEW-YORK 25784 CSC-IGN-AMER-HOU 25785 COMUNITY01 25786 ABSCORP 25787 CSF-NM 25788 EXCELON 25789 LMU 25790 GAMMANETWORKING 25791 BILLMATRIX-CORP 25792 TMC-HEALTHCARE 25793 EDSZA-WAN 25794 DPCLAX 25795 ARPNET 25796 ADVIZEX-TECHNOLOGIES 25797 TERANET 25798 MINDSTECH 25799 HOLMAN 25800 ASPEN-TECHNOLOGY 25801 AUTOMATED-FINANCIAL 25802 HBO 25803 KYUS 25804 LLNW-LGA 25805 STIKEMAN 25806 RALEYNET 25807 INFUTURO 25808 HMTF 25809 HBK-NY 25810 ADEC 25811 WORLDLINKTELECOM 25812 ESTAFETA 25813 LASON 25814 NEBRASKA-ON-RAMP-INC 25815 PRIMEOFFICECENTER 25816 TOURO 25817 SMARTECHCORP 25818 CMCNETWORKS 25819 SATSEC 25820 HMC 25821 NET-SCNB 25822 ACUMENSOL 25823 REHABCARE-NET 25824 CONAGRA-FOODS 25825 DATAWARE 25826 UOTTAWA 25827 NLM 25828 STATE-OF-IDAHO 25829 SMITHSONIAN 25830 BLUE-VALLEY 25831 NETBLK-HOU-EXP-1 25832 PRODEB 25833 TOCT 25834 OMD 25835 RBH-CLT-NET1 25836 STERLING-JEWELERS 25837 EXTRADEV 25838 OMANET 25839 INTERWEB 25840 PROVIDENCE-EDU 25841 BADGERIX 25842 BURR-WOLFF 25843 IESFORVAL 25844 SKADDEN1 25845 VIRGINIA-MASON 25846 CIPHERGEN 25847 SERVINT 25848 LTGC 25849 FILOGIX 25850 DCBB 25851 ENTRANCERAMP0 25852 HUTCHTEL 25853 ELJY30540 25854 WEBALG-COM 25855 DNS-NY 25856 LEADMASTER 25857 ACS-DC-NET 25858 PCNET-WICHITA 25859 CFS 25860 CHICAGO-20-MHZ 25861 AUSTIN-BANK 25862 EROS 25863 HUNTERENG 25864 APPERETO 25866 ND-K12-I2 25867 INTRIA-HP-CORP 25868 TELVISTA-COMPANY 25869 HSBC-US 25870 PCFCOM 25871 WFG 25872 ARQULE 25873 MERCY 25874 DAVENPORT 25875 FRIENDFINDER 25876 LADWP-INTERNET 25877 EURORSCG-HQ 25878 EMACHINES 25879 MGHS 25880 UNIPXNET 25881 AUCTIONWATCH 25882 SENIOR-META-NTWK 25883 CITIGROUP 25884 WIZARDS 25885 NPG-NY-GR 25886 EDS-2 25887 SLIAC 25888 CPQ-CXO-IOMC 25889 QTMEDICAL-1 25890 ADEMCONET 25891 SBSF 25892 VERTEX 25893 CCU 25894 WIRECOM 25895 IIA-HFX-NET 25896 VELO-FRESNO 25897 SERVERBEACH 25898 FULL-SAIL-INC 25899 NOANET-OR 25900 HEMETUSD 25901 CP-MEDIA 25902 GLBLINK-01 25903 DOWNLOADTECH 25904 GULFCOAST 25905 PPI-DC1 25906 IVGNCB 25907 BRINKER-INT 25908 UNITEL-GUATEMALA 25909 AXILAX01 25910 LEGION-INS 25911 CUTCO 25912 GETCO1 25913 BRENNTAG 25914 SUNCOM-GPRS 25915 DIALNIL 25916 FREEMAN-COMPANIES 25917 SYDA 25918 AACES440 25919 RBI 25920 EVERYNETWORK 25921 LAF-CONSOLIDATED-GOV 25922 EQUITY-MARKETING 25923 CHOICEPOINT 25924 PURECONNECTION 25925 CITYOFLETH 25926 SUPPLYGUYS 25927 TELECAM-NET 25928 AWC1867 25929 MERCURY-MARIN 25930 HOU-HYPD 25931 SDXBF-DC-1 25932 DWSI 25933 SOUTHTECH-TI 25934 TSI-MAIN 25935 WNYRIC-NET 25936 MJH-SYSTEM 25937 TRANS-VIDEO 25938 SOROS-FUND-MAN 25939 DKW 25940 TIBCO 25941 SUPERCLUBS 25942 CRITICALTECH 25943 WISPAIR 25944 WITTSEND 25945 UR-ONRAMP-INC 25946 NETACCESS-SYSTEMS 25947 CBCM 25948 EMSCOM 25949 ESCOUT 25950 BEGGSTELEPHONE 25951 EDS-TROY 25952 AEAINVESTORS 25953 WHAFHNY-1 25954 STERNE 25955 PROSKAUER-1 25956 ASPEN 25957 ACETECHUSA 25958 MSGCORP-01 25959 SUNTRUST 25960 SDI 25961 WEBTONE 25962 ALC 25963 TCCD-1 25964 LHMM 25965 BRAMCO 25967 OATI-2300 25968 SELUNET 25969 SLU 25970 IAC 25971 MILWAUKEE-PS 25972 SAPLABS 25973 MZIMA 25974 HOTWIRE 25975 GREATACCESS 25976 UNIVERSCO1-CA 25977 HCCS 25978 USG-CORP01 25979 COMDC-WI 25980 NTRA-BCWAN 25981 SNWMD-US 25982 NORTH-DALLAS-BANK 25983 ENMAX 25984 MEDSTARHEALTH 25985 SAMNET-WMA 25986 CENTURY-HQ 25987 WESTCHESTER-LIBRARY 25988 CCL 25989 STONEEAGLE 25990 INTERMARKMEDIA 25991 BENDIXCVS 25992 VERSATECH 25993 TRI-SBC 25994 NPG-001 25995 BRDGR-SYS1 25996 FBICJIS 25997 OMMLA-1 25998 UNDP-ARGENTINA 25999 DARGAL 26000 COHN-WOLFE 26001 VITRIA 26002 SU-NOC 26003 DEVRY-FREMONT 26004 LAWTON-CABLE 26005 CALLAWAYGOLF 26006 QUANTIVA 26007 BHRS 26008 QUESTIONMARK 26009 NIFCU 26010 QL-ASN-AV 26011 LMCSC 26012 NET-OHIO-BWC 26013 NASTECHWA 26014 TRIZEC-CHICAGO 26015 THINKORSWIM 26016 FNYS 26017 BETTENDORF-LIBRARY 26018 TENG 26019 MONSTERCABLE 26020 1-AQUILA 26021 QL-ASN-EP 26022 FIRST-NORTHERN-BANK 26023 ABCGROUP 26024 MISYS-FAST-SERVICES 26025 COC 26026 DIGITALTHINK-IS 26027 MVMC 26028 PANDUIT 26029 ALFG 26030 GHSINC 26031 MONMOUTH-COUNTY 26032 FDMS 26033 EDGETRADE 26034 ASN-DELTA-OUT 26035 SKYLINE3355 26036 COMPULOGIC-SYSTEMS 26037 CID-EEI 26038 USPA 26039 WPC 26040 EPEOPLE 26041 MINDSHARE 26042 LEISUREIND6779 26043 NATL-EDU 26044 SCM-CANADA 26045 NETLI 26046 USU-EDU 26047 MGMEAD 26048 CHILENA-CL 26049 SES-AMERICOM-WBES 26050 SMC-TPA 26051 KNOWLES-ELECTRONICS 26052 FORTIS-US 26053 DREAMNET-C-S-I 26054 ARCHIVENTURE 26055 EUROLOG-USA 26056 PCMALL 26057 DONOVANDATA 26058 WEST-TX 26059 XNET-GW 26060 EMERGING-132 26061 COBOGGO 26062 IBMCCH-LAX 26063 ALCONLABS-11975 26064 LTI-NJ 26065 ABA-1375 26066 NVUSD 26067 DREAMTANK 26068 ONSH-NET-CHGO-BLK01 26069 SENTO-CORP 26070 TOURICO-HOLIDAYS 26071 LAKEHEAD 26072 ALLEGHENYENERGY 26073 NETBLK-CI-01 26074 FRESHDIRECTINC 26075 MCUNY-01 26076 PROCKET 26077 SHARPSSG 26078 PROVIDICOM-NMU-BLK 26079 VCENTRIX 26080 TCCO 26081 ALL-01 26082 POWERSHIFTBVT 26083 FFM 26084 PCI 26085 YAHOO-2 26086 BESTBUY-2 26087 FIELDSTONE-MORTGAGE 26088 INLANDTELEPHONE 26089 KERTEL 26090 ASN-ITE-CONSULTORIA 26091 FWDATA 26092 LANCOPE-HQ 26093 HAR 26094 TXPETROCHEM 26095 FINDSVP-625 26096 LODDEN 26097 DOCUMENTUM-HQ 26098 CHAPDELAINEANDCO-9150 26099 IAS-1 26100 UDRTAS 26101 YAHOO-3 26589 WIMBERLEY 32768 IANA-RSVD 32769 IANA-RSVD 32770 IANA-RSVD 32771 IANA-RSVD 32772 IANA-RSVD 32773 IANA-RSVD 32774 IANA-RSVD 32775 IANA-RSVD 32776 IANA-RSVD 32777 IANA-RSVD 32778 IANA-RSVD 32779 IANA-RSVD 32780 IANA-RSVD 32781 IANA-RSVD 32782 IANA-RSVD 32783 IANA-RSVD 32784 IANA-RSVD 32785 IANA-RSVD 32786 IANA-RSVD 32787 IANA-RSVD 32788 IANA-RSVD 32789 IANA-RSVD 32790 IANA-RSVD 32791 IANA-RSVD 32792 IANA-RSVD 32793 IANA-RSVD 32794 IANA-RSVD 32795 IANA-RSVD 32796 IANA-RSVD 32797 IANA-RSVD 32798 IANA-RSVD 32799 IANA-RSVD 32800 IANA-RSVD 32801 IANA-RSVD 32802 IANA-RSVD 32803 IANA-RSVD 32804 IANA-RSVD 32805 IANA-RSVD 32806 IANA-RSVD 32807 IANA-RSVD 32808 IANA-RSVD 32809 IANA-RSVD 32810 IANA-RSVD 32811 IANA-RSVD 32812 IANA-RSVD 32813 IANA-RSVD 32814 IANA-RSVD 32815 IANA-RSVD 32816 IANA-RSVD 32817 IANA-RSVD 32818 IANA-RSVD 32819 IANA-RSVD 32820 IANA-RSVD 32821 IANA-RSVD 32822 IANA-RSVD 32823 IANA-RSVD 32824 IANA-RSVD 32825 IANA-RSVD 32826 IANA-RSVD 32827 IANA-RSVD 32828 IANA-RSVD 32829 IANA-RSVD 32830 IANA-RSVD 32831 IANA-RSVD 32832 IANA-RSVD 32833 IANA-RSVD 32834 IANA-RSVD 32835 IANA-RSVD 32836 IANA-RSVD 32837 IANA-RSVD 32838 IANA-RSVD 32839 IANA-RSVD 32840 IANA-RSVD 32841 IANA-RSVD 32842 IANA-RSVD 32843 IANA-RSVD 32844 IANA-RSVD 32845 IANA-RSVD 32846 IANA-RSVD 32847 IANA-RSVD 32848 IANA-RSVD 32849 IANA-RSVD 32850 IANA-RSVD 32851 IANA-RSVD 32852 IANA-RSVD 32853 IANA-RSVD 32854 IANA-RSVD 32855 IANA-RSVD 32856 IANA-RSVD 32857 IANA-RSVD 32858 IANA-RSVD 32859 IANA-RSVD 32860 IANA-RSVD 32861 IANA-RSVD 32862 IANA-RSVD 32863 IANA-RSVD 32864 IANA-RSVD 32865 IANA-RSVD 32866 IANA-RSVD 32867 IANA-RSVD 32868 IANA-RSVD 32869 IANA-RSVD 32870 IANA-RSVD 32871 IANA-RSVD 32872 IANA-RSVD 32873 IANA-RSVD 32874 IANA-RSVD 32875 IANA-RSVD 32876 IANA-RSVD 32877 IANA-RSVD 32878 IANA-RSVD 32879 IANA-RSVD 32880 IANA-RSVD 32881 IANA-RSVD 32882 IANA-RSVD 32883 IANA-RSVD 32884 IANA-RSVD 32885 IANA-RSVD 32886 IANA-RSVD 32887 IANA-RSVD 32888 IANA-RSVD 32889 IANA-RSVD 32890 IANA-RSVD 32891 IANA-RSVD 32892 IANA-RSVD 32893 IANA-RSVD 32894 IANA-RSVD 32895 IANA-RSVD 32896 IANA-RSVD 32897 IANA-RSVD 32898 IANA-RSVD 32899 IANA-RSVD 32900 IANA-RSVD 32901 IANA-RSVD 32902 IANA-RSVD 32903 IANA-RSVD 32904 IANA-RSVD 32905 IANA-RSVD 32906 IANA-RSVD 32907 IANA-RSVD 32908 IANA-RSVD 32909 IANA-RSVD 32910 IANA-RSVD 32911 IANA-RSVD 32912 IANA-RSVD 32913 IANA-RSVD 32914 IANA-RSVD 32915 IANA-RSVD 32916 IANA-RSVD 32917 IANA-RSVD 32918 IANA-RSVD 32919 IANA-RSVD 32920 IANA-RSVD 32921 IANA-RSVD 32922 IANA-RSVD 32923 IANA-RSVD 32924 IANA-RSVD 32925 IANA-RSVD 32926 IANA-RSVD 32927 IANA-RSVD 32928 IANA-RSVD 32929 IANA-RSVD 32930 IANA-RSVD 32931 IANA-RSVD 32932 IANA-RSVD 32933 IANA-RSVD 32934 IANA-RSVD 32935 IANA-RSVD 32936 IANA-RSVD 32937 IANA-RSVD 32938 IANA-RSVD 32939 IANA-RSVD 32940 IANA-RSVD 32941 IANA-RSVD 32942 IANA-RSVD 32943 IANA-RSVD 32944 IANA-RSVD 32945 IANA-RSVD 32946 IANA-RSVD 32947 IANA-RSVD 32948 IANA-RSVD 32949 IANA-RSVD 32950 IANA-RSVD 32951 IANA-RSVD 32952 IANA-RSVD 32953 IANA-RSVD 32954 IANA-RSVD 32955 IANA-RSVD 32956 IANA-RSVD 32957 IANA-RSVD 32958 IANA-RSVD 32959 IANA-RSVD 32960 IANA-RSVD 32961 IANA-RSVD 32962 IANA-RSVD 32963 IANA-RSVD 32964 IANA-RSVD 32965 IANA-RSVD 32966 IANA-RSVD 32967 IANA-RSVD 32968 IANA-RSVD 32969 IANA-RSVD 32970 IANA-RSVD 32971 IANA-RSVD 32972 IANA-RSVD 32973 IANA-RSVD 32974 IANA-RSVD 32975 IANA-RSVD 32976 IANA-RSVD 32977 IANA-RSVD 32978 IANA-RSVD 32979 IANA-RSVD 32980 IANA-RSVD 32981 IANA-RSVD 32982 IANA-RSVD 32983 IANA-RSVD 32984 IANA-RSVD 32985 IANA-RSVD 32986 IANA-RSVD 32987 IANA-RSVD 32988 IANA-RSVD 32989 IANA-RSVD 32990 IANA-RSVD 32991 IANA-RSVD 32992 IANA-RSVD 32993 IANA-RSVD 32994 IANA-RSVD 32995 IANA-RSVD 32996 IANA-RSVD 32997 IANA-RSVD 32998 IANA-RSVD 32999 IANA-RSVD 33000 IANA-RSVD 33001 IANA-RSVD 33002 IANA-RSVD 33003 IANA-RSVD 33004 IANA-RSVD 33005 IANA-RSVD 33006 IANA-RSVD 33007 IANA-RSVD 33008 IANA-RSVD 33009 IANA-RSVD 33010 IANA-RSVD 33011 IANA-RSVD 33012 IANA-RSVD 33013 IANA-RSVD 33014 IANA-RSVD 33015 IANA-RSVD 33016 IANA-RSVD 33017 IANA-RSVD 33018 IANA-RSVD 33019 IANA-RSVD 33020 IANA-RSVD 33021 IANA-RSVD 33022 IANA-RSVD 33023 IANA-RSVD 33024 IANA-RSVD 33025 IANA-RSVD 33026 IANA-RSVD 33027 IANA-RSVD 33028 IANA-RSVD 33029 IANA-RSVD 33030 IANA-RSVD 33031 IANA-RSVD 33032 IANA-RSVD 33033 IANA-RSVD 33034 IANA-RSVD 33035 IANA-RSVD 33036 IANA-RSVD 33037 IANA-RSVD 33038 IANA-RSVD 33039 IANA-RSVD 33040 IANA-RSVD 33041 IANA-RSVD 33042 IANA-RSVD 33043 IANA-RSVD 33044 IANA-RSVD 33045 IANA-RSVD 33046 IANA-RSVD 33047 IANA-RSVD 33048 IANA-RSVD 33049 IANA-RSVD 33050 IANA-RSVD 33051 IANA-RSVD 33052 IANA-RSVD 33053 IANA-RSVD 33054 IANA-RSVD 33055 IANA-RSVD 33056 IANA-RSVD 33057 IANA-RSVD 33058 IANA-RSVD 33059 IANA-RSVD 33060 IANA-RSVD 33061 IANA-RSVD 33062 IANA-RSVD 33063 IANA-RSVD 33064 IANA-RSVD 33065 IANA-RSVD 33066 IANA-RSVD 33067 IANA-RSVD 33068 IANA-RSVD 33069 IANA-RSVD 33070 IANA-RSVD 33071 IANA-RSVD 33072 IANA-RSVD 33073 IANA-RSVD 33074 IANA-RSVD 33075 IANA-RSVD 33076 IANA-RSVD 33077 IANA-RSVD 33078 IANA-RSVD 33079 IANA-RSVD 33080 IANA-RSVD 33081 IANA-RSVD 33082 IANA-RSVD 33083 IANA-RSVD 33084 IANA-RSVD 33085 IANA-RSVD 33086 IANA-RSVD 33087 IANA-RSVD 33088 IANA-RSVD 33089 IANA-RSVD 33090 IANA-RSVD 33091 IANA-RSVD 33092 IANA-RSVD 33093 IANA-RSVD 33094 IANA-RSVD 33095 IANA-RSVD 33096 IANA-RSVD 33097 IANA-RSVD 33098 IANA-RSVD 33099 IANA-RSVD 33100 IANA-RSVD 33101 IANA-RSVD 33102 IANA-RSVD 33103 IANA-RSVD 33104 IANA-RSVD 33105 IANA-RSVD 33106 IANA-RSVD 33107 IANA-RSVD 33108 IANA-RSVD 33109 IANA-RSVD 33110 IANA-RSVD 33111 IANA-RSVD 33112 IANA-RSVD 33113 IANA-RSVD 33114 IANA-RSVD 33115 IANA-RSVD 33116 IANA-RSVD 33117 IANA-RSVD 33118 IANA-RSVD 33119 IANA-RSVD 33120 IANA-RSVD 33121 IANA-RSVD 33122 IANA-RSVD 33123 IANA-RSVD 33124 IANA-RSVD 33125 IANA-RSVD 33126 IANA-RSVD 33127 IANA-RSVD 33128 IANA-RSVD 33129 IANA-RSVD 33130 IANA-RSVD 33131 IANA-RSVD 33132 IANA-RSVD 33133 IANA-RSVD 33134 IANA-RSVD 33135 IANA-RSVD 33136 IANA-RSVD 33137 IANA-RSVD 33138 IANA-RSVD 33139 IANA-RSVD 33140 IANA-RSVD 33141 IANA-RSVD 33142 IANA-RSVD 33143 IANA-RSVD 33144 IANA-RSVD 33145 IANA-RSVD 33146 IANA-RSVD 33147 IANA-RSVD 33148 IANA-RSVD 33149 IANA-RSVD 33150 IANA-RSVD 33151 IANA-RSVD 33152 IANA-RSVD 33153 IANA-RSVD 33154 IANA-RSVD 33155 IANA-RSVD 33156 IANA-RSVD 33157 IANA-RSVD 33158 IANA-RSVD 33159 IANA-RSVD 33160 IANA-RSVD 33161 IANA-RSVD 33162 IANA-RSVD 33163 IANA-RSVD 33164 IANA-RSVD 33165 IANA-RSVD 33166 IANA-RSVD 33167 IANA-RSVD 33168 IANA-RSVD 33169 IANA-RSVD 33170 IANA-RSVD 33171 IANA-RSVD 33172 IANA-RSVD 33173 IANA-RSVD 33174 IANA-RSVD 33175 IANA-RSVD 33176 IANA-RSVD 33177 IANA-RSVD 33178 IANA-RSVD 33179 IANA-RSVD 33180 IANA-RSVD 33181 IANA-RSVD 33182 IANA-RSVD 33183 IANA-RSVD 33184 IANA-RSVD 33185 IANA-RSVD 33186 IANA-RSVD 33187 IANA-RSVD 33188 IANA-RSVD 33189 IANA-RSVD 33190 IANA-RSVD 33191 IANA-RSVD 33192 IANA-RSVD 33193 IANA-RSVD 33194 IANA-RSVD 33195 IANA-RSVD 33196 IANA-RSVD 33197 IANA-RSVD 33198 IANA-RSVD 33199 IANA-RSVD 33200 IANA-RSVD 33201 IANA-RSVD 33202 IANA-RSVD 33203 IANA-RSVD 33204 IANA-RSVD 33205 IANA-RSVD 33206 IANA-RSVD 33207 IANA-RSVD 33208 IANA-RSVD 33209 IANA-RSVD 33210 IANA-RSVD 33211 IANA-RSVD 33212 IANA-RSVD 33213 IANA-RSVD 33214 IANA-RSVD 33215 IANA-RSVD 33216 IANA-RSVD 33217 IANA-RSVD 33218 IANA-RSVD 33219 IANA-RSVD 33220 IANA-RSVD 33221 IANA-RSVD 33222 IANA-RSVD 33223 IANA-RSVD 33224 IANA-RSVD 33225 IANA-RSVD 33226 IANA-RSVD 33227 IANA-RSVD 33228 IANA-RSVD 33229 IANA-RSVD 33230 IANA-RSVD 33231 IANA-RSVD 33232 IANA-RSVD 33233 IANA-RSVD 33234 IANA-RSVD 33235 IANA-RSVD 33236 IANA-RSVD 33237 IANA-RSVD 33238 IANA-RSVD 33239 IANA-RSVD 33240 IANA-RSVD 33241 IANA-RSVD 33242 IANA-RSVD 33243 IANA-RSVD 33244 IANA-RSVD 33245 IANA-RSVD 33246 IANA-RSVD 33247 IANA-RSVD 33248 IANA-RSVD 33249 IANA-RSVD 33250 IANA-RSVD 33251 IANA-RSVD 33252 IANA-RSVD 33253 IANA-RSVD 33254 IANA-RSVD 33255 IANA-RSVD 33256 IANA-RSVD 33257 IANA-RSVD 33258 IANA-RSVD 33259 IANA-RSVD 33260 IANA-RSVD 33261 IANA-RSVD 33262 IANA-RSVD 33263 IANA-RSVD 33264 IANA-RSVD 33265 IANA-RSVD 33266 IANA-RSVD 33267 IANA-RSVD 33268 IANA-RSVD 33269 IANA-RSVD 33270 IANA-RSVD 33271 IANA-RSVD 33272 IANA-RSVD 33273 IANA-RSVD 33274 IANA-RSVD 33275 IANA-RSVD 33276 IANA-RSVD 33277 IANA-RSVD 33278 IANA-RSVD 33279 IANA-RSVD 33280 IANA-RSVD 33281 IANA-RSVD 33282 IANA-RSVD 33283 IANA-RSVD 33284 IANA-RSVD 33285 IANA-RSVD 33286 IANA-RSVD 33287 IANA-RSVD 33288 IANA-RSVD 33289 IANA-RSVD 33290 IANA-RSVD 33291 IANA-RSVD 33292 IANA-RSVD 33293 IANA-RSVD 33294 IANA-RSVD 33295 IANA-RSVD 33296 IANA-RSVD 33297 IANA-RSVD 33298 IANA-RSVD 33299 IANA-RSVD 33300 IANA-RSVD 33301 IANA-RSVD 33302 IANA-RSVD 33303 IANA-RSVD 33304 IANA-RSVD 33305 IANA-RSVD 33306 IANA-RSVD 33307 IANA-RSVD 33308 IANA-RSVD 33309 IANA-RSVD 33310 IANA-RSVD 33311 IANA-RSVD 33312 IANA-RSVD 33313 IANA-RSVD 33314 IANA-RSVD 33315 IANA-RSVD 33316 IANA-RSVD 33317 IANA-RSVD 33318 IANA-RSVD 33319 IANA-RSVD 33320 IANA-RSVD 33321 IANA-RSVD 33322 IANA-RSVD 33323 IANA-RSVD 33324 IANA-RSVD 33325 IANA-RSVD 33326 IANA-RSVD 33327 IANA-RSVD 33328 IANA-RSVD 33329 IANA-RSVD 33330 IANA-RSVD 33331 IANA-RSVD 33332 IANA-RSVD 33333 IANA-RSVD 33334 IANA-RSVD 33335 IANA-RSVD 33336 IANA-RSVD 33337 IANA-RSVD 33338 IANA-RSVD 33339 IANA-RSVD 33340 IANA-RSVD 33341 IANA-RSVD 33342 IANA-RSVD 33343 IANA-RSVD 33344 IANA-RSVD 33345 IANA-RSVD 33346 IANA-RSVD 33347 IANA-RSVD 33348 IANA-RSVD 33349 IANA-RSVD 33350 IANA-RSVD 33351 IANA-RSVD 33352 IANA-RSVD 33353 IANA-RSVD 33354 IANA-RSVD 33355 IANA-RSVD 33356 IANA-RSVD 33357 IANA-RSVD 33358 IANA-RSVD 33359 IANA-RSVD 33360 IANA-RSVD 33361 IANA-RSVD 33362 IANA-RSVD 33363 IANA-RSVD 33364 IANA-RSVD 33365 IANA-RSVD 33366 IANA-RSVD 33367 IANA-RSVD 33368 IANA-RSVD 33369 IANA-RSVD 33370 IANA-RSVD 33371 IANA-RSVD 33372 IANA-RSVD 33373 IANA-RSVD 33374 IANA-RSVD 33375 IANA-RSVD 33376 IANA-RSVD 33377 IANA-RSVD 33378 IANA-RSVD 33379 IANA-RSVD 33380 IANA-RSVD 33381 IANA-RSVD 33382 IANA-RSVD 33383 IANA-RSVD 33384 IANA-RSVD 33385 IANA-RSVD 33386 IANA-RSVD 33387 IANA-RSVD 33388 IANA-RSVD 33389 IANA-RSVD 33390 IANA-RSVD 33391 IANA-RSVD 33392 IANA-RSVD 33393 IANA-RSVD 33394 IANA-RSVD 33395 IANA-RSVD 33396 IANA-RSVD 33397 IANA-RSVD 33398 IANA-RSVD 33399 IANA-RSVD 33400 IANA-RSVD 33401 IANA-RSVD 33402 IANA-RSVD 33403 IANA-RSVD 33404 IANA-RSVD 33405 IANA-RSVD 33406 IANA-RSVD 33407 IANA-RSVD 33408 IANA-RSVD 33409 IANA-RSVD 33410 IANA-RSVD 33411 IANA-RSVD 33412 IANA-RSVD 33413 IANA-RSVD 33414 IANA-RSVD 33415 IANA-RSVD 33416 IANA-RSVD 33417 IANA-RSVD 33418 IANA-RSVD 33419 IANA-RSVD 33420 IANA-RSVD 33421 IANA-RSVD 33422 IANA-RSVD 33423 IANA-RSVD 33424 IANA-RSVD 33425 IANA-RSVD 33426 IANA-RSVD 33427 IANA-RSVD 33428 IANA-RSVD 33429 IANA-RSVD 33430 IANA-RSVD 33431 IANA-RSVD 33432 IANA-RSVD 33433 IANA-RSVD 33434 IANA-RSVD 33435 IANA-RSVD 33436 IANA-RSVD 33437 IANA-RSVD 33438 IANA-RSVD 33439 IANA-RSVD 33440 IANA-RSVD 33441 IANA-RSVD 33442 IANA-RSVD 33443 IANA-RSVD 33444 IANA-RSVD 33445 IANA-RSVD 33446 IANA-RSVD 33447 IANA-RSVD 33448 IANA-RSVD 33449 IANA-RSVD 33450 IANA-RSVD 33451 IANA-RSVD 33452 IANA-RSVD 33453 IANA-RSVD 33454 IANA-RSVD 33455 IANA-RSVD 33456 IANA-RSVD 33457 IANA-RSVD 33458 IANA-RSVD 33459 IANA-RSVD 33460 IANA-RSVD 33461 IANA-RSVD 33462 IANA-RSVD 33463 IANA-RSVD 33464 IANA-RSVD 33465 IANA-RSVD 33466 IANA-RSVD 33467 IANA-RSVD 33468 IANA-RSVD 33469 IANA-RSVD 33470 IANA-RSVD 33471 IANA-RSVD 33472 IANA-RSVD 33473 IANA-RSVD 33474 IANA-RSVD 33475 IANA-RSVD 33476 IANA-RSVD 33477 IANA-RSVD 33478 IANA-RSVD 33479 IANA-RSVD 33480 IANA-RSVD 33481 IANA-RSVD 33482 IANA-RSVD 33483 IANA-RSVD 33484 IANA-RSVD 33485 IANA-RSVD 33486 IANA-RSVD 33487 IANA-RSVD 33488 IANA-RSVD 33489 IANA-RSVD 33490 IANA-RSVD 33491 IANA-RSVD 33492 IANA-RSVD 33493 IANA-RSVD 33494 IANA-RSVD 33495 IANA-RSVD 33496 IANA-RSVD 33497 IANA-RSVD 33498 IANA-RSVD 33499 IANA-RSVD 33500 IANA-RSVD 33501 IANA-RSVD 33502 IANA-RSVD 33503 IANA-RSVD 33504 IANA-RSVD 33505 IANA-RSVD 33506 IANA-RSVD 33507 IANA-RSVD 33508 IANA-RSVD 33509 IANA-RSVD 33510 IANA-RSVD 33511 IANA-RSVD 33512 IANA-RSVD 33513 IANA-RSVD 33514 IANA-RSVD 33515 IANA-RSVD 33516 IANA-RSVD 33517 IANA-RSVD 33518 IANA-RSVD 33519 IANA-RSVD 33520 IANA-RSVD 33521 IANA-RSVD 33522 IANA-RSVD 33523 IANA-RSVD 33524 IANA-RSVD 33525 IANA-RSVD 33526 IANA-RSVD 33527 IANA-RSVD 33528 IANA-RSVD 33529 IANA-RSVD 33530 IANA-RSVD 33531 IANA-RSVD 33532 IANA-RSVD 33533 IANA-RSVD 33534 IANA-RSVD 33535 IANA-RSVD 33536 IANA-RSVD 33537 IANA-RSVD 33538 IANA-RSVD 33539 IANA-RSVD 33540 IANA-RSVD 33541 IANA-RSVD 33542 IANA-RSVD 33543 IANA-RSVD 33544 IANA-RSVD 33545 IANA-RSVD 33546 IANA-RSVD 33547 IANA-RSVD 33548 IANA-RSVD 33549 IANA-RSVD 33550 IANA-RSVD 33551 IANA-RSVD 33552 IANA-RSVD 33553 IANA-RSVD 33554 IANA-RSVD 33555 IANA-RSVD 33556 IANA-RSVD 33557 IANA-RSVD 33558 IANA-RSVD 33559 IANA-RSVD 33560 IANA-RSVD 33561 IANA-RSVD 33562 IANA-RSVD 33563 IANA-RSVD 33564 IANA-RSVD 33565 IANA-RSVD 33566 IANA-RSVD 33567 IANA-RSVD 33568 IANA-RSVD 33569 IANA-RSVD 33570 IANA-RSVD 33571 IANA-RSVD 33572 IANA-RSVD 33573 IANA-RSVD 33574 IANA-RSVD 33575 IANA-RSVD 33576 IANA-RSVD 33577 IANA-RSVD 33578 IANA-RSVD 33579 IANA-RSVD 33580 IANA-RSVD 33581 IANA-RSVD 33582 IANA-RSVD 33583 IANA-RSVD 33584 IANA-RSVD 33585 IANA-RSVD 33586 IANA-RSVD 33587 IANA-RSVD 33588 IANA-RSVD 33589 IANA-RSVD 33590 IANA-RSVD 33591 IANA-RSVD 33592 IANA-RSVD 33593 IANA-RSVD 33594 IANA-RSVD 33595 IANA-RSVD 33596 IANA-RSVD 33597 IANA-RSVD 33598 IANA-RSVD 33599 IANA-RSVD 33600 IANA-RSVD 33601 IANA-RSVD 33602 IANA-RSVD 33603 IANA-RSVD 33604 IANA-RSVD 33605 IANA-RSVD 33606 IANA-RSVD 33607 IANA-RSVD 33608 IANA-RSVD 33609 IANA-RSVD 33610 IANA-RSVD 33611 IANA-RSVD 33612 IANA-RSVD 33613 IANA-RSVD 33614 IANA-RSVD 33615 IANA-RSVD 33616 IANA-RSVD 33617 IANA-RSVD 33618 IANA-RSVD 33619 IANA-RSVD 33620 IANA-RSVD 33621 IANA-RSVD 33622 IANA-RSVD 33623 IANA-RSVD 33624 IANA-RSVD 33625 IANA-RSVD 33626 IANA-RSVD 33627 IANA-RSVD 33628 IANA-RSVD 33629 IANA-RSVD 33630 IANA-RSVD 33631 IANA-RSVD 33632 IANA-RSVD 33633 IANA-RSVD 33634 IANA-RSVD 33635 IANA-RSVD 33636 IANA-RSVD 33637 IANA-RSVD 33638 IANA-RSVD 33639 IANA-RSVD 33640 IANA-RSVD 33641 IANA-RSVD 33642 IANA-RSVD 33643 IANA-RSVD 33644 IANA-RSVD 33645 IANA-RSVD 33646 IANA-RSVD 33647 IANA-RSVD 33648 IANA-RSVD 33649 IANA-RSVD 33650 IANA-RSVD 33651 IANA-RSVD 33652 IANA-RSVD 33653 IANA-RSVD 33654 IANA-RSVD 33655 IANA-RSVD 33656 IANA-RSVD 33657 IANA-RSVD 33658 IANA-RSVD 33659 IANA-RSVD 33660 IANA-RSVD 33661 IANA-RSVD 33662 IANA-RSVD 33663 IANA-RSVD 33664 IANA-RSVD 33665 IANA-RSVD 33666 IANA-RSVD 33667 IANA-RSVD 33668 IANA-RSVD 33669 IANA-RSVD 33670 IANA-RSVD 33671 IANA-RSVD 33672 IANA-RSVD 33673 IANA-RSVD 33674 IANA-RSVD 33675 IANA-RSVD 33676 IANA-RSVD 33677 IANA-RSVD 33678 IANA-RSVD 33679 IANA-RSVD 33680 IANA-RSVD 33681 IANA-RSVD 33682 IANA-RSVD 33683 IANA-RSVD 33684 IANA-RSVD 33685 IANA-RSVD 33686 IANA-RSVD 33687 IANA-RSVD 33688 IANA-RSVD 33689 IANA-RSVD 33690 IANA-RSVD 33691 IANA-RSVD 33692 IANA-RSVD 33693 IANA-RSVD 33694 IANA-RSVD 33695 IANA-RSVD 33696 IANA-RSVD 33697 IANA-RSVD 33698 IANA-RSVD 33699 IANA-RSVD 33700 IANA-RSVD 33701 IANA-RSVD 33702 IANA-RSVD 33703 IANA-RSVD 33704 IANA-RSVD 33705 IANA-RSVD 33706 IANA-RSVD 33707 IANA-RSVD 33708 IANA-RSVD 33709 IANA-RSVD 33710 IANA-RSVD 33711 IANA-RSVD 33712 IANA-RSVD 33713 IANA-RSVD 33714 IANA-RSVD 33715 IANA-RSVD 33716 IANA-RSVD 33717 IANA-RSVD 33718 IANA-RSVD 33719 IANA-RSVD 33720 IANA-RSVD 33721 IANA-RSVD 33722 IANA-RSVD 33723 IANA-RSVD 33724 IANA-RSVD 33725 IANA-RSVD 33726 IANA-RSVD 33727 IANA-RSVD 33728 IANA-RSVD 33729 IANA-RSVD 33730 IANA-RSVD 33731 IANA-RSVD 33732 IANA-RSVD 33733 IANA-RSVD 33734 IANA-RSVD 33735 IANA-RSVD 33736 IANA-RSVD 33737 IANA-RSVD 33738 IANA-RSVD 33739 IANA-RSVD 33740 IANA-RSVD 33741 IANA-RSVD 33742 IANA-RSVD 33743 IANA-RSVD 33744 IANA-RSVD 33745 IANA-RSVD 33746 IANA-RSVD 33747 IANA-RSVD 33748 IANA-RSVD 33749 IANA-RSVD 33750 IANA-RSVD 33751 IANA-RSVD 33752 IANA-RSVD 33753 IANA-RSVD 33754 IANA-RSVD 33755 IANA-RSVD 33756 IANA-RSVD 33757 IANA-RSVD 33758 IANA-RSVD 33759 IANA-RSVD 33760 IANA-RSVD 33761 IANA-RSVD 33762 IANA-RSVD 33763 IANA-RSVD 33764 IANA-RSVD 33765 IANA-RSVD 33766 IANA-RSVD 33767 IANA-RSVD 33768 IANA-RSVD 33769 IANA-RSVD 33770 IANA-RSVD 33771 IANA-RSVD 33772 IANA-RSVD 33773 IANA-RSVD 33774 IANA-RSVD 33775 IANA-RSVD 33776 IANA-RSVD 33777 IANA-RSVD 33778 IANA-RSVD 33779 IANA-RSVD 33780 IANA-RSVD 33781 IANA-RSVD 33782 IANA-RSVD 33783 IANA-RSVD 33784 IANA-RSVD 33785 IANA-RSVD 33786 IANA-RSVD 33787 IANA-RSVD 33788 IANA-RSVD 33789 IANA-RSVD 33790 IANA-RSVD 33791 IANA-RSVD 33792 IANA-RSVD 33793 IANA-RSVD 33794 IANA-RSVD 33795 IANA-RSVD 33796 IANA-RSVD 33797 IANA-RSVD 33798 IANA-RSVD 33799 IANA-RSVD 33800 IANA-RSVD 33801 IANA-RSVD 33802 IANA-RSVD 33803 IANA-RSVD 33804 IANA-RSVD 33805 IANA-RSVD 33806 IANA-RSVD 33807 IANA-RSVD 33808 IANA-RSVD 33809 IANA-RSVD 33810 IANA-RSVD 33811 IANA-RSVD 33812 IANA-RSVD 33813 IANA-RSVD 33814 IANA-RSVD 33815 IANA-RSVD 33816 IANA-RSVD 33817 IANA-RSVD 33818 IANA-RSVD 33819 IANA-RSVD 33820 IANA-RSVD 33821 IANA-RSVD 33822 IANA-RSVD 33823 IANA-RSVD 33824 IANA-RSVD 33825 IANA-RSVD 33826 IANA-RSVD 33827 IANA-RSVD 33828 IANA-RSVD 33829 IANA-RSVD 33830 IANA-RSVD 33831 IANA-RSVD 33832 IANA-RSVD 33833 IANA-RSVD 33834 IANA-RSVD 33835 IANA-RSVD 33836 IANA-RSVD 33837 IANA-RSVD 33838 IANA-RSVD 33839 IANA-RSVD 33840 IANA-RSVD 33841 IANA-RSVD 33842 IANA-RSVD 33843 IANA-RSVD 33844 IANA-RSVD 33845 IANA-RSVD 33846 IANA-RSVD 33847 IANA-RSVD 33848 IANA-RSVD 33849 IANA-RSVD 33850 IANA-RSVD 33851 IANA-RSVD 33852 IANA-RSVD 33853 IANA-RSVD 33854 IANA-RSVD 33855 IANA-RSVD 33856 IANA-RSVD 33857 IANA-RSVD 33858 IANA-RSVD 33859 IANA-RSVD 33860 IANA-RSVD 33861 IANA-RSVD 33862 IANA-RSVD 33863 IANA-RSVD 33864 IANA-RSVD 33865 IANA-RSVD 33866 IANA-RSVD 33867 IANA-RSVD 33868 IANA-RSVD 33869 IANA-RSVD 33870 IANA-RSVD 33871 IANA-RSVD 33872 IANA-RSVD 33873 IANA-RSVD 33874 IANA-RSVD 33875 IANA-RSVD 33876 IANA-RSVD 33877 IANA-RSVD 33878 IANA-RSVD 33879 IANA-RSVD 33880 IANA-RSVD 33881 IANA-RSVD 33882 IANA-RSVD 33883 IANA-RSVD 33884 IANA-RSVD 33885 IANA-RSVD 33886 IANA-RSVD 33887 IANA-RSVD 33888 IANA-RSVD 33889 IANA-RSVD 33890 IANA-RSVD 33891 IANA-RSVD 33892 IANA-RSVD 33893 IANA-RSVD 33894 IANA-RSVD 33895 IANA-RSVD 33896 IANA-RSVD 33897 IANA-RSVD 33898 IANA-RSVD 33899 IANA-RSVD 33900 IANA-RSVD 33901 IANA-RSVD 33902 IANA-RSVD 33903 IANA-RSVD 33904 IANA-RSVD 33905 IANA-RSVD 33906 IANA-RSVD 33907 IANA-RSVD 33908 IANA-RSVD 33909 IANA-RSVD 33910 IANA-RSVD 33911 IANA-RSVD 33912 IANA-RSVD 33913 IANA-RSVD 33914 IANA-RSVD 33915 IANA-RSVD 33916 IANA-RSVD 33917 IANA-RSVD 33918 IANA-RSVD 33919 IANA-RSVD 33920 IANA-RSVD 33921 IANA-RSVD 33922 IANA-RSVD 33923 IANA-RSVD 33924 IANA-RSVD 33925 IANA-RSVD 33926 IANA-RSVD 33927 IANA-RSVD 33928 IANA-RSVD 33929 IANA-RSVD 33930 IANA-RSVD 33931 IANA-RSVD 33932 IANA-RSVD 33933 IANA-RSVD 33934 IANA-RSVD 33935 IANA-RSVD 33936 IANA-RSVD 33937 IANA-RSVD 33938 IANA-RSVD 33939 IANA-RSVD 33940 IANA-RSVD 33941 IANA-RSVD 33942 IANA-RSVD 33943 IANA-RSVD 33944 IANA-RSVD 33945 IANA-RSVD 33946 IANA-RSVD 33947 IANA-RSVD 33948 IANA-RSVD 33949 IANA-RSVD 33950 IANA-RSVD 33951 IANA-RSVD 33952 IANA-RSVD 33953 IANA-RSVD 33954 IANA-RSVD 33955 IANA-RSVD 33956 IANA-RSVD 33957 IANA-RSVD 33958 IANA-RSVD 33959 IANA-RSVD 33960 IANA-RSVD 33961 IANA-RSVD 33962 IANA-RSVD 33963 IANA-RSVD 33964 IANA-RSVD 33965 IANA-RSVD 33966 IANA-RSVD 33967 IANA-RSVD 33968 IANA-RSVD 33969 IANA-RSVD 33970 IANA-RSVD 33971 IANA-RSVD 33972 IANA-RSVD 33973 IANA-RSVD 33974 IANA-RSVD 33975 IANA-RSVD 33976 IANA-RSVD 33977 IANA-RSVD 33978 IANA-RSVD 33979 IANA-RSVD 33980 IANA-RSVD 33981 IANA-RSVD 33982 IANA-RSVD 33983 IANA-RSVD 33984 IANA-RSVD 33985 IANA-RSVD 33986 IANA-RSVD 33987 IANA-RSVD 33988 IANA-RSVD 33989 IANA-RSVD 33990 IANA-RSVD 33991 IANA-RSVD 33992 IANA-RSVD 33993 IANA-RSVD 33994 IANA-RSVD 33995 IANA-RSVD 33996 IANA-RSVD 33997 IANA-RSVD 33998 IANA-RSVD 33999 IANA-RSVD 34000 IANA-RSVD 34001 IANA-RSVD 34002 IANA-RSVD 34003 IANA-RSVD 34004 IANA-RSVD 34005 IANA-RSVD 34006 IANA-RSVD 34007 IANA-RSVD 34008 IANA-RSVD 34009 IANA-RSVD 34010 IANA-RSVD 34011 IANA-RSVD 34012 IANA-RSVD 34013 IANA-RSVD 34014 IANA-RSVD 34015 IANA-RSVD 34016 IANA-RSVD 34017 IANA-RSVD 34018 IANA-RSVD 34019 IANA-RSVD 34020 IANA-RSVD 34021 IANA-RSVD 34022 IANA-RSVD 34023 IANA-RSVD 34024 IANA-RSVD 34025 IANA-RSVD 34026 IANA-RSVD 34027 IANA-RSVD 34028 IANA-RSVD 34029 IANA-RSVD 34030 IANA-RSVD 34031 IANA-RSVD 34032 IANA-RSVD 34033 IANA-RSVD 34034 IANA-RSVD 34035 IANA-RSVD 34036 IANA-RSVD 34037 IANA-RSVD 34038 IANA-RSVD 34039 IANA-RSVD 34040 IANA-RSVD 34041 IANA-RSVD 34042 IANA-RSVD 34043 IANA-RSVD 34044 IANA-RSVD 34045 IANA-RSVD 34046 IANA-RSVD 34047 IANA-RSVD 34048 IANA-RSVD 34049 IANA-RSVD 34050 IANA-RSVD 34051 IANA-RSVD 34052 IANA-RSVD 34053 IANA-RSVD 34054 IANA-RSVD 34055 IANA-RSVD 34056 IANA-RSVD 34057 IANA-RSVD 34058 IANA-RSVD 34059 IANA-RSVD 34060 IANA-RSVD 34061 IANA-RSVD 34062 IANA-RSVD 34063 IANA-RSVD 34064 IANA-RSVD 34065 IANA-RSVD 34066 IANA-RSVD 34067 IANA-RSVD 34068 IANA-RSVD 34069 IANA-RSVD 34070 IANA-RSVD 34071 IANA-RSVD 34072 IANA-RSVD 34073 IANA-RSVD 34074 IANA-RSVD 34075 IANA-RSVD 34076 IANA-RSVD 34077 IANA-RSVD 34078 IANA-RSVD 34079 IANA-RSVD 34080 IANA-RSVD 34081 IANA-RSVD 34082 IANA-RSVD 34083 IANA-RSVD 34084 IANA-RSVD 34085 IANA-RSVD 34086 IANA-RSVD 34087 IANA-RSVD 34088 IANA-RSVD 34089 IANA-RSVD 34090 IANA-RSVD 34091 IANA-RSVD 34092 IANA-RSVD 34093 IANA-RSVD 34094 IANA-RSVD 34095 IANA-RSVD 34096 IANA-RSVD 34097 IANA-RSVD 34098 IANA-RSVD 34099 IANA-RSVD 34100 IANA-RSVD 34101 IANA-RSVD 34102 IANA-RSVD 34103 IANA-RSVD 34104 IANA-RSVD 34105 IANA-RSVD 34106 IANA-RSVD 34107 IANA-RSVD 34108 IANA-RSVD 34109 IANA-RSVD 34110 IANA-RSVD 34111 IANA-RSVD 34112 IANA-RSVD 34113 IANA-RSVD 34114 IANA-RSVD 34115 IANA-RSVD 34116 IANA-RSVD 34117 IANA-RSVD 34118 IANA-RSVD 34119 IANA-RSVD 34120 IANA-RSVD 34121 IANA-RSVD 34122 IANA-RSVD 34123 IANA-RSVD 34124 IANA-RSVD 34125 IANA-RSVD 34126 IANA-RSVD 34127 IANA-RSVD 34128 IANA-RSVD 34129 IANA-RSVD 34130 IANA-RSVD 34131 IANA-RSVD 34132 IANA-RSVD 34133 IANA-RSVD 34134 IANA-RSVD 34135 IANA-RSVD 34136 IANA-RSVD 34137 IANA-RSVD 34138 IANA-RSVD 34139 IANA-RSVD 34140 IANA-RSVD 34141 IANA-RSVD 34142 IANA-RSVD 34143 IANA-RSVD 34144 IANA-RSVD 34145 IANA-RSVD 34146 IANA-RSVD 34147 IANA-RSVD 34148 IANA-RSVD 34149 IANA-RSVD 34150 IANA-RSVD 34151 IANA-RSVD 34152 IANA-RSVD 34153 IANA-RSVD 34154 IANA-RSVD 34155 IANA-RSVD 34156 IANA-RSVD 34157 IANA-RSVD 34158 IANA-RSVD 34159 IANA-RSVD 34160 IANA-RSVD 34161 IANA-RSVD 34162 IANA-RSVD 34163 IANA-RSVD 34164 IANA-RSVD 34165 IANA-RSVD 34166 IANA-RSVD 34167 IANA-RSVD 34168 IANA-RSVD 34169 IANA-RSVD 34170 IANA-RSVD 34171 IANA-RSVD 34172 IANA-RSVD 34173 IANA-RSVD 34174 IANA-RSVD 34175 IANA-RSVD 34176 IANA-RSVD 34177 IANA-RSVD 34178 IANA-RSVD 34179 IANA-RSVD 34180 IANA-RSVD 34181 IANA-RSVD 34182 IANA-RSVD 34183 IANA-RSVD 34184 IANA-RSVD 34185 IANA-RSVD 34186 IANA-RSVD 34187 IANA-RSVD 34188 IANA-RSVD 34189 IANA-RSVD 34190 IANA-RSVD 34191 IANA-RSVD 34192 IANA-RSVD 34193 IANA-RSVD 34194 IANA-RSVD 34195 IANA-RSVD 34196 IANA-RSVD 34197 IANA-RSVD 34198 IANA-RSVD 34199 IANA-RSVD 34200 IANA-RSVD 34201 IANA-RSVD 34202 IANA-RSVD 34203 IANA-RSVD 34204 IANA-RSVD 34205 IANA-RSVD 34206 IANA-RSVD 34207 IANA-RSVD 34208 IANA-RSVD 34209 IANA-RSVD 34210 IANA-RSVD 34211 IANA-RSVD 34212 IANA-RSVD 34213 IANA-RSVD 34214 IANA-RSVD 34215 IANA-RSVD 34216 IANA-RSVD 34217 IANA-RSVD 34218 IANA-RSVD 34219 IANA-RSVD 34220 IANA-RSVD 34221 IANA-RSVD 34222 IANA-RSVD 34223 IANA-RSVD 34224 IANA-RSVD 34225 IANA-RSVD 34226 IANA-RSVD 34227 IANA-RSVD 34228 IANA-RSVD 34229 IANA-RSVD 34230 IANA-RSVD 34231 IANA-RSVD 34232 IANA-RSVD 34233 IANA-RSVD 34234 IANA-RSVD 34235 IANA-RSVD 34236 IANA-RSVD 34237 IANA-RSVD 34238 IANA-RSVD 34239 IANA-RSVD 34240 IANA-RSVD 34241 IANA-RSVD 34242 IANA-RSVD 34243 IANA-RSVD 34244 IANA-RSVD 34245 IANA-RSVD 34246 IANA-RSVD 34247 IANA-RSVD 34248 IANA-RSVD 34249 IANA-RSVD 34250 IANA-RSVD 34251 IANA-RSVD 34252 IANA-RSVD 34253 IANA-RSVD 34254 IANA-RSVD 34255 IANA-RSVD 34256 IANA-RSVD 34257 IANA-RSVD 34258 IANA-RSVD 34259 IANA-RSVD 34260 IANA-RSVD 34261 IANA-RSVD 34262 IANA-RSVD 34263 IANA-RSVD 34264 IANA-RSVD 34265 IANA-RSVD 34266 IANA-RSVD 34267 IANA-RSVD 34268 IANA-RSVD 34269 IANA-RSVD 34270 IANA-RSVD 34271 IANA-RSVD 34272 IANA-RSVD 34273 IANA-RSVD 34274 IANA-RSVD 34275 IANA-RSVD 34276 IANA-RSVD 34277 IANA-RSVD 34278 IANA-RSVD 34279 IANA-RSVD 34280 IANA-RSVD 34281 IANA-RSVD 34282 IANA-RSVD 34283 IANA-RSVD 34284 IANA-RSVD 34285 IANA-RSVD 34286 IANA-RSVD 34287 IANA-RSVD 34288 IANA-RSVD 34289 IANA-RSVD 34290 IANA-RSVD 34291 IANA-RSVD 34292 IANA-RSVD 34293 IANA-RSVD 34294 IANA-RSVD 34295 IANA-RSVD 34296 IANA-RSVD 34297 IANA-RSVD 34298 IANA-RSVD 34299 IANA-RSVD 34300 IANA-RSVD 34301 IANA-RSVD 34302 IANA-RSVD 34303 IANA-RSVD 34304 IANA-RSVD 34305 IANA-RSVD 34306 IANA-RSVD 34307 IANA-RSVD 34308 IANA-RSVD 34309 IANA-RSVD 34310 IANA-RSVD 34311 IANA-RSVD 34312 IANA-RSVD 34313 IANA-RSVD 34314 IANA-RSVD 34315 IANA-RSVD 34316 IANA-RSVD 34317 IANA-RSVD 34318 IANA-RSVD 34319 IANA-RSVD 34320 IANA-RSVD 34321 IANA-RSVD 34322 IANA-RSVD 34323 IANA-RSVD 34324 IANA-RSVD 34325 IANA-RSVD 34326 IANA-RSVD 34327 IANA-RSVD 34328 IANA-RSVD 34329 IANA-RSVD 34330 IANA-RSVD 34331 IANA-RSVD 34332 IANA-RSVD 34333 IANA-RSVD 34334 IANA-RSVD 34335 IANA-RSVD 34336 IANA-RSVD 34337 IANA-RSVD 34338 IANA-RSVD 34339 IANA-RSVD 34340 IANA-RSVD 34341 IANA-RSVD 34342 IANA-RSVD 34343 IANA-RSVD 34344 IANA-RSVD 34345 IANA-RSVD 34346 IANA-RSVD 34347 IANA-RSVD 34348 IANA-RSVD 34349 IANA-RSVD 34350 IANA-RSVD 34351 IANA-RSVD 34352 IANA-RSVD 34353 IANA-RSVD 34354 IANA-RSVD 34355 IANA-RSVD 34356 IANA-RSVD 34357 IANA-RSVD 34358 IANA-RSVD 34359 IANA-RSVD 34360 IANA-RSVD 34361 IANA-RSVD 34362 IANA-RSVD 34363 IANA-RSVD 34364 IANA-RSVD 34365 IANA-RSVD 34366 IANA-RSVD 34367 IANA-RSVD 34368 IANA-RSVD 34369 IANA-RSVD 34370 IANA-RSVD 34371 IANA-RSVD 34372 IANA-RSVD 34373 IANA-RSVD 34374 IANA-RSVD 34375 IANA-RSVD 34376 IANA-RSVD 34377 IANA-RSVD 34378 IANA-RSVD 34379 IANA-RSVD 34380 IANA-RSVD 34381 IANA-RSVD 34382 IANA-RSVD 34383 IANA-RSVD 34384 IANA-RSVD 34385 IANA-RSVD 34386 IANA-RSVD 34387 IANA-RSVD 34388 IANA-RSVD 34389 IANA-RSVD 34390 IANA-RSVD 34391 IANA-RSVD 34392 IANA-RSVD 34393 IANA-RSVD 34394 IANA-RSVD 34395 IANA-RSVD 34396 IANA-RSVD 34397 IANA-RSVD 34398 IANA-RSVD 34399 IANA-RSVD 34400 IANA-RSVD 34401 IANA-RSVD 34402 IANA-RSVD 34403 IANA-RSVD 34404 IANA-RSVD 34405 IANA-RSVD 34406 IANA-RSVD 34407 IANA-RSVD 34408 IANA-RSVD 34409 IANA-RSVD 34410 IANA-RSVD 34411 IANA-RSVD 34412 IANA-RSVD 34413 IANA-RSVD 34414 IANA-RSVD 34415 IANA-RSVD 34416 IANA-RSVD 34417 IANA-RSVD 34418 IANA-RSVD 34419 IANA-RSVD 34420 IANA-RSVD 34421 IANA-RSVD 34422 IANA-RSVD 34423 IANA-RSVD 34424 IANA-RSVD 34425 IANA-RSVD 34426 IANA-RSVD 34427 IANA-RSVD 34428 IANA-RSVD 34429 IANA-RSVD 34430 IANA-RSVD 34431 IANA-RSVD 34432 IANA-RSVD 34433 IANA-RSVD 34434 IANA-RSVD 34435 IANA-RSVD 34436 IANA-RSVD 34437 IANA-RSVD 34438 IANA-RSVD 34439 IANA-RSVD 34440 IANA-RSVD 34441 IANA-RSVD 34442 IANA-RSVD 34443 IANA-RSVD 34444 IANA-RSVD 34445 IANA-RSVD 34446 IANA-RSVD 34447 IANA-RSVD 34448 IANA-RSVD 34449 IANA-RSVD 34450 IANA-RSVD 34451 IANA-RSVD 34452 IANA-RSVD 34453 IANA-RSVD 34454 IANA-RSVD 34455 IANA-RSVD 34456 IANA-RSVD 34457 IANA-RSVD 34458 IANA-RSVD 34459 IANA-RSVD 34460 IANA-RSVD 34461 IANA-RSVD 34462 IANA-RSVD 34463 IANA-RSVD 34464 IANA-RSVD 34465 IANA-RSVD 34466 IANA-RSVD 34467 IANA-RSVD 34468 IANA-RSVD 34469 IANA-RSVD 34470 IANA-RSVD 34471 IANA-RSVD 34472 IANA-RSVD 34473 IANA-RSVD 34474 IANA-RSVD 34475 IANA-RSVD 34476 IANA-RSVD 34477 IANA-RSVD 34478 IANA-RSVD 34479 IANA-RSVD 34480 IANA-RSVD 34481 IANA-RSVD 34482 IANA-RSVD 34483 IANA-RSVD 34484 IANA-RSVD 34485 IANA-RSVD 34486 IANA-RSVD 34487 IANA-RSVD 34488 IANA-RSVD 34489 IANA-RSVD 34490 IANA-RSVD 34491 IANA-RSVD 34492 IANA-RSVD 34493 IANA-RSVD 34494 IANA-RSVD 34495 IANA-RSVD 34496 IANA-RSVD 34497 IANA-RSVD 34498 IANA-RSVD 34499 IANA-RSVD 34500 IANA-RSVD 34501 IANA-RSVD 34502 IANA-RSVD 34503 IANA-RSVD 34504 IANA-RSVD 34505 IANA-RSVD 34506 IANA-RSVD 34507 IANA-RSVD 34508 IANA-RSVD 34509 IANA-RSVD 34510 IANA-RSVD 34511 IANA-RSVD 34512 IANA-RSVD 34513 IANA-RSVD 34514 IANA-RSVD 34515 IANA-RSVD 34516 IANA-RSVD 34517 IANA-RSVD 34518 IANA-RSVD 34519 IANA-RSVD 34520 IANA-RSVD 34521 IANA-RSVD 34522 IANA-RSVD 34523 IANA-RSVD 34524 IANA-RSVD 34525 IANA-RSVD 34526 IANA-RSVD 34527 IANA-RSVD 34528 IANA-RSVD 34529 IANA-RSVD 34530 IANA-RSVD 34531 IANA-RSVD 34532 IANA-RSVD 34533 IANA-RSVD 34534 IANA-RSVD 34535 IANA-RSVD 34536 IANA-RSVD 34537 IANA-RSVD 34538 IANA-RSVD 34539 IANA-RSVD 34540 IANA-RSVD 34541 IANA-RSVD 34542 IANA-RSVD 34543 IANA-RSVD 34544 IANA-RSVD 34545 IANA-RSVD 34546 IANA-RSVD 34547 IANA-RSVD 34548 IANA-RSVD 34549 IANA-RSVD 34550 IANA-RSVD 34551 IANA-RSVD 34552 IANA-RSVD 34553 IANA-RSVD 34554 IANA-RSVD 34555 IANA-RSVD 34556 IANA-RSVD 34557 IANA-RSVD 34558 IANA-RSVD 34559 IANA-RSVD 34560 IANA-RSVD 34561 IANA-RSVD 34562 IANA-RSVD 34563 IANA-RSVD 34564 IANA-RSVD 34565 IANA-RSVD 34566 IANA-RSVD 34567 IANA-RSVD 34568 IANA-RSVD 34569 IANA-RSVD 34570 IANA-RSVD 34571 IANA-RSVD 34572 IANA-RSVD 34573 IANA-RSVD 34574 IANA-RSVD 34575 IANA-RSVD 34576 IANA-RSVD 34577 IANA-RSVD 34578 IANA-RSVD 34579 IANA-RSVD 34580 IANA-RSVD 34581 IANA-RSVD 34582 IANA-RSVD 34583 IANA-RSVD 34584 IANA-RSVD 34585 IANA-RSVD 34586 IANA-RSVD 34587 IANA-RSVD 34588 IANA-RSVD 34589 IANA-RSVD 34590 IANA-RSVD 34591 IANA-RSVD 34592 IANA-RSVD 34593 IANA-RSVD 34594 IANA-RSVD 34595 IANA-RSVD 34596 IANA-RSVD 34597 IANA-RSVD 34598 IANA-RSVD 34599 IANA-RSVD 34600 IANA-RSVD 34601 IANA-RSVD 34602 IANA-RSVD 34603 IANA-RSVD 34604 IANA-RSVD 34605 IANA-RSVD 34606 IANA-RSVD 34607 IANA-RSVD 34608 IANA-RSVD 34609 IANA-RSVD 34610 IANA-RSVD 34611 IANA-RSVD 34612 IANA-RSVD 34613 IANA-RSVD 34614 IANA-RSVD 34615 IANA-RSVD 34616 IANA-RSVD 34617 IANA-RSVD 34618 IANA-RSVD 34619 IANA-RSVD 34620 IANA-RSVD 34621 IANA-RSVD 34622 IANA-RSVD 34623 IANA-RSVD 34624 IANA-RSVD 34625 IANA-RSVD 34626 IANA-RSVD 34627 IANA-RSVD 34628 IANA-RSVD 34629 IANA-RSVD 34630 IANA-RSVD 34631 IANA-RSVD 34632 IANA-RSVD 34633 IANA-RSVD 34634 IANA-RSVD 34635 IANA-RSVD 34636 IANA-RSVD 34637 IANA-RSVD 34638 IANA-RSVD 34639 IANA-RSVD 34640 IANA-RSVD 34641 IANA-RSVD 34642 IANA-RSVD 34643 IANA-RSVD 34644 IANA-RSVD 34645 IANA-RSVD 34646 IANA-RSVD 34647 IANA-RSVD 34648 IANA-RSVD 34649 IANA-RSVD 34650 IANA-RSVD 34651 IANA-RSVD 34652 IANA-RSVD 34653 IANA-RSVD 34654 IANA-RSVD 34655 IANA-RSVD 34656 IANA-RSVD 34657 IANA-RSVD 34658 IANA-RSVD 34659 IANA-RSVD 34660 IANA-RSVD 34661 IANA-RSVD 34662 IANA-RSVD 34663 IANA-RSVD 34664 IANA-RSVD 34665 IANA-RSVD 34666 IANA-RSVD 34667 IANA-RSVD 34668 IANA-RSVD 34669 IANA-RSVD 34670 IANA-RSVD 34671 IANA-RSVD 34672 IANA-RSVD 34673 IANA-RSVD 34674 IANA-RSVD 34675 IANA-RSVD 34676 IANA-RSVD 34677 IANA-RSVD 34678 IANA-RSVD 34679 IANA-RSVD 34680 IANA-RSVD 34681 IANA-RSVD 34682 IANA-RSVD 34683 IANA-RSVD 34684 IANA-RSVD 34685 IANA-RSVD 34686 IANA-RSVD 34687 IANA-RSVD 34688 IANA-RSVD 34689 IANA-RSVD 34690 IANA-RSVD 34691 IANA-RSVD 34692 IANA-RSVD 34693 IANA-RSVD 34694 IANA-RSVD 34695 IANA-RSVD 34696 IANA-RSVD 34697 IANA-RSVD 34698 IANA-RSVD 34699 IANA-RSVD 34700 IANA-RSVD 34701 IANA-RSVD 34702 IANA-RSVD 34703 IANA-RSVD 34704 IANA-RSVD 34705 IANA-RSVD 34706 IANA-RSVD 34707 IANA-RSVD 34708 IANA-RSVD 34709 IANA-RSVD 34710 IANA-RSVD 34711 IANA-RSVD 34712 IANA-RSVD 34713 IANA-RSVD 34714 IANA-RSVD 34715 IANA-RSVD 34716 IANA-RSVD 34717 IANA-RSVD 34718 IANA-RSVD 34719 IANA-RSVD 34720 IANA-RSVD 34721 IANA-RSVD 34722 IANA-RSVD 34723 IANA-RSVD 34724 IANA-RSVD 34725 IANA-RSVD 34726 IANA-RSVD 34727 IANA-RSVD 34728 IANA-RSVD 34729 IANA-RSVD 34730 IANA-RSVD 34731 IANA-RSVD 34732 IANA-RSVD 34733 IANA-RSVD 34734 IANA-RSVD 34735 IANA-RSVD 34736 IANA-RSVD 34737 IANA-RSVD 34738 IANA-RSVD 34739 IANA-RSVD 34740 IANA-RSVD 34741 IANA-RSVD 34742 IANA-RSVD 34743 IANA-RSVD 34744 IANA-RSVD 34745 IANA-RSVD 34746 IANA-RSVD 34747 IANA-RSVD 34748 IANA-RSVD 34749 IANA-RSVD 34750 IANA-RSVD 34751 IANA-RSVD 34752 IANA-RSVD 34753 IANA-RSVD 34754 IANA-RSVD 34755 IANA-RSVD 34756 IANA-RSVD 34757 IANA-RSVD 34758 IANA-RSVD 34759 IANA-RSVD 34760 IANA-RSVD 34761 IANA-RSVD 34762 IANA-RSVD 34763 IANA-RSVD 34764 IANA-RSVD 34765 IANA-RSVD 34766 IANA-RSVD 34767 IANA-RSVD 34768 IANA-RSVD 34769 IANA-RSVD 34770 IANA-RSVD 34771 IANA-RSVD 34772 IANA-RSVD 34773 IANA-RSVD 34774 IANA-RSVD 34775 IANA-RSVD 34776 IANA-RSVD 34777 IANA-RSVD 34778 IANA-RSVD 34779 IANA-RSVD 34780 IANA-RSVD 34781 IANA-RSVD 34782 IANA-RSVD 34783 IANA-RSVD 34784 IANA-RSVD 34785 IANA-RSVD 34786 IANA-RSVD 34787 IANA-RSVD 34788 IANA-RSVD 34789 IANA-RSVD 34790 IANA-RSVD 34791 IANA-RSVD 34792 IANA-RSVD 34793 IANA-RSVD 34794 IANA-RSVD 34795 IANA-RSVD 34796 IANA-RSVD 34797 IANA-RSVD 34798 IANA-RSVD 34799 IANA-RSVD 34800 IANA-RSVD 34801 IANA-RSVD 34802 IANA-RSVD 34803 IANA-RSVD 34804 IANA-RSVD 34805 IANA-RSVD 34806 IANA-RSVD 34807 IANA-RSVD 34808 IANA-RSVD 34809 IANA-RSVD 34810 IANA-RSVD 34811 IANA-RSVD 34812 IANA-RSVD 34813 IANA-RSVD 34814 IANA-RSVD 34815 IANA-RSVD 34816 IANA-RSVD 34817 IANA-RSVD 34818 IANA-RSVD 34819 IANA-RSVD 34820 IANA-RSVD 34821 IANA-RSVD 34822 IANA-RSVD 34823 IANA-RSVD 34824 IANA-RSVD 34825 IANA-RSVD 34826 IANA-RSVD 34827 IANA-RSVD 34828 IANA-RSVD 34829 IANA-RSVD 34830 IANA-RSVD 34831 IANA-RSVD 34832 IANA-RSVD 34833 IANA-RSVD 34834 IANA-RSVD 34835 IANA-RSVD 34836 IANA-RSVD 34837 IANA-RSVD 34838 IANA-RSVD 34839 IANA-RSVD 34840 IANA-RSVD 34841 IANA-RSVD 34842 IANA-RSVD 34843 IANA-RSVD 34844 IANA-RSVD 34845 IANA-RSVD 34846 IANA-RSVD 34847 IANA-RSVD 34848 IANA-RSVD 34849 IANA-RSVD 34850 IANA-RSVD 34851 IANA-RSVD 34852 IANA-RSVD 34853 IANA-RSVD 34854 IANA-RSVD 34855 IANA-RSVD 34856 IANA-RSVD 34857 IANA-RSVD 34858 IANA-RSVD 34859 IANA-RSVD 34860 IANA-RSVD 34861 IANA-RSVD 34862 IANA-RSVD 34863 IANA-RSVD 34864 IANA-RSVD 34865 IANA-RSVD 34866 IANA-RSVD 34867 IANA-RSVD 34868 IANA-RSVD 34869 IANA-RSVD 34870 IANA-RSVD 34871 IANA-RSVD 34872 IANA-RSVD 34873 IANA-RSVD 34874 IANA-RSVD 34875 IANA-RSVD 34876 IANA-RSVD 34877 IANA-RSVD 34878 IANA-RSVD 34879 IANA-RSVD 34880 IANA-RSVD 34881 IANA-RSVD 34882 IANA-RSVD 34883 IANA-RSVD 34884 IANA-RSVD 34885 IANA-RSVD 34886 IANA-RSVD 34887 IANA-RSVD 34888 IANA-RSVD 34889 IANA-RSVD 34890 IANA-RSVD 34891 IANA-RSVD 34892 IANA-RSVD 34893 IANA-RSVD 34894 IANA-RSVD 34895 IANA-RSVD 34896 IANA-RSVD 34897 IANA-RSVD 34898 IANA-RSVD 34899 IANA-RSVD 34900 IANA-RSVD 34901 IANA-RSVD 34902 IANA-RSVD 34903 IANA-RSVD 34904 IANA-RSVD 34905 IANA-RSVD 34906 IANA-RSVD 34907 IANA-RSVD 34908 IANA-RSVD 34909 IANA-RSVD 34910 IANA-RSVD 34911 IANA-RSVD 34912 IANA-RSVD 34913 IANA-RSVD 34914 IANA-RSVD 34915 IANA-RSVD 34916 IANA-RSVD 34917 IANA-RSVD 34918 IANA-RSVD 34919 IANA-RSVD 34920 IANA-RSVD 34921 IANA-RSVD 34922 IANA-RSVD 34923 IANA-RSVD 34924 IANA-RSVD 34925 IANA-RSVD 34926 IANA-RSVD 34927 IANA-RSVD 34928 IANA-RSVD 34929 IANA-RSVD 34930 IANA-RSVD 34931 IANA-RSVD 34932 IANA-RSVD 34933 IANA-RSVD 34934 IANA-RSVD 34935 IANA-RSVD 34936 IANA-RSVD 34937 IANA-RSVD 34938 IANA-RSVD 34939 IANA-RSVD 34940 IANA-RSVD 34941 IANA-RSVD 34942 IANA-RSVD 34943 IANA-RSVD 34944 IANA-RSVD 34945 IANA-RSVD 34946 IANA-RSVD 34947 IANA-RSVD 34948 IANA-RSVD 34949 IANA-RSVD 34950 IANA-RSVD 34951 IANA-RSVD 34952 IANA-RSVD 34953 IANA-RSVD 34954 IANA-RSVD 34955 IANA-RSVD 34956 IANA-RSVD 34957 IANA-RSVD 34958 IANA-RSVD 34959 IANA-RSVD 34960 IANA-RSVD 34961 IANA-RSVD 34962 IANA-RSVD 34963 IANA-RSVD 34964 IANA-RSVD 34965 IANA-RSVD 34966 IANA-RSVD 34967 IANA-RSVD 34968 IANA-RSVD 34969 IANA-RSVD 34970 IANA-RSVD 34971 IANA-RSVD 34972 IANA-RSVD 34973 IANA-RSVD 34974 IANA-RSVD 34975 IANA-RSVD 34976 IANA-RSVD 34977 IANA-RSVD 34978 IANA-RSVD 34979 IANA-RSVD 34980 IANA-RSVD 34981 IANA-RSVD 34982 IANA-RSVD 34983 IANA-RSVD 34984 IANA-RSVD 34985 IANA-RSVD 34986 IANA-RSVD 34987 IANA-RSVD 34988 IANA-RSVD 34989 IANA-RSVD 34990 IANA-RSVD 34991 IANA-RSVD 34992 IANA-RSVD 34993 IANA-RSVD 34994 IANA-RSVD 34995 IANA-RSVD 34996 IANA-RSVD 34997 IANA-RSVD 34998 IANA-RSVD 34999 IANA-RSVD 35000 IANA-RSVD 35001 IANA-RSVD 35002 IANA-RSVD 35003 IANA-RSVD 35004 IANA-RSVD 35005 IANA-RSVD 35006 IANA-RSVD 35007 IANA-RSVD 35008 IANA-RSVD 35009 IANA-RSVD 35010 IANA-RSVD 35011 IANA-RSVD 35012 IANA-RSVD 35013 IANA-RSVD 35014 IANA-RSVD 35015 IANA-RSVD 35016 IANA-RSVD 35017 IANA-RSVD 35018 IANA-RSVD 35019 IANA-RSVD 35020 IANA-RSVD 35021 IANA-RSVD 35022 IANA-RSVD 35023 IANA-RSVD 35024 IANA-RSVD 35025 IANA-RSVD 35026 IANA-RSVD 35027 IANA-RSVD 35028 IANA-RSVD 35029 IANA-RSVD 35030 IANA-RSVD 35031 IANA-RSVD 35032 IANA-RSVD 35033 IANA-RSVD 35034 IANA-RSVD 35035 IANA-RSVD 35036 IANA-RSVD 35037 IANA-RSVD 35038 IANA-RSVD 35039 IANA-RSVD 35040 IANA-RSVD 35041 IANA-RSVD 35042 IANA-RSVD 35043 IANA-RSVD 35044 IANA-RSVD 35045 IANA-RSVD 35046 IANA-RSVD 35047 IANA-RSVD 35048 IANA-RSVD 35049 IANA-RSVD 35050 IANA-RSVD 35051 IANA-RSVD 35052 IANA-RSVD 35053 IANA-RSVD 35054 IANA-RSVD 35055 IANA-RSVD 35056 IANA-RSVD 35057 IANA-RSVD 35058 IANA-RSVD 35059 IANA-RSVD 35060 IANA-RSVD 35061 IANA-RSVD 35062 IANA-RSVD 35063 IANA-RSVD 35064 IANA-RSVD 35065 IANA-RSVD 35066 IANA-RSVD 35067 IANA-RSVD 35068 IANA-RSVD 35069 IANA-RSVD 35070 IANA-RSVD 35071 IANA-RSVD 35072 IANA-RSVD 35073 IANA-RSVD 35074 IANA-RSVD 35075 IANA-RSVD 35076 IANA-RSVD 35077 IANA-RSVD 35078 IANA-RSVD 35079 IANA-RSVD 35080 IANA-RSVD 35081 IANA-RSVD 35082 IANA-RSVD 35083 IANA-RSVD 35084 IANA-RSVD 35085 IANA-RSVD 35086 IANA-RSVD 35087 IANA-RSVD 35088 IANA-RSVD 35089 IANA-RSVD 35090 IANA-RSVD 35091 IANA-RSVD 35092 IANA-RSVD 35093 IANA-RSVD 35094 IANA-RSVD 35095 IANA-RSVD 35096 IANA-RSVD 35097 IANA-RSVD 35098 IANA-RSVD 35099 IANA-RSVD 35100 IANA-RSVD 35101 IANA-RSVD 35102 IANA-RSVD 35103 IANA-RSVD 35104 IANA-RSVD 35105 IANA-RSVD 35106 IANA-RSVD 35107 IANA-RSVD 35108 IANA-RSVD 35109 IANA-RSVD 35110 IANA-RSVD 35111 IANA-RSVD 35112 IANA-RSVD 35113 IANA-RSVD 35114 IANA-RSVD 35115 IANA-RSVD 35116 IANA-RSVD 35117 IANA-RSVD 35118 IANA-RSVD 35119 IANA-RSVD 35120 IANA-RSVD 35121 IANA-RSVD 35122 IANA-RSVD 35123 IANA-RSVD 35124 IANA-RSVD 35125 IANA-RSVD 35126 IANA-RSVD 35127 IANA-RSVD 35128 IANA-RSVD 35129 IANA-RSVD 35130 IANA-RSVD 35131 IANA-RSVD 35132 IANA-RSVD 35133 IANA-RSVD 35134 IANA-RSVD 35135 IANA-RSVD 35136 IANA-RSVD 35137 IANA-RSVD 35138 IANA-RSVD 35139 IANA-RSVD 35140 IANA-RSVD 35141 IANA-RSVD 35142 IANA-RSVD 35143 IANA-RSVD 35144 IANA-RSVD 35145 IANA-RSVD 35146 IANA-RSVD 35147 IANA-RSVD 35148 IANA-RSVD 35149 IANA-RSVD 35150 IANA-RSVD 35151 IANA-RSVD 35152 IANA-RSVD 35153 IANA-RSVD 35154 IANA-RSVD 35155 IANA-RSVD 35156 IANA-RSVD 35157 IANA-RSVD 35158 IANA-RSVD 35159 IANA-RSVD 35160 IANA-RSVD 35161 IANA-RSVD 35162 IANA-RSVD 35163 IANA-RSVD 35164 IANA-RSVD 35165 IANA-RSVD 35166 IANA-RSVD 35167 IANA-RSVD 35168 IANA-RSVD 35169 IANA-RSVD 35170 IANA-RSVD 35171 IANA-RSVD 35172 IANA-RSVD 35173 IANA-RSVD 35174 IANA-RSVD 35175 IANA-RSVD 35176 IANA-RSVD 35177 IANA-RSVD 35178 IANA-RSVD 35179 IANA-RSVD 35180 IANA-RSVD 35181 IANA-RSVD 35182 IANA-RSVD 35183 IANA-RSVD 35184 IANA-RSVD 35185 IANA-RSVD 35186 IANA-RSVD 35187 IANA-RSVD 35188 IANA-RSVD 35189 IANA-RSVD 35190 IANA-RSVD 35191 IANA-RSVD 35192 IANA-RSVD 35193 IANA-RSVD 35194 IANA-RSVD 35195 IANA-RSVD 35196 IANA-RSVD 35197 IANA-RSVD 35198 IANA-RSVD 35199 IANA-RSVD 35200 IANA-RSVD 35201 IANA-RSVD 35202 IANA-RSVD 35203 IANA-RSVD 35204 IANA-RSVD 35205 IANA-RSVD 35206 IANA-RSVD 35207 IANA-RSVD 35208 IANA-RSVD 35209 IANA-RSVD 35210 IANA-RSVD 35211 IANA-RSVD 35212 IANA-RSVD 35213 IANA-RSVD 35214 IANA-RSVD 35215 IANA-RSVD 35216 IANA-RSVD 35217 IANA-RSVD 35218 IANA-RSVD 35219 IANA-RSVD 35220 IANA-RSVD 35221 IANA-RSVD 35222 IANA-RSVD 35223 IANA-RSVD 35224 IANA-RSVD 35225 IANA-RSVD 35226 IANA-RSVD 35227 IANA-RSVD 35228 IANA-RSVD 35229 IANA-RSVD 35230 IANA-RSVD 35231 IANA-RSVD 35232 IANA-RSVD 35233 IANA-RSVD 35234 IANA-RSVD 35235 IANA-RSVD 35236 IANA-RSVD 35237 IANA-RSVD 35238 IANA-RSVD 35239 IANA-RSVD 35240 IANA-RSVD 35241 IANA-RSVD 35242 IANA-RSVD 35243 IANA-RSVD 35244 IANA-RSVD 35245 IANA-RSVD 35246 IANA-RSVD 35247 IANA-RSVD 35248 IANA-RSVD 35249 IANA-RSVD 35250 IANA-RSVD 35251 IANA-RSVD 35252 IANA-RSVD 35253 IANA-RSVD 35254 IANA-RSVD 35255 IANA-RSVD 35256 IANA-RSVD 35257 IANA-RSVD 35258 IANA-RSVD 35259 IANA-RSVD 35260 IANA-RSVD 35261 IANA-RSVD 35262 IANA-RSVD 35263 IANA-RSVD 35264 IANA-RSVD 35265 IANA-RSVD 35266 IANA-RSVD 35267 IANA-RSVD 35268 IANA-RSVD 35269 IANA-RSVD 35270 IANA-RSVD 35271 IANA-RSVD 35272 IANA-RSVD 35273 IANA-RSVD 35274 IANA-RSVD 35275 IANA-RSVD 35276 IANA-RSVD 35277 IANA-RSVD 35278 IANA-RSVD 35279 IANA-RSVD 35280 IANA-RSVD 35281 IANA-RSVD 35282 IANA-RSVD 35283 IANA-RSVD 35284 IANA-RSVD 35285 IANA-RSVD 35286 IANA-RSVD 35287 IANA-RSVD 35288 IANA-RSVD 35289 IANA-RSVD 35290 IANA-RSVD 35291 IANA-RSVD 35292 IANA-RSVD 35293 IANA-RSVD 35294 IANA-RSVD 35295 IANA-RSVD 35296 IANA-RSVD 35297 IANA-RSVD 35298 IANA-RSVD 35299 IANA-RSVD 35300 IANA-RSVD 35301 IANA-RSVD 35302 IANA-RSVD 35303 IANA-RSVD 35304 IANA-RSVD 35305 IANA-RSVD 35306 IANA-RSVD 35307 IANA-RSVD 35308 IANA-RSVD 35309 IANA-RSVD 35310 IANA-RSVD 35311 IANA-RSVD 35312 IANA-RSVD 35313 IANA-RSVD 35314 IANA-RSVD 35315 IANA-RSVD 35316 IANA-RSVD 35317 IANA-RSVD 35318 IANA-RSVD 35319 IANA-RSVD 35320 IANA-RSVD 35321 IANA-RSVD 35322 IANA-RSVD 35323 IANA-RSVD 35324 IANA-RSVD 35325 IANA-RSVD 35326 IANA-RSVD 35327 IANA-RSVD 35328 IANA-RSVD 35329 IANA-RSVD 35330 IANA-RSVD 35331 IANA-RSVD 35332 IANA-RSVD 35333 IANA-RSVD 35334 IANA-RSVD 35335 IANA-RSVD 35336 IANA-RSVD 35337 IANA-RSVD 35338 IANA-RSVD 35339 IANA-RSVD 35340 IANA-RSVD 35341 IANA-RSVD 35342 IANA-RSVD 35343 IANA-RSVD 35344 IANA-RSVD 35345 IANA-RSVD 35346 IANA-RSVD 35347 IANA-RSVD 35348 IANA-RSVD 35349 IANA-RSVD 35350 IANA-RSVD 35351 IANA-RSVD 35352 IANA-RSVD 35353 IANA-RSVD 35354 IANA-RSVD 35355 IANA-RSVD 35356 IANA-RSVD 35357 IANA-RSVD 35358 IANA-RSVD 35359 IANA-RSVD 35360 IANA-RSVD 35361 IANA-RSVD 35362 IANA-RSVD 35363 IANA-RSVD 35364 IANA-RSVD 35365 IANA-RSVD 35366 IANA-RSVD 35367 IANA-RSVD 35368 IANA-RSVD 35369 IANA-RSVD 35370 IANA-RSVD 35371 IANA-RSVD 35372 IANA-RSVD 35373 IANA-RSVD 35374 IANA-RSVD 35375 IANA-RSVD 35376 IANA-RSVD 35377 IANA-RSVD 35378 IANA-RSVD 35379 IANA-RSVD 35380 IANA-RSVD 35381 IANA-RSVD 35382 IANA-RSVD 35383 IANA-RSVD 35384 IANA-RSVD 35385 IANA-RSVD 35386 IANA-RSVD 35387 IANA-RSVD 35388 IANA-RSVD 35389 IANA-RSVD 35390 IANA-RSVD 35391 IANA-RSVD 35392 IANA-RSVD 35393 IANA-RSVD 35394 IANA-RSVD 35395 IANA-RSVD 35396 IANA-RSVD 35397 IANA-RSVD 35398 IANA-RSVD 35399 IANA-RSVD 35400 IANA-RSVD 35401 IANA-RSVD 35402 IANA-RSVD 35403 IANA-RSVD 35404 IANA-RSVD 35405 IANA-RSVD 35406 IANA-RSVD 35407 IANA-RSVD 35408 IANA-RSVD 35409 IANA-RSVD 35410 IANA-RSVD 35411 IANA-RSVD 35412 IANA-RSVD 35413 IANA-RSVD 35414 IANA-RSVD 35415 IANA-RSVD 35416 IANA-RSVD 35417 IANA-RSVD 35418 IANA-RSVD 35419 IANA-RSVD 35420 IANA-RSVD 35421 IANA-RSVD 35422 IANA-RSVD 35423 IANA-RSVD 35424 IANA-RSVD 35425 IANA-RSVD 35426 IANA-RSVD 35427 IANA-RSVD 35428 IANA-RSVD 35429 IANA-RSVD 35430 IANA-RSVD 35431 IANA-RSVD 35432 IANA-RSVD 35433 IANA-RSVD 35434 IANA-RSVD 35435 IANA-RSVD 35436 IANA-RSVD 35437 IANA-RSVD 35438 IANA-RSVD 35439 IANA-RSVD 35440 IANA-RSVD 35441 IANA-RSVD 35442 IANA-RSVD 35443 IANA-RSVD 35444 IANA-RSVD 35445 IANA-RSVD 35446 IANA-RSVD 35447 IANA-RSVD 35448 IANA-RSVD 35449 IANA-RSVD 35450 IANA-RSVD 35451 IANA-RSVD 35452 IANA-RSVD 35453 IANA-RSVD 35454 IANA-RSVD 35455 IANA-RSVD 35456 IANA-RSVD 35457 IANA-RSVD 35458 IANA-RSVD 35459 IANA-RSVD 35460 IANA-RSVD 35461 IANA-RSVD 35462 IANA-RSVD 35463 IANA-RSVD 35464 IANA-RSVD 35465 IANA-RSVD 35466 IANA-RSVD 35467 IANA-RSVD 35468 IANA-RSVD 35469 IANA-RSVD 35470 IANA-RSVD 35471 IANA-RSVD 35472 IANA-RSVD 35473 IANA-RSVD 35474 IANA-RSVD 35475 IANA-RSVD 35476 IANA-RSVD 35477 IANA-RSVD 35478 IANA-RSVD 35479 IANA-RSVD 35480 IANA-RSVD 35481 IANA-RSVD 35482 IANA-RSVD 35483 IANA-RSVD 35484 IANA-RSVD 35485 IANA-RSVD 35486 IANA-RSVD 35487 IANA-RSVD 35488 IANA-RSVD 35489 IANA-RSVD 35490 IANA-RSVD 35491 IANA-RSVD 35492 IANA-RSVD 35493 IANA-RSVD 35494 IANA-RSVD 35495 IANA-RSVD 35496 IANA-RSVD 35497 IANA-RSVD 35498 IANA-RSVD 35499 IANA-RSVD 35500 IANA-RSVD 35501 IANA-RSVD 35502 IANA-RSVD 35503 IANA-RSVD 35504 IANA-RSVD 35505 IANA-RSVD 35506 IANA-RSVD 35507 IANA-RSVD 35508 IANA-RSVD 35509 IANA-RSVD 35510 IANA-RSVD 35511 IANA-RSVD 35512 IANA-RSVD 35513 IANA-RSVD 35514 IANA-RSVD 35515 IANA-RSVD 35516 IANA-RSVD 35517 IANA-RSVD 35518 IANA-RSVD 35519 IANA-RSVD 35520 IANA-RSVD 35521 IANA-RSVD 35522 IANA-RSVD 35523 IANA-RSVD 35524 IANA-RSVD 35525 IANA-RSVD 35526 IANA-RSVD 35527 IANA-RSVD 35528 IANA-RSVD 35529 IANA-RSVD 35530 IANA-RSVD 35531 IANA-RSVD 35532 IANA-RSVD 35533 IANA-RSVD 35534 IANA-RSVD 35535 IANA-RSVD 35536 IANA-RSVD 35537 IANA-RSVD 35538 IANA-RSVD 35539 IANA-RSVD 35540 IANA-RSVD 35541 IANA-RSVD 35542 IANA-RSVD 35543 IANA-RSVD 35544 IANA-RSVD 35545 IANA-RSVD 35546 IANA-RSVD 35547 IANA-RSVD 35548 IANA-RSVD 35549 IANA-RSVD 35550 IANA-RSVD 35551 IANA-RSVD 35552 IANA-RSVD 35553 IANA-RSVD 35554 IANA-RSVD 35555 IANA-RSVD 35556 IANA-RSVD 35557 IANA-RSVD 35558 IANA-RSVD 35559 IANA-RSVD 35560 IANA-RSVD 35561 IANA-RSVD 35562 IANA-RSVD 35563 IANA-RSVD 35564 IANA-RSVD 35565 IANA-RSVD 35566 IANA-RSVD 35567 IANA-RSVD 35568 IANA-RSVD 35569 IANA-RSVD 35570 IANA-RSVD 35571 IANA-RSVD 35572 IANA-RSVD 35573 IANA-RSVD 35574 IANA-RSVD 35575 IANA-RSVD 35576 IANA-RSVD 35577 IANA-RSVD 35578 IANA-RSVD 35579 IANA-RSVD 35580 IANA-RSVD 35581 IANA-RSVD 35582 IANA-RSVD 35583 IANA-RSVD 35584 IANA-RSVD 35585 IANA-RSVD 35586 IANA-RSVD 35587 IANA-RSVD 35588 IANA-RSVD 35589 IANA-RSVD 35590 IANA-RSVD 35591 IANA-RSVD 35592 IANA-RSVD 35593 IANA-RSVD 35594 IANA-RSVD 35595 IANA-RSVD 35596 IANA-RSVD 35597 IANA-RSVD 35598 IANA-RSVD 35599 IANA-RSVD 35600 IANA-RSVD 35601 IANA-RSVD 35602 IANA-RSVD 35603 IANA-RSVD 35604 IANA-RSVD 35605 IANA-RSVD 35606 IANA-RSVD 35607 IANA-RSVD 35608 IANA-RSVD 35609 IANA-RSVD 35610 IANA-RSVD 35611 IANA-RSVD 35612 IANA-RSVD 35613 IANA-RSVD 35614 IANA-RSVD 35615 IANA-RSVD 35616 IANA-RSVD 35617 IANA-RSVD 35618 IANA-RSVD 35619 IANA-RSVD 35620 IANA-RSVD 35621 IANA-RSVD 35622 IANA-RSVD 35623 IANA-RSVD 35624 IANA-RSVD 35625 IANA-RSVD 35626 IANA-RSVD 35627 IANA-RSVD 35628 IANA-RSVD 35629 IANA-RSVD 35630 IANA-RSVD 35631 IANA-RSVD 35632 IANA-RSVD 35633 IANA-RSVD 35634 IANA-RSVD 35635 IANA-RSVD 35636 IANA-RSVD 35637 IANA-RSVD 35638 IANA-RSVD 35639 IANA-RSVD 35640 IANA-RSVD 35641 IANA-RSVD 35642 IANA-RSVD 35643 IANA-RSVD 35644 IANA-RSVD 35645 IANA-RSVD 35646 IANA-RSVD 35647 IANA-RSVD 35648 IANA-RSVD 35649 IANA-RSVD 35650 IANA-RSVD 35651 IANA-RSVD 35652 IANA-RSVD 35653 IANA-RSVD 35654 IANA-RSVD 35655 IANA-RSVD 35656 IANA-RSVD 35657 IANA-RSVD 35658 IANA-RSVD 35659 IANA-RSVD 35660 IANA-RSVD 35661 IANA-RSVD 35662 IANA-RSVD 35663 IANA-RSVD 35664 IANA-RSVD 35665 IANA-RSVD 35666 IANA-RSVD 35667 IANA-RSVD 35668 IANA-RSVD 35669 IANA-RSVD 35670 IANA-RSVD 35671 IANA-RSVD 35672 IANA-RSVD 35673 IANA-RSVD 35674 IANA-RSVD 35675 IANA-RSVD 35676 IANA-RSVD 35677 IANA-RSVD 35678 IANA-RSVD 35679 IANA-RSVD 35680 IANA-RSVD 35681 IANA-RSVD 35682 IANA-RSVD 35683 IANA-RSVD 35684 IANA-RSVD 35685 IANA-RSVD 35686 IANA-RSVD 35687 IANA-RSVD 35688 IANA-RSVD 35689 IANA-RSVD 35690 IANA-RSVD 35691 IANA-RSVD 35692 IANA-RSVD 35693 IANA-RSVD 35694 IANA-RSVD 35695 IANA-RSVD 35696 IANA-RSVD 35697 IANA-RSVD 35698 IANA-RSVD 35699 IANA-RSVD 35700 IANA-RSVD 35701 IANA-RSVD 35702 IANA-RSVD 35703 IANA-RSVD 35704 IANA-RSVD 35705 IANA-RSVD 35706 IANA-RSVD 35707 IANA-RSVD 35708 IANA-RSVD 35709 IANA-RSVD 35710 IANA-RSVD 35711 IANA-RSVD 35712 IANA-RSVD 35713 IANA-RSVD 35714 IANA-RSVD 35715 IANA-RSVD 35716 IANA-RSVD 35717 IANA-RSVD 35718 IANA-RSVD 35719 IANA-RSVD 35720 IANA-RSVD 35721 IANA-RSVD 35722 IANA-RSVD 35723 IANA-RSVD 35724 IANA-RSVD 35725 IANA-RSVD 35726 IANA-RSVD 35727 IANA-RSVD 35728 IANA-RSVD 35729 IANA-RSVD 35730 IANA-RSVD 35731 IANA-RSVD 35732 IANA-RSVD 35733 IANA-RSVD 35734 IANA-RSVD 35735 IANA-RSVD 35736 IANA-RSVD 35737 IANA-RSVD 35738 IANA-RSVD 35739 IANA-RSVD 35740 IANA-RSVD 35741 IANA-RSVD 35742 IANA-RSVD 35743 IANA-RSVD 35744 IANA-RSVD 35745 IANA-RSVD 35746 IANA-RSVD 35747 IANA-RSVD 35748 IANA-RSVD 35749 IANA-RSVD 35750 IANA-RSVD 35751 IANA-RSVD 35752 IANA-RSVD 35753 IANA-RSVD 35754 IANA-RSVD 35755 IANA-RSVD 35756 IANA-RSVD 35757 IANA-RSVD 35758 IANA-RSVD 35759 IANA-RSVD 35760 IANA-RSVD 35761 IANA-RSVD 35762 IANA-RSVD 35763 IANA-RSVD 35764 IANA-RSVD 35765 IANA-RSVD 35766 IANA-RSVD 35767 IANA-RSVD 35768 IANA-RSVD 35769 IANA-RSVD 35770 IANA-RSVD 35771 IANA-RSVD 35772 IANA-RSVD 35773 IANA-RSVD 35774 IANA-RSVD 35775 IANA-RSVD 35776 IANA-RSVD 35777 IANA-RSVD 35778 IANA-RSVD 35779 IANA-RSVD 35780 IANA-RSVD 35781 IANA-RSVD 35782 IANA-RSVD 35783 IANA-RSVD 35784 IANA-RSVD 35785 IANA-RSVD 35786 IANA-RSVD 35787 IANA-RSVD 35788 IANA-RSVD 35789 IANA-RSVD 35790 IANA-RSVD 35791 IANA-RSVD 35792 IANA-RSVD 35793 IANA-RSVD 35794 IANA-RSVD 35795 IANA-RSVD 35796 IANA-RSVD 35797 IANA-RSVD 35798 IANA-RSVD 35799 IANA-RSVD 35800 IANA-RSVD 35801 IANA-RSVD 35802 IANA-RSVD 35803 IANA-RSVD 35804 IANA-RSVD 35805 IANA-RSVD 35806 IANA-RSVD 35807 IANA-RSVD 35808 IANA-RSVD 35809 IANA-RSVD 35810 IANA-RSVD 35811 IANA-RSVD 35812 IANA-RSVD 35813 IANA-RSVD 35814 IANA-RSVD 35815 IANA-RSVD 35816 IANA-RSVD 35817 IANA-RSVD 35818 IANA-RSVD 35819 IANA-RSVD 35820 IANA-RSVD 35821 IANA-RSVD 35822 IANA-RSVD 35823 IANA-RSVD 35824 IANA-RSVD 35825 IANA-RSVD 35826 IANA-RSVD 35827 IANA-RSVD 35828 IANA-RSVD 35829 IANA-RSVD 35830 IANA-RSVD 35831 IANA-RSVD 35832 IANA-RSVD 35833 IANA-RSVD 35834 IANA-RSVD 35835 IANA-RSVD 35836 IANA-RSVD 35837 IANA-RSVD 35838 IANA-RSVD 35839 IANA-RSVD 35840 IANA-RSVD 35841 IANA-RSVD 35842 IANA-RSVD 35843 IANA-RSVD 35844 IANA-RSVD 35845 IANA-RSVD 35846 IANA-RSVD 35847 IANA-RSVD 35848 IANA-RSVD 35849 IANA-RSVD 35850 IANA-RSVD 35851 IANA-RSVD 35852 IANA-RSVD 35853 IANA-RSVD 35854 IANA-RSVD 35855 IANA-RSVD 35856 IANA-RSVD 35857 IANA-RSVD 35858 IANA-RSVD 35859 IANA-RSVD 35860 IANA-RSVD 35861 IANA-RSVD 35862 IANA-RSVD 35863 IANA-RSVD 35864 IANA-RSVD 35865 IANA-RSVD 35866 IANA-RSVD 35867 IANA-RSVD 35868 IANA-RSVD 35869 IANA-RSVD 35870 IANA-RSVD 35871 IANA-RSVD 35872 IANA-RSVD 35873 IANA-RSVD 35874 IANA-RSVD 35875 IANA-RSVD 35876 IANA-RSVD 35877 IANA-RSVD 35878 IANA-RSVD 35879 IANA-RSVD 35880 IANA-RSVD 35881 IANA-RSVD 35882 IANA-RSVD 35883 IANA-RSVD 35884 IANA-RSVD 35885 IANA-RSVD 35886 IANA-RSVD 35887 IANA-RSVD 35888 IANA-RSVD 35889 IANA-RSVD 35890 IANA-RSVD 35891 IANA-RSVD 35892 IANA-RSVD 35893 IANA-RSVD 35894 IANA-RSVD 35895 IANA-RSVD 35896 IANA-RSVD 35897 IANA-RSVD 35898 IANA-RSVD 35899 IANA-RSVD 35900 IANA-RSVD 35901 IANA-RSVD 35902 IANA-RSVD 35903 IANA-RSVD 35904 IANA-RSVD 35905 IANA-RSVD 35906 IANA-RSVD 35907 IANA-RSVD 35908 IANA-RSVD 35909 IANA-RSVD 35910 IANA-RSVD 35911 IANA-RSVD 35912 IANA-RSVD 35913 IANA-RSVD 35914 IANA-RSVD 35915 IANA-RSVD 35916 IANA-RSVD 35917 IANA-RSVD 35918 IANA-RSVD 35919 IANA-RSVD 35920 IANA-RSVD 35921 IANA-RSVD 35922 IANA-RSVD 35923 IANA-RSVD 35924 IANA-RSVD 35925 IANA-RSVD 35926 IANA-RSVD 35927 IANA-RSVD 35928 IANA-RSVD 35929 IANA-RSVD 35930 IANA-RSVD 35931 IANA-RSVD 35932 IANA-RSVD 35933 IANA-RSVD 35934 IANA-RSVD 35935 IANA-RSVD 35936 IANA-RSVD 35937 IANA-RSVD 35938 IANA-RSVD 35939 IANA-RSVD 35940 IANA-RSVD 35941 IANA-RSVD 35942 IANA-RSVD 35943 IANA-RSVD 35944 IANA-RSVD 35945 IANA-RSVD 35946 IANA-RSVD 35947 IANA-RSVD 35948 IANA-RSVD 35949 IANA-RSVD 35950 IANA-RSVD 35951 IANA-RSVD 35952 IANA-RSVD 35953 IANA-RSVD 35954 IANA-RSVD 35955 IANA-RSVD 35956 IANA-RSVD 35957 IANA-RSVD 35958 IANA-RSVD 35959 IANA-RSVD 35960 IANA-RSVD 35961 IANA-RSVD 35962 IANA-RSVD 35963 IANA-RSVD 35964 IANA-RSVD 35965 IANA-RSVD 35966 IANA-RSVD 35967 IANA-RSVD 35968 IANA-RSVD 35969 IANA-RSVD 35970 IANA-RSVD 35971 IANA-RSVD 35972 IANA-RSVD 35973 IANA-RSVD 35974 IANA-RSVD 35975 IANA-RSVD 35976 IANA-RSVD 35977 IANA-RSVD 35978 IANA-RSVD 35979 IANA-RSVD 35980 IANA-RSVD 35981 IANA-RSVD 35982 IANA-RSVD 35983 IANA-RSVD 35984 IANA-RSVD 35985 IANA-RSVD 35986 IANA-RSVD 35987 IANA-RSVD 35988 IANA-RSVD 35989 IANA-RSVD 35990 IANA-RSVD 35991 IANA-RSVD 35992 IANA-RSVD 35993 IANA-RSVD 35994 IANA-RSVD 35995 IANA-RSVD 35996 IANA-RSVD 35997 IANA-RSVD 35998 IANA-RSVD 35999 IANA-RSVD 36000 IANA-RSVD 36001 IANA-RSVD 36002 IANA-RSVD 36003 IANA-RSVD 36004 IANA-RSVD 36005 IANA-RSVD 36006 IANA-RSVD 36007 IANA-RSVD 36008 IANA-RSVD 36009 IANA-RSVD 36010 IANA-RSVD 36011 IANA-RSVD 36012 IANA-RSVD 36013 IANA-RSVD 36014 IANA-RSVD 36015 IANA-RSVD 36016 IANA-RSVD 36017 IANA-RSVD 36018 IANA-RSVD 36019 IANA-RSVD 36020 IANA-RSVD 36021 IANA-RSVD 36022 IANA-RSVD 36023 IANA-RSVD 36024 IANA-RSVD 36025 IANA-RSVD 36026 IANA-RSVD 36027 IANA-RSVD 36028 IANA-RSVD 36029 IANA-RSVD 36030 IANA-RSVD 36031 IANA-RSVD 36032 IANA-RSVD 36033 IANA-RSVD 36034 IANA-RSVD 36035 IANA-RSVD 36036 IANA-RSVD 36037 IANA-RSVD 36038 IANA-RSVD 36039 IANA-RSVD 36040 IANA-RSVD 36041 IANA-RSVD 36042 IANA-RSVD 36043 IANA-RSVD 36044 IANA-RSVD 36045 IANA-RSVD 36046 IANA-RSVD 36047 IANA-RSVD 36048 IANA-RSVD 36049 IANA-RSVD 36050 IANA-RSVD 36051 IANA-RSVD 36052 IANA-RSVD 36053 IANA-RSVD 36054 IANA-RSVD 36055 IANA-RSVD 36056 IANA-RSVD 36057 IANA-RSVD 36058 IANA-RSVD 36059 IANA-RSVD 36060 IANA-RSVD 36061 IANA-RSVD 36062 IANA-RSVD 36063 IANA-RSVD 36064 IANA-RSVD 36065 IANA-RSVD 36066 IANA-RSVD 36067 IANA-RSVD 36068 IANA-RSVD 36069 IANA-RSVD 36070 IANA-RSVD 36071 IANA-RSVD 36072 IANA-RSVD 36073 IANA-RSVD 36074 IANA-RSVD 36075 IANA-RSVD 36076 IANA-RSVD 36077 IANA-RSVD 36078 IANA-RSVD 36079 IANA-RSVD 36080 IANA-RSVD 36081 IANA-RSVD 36082 IANA-RSVD 36083 IANA-RSVD 36084 IANA-RSVD 36085 IANA-RSVD 36086 IANA-RSVD 36087 IANA-RSVD 36088 IANA-RSVD 36089 IANA-RSVD 36090 IANA-RSVD 36091 IANA-RSVD 36092 IANA-RSVD 36093 IANA-RSVD 36094 IANA-RSVD 36095 IANA-RSVD 36096 IANA-RSVD 36097 IANA-RSVD 36098 IANA-RSVD 36099 IANA-RSVD 36100 IANA-RSVD 36101 IANA-RSVD 36102 IANA-RSVD 36103 IANA-RSVD 36104 IANA-RSVD 36105 IANA-RSVD 36106 IANA-RSVD 36107 IANA-RSVD 36108 IANA-RSVD 36109 IANA-RSVD 36110 IANA-RSVD 36111 IANA-RSVD 36112 IANA-RSVD 36113 IANA-RSVD 36114 IANA-RSVD 36115 IANA-RSVD 36116 IANA-RSVD 36117 IANA-RSVD 36118 IANA-RSVD 36119 IANA-RSVD 36120 IANA-RSVD 36121 IANA-RSVD 36122 IANA-RSVD 36123 IANA-RSVD 36124 IANA-RSVD 36125 IANA-RSVD 36126 IANA-RSVD 36127 IANA-RSVD 36128 IANA-RSVD 36129 IANA-RSVD 36130 IANA-RSVD 36131 IANA-RSVD 36132 IANA-RSVD 36133 IANA-RSVD 36134 IANA-RSVD 36135 IANA-RSVD 36136 IANA-RSVD 36137 IANA-RSVD 36138 IANA-RSVD 36139 IANA-RSVD 36140 IANA-RSVD 36141 IANA-RSVD 36142 IANA-RSVD 36143 IANA-RSVD 36144 IANA-RSVD 36145 IANA-RSVD 36146 IANA-RSVD 36147 IANA-RSVD 36148 IANA-RSVD 36149 IANA-RSVD 36150 IANA-RSVD 36151 IANA-RSVD 36152 IANA-RSVD 36153 IANA-RSVD 36154 IANA-RSVD 36155 IANA-RSVD 36156 IANA-RSVD 36157 IANA-RSVD 36158 IANA-RSVD 36159 IANA-RSVD 36160 IANA-RSVD 36161 IANA-RSVD 36162 IANA-RSVD 36163 IANA-RSVD 36164 IANA-RSVD 36165 IANA-RSVD 36166 IANA-RSVD 36167 IANA-RSVD 36168 IANA-RSVD 36169 IANA-RSVD 36170 IANA-RSVD 36171 IANA-RSVD 36172 IANA-RSVD 36173 IANA-RSVD 36174 IANA-RSVD 36175 IANA-RSVD 36176 IANA-RSVD 36177 IANA-RSVD 36178 IANA-RSVD 36179 IANA-RSVD 36180 IANA-RSVD 36181 IANA-RSVD 36182 IANA-RSVD 36183 IANA-RSVD 36184 IANA-RSVD 36185 IANA-RSVD 36186 IANA-RSVD 36187 IANA-RSVD 36188 IANA-RSVD 36189 IANA-RSVD 36190 IANA-RSVD 36191 IANA-RSVD 36192 IANA-RSVD 36193 IANA-RSVD 36194 IANA-RSVD 36195 IANA-RSVD 36196 IANA-RSVD 36197 IANA-RSVD 36198 IANA-RSVD 36199 IANA-RSVD 36200 IANA-RSVD 36201 IANA-RSVD 36202 IANA-RSVD 36203 IANA-RSVD 36204 IANA-RSVD 36205 IANA-RSVD 36206 IANA-RSVD 36207 IANA-RSVD 36208 IANA-RSVD 36209 IANA-RSVD 36210 IANA-RSVD 36211 IANA-RSVD 36212 IANA-RSVD 36213 IANA-RSVD 36214 IANA-RSVD 36215 IANA-RSVD 36216 IANA-RSVD 36217 IANA-RSVD 36218 IANA-RSVD 36219 IANA-RSVD 36220 IANA-RSVD 36221 IANA-RSVD 36222 IANA-RSVD 36223 IANA-RSVD 36224 IANA-RSVD 36225 IANA-RSVD 36226 IANA-RSVD 36227 IANA-RSVD 36228 IANA-RSVD 36229 IANA-RSVD 36230 IANA-RSVD 36231 IANA-RSVD 36232 IANA-RSVD 36233 IANA-RSVD 36234 IANA-RSVD 36235 IANA-RSVD 36236 IANA-RSVD 36237 IANA-RSVD 36238 IANA-RSVD 36239 IANA-RSVD 36240 IANA-RSVD 36241 IANA-RSVD 36242 IANA-RSVD 36243 IANA-RSVD 36244 IANA-RSVD 36245 IANA-RSVD 36246 IANA-RSVD 36247 IANA-RSVD 36248 IANA-RSVD 36249 IANA-RSVD 36250 IANA-RSVD 36251 IANA-RSVD 36252 IANA-RSVD 36253 IANA-RSVD 36254 IANA-RSVD 36255 IANA-RSVD 36256 IANA-RSVD 36257 IANA-RSVD 36258 IANA-RSVD 36259 IANA-RSVD 36260 IANA-RSVD 36261 IANA-RSVD 36262 IANA-RSVD 36263 IANA-RSVD 36264 IANA-RSVD 36265 IANA-RSVD 36266 IANA-RSVD 36267 IANA-RSVD 36268 IANA-RSVD 36269 IANA-RSVD 36270 IANA-RSVD 36271 IANA-RSVD 36272 IANA-RSVD 36273 IANA-RSVD 36274 IANA-RSVD 36275 IANA-RSVD 36276 IANA-RSVD 36277 IANA-RSVD 36278 IANA-RSVD 36279 IANA-RSVD 36280 IANA-RSVD 36281 IANA-RSVD 36282 IANA-RSVD 36283 IANA-RSVD 36284 IANA-RSVD 36285 IANA-RSVD 36286 IANA-RSVD 36287 IANA-RSVD 36288 IANA-RSVD 36289 IANA-RSVD 36290 IANA-RSVD 36291 IANA-RSVD 36292 IANA-RSVD 36293 IANA-RSVD 36294 IANA-RSVD 36295 IANA-RSVD 36296 IANA-RSVD 36297 IANA-RSVD 36298 IANA-RSVD 36299 IANA-RSVD 36300 IANA-RSVD 36301 IANA-RSVD 36302 IANA-RSVD 36303 IANA-RSVD 36304 IANA-RSVD 36305 IANA-RSVD 36306 IANA-RSVD 36307 IANA-RSVD 36308 IANA-RSVD 36309 IANA-RSVD 36310 IANA-RSVD 36311 IANA-RSVD 36312 IANA-RSVD 36313 IANA-RSVD 36314 IANA-RSVD 36315 IANA-RSVD 36316 IANA-RSVD 36317 IANA-RSVD 36318 IANA-RSVD 36319 IANA-RSVD 36320 IANA-RSVD 36321 IANA-RSVD 36322 IANA-RSVD 36323 IANA-RSVD 36324 IANA-RSVD 36325 IANA-RSVD 36326 IANA-RSVD 36327 IANA-RSVD 36328 IANA-RSVD 36329 IANA-RSVD 36330 IANA-RSVD 36331 IANA-RSVD 36332 IANA-RSVD 36333 IANA-RSVD 36334 IANA-RSVD 36335 IANA-RSVD 36336 IANA-RSVD 36337 IANA-RSVD 36338 IANA-RSVD 36339 IANA-RSVD 36340 IANA-RSVD 36341 IANA-RSVD 36342 IANA-RSVD 36343 IANA-RSVD 36344 IANA-RSVD 36345 IANA-RSVD 36346 IANA-RSVD 36347 IANA-RSVD 36348 IANA-RSVD 36349 IANA-RSVD 36350 IANA-RSVD 36351 IANA-RSVD 36352 IANA-RSVD 36353 IANA-RSVD 36354 IANA-RSVD 36355 IANA-RSVD 36356 IANA-RSVD 36357 IANA-RSVD 36358 IANA-RSVD 36359 IANA-RSVD 36360 IANA-RSVD 36361 IANA-RSVD 36362 IANA-RSVD 36363 IANA-RSVD 36364 IANA-RSVD 36365 IANA-RSVD 36366 IANA-RSVD 36367 IANA-RSVD 36368 IANA-RSVD 36369 IANA-RSVD 36370 IANA-RSVD 36371 IANA-RSVD 36372 IANA-RSVD 36373 IANA-RSVD 36374 IANA-RSVD 36375 IANA-RSVD 36376 IANA-RSVD 36377 IANA-RSVD 36378 IANA-RSVD 36379 IANA-RSVD 36380 IANA-RSVD 36381 IANA-RSVD 36382 IANA-RSVD 36383 IANA-RSVD 36384 IANA-RSVD 36385 IANA-RSVD 36386 IANA-RSVD 36387 IANA-RSVD 36388 IANA-RSVD 36389 IANA-RSVD 36390 IANA-RSVD 36391 IANA-RSVD 36392 IANA-RSVD 36393 IANA-RSVD 36394 IANA-RSVD 36395 IANA-RSVD 36396 IANA-RSVD 36397 IANA-RSVD 36398 IANA-RSVD 36399 IANA-RSVD 36400 IANA-RSVD 36401 IANA-RSVD 36402 IANA-RSVD 36403 IANA-RSVD 36404 IANA-RSVD 36405 IANA-RSVD 36406 IANA-RSVD 36407 IANA-RSVD 36408 IANA-RSVD 36409 IANA-RSVD 36410 IANA-RSVD 36411 IANA-RSVD 36412 IANA-RSVD 36413 IANA-RSVD 36414 IANA-RSVD 36415 IANA-RSVD 36416 IANA-RSVD 36417 IANA-RSVD 36418 IANA-RSVD 36419 IANA-RSVD 36420 IANA-RSVD 36421 IANA-RSVD 36422 IANA-RSVD 36423 IANA-RSVD 36424 IANA-RSVD 36425 IANA-RSVD 36426 IANA-RSVD 36427 IANA-RSVD 36428 IANA-RSVD 36429 IANA-RSVD 36430 IANA-RSVD 36431 IANA-RSVD 36432 IANA-RSVD 36433 IANA-RSVD 36434 IANA-RSVD 36435 IANA-RSVD 36436 IANA-RSVD 36437 IANA-RSVD 36438 IANA-RSVD 36439 IANA-RSVD 36440 IANA-RSVD 36441 IANA-RSVD 36442 IANA-RSVD 36443 IANA-RSVD 36444 IANA-RSVD 36445 IANA-RSVD 36446 IANA-RSVD 36447 IANA-RSVD 36448 IANA-RSVD 36449 IANA-RSVD 36450 IANA-RSVD 36451 IANA-RSVD 36452 IANA-RSVD 36453 IANA-RSVD 36454 IANA-RSVD 36455 IANA-RSVD 36456 IANA-RSVD 36457 IANA-RSVD 36458 IANA-RSVD 36459 IANA-RSVD 36460 IANA-RSVD 36461 IANA-RSVD 36462 IANA-RSVD 36463 IANA-RSVD 36464 IANA-RSVD 36465 IANA-RSVD 36466 IANA-RSVD 36467 IANA-RSVD 36468 IANA-RSVD 36469 IANA-RSVD 36470 IANA-RSVD 36471 IANA-RSVD 36472 IANA-RSVD 36473 IANA-RSVD 36474 IANA-RSVD 36475 IANA-RSVD 36476 IANA-RSVD 36477 IANA-RSVD 36478 IANA-RSVD 36479 IANA-RSVD 36480 IANA-RSVD 36481 IANA-RSVD 36482 IANA-RSVD 36483 IANA-RSVD 36484 IANA-RSVD 36485 IANA-RSVD 36486 IANA-RSVD 36487 IANA-RSVD 36488 IANA-RSVD 36489 IANA-RSVD 36490 IANA-RSVD 36491 IANA-RSVD 36492 IANA-RSVD 36493 IANA-RSVD 36494 IANA-RSVD 36495 IANA-RSVD 36496 IANA-RSVD 36497 IANA-RSVD 36498 IANA-RSVD 36499 IANA-RSVD 36500 IANA-RSVD 36501 IANA-RSVD 36502 IANA-RSVD 36503 IANA-RSVD 36504 IANA-RSVD 36505 IANA-RSVD 36506 IANA-RSVD 36507 IANA-RSVD 36508 IANA-RSVD 36509 IANA-RSVD 36510 IANA-RSVD 36511 IANA-RSVD 36512 IANA-RSVD 36513 IANA-RSVD 36514 IANA-RSVD 36515 IANA-RSVD 36516 IANA-RSVD 36517 IANA-RSVD 36518 IANA-RSVD 36519 IANA-RSVD 36520 IANA-RSVD 36521 IANA-RSVD 36522 IANA-RSVD 36523 IANA-RSVD 36524 IANA-RSVD 36525 IANA-RSVD 36526 IANA-RSVD 36527 IANA-RSVD 36528 IANA-RSVD 36529 IANA-RSVD 36530 IANA-RSVD 36531 IANA-RSVD 36532 IANA-RSVD 36533 IANA-RSVD 36534 IANA-RSVD 36535 IANA-RSVD 36536 IANA-RSVD 36537 IANA-RSVD 36538 IANA-RSVD 36539 IANA-RSVD 36540 IANA-RSVD 36541 IANA-RSVD 36542 IANA-RSVD 36543 IANA-RSVD 36544 IANA-RSVD 36545 IANA-RSVD 36546 IANA-RSVD 36547 IANA-RSVD 36548 IANA-RSVD 36549 IANA-RSVD 36550 IANA-RSVD 36551 IANA-RSVD 36552 IANA-RSVD 36553 IANA-RSVD 36554 IANA-RSVD 36555 IANA-RSVD 36556 IANA-RSVD 36557 IANA-RSVD 36558 IANA-RSVD 36559 IANA-RSVD 36560 IANA-RSVD 36561 IANA-RSVD 36562 IANA-RSVD 36563 IANA-RSVD 36564 IANA-RSVD 36565 IANA-RSVD 36566 IANA-RSVD 36567 IANA-RSVD 36568 IANA-RSVD 36569 IANA-RSVD 36570 IANA-RSVD 36571 IANA-RSVD 36572 IANA-RSVD 36573 IANA-RSVD 36574 IANA-RSVD 36575 IANA-RSVD 36576 IANA-RSVD 36577 IANA-RSVD 36578 IANA-RSVD 36579 IANA-RSVD 36580 IANA-RSVD 36581 IANA-RSVD 36582 IANA-RSVD 36583 IANA-RSVD 36584 IANA-RSVD 36585 IANA-RSVD 36586 IANA-RSVD 36587 IANA-RSVD 36588 IANA-RSVD 36589 IANA-RSVD 36590 IANA-RSVD 36591 IANA-RSVD 36592 IANA-RSVD 36593 IANA-RSVD 36594 IANA-RSVD 36595 IANA-RSVD 36596 IANA-RSVD 36597 IANA-RSVD 36598 IANA-RSVD 36599 IANA-RSVD 36600 IANA-RSVD 36601 IANA-RSVD 36602 IANA-RSVD 36603 IANA-RSVD 36604 IANA-RSVD 36605 IANA-RSVD 36606 IANA-RSVD 36607 IANA-RSVD 36608 IANA-RSVD 36609 IANA-RSVD 36610 IANA-RSVD 36611 IANA-RSVD 36612 IANA-RSVD 36613 IANA-RSVD 36614 IANA-RSVD 36615 IANA-RSVD 36616 IANA-RSVD 36617 IANA-RSVD 36618 IANA-RSVD 36619 IANA-RSVD 36620 IANA-RSVD 36621 IANA-RSVD 36622 IANA-RSVD 36623 IANA-RSVD 36624 IANA-RSVD 36625 IANA-RSVD 36626 IANA-RSVD 36627 IANA-RSVD 36628 IANA-RSVD 36629 IANA-RSVD 36630 IANA-RSVD 36631 IANA-RSVD 36632 IANA-RSVD 36633 IANA-RSVD 36634 IANA-RSVD 36635 IANA-RSVD 36636 IANA-RSVD 36637 IANA-RSVD 36638 IANA-RSVD 36639 IANA-RSVD 36640 IANA-RSVD 36641 IANA-RSVD 36642 IANA-RSVD 36643 IANA-RSVD 36644 IANA-RSVD 36645 IANA-RSVD 36646 IANA-RSVD 36647 IANA-RSVD 36648 IANA-RSVD 36649 IANA-RSVD 36650 IANA-RSVD 36651 IANA-RSVD 36652 IANA-RSVD 36653 IANA-RSVD 36654 IANA-RSVD 36655 IANA-RSVD 36656 IANA-RSVD 36657 IANA-RSVD 36658 IANA-RSVD 36659 IANA-RSVD 36660 IANA-RSVD 36661 IANA-RSVD 36662 IANA-RSVD 36663 IANA-RSVD 36664 IANA-RSVD 36665 IANA-RSVD 36666 IANA-RSVD 36667 IANA-RSVD 36668 IANA-RSVD 36669 IANA-RSVD 36670 IANA-RSVD 36671 IANA-RSVD 36672 IANA-RSVD 36673 IANA-RSVD 36674 IANA-RSVD 36675 IANA-RSVD 36676 IANA-RSVD 36677 IANA-RSVD 36678 IANA-RSVD 36679 IANA-RSVD 36680 IANA-RSVD 36681 IANA-RSVD 36682 IANA-RSVD 36683 IANA-RSVD 36684 IANA-RSVD 36685 IANA-RSVD 36686 IANA-RSVD 36687 IANA-RSVD 36688 IANA-RSVD 36689 IANA-RSVD 36690 IANA-RSVD 36691 IANA-RSVD 36692 IANA-RSVD 36693 IANA-RSVD 36694 IANA-RSVD 36695 IANA-RSVD 36696 IANA-RSVD 36697 IANA-RSVD 36698 IANA-RSVD 36699 IANA-RSVD 36700 IANA-RSVD 36701 IANA-RSVD 36702 IANA-RSVD 36703 IANA-RSVD 36704 IANA-RSVD 36705 IANA-RSVD 36706 IANA-RSVD 36707 IANA-RSVD 36708 IANA-RSVD 36709 IANA-RSVD 36710 IANA-RSVD 36711 IANA-RSVD 36712 IANA-RSVD 36713 IANA-RSVD 36714 IANA-RSVD 36715 IANA-RSVD 36716 IANA-RSVD 36717 IANA-RSVD 36718 IANA-RSVD 36719 IANA-RSVD 36720 IANA-RSVD 36721 IANA-RSVD 36722 IANA-RSVD 36723 IANA-RSVD 36724 IANA-RSVD 36725 IANA-RSVD 36726 IANA-RSVD 36727 IANA-RSVD 36728 IANA-RSVD 36729 IANA-RSVD 36730 IANA-RSVD 36731 IANA-RSVD 36732 IANA-RSVD 36733 IANA-RSVD 36734 IANA-RSVD 36735 IANA-RSVD 36736 IANA-RSVD 36737 IANA-RSVD 36738 IANA-RSVD 36739 IANA-RSVD 36740 IANA-RSVD 36741 IANA-RSVD 36742 IANA-RSVD 36743 IANA-RSVD 36744 IANA-RSVD 36745 IANA-RSVD 36746 IANA-RSVD 36747 IANA-RSVD 36748 IANA-RSVD 36749 IANA-RSVD 36750 IANA-RSVD 36751 IANA-RSVD 36752 IANA-RSVD 36753 IANA-RSVD 36754 IANA-RSVD 36755 IANA-RSVD 36756 IANA-RSVD 36757 IANA-RSVD 36758 IANA-RSVD 36759 IANA-RSVD 36760 IANA-RSVD 36761 IANA-RSVD 36762 IANA-RSVD 36763 IANA-RSVD 36764 IANA-RSVD 36765 IANA-RSVD 36766 IANA-RSVD 36767 IANA-RSVD 36768 IANA-RSVD 36769 IANA-RSVD 36770 IANA-RSVD 36771 IANA-RSVD 36772 IANA-RSVD 36773 IANA-RSVD 36774 IANA-RSVD 36775 IANA-RSVD 36776 IANA-RSVD 36777 IANA-RSVD 36778 IANA-RSVD 36779 IANA-RSVD 36780 IANA-RSVD 36781 IANA-RSVD 36782 IANA-RSVD 36783 IANA-RSVD 36784 IANA-RSVD 36785 IANA-RSVD 36786 IANA-RSVD 36787 IANA-RSVD 36788 IANA-RSVD 36789 IANA-RSVD 36790 IANA-RSVD 36791 IANA-RSVD 36792 IANA-RSVD 36793 IANA-RSVD 36794 IANA-RSVD 36795 IANA-RSVD 36796 IANA-RSVD 36797 IANA-RSVD 36798 IANA-RSVD 36799 IANA-RSVD 36800 IANA-RSVD 36801 IANA-RSVD 36802 IANA-RSVD 36803 IANA-RSVD 36804 IANA-RSVD 36805 IANA-RSVD 36806 IANA-RSVD 36807 IANA-RSVD 36808 IANA-RSVD 36809 IANA-RSVD 36810 IANA-RSVD 36811 IANA-RSVD 36812 IANA-RSVD 36813 IANA-RSVD 36814 IANA-RSVD 36815 IANA-RSVD 36816 IANA-RSVD 36817 IANA-RSVD 36818 IANA-RSVD 36819 IANA-RSVD 36820 IANA-RSVD 36821 IANA-RSVD 36822 IANA-RSVD 36823 IANA-RSVD 36824 IANA-RSVD 36825 IANA-RSVD 36826 IANA-RSVD 36827 IANA-RSVD 36828 IANA-RSVD 36829 IANA-RSVD 36830 IANA-RSVD 36831 IANA-RSVD 36832 IANA-RSVD 36833 IANA-RSVD 36834 IANA-RSVD 36835 IANA-RSVD 36836 IANA-RSVD 36837 IANA-RSVD 36838 IANA-RSVD 36839 IANA-RSVD 36840 IANA-RSVD 36841 IANA-RSVD 36842 IANA-RSVD 36843 IANA-RSVD 36844 IANA-RSVD 36845 IANA-RSVD 36846 IANA-RSVD 36847 IANA-RSVD 36848 IANA-RSVD 36849 IANA-RSVD 36850 IANA-RSVD 36851 IANA-RSVD 36852 IANA-RSVD 36853 IANA-RSVD 36854 IANA-RSVD 36855 IANA-RSVD 36856 IANA-RSVD 36857 IANA-RSVD 36858 IANA-RSVD 36859 IANA-RSVD 36860 IANA-RSVD 36861 IANA-RSVD 36862 IANA-RSVD 36863 IANA-RSVD 36864 IANA-RSVD 36865 IANA-RSVD 36866 IANA-RSVD 36867 IANA-RSVD 36868 IANA-RSVD 36869 IANA-RSVD 36870 IANA-RSVD 36871 IANA-RSVD 36872 IANA-RSVD 36873 IANA-RSVD 36874 IANA-RSVD 36875 IANA-RSVD 36876 IANA-RSVD 36877 IANA-RSVD 36878 IANA-RSVD 36879 IANA-RSVD 36880 IANA-RSVD 36881 IANA-RSVD 36882 IANA-RSVD 36883 IANA-RSVD 36884 IANA-RSVD 36885 IANA-RSVD 36886 IANA-RSVD 36887 IANA-RSVD 36888 IANA-RSVD 36889 IANA-RSVD 36890 IANA-RSVD 36891 IANA-RSVD 36892 IANA-RSVD 36893 IANA-RSVD 36894 IANA-RSVD 36895 IANA-RSVD 36896 IANA-RSVD 36897 IANA-RSVD 36898 IANA-RSVD 36899 IANA-RSVD 36900 IANA-RSVD 36901 IANA-RSVD 36902 IANA-RSVD 36903 IANA-RSVD 36904 IANA-RSVD 36905 IANA-RSVD 36906 IANA-RSVD 36907 IANA-RSVD 36908 IANA-RSVD 36909 IANA-RSVD 36910 IANA-RSVD 36911 IANA-RSVD 36912 IANA-RSVD 36913 IANA-RSVD 36914 IANA-RSVD 36915 IANA-RSVD 36916 IANA-RSVD 36917 IANA-RSVD 36918 IANA-RSVD 36919 IANA-RSVD 36920 IANA-RSVD 36921 IANA-RSVD 36922 IANA-RSVD 36923 IANA-RSVD 36924 IANA-RSVD 36925 IANA-RSVD 36926 IANA-RSVD 36927 IANA-RSVD 36928 IANA-RSVD 36929 IANA-RSVD 36930 IANA-RSVD 36931 IANA-RSVD 36932 IANA-RSVD 36933 IANA-RSVD 36934 IANA-RSVD 36935 IANA-RSVD 36936 IANA-RSVD 36937 IANA-RSVD 36938 IANA-RSVD 36939 IANA-RSVD 36940 IANA-RSVD 36941 IANA-RSVD 36942 IANA-RSVD 36943 IANA-RSVD 36944 IANA-RSVD 36945 IANA-RSVD 36946 IANA-RSVD 36947 IANA-RSVD 36948 IANA-RSVD 36949 IANA-RSVD 36950 IANA-RSVD 36951 IANA-RSVD 36952 IANA-RSVD 36953 IANA-RSVD 36954 IANA-RSVD 36955 IANA-RSVD 36956 IANA-RSVD 36957 IANA-RSVD 36958 IANA-RSVD 36959 IANA-RSVD 36960 IANA-RSVD 36961 IANA-RSVD 36962 IANA-RSVD 36963 IANA-RSVD 36964 IANA-RSVD 36965 IANA-RSVD 36966 IANA-RSVD 36967 IANA-RSVD 36968 IANA-RSVD 36969 IANA-RSVD 36970 IANA-RSVD 36971 IANA-RSVD 36972 IANA-RSVD 36973 IANA-RSVD 36974 IANA-RSVD 36975 IANA-RSVD 36976 IANA-RSVD 36977 IANA-RSVD 36978 IANA-RSVD 36979 IANA-RSVD 36980 IANA-RSVD 36981 IANA-RSVD 36982 IANA-RSVD 36983 IANA-RSVD 36984 IANA-RSVD 36985 IANA-RSVD 36986 IANA-RSVD 36987 IANA-RSVD 36988 IANA-RSVD 36989 IANA-RSVD 36990 IANA-RSVD 36991 IANA-RSVD 36992 IANA-RSVD 36993 IANA-RSVD 36994 IANA-RSVD 36995 IANA-RSVD 36996 IANA-RSVD 36997 IANA-RSVD 36998 IANA-RSVD 36999 IANA-RSVD 37000 IANA-RSVD 37001 IANA-RSVD 37002 IANA-RSVD 37003 IANA-RSVD 37004 IANA-RSVD 37005 IANA-RSVD 37006 IANA-RSVD 37007 IANA-RSVD 37008 IANA-RSVD 37009 IANA-RSVD 37010 IANA-RSVD 37011 IANA-RSVD 37012 IANA-RSVD 37013 IANA-RSVD 37014 IANA-RSVD 37015 IANA-RSVD 37016 IANA-RSVD 37017 IANA-RSVD 37018 IANA-RSVD 37019 IANA-RSVD 37020 IANA-RSVD 37021 IANA-RSVD 37022 IANA-RSVD 37023 IANA-RSVD 37024 IANA-RSVD 37025 IANA-RSVD 37026 IANA-RSVD 37027 IANA-RSVD 37028 IANA-RSVD 37029 IANA-RSVD 37030 IANA-RSVD 37031 IANA-RSVD 37032 IANA-RSVD 37033 IANA-RSVD 37034 IANA-RSVD 37035 IANA-RSVD 37036 IANA-RSVD 37037 IANA-RSVD 37038 IANA-RSVD 37039 IANA-RSVD 37040 IANA-RSVD 37041 IANA-RSVD 37042 IANA-RSVD 37043 IANA-RSVD 37044 IANA-RSVD 37045 IANA-RSVD 37046 IANA-RSVD 37047 IANA-RSVD 37048 IANA-RSVD 37049 IANA-RSVD 37050 IANA-RSVD 37051 IANA-RSVD 37052 IANA-RSVD 37053 IANA-RSVD 37054 IANA-RSVD 37055 IANA-RSVD 37056 IANA-RSVD 37057 IANA-RSVD 37058 IANA-RSVD 37059 IANA-RSVD 37060 IANA-RSVD 37061 IANA-RSVD 37062 IANA-RSVD 37063 IANA-RSVD 37064 IANA-RSVD 37065 IANA-RSVD 37066 IANA-RSVD 37067 IANA-RSVD 37068 IANA-RSVD 37069 IANA-RSVD 37070 IANA-RSVD 37071 IANA-RSVD 37072 IANA-RSVD 37073 IANA-RSVD 37074 IANA-RSVD 37075 IANA-RSVD 37076 IANA-RSVD 37077 IANA-RSVD 37078 IANA-RSVD 37079 IANA-RSVD 37080 IANA-RSVD 37081 IANA-RSVD 37082 IANA-RSVD 37083 IANA-RSVD 37084 IANA-RSVD 37085 IANA-RSVD 37086 IANA-RSVD 37087 IANA-RSVD 37088 IANA-RSVD 37089 IANA-RSVD 37090 IANA-RSVD 37091 IANA-RSVD 37092 IANA-RSVD 37093 IANA-RSVD 37094 IANA-RSVD 37095 IANA-RSVD 37096 IANA-RSVD 37097 IANA-RSVD 37098 IANA-RSVD 37099 IANA-RSVD 37100 IANA-RSVD 37101 IANA-RSVD 37102 IANA-RSVD 37103 IANA-RSVD 37104 IANA-RSVD 37105 IANA-RSVD 37106 IANA-RSVD 37107 IANA-RSVD 37108 IANA-RSVD 37109 IANA-RSVD 37110 IANA-RSVD 37111 IANA-RSVD 37112 IANA-RSVD 37113 IANA-RSVD 37114 IANA-RSVD 37115 IANA-RSVD 37116 IANA-RSVD 37117 IANA-RSVD 37118 IANA-RSVD 37119 IANA-RSVD 37120 IANA-RSVD 37121 IANA-RSVD 37122 IANA-RSVD 37123 IANA-RSVD 37124 IANA-RSVD 37125 IANA-RSVD 37126 IANA-RSVD 37127 IANA-RSVD 37128 IANA-RSVD 37129 IANA-RSVD 37130 IANA-RSVD 37131 IANA-RSVD 37132 IANA-RSVD 37133 IANA-RSVD 37134 IANA-RSVD 37135 IANA-RSVD 37136 IANA-RSVD 37137 IANA-RSVD 37138 IANA-RSVD 37139 IANA-RSVD 37140 IANA-RSVD 37141 IANA-RSVD 37142 IANA-RSVD 37143 IANA-RSVD 37144 IANA-RSVD 37145 IANA-RSVD 37146 IANA-RSVD 37147 IANA-RSVD 37148 IANA-RSVD 37149 IANA-RSVD 37150 IANA-RSVD 37151 IANA-RSVD 37152 IANA-RSVD 37153 IANA-RSVD 37154 IANA-RSVD 37155 IANA-RSVD 37156 IANA-RSVD 37157 IANA-RSVD 37158 IANA-RSVD 37159 IANA-RSVD 37160 IANA-RSVD 37161 IANA-RSVD 37162 IANA-RSVD 37163 IANA-RSVD 37164 IANA-RSVD 37165 IANA-RSVD 37166 IANA-RSVD 37167 IANA-RSVD 37168 IANA-RSVD 37169 IANA-RSVD 37170 IANA-RSVD 37171 IANA-RSVD 37172 IANA-RSVD 37173 IANA-RSVD 37174 IANA-RSVD 37175 IANA-RSVD 37176 IANA-RSVD 37177 IANA-RSVD 37178 IANA-RSVD 37179 IANA-RSVD 37180 IANA-RSVD 37181 IANA-RSVD 37182 IANA-RSVD 37183 IANA-RSVD 37184 IANA-RSVD 37185 IANA-RSVD 37186 IANA-RSVD 37187 IANA-RSVD 37188 IANA-RSVD 37189 IANA-RSVD 37190 IANA-RSVD 37191 IANA-RSVD 37192 IANA-RSVD 37193 IANA-RSVD 37194 IANA-RSVD 37195 IANA-RSVD 37196 IANA-RSVD 37197 IANA-RSVD 37198 IANA-RSVD 37199 IANA-RSVD 37200 IANA-RSVD 37201 IANA-RSVD 37202 IANA-RSVD 37203 IANA-RSVD 37204 IANA-RSVD 37205 IANA-RSVD 37206 IANA-RSVD 37207 IANA-RSVD 37208 IANA-RSVD 37209 IANA-RSVD 37210 IANA-RSVD 37211 IANA-RSVD 37212 IANA-RSVD 37213 IANA-RSVD 37214 IANA-RSVD 37215 IANA-RSVD 37216 IANA-RSVD 37217 IANA-RSVD 37218 IANA-RSVD 37219 IANA-RSVD 37220 IANA-RSVD 37221 IANA-RSVD 37222 IANA-RSVD 37223 IANA-RSVD 37224 IANA-RSVD 37225 IANA-RSVD 37226 IANA-RSVD 37227 IANA-RSVD 37228 IANA-RSVD 37229 IANA-RSVD 37230 IANA-RSVD 37231 IANA-RSVD 37232 IANA-RSVD 37233 IANA-RSVD 37234 IANA-RSVD 37235 IANA-RSVD 37236 IANA-RSVD 37237 IANA-RSVD 37238 IANA-RSVD 37239 IANA-RSVD 37240 IANA-RSVD 37241 IANA-RSVD 37242 IANA-RSVD 37243 IANA-RSVD 37244 IANA-RSVD 37245 IANA-RSVD 37246 IANA-RSVD 37247 IANA-RSVD 37248 IANA-RSVD 37249 IANA-RSVD 37250 IANA-RSVD 37251 IANA-RSVD 37252 IANA-RSVD 37253 IANA-RSVD 37254 IANA-RSVD 37255 IANA-RSVD 37256 IANA-RSVD 37257 IANA-RSVD 37258 IANA-RSVD 37259 IANA-RSVD 37260 IANA-RSVD 37261 IANA-RSVD 37262 IANA-RSVD 37263 IANA-RSVD 37264 IANA-RSVD 37265 IANA-RSVD 37266 IANA-RSVD 37267 IANA-RSVD 37268 IANA-RSVD 37269 IANA-RSVD 37270 IANA-RSVD 37271 IANA-RSVD 37272 IANA-RSVD 37273 IANA-RSVD 37274 IANA-RSVD 37275 IANA-RSVD 37276 IANA-RSVD 37277 IANA-RSVD 37278 IANA-RSVD 37279 IANA-RSVD 37280 IANA-RSVD 37281 IANA-RSVD 37282 IANA-RSVD 37283 IANA-RSVD 37284 IANA-RSVD 37285 IANA-RSVD 37286 IANA-RSVD 37287 IANA-RSVD 37288 IANA-RSVD 37289 IANA-RSVD 37290 IANA-RSVD 37291 IANA-RSVD 37292 IANA-RSVD 37293 IANA-RSVD 37294 IANA-RSVD 37295 IANA-RSVD 37296 IANA-RSVD 37297 IANA-RSVD 37298 IANA-RSVD 37299 IANA-RSVD 37300 IANA-RSVD 37301 IANA-RSVD 37302 IANA-RSVD 37303 IANA-RSVD 37304 IANA-RSVD 37305 IANA-RSVD 37306 IANA-RSVD 37307 IANA-RSVD 37308 IANA-RSVD 37309 IANA-RSVD 37310 IANA-RSVD 37311 IANA-RSVD 37312 IANA-RSVD 37313 IANA-RSVD 37314 IANA-RSVD 37315 IANA-RSVD 37316 IANA-RSVD 37317 IANA-RSVD 37318 IANA-RSVD 37319 IANA-RSVD 37320 IANA-RSVD 37321 IANA-RSVD 37322 IANA-RSVD 37323 IANA-RSVD 37324 IANA-RSVD 37325 IANA-RSVD 37326 IANA-RSVD 37327 IANA-RSVD 37328 IANA-RSVD 37329 IANA-RSVD 37330 IANA-RSVD 37331 IANA-RSVD 37332 IANA-RSVD 37333 IANA-RSVD 37334 IANA-RSVD 37335 IANA-RSVD 37336 IANA-RSVD 37337 IANA-RSVD 37338 IANA-RSVD 37339 IANA-RSVD 37340 IANA-RSVD 37341 IANA-RSVD 37342 IANA-RSVD 37343 IANA-RSVD 37344 IANA-RSVD 37345 IANA-RSVD 37346 IANA-RSVD 37347 IANA-RSVD 37348 IANA-RSVD 37349 IANA-RSVD 37350 IANA-RSVD 37351 IANA-RSVD 37352 IANA-RSVD 37353 IANA-RSVD 37354 IANA-RSVD 37355 IANA-RSVD 37356 IANA-RSVD 37357 IANA-RSVD 37358 IANA-RSVD 37359 IANA-RSVD 37360 IANA-RSVD 37361 IANA-RSVD 37362 IANA-RSVD 37363 IANA-RSVD 37364 IANA-RSVD 37365 IANA-RSVD 37366 IANA-RSVD 37367 IANA-RSVD 37368 IANA-RSVD 37369 IANA-RSVD 37370 IANA-RSVD 37371 IANA-RSVD 37372 IANA-RSVD 37373 IANA-RSVD 37374 IANA-RSVD 37375 IANA-RSVD 37376 IANA-RSVD 37377 IANA-RSVD 37378 IANA-RSVD 37379 IANA-RSVD 37380 IANA-RSVD 37381 IANA-RSVD 37382 IANA-RSVD 37383 IANA-RSVD 37384 IANA-RSVD 37385 IANA-RSVD 37386 IANA-RSVD 37387 IANA-RSVD 37388 IANA-RSVD 37389 IANA-RSVD 37390 IANA-RSVD 37391 IANA-RSVD 37392 IANA-RSVD 37393 IANA-RSVD 37394 IANA-RSVD 37395 IANA-RSVD 37396 IANA-RSVD 37397 IANA-RSVD 37398 IANA-RSVD 37399 IANA-RSVD 37400 IANA-RSVD 37401 IANA-RSVD 37402 IANA-RSVD 37403 IANA-RSVD 37404 IANA-RSVD 37405 IANA-RSVD 37406 IANA-RSVD 37407 IANA-RSVD 37408 IANA-RSVD 37409 IANA-RSVD 37410 IANA-RSVD 37411 IANA-RSVD 37412 IANA-RSVD 37413 IANA-RSVD 37414 IANA-RSVD 37415 IANA-RSVD 37416 IANA-RSVD 37417 IANA-RSVD 37418 IANA-RSVD 37419 IANA-RSVD 37420 IANA-RSVD 37421 IANA-RSVD 37422 IANA-RSVD 37423 IANA-RSVD 37424 IANA-RSVD 37425 IANA-RSVD 37426 IANA-RSVD 37427 IANA-RSVD 37428 IANA-RSVD 37429 IANA-RSVD 37430 IANA-RSVD 37431 IANA-RSVD 37432 IANA-RSVD 37433 IANA-RSVD 37434 IANA-RSVD 37435 IANA-RSVD 37436 IANA-RSVD 37437 IANA-RSVD 37438 IANA-RSVD 37439 IANA-RSVD 37440 IANA-RSVD 37441 IANA-RSVD 37442 IANA-RSVD 37443 IANA-RSVD 37444 IANA-RSVD 37445 IANA-RSVD 37446 IANA-RSVD 37447 IANA-RSVD 37448 IANA-RSVD 37449 IANA-RSVD 37450 IANA-RSVD 37451 IANA-RSVD 37452 IANA-RSVD 37453 IANA-RSVD 37454 IANA-RSVD 37455 IANA-RSVD 37456 IANA-RSVD 37457 IANA-RSVD 37458 IANA-RSVD 37459 IANA-RSVD 37460 IANA-RSVD 37461 IANA-RSVD 37462 IANA-RSVD 37463 IANA-RSVD 37464 IANA-RSVD 37465 IANA-RSVD 37466 IANA-RSVD 37467 IANA-RSVD 37468 IANA-RSVD 37469 IANA-RSVD 37470 IANA-RSVD 37471 IANA-RSVD 37472 IANA-RSVD 37473 IANA-RSVD 37474 IANA-RSVD 37475 IANA-RSVD 37476 IANA-RSVD 37477 IANA-RSVD 37478 IANA-RSVD 37479 IANA-RSVD 37480 IANA-RSVD 37481 IANA-RSVD 37482 IANA-RSVD 37483 IANA-RSVD 37484 IANA-RSVD 37485 IANA-RSVD 37486 IANA-RSVD 37487 IANA-RSVD 37488 IANA-RSVD 37489 IANA-RSVD 37490 IANA-RSVD 37491 IANA-RSVD 37492 IANA-RSVD 37493 IANA-RSVD 37494 IANA-RSVD 37495 IANA-RSVD 37496 IANA-RSVD 37497 IANA-RSVD 37498 IANA-RSVD 37499 IANA-RSVD 37500 IANA-RSVD 37501 IANA-RSVD 37502 IANA-RSVD 37503 IANA-RSVD 37504 IANA-RSVD 37505 IANA-RSVD 37506 IANA-RSVD 37507 IANA-RSVD 37508 IANA-RSVD 37509 IANA-RSVD 37510 IANA-RSVD 37511 IANA-RSVD 37512 IANA-RSVD 37513 IANA-RSVD 37514 IANA-RSVD 37515 IANA-RSVD 37516 IANA-RSVD 37517 IANA-RSVD 37518 IANA-RSVD 37519 IANA-RSVD 37520 IANA-RSVD 37521 IANA-RSVD 37522 IANA-RSVD 37523 IANA-RSVD 37524 IANA-RSVD 37525 IANA-RSVD 37526 IANA-RSVD 37527 IANA-RSVD 37528 IANA-RSVD 37529 IANA-RSVD 37530 IANA-RSVD 37531 IANA-RSVD 37532 IANA-RSVD 37533 IANA-RSVD 37534 IANA-RSVD 37535 IANA-RSVD 37536 IANA-RSVD 37537 IANA-RSVD 37538 IANA-RSVD 37539 IANA-RSVD 37540 IANA-RSVD 37541 IANA-RSVD 37542 IANA-RSVD 37543 IANA-RSVD 37544 IANA-RSVD 37545 IANA-RSVD 37546 IANA-RSVD 37547 IANA-RSVD 37548 IANA-RSVD 37549 IANA-RSVD 37550 IANA-RSVD 37551 IANA-RSVD 37552 IANA-RSVD 37553 IANA-RSVD 37554 IANA-RSVD 37555 IANA-RSVD 37556 IANA-RSVD 37557 IANA-RSVD 37558 IANA-RSVD 37559 IANA-RSVD 37560 IANA-RSVD 37561 IANA-RSVD 37562 IANA-RSVD 37563 IANA-RSVD 37564 IANA-RSVD 37565 IANA-RSVD 37566 IANA-RSVD 37567 IANA-RSVD 37568 IANA-RSVD 37569 IANA-RSVD 37570 IANA-RSVD 37571 IANA-RSVD 37572 IANA-RSVD 37573 IANA-RSVD 37574 IANA-RSVD 37575 IANA-RSVD 37576 IANA-RSVD 37577 IANA-RSVD 37578 IANA-RSVD 37579 IANA-RSVD 37580 IANA-RSVD 37581 IANA-RSVD 37582 IANA-RSVD 37583 IANA-RSVD 37584 IANA-RSVD 37585 IANA-RSVD 37586 IANA-RSVD 37587 IANA-RSVD 37588 IANA-RSVD 37589 IANA-RSVD 37590 IANA-RSVD 37591 IANA-RSVD 37592 IANA-RSVD 37593 IANA-RSVD 37594 IANA-RSVD 37595 IANA-RSVD 37596 IANA-RSVD 37597 IANA-RSVD 37598 IANA-RSVD 37599 IANA-RSVD 37600 IANA-RSVD 37601 IANA-RSVD 37602 IANA-RSVD 37603 IANA-RSVD 37604 IANA-RSVD 37605 IANA-RSVD 37606 IANA-RSVD 37607 IANA-RSVD 37608 IANA-RSVD 37609 IANA-RSVD 37610 IANA-RSVD 37611 IANA-RSVD 37612 IANA-RSVD 37613 IANA-RSVD 37614 IANA-RSVD 37615 IANA-RSVD 37616 IANA-RSVD 37617 IANA-RSVD 37618 IANA-RSVD 37619 IANA-RSVD 37620 IANA-RSVD 37621 IANA-RSVD 37622 IANA-RSVD 37623 IANA-RSVD 37624 IANA-RSVD 37625 IANA-RSVD 37626 IANA-RSVD 37627 IANA-RSVD 37628 IANA-RSVD 37629 IANA-RSVD 37630 IANA-RSVD 37631 IANA-RSVD 37632 IANA-RSVD 37633 IANA-RSVD 37634 IANA-RSVD 37635 IANA-RSVD 37636 IANA-RSVD 37637 IANA-RSVD 37638 IANA-RSVD 37639 IANA-RSVD 37640 IANA-RSVD 37641 IANA-RSVD 37642 IANA-RSVD 37643 IANA-RSVD 37644 IANA-RSVD 37645 IANA-RSVD 37646 IANA-RSVD 37647 IANA-RSVD 37648 IANA-RSVD 37649 IANA-RSVD 37650 IANA-RSVD 37651 IANA-RSVD 37652 IANA-RSVD 37653 IANA-RSVD 37654 IANA-RSVD 37655 IANA-RSVD 37656 IANA-RSVD 37657 IANA-RSVD 37658 IANA-RSVD 37659 IANA-RSVD 37660 IANA-RSVD 37661 IANA-RSVD 37662 IANA-RSVD 37663 IANA-RSVD 37664 IANA-RSVD 37665 IANA-RSVD 37666 IANA-RSVD 37667 IANA-RSVD 37668 IANA-RSVD 37669 IANA-RSVD 37670 IANA-RSVD 37671 IANA-RSVD 37672 IANA-RSVD 37673 IANA-RSVD 37674 IANA-RSVD 37675 IANA-RSVD 37676 IANA-RSVD 37677 IANA-RSVD 37678 IANA-RSVD 37679 IANA-RSVD 37680 IANA-RSVD 37681 IANA-RSVD 37682 IANA-RSVD 37683 IANA-RSVD 37684 IANA-RSVD 37685 IANA-RSVD 37686 IANA-RSVD 37687 IANA-RSVD 37688 IANA-RSVD 37689 IANA-RSVD 37690 IANA-RSVD 37691 IANA-RSVD 37692 IANA-RSVD 37693 IANA-RSVD 37694 IANA-RSVD 37695 IANA-RSVD 37696 IANA-RSVD 37697 IANA-RSVD 37698 IANA-RSVD 37699 IANA-RSVD 37700 IANA-RSVD 37701 IANA-RSVD 37702 IANA-RSVD 37703 IANA-RSVD 37704 IANA-RSVD 37705 IANA-RSVD 37706 IANA-RSVD 37707 IANA-RSVD 37708 IANA-RSVD 37709 IANA-RSVD 37710 IANA-RSVD 37711 IANA-RSVD 37712 IANA-RSVD 37713 IANA-RSVD 37714 IANA-RSVD 37715 IANA-RSVD 37716 IANA-RSVD 37717 IANA-RSVD 37718 IANA-RSVD 37719 IANA-RSVD 37720 IANA-RSVD 37721 IANA-RSVD 37722 IANA-RSVD 37723 IANA-RSVD 37724 IANA-RSVD 37725 IANA-RSVD 37726 IANA-RSVD 37727 IANA-RSVD 37728 IANA-RSVD 37729 IANA-RSVD 37730 IANA-RSVD 37731 IANA-RSVD 37732 IANA-RSVD 37733 IANA-RSVD 37734 IANA-RSVD 37735 IANA-RSVD 37736 IANA-RSVD 37737 IANA-RSVD 37738 IANA-RSVD 37739 IANA-RSVD 37740 IANA-RSVD 37741 IANA-RSVD 37742 IANA-RSVD 37743 IANA-RSVD 37744 IANA-RSVD 37745 IANA-RSVD 37746 IANA-RSVD 37747 IANA-RSVD 37748 IANA-RSVD 37749 IANA-RSVD 37750 IANA-RSVD 37751 IANA-RSVD 37752 IANA-RSVD 37753 IANA-RSVD 37754 IANA-RSVD 37755 IANA-RSVD 37756 IANA-RSVD 37757 IANA-RSVD 37758 IANA-RSVD 37759 IANA-RSVD 37760 IANA-RSVD 37761 IANA-RSVD 37762 IANA-RSVD 37763 IANA-RSVD 37764 IANA-RSVD 37765 IANA-RSVD 37766 IANA-RSVD 37767 IANA-RSVD 37768 IANA-RSVD 37769 IANA-RSVD 37770 IANA-RSVD 37771 IANA-RSVD 37772 IANA-RSVD 37773 IANA-RSVD 37774 IANA-RSVD 37775 IANA-RSVD 37776 IANA-RSVD 37777 IANA-RSVD 37778 IANA-RSVD 37779 IANA-RSVD 37780 IANA-RSVD 37781 IANA-RSVD 37782 IANA-RSVD 37783 IANA-RSVD 37784 IANA-RSVD 37785 IANA-RSVD 37786 IANA-RSVD 37787 IANA-RSVD 37788 IANA-RSVD 37789 IANA-RSVD 37790 IANA-RSVD 37791 IANA-RSVD 37792 IANA-RSVD 37793 IANA-RSVD 37794 IANA-RSVD 37795 IANA-RSVD 37796 IANA-RSVD 37797 IANA-RSVD 37798 IANA-RSVD 37799 IANA-RSVD 37800 IANA-RSVD 37801 IANA-RSVD 37802 IANA-RSVD 37803 IANA-RSVD 37804 IANA-RSVD 37805 IANA-RSVD 37806 IANA-RSVD 37807 IANA-RSVD 37808 IANA-RSVD 37809 IANA-RSVD 37810 IANA-RSVD 37811 IANA-RSVD 37812 IANA-RSVD 37813 IANA-RSVD 37814 IANA-RSVD 37815 IANA-RSVD 37816 IANA-RSVD 37817 IANA-RSVD 37818 IANA-RSVD 37819 IANA-RSVD 37820 IANA-RSVD 37821 IANA-RSVD 37822 IANA-RSVD 37823 IANA-RSVD 37824 IANA-RSVD 37825 IANA-RSVD 37826 IANA-RSVD 37827 IANA-RSVD 37828 IANA-RSVD 37829 IANA-RSVD 37830 IANA-RSVD 37831 IANA-RSVD 37832 IANA-RSVD 37833 IANA-RSVD 37834 IANA-RSVD 37835 IANA-RSVD 37836 IANA-RSVD 37837 IANA-RSVD 37838 IANA-RSVD 37839 IANA-RSVD 37840 IANA-RSVD 37841 IANA-RSVD 37842 IANA-RSVD 37843 IANA-RSVD 37844 IANA-RSVD 37845 IANA-RSVD 37846 IANA-RSVD 37847 IANA-RSVD 37848 IANA-RSVD 37849 IANA-RSVD 37850 IANA-RSVD 37851 IANA-RSVD 37852 IANA-RSVD 37853 IANA-RSVD 37854 IANA-RSVD 37855 IANA-RSVD 37856 IANA-RSVD 37857 IANA-RSVD 37858 IANA-RSVD 37859 IANA-RSVD 37860 IANA-RSVD 37861 IANA-RSVD 37862 IANA-RSVD 37863 IANA-RSVD 37864 IANA-RSVD 37865 IANA-RSVD 37866 IANA-RSVD 37867 IANA-RSVD 37868 IANA-RSVD 37869 IANA-RSVD 37870 IANA-RSVD 37871 IANA-RSVD 37872 IANA-RSVD 37873 IANA-RSVD 37874 IANA-RSVD 37875 IANA-RSVD 37876 IANA-RSVD 37877 IANA-RSVD 37878 IANA-RSVD 37879 IANA-RSVD 37880 IANA-RSVD 37881 IANA-RSVD 37882 IANA-RSVD 37883 IANA-RSVD 37884 IANA-RSVD 37885 IANA-RSVD 37886 IANA-RSVD 37887 IANA-RSVD 37888 IANA-RSVD 37889 IANA-RSVD 37890 IANA-RSVD 37891 IANA-RSVD 37892 IANA-RSVD 37893 IANA-RSVD 37894 IANA-RSVD 37895 IANA-RSVD 37896 IANA-RSVD 37897 IANA-RSVD 37898 IANA-RSVD 37899 IANA-RSVD 37900 IANA-RSVD 37901 IANA-RSVD 37902 IANA-RSVD 37903 IANA-RSVD 37904 IANA-RSVD 37905 IANA-RSVD 37906 IANA-RSVD 37907 IANA-RSVD 37908 IANA-RSVD 37909 IANA-RSVD 37910 IANA-RSVD 37911 IANA-RSVD 37912 IANA-RSVD 37913 IANA-RSVD 37914 IANA-RSVD 37915 IANA-RSVD 37916 IANA-RSVD 37917 IANA-RSVD 37918 IANA-RSVD 37919 IANA-RSVD 37920 IANA-RSVD 37921 IANA-RSVD 37922 IANA-RSVD 37923 IANA-RSVD 37924 IANA-RSVD 37925 IANA-RSVD 37926 IANA-RSVD 37927 IANA-RSVD 37928 IANA-RSVD 37929 IANA-RSVD 37930 IANA-RSVD 37931 IANA-RSVD 37932 IANA-RSVD 37933 IANA-RSVD 37934 IANA-RSVD 37935 IANA-RSVD 37936 IANA-RSVD 37937 IANA-RSVD 37938 IANA-RSVD 37939 IANA-RSVD 37940 IANA-RSVD 37941 IANA-RSVD 37942 IANA-RSVD 37943 IANA-RSVD 37944 IANA-RSVD 37945 IANA-RSVD 37946 IANA-RSVD 37947 IANA-RSVD 37948 IANA-RSVD 37949 IANA-RSVD 37950 IANA-RSVD 37951 IANA-RSVD 37952 IANA-RSVD 37953 IANA-RSVD 37954 IANA-RSVD 37955 IANA-RSVD 37956 IANA-RSVD 37957 IANA-RSVD 37958 IANA-RSVD 37959 IANA-RSVD 37960 IANA-RSVD 37961 IANA-RSVD 37962 IANA-RSVD 37963 IANA-RSVD 37964 IANA-RSVD 37965 IANA-RSVD 37966 IANA-RSVD 37967 IANA-RSVD 37968 IANA-RSVD 37969 IANA-RSVD 37970 IANA-RSVD 37971 IANA-RSVD 37972 IANA-RSVD 37973 IANA-RSVD 37974 IANA-RSVD 37975 IANA-RSVD 37976 IANA-RSVD 37977 IANA-RSVD 37978 IANA-RSVD 37979 IANA-RSVD 37980 IANA-RSVD 37981 IANA-RSVD 37982 IANA-RSVD 37983 IANA-RSVD 37984 IANA-RSVD 37985 IANA-RSVD 37986 IANA-RSVD 37987 IANA-RSVD 37988 IANA-RSVD 37989 IANA-RSVD 37990 IANA-RSVD 37991 IANA-RSVD 37992 IANA-RSVD 37993 IANA-RSVD 37994 IANA-RSVD 37995 IANA-RSVD 37996 IANA-RSVD 37997 IANA-RSVD 37998 IANA-RSVD 37999 IANA-RSVD 38000 IANA-RSVD 38001 IANA-RSVD 38002 IANA-RSVD 38003 IANA-RSVD 38004 IANA-RSVD 38005 IANA-RSVD 38006 IANA-RSVD 38007 IANA-RSVD 38008 IANA-RSVD 38009 IANA-RSVD 38010 IANA-RSVD 38011 IANA-RSVD 38012 IANA-RSVD 38013 IANA-RSVD 38014 IANA-RSVD 38015 IANA-RSVD 38016 IANA-RSVD 38017 IANA-RSVD 38018 IANA-RSVD 38019 IANA-RSVD 38020 IANA-RSVD 38021 IANA-RSVD 38022 IANA-RSVD 38023 IANA-RSVD 38024 IANA-RSVD 38025 IANA-RSVD 38026 IANA-RSVD 38027 IANA-RSVD 38028 IANA-RSVD 38029 IANA-RSVD 38030 IANA-RSVD 38031 IANA-RSVD 38032 IANA-RSVD 38033 IANA-RSVD 38034 IANA-RSVD 38035 IANA-RSVD 38036 IANA-RSVD 38037 IANA-RSVD 38038 IANA-RSVD 38039 IANA-RSVD 38040 IANA-RSVD 38041 IANA-RSVD 38042 IANA-RSVD 38043 IANA-RSVD 38044 IANA-RSVD 38045 IANA-RSVD 38046 IANA-RSVD 38047 IANA-RSVD 38048 IANA-RSVD 38049 IANA-RSVD 38050 IANA-RSVD 38051 IANA-RSVD 38052 IANA-RSVD 38053 IANA-RSVD 38054 IANA-RSVD 38055 IANA-RSVD 38056 IANA-RSVD 38057 IANA-RSVD 38058 IANA-RSVD 38059 IANA-RSVD 38060 IANA-RSVD 38061 IANA-RSVD 38062 IANA-RSVD 38063 IANA-RSVD 38064 IANA-RSVD 38065 IANA-RSVD 38066 IANA-RSVD 38067 IANA-RSVD 38068 IANA-RSVD 38069 IANA-RSVD 38070 IANA-RSVD 38071 IANA-RSVD 38072 IANA-RSVD 38073 IANA-RSVD 38074 IANA-RSVD 38075 IANA-RSVD 38076 IANA-RSVD 38077 IANA-RSVD 38078 IANA-RSVD 38079 IANA-RSVD 38080 IANA-RSVD 38081 IANA-RSVD 38082 IANA-RSVD 38083 IANA-RSVD 38084 IANA-RSVD 38085 IANA-RSVD 38086 IANA-RSVD 38087 IANA-RSVD 38088 IANA-RSVD 38089 IANA-RSVD 38090 IANA-RSVD 38091 IANA-RSVD 38092 IANA-RSVD 38093 IANA-RSVD 38094 IANA-RSVD 38095 IANA-RSVD 38096 IANA-RSVD 38097 IANA-RSVD 38098 IANA-RSVD 38099 IANA-RSVD 38100 IANA-RSVD 38101 IANA-RSVD 38102 IANA-RSVD 38103 IANA-RSVD 38104 IANA-RSVD 38105 IANA-RSVD 38106 IANA-RSVD 38107 IANA-RSVD 38108 IANA-RSVD 38109 IANA-RSVD 38110 IANA-RSVD 38111 IANA-RSVD 38112 IANA-RSVD 38113 IANA-RSVD 38114 IANA-RSVD 38115 IANA-RSVD 38116 IANA-RSVD 38117 IANA-RSVD 38118 IANA-RSVD 38119 IANA-RSVD 38120 IANA-RSVD 38121 IANA-RSVD 38122 IANA-RSVD 38123 IANA-RSVD 38124 IANA-RSVD 38125 IANA-RSVD 38126 IANA-RSVD 38127 IANA-RSVD 38128 IANA-RSVD 38129 IANA-RSVD 38130 IANA-RSVD 38131 IANA-RSVD 38132 IANA-RSVD 38133 IANA-RSVD 38134 IANA-RSVD 38135 IANA-RSVD 38136 IANA-RSVD 38137 IANA-RSVD 38138 IANA-RSVD 38139 IANA-RSVD 38140 IANA-RSVD 38141 IANA-RSVD 38142 IANA-RSVD 38143 IANA-RSVD 38144 IANA-RSVD 38145 IANA-RSVD 38146 IANA-RSVD 38147 IANA-RSVD 38148 IANA-RSVD 38149 IANA-RSVD 38150 IANA-RSVD 38151 IANA-RSVD 38152 IANA-RSVD 38153 IANA-RSVD 38154 IANA-RSVD 38155 IANA-RSVD 38156 IANA-RSVD 38157 IANA-RSVD 38158 IANA-RSVD 38159 IANA-RSVD 38160 IANA-RSVD 38161 IANA-RSVD 38162 IANA-RSVD 38163 IANA-RSVD 38164 IANA-RSVD 38165 IANA-RSVD 38166 IANA-RSVD 38167 IANA-RSVD 38168 IANA-RSVD 38169 IANA-RSVD 38170 IANA-RSVD 38171 IANA-RSVD 38172 IANA-RSVD 38173 IANA-RSVD 38174 IANA-RSVD 38175 IANA-RSVD 38176 IANA-RSVD 38177 IANA-RSVD 38178 IANA-RSVD 38179 IANA-RSVD 38180 IANA-RSVD 38181 IANA-RSVD 38182 IANA-RSVD 38183 IANA-RSVD 38184 IANA-RSVD 38185 IANA-RSVD 38186 IANA-RSVD 38187 IANA-RSVD 38188 IANA-RSVD 38189 IANA-RSVD 38190 IANA-RSVD 38191 IANA-RSVD 38192 IANA-RSVD 38193 IANA-RSVD 38194 IANA-RSVD 38195 IANA-RSVD 38196 IANA-RSVD 38197 IANA-RSVD 38198 IANA-RSVD 38199 IANA-RSVD 38200 IANA-RSVD 38201 IANA-RSVD 38202 IANA-RSVD 38203 IANA-RSVD 38204 IANA-RSVD 38205 IANA-RSVD 38206 IANA-RSVD 38207 IANA-RSVD 38208 IANA-RSVD 38209 IANA-RSVD 38210 IANA-RSVD 38211 IANA-RSVD 38212 IANA-RSVD 38213 IANA-RSVD 38214 IANA-RSVD 38215 IANA-RSVD 38216 IANA-RSVD 38217 IANA-RSVD 38218 IANA-RSVD 38219 IANA-RSVD 38220 IANA-RSVD 38221 IANA-RSVD 38222 IANA-RSVD 38223 IANA-RSVD 38224 IANA-RSVD 38225 IANA-RSVD 38226 IANA-RSVD 38227 IANA-RSVD 38228 IANA-RSVD 38229 IANA-RSVD 38230 IANA-RSVD 38231 IANA-RSVD 38232 IANA-RSVD 38233 IANA-RSVD 38234 IANA-RSVD 38235 IANA-RSVD 38236 IANA-RSVD 38237 IANA-RSVD 38238 IANA-RSVD 38239 IANA-RSVD 38240 IANA-RSVD 38241 IANA-RSVD 38242 IANA-RSVD 38243 IANA-RSVD 38244 IANA-RSVD 38245 IANA-RSVD 38246 IANA-RSVD 38247 IANA-RSVD 38248 IANA-RSVD 38249 IANA-RSVD 38250 IANA-RSVD 38251 IANA-RSVD 38252 IANA-RSVD 38253 IANA-RSVD 38254 IANA-RSVD 38255 IANA-RSVD 38256 IANA-RSVD 38257 IANA-RSVD 38258 IANA-RSVD 38259 IANA-RSVD 38260 IANA-RSVD 38261 IANA-RSVD 38262 IANA-RSVD 38263 IANA-RSVD 38264 IANA-RSVD 38265 IANA-RSVD 38266 IANA-RSVD 38267 IANA-RSVD 38268 IANA-RSVD 38269 IANA-RSVD 38270 IANA-RSVD 38271 IANA-RSVD 38272 IANA-RSVD 38273 IANA-RSVD 38274 IANA-RSVD 38275 IANA-RSVD 38276 IANA-RSVD 38277 IANA-RSVD 38278 IANA-RSVD 38279 IANA-RSVD 38280 IANA-RSVD 38281 IANA-RSVD 38282 IANA-RSVD 38283 IANA-RSVD 38284 IANA-RSVD 38285 IANA-RSVD 38286 IANA-RSVD 38287 IANA-RSVD 38288 IANA-RSVD 38289 IANA-RSVD 38290 IANA-RSVD 38291 IANA-RSVD 38292 IANA-RSVD 38293 IANA-RSVD 38294 IANA-RSVD 38295 IANA-RSVD 38296 IANA-RSVD 38297 IANA-RSVD 38298 IANA-RSVD 38299 IANA-RSVD 38300 IANA-RSVD 38301 IANA-RSVD 38302 IANA-RSVD 38303 IANA-RSVD 38304 IANA-RSVD 38305 IANA-RSVD 38306 IANA-RSVD 38307 IANA-RSVD 38308 IANA-RSVD 38309 IANA-RSVD 38310 IANA-RSVD 38311 IANA-RSVD 38312 IANA-RSVD 38313 IANA-RSVD 38314 IANA-RSVD 38315 IANA-RSVD 38316 IANA-RSVD 38317 IANA-RSVD 38318 IANA-RSVD 38319 IANA-RSVD 38320 IANA-RSVD 38321 IANA-RSVD 38322 IANA-RSVD 38323 IANA-RSVD 38324 IANA-RSVD 38325 IANA-RSVD 38326 IANA-RSVD 38327 IANA-RSVD 38328 IANA-RSVD 38329 IANA-RSVD 38330 IANA-RSVD 38331 IANA-RSVD 38332 IANA-RSVD 38333 IANA-RSVD 38334 IANA-RSVD 38335 IANA-RSVD 38336 IANA-RSVD 38337 IANA-RSVD 38338 IANA-RSVD 38339 IANA-RSVD 38340 IANA-RSVD 38341 IANA-RSVD 38342 IANA-RSVD 38343 IANA-RSVD 38344 IANA-RSVD 38345 IANA-RSVD 38346 IANA-RSVD 38347 IANA-RSVD 38348 IANA-RSVD 38349 IANA-RSVD 38350 IANA-RSVD 38351 IANA-RSVD 38352 IANA-RSVD 38353 IANA-RSVD 38354 IANA-RSVD 38355 IANA-RSVD 38356 IANA-RSVD 38357 IANA-RSVD 38358 IANA-RSVD 38359 IANA-RSVD 38360 IANA-RSVD 38361 IANA-RSVD 38362 IANA-RSVD 38363 IANA-RSVD 38364 IANA-RSVD 38365 IANA-RSVD 38366 IANA-RSVD 38367 IANA-RSVD 38368 IANA-RSVD 38369 IANA-RSVD 38370 IANA-RSVD 38371 IANA-RSVD 38372 IANA-RSVD 38373 IANA-RSVD 38374 IANA-RSVD 38375 IANA-RSVD 38376 IANA-RSVD 38377 IANA-RSVD 38378 IANA-RSVD 38379 IANA-RSVD 38380 IANA-RSVD 38381 IANA-RSVD 38382 IANA-RSVD 38383 IANA-RSVD 38384 IANA-RSVD 38385 IANA-RSVD 38386 IANA-RSVD 38387 IANA-RSVD 38388 IANA-RSVD 38389 IANA-RSVD 38390 IANA-RSVD 38391 IANA-RSVD 38392 IANA-RSVD 38393 IANA-RSVD 38394 IANA-RSVD 38395 IANA-RSVD 38396 IANA-RSVD 38397 IANA-RSVD 38398 IANA-RSVD 38399 IANA-RSVD 38400 IANA-RSVD 38401 IANA-RSVD 38402 IANA-RSVD 38403 IANA-RSVD 38404 IANA-RSVD 38405 IANA-RSVD 38406 IANA-RSVD 38407 IANA-RSVD 38408 IANA-RSVD 38409 IANA-RSVD 38410 IANA-RSVD 38411 IANA-RSVD 38412 IANA-RSVD 38413 IANA-RSVD 38414 IANA-RSVD 38415 IANA-RSVD 38416 IANA-RSVD 38417 IANA-RSVD 38418 IANA-RSVD 38419 IANA-RSVD 38420 IANA-RSVD 38421 IANA-RSVD 38422 IANA-RSVD 38423 IANA-RSVD 38424 IANA-RSVD 38425 IANA-RSVD 38426 IANA-RSVD 38427 IANA-RSVD 38428 IANA-RSVD 38429 IANA-RSVD 38430 IANA-RSVD 38431 IANA-RSVD 38432 IANA-RSVD 38433 IANA-RSVD 38434 IANA-RSVD 38435 IANA-RSVD 38436 IANA-RSVD 38437 IANA-RSVD 38438 IANA-RSVD 38439 IANA-RSVD 38440 IANA-RSVD 38441 IANA-RSVD 38442 IANA-RSVD 38443 IANA-RSVD 38444 IANA-RSVD 38445 IANA-RSVD 38446 IANA-RSVD 38447 IANA-RSVD 38448 IANA-RSVD 38449 IANA-RSVD 38450 IANA-RSVD 38451 IANA-RSVD 38452 IANA-RSVD 38453 IANA-RSVD 38454 IANA-RSVD 38455 IANA-RSVD 38456 IANA-RSVD 38457 IANA-RSVD 38458 IANA-RSVD 38459 IANA-RSVD 38460 IANA-RSVD 38461 IANA-RSVD 38462 IANA-RSVD 38463 IANA-RSVD 38464 IANA-RSVD 38465 IANA-RSVD 38466 IANA-RSVD 38467 IANA-RSVD 38468 IANA-RSVD 38469 IANA-RSVD 38470 IANA-RSVD 38471 IANA-RSVD 38472 IANA-RSVD 38473 IANA-RSVD 38474 IANA-RSVD 38475 IANA-RSVD 38476 IANA-RSVD 38477 IANA-RSVD 38478 IANA-RSVD 38479 IANA-RSVD 38480 IANA-RSVD 38481 IANA-RSVD 38482 IANA-RSVD 38483 IANA-RSVD 38484 IANA-RSVD 38485 IANA-RSVD 38486 IANA-RSVD 38487 IANA-RSVD 38488 IANA-RSVD 38489 IANA-RSVD 38490 IANA-RSVD 38491 IANA-RSVD 38492 IANA-RSVD 38493 IANA-RSVD 38494 IANA-RSVD 38495 IANA-RSVD 38496 IANA-RSVD 38497 IANA-RSVD 38498 IANA-RSVD 38499 IANA-RSVD 38500 IANA-RSVD 38501 IANA-RSVD 38502 IANA-RSVD 38503 IANA-RSVD 38504 IANA-RSVD 38505 IANA-RSVD 38506 IANA-RSVD 38507 IANA-RSVD 38508 IANA-RSVD 38509 IANA-RSVD 38510 IANA-RSVD 38511 IANA-RSVD 38512 IANA-RSVD 38513 IANA-RSVD 38514 IANA-RSVD 38515 IANA-RSVD 38516 IANA-RSVD 38517 IANA-RSVD 38518 IANA-RSVD 38519 IANA-RSVD 38520 IANA-RSVD 38521 IANA-RSVD 38522 IANA-RSVD 38523 IANA-RSVD 38524 IANA-RSVD 38525 IANA-RSVD 38526 IANA-RSVD 38527 IANA-RSVD 38528 IANA-RSVD 38529 IANA-RSVD 38530 IANA-RSVD 38531 IANA-RSVD 38532 IANA-RSVD 38533 IANA-RSVD 38534 IANA-RSVD 38535 IANA-RSVD 38536 IANA-RSVD 38537 IANA-RSVD 38538 IANA-RSVD 38539 IANA-RSVD 38540 IANA-RSVD 38541 IANA-RSVD 38542 IANA-RSVD 38543 IANA-RSVD 38544 IANA-RSVD 38545 IANA-RSVD 38546 IANA-RSVD 38547 IANA-RSVD 38548 IANA-RSVD 38549 IANA-RSVD 38550 IANA-RSVD 38551 IANA-RSVD 38552 IANA-RSVD 38553 IANA-RSVD 38554 IANA-RSVD 38555 IANA-RSVD 38556 IANA-RSVD 38557 IANA-RSVD 38558 IANA-RSVD 38559 IANA-RSVD 38560 IANA-RSVD 38561 IANA-RSVD 38562 IANA-RSVD 38563 IANA-RSVD 38564 IANA-RSVD 38565 IANA-RSVD 38566 IANA-RSVD 38567 IANA-RSVD 38568 IANA-RSVD 38569 IANA-RSVD 38570 IANA-RSVD 38571 IANA-RSVD 38572 IANA-RSVD 38573 IANA-RSVD 38574 IANA-RSVD 38575 IANA-RSVD 38576 IANA-RSVD 38577 IANA-RSVD 38578 IANA-RSVD 38579 IANA-RSVD 38580 IANA-RSVD 38581 IANA-RSVD 38582 IANA-RSVD 38583 IANA-RSVD 38584 IANA-RSVD 38585 IANA-RSVD 38586 IANA-RSVD 38587 IANA-RSVD 38588 IANA-RSVD 38589 IANA-RSVD 38590 IANA-RSVD 38591 IANA-RSVD 38592 IANA-RSVD 38593 IANA-RSVD 38594 IANA-RSVD 38595 IANA-RSVD 38596 IANA-RSVD 38597 IANA-RSVD 38598 IANA-RSVD 38599 IANA-RSVD 38600 IANA-RSVD 38601 IANA-RSVD 38602 IANA-RSVD 38603 IANA-RSVD 38604 IANA-RSVD 38605 IANA-RSVD 38606 IANA-RSVD 38607 IANA-RSVD 38608 IANA-RSVD 38609 IANA-RSVD 38610 IANA-RSVD 38611 IANA-RSVD 38612 IANA-RSVD 38613 IANA-RSVD 38614 IANA-RSVD 38615 IANA-RSVD 38616 IANA-RSVD 38617 IANA-RSVD 38618 IANA-RSVD 38619 IANA-RSVD 38620 IANA-RSVD 38621 IANA-RSVD 38622 IANA-RSVD 38623 IANA-RSVD 38624 IANA-RSVD 38625 IANA-RSVD 38626 IANA-RSVD 38627 IANA-RSVD 38628 IANA-RSVD 38629 IANA-RSVD 38630 IANA-RSVD 38631 IANA-RSVD 38632 IANA-RSVD 38633 IANA-RSVD 38634 IANA-RSVD 38635 IANA-RSVD 38636 IANA-RSVD 38637 IANA-RSVD 38638 IANA-RSVD 38639 IANA-RSVD 38640 IANA-RSVD 38641 IANA-RSVD 38642 IANA-RSVD 38643 IANA-RSVD 38644 IANA-RSVD 38645 IANA-RSVD 38646 IANA-RSVD 38647 IANA-RSVD 38648 IANA-RSVD 38649 IANA-RSVD 38650 IANA-RSVD 38651 IANA-RSVD 38652 IANA-RSVD 38653 IANA-RSVD 38654 IANA-RSVD 38655 IANA-RSVD 38656 IANA-RSVD 38657 IANA-RSVD 38658 IANA-RSVD 38659 IANA-RSVD 38660 IANA-RSVD 38661 IANA-RSVD 38662 IANA-RSVD 38663 IANA-RSVD 38664 IANA-RSVD 38665 IANA-RSVD 38666 IANA-RSVD 38667 IANA-RSVD 38668 IANA-RSVD 38669 IANA-RSVD 38670 IANA-RSVD 38671 IANA-RSVD 38672 IANA-RSVD 38673 IANA-RSVD 38674 IANA-RSVD 38675 IANA-RSVD 38676 IANA-RSVD 38677 IANA-RSVD 38678 IANA-RSVD 38679 IANA-RSVD 38680 IANA-RSVD 38681 IANA-RSVD 38682 IANA-RSVD 38683 IANA-RSVD 38684 IANA-RSVD 38685 IANA-RSVD 38686 IANA-RSVD 38687 IANA-RSVD 38688 IANA-RSVD 38689 IANA-RSVD 38690 IANA-RSVD 38691 IANA-RSVD 38692 IANA-RSVD 38693 IANA-RSVD 38694 IANA-RSVD 38695 IANA-RSVD 38696 IANA-RSVD 38697 IANA-RSVD 38698 IANA-RSVD 38699 IANA-RSVD 38700 IANA-RSVD 38701 IANA-RSVD 38702 IANA-RSVD 38703 IANA-RSVD 38704 IANA-RSVD 38705 IANA-RSVD 38706 IANA-RSVD 38707 IANA-RSVD 38708 IANA-RSVD 38709 IANA-RSVD 38710 IANA-RSVD 38711 IANA-RSVD 38712 IANA-RSVD 38713 IANA-RSVD 38714 IANA-RSVD 38715 IANA-RSVD 38716 IANA-RSVD 38717 IANA-RSVD 38718 IANA-RSVD 38719 IANA-RSVD 38720 IANA-RSVD 38721 IANA-RSVD 38722 IANA-RSVD 38723 IANA-RSVD 38724 IANA-RSVD 38725 IANA-RSVD 38726 IANA-RSVD 38727 IANA-RSVD 38728 IANA-RSVD 38729 IANA-RSVD 38730 IANA-RSVD 38731 IANA-RSVD 38732 IANA-RSVD 38733 IANA-RSVD 38734 IANA-RSVD 38735 IANA-RSVD 38736 IANA-RSVD 38737 IANA-RSVD 38738 IANA-RSVD 38739 IANA-RSVD 38740 IANA-RSVD 38741 IANA-RSVD 38742 IANA-RSVD 38743 IANA-RSVD 38744 IANA-RSVD 38745 IANA-RSVD 38746 IANA-RSVD 38747 IANA-RSVD 38748 IANA-RSVD 38749 IANA-RSVD 38750 IANA-RSVD 38751 IANA-RSVD 38752 IANA-RSVD 38753 IANA-RSVD 38754 IANA-RSVD 38755 IANA-RSVD 38756 IANA-RSVD 38757 IANA-RSVD 38758 IANA-RSVD 38759 IANA-RSVD 38760 IANA-RSVD 38761 IANA-RSVD 38762 IANA-RSVD 38763 IANA-RSVD 38764 IANA-RSVD 38765 IANA-RSVD 38766 IANA-RSVD 38767 IANA-RSVD 38768 IANA-RSVD 38769 IANA-RSVD 38770 IANA-RSVD 38771 IANA-RSVD 38772 IANA-RSVD 38773 IANA-RSVD 38774 IANA-RSVD 38775 IANA-RSVD 38776 IANA-RSVD 38777 IANA-RSVD 38778 IANA-RSVD 38779 IANA-RSVD 38780 IANA-RSVD 38781 IANA-RSVD 38782 IANA-RSVD 38783 IANA-RSVD 38784 IANA-RSVD 38785 IANA-RSVD 38786 IANA-RSVD 38787 IANA-RSVD 38788 IANA-RSVD 38789 IANA-RSVD 38790 IANA-RSVD 38791 IANA-RSVD 38792 IANA-RSVD 38793 IANA-RSVD 38794 IANA-RSVD 38795 IANA-RSVD 38796 IANA-RSVD 38797 IANA-RSVD 38798 IANA-RSVD 38799 IANA-RSVD 38800 IANA-RSVD 38801 IANA-RSVD 38802 IANA-RSVD 38803 IANA-RSVD 38804 IANA-RSVD 38805 IANA-RSVD 38806 IANA-RSVD 38807 IANA-RSVD 38808 IANA-RSVD 38809 IANA-RSVD 38810 IANA-RSVD 38811 IANA-RSVD 38812 IANA-RSVD 38813 IANA-RSVD 38814 IANA-RSVD 38815 IANA-RSVD 38816 IANA-RSVD 38817 IANA-RSVD 38818 IANA-RSVD 38819 IANA-RSVD 38820 IANA-RSVD 38821 IANA-RSVD 38822 IANA-RSVD 38823 IANA-RSVD 38824 IANA-RSVD 38825 IANA-RSVD 38826 IANA-RSVD 38827 IANA-RSVD 38828 IANA-RSVD 38829 IANA-RSVD 38830 IANA-RSVD 38831 IANA-RSVD 38832 IANA-RSVD 38833 IANA-RSVD 38834 IANA-RSVD 38835 IANA-RSVD 38836 IANA-RSVD 38837 IANA-RSVD 38838 IANA-RSVD 38839 IANA-RSVD 38840 IANA-RSVD 38841 IANA-RSVD 38842 IANA-RSVD 38843 IANA-RSVD 38844 IANA-RSVD 38845 IANA-RSVD 38846 IANA-RSVD 38847 IANA-RSVD 38848 IANA-RSVD 38849 IANA-RSVD 38850 IANA-RSVD 38851 IANA-RSVD 38852 IANA-RSVD 38853 IANA-RSVD 38854 IANA-RSVD 38855 IANA-RSVD 38856 IANA-RSVD 38857 IANA-RSVD 38858 IANA-RSVD 38859 IANA-RSVD 38860 IANA-RSVD 38861 IANA-RSVD 38862 IANA-RSVD 38863 IANA-RSVD 38864 IANA-RSVD 38865 IANA-RSVD 38866 IANA-RSVD 38867 IANA-RSVD 38868 IANA-RSVD 38869 IANA-RSVD 38870 IANA-RSVD 38871 IANA-RSVD 38872 IANA-RSVD 38873 IANA-RSVD 38874 IANA-RSVD 38875 IANA-RSVD 38876 IANA-RSVD 38877 IANA-RSVD 38878 IANA-RSVD 38879 IANA-RSVD 38880 IANA-RSVD 38881 IANA-RSVD 38882 IANA-RSVD 38883 IANA-RSVD 38884 IANA-RSVD 38885 IANA-RSVD 38886 IANA-RSVD 38887 IANA-RSVD 38888 IANA-RSVD 38889 IANA-RSVD 38890 IANA-RSVD 38891 IANA-RSVD 38892 IANA-RSVD 38893 IANA-RSVD 38894 IANA-RSVD 38895 IANA-RSVD 38896 IANA-RSVD 38897 IANA-RSVD 38898 IANA-RSVD 38899 IANA-RSVD 38900 IANA-RSVD 38901 IANA-RSVD 38902 IANA-RSVD 38903 IANA-RSVD 38904 IANA-RSVD 38905 IANA-RSVD 38906 IANA-RSVD 38907 IANA-RSVD 38908 IANA-RSVD 38909 IANA-RSVD 38910 IANA-RSVD 38911 IANA-RSVD 38912 IANA-RSVD 38913 IANA-RSVD 38914 IANA-RSVD 38915 IANA-RSVD 38916 IANA-RSVD 38917 IANA-RSVD 38918 IANA-RSVD 38919 IANA-RSVD 38920 IANA-RSVD 38921 IANA-RSVD 38922 IANA-RSVD 38923 IANA-RSVD 38924 IANA-RSVD 38925 IANA-RSVD 38926 IANA-RSVD 38927 IANA-RSVD 38928 IANA-RSVD 38929 IANA-RSVD 38930 IANA-RSVD 38931 IANA-RSVD 38932 IANA-RSVD 38933 IANA-RSVD 38934 IANA-RSVD 38935 IANA-RSVD 38936 IANA-RSVD 38937 IANA-RSVD 38938 IANA-RSVD 38939 IANA-RSVD 38940 IANA-RSVD 38941 IANA-RSVD 38942 IANA-RSVD 38943 IANA-RSVD 38944 IANA-RSVD 38945 IANA-RSVD 38946 IANA-RSVD 38947 IANA-RSVD 38948 IANA-RSVD 38949 IANA-RSVD 38950 IANA-RSVD 38951 IANA-RSVD 38952 IANA-RSVD 38953 IANA-RSVD 38954 IANA-RSVD 38955 IANA-RSVD 38956 IANA-RSVD 38957 IANA-RSVD 38958 IANA-RSVD 38959 IANA-RSVD 38960 IANA-RSVD 38961 IANA-RSVD 38962 IANA-RSVD 38963 IANA-RSVD 38964 IANA-RSVD 38965 IANA-RSVD 38966 IANA-RSVD 38967 IANA-RSVD 38968 IANA-RSVD 38969 IANA-RSVD 38970 IANA-RSVD 38971 IANA-RSVD 38972 IANA-RSVD 38973 IANA-RSVD 38974 IANA-RSVD 38975 IANA-RSVD 38976 IANA-RSVD 38977 IANA-RSVD 38978 IANA-RSVD 38979 IANA-RSVD 38980 IANA-RSVD 38981 IANA-RSVD 38982 IANA-RSVD 38983 IANA-RSVD 38984 IANA-RSVD 38985 IANA-RSVD 38986 IANA-RSVD 38987 IANA-RSVD 38988 IANA-RSVD 38989 IANA-RSVD 38990 IANA-RSVD 38991 IANA-RSVD 38992 IANA-RSVD 38993 IANA-RSVD 38994 IANA-RSVD 38995 IANA-RSVD 38996 IANA-RSVD 38997 IANA-RSVD 38998 IANA-RSVD 38999 IANA-RSVD 39000 IANA-RSVD 39001 IANA-RSVD 39002 IANA-RSVD 39003 IANA-RSVD 39004 IANA-RSVD 39005 IANA-RSVD 39006 IANA-RSVD 39007 IANA-RSVD 39008 IANA-RSVD 39009 IANA-RSVD 39010 IANA-RSVD 39011 IANA-RSVD 39012 IANA-RSVD 39013 IANA-RSVD 39014 IANA-RSVD 39015 IANA-RSVD 39016 IANA-RSVD 39017 IANA-RSVD 39018 IANA-RSVD 39019 IANA-RSVD 39020 IANA-RSVD 39021 IANA-RSVD 39022 IANA-RSVD 39023 IANA-RSVD 39024 IANA-RSVD 39025 IANA-RSVD 39026 IANA-RSVD 39027 IANA-RSVD 39028 IANA-RSVD 39029 IANA-RSVD 39030 IANA-RSVD 39031 IANA-RSVD 39032 IANA-RSVD 39033 IANA-RSVD 39034 IANA-RSVD 39035 IANA-RSVD 39036 IANA-RSVD 39037 IANA-RSVD 39038 IANA-RSVD 39039 IANA-RSVD 39040 IANA-RSVD 39041 IANA-RSVD 39042 IANA-RSVD 39043 IANA-RSVD 39044 IANA-RSVD 39045 IANA-RSVD 39046 IANA-RSVD 39047 IANA-RSVD 39048 IANA-RSVD 39049 IANA-RSVD 39050 IANA-RSVD 39051 IANA-RSVD 39052 IANA-RSVD 39053 IANA-RSVD 39054 IANA-RSVD 39055 IANA-RSVD 39056 IANA-RSVD 39057 IANA-RSVD 39058 IANA-RSVD 39059 IANA-RSVD 39060 IANA-RSVD 39061 IANA-RSVD 39062 IANA-RSVD 39063 IANA-RSVD 39064 IANA-RSVD 39065 IANA-RSVD 39066 IANA-RSVD 39067 IANA-RSVD 39068 IANA-RSVD 39069 IANA-RSVD 39070 IANA-RSVD 39071 IANA-RSVD 39072 IANA-RSVD 39073 IANA-RSVD 39074 IANA-RSVD 39075 IANA-RSVD 39076 IANA-RSVD 39077 IANA-RSVD 39078 IANA-RSVD 39079 IANA-RSVD 39080 IANA-RSVD 39081 IANA-RSVD 39082 IANA-RSVD 39083 IANA-RSVD 39084 IANA-RSVD 39085 IANA-RSVD 39086 IANA-RSVD 39087 IANA-RSVD 39088 IANA-RSVD 39089 IANA-RSVD 39090 IANA-RSVD 39091 IANA-RSVD 39092 IANA-RSVD 39093 IANA-RSVD 39094 IANA-RSVD 39095 IANA-RSVD 39096 IANA-RSVD 39097 IANA-RSVD 39098 IANA-RSVD 39099 IANA-RSVD 39100 IANA-RSVD 39101 IANA-RSVD 39102 IANA-RSVD 39103 IANA-RSVD 39104 IANA-RSVD 39105 IANA-RSVD 39106 IANA-RSVD 39107 IANA-RSVD 39108 IANA-RSVD 39109 IANA-RSVD 39110 IANA-RSVD 39111 IANA-RSVD 39112 IANA-RSVD 39113 IANA-RSVD 39114 IANA-RSVD 39115 IANA-RSVD 39116 IANA-RSVD 39117 IANA-RSVD 39118 IANA-RSVD 39119 IANA-RSVD 39120 IANA-RSVD 39121 IANA-RSVD 39122 IANA-RSVD 39123 IANA-RSVD 39124 IANA-RSVD 39125 IANA-RSVD 39126 IANA-RSVD 39127 IANA-RSVD 39128 IANA-RSVD 39129 IANA-RSVD 39130 IANA-RSVD 39131 IANA-RSVD 39132 IANA-RSVD 39133 IANA-RSVD 39134 IANA-RSVD 39135 IANA-RSVD 39136 IANA-RSVD 39137 IANA-RSVD 39138 IANA-RSVD 39139 IANA-RSVD 39140 IANA-RSVD 39141 IANA-RSVD 39142 IANA-RSVD 39143 IANA-RSVD 39144 IANA-RSVD 39145 IANA-RSVD 39146 IANA-RSVD 39147 IANA-RSVD 39148 IANA-RSVD 39149 IANA-RSVD 39150 IANA-RSVD 39151 IANA-RSVD 39152 IANA-RSVD 39153 IANA-RSVD 39154 IANA-RSVD 39155 IANA-RSVD 39156 IANA-RSVD 39157 IANA-RSVD 39158 IANA-RSVD 39159 IANA-RSVD 39160 IANA-RSVD 39161 IANA-RSVD 39162 IANA-RSVD 39163 IANA-RSVD 39164 IANA-RSVD 39165 IANA-RSVD 39166 IANA-RSVD 39167 IANA-RSVD 39168 IANA-RSVD 39169 IANA-RSVD 39170 IANA-RSVD 39171 IANA-RSVD 39172 IANA-RSVD 39173 IANA-RSVD 39174 IANA-RSVD 39175 IANA-RSVD 39176 IANA-RSVD 39177 IANA-RSVD 39178 IANA-RSVD 39179 IANA-RSVD 39180 IANA-RSVD 39181 IANA-RSVD 39182 IANA-RSVD 39183 IANA-RSVD 39184 IANA-RSVD 39185 IANA-RSVD 39186 IANA-RSVD 39187 IANA-RSVD 39188 IANA-RSVD 39189 IANA-RSVD 39190 IANA-RSVD 39191 IANA-RSVD 39192 IANA-RSVD 39193 IANA-RSVD 39194 IANA-RSVD 39195 IANA-RSVD 39196 IANA-RSVD 39197 IANA-RSVD 39198 IANA-RSVD 39199 IANA-RSVD 39200 IANA-RSVD 39201 IANA-RSVD 39202 IANA-RSVD 39203 IANA-RSVD 39204 IANA-RSVD 39205 IANA-RSVD 39206 IANA-RSVD 39207 IANA-RSVD 39208 IANA-RSVD 39209 IANA-RSVD 39210 IANA-RSVD 39211 IANA-RSVD 39212 IANA-RSVD 39213 IANA-RSVD 39214 IANA-RSVD 39215 IANA-RSVD 39216 IANA-RSVD 39217 IANA-RSVD 39218 IANA-RSVD 39219 IANA-RSVD 39220 IANA-RSVD 39221 IANA-RSVD 39222 IANA-RSVD 39223 IANA-RSVD 39224 IANA-RSVD 39225 IANA-RSVD 39226 IANA-RSVD 39227 IANA-RSVD 39228 IANA-RSVD 39229 IANA-RSVD 39230 IANA-RSVD 39231 IANA-RSVD 39232 IANA-RSVD 39233 IANA-RSVD 39234 IANA-RSVD 39235 IANA-RSVD 39236 IANA-RSVD 39237 IANA-RSVD 39238 IANA-RSVD 39239 IANA-RSVD 39240 IANA-RSVD 39241 IANA-RSVD 39242 IANA-RSVD 39243 IANA-RSVD 39244 IANA-RSVD 39245 IANA-RSVD 39246 IANA-RSVD 39247 IANA-RSVD 39248 IANA-RSVD 39249 IANA-RSVD 39250 IANA-RSVD 39251 IANA-RSVD 39252 IANA-RSVD 39253 IANA-RSVD 39254 IANA-RSVD 39255 IANA-RSVD 39256 IANA-RSVD 39257 IANA-RSVD 39258 IANA-RSVD 39259 IANA-RSVD 39260 IANA-RSVD 39261 IANA-RSVD 39262 IANA-RSVD 39263 IANA-RSVD 39264 IANA-RSVD 39265 IANA-RSVD 39266 IANA-RSVD 39267 IANA-RSVD 39268 IANA-RSVD 39269 IANA-RSVD 39270 IANA-RSVD 39271 IANA-RSVD 39272 IANA-RSVD 39273 IANA-RSVD 39274 IANA-RSVD 39275 IANA-RSVD 39276 IANA-RSVD 39277 IANA-RSVD 39278 IANA-RSVD 39279 IANA-RSVD 39280 IANA-RSVD 39281 IANA-RSVD 39282 IANA-RSVD 39283 IANA-RSVD 39284 IANA-RSVD 39285 IANA-RSVD 39286 IANA-RSVD 39287 IANA-RSVD 39288 IANA-RSVD 39289 IANA-RSVD 39290 IANA-RSVD 39291 IANA-RSVD 39292 IANA-RSVD 39293 IANA-RSVD 39294 IANA-RSVD 39295 IANA-RSVD 39296 IANA-RSVD 39297 IANA-RSVD 39298 IANA-RSVD 39299 IANA-RSVD 39300 IANA-RSVD 39301 IANA-RSVD 39302 IANA-RSVD 39303 IANA-RSVD 39304 IANA-RSVD 39305 IANA-RSVD 39306 IANA-RSVD 39307 IANA-RSVD 39308 IANA-RSVD 39309 IANA-RSVD 39310 IANA-RSVD 39311 IANA-RSVD 39312 IANA-RSVD 39313 IANA-RSVD 39314 IANA-RSVD 39315 IANA-RSVD 39316 IANA-RSVD 39317 IANA-RSVD 39318 IANA-RSVD 39319 IANA-RSVD 39320 IANA-RSVD 39321 IANA-RSVD 39322 IANA-RSVD 39323 IANA-RSVD 39324 IANA-RSVD 39325 IANA-RSVD 39326 IANA-RSVD 39327 IANA-RSVD 39328 IANA-RSVD 39329 IANA-RSVD 39330 IANA-RSVD 39331 IANA-RSVD 39332 IANA-RSVD 39333 IANA-RSVD 39334 IANA-RSVD 39335 IANA-RSVD 39336 IANA-RSVD 39337 IANA-RSVD 39338 IANA-RSVD 39339 IANA-RSVD 39340 IANA-RSVD 39341 IANA-RSVD 39342 IANA-RSVD 39343 IANA-RSVD 39344 IANA-RSVD 39345 IANA-RSVD 39346 IANA-RSVD 39347 IANA-RSVD 39348 IANA-RSVD 39349 IANA-RSVD 39350 IANA-RSVD 39351 IANA-RSVD 39352 IANA-RSVD 39353 IANA-RSVD 39354 IANA-RSVD 39355 IANA-RSVD 39356 IANA-RSVD 39357 IANA-RSVD 39358 IANA-RSVD 39359 IANA-RSVD 39360 IANA-RSVD 39361 IANA-RSVD 39362 IANA-RSVD 39363 IANA-RSVD 39364 IANA-RSVD 39365 IANA-RSVD 39366 IANA-RSVD 39367 IANA-RSVD 39368 IANA-RSVD 39369 IANA-RSVD 39370 IANA-RSVD 39371 IANA-RSVD 39372 IANA-RSVD 39373 IANA-RSVD 39374 IANA-RSVD 39375 IANA-RSVD 39376 IANA-RSVD 39377 IANA-RSVD 39378 IANA-RSVD 39379 IANA-RSVD 39380 IANA-RSVD 39381 IANA-RSVD 39382 IANA-RSVD 39383 IANA-RSVD 39384 IANA-RSVD 39385 IANA-RSVD 39386 IANA-RSVD 39387 IANA-RSVD 39388 IANA-RSVD 39389 IANA-RSVD 39390 IANA-RSVD 39391 IANA-RSVD 39392 IANA-RSVD 39393 IANA-RSVD 39394 IANA-RSVD 39395 IANA-RSVD 39396 IANA-RSVD 39397 IANA-RSVD 39398 IANA-RSVD 39399 IANA-RSVD 39400 IANA-RSVD 39401 IANA-RSVD 39402 IANA-RSVD 39403 IANA-RSVD 39404 IANA-RSVD 39405 IANA-RSVD 39406 IANA-RSVD 39407 IANA-RSVD 39408 IANA-RSVD 39409 IANA-RSVD 39410 IANA-RSVD 39411 IANA-RSVD 39412 IANA-RSVD 39413 IANA-RSVD 39414 IANA-RSVD 39415 IANA-RSVD 39416 IANA-RSVD 39417 IANA-RSVD 39418 IANA-RSVD 39419 IANA-RSVD 39420 IANA-RSVD 39421 IANA-RSVD 39422 IANA-RSVD 39423 IANA-RSVD 39424 IANA-RSVD 39425 IANA-RSVD 39426 IANA-RSVD 39427 IANA-RSVD 39428 IANA-RSVD 39429 IANA-RSVD 39430 IANA-RSVD 39431 IANA-RSVD 39432 IANA-RSVD 39433 IANA-RSVD 39434 IANA-RSVD 39435 IANA-RSVD 39436 IANA-RSVD 39437 IANA-RSVD 39438 IANA-RSVD 39439 IANA-RSVD 39440 IANA-RSVD 39441 IANA-RSVD 39442 IANA-RSVD 39443 IANA-RSVD 39444 IANA-RSVD 39445 IANA-RSVD 39446 IANA-RSVD 39447 IANA-RSVD 39448 IANA-RSVD 39449 IANA-RSVD 39450 IANA-RSVD 39451 IANA-RSVD 39452 IANA-RSVD 39453 IANA-RSVD 39454 IANA-RSVD 39455 IANA-RSVD 39456 IANA-RSVD 39457 IANA-RSVD 39458 IANA-RSVD 39459 IANA-RSVD 39460 IANA-RSVD 39461 IANA-RSVD 39462 IANA-RSVD 39463 IANA-RSVD 39464 IANA-RSVD 39465 IANA-RSVD 39466 IANA-RSVD 39467 IANA-RSVD 39468 IANA-RSVD 39469 IANA-RSVD 39470 IANA-RSVD 39471 IANA-RSVD 39472 IANA-RSVD 39473 IANA-RSVD 39474 IANA-RSVD 39475 IANA-RSVD 39476 IANA-RSVD 39477 IANA-RSVD 39478 IANA-RSVD 39479 IANA-RSVD 39480 IANA-RSVD 39481 IANA-RSVD 39482 IANA-RSVD 39483 IANA-RSVD 39484 IANA-RSVD 39485 IANA-RSVD 39486 IANA-RSVD 39487 IANA-RSVD 39488 IANA-RSVD 39489 IANA-RSVD 39490 IANA-RSVD 39491 IANA-RSVD 39492 IANA-RSVD 39493 IANA-RSVD 39494 IANA-RSVD 39495 IANA-RSVD 39496 IANA-RSVD 39497 IANA-RSVD 39498 IANA-RSVD 39499 IANA-RSVD 39500 IANA-RSVD 39501 IANA-RSVD 39502 IANA-RSVD 39503 IANA-RSVD 39504 IANA-RSVD 39505 IANA-RSVD 39506 IANA-RSVD 39507 IANA-RSVD 39508 IANA-RSVD 39509 IANA-RSVD 39510 IANA-RSVD 39511 IANA-RSVD 39512 IANA-RSVD 39513 IANA-RSVD 39514 IANA-RSVD 39515 IANA-RSVD 39516 IANA-RSVD 39517 IANA-RSVD 39518 IANA-RSVD 39519 IANA-RSVD 39520 IANA-RSVD 39521 IANA-RSVD 39522 IANA-RSVD 39523 IANA-RSVD 39524 IANA-RSVD 39525 IANA-RSVD 39526 IANA-RSVD 39527 IANA-RSVD 39528 IANA-RSVD 39529 IANA-RSVD 39530 IANA-RSVD 39531 IANA-RSVD 39532 IANA-RSVD 39533 IANA-RSVD 39534 IANA-RSVD 39535 IANA-RSVD 39536 IANA-RSVD 39537 IANA-RSVD 39538 IANA-RSVD 39539 IANA-RSVD 39540 IANA-RSVD 39541 IANA-RSVD 39542 IANA-RSVD 39543 IANA-RSVD 39544 IANA-RSVD 39545 IANA-RSVD 39546 IANA-RSVD 39547 IANA-RSVD 39548 IANA-RSVD 39549 IANA-RSVD 39550 IANA-RSVD 39551 IANA-RSVD 39552 IANA-RSVD 39553 IANA-RSVD 39554 IANA-RSVD 39555 IANA-RSVD 39556 IANA-RSVD 39557 IANA-RSVD 39558 IANA-RSVD 39559 IANA-RSVD 39560 IANA-RSVD 39561 IANA-RSVD 39562 IANA-RSVD 39563 IANA-RSVD 39564 IANA-RSVD 39565 IANA-RSVD 39566 IANA-RSVD 39567 IANA-RSVD 39568 IANA-RSVD 39569 IANA-RSVD 39570 IANA-RSVD 39571 IANA-RSVD 39572 IANA-RSVD 39573 IANA-RSVD 39574 IANA-RSVD 39575 IANA-RSVD 39576 IANA-RSVD 39577 IANA-RSVD 39578 IANA-RSVD 39579 IANA-RSVD 39580 IANA-RSVD 39581 IANA-RSVD 39582 IANA-RSVD 39583 IANA-RSVD 39584 IANA-RSVD 39585 IANA-RSVD 39586 IANA-RSVD 39587 IANA-RSVD 39588 IANA-RSVD 39589 IANA-RSVD 39590 IANA-RSVD 39591 IANA-RSVD 39592 IANA-RSVD 39593 IANA-RSVD 39594 IANA-RSVD 39595 IANA-RSVD 39596 IANA-RSVD 39597 IANA-RSVD 39598 IANA-RSVD 39599 IANA-RSVD 39600 IANA-RSVD 39601 IANA-RSVD 39602 IANA-RSVD 39603 IANA-RSVD 39604 IANA-RSVD 39605 IANA-RSVD 39606 IANA-RSVD 39607 IANA-RSVD 39608 IANA-RSVD 39609 IANA-RSVD 39610 IANA-RSVD 39611 IANA-RSVD 39612 IANA-RSVD 39613 IANA-RSVD 39614 IANA-RSVD 39615 IANA-RSVD 39616 IANA-RSVD 39617 IANA-RSVD 39618 IANA-RSVD 39619 IANA-RSVD 39620 IANA-RSVD 39621 IANA-RSVD 39622 IANA-RSVD 39623 IANA-RSVD 39624 IANA-RSVD 39625 IANA-RSVD 39626 IANA-RSVD 39627 IANA-RSVD 39628 IANA-RSVD 39629 IANA-RSVD 39630 IANA-RSVD 39631 IANA-RSVD 39632 IANA-RSVD 39633 IANA-RSVD 39634 IANA-RSVD 39635 IANA-RSVD 39636 IANA-RSVD 39637 IANA-RSVD 39638 IANA-RSVD 39639 IANA-RSVD 39640 IANA-RSVD 39641 IANA-RSVD 39642 IANA-RSVD 39643 IANA-RSVD 39644 IANA-RSVD 39645 IANA-RSVD 39646 IANA-RSVD 39647 IANA-RSVD 39648 IANA-RSVD 39649 IANA-RSVD 39650 IANA-RSVD 39651 IANA-RSVD 39652 IANA-RSVD 39653 IANA-RSVD 39654 IANA-RSVD 39655 IANA-RSVD 39656 IANA-RSVD 39657 IANA-RSVD 39658 IANA-RSVD 39659 IANA-RSVD 39660 IANA-RSVD 39661 IANA-RSVD 39662 IANA-RSVD 39663 IANA-RSVD 39664 IANA-RSVD 39665 IANA-RSVD 39666 IANA-RSVD 39667 IANA-RSVD 39668 IANA-RSVD 39669 IANA-RSVD 39670 IANA-RSVD 39671 IANA-RSVD 39672 IANA-RSVD 39673 IANA-RSVD 39674 IANA-RSVD 39675 IANA-RSVD 39676 IANA-RSVD 39677 IANA-RSVD 39678 IANA-RSVD 39679 IANA-RSVD 39680 IANA-RSVD 39681 IANA-RSVD 39682 IANA-RSVD 39683 IANA-RSVD 39684 IANA-RSVD 39685 IANA-RSVD 39686 IANA-RSVD 39687 IANA-RSVD 39688 IANA-RSVD 39689 IANA-RSVD 39690 IANA-RSVD 39691 IANA-RSVD 39692 IANA-RSVD 39693 IANA-RSVD 39694 IANA-RSVD 39695 IANA-RSVD 39696 IANA-RSVD 39697 IANA-RSVD 39698 IANA-RSVD 39699 IANA-RSVD 39700 IANA-RSVD 39701 IANA-RSVD 39702 IANA-RSVD 39703 IANA-RSVD 39704 IANA-RSVD 39705 IANA-RSVD 39706 IANA-RSVD 39707 IANA-RSVD 39708 IANA-RSVD 39709 IANA-RSVD 39710 IANA-RSVD 39711 IANA-RSVD 39712 IANA-RSVD 39713 IANA-RSVD 39714 IANA-RSVD 39715 IANA-RSVD 39716 IANA-RSVD 39717 IANA-RSVD 39718 IANA-RSVD 39719 IANA-RSVD 39720 IANA-RSVD 39721 IANA-RSVD 39722 IANA-RSVD 39723 IANA-RSVD 39724 IANA-RSVD 39725 IANA-RSVD 39726 IANA-RSVD 39727 IANA-RSVD 39728 IANA-RSVD 39729 IANA-RSVD 39730 IANA-RSVD 39731 IANA-RSVD 39732 IANA-RSVD 39733 IANA-RSVD 39734 IANA-RSVD 39735 IANA-RSVD 39736 IANA-RSVD 39737 IANA-RSVD 39738 IANA-RSVD 39739 IANA-RSVD 39740 IANA-RSVD 39741 IANA-RSVD 39742 IANA-RSVD 39743 IANA-RSVD 39744 IANA-RSVD 39745 IANA-RSVD 39746 IANA-RSVD 39747 IANA-RSVD 39748 IANA-RSVD 39749 IANA-RSVD 39750 IANA-RSVD 39751 IANA-RSVD 39752 IANA-RSVD 39753 IANA-RSVD 39754 IANA-RSVD 39755 IANA-RSVD 39756 IANA-RSVD 39757 IANA-RSVD 39758 IANA-RSVD 39759 IANA-RSVD 39760 IANA-RSVD 39761 IANA-RSVD 39762 IANA-RSVD 39763 IANA-RSVD 39764 IANA-RSVD 39765 IANA-RSVD 39766 IANA-RSVD 39767 IANA-RSVD 39768 IANA-RSVD 39769 IANA-RSVD 39770 IANA-RSVD 39771 IANA-RSVD 39772 IANA-RSVD 39773 IANA-RSVD 39774 IANA-RSVD 39775 IANA-RSVD 39776 IANA-RSVD 39777 IANA-RSVD 39778 IANA-RSVD 39779 IANA-RSVD 39780 IANA-RSVD 39781 IANA-RSVD 39782 IANA-RSVD 39783 IANA-RSVD 39784 IANA-RSVD 39785 IANA-RSVD 39786 IANA-RSVD 39787 IANA-RSVD 39788 IANA-RSVD 39789 IANA-RSVD 39790 IANA-RSVD 39791 IANA-RSVD 39792 IANA-RSVD 39793 IANA-RSVD 39794 IANA-RSVD 39795 IANA-RSVD 39796 IANA-RSVD 39797 IANA-RSVD 39798 IANA-RSVD 39799 IANA-RSVD 39800 IANA-RSVD 39801 IANA-RSVD 39802 IANA-RSVD 39803 IANA-RSVD 39804 IANA-RSVD 39805 IANA-RSVD 39806 IANA-RSVD 39807 IANA-RSVD 39808 IANA-RSVD 39809 IANA-RSVD 39810 IANA-RSVD 39811 IANA-RSVD 39812 IANA-RSVD 39813 IANA-RSVD 39814 IANA-RSVD 39815 IANA-RSVD 39816 IANA-RSVD 39817 IANA-RSVD 39818 IANA-RSVD 39819 IANA-RSVD 39820 IANA-RSVD 39821 IANA-RSVD 39822 IANA-RSVD 39823 IANA-RSVD 39824 IANA-RSVD 39825 IANA-RSVD 39826 IANA-RSVD 39827 IANA-RSVD 39828 IANA-RSVD 39829 IANA-RSVD 39830 IANA-RSVD 39831 IANA-RSVD 39832 IANA-RSVD 39833 IANA-RSVD 39834 IANA-RSVD 39835 IANA-RSVD 39836 IANA-RSVD 39837 IANA-RSVD 39838 IANA-RSVD 39839 IANA-RSVD 39840 IANA-RSVD 39841 IANA-RSVD 39842 IANA-RSVD 39843 IANA-RSVD 39844 IANA-RSVD 39845 IANA-RSVD 39846 IANA-RSVD 39847 IANA-RSVD 39848 IANA-RSVD 39849 IANA-RSVD 39850 IANA-RSVD 39851 IANA-RSVD 39852 IANA-RSVD 39853 IANA-RSVD 39854 IANA-RSVD 39855 IANA-RSVD 39856 IANA-RSVD 39857 IANA-RSVD 39858 IANA-RSVD 39859 IANA-RSVD 39860 IANA-RSVD 39861 IANA-RSVD 39862 IANA-RSVD 39863 IANA-RSVD 39864 IANA-RSVD 39865 IANA-RSVD 39866 IANA-RSVD 39867 IANA-RSVD 39868 IANA-RSVD 39869 IANA-RSVD 39870 IANA-RSVD 39871 IANA-RSVD 39872 IANA-RSVD 39873 IANA-RSVD 39874 IANA-RSVD 39875 IANA-RSVD 39876 IANA-RSVD 39877 IANA-RSVD 39878 IANA-RSVD 39879 IANA-RSVD 39880 IANA-RSVD 39881 IANA-RSVD 39882 IANA-RSVD 39883 IANA-RSVD 39884 IANA-RSVD 39885 IANA-RSVD 39886 IANA-RSVD 39887 IANA-RSVD 39888 IANA-RSVD 39889 IANA-RSVD 39890 IANA-RSVD 39891 IANA-RSVD 39892 IANA-RSVD 39893 IANA-RSVD 39894 IANA-RSVD 39895 IANA-RSVD 39896 IANA-RSVD 39897 IANA-RSVD 39898 IANA-RSVD 39899 IANA-RSVD 39900 IANA-RSVD 39901 IANA-RSVD 39902 IANA-RSVD 39903 IANA-RSVD 39904 IANA-RSVD 39905 IANA-RSVD 39906 IANA-RSVD 39907 IANA-RSVD 39908 IANA-RSVD 39909 IANA-RSVD 39910 IANA-RSVD 39911 IANA-RSVD 39912 IANA-RSVD 39913 IANA-RSVD 39914 IANA-RSVD 39915 IANA-RSVD 39916 IANA-RSVD 39917 IANA-RSVD 39918 IANA-RSVD 39919 IANA-RSVD 39920 IANA-RSVD 39921 IANA-RSVD 39922 IANA-RSVD 39923 IANA-RSVD 39924 IANA-RSVD 39925 IANA-RSVD 39926 IANA-RSVD 39927 IANA-RSVD 39928 IANA-RSVD 39929 IANA-RSVD 39930 IANA-RSVD 39931 IANA-RSVD 39932 IANA-RSVD 39933 IANA-RSVD 39934 IANA-RSVD 39935 IANA-RSVD 39936 IANA-RSVD 39937 IANA-RSVD 39938 IANA-RSVD 39939 IANA-RSVD 39940 IANA-RSVD 39941 IANA-RSVD 39942 IANA-RSVD 39943 IANA-RSVD 39944 IANA-RSVD 39945 IANA-RSVD 39946 IANA-RSVD 39947 IANA-RSVD 39948 IANA-RSVD 39949 IANA-RSVD 39950 IANA-RSVD 39951 IANA-RSVD 39952 IANA-RSVD 39953 IANA-RSVD 39954 IANA-RSVD 39955 IANA-RSVD 39956 IANA-RSVD 39957 IANA-RSVD 39958 IANA-RSVD 39959 IANA-RSVD 39960 IANA-RSVD 39961 IANA-RSVD 39962 IANA-RSVD 39963 IANA-RSVD 39964 IANA-RSVD 39965 IANA-RSVD 39966 IANA-RSVD 39967 IANA-RSVD 39968 IANA-RSVD 39969 IANA-RSVD 39970 IANA-RSVD 39971 IANA-RSVD 39972 IANA-RSVD 39973 IANA-RSVD 39974 IANA-RSVD 39975 IANA-RSVD 39976 IANA-RSVD 39977 IANA-RSVD 39978 IANA-RSVD 39979 IANA-RSVD 39980 IANA-RSVD 39981 IANA-RSVD 39982 IANA-RSVD 39983 IANA-RSVD 39984 IANA-RSVD 39985 IANA-RSVD 39986 IANA-RSVD 39987 IANA-RSVD 39988 IANA-RSVD 39989 IANA-RSVD 39990 IANA-RSVD 39991 IANA-RSVD 39992 IANA-RSVD 39993 IANA-RSVD 39994 IANA-RSVD 39995 IANA-RSVD 39996 IANA-RSVD 39997 IANA-RSVD 39998 IANA-RSVD 39999 IANA-RSVD 40000 IANA-RSVD 40001 IANA-RSVD 40002 IANA-RSVD 40003 IANA-RSVD 40004 IANA-RSVD 40005 IANA-RSVD 40006 IANA-RSVD 40007 IANA-RSVD 40008 IANA-RSVD 40009 IANA-RSVD 40010 IANA-RSVD 40011 IANA-RSVD 40012 IANA-RSVD 40013 IANA-RSVD 40014 IANA-RSVD 40015 IANA-RSVD 40016 IANA-RSVD 40017 IANA-RSVD 40018 IANA-RSVD 40019 IANA-RSVD 40020 IANA-RSVD 40021 IANA-RSVD 40022 IANA-RSVD 40023 IANA-RSVD 40024 IANA-RSVD 40025 IANA-RSVD 40026 IANA-RSVD 40027 IANA-RSVD 40028 IANA-RSVD 40029 IANA-RSVD 40030 IANA-RSVD 40031 IANA-RSVD 40032 IANA-RSVD 40033 IANA-RSVD 40034 IANA-RSVD 40035 IANA-RSVD 40036 IANA-RSVD 40037 IANA-RSVD 40038 IANA-RSVD 40039 IANA-RSVD 40040 IANA-RSVD 40041 IANA-RSVD 40042 IANA-RSVD 40043 IANA-RSVD 40044 IANA-RSVD 40045 IANA-RSVD 40046 IANA-RSVD 40047 IANA-RSVD 40048 IANA-RSVD 40049 IANA-RSVD 40050 IANA-RSVD 40051 IANA-RSVD 40052 IANA-RSVD 40053 IANA-RSVD 40054 IANA-RSVD 40055 IANA-RSVD 40056 IANA-RSVD 40057 IANA-RSVD 40058 IANA-RSVD 40059 IANA-RSVD 40060 IANA-RSVD 40061 IANA-RSVD 40062 IANA-RSVD 40063 IANA-RSVD 40064 IANA-RSVD 40065 IANA-RSVD 40066 IANA-RSVD 40067 IANA-RSVD 40068 IANA-RSVD 40069 IANA-RSVD 40070 IANA-RSVD 40071 IANA-RSVD 40072 IANA-RSVD 40073 IANA-RSVD 40074 IANA-RSVD 40075 IANA-RSVD 40076 IANA-RSVD 40077 IANA-RSVD 40078 IANA-RSVD 40079 IANA-RSVD 40080 IANA-RSVD 40081 IANA-RSVD 40082 IANA-RSVD 40083 IANA-RSVD 40084 IANA-RSVD 40085 IANA-RSVD 40086 IANA-RSVD 40087 IANA-RSVD 40088 IANA-RSVD 40089 IANA-RSVD 40090 IANA-RSVD 40091 IANA-RSVD 40092 IANA-RSVD 40093 IANA-RSVD 40094 IANA-RSVD 40095 IANA-RSVD 40096 IANA-RSVD 40097 IANA-RSVD 40098 IANA-RSVD 40099 IANA-RSVD 40100 IANA-RSVD 40101 IANA-RSVD 40102 IANA-RSVD 40103 IANA-RSVD 40104 IANA-RSVD 40105 IANA-RSVD 40106 IANA-RSVD 40107 IANA-RSVD 40108 IANA-RSVD 40109 IANA-RSVD 40110 IANA-RSVD 40111 IANA-RSVD 40112 IANA-RSVD 40113 IANA-RSVD 40114 IANA-RSVD 40115 IANA-RSVD 40116 IANA-RSVD 40117 IANA-RSVD 40118 IANA-RSVD 40119 IANA-RSVD 40120 IANA-RSVD 40121 IANA-RSVD 40122 IANA-RSVD 40123 IANA-RSVD 40124 IANA-RSVD 40125 IANA-RSVD 40126 IANA-RSVD 40127 IANA-RSVD 40128 IANA-RSVD 40129 IANA-RSVD 40130 IANA-RSVD 40131 IANA-RSVD 40132 IANA-RSVD 40133 IANA-RSVD 40134 IANA-RSVD 40135 IANA-RSVD 40136 IANA-RSVD 40137 IANA-RSVD 40138 IANA-RSVD 40139 IANA-RSVD 40140 IANA-RSVD 40141 IANA-RSVD 40142 IANA-RSVD 40143 IANA-RSVD 40144 IANA-RSVD 40145 IANA-RSVD 40146 IANA-RSVD 40147 IANA-RSVD 40148 IANA-RSVD 40149 IANA-RSVD 40150 IANA-RSVD 40151 IANA-RSVD 40152 IANA-RSVD 40153 IANA-RSVD 40154 IANA-RSVD 40155 IANA-RSVD 40156 IANA-RSVD 40157 IANA-RSVD 40158 IANA-RSVD 40159 IANA-RSVD 40160 IANA-RSVD 40161 IANA-RSVD 40162 IANA-RSVD 40163 IANA-RSVD 40164 IANA-RSVD 40165 IANA-RSVD 40166 IANA-RSVD 40167 IANA-RSVD 40168 IANA-RSVD 40169 IANA-RSVD 40170 IANA-RSVD 40171 IANA-RSVD 40172 IANA-RSVD 40173 IANA-RSVD 40174 IANA-RSVD 40175 IANA-RSVD 40176 IANA-RSVD 40177 IANA-RSVD 40178 IANA-RSVD 40179 IANA-RSVD 40180 IANA-RSVD 40181 IANA-RSVD 40182 IANA-RSVD 40183 IANA-RSVD 40184 IANA-RSVD 40185 IANA-RSVD 40186 IANA-RSVD 40187 IANA-RSVD 40188 IANA-RSVD 40189 IANA-RSVD 40190 IANA-RSVD 40191 IANA-RSVD 40192 IANA-RSVD 40193 IANA-RSVD 40194 IANA-RSVD 40195 IANA-RSVD 40196 IANA-RSVD 40197 IANA-RSVD 40198 IANA-RSVD 40199 IANA-RSVD 40200 IANA-RSVD 40201 IANA-RSVD 40202 IANA-RSVD 40203 IANA-RSVD 40204 IANA-RSVD 40205 IANA-RSVD 40206 IANA-RSVD 40207 IANA-RSVD 40208 IANA-RSVD 40209 IANA-RSVD 40210 IANA-RSVD 40211 IANA-RSVD 40212 IANA-RSVD 40213 IANA-RSVD 40214 IANA-RSVD 40215 IANA-RSVD 40216 IANA-RSVD 40217 IANA-RSVD 40218 IANA-RSVD 40219 IANA-RSVD 40220 IANA-RSVD 40221 IANA-RSVD 40222 IANA-RSVD 40223 IANA-RSVD 40224 IANA-RSVD 40225 IANA-RSVD 40226 IANA-RSVD 40227 IANA-RSVD 40228 IANA-RSVD 40229 IANA-RSVD 40230 IANA-RSVD 40231 IANA-RSVD 40232 IANA-RSVD 40233 IANA-RSVD 40234 IANA-RSVD 40235 IANA-RSVD 40236 IANA-RSVD 40237 IANA-RSVD 40238 IANA-RSVD 40239 IANA-RSVD 40240 IANA-RSVD 40241 IANA-RSVD 40242 IANA-RSVD 40243 IANA-RSVD 40244 IANA-RSVD 40245 IANA-RSVD 40246 IANA-RSVD 40247 IANA-RSVD 40248 IANA-RSVD 40249 IANA-RSVD 40250 IANA-RSVD 40251 IANA-RSVD 40252 IANA-RSVD 40253 IANA-RSVD 40254 IANA-RSVD 40255 IANA-RSVD 40256 IANA-RSVD 40257 IANA-RSVD 40258 IANA-RSVD 40259 IANA-RSVD 40260 IANA-RSVD 40261 IANA-RSVD 40262 IANA-RSVD 40263 IANA-RSVD 40264 IANA-RSVD 40265 IANA-RSVD 40266 IANA-RSVD 40267 IANA-RSVD 40268 IANA-RSVD 40269 IANA-RSVD 40270 IANA-RSVD 40271 IANA-RSVD 40272 IANA-RSVD 40273 IANA-RSVD 40274 IANA-RSVD 40275 IANA-RSVD 40276 IANA-RSVD 40277 IANA-RSVD 40278 IANA-RSVD 40279 IANA-RSVD 40280 IANA-RSVD 40281 IANA-RSVD 40282 IANA-RSVD 40283 IANA-RSVD 40284 IANA-RSVD 40285 IANA-RSVD 40286 IANA-RSVD 40287 IANA-RSVD 40288 IANA-RSVD 40289 IANA-RSVD 40290 IANA-RSVD 40291 IANA-RSVD 40292 IANA-RSVD 40293 IANA-RSVD 40294 IANA-RSVD 40295 IANA-RSVD 40296 IANA-RSVD 40297 IANA-RSVD 40298 IANA-RSVD 40299 IANA-RSVD 40300 IANA-RSVD 40301 IANA-RSVD 40302 IANA-RSVD 40303 IANA-RSVD 40304 IANA-RSVD 40305 IANA-RSVD 40306 IANA-RSVD 40307 IANA-RSVD 40308 IANA-RSVD 40309 IANA-RSVD 40310 IANA-RSVD 40311 IANA-RSVD 40312 IANA-RSVD 40313 IANA-RSVD 40314 IANA-RSVD 40315 IANA-RSVD 40316 IANA-RSVD 40317 IANA-RSVD 40318 IANA-RSVD 40319 IANA-RSVD 40320 IANA-RSVD 40321 IANA-RSVD 40322 IANA-RSVD 40323 IANA-RSVD 40324 IANA-RSVD 40325 IANA-RSVD 40326 IANA-RSVD 40327 IANA-RSVD 40328 IANA-RSVD 40329 IANA-RSVD 40330 IANA-RSVD 40331 IANA-RSVD 40332 IANA-RSVD 40333 IANA-RSVD 40334 IANA-RSVD 40335 IANA-RSVD 40336 IANA-RSVD 40337 IANA-RSVD 40338 IANA-RSVD 40339 IANA-RSVD 40340 IANA-RSVD 40341 IANA-RSVD 40342 IANA-RSVD 40343 IANA-RSVD 40344 IANA-RSVD 40345 IANA-RSVD 40346 IANA-RSVD 40347 IANA-RSVD 40348 IANA-RSVD 40349 IANA-RSVD 40350 IANA-RSVD 40351 IANA-RSVD 40352 IANA-RSVD 40353 IANA-RSVD 40354 IANA-RSVD 40355 IANA-RSVD 40356 IANA-RSVD 40357 IANA-RSVD 40358 IANA-RSVD 40359 IANA-RSVD 40360 IANA-RSVD 40361 IANA-RSVD 40362 IANA-RSVD 40363 IANA-RSVD 40364 IANA-RSVD 40365 IANA-RSVD 40366 IANA-RSVD 40367 IANA-RSVD 40368 IANA-RSVD 40369 IANA-RSVD 40370 IANA-RSVD 40371 IANA-RSVD 40372 IANA-RSVD 40373 IANA-RSVD 40374 IANA-RSVD 40375 IANA-RSVD 40376 IANA-RSVD 40377 IANA-RSVD 40378 IANA-RSVD 40379 IANA-RSVD 40380 IANA-RSVD 40381 IANA-RSVD 40382 IANA-RSVD 40383 IANA-RSVD 40384 IANA-RSVD 40385 IANA-RSVD 40386 IANA-RSVD 40387 IANA-RSVD 40388 IANA-RSVD 40389 IANA-RSVD 40390 IANA-RSVD 40391 IANA-RSVD 40392 IANA-RSVD 40393 IANA-RSVD 40394 IANA-RSVD 40395 IANA-RSVD 40396 IANA-RSVD 40397 IANA-RSVD 40398 IANA-RSVD 40399 IANA-RSVD 40400 IANA-RSVD 40401 IANA-RSVD 40402 IANA-RSVD 40403 IANA-RSVD 40404 IANA-RSVD 40405 IANA-RSVD 40406 IANA-RSVD 40407 IANA-RSVD 40408 IANA-RSVD 40409 IANA-RSVD 40410 IANA-RSVD 40411 IANA-RSVD 40412 IANA-RSVD 40413 IANA-RSVD 40414 IANA-RSVD 40415 IANA-RSVD 40416 IANA-RSVD 40417 IANA-RSVD 40418 IANA-RSVD 40419 IANA-RSVD 40420 IANA-RSVD 40421 IANA-RSVD 40422 IANA-RSVD 40423 IANA-RSVD 40424 IANA-RSVD 40425 IANA-RSVD 40426 IANA-RSVD 40427 IANA-RSVD 40428 IANA-RSVD 40429 IANA-RSVD 40430 IANA-RSVD 40431 IANA-RSVD 40432 IANA-RSVD 40433 IANA-RSVD 40434 IANA-RSVD 40435 IANA-RSVD 40436 IANA-RSVD 40437 IANA-RSVD 40438 IANA-RSVD 40439 IANA-RSVD 40440 IANA-RSVD 40441 IANA-RSVD 40442 IANA-RSVD 40443 IANA-RSVD 40444 IANA-RSVD 40445 IANA-RSVD 40446 IANA-RSVD 40447 IANA-RSVD 40448 IANA-RSVD 40449 IANA-RSVD 40450 IANA-RSVD 40451 IANA-RSVD 40452 IANA-RSVD 40453 IANA-RSVD 40454 IANA-RSVD 40455 IANA-RSVD 40456 IANA-RSVD 40457 IANA-RSVD 40458 IANA-RSVD 40459 IANA-RSVD 40460 IANA-RSVD 40461 IANA-RSVD 40462 IANA-RSVD 40463 IANA-RSVD 40464 IANA-RSVD 40465 IANA-RSVD 40466 IANA-RSVD 40467 IANA-RSVD 40468 IANA-RSVD 40469 IANA-RSVD 40470 IANA-RSVD 40471 IANA-RSVD 40472 IANA-RSVD 40473 IANA-RSVD 40474 IANA-RSVD 40475 IANA-RSVD 40476 IANA-RSVD 40477 IANA-RSVD 40478 IANA-RSVD 40479 IANA-RSVD 40480 IANA-RSVD 40481 IANA-RSVD 40482 IANA-RSVD 40483 IANA-RSVD 40484 IANA-RSVD 40485 IANA-RSVD 40486 IANA-RSVD 40487 IANA-RSVD 40488 IANA-RSVD 40489 IANA-RSVD 40490 IANA-RSVD 40491 IANA-RSVD 40492 IANA-RSVD 40493 IANA-RSVD 40494 IANA-RSVD 40495 IANA-RSVD 40496 IANA-RSVD 40497 IANA-RSVD 40498 IANA-RSVD 40499 IANA-RSVD 40500 IANA-RSVD 40501 IANA-RSVD 40502 IANA-RSVD 40503 IANA-RSVD 40504 IANA-RSVD 40505 IANA-RSVD 40506 IANA-RSVD 40507 IANA-RSVD 40508 IANA-RSVD 40509 IANA-RSVD 40510 IANA-RSVD 40511 IANA-RSVD 40512 IANA-RSVD 40513 IANA-RSVD 40514 IANA-RSVD 40515 IANA-RSVD 40516 IANA-RSVD 40517 IANA-RSVD 40518 IANA-RSVD 40519 IANA-RSVD 40520 IANA-RSVD 40521 IANA-RSVD 40522 IANA-RSVD 40523 IANA-RSVD 40524 IANA-RSVD 40525 IANA-RSVD 40526 IANA-RSVD 40527 IANA-RSVD 40528 IANA-RSVD 40529 IANA-RSVD 40530 IANA-RSVD 40531 IANA-RSVD 40532 IANA-RSVD 40533 IANA-RSVD 40534 IANA-RSVD 40535 IANA-RSVD 40536 IANA-RSVD 40537 IANA-RSVD 40538 IANA-RSVD 40539 IANA-RSVD 40540 IANA-RSVD 40541 IANA-RSVD 40542 IANA-RSVD 40543 IANA-RSVD 40544 IANA-RSVD 40545 IANA-RSVD 40546 IANA-RSVD 40547 IANA-RSVD 40548 IANA-RSVD 40549 IANA-RSVD 40550 IANA-RSVD 40551 IANA-RSVD 40552 IANA-RSVD 40553 IANA-RSVD 40554 IANA-RSVD 40555 IANA-RSVD 40556 IANA-RSVD 40557 IANA-RSVD 40558 IANA-RSVD 40559 IANA-RSVD 40560 IANA-RSVD 40561 IANA-RSVD 40562 IANA-RSVD 40563 IANA-RSVD 40564 IANA-RSVD 40565 IANA-RSVD 40566 IANA-RSVD 40567 IANA-RSVD 40568 IANA-RSVD 40569 IANA-RSVD 40570 IANA-RSVD 40571 IANA-RSVD 40572 IANA-RSVD 40573 IANA-RSVD 40574 IANA-RSVD 40575 IANA-RSVD 40576 IANA-RSVD 40577 IANA-RSVD 40578 IANA-RSVD 40579 IANA-RSVD 40580 IANA-RSVD 40581 IANA-RSVD 40582 IANA-RSVD 40583 IANA-RSVD 40584 IANA-RSVD 40585 IANA-RSVD 40586 IANA-RSVD 40587 IANA-RSVD 40588 IANA-RSVD 40589 IANA-RSVD 40590 IANA-RSVD 40591 IANA-RSVD 40592 IANA-RSVD 40593 IANA-RSVD 40594 IANA-RSVD 40595 IANA-RSVD 40596 IANA-RSVD 40597 IANA-RSVD 40598 IANA-RSVD 40599 IANA-RSVD 40600 IANA-RSVD 40601 IANA-RSVD 40602 IANA-RSVD 40603 IANA-RSVD 40604 IANA-RSVD 40605 IANA-RSVD 40606 IANA-RSVD 40607 IANA-RSVD 40608 IANA-RSVD 40609 IANA-RSVD 40610 IANA-RSVD 40611 IANA-RSVD 40612 IANA-RSVD 40613 IANA-RSVD 40614 IANA-RSVD 40615 IANA-RSVD 40616 IANA-RSVD 40617 IANA-RSVD 40618 IANA-RSVD 40619 IANA-RSVD 40620 IANA-RSVD 40621 IANA-RSVD 40622 IANA-RSVD 40623 IANA-RSVD 40624 IANA-RSVD 40625 IANA-RSVD 40626 IANA-RSVD 40627 IANA-RSVD 40628 IANA-RSVD 40629 IANA-RSVD 40630 IANA-RSVD 40631 IANA-RSVD 40632 IANA-RSVD 40633 IANA-RSVD 40634 IANA-RSVD 40635 IANA-RSVD 40636 IANA-RSVD 40637 IANA-RSVD 40638 IANA-RSVD 40639 IANA-RSVD 40640 IANA-RSVD 40641 IANA-RSVD 40642 IANA-RSVD 40643 IANA-RSVD 40644 IANA-RSVD 40645 IANA-RSVD 40646 IANA-RSVD 40647 IANA-RSVD 40648 IANA-RSVD 40649 IANA-RSVD 40650 IANA-RSVD 40651 IANA-RSVD 40652 IANA-RSVD 40653 IANA-RSVD 40654 IANA-RSVD 40655 IANA-RSVD 40656 IANA-RSVD 40657 IANA-RSVD 40658 IANA-RSVD 40659 IANA-RSVD 40660 IANA-RSVD 40661 IANA-RSVD 40662 IANA-RSVD 40663 IANA-RSVD 40664 IANA-RSVD 40665 IANA-RSVD 40666 IANA-RSVD 40667 IANA-RSVD 40668 IANA-RSVD 40669 IANA-RSVD 40670 IANA-RSVD 40671 IANA-RSVD 40672 IANA-RSVD 40673 IANA-RSVD 40674 IANA-RSVD 40675 IANA-RSVD 40676 IANA-RSVD 40677 IANA-RSVD 40678 IANA-RSVD 40679 IANA-RSVD 40680 IANA-RSVD 40681 IANA-RSVD 40682 IANA-RSVD 40683 IANA-RSVD 40684 IANA-RSVD 40685 IANA-RSVD 40686 IANA-RSVD 40687 IANA-RSVD 40688 IANA-RSVD 40689 IANA-RSVD 40690 IANA-RSVD 40691 IANA-RSVD 40692 IANA-RSVD 40693 IANA-RSVD 40694 IANA-RSVD 40695 IANA-RSVD 40696 IANA-RSVD 40697 IANA-RSVD 40698 IANA-RSVD 40699 IANA-RSVD 40700 IANA-RSVD 40701 IANA-RSVD 40702 IANA-RSVD 40703 IANA-RSVD 40704 IANA-RSVD 40705 IANA-RSVD 40706 IANA-RSVD 40707 IANA-RSVD 40708 IANA-RSVD 40709 IANA-RSVD 40710 IANA-RSVD 40711 IANA-RSVD 40712 IANA-RSVD 40713 IANA-RSVD 40714 IANA-RSVD 40715 IANA-RSVD 40716 IANA-RSVD 40717 IANA-RSVD 40718 IANA-RSVD 40719 IANA-RSVD 40720 IANA-RSVD 40721 IANA-RSVD 40722 IANA-RSVD 40723 IANA-RSVD 40724 IANA-RSVD 40725 IANA-RSVD 40726 IANA-RSVD 40727 IANA-RSVD 40728 IANA-RSVD 40729 IANA-RSVD 40730 IANA-RSVD 40731 IANA-RSVD 40732 IANA-RSVD 40733 IANA-RSVD 40734 IANA-RSVD 40735 IANA-RSVD 40736 IANA-RSVD 40737 IANA-RSVD 40738 IANA-RSVD 40739 IANA-RSVD 40740 IANA-RSVD 40741 IANA-RSVD 40742 IANA-RSVD 40743 IANA-RSVD 40744 IANA-RSVD 40745 IANA-RSVD 40746 IANA-RSVD 40747 IANA-RSVD 40748 IANA-RSVD 40749 IANA-RSVD 40750 IANA-RSVD 40751 IANA-RSVD 40752 IANA-RSVD 40753 IANA-RSVD 40754 IANA-RSVD 40755 IANA-RSVD 40756 IANA-RSVD 40757 IANA-RSVD 40758 IANA-RSVD 40759 IANA-RSVD 40760 IANA-RSVD 40761 IANA-RSVD 40762 IANA-RSVD 40763 IANA-RSVD 40764 IANA-RSVD 40765 IANA-RSVD 40766 IANA-RSVD 40767 IANA-RSVD 40768 IANA-RSVD 40769 IANA-RSVD 40770 IANA-RSVD 40771 IANA-RSVD 40772 IANA-RSVD 40773 IANA-RSVD 40774 IANA-RSVD 40775 IANA-RSVD 40776 IANA-RSVD 40777 IANA-RSVD 40778 IANA-RSVD 40779 IANA-RSVD 40780 IANA-RSVD 40781 IANA-RSVD 40782 IANA-RSVD 40783 IANA-RSVD 40784 IANA-RSVD 40785 IANA-RSVD 40786 IANA-RSVD 40787 IANA-RSVD 40788 IANA-RSVD 40789 IANA-RSVD 40790 IANA-RSVD 40791 IANA-RSVD 40792 IANA-RSVD 40793 IANA-RSVD 40794 IANA-RSVD 40795 IANA-RSVD 40796 IANA-RSVD 40797 IANA-RSVD 40798 IANA-RSVD 40799 IANA-RSVD 40800 IANA-RSVD 40801 IANA-RSVD 40802 IANA-RSVD 40803 IANA-RSVD 40804 IANA-RSVD 40805 IANA-RSVD 40806 IANA-RSVD 40807 IANA-RSVD 40808 IANA-RSVD 40809 IANA-RSVD 40810 IANA-RSVD 40811 IANA-RSVD 40812 IANA-RSVD 40813 IANA-RSVD 40814 IANA-RSVD 40815 IANA-RSVD 40816 IANA-RSVD 40817 IANA-RSVD 40818 IANA-RSVD 40819 IANA-RSVD 40820 IANA-RSVD 40821 IANA-RSVD 40822 IANA-RSVD 40823 IANA-RSVD 40824 IANA-RSVD 40825 IANA-RSVD 40826 IANA-RSVD 40827 IANA-RSVD 40828 IANA-RSVD 40829 IANA-RSVD 40830 IANA-RSVD 40831 IANA-RSVD 40832 IANA-RSVD 40833 IANA-RSVD 40834 IANA-RSVD 40835 IANA-RSVD 40836 IANA-RSVD 40837 IANA-RSVD 40838 IANA-RSVD 40839 IANA-RSVD 40840 IANA-RSVD 40841 IANA-RSVD 40842 IANA-RSVD 40843 IANA-RSVD 40844 IANA-RSVD 40845 IANA-RSVD 40846 IANA-RSVD 40847 IANA-RSVD 40848 IANA-RSVD 40849 IANA-RSVD 40850 IANA-RSVD 40851 IANA-RSVD 40852 IANA-RSVD 40853 IANA-RSVD 40854 IANA-RSVD 40855 IANA-RSVD 40856 IANA-RSVD 40857 IANA-RSVD 40858 IANA-RSVD 40859 IANA-RSVD 40860 IANA-RSVD 40861 IANA-RSVD 40862 IANA-RSVD 40863 IANA-RSVD 40864 IANA-RSVD 40865 IANA-RSVD 40866 IANA-RSVD 40867 IANA-RSVD 40868 IANA-RSVD 40869 IANA-RSVD 40870 IANA-RSVD 40871 IANA-RSVD 40872 IANA-RSVD 40873 IANA-RSVD 40874 IANA-RSVD 40875 IANA-RSVD 40876 IANA-RSVD 40877 IANA-RSVD 40878 IANA-RSVD 40879 IANA-RSVD 40880 IANA-RSVD 40881 IANA-RSVD 40882 IANA-RSVD 40883 IANA-RSVD 40884 IANA-RSVD 40885 IANA-RSVD 40886 IANA-RSVD 40887 IANA-RSVD 40888 IANA-RSVD 40889 IANA-RSVD 40890 IANA-RSVD 40891 IANA-RSVD 40892 IANA-RSVD 40893 IANA-RSVD 40894 IANA-RSVD 40895 IANA-RSVD 40896 IANA-RSVD 40897 IANA-RSVD 40898 IANA-RSVD 40899 IANA-RSVD 40900 IANA-RSVD 40901 IANA-RSVD 40902 IANA-RSVD 40903 IANA-RSVD 40904 IANA-RSVD 40905 IANA-RSVD 40906 IANA-RSVD 40907 IANA-RSVD 40908 IANA-RSVD 40909 IANA-RSVD 40910 IANA-RSVD 40911 IANA-RSVD 40912 IANA-RSVD 40913 IANA-RSVD 40914 IANA-RSVD 40915 IANA-RSVD 40916 IANA-RSVD 40917 IANA-RSVD 40918 IANA-RSVD 40919 IANA-RSVD 40920 IANA-RSVD 40921 IANA-RSVD 40922 IANA-RSVD 40923 IANA-RSVD 40924 IANA-RSVD 40925 IANA-RSVD 40926 IANA-RSVD 40927 IANA-RSVD 40928 IANA-RSVD 40929 IANA-RSVD 40930 IANA-RSVD 40931 IANA-RSVD 40932 IANA-RSVD 40933 IANA-RSVD 40934 IANA-RSVD 40935 IANA-RSVD 40936 IANA-RSVD 40937 IANA-RSVD 40938 IANA-RSVD 40939 IANA-RSVD 40940 IANA-RSVD 40941 IANA-RSVD 40942 IANA-RSVD 40943 IANA-RSVD 40944 IANA-RSVD 40945 IANA-RSVD 40946 IANA-RSVD 40947 IANA-RSVD 40948 IANA-RSVD 40949 IANA-RSVD 40950 IANA-RSVD 40951 IANA-RSVD 40952 IANA-RSVD 40953 IANA-RSVD 40954 IANA-RSVD 40955 IANA-RSVD 40956 IANA-RSVD 40957 IANA-RSVD 40958 IANA-RSVD 40959 IANA-RSVD 40960 IANA-RSVD 40961 IANA-RSVD 40962 IANA-RSVD 40963 IANA-RSVD 40964 IANA-RSVD 40965 IANA-RSVD 40966 IANA-RSVD 40967 IANA-RSVD 40968 IANA-RSVD 40969 IANA-RSVD 40970 IANA-RSVD 40971 IANA-RSVD 40972 IANA-RSVD 40973 IANA-RSVD 40974 IANA-RSVD 40975 IANA-RSVD 40976 IANA-RSVD 40977 IANA-RSVD 40978 IANA-RSVD 40979 IANA-RSVD 40980 IANA-RSVD 40981 IANA-RSVD 40982 IANA-RSVD 40983 IANA-RSVD 40984 IANA-RSVD 40985 IANA-RSVD 40986 IANA-RSVD 40987 IANA-RSVD 40988 IANA-RSVD 40989 IANA-RSVD 40990 IANA-RSVD 40991 IANA-RSVD 40992 IANA-RSVD 40993 IANA-RSVD 40994 IANA-RSVD 40995 IANA-RSVD 40996 IANA-RSVD 40997 IANA-RSVD 40998 IANA-RSVD 40999 IANA-RSVD 41000 IANA-RSVD 41001 IANA-RSVD 41002 IANA-RSVD 41003 IANA-RSVD 41004 IANA-RSVD 41005 IANA-RSVD 41006 IANA-RSVD 41007 IANA-RSVD 41008 IANA-RSVD 41009 IANA-RSVD 41010 IANA-RSVD 41011 IANA-RSVD 41012 IANA-RSVD 41013 IANA-RSVD 41014 IANA-RSVD 41015 IANA-RSVD 41016 IANA-RSVD 41017 IANA-RSVD 41018 IANA-RSVD 41019 IANA-RSVD 41020 IANA-RSVD 41021 IANA-RSVD 41022 IANA-RSVD 41023 IANA-RSVD 41024 IANA-RSVD 41025 IANA-RSVD 41026 IANA-RSVD 41027 IANA-RSVD 41028 IANA-RSVD 41029 IANA-RSVD 41030 IANA-RSVD 41031 IANA-RSVD 41032 IANA-RSVD 41033 IANA-RSVD 41034 IANA-RSVD 41035 IANA-RSVD 41036 IANA-RSVD 41037 IANA-RSVD 41038 IANA-RSVD 41039 IANA-RSVD 41040 IANA-RSVD 41041 IANA-RSVD 41042 IANA-RSVD 41043 IANA-RSVD 41044 IANA-RSVD 41045 IANA-RSVD 41046 IANA-RSVD 41047 IANA-RSVD 41048 IANA-RSVD 41049 IANA-RSVD 41050 IANA-RSVD 41051 IANA-RSVD 41052 IANA-RSVD 41053 IANA-RSVD 41054 IANA-RSVD 41055 IANA-RSVD 41056 IANA-RSVD 41057 IANA-RSVD 41058 IANA-RSVD 41059 IANA-RSVD 41060 IANA-RSVD 41061 IANA-RSVD 41062 IANA-RSVD 41063 IANA-RSVD 41064 IANA-RSVD 41065 IANA-RSVD 41066 IANA-RSVD 41067 IANA-RSVD 41068 IANA-RSVD 41069 IANA-RSVD 41070 IANA-RSVD 41071 IANA-RSVD 41072 IANA-RSVD 41073 IANA-RSVD 41074 IANA-RSVD 41075 IANA-RSVD 41076 IANA-RSVD 41077 IANA-RSVD 41078 IANA-RSVD 41079 IANA-RSVD 41080 IANA-RSVD 41081 IANA-RSVD 41082 IANA-RSVD 41083 IANA-RSVD 41084 IANA-RSVD 41085 IANA-RSVD 41086 IANA-RSVD 41087 IANA-RSVD 41088 IANA-RSVD 41089 IANA-RSVD 41090 IANA-RSVD 41091 IANA-RSVD 41092 IANA-RSVD 41093 IANA-RSVD 41094 IANA-RSVD 41095 IANA-RSVD 41096 IANA-RSVD 41097 IANA-RSVD 41098 IANA-RSVD 41099 IANA-RSVD 41100 IANA-RSVD 41101 IANA-RSVD 41102 IANA-RSVD 41103 IANA-RSVD 41104 IANA-RSVD 41105 IANA-RSVD 41106 IANA-RSVD 41107 IANA-RSVD 41108 IANA-RSVD 41109 IANA-RSVD 41110 IANA-RSVD 41111 IANA-RSVD 41112 IANA-RSVD 41113 IANA-RSVD 41114 IANA-RSVD 41115 IANA-RSVD 41116 IANA-RSVD 41117 IANA-RSVD 41118 IANA-RSVD 41119 IANA-RSVD 41120 IANA-RSVD 41121 IANA-RSVD 41122 IANA-RSVD 41123 IANA-RSVD 41124 IANA-RSVD 41125 IANA-RSVD 41126 IANA-RSVD 41127 IANA-RSVD 41128 IANA-RSVD 41129 IANA-RSVD 41130 IANA-RSVD 41131 IANA-RSVD 41132 IANA-RSVD 41133 IANA-RSVD 41134 IANA-RSVD 41135 IANA-RSVD 41136 IANA-RSVD 41137 IANA-RSVD 41138 IANA-RSVD 41139 IANA-RSVD 41140 IANA-RSVD 41141 IANA-RSVD 41142 IANA-RSVD 41143 IANA-RSVD 41144 IANA-RSVD 41145 IANA-RSVD 41146 IANA-RSVD 41147 IANA-RSVD 41148 IANA-RSVD 41149 IANA-RSVD 41150 IANA-RSVD 41151 IANA-RSVD 41152 IANA-RSVD 41153 IANA-RSVD 41154 IANA-RSVD 41155 IANA-RSVD 41156 IANA-RSVD 41157 IANA-RSVD 41158 IANA-RSVD 41159 IANA-RSVD 41160 IANA-RSVD 41161 IANA-RSVD 41162 IANA-RSVD 41163 IANA-RSVD 41164 IANA-RSVD 41165 IANA-RSVD 41166 IANA-RSVD 41167 IANA-RSVD 41168 IANA-RSVD 41169 IANA-RSVD 41170 IANA-RSVD 41171 IANA-RSVD 41172 IANA-RSVD 41173 IANA-RSVD 41174 IANA-RSVD 41175 IANA-RSVD 41176 IANA-RSVD 41177 IANA-RSVD 41178 IANA-RSVD 41179 IANA-RSVD 41180 IANA-RSVD 41181 IANA-RSVD 41182 IANA-RSVD 41183 IANA-RSVD 41184 IANA-RSVD 41185 IANA-RSVD 41186 IANA-RSVD 41187 IANA-RSVD 41188 IANA-RSVD 41189 IANA-RSVD 41190 IANA-RSVD 41191 IANA-RSVD 41192 IANA-RSVD 41193 IANA-RSVD 41194 IANA-RSVD 41195 IANA-RSVD 41196 IANA-RSVD 41197 IANA-RSVD 41198 IANA-RSVD 41199 IANA-RSVD 41200 IANA-RSVD 41201 IANA-RSVD 41202 IANA-RSVD 41203 IANA-RSVD 41204 IANA-RSVD 41205 IANA-RSVD 41206 IANA-RSVD 41207 IANA-RSVD 41208 IANA-RSVD 41209 IANA-RSVD 41210 IANA-RSVD 41211 IANA-RSVD 41212 IANA-RSVD 41213 IANA-RSVD 41214 IANA-RSVD 41215 IANA-RSVD 41216 IANA-RSVD 41217 IANA-RSVD 41218 IANA-RSVD 41219 IANA-RSVD 41220 IANA-RSVD 41221 IANA-RSVD 41222 IANA-RSVD 41223 IANA-RSVD 41224 IANA-RSVD 41225 IANA-RSVD 41226 IANA-RSVD 41227 IANA-RSVD 41228 IANA-RSVD 41229 IANA-RSVD 41230 IANA-RSVD 41231 IANA-RSVD 41232 IANA-RSVD 41233 IANA-RSVD 41234 IANA-RSVD 41235 IANA-RSVD 41236 IANA-RSVD 41237 IANA-RSVD 41238 IANA-RSVD 41239 IANA-RSVD 41240 IANA-RSVD 41241 IANA-RSVD 41242 IANA-RSVD 41243 IANA-RSVD 41244 IANA-RSVD 41245 IANA-RSVD 41246 IANA-RSVD 41247 IANA-RSVD 41248 IANA-RSVD 41249 IANA-RSVD 41250 IANA-RSVD 41251 IANA-RSVD 41252 IANA-RSVD 41253 IANA-RSVD 41254 IANA-RSVD 41255 IANA-RSVD 41256 IANA-RSVD 41257 IANA-RSVD 41258 IANA-RSVD 41259 IANA-RSVD 41260 IANA-RSVD 41261 IANA-RSVD 41262 IANA-RSVD 41263 IANA-RSVD 41264 IANA-RSVD 41265 IANA-RSVD 41266 IANA-RSVD 41267 IANA-RSVD 41268 IANA-RSVD 41269 IANA-RSVD 41270 IANA-RSVD 41271 IANA-RSVD 41272 IANA-RSVD 41273 IANA-RSVD 41274 IANA-RSVD 41275 IANA-RSVD 41276 IANA-RSVD 41277 IANA-RSVD 41278 IANA-RSVD 41279 IANA-RSVD 41280 IANA-RSVD 41281 IANA-RSVD 41282 IANA-RSVD 41283 IANA-RSVD 41284 IANA-RSVD 41285 IANA-RSVD 41286 IANA-RSVD 41287 IANA-RSVD 41288 IANA-RSVD 41289 IANA-RSVD 41290 IANA-RSVD 41291 IANA-RSVD 41292 IANA-RSVD 41293 IANA-RSVD 41294 IANA-RSVD 41295 IANA-RSVD 41296 IANA-RSVD 41297 IANA-RSVD 41298 IANA-RSVD 41299 IANA-RSVD 41300 IANA-RSVD 41301 IANA-RSVD 41302 IANA-RSVD 41303 IANA-RSVD 41304 IANA-RSVD 41305 IANA-RSVD 41306 IANA-RSVD 41307 IANA-RSVD 41308 IANA-RSVD 41309 IANA-RSVD 41310 IANA-RSVD 41311 IANA-RSVD 41312 IANA-RSVD 41313 IANA-RSVD 41314 IANA-RSVD 41315 IANA-RSVD 41316 IANA-RSVD 41317 IANA-RSVD 41318 IANA-RSVD 41319 IANA-RSVD 41320 IANA-RSVD 41321 IANA-RSVD 41322 IANA-RSVD 41323 IANA-RSVD 41324 IANA-RSVD 41325 IANA-RSVD 41326 IANA-RSVD 41327 IANA-RSVD 41328 IANA-RSVD 41329 IANA-RSVD 41330 IANA-RSVD 41331 IANA-RSVD 41332 IANA-RSVD 41333 IANA-RSVD 41334 IANA-RSVD 41335 IANA-RSVD 41336 IANA-RSVD 41337 IANA-RSVD 41338 IANA-RSVD 41339 IANA-RSVD 41340 IANA-RSVD 41341 IANA-RSVD 41342 IANA-RSVD 41343 IANA-RSVD 41344 IANA-RSVD 41345 IANA-RSVD 41346 IANA-RSVD 41347 IANA-RSVD 41348 IANA-RSVD 41349 IANA-RSVD 41350 IANA-RSVD 41351 IANA-RSVD 41352 IANA-RSVD 41353 IANA-RSVD 41354 IANA-RSVD 41355 IANA-RSVD 41356 IANA-RSVD 41357 IANA-RSVD 41358 IANA-RSVD 41359 IANA-RSVD 41360 IANA-RSVD 41361 IANA-RSVD 41362 IANA-RSVD 41363 IANA-RSVD 41364 IANA-RSVD 41365 IANA-RSVD 41366 IANA-RSVD 41367 IANA-RSVD 41368 IANA-RSVD 41369 IANA-RSVD 41370 IANA-RSVD 41371 IANA-RSVD 41372 IANA-RSVD 41373 IANA-RSVD 41374 IANA-RSVD 41375 IANA-RSVD 41376 IANA-RSVD 41377 IANA-RSVD 41378 IANA-RSVD 41379 IANA-RSVD 41380 IANA-RSVD 41381 IANA-RSVD 41382 IANA-RSVD 41383 IANA-RSVD 41384 IANA-RSVD 41385 IANA-RSVD 41386 IANA-RSVD 41387 IANA-RSVD 41388 IANA-RSVD 41389 IANA-RSVD 41390 IANA-RSVD 41391 IANA-RSVD 41392 IANA-RSVD 41393 IANA-RSVD 41394 IANA-RSVD 41395 IANA-RSVD 41396 IANA-RSVD 41397 IANA-RSVD 41398 IANA-RSVD 41399 IANA-RSVD 41400 IANA-RSVD 41401 IANA-RSVD 41402 IANA-RSVD 41403 IANA-RSVD 41404 IANA-RSVD 41405 IANA-RSVD 41406 IANA-RSVD 41407 IANA-RSVD 41408 IANA-RSVD 41409 IANA-RSVD 41410 IANA-RSVD 41411 IANA-RSVD 41412 IANA-RSVD 41413 IANA-RSVD 41414 IANA-RSVD 41415 IANA-RSVD 41416 IANA-RSVD 41417 IANA-RSVD 41418 IANA-RSVD 41419 IANA-RSVD 41420 IANA-RSVD 41421 IANA-RSVD 41422 IANA-RSVD 41423 IANA-RSVD 41424 IANA-RSVD 41425 IANA-RSVD 41426 IANA-RSVD 41427 IANA-RSVD 41428 IANA-RSVD 41429 IANA-RSVD 41430 IANA-RSVD 41431 IANA-RSVD 41432 IANA-RSVD 41433 IANA-RSVD 41434 IANA-RSVD 41435 IANA-RSVD 41436 IANA-RSVD 41437 IANA-RSVD 41438 IANA-RSVD 41439 IANA-RSVD 41440 IANA-RSVD 41441 IANA-RSVD 41442 IANA-RSVD 41443 IANA-RSVD 41444 IANA-RSVD 41445 IANA-RSVD 41446 IANA-RSVD 41447 IANA-RSVD 41448 IANA-RSVD 41449 IANA-RSVD 41450 IANA-RSVD 41451 IANA-RSVD 41452 IANA-RSVD 41453 IANA-RSVD 41454 IANA-RSVD 41455 IANA-RSVD 41456 IANA-RSVD 41457 IANA-RSVD 41458 IANA-RSVD 41459 IANA-RSVD 41460 IANA-RSVD 41461 IANA-RSVD 41462 IANA-RSVD 41463 IANA-RSVD 41464 IANA-RSVD 41465 IANA-RSVD 41466 IANA-RSVD 41467 IANA-RSVD 41468 IANA-RSVD 41469 IANA-RSVD 41470 IANA-RSVD 41471 IANA-RSVD 41472 IANA-RSVD 41473 IANA-RSVD 41474 IANA-RSVD 41475 IANA-RSVD 41476 IANA-RSVD 41477 IANA-RSVD 41478 IANA-RSVD 41479 IANA-RSVD 41480 IANA-RSVD 41481 IANA-RSVD 41482 IANA-RSVD 41483 IANA-RSVD 41484 IANA-RSVD 41485 IANA-RSVD 41486 IANA-RSVD 41487 IANA-RSVD 41488 IANA-RSVD 41489 IANA-RSVD 41490 IANA-RSVD 41491 IANA-RSVD 41492 IANA-RSVD 41493 IANA-RSVD 41494 IANA-RSVD 41495 IANA-RSVD 41496 IANA-RSVD 41497 IANA-RSVD 41498 IANA-RSVD 41499 IANA-RSVD 41500 IANA-RSVD 41501 IANA-RSVD 41502 IANA-RSVD 41503 IANA-RSVD 41504 IANA-RSVD 41505 IANA-RSVD 41506 IANA-RSVD 41507 IANA-RSVD 41508 IANA-RSVD 41509 IANA-RSVD 41510 IANA-RSVD 41511 IANA-RSVD 41512 IANA-RSVD 41513 IANA-RSVD 41514 IANA-RSVD 41515 IANA-RSVD 41516 IANA-RSVD 41517 IANA-RSVD 41518 IANA-RSVD 41519 IANA-RSVD 41520 IANA-RSVD 41521 IANA-RSVD 41522 IANA-RSVD 41523 IANA-RSVD 41524 IANA-RSVD 41525 IANA-RSVD 41526 IANA-RSVD 41527 IANA-RSVD 41528 IANA-RSVD 41529 IANA-RSVD 41530 IANA-RSVD 41531 IANA-RSVD 41532 IANA-RSVD 41533 IANA-RSVD 41534 IANA-RSVD 41535 IANA-RSVD 41536 IANA-RSVD 41537 IANA-RSVD 41538 IANA-RSVD 41539 IANA-RSVD 41540 IANA-RSVD 41541 IANA-RSVD 41542 IANA-RSVD 41543 IANA-RSVD 41544 IANA-RSVD 41545 IANA-RSVD 41546 IANA-RSVD 41547 IANA-RSVD 41548 IANA-RSVD 41549 IANA-RSVD 41550 IANA-RSVD 41551 IANA-RSVD 41552 IANA-RSVD 41553 IANA-RSVD 41554 IANA-RSVD 41555 IANA-RSVD 41556 IANA-RSVD 41557 IANA-RSVD 41558 IANA-RSVD 41559 IANA-RSVD 41560 IANA-RSVD 41561 IANA-RSVD 41562 IANA-RSVD 41563 IANA-RSVD 41564 IANA-RSVD 41565 IANA-RSVD 41566 IANA-RSVD 41567 IANA-RSVD 41568 IANA-RSVD 41569 IANA-RSVD 41570 IANA-RSVD 41571 IANA-RSVD 41572 IANA-RSVD 41573 IANA-RSVD 41574 IANA-RSVD 41575 IANA-RSVD 41576 IANA-RSVD 41577 IANA-RSVD 41578 IANA-RSVD 41579 IANA-RSVD 41580 IANA-RSVD 41581 IANA-RSVD 41582 IANA-RSVD 41583 IANA-RSVD 41584 IANA-RSVD 41585 IANA-RSVD 41586 IANA-RSVD 41587 IANA-RSVD 41588 IANA-RSVD 41589 IANA-RSVD 41590 IANA-RSVD 41591 IANA-RSVD 41592 IANA-RSVD 41593 IANA-RSVD 41594 IANA-RSVD 41595 IANA-RSVD 41596 IANA-RSVD 41597 IANA-RSVD 41598 IANA-RSVD 41599 IANA-RSVD 41600 IANA-RSVD 41601 IANA-RSVD 41602 IANA-RSVD 41603 IANA-RSVD 41604 IANA-RSVD 41605 IANA-RSVD 41606 IANA-RSVD 41607 IANA-RSVD 41608 IANA-RSVD 41609 IANA-RSVD 41610 IANA-RSVD 41611 IANA-RSVD 41612 IANA-RSVD 41613 IANA-RSVD 41614 IANA-RSVD 41615 IANA-RSVD 41616 IANA-RSVD 41617 IANA-RSVD 41618 IANA-RSVD 41619 IANA-RSVD 41620 IANA-RSVD 41621 IANA-RSVD 41622 IANA-RSVD 41623 IANA-RSVD 41624 IANA-RSVD 41625 IANA-RSVD 41626 IANA-RSVD 41627 IANA-RSVD 41628 IANA-RSVD 41629 IANA-RSVD 41630 IANA-RSVD 41631 IANA-RSVD 41632 IANA-RSVD 41633 IANA-RSVD 41634 IANA-RSVD 41635 IANA-RSVD 41636 IANA-RSVD 41637 IANA-RSVD 41638 IANA-RSVD 41639 IANA-RSVD 41640 IANA-RSVD 41641 IANA-RSVD 41642 IANA-RSVD 41643 IANA-RSVD 41644 IANA-RSVD 41645 IANA-RSVD 41646 IANA-RSVD 41647 IANA-RSVD 41648 IANA-RSVD 41649 IANA-RSVD 41650 IANA-RSVD 41651 IANA-RSVD 41652 IANA-RSVD 41653 IANA-RSVD 41654 IANA-RSVD 41655 IANA-RSVD 41656 IANA-RSVD 41657 IANA-RSVD 41658 IANA-RSVD 41659 IANA-RSVD 41660 IANA-RSVD 41661 IANA-RSVD 41662 IANA-RSVD 41663 IANA-RSVD 41664 IANA-RSVD 41665 IANA-RSVD 41666 IANA-RSVD 41667 IANA-RSVD 41668 IANA-RSVD 41669 IANA-RSVD 41670 IANA-RSVD 41671 IANA-RSVD 41672 IANA-RSVD 41673 IANA-RSVD 41674 IANA-RSVD 41675 IANA-RSVD 41676 IANA-RSVD 41677 IANA-RSVD 41678 IANA-RSVD 41679 IANA-RSVD 41680 IANA-RSVD 41681 IANA-RSVD 41682 IANA-RSVD 41683 IANA-RSVD 41684 IANA-RSVD 41685 IANA-RSVD 41686 IANA-RSVD 41687 IANA-RSVD 41688 IANA-RSVD 41689 IANA-RSVD 41690 IANA-RSVD 41691 IANA-RSVD 41692 IANA-RSVD 41693 IANA-RSVD 41694 IANA-RSVD 41695 IANA-RSVD 41696 IANA-RSVD 41697 IANA-RSVD 41698 IANA-RSVD 41699 IANA-RSVD 41700 IANA-RSVD 41701 IANA-RSVD 41702 IANA-RSVD 41703 IANA-RSVD 41704 IANA-RSVD 41705 IANA-RSVD 41706 IANA-RSVD 41707 IANA-RSVD 41708 IANA-RSVD 41709 IANA-RSVD 41710 IANA-RSVD 41711 IANA-RSVD 41712 IANA-RSVD 41713 IANA-RSVD 41714 IANA-RSVD 41715 IANA-RSVD 41716 IANA-RSVD 41717 IANA-RSVD 41718 IANA-RSVD 41719 IANA-RSVD 41720 IANA-RSVD 41721 IANA-RSVD 41722 IANA-RSVD 41723 IANA-RSVD 41724 IANA-RSVD 41725 IANA-RSVD 41726 IANA-RSVD 41727 IANA-RSVD 41728 IANA-RSVD 41729 IANA-RSVD 41730 IANA-RSVD 41731 IANA-RSVD 41732 IANA-RSVD 41733 IANA-RSVD 41734 IANA-RSVD 41735 IANA-RSVD 41736 IANA-RSVD 41737 IANA-RSVD 41738 IANA-RSVD 41739 IANA-RSVD 41740 IANA-RSVD 41741 IANA-RSVD 41742 IANA-RSVD 41743 IANA-RSVD 41744 IANA-RSVD 41745 IANA-RSVD 41746 IANA-RSVD 41747 IANA-RSVD 41748 IANA-RSVD 41749 IANA-RSVD 41750 IANA-RSVD 41751 IANA-RSVD 41752 IANA-RSVD 41753 IANA-RSVD 41754 IANA-RSVD 41755 IANA-RSVD 41756 IANA-RSVD 41757 IANA-RSVD 41758 IANA-RSVD 41759 IANA-RSVD 41760 IANA-RSVD 41761 IANA-RSVD 41762 IANA-RSVD 41763 IANA-RSVD 41764 IANA-RSVD 41765 IANA-RSVD 41766 IANA-RSVD 41767 IANA-RSVD 41768 IANA-RSVD 41769 IANA-RSVD 41770 IANA-RSVD 41771 IANA-RSVD 41772 IANA-RSVD 41773 IANA-RSVD 41774 IANA-RSVD 41775 IANA-RSVD 41776 IANA-RSVD 41777 IANA-RSVD 41778 IANA-RSVD 41779 IANA-RSVD 41780 IANA-RSVD 41781 IANA-RSVD 41782 IANA-RSVD 41783 IANA-RSVD 41784 IANA-RSVD 41785 IANA-RSVD 41786 IANA-RSVD 41787 IANA-RSVD 41788 IANA-RSVD 41789 IANA-RSVD 41790 IANA-RSVD 41791 IANA-RSVD 41792 IANA-RSVD 41793 IANA-RSVD 41794 IANA-RSVD 41795 IANA-RSVD 41796 IANA-RSVD 41797 IANA-RSVD 41798 IANA-RSVD 41799 IANA-RSVD 41800 IANA-RSVD 41801 IANA-RSVD 41802 IANA-RSVD 41803 IANA-RSVD 41804 IANA-RSVD 41805 IANA-RSVD 41806 IANA-RSVD 41807 IANA-RSVD 41808 IANA-RSVD 41809 IANA-RSVD 41810 IANA-RSVD 41811 IANA-RSVD 41812 IANA-RSVD 41813 IANA-RSVD 41814 IANA-RSVD 41815 IANA-RSVD 41816 IANA-RSVD 41817 IANA-RSVD 41818 IANA-RSVD 41819 IANA-RSVD 41820 IANA-RSVD 41821 IANA-RSVD 41822 IANA-RSVD 41823 IANA-RSVD 41824 IANA-RSVD 41825 IANA-RSVD 41826 IANA-RSVD 41827 IANA-RSVD 41828 IANA-RSVD 41829 IANA-RSVD 41830 IANA-RSVD 41831 IANA-RSVD 41832 IANA-RSVD 41833 IANA-RSVD 41834 IANA-RSVD 41835 IANA-RSVD 41836 IANA-RSVD 41837 IANA-RSVD 41838 IANA-RSVD 41839 IANA-RSVD 41840 IANA-RSVD 41841 IANA-RSVD 41842 IANA-RSVD 41843 IANA-RSVD 41844 IANA-RSVD 41845 IANA-RSVD 41846 IANA-RSVD 41847 IANA-RSVD 41848 IANA-RSVD 41849 IANA-RSVD 41850 IANA-RSVD 41851 IANA-RSVD 41852 IANA-RSVD 41853 IANA-RSVD 41854 IANA-RSVD 41855 IANA-RSVD 41856 IANA-RSVD 41857 IANA-RSVD 41858 IANA-RSVD 41859 IANA-RSVD 41860 IANA-RSVD 41861 IANA-RSVD 41862 IANA-RSVD 41863 IANA-RSVD 41864 IANA-RSVD 41865 IANA-RSVD 41866 IANA-RSVD 41867 IANA-RSVD 41868 IANA-RSVD 41869 IANA-RSVD 41870 IANA-RSVD 41871 IANA-RSVD 41872 IANA-RSVD 41873 IANA-RSVD 41874 IANA-RSVD 41875 IANA-RSVD 41876 IANA-RSVD 41877 IANA-RSVD 41878 IANA-RSVD 41879 IANA-RSVD 41880 IANA-RSVD 41881 IANA-RSVD 41882 IANA-RSVD 41883 IANA-RSVD 41884 IANA-RSVD 41885 IANA-RSVD 41886 IANA-RSVD 41887 IANA-RSVD 41888 IANA-RSVD 41889 IANA-RSVD 41890 IANA-RSVD 41891 IANA-RSVD 41892 IANA-RSVD 41893 IANA-RSVD 41894 IANA-RSVD 41895 IANA-RSVD 41896 IANA-RSVD 41897 IANA-RSVD 41898 IANA-RSVD 41899 IANA-RSVD 41900 IANA-RSVD 41901 IANA-RSVD 41902 IANA-RSVD 41903 IANA-RSVD 41904 IANA-RSVD 41905 IANA-RSVD 41906 IANA-RSVD 41907 IANA-RSVD 41908 IANA-RSVD 41909 IANA-RSVD 41910 IANA-RSVD 41911 IANA-RSVD 41912 IANA-RSVD 41913 IANA-RSVD 41914 IANA-RSVD 41915 IANA-RSVD 41916 IANA-RSVD 41917 IANA-RSVD 41918 IANA-RSVD 41919 IANA-RSVD 41920 IANA-RSVD 41921 IANA-RSVD 41922 IANA-RSVD 41923 IANA-RSVD 41924 IANA-RSVD 41925 IANA-RSVD 41926 IANA-RSVD 41927 IANA-RSVD 41928 IANA-RSVD 41929 IANA-RSVD 41930 IANA-RSVD 41931 IANA-RSVD 41932 IANA-RSVD 41933 IANA-RSVD 41934 IANA-RSVD 41935 IANA-RSVD 41936 IANA-RSVD 41937 IANA-RSVD 41938 IANA-RSVD 41939 IANA-RSVD 41940 IANA-RSVD 41941 IANA-RSVD 41942 IANA-RSVD 41943 IANA-RSVD 41944 IANA-RSVD 41945 IANA-RSVD 41946 IANA-RSVD 41947 IANA-RSVD 41948 IANA-RSVD 41949 IANA-RSVD 41950 IANA-RSVD 41951 IANA-RSVD 41952 IANA-RSVD 41953 IANA-RSVD 41954 IANA-RSVD 41955 IANA-RSVD 41956 IANA-RSVD 41957 IANA-RSVD 41958 IANA-RSVD 41959 IANA-RSVD 41960 IANA-RSVD 41961 IANA-RSVD 41962 IANA-RSVD 41963 IANA-RSVD 41964 IANA-RSVD 41965 IANA-RSVD 41966 IANA-RSVD 41967 IANA-RSVD 41968 IANA-RSVD 41969 IANA-RSVD 41970 IANA-RSVD 41971 IANA-RSVD 41972 IANA-RSVD 41973 IANA-RSVD 41974 IANA-RSVD 41975 IANA-RSVD 41976 IANA-RSVD 41977 IANA-RSVD 41978 IANA-RSVD 41979 IANA-RSVD 41980 IANA-RSVD 41981 IANA-RSVD 41982 IANA-RSVD 41983 IANA-RSVD 41984 IANA-RSVD 41985 IANA-RSVD 41986 IANA-RSVD 41987 IANA-RSVD 41988 IANA-RSVD 41989 IANA-RSVD 41990 IANA-RSVD 41991 IANA-RSVD 41992 IANA-RSVD 41993 IANA-RSVD 41994 IANA-RSVD 41995 IANA-RSVD 41996 IANA-RSVD 41997 IANA-RSVD 41998 IANA-RSVD 41999 IANA-RSVD 42000 IANA-RSVD 42001 IANA-RSVD 42002 IANA-RSVD 42003 IANA-RSVD 42004 IANA-RSVD 42005 IANA-RSVD 42006 IANA-RSVD 42007 IANA-RSVD 42008 IANA-RSVD 42009 IANA-RSVD 42010 IANA-RSVD 42011 IANA-RSVD 42012 IANA-RSVD 42013 IANA-RSVD 42014 IANA-RSVD 42015 IANA-RSVD 42016 IANA-RSVD 42017 IANA-RSVD 42018 IANA-RSVD 42019 IANA-RSVD 42020 IANA-RSVD 42021 IANA-RSVD 42022 IANA-RSVD 42023 IANA-RSVD 42024 IANA-RSVD 42025 IANA-RSVD 42026 IANA-RSVD 42027 IANA-RSVD 42028 IANA-RSVD 42029 IANA-RSVD 42030 IANA-RSVD 42031 IANA-RSVD 42032 IANA-RSVD 42033 IANA-RSVD 42034 IANA-RSVD 42035 IANA-RSVD 42036 IANA-RSVD 42037 IANA-RSVD 42038 IANA-RSVD 42039 IANA-RSVD 42040 IANA-RSVD 42041 IANA-RSVD 42042 IANA-RSVD 42043 IANA-RSVD 42044 IANA-RSVD 42045 IANA-RSVD 42046 IANA-RSVD 42047 IANA-RSVD 42048 IANA-RSVD 42049 IANA-RSVD 42050 IANA-RSVD 42051 IANA-RSVD 42052 IANA-RSVD 42053 IANA-RSVD 42054 IANA-RSVD 42055 IANA-RSVD 42056 IANA-RSVD 42057 IANA-RSVD 42058 IANA-RSVD 42059 IANA-RSVD 42060 IANA-RSVD 42061 IANA-RSVD 42062 IANA-RSVD 42063 IANA-RSVD 42064 IANA-RSVD 42065 IANA-RSVD 42066 IANA-RSVD 42067 IANA-RSVD 42068 IANA-RSVD 42069 IANA-RSVD 42070 IANA-RSVD 42071 IANA-RSVD 42072 IANA-RSVD 42073 IANA-RSVD 42074 IANA-RSVD 42075 IANA-RSVD 42076 IANA-RSVD 42077 IANA-RSVD 42078 IANA-RSVD 42079 IANA-RSVD 42080 IANA-RSVD 42081 IANA-RSVD 42082 IANA-RSVD 42083 IANA-RSVD 42084 IANA-RSVD 42085 IANA-RSVD 42086 IANA-RSVD 42087 IANA-RSVD 42088 IANA-RSVD 42089 IANA-RSVD 42090 IANA-RSVD 42091 IANA-RSVD 42092 IANA-RSVD 42093 IANA-RSVD 42094 IANA-RSVD 42095 IANA-RSVD 42096 IANA-RSVD 42097 IANA-RSVD 42098 IANA-RSVD 42099 IANA-RSVD 42100 IANA-RSVD 42101 IANA-RSVD 42102 IANA-RSVD 42103 IANA-RSVD 42104 IANA-RSVD 42105 IANA-RSVD 42106 IANA-RSVD 42107 IANA-RSVD 42108 IANA-RSVD 42109 IANA-RSVD 42110 IANA-RSVD 42111 IANA-RSVD 42112 IANA-RSVD 42113 IANA-RSVD 42114 IANA-RSVD 42115 IANA-RSVD 42116 IANA-RSVD 42117 IANA-RSVD 42118 IANA-RSVD 42119 IANA-RSVD 42120 IANA-RSVD 42121 IANA-RSVD 42122 IANA-RSVD 42123 IANA-RSVD 42124 IANA-RSVD 42125 IANA-RSVD 42126 IANA-RSVD 42127 IANA-RSVD 42128 IANA-RSVD 42129 IANA-RSVD 42130 IANA-RSVD 42131 IANA-RSVD 42132 IANA-RSVD 42133 IANA-RSVD 42134 IANA-RSVD 42135 IANA-RSVD 42136 IANA-RSVD 42137 IANA-RSVD 42138 IANA-RSVD 42139 IANA-RSVD 42140 IANA-RSVD 42141 IANA-RSVD 42142 IANA-RSVD 42143 IANA-RSVD 42144 IANA-RSVD 42145 IANA-RSVD 42146 IANA-RSVD 42147 IANA-RSVD 42148 IANA-RSVD 42149 IANA-RSVD 42150 IANA-RSVD 42151 IANA-RSVD 42152 IANA-RSVD 42153 IANA-RSVD 42154 IANA-RSVD 42155 IANA-RSVD 42156 IANA-RSVD 42157 IANA-RSVD 42158 IANA-RSVD 42159 IANA-RSVD 42160 IANA-RSVD 42161 IANA-RSVD 42162 IANA-RSVD 42163 IANA-RSVD 42164 IANA-RSVD 42165 IANA-RSVD 42166 IANA-RSVD 42167 IANA-RSVD 42168 IANA-RSVD 42169 IANA-RSVD 42170 IANA-RSVD 42171 IANA-RSVD 42172 IANA-RSVD 42173 IANA-RSVD 42174 IANA-RSVD 42175 IANA-RSVD 42176 IANA-RSVD 42177 IANA-RSVD 42178 IANA-RSVD 42179 IANA-RSVD 42180 IANA-RSVD 42181 IANA-RSVD 42182 IANA-RSVD 42183 IANA-RSVD 42184 IANA-RSVD 42185 IANA-RSVD 42186 IANA-RSVD 42187 IANA-RSVD 42188 IANA-RSVD 42189 IANA-RSVD 42190 IANA-RSVD 42191 IANA-RSVD 42192 IANA-RSVD 42193 IANA-RSVD 42194 IANA-RSVD 42195 IANA-RSVD 42196 IANA-RSVD 42197 IANA-RSVD 42198 IANA-RSVD 42199 IANA-RSVD 42200 IANA-RSVD 42201 IANA-RSVD 42202 IANA-RSVD 42203 IANA-RSVD 42204 IANA-RSVD 42205 IANA-RSVD 42206 IANA-RSVD 42207 IANA-RSVD 42208 IANA-RSVD 42209 IANA-RSVD 42210 IANA-RSVD 42211 IANA-RSVD 42212 IANA-RSVD 42213 IANA-RSVD 42214 IANA-RSVD 42215 IANA-RSVD 42216 IANA-RSVD 42217 IANA-RSVD 42218 IANA-RSVD 42219 IANA-RSVD 42220 IANA-RSVD 42221 IANA-RSVD 42222 IANA-RSVD 42223 IANA-RSVD 42224 IANA-RSVD 42225 IANA-RSVD 42226 IANA-RSVD 42227 IANA-RSVD 42228 IANA-RSVD 42229 IANA-RSVD 42230 IANA-RSVD 42231 IANA-RSVD 42232 IANA-RSVD 42233 IANA-RSVD 42234 IANA-RSVD 42235 IANA-RSVD 42236 IANA-RSVD 42237 IANA-RSVD 42238 IANA-RSVD 42239 IANA-RSVD 42240 IANA-RSVD 42241 IANA-RSVD 42242 IANA-RSVD 42243 IANA-RSVD 42244 IANA-RSVD 42245 IANA-RSVD 42246 IANA-RSVD 42247 IANA-RSVD 42248 IANA-RSVD 42249 IANA-RSVD 42250 IANA-RSVD 42251 IANA-RSVD 42252 IANA-RSVD 42253 IANA-RSVD 42254 IANA-RSVD 42255 IANA-RSVD 42256 IANA-RSVD 42257 IANA-RSVD 42258 IANA-RSVD 42259 IANA-RSVD 42260 IANA-RSVD 42261 IANA-RSVD 42262 IANA-RSVD 42263 IANA-RSVD 42264 IANA-RSVD 42265 IANA-RSVD 42266 IANA-RSVD 42267 IANA-RSVD 42268 IANA-RSVD 42269 IANA-RSVD 42270 IANA-RSVD 42271 IANA-RSVD 42272 IANA-RSVD 42273 IANA-RSVD 42274 IANA-RSVD 42275 IANA-RSVD 42276 IANA-RSVD 42277 IANA-RSVD 42278 IANA-RSVD 42279 IANA-RSVD 42280 IANA-RSVD 42281 IANA-RSVD 42282 IANA-RSVD 42283 IANA-RSVD 42284 IANA-RSVD 42285 IANA-RSVD 42286 IANA-RSVD 42287 IANA-RSVD 42288 IANA-RSVD 42289 IANA-RSVD 42290 IANA-RSVD 42291 IANA-RSVD 42292 IANA-RSVD 42293 IANA-RSVD 42294 IANA-RSVD 42295 IANA-RSVD 42296 IANA-RSVD 42297 IANA-RSVD 42298 IANA-RSVD 42299 IANA-RSVD 42300 IANA-RSVD 42301 IANA-RSVD 42302 IANA-RSVD 42303 IANA-RSVD 42304 IANA-RSVD 42305 IANA-RSVD 42306 IANA-RSVD 42307 IANA-RSVD 42308 IANA-RSVD 42309 IANA-RSVD 42310 IANA-RSVD 42311 IANA-RSVD 42312 IANA-RSVD 42313 IANA-RSVD 42314 IANA-RSVD 42315 IANA-RSVD 42316 IANA-RSVD 42317 IANA-RSVD 42318 IANA-RSVD 42319 IANA-RSVD 42320 IANA-RSVD 42321 IANA-RSVD 42322 IANA-RSVD 42323 IANA-RSVD 42324 IANA-RSVD 42325 IANA-RSVD 42326 IANA-RSVD 42327 IANA-RSVD 42328 IANA-RSVD 42329 IANA-RSVD 42330 IANA-RSVD 42331 IANA-RSVD 42332 IANA-RSVD 42333 IANA-RSVD 42334 IANA-RSVD 42335 IANA-RSVD 42336 IANA-RSVD 42337 IANA-RSVD 42338 IANA-RSVD 42339 IANA-RSVD 42340 IANA-RSVD 42341 IANA-RSVD 42342 IANA-RSVD 42343 IANA-RSVD 42344 IANA-RSVD 42345 IANA-RSVD 42346 IANA-RSVD 42347 IANA-RSVD 42348 IANA-RSVD 42349 IANA-RSVD 42350 IANA-RSVD 42351 IANA-RSVD 42352 IANA-RSVD 42353 IANA-RSVD 42354 IANA-RSVD 42355 IANA-RSVD 42356 IANA-RSVD 42357 IANA-RSVD 42358 IANA-RSVD 42359 IANA-RSVD 42360 IANA-RSVD 42361 IANA-RSVD 42362 IANA-RSVD 42363 IANA-RSVD 42364 IANA-RSVD 42365 IANA-RSVD 42366 IANA-RSVD 42367 IANA-RSVD 42368 IANA-RSVD 42369 IANA-RSVD 42370 IANA-RSVD 42371 IANA-RSVD 42372 IANA-RSVD 42373 IANA-RSVD 42374 IANA-RSVD 42375 IANA-RSVD 42376 IANA-RSVD 42377 IANA-RSVD 42378 IANA-RSVD 42379 IANA-RSVD 42380 IANA-RSVD 42381 IANA-RSVD 42382 IANA-RSVD 42383 IANA-RSVD 42384 IANA-RSVD 42385 IANA-RSVD 42386 IANA-RSVD 42387 IANA-RSVD 42388 IANA-RSVD 42389 IANA-RSVD 42390 IANA-RSVD 42391 IANA-RSVD 42392 IANA-RSVD 42393 IANA-RSVD 42394 IANA-RSVD 42395 IANA-RSVD 42396 IANA-RSVD 42397 IANA-RSVD 42398 IANA-RSVD 42399 IANA-RSVD 42400 IANA-RSVD 42401 IANA-RSVD 42402 IANA-RSVD 42403 IANA-RSVD 42404 IANA-RSVD 42405 IANA-RSVD 42406 IANA-RSVD 42407 IANA-RSVD 42408 IANA-RSVD 42409 IANA-RSVD 42410 IANA-RSVD 42411 IANA-RSVD 42412 IANA-RSVD 42413 IANA-RSVD 42414 IANA-RSVD 42415 IANA-RSVD 42416 IANA-RSVD 42417 IANA-RSVD 42418 IANA-RSVD 42419 IANA-RSVD 42420 IANA-RSVD 42421 IANA-RSVD 42422 IANA-RSVD 42423 IANA-RSVD 42424 IANA-RSVD 42425 IANA-RSVD 42426 IANA-RSVD 42427 IANA-RSVD 42428 IANA-RSVD 42429 IANA-RSVD 42430 IANA-RSVD 42431 IANA-RSVD 42432 IANA-RSVD 42433 IANA-RSVD 42434 IANA-RSVD 42435 IANA-RSVD 42436 IANA-RSVD 42437 IANA-RSVD 42438 IANA-RSVD 42439 IANA-RSVD 42440 IANA-RSVD 42441 IANA-RSVD 42442 IANA-RSVD 42443 IANA-RSVD 42444 IANA-RSVD 42445 IANA-RSVD 42446 IANA-RSVD 42447 IANA-RSVD 42448 IANA-RSVD 42449 IANA-RSVD 42450 IANA-RSVD 42451 IANA-RSVD 42452 IANA-RSVD 42453 IANA-RSVD 42454 IANA-RSVD 42455 IANA-RSVD 42456 IANA-RSVD 42457 IANA-RSVD 42458 IANA-RSVD 42459 IANA-RSVD 42460 IANA-RSVD 42461 IANA-RSVD 42462 IANA-RSVD 42463 IANA-RSVD 42464 IANA-RSVD 42465 IANA-RSVD 42466 IANA-RSVD 42467 IANA-RSVD 42468 IANA-RSVD 42469 IANA-RSVD 42470 IANA-RSVD 42471 IANA-RSVD 42472 IANA-RSVD 42473 IANA-RSVD 42474 IANA-RSVD 42475 IANA-RSVD 42476 IANA-RSVD 42477 IANA-RSVD 42478 IANA-RSVD 42479 IANA-RSVD 42480 IANA-RSVD 42481 IANA-RSVD 42482 IANA-RSVD 42483 IANA-RSVD 42484 IANA-RSVD 42485 IANA-RSVD 42486 IANA-RSVD 42487 IANA-RSVD 42488 IANA-RSVD 42489 IANA-RSVD 42490 IANA-RSVD 42491 IANA-RSVD 42492 IANA-RSVD 42493 IANA-RSVD 42494 IANA-RSVD 42495 IANA-RSVD 42496 IANA-RSVD 42497 IANA-RSVD 42498 IANA-RSVD 42499 IANA-RSVD 42500 IANA-RSVD 42501 IANA-RSVD 42502 IANA-RSVD 42503 IANA-RSVD 42504 IANA-RSVD 42505 IANA-RSVD 42506 IANA-RSVD 42507 IANA-RSVD 42508 IANA-RSVD 42509 IANA-RSVD 42510 IANA-RSVD 42511 IANA-RSVD 42512 IANA-RSVD 42513 IANA-RSVD 42514 IANA-RSVD 42515 IANA-RSVD 42516 IANA-RSVD 42517 IANA-RSVD 42518 IANA-RSVD 42519 IANA-RSVD 42520 IANA-RSVD 42521 IANA-RSVD 42522 IANA-RSVD 42523 IANA-RSVD 42524 IANA-RSVD 42525 IANA-RSVD 42526 IANA-RSVD 42527 IANA-RSVD 42528 IANA-RSVD 42529 IANA-RSVD 42530 IANA-RSVD 42531 IANA-RSVD 42532 IANA-RSVD 42533 IANA-RSVD 42534 IANA-RSVD 42535 IANA-RSVD 42536 IANA-RSVD 42537 IANA-RSVD 42538 IANA-RSVD 42539 IANA-RSVD 42540 IANA-RSVD 42541 IANA-RSVD 42542 IANA-RSVD 42543 IANA-RSVD 42544 IANA-RSVD 42545 IANA-RSVD 42546 IANA-RSVD 42547 IANA-RSVD 42548 IANA-RSVD 42549 IANA-RSVD 42550 IANA-RSVD 42551 IANA-RSVD 42552 IANA-RSVD 42553 IANA-RSVD 42554 IANA-RSVD 42555 IANA-RSVD 42556 IANA-RSVD 42557 IANA-RSVD 42558 IANA-RSVD 42559 IANA-RSVD 42560 IANA-RSVD 42561 IANA-RSVD 42562 IANA-RSVD 42563 IANA-RSVD 42564 IANA-RSVD 42565 IANA-RSVD 42566 IANA-RSVD 42567 IANA-RSVD 42568 IANA-RSVD 42569 IANA-RSVD 42570 IANA-RSVD 42571 IANA-RSVD 42572 IANA-RSVD 42573 IANA-RSVD 42574 IANA-RSVD 42575 IANA-RSVD 42576 IANA-RSVD 42577 IANA-RSVD 42578 IANA-RSVD 42579 IANA-RSVD 42580 IANA-RSVD 42581 IANA-RSVD 42582 IANA-RSVD 42583 IANA-RSVD 42584 IANA-RSVD 42585 IANA-RSVD 42586 IANA-RSVD 42587 IANA-RSVD 42588 IANA-RSVD 42589 IANA-RSVD 42590 IANA-RSVD 42591 IANA-RSVD 42592 IANA-RSVD 42593 IANA-RSVD 42594 IANA-RSVD 42595 IANA-RSVD 42596 IANA-RSVD 42597 IANA-RSVD 42598 IANA-RSVD 42599 IANA-RSVD 42600 IANA-RSVD 42601 IANA-RSVD 42602 IANA-RSVD 42603 IANA-RSVD 42604 IANA-RSVD 42605 IANA-RSVD 42606 IANA-RSVD 42607 IANA-RSVD 42608 IANA-RSVD 42609 IANA-RSVD 42610 IANA-RSVD 42611 IANA-RSVD 42612 IANA-RSVD 42613 IANA-RSVD 42614 IANA-RSVD 42615 IANA-RSVD 42616 IANA-RSVD 42617 IANA-RSVD 42618 IANA-RSVD 42619 IANA-RSVD 42620 IANA-RSVD 42621 IANA-RSVD 42622 IANA-RSVD 42623 IANA-RSVD 42624 IANA-RSVD 42625 IANA-RSVD 42626 IANA-RSVD 42627 IANA-RSVD 42628 IANA-RSVD 42629 IANA-RSVD 42630 IANA-RSVD 42631 IANA-RSVD 42632 IANA-RSVD 42633 IANA-RSVD 42634 IANA-RSVD 42635 IANA-RSVD 42636 IANA-RSVD 42637 IANA-RSVD 42638 IANA-RSVD 42639 IANA-RSVD 42640 IANA-RSVD 42641 IANA-RSVD 42642 IANA-RSVD 42643 IANA-RSVD 42644 IANA-RSVD 42645 IANA-RSVD 42646 IANA-RSVD 42647 IANA-RSVD 42648 IANA-RSVD 42649 IANA-RSVD 42650 IANA-RSVD 42651 IANA-RSVD 42652 IANA-RSVD 42653 IANA-RSVD 42654 IANA-RSVD 42655 IANA-RSVD 42656 IANA-RSVD 42657 IANA-RSVD 42658 IANA-RSVD 42659 IANA-RSVD 42660 IANA-RSVD 42661 IANA-RSVD 42662 IANA-RSVD 42663 IANA-RSVD 42664 IANA-RSVD 42665 IANA-RSVD 42666 IANA-RSVD 42667 IANA-RSVD 42668 IANA-RSVD 42669 IANA-RSVD 42670 IANA-RSVD 42671 IANA-RSVD 42672 IANA-RSVD 42673 IANA-RSVD 42674 IANA-RSVD 42675 IANA-RSVD 42676 IANA-RSVD 42677 IANA-RSVD 42678 IANA-RSVD 42679 IANA-RSVD 42680 IANA-RSVD 42681 IANA-RSVD 42682 IANA-RSVD 42683 IANA-RSVD 42684 IANA-RSVD 42685 IANA-RSVD 42686 IANA-RSVD 42687 IANA-RSVD 42688 IANA-RSVD 42689 IANA-RSVD 42690 IANA-RSVD 42691 IANA-RSVD 42692 IANA-RSVD 42693 IANA-RSVD 42694 IANA-RSVD 42695 IANA-RSVD 42696 IANA-RSVD 42697 IANA-RSVD 42698 IANA-RSVD 42699 IANA-RSVD 42700 IANA-RSVD 42701 IANA-RSVD 42702 IANA-RSVD 42703 IANA-RSVD 42704 IANA-RSVD 42705 IANA-RSVD 42706 IANA-RSVD 42707 IANA-RSVD 42708 IANA-RSVD 42709 IANA-RSVD 42710 IANA-RSVD 42711 IANA-RSVD 42712 IANA-RSVD 42713 IANA-RSVD 42714 IANA-RSVD 42715 IANA-RSVD 42716 IANA-RSVD 42717 IANA-RSVD 42718 IANA-RSVD 42719 IANA-RSVD 42720 IANA-RSVD 42721 IANA-RSVD 42722 IANA-RSVD 42723 IANA-RSVD 42724 IANA-RSVD 42725 IANA-RSVD 42726 IANA-RSVD 42727 IANA-RSVD 42728 IANA-RSVD 42729 IANA-RSVD 42730 IANA-RSVD 42731 IANA-RSVD 42732 IANA-RSVD 42733 IANA-RSVD 42734 IANA-RSVD 42735 IANA-RSVD 42736 IANA-RSVD 42737 IANA-RSVD 42738 IANA-RSVD 42739 IANA-RSVD 42740 IANA-RSVD 42741 IANA-RSVD 42742 IANA-RSVD 42743 IANA-RSVD 42744 IANA-RSVD 42745 IANA-RSVD 42746 IANA-RSVD 42747 IANA-RSVD 42748 IANA-RSVD 42749 IANA-RSVD 42750 IANA-RSVD 42751 IANA-RSVD 42752 IANA-RSVD 42753 IANA-RSVD 42754 IANA-RSVD 42755 IANA-RSVD 42756 IANA-RSVD 42757 IANA-RSVD 42758 IANA-RSVD 42759 IANA-RSVD 42760 IANA-RSVD 42761 IANA-RSVD 42762 IANA-RSVD 42763 IANA-RSVD 42764 IANA-RSVD 42765 IANA-RSVD 42766 IANA-RSVD 42767 IANA-RSVD 42768 IANA-RSVD 42769 IANA-RSVD 42770 IANA-RSVD 42771 IANA-RSVD 42772 IANA-RSVD 42773 IANA-RSVD 42774 IANA-RSVD 42775 IANA-RSVD 42776 IANA-RSVD 42777 IANA-RSVD 42778 IANA-RSVD 42779 IANA-RSVD 42780 IANA-RSVD 42781 IANA-RSVD 42782 IANA-RSVD 42783 IANA-RSVD 42784 IANA-RSVD 42785 IANA-RSVD 42786 IANA-RSVD 42787 IANA-RSVD 42788 IANA-RSVD 42789 IANA-RSVD 42790 IANA-RSVD 42791 IANA-RSVD 42792 IANA-RSVD 42793 IANA-RSVD 42794 IANA-RSVD 42795 IANA-RSVD 42796 IANA-RSVD 42797 IANA-RSVD 42798 IANA-RSVD 42799 IANA-RSVD 42800 IANA-RSVD 42801 IANA-RSVD 42802 IANA-RSVD 42803 IANA-RSVD 42804 IANA-RSVD 42805 IANA-RSVD 42806 IANA-RSVD 42807 IANA-RSVD 42808 IANA-RSVD 42809 IANA-RSVD 42810 IANA-RSVD 42811 IANA-RSVD 42812 IANA-RSVD 42813 IANA-RSVD 42814 IANA-RSVD 42815 IANA-RSVD 42816 IANA-RSVD 42817 IANA-RSVD 42818 IANA-RSVD 42819 IANA-RSVD 42820 IANA-RSVD 42821 IANA-RSVD 42822 IANA-RSVD 42823 IANA-RSVD 42824 IANA-RSVD 42825 IANA-RSVD 42826 IANA-RSVD 42827 IANA-RSVD 42828 IANA-RSVD 42829 IANA-RSVD 42830 IANA-RSVD 42831 IANA-RSVD 42832 IANA-RSVD 42833 IANA-RSVD 42834 IANA-RSVD 42835 IANA-RSVD 42836 IANA-RSVD 42837 IANA-RSVD 42838 IANA-RSVD 42839 IANA-RSVD 42840 IANA-RSVD 42841 IANA-RSVD 42842 IANA-RSVD 42843 IANA-RSVD 42844 IANA-RSVD 42845 IANA-RSVD 42846 IANA-RSVD 42847 IANA-RSVD 42848 IANA-RSVD 42849 IANA-RSVD 42850 IANA-RSVD 42851 IANA-RSVD 42852 IANA-RSVD 42853 IANA-RSVD 42854 IANA-RSVD 42855 IANA-RSVD 42856 IANA-RSVD 42857 IANA-RSVD 42858 IANA-RSVD 42859 IANA-RSVD 42860 IANA-RSVD 42861 IANA-RSVD 42862 IANA-RSVD 42863 IANA-RSVD 42864 IANA-RSVD 42865 IANA-RSVD 42866 IANA-RSVD 42867 IANA-RSVD 42868 IANA-RSVD 42869 IANA-RSVD 42870 IANA-RSVD 42871 IANA-RSVD 42872 IANA-RSVD 42873 IANA-RSVD 42874 IANA-RSVD 42875 IANA-RSVD 42876 IANA-RSVD 42877 IANA-RSVD 42878 IANA-RSVD 42879 IANA-RSVD 42880 IANA-RSVD 42881 IANA-RSVD 42882 IANA-RSVD 42883 IANA-RSVD 42884 IANA-RSVD 42885 IANA-RSVD 42886 IANA-RSVD 42887 IANA-RSVD 42888 IANA-RSVD 42889 IANA-RSVD 42890 IANA-RSVD 42891 IANA-RSVD 42892 IANA-RSVD 42893 IANA-RSVD 42894 IANA-RSVD 42895 IANA-RSVD 42896 IANA-RSVD 42897 IANA-RSVD 42898 IANA-RSVD 42899 IANA-RSVD 42900 IANA-RSVD 42901 IANA-RSVD 42902 IANA-RSVD 42903 IANA-RSVD 42904 IANA-RSVD 42905 IANA-RSVD 42906 IANA-RSVD 42907 IANA-RSVD 42908 IANA-RSVD 42909 IANA-RSVD 42910 IANA-RSVD 42911 IANA-RSVD 42912 IANA-RSVD 42913 IANA-RSVD 42914 IANA-RSVD 42915 IANA-RSVD 42916 IANA-RSVD 42917 IANA-RSVD 42918 IANA-RSVD 42919 IANA-RSVD 42920 IANA-RSVD 42921 IANA-RSVD 42922 IANA-RSVD 42923 IANA-RSVD 42924 IANA-RSVD 42925 IANA-RSVD 42926 IANA-RSVD 42927 IANA-RSVD 42928 IANA-RSVD 42929 IANA-RSVD 42930 IANA-RSVD 42931 IANA-RSVD 42932 IANA-RSVD 42933 IANA-RSVD 42934 IANA-RSVD 42935 IANA-RSVD 42936 IANA-RSVD 42937 IANA-RSVD 42938 IANA-RSVD 42939 IANA-RSVD 42940 IANA-RSVD 42941 IANA-RSVD 42942 IANA-RSVD 42943 IANA-RSVD 42944 IANA-RSVD 42945 IANA-RSVD 42946 IANA-RSVD 42947 IANA-RSVD 42948 IANA-RSVD 42949 IANA-RSVD 42950 IANA-RSVD 42951 IANA-RSVD 42952 IANA-RSVD 42953 IANA-RSVD 42954 IANA-RSVD 42955 IANA-RSVD 42956 IANA-RSVD 42957 IANA-RSVD 42958 IANA-RSVD 42959 IANA-RSVD 42960 IANA-RSVD 42961 IANA-RSVD 42962 IANA-RSVD 42963 IANA-RSVD 42964 IANA-RSVD 42965 IANA-RSVD 42966 IANA-RSVD 42967 IANA-RSVD 42968 IANA-RSVD 42969 IANA-RSVD 42970 IANA-RSVD 42971 IANA-RSVD 42972 IANA-RSVD 42973 IANA-RSVD 42974 IANA-RSVD 42975 IANA-RSVD 42976 IANA-RSVD 42977 IANA-RSVD 42978 IANA-RSVD 42979 IANA-RSVD 42980 IANA-RSVD 42981 IANA-RSVD 42982 IANA-RSVD 42983 IANA-RSVD 42984 IANA-RSVD 42985 IANA-RSVD 42986 IANA-RSVD 42987 IANA-RSVD 42988 IANA-RSVD 42989 IANA-RSVD 42990 IANA-RSVD 42991 IANA-RSVD 42992 IANA-RSVD 42993 IANA-RSVD 42994 IANA-RSVD 42995 IANA-RSVD 42996 IANA-RSVD 42997 IANA-RSVD 42998 IANA-RSVD 42999 IANA-RSVD 43000 IANA-RSVD 43001 IANA-RSVD 43002 IANA-RSVD 43003 IANA-RSVD 43004 IANA-RSVD 43005 IANA-RSVD 43006 IANA-RSVD 43007 IANA-RSVD 43008 IANA-RSVD 43009 IANA-RSVD 43010 IANA-RSVD 43011 IANA-RSVD 43012 IANA-RSVD 43013 IANA-RSVD 43014 IANA-RSVD 43015 IANA-RSVD 43016 IANA-RSVD 43017 IANA-RSVD 43018 IANA-RSVD 43019 IANA-RSVD 43020 IANA-RSVD 43021 IANA-RSVD 43022 IANA-RSVD 43023 IANA-RSVD 43024 IANA-RSVD 43025 IANA-RSVD 43026 IANA-RSVD 43027 IANA-RSVD 43028 IANA-RSVD 43029 IANA-RSVD 43030 IANA-RSVD 43031 IANA-RSVD 43032 IANA-RSVD 43033 IANA-RSVD 43034 IANA-RSVD 43035 IANA-RSVD 43036 IANA-RSVD 43037 IANA-RSVD 43038 IANA-RSVD 43039 IANA-RSVD 43040 IANA-RSVD 43041 IANA-RSVD 43042 IANA-RSVD 43043 IANA-RSVD 43044 IANA-RSVD 43045 IANA-RSVD 43046 IANA-RSVD 43047 IANA-RSVD 43048 IANA-RSVD 43049 IANA-RSVD 43050 IANA-RSVD 43051 IANA-RSVD 43052 IANA-RSVD 43053 IANA-RSVD 43054 IANA-RSVD 43055 IANA-RSVD 43056 IANA-RSVD 43057 IANA-RSVD 43058 IANA-RSVD 43059 IANA-RSVD 43060 IANA-RSVD 43061 IANA-RSVD 43062 IANA-RSVD 43063 IANA-RSVD 43064 IANA-RSVD 43065 IANA-RSVD 43066 IANA-RSVD 43067 IANA-RSVD 43068 IANA-RSVD 43069 IANA-RSVD 43070 IANA-RSVD 43071 IANA-RSVD 43072 IANA-RSVD 43073 IANA-RSVD 43074 IANA-RSVD 43075 IANA-RSVD 43076 IANA-RSVD 43077 IANA-RSVD 43078 IANA-RSVD 43079 IANA-RSVD 43080 IANA-RSVD 43081 IANA-RSVD 43082 IANA-RSVD 43083 IANA-RSVD 43084 IANA-RSVD 43085 IANA-RSVD 43086 IANA-RSVD 43087 IANA-RSVD 43088 IANA-RSVD 43089 IANA-RSVD 43090 IANA-RSVD 43091 IANA-RSVD 43092 IANA-RSVD 43093 IANA-RSVD 43094 IANA-RSVD 43095 IANA-RSVD 43096 IANA-RSVD 43097 IANA-RSVD 43098 IANA-RSVD 43099 IANA-RSVD 43100 IANA-RSVD 43101 IANA-RSVD 43102 IANA-RSVD 43103 IANA-RSVD 43104 IANA-RSVD 43105 IANA-RSVD 43106 IANA-RSVD 43107 IANA-RSVD 43108 IANA-RSVD 43109 IANA-RSVD 43110 IANA-RSVD 43111 IANA-RSVD 43112 IANA-RSVD 43113 IANA-RSVD 43114 IANA-RSVD 43115 IANA-RSVD 43116 IANA-RSVD 43117 IANA-RSVD 43118 IANA-RSVD 43119 IANA-RSVD 43120 IANA-RSVD 43121 IANA-RSVD 43122 IANA-RSVD 43123 IANA-RSVD 43124 IANA-RSVD 43125 IANA-RSVD 43126 IANA-RSVD 43127 IANA-RSVD 43128 IANA-RSVD 43129 IANA-RSVD 43130 IANA-RSVD 43131 IANA-RSVD 43132 IANA-RSVD 43133 IANA-RSVD 43134 IANA-RSVD 43135 IANA-RSVD 43136 IANA-RSVD 43137 IANA-RSVD 43138 IANA-RSVD 43139 IANA-RSVD 43140 IANA-RSVD 43141 IANA-RSVD 43142 IANA-RSVD 43143 IANA-RSVD 43144 IANA-RSVD 43145 IANA-RSVD 43146 IANA-RSVD 43147 IANA-RSVD 43148 IANA-RSVD 43149 IANA-RSVD 43150 IANA-RSVD 43151 IANA-RSVD 43152 IANA-RSVD 43153 IANA-RSVD 43154 IANA-RSVD 43155 IANA-RSVD 43156 IANA-RSVD 43157 IANA-RSVD 43158 IANA-RSVD 43159 IANA-RSVD 43160 IANA-RSVD 43161 IANA-RSVD 43162 IANA-RSVD 43163 IANA-RSVD 43164 IANA-RSVD 43165 IANA-RSVD 43166 IANA-RSVD 43167 IANA-RSVD 43168 IANA-RSVD 43169 IANA-RSVD 43170 IANA-RSVD 43171 IANA-RSVD 43172 IANA-RSVD 43173 IANA-RSVD 43174 IANA-RSVD 43175 IANA-RSVD 43176 IANA-RSVD 43177 IANA-RSVD 43178 IANA-RSVD 43179 IANA-RSVD 43180 IANA-RSVD 43181 IANA-RSVD 43182 IANA-RSVD 43183 IANA-RSVD 43184 IANA-RSVD 43185 IANA-RSVD 43186 IANA-RSVD 43187 IANA-RSVD 43188 IANA-RSVD 43189 IANA-RSVD 43190 IANA-RSVD 43191 IANA-RSVD 43192 IANA-RSVD 43193 IANA-RSVD 43194 IANA-RSVD 43195 IANA-RSVD 43196 IANA-RSVD 43197 IANA-RSVD 43198 IANA-RSVD 43199 IANA-RSVD 43200 IANA-RSVD 43201 IANA-RSVD 43202 IANA-RSVD 43203 IANA-RSVD 43204 IANA-RSVD 43205 IANA-RSVD 43206 IANA-RSVD 43207 IANA-RSVD 43208 IANA-RSVD 43209 IANA-RSVD 43210 IANA-RSVD 43211 IANA-RSVD 43212 IANA-RSVD 43213 IANA-RSVD 43214 IANA-RSVD 43215 IANA-RSVD 43216 IANA-RSVD 43217 IANA-RSVD 43218 IANA-RSVD 43219 IANA-RSVD 43220 IANA-RSVD 43221 IANA-RSVD 43222 IANA-RSVD 43223 IANA-RSVD 43224 IANA-RSVD 43225 IANA-RSVD 43226 IANA-RSVD 43227 IANA-RSVD 43228 IANA-RSVD 43229 IANA-RSVD 43230 IANA-RSVD 43231 IANA-RSVD 43232 IANA-RSVD 43233 IANA-RSVD 43234 IANA-RSVD 43235 IANA-RSVD 43236 IANA-RSVD 43237 IANA-RSVD 43238 IANA-RSVD 43239 IANA-RSVD 43240 IANA-RSVD 43241 IANA-RSVD 43242 IANA-RSVD 43243 IANA-RSVD 43244 IANA-RSVD 43245 IANA-RSVD 43246 IANA-RSVD 43247 IANA-RSVD 43248 IANA-RSVD 43249 IANA-RSVD 43250 IANA-RSVD 43251 IANA-RSVD 43252 IANA-RSVD 43253 IANA-RSVD 43254 IANA-RSVD 43255 IANA-RSVD 43256 IANA-RSVD 43257 IANA-RSVD 43258 IANA-RSVD 43259 IANA-RSVD 43260 IANA-RSVD 43261 IANA-RSVD 43262 IANA-RSVD 43263 IANA-RSVD 43264 IANA-RSVD 43265 IANA-RSVD 43266 IANA-RSVD 43267 IANA-RSVD 43268 IANA-RSVD 43269 IANA-RSVD 43270 IANA-RSVD 43271 IANA-RSVD 43272 IANA-RSVD 43273 IANA-RSVD 43274 IANA-RSVD 43275 IANA-RSVD 43276 IANA-RSVD 43277 IANA-RSVD 43278 IANA-RSVD 43279 IANA-RSVD 43280 IANA-RSVD 43281 IANA-RSVD 43282 IANA-RSVD 43283 IANA-RSVD 43284 IANA-RSVD 43285 IANA-RSVD 43286 IANA-RSVD 43287 IANA-RSVD 43288 IANA-RSVD 43289 IANA-RSVD 43290 IANA-RSVD 43291 IANA-RSVD 43292 IANA-RSVD 43293 IANA-RSVD 43294 IANA-RSVD 43295 IANA-RSVD 43296 IANA-RSVD 43297 IANA-RSVD 43298 IANA-RSVD 43299 IANA-RSVD 43300 IANA-RSVD 43301 IANA-RSVD 43302 IANA-RSVD 43303 IANA-RSVD 43304 IANA-RSVD 43305 IANA-RSVD 43306 IANA-RSVD 43307 IANA-RSVD 43308 IANA-RSVD 43309 IANA-RSVD 43310 IANA-RSVD 43311 IANA-RSVD 43312 IANA-RSVD 43313 IANA-RSVD 43314 IANA-RSVD 43315 IANA-RSVD 43316 IANA-RSVD 43317 IANA-RSVD 43318 IANA-RSVD 43319 IANA-RSVD 43320 IANA-RSVD 43321 IANA-RSVD 43322 IANA-RSVD 43323 IANA-RSVD 43324 IANA-RSVD 43325 IANA-RSVD 43326 IANA-RSVD 43327 IANA-RSVD 43328 IANA-RSVD 43329 IANA-RSVD 43330 IANA-RSVD 43331 IANA-RSVD 43332 IANA-RSVD 43333 IANA-RSVD 43334 IANA-RSVD 43335 IANA-RSVD 43336 IANA-RSVD 43337 IANA-RSVD 43338 IANA-RSVD 43339 IANA-RSVD 43340 IANA-RSVD 43341 IANA-RSVD 43342 IANA-RSVD 43343 IANA-RSVD 43344 IANA-RSVD 43345 IANA-RSVD 43346 IANA-RSVD 43347 IANA-RSVD 43348 IANA-RSVD 43349 IANA-RSVD 43350 IANA-RSVD 43351 IANA-RSVD 43352 IANA-RSVD 43353 IANA-RSVD 43354 IANA-RSVD 43355 IANA-RSVD 43356 IANA-RSVD 43357 IANA-RSVD 43358 IANA-RSVD 43359 IANA-RSVD 43360 IANA-RSVD 43361 IANA-RSVD 43362 IANA-RSVD 43363 IANA-RSVD 43364 IANA-RSVD 43365 IANA-RSVD 43366 IANA-RSVD 43367 IANA-RSVD 43368 IANA-RSVD 43369 IANA-RSVD 43370 IANA-RSVD 43371 IANA-RSVD 43372 IANA-RSVD 43373 IANA-RSVD 43374 IANA-RSVD 43375 IANA-RSVD 43376 IANA-RSVD 43377 IANA-RSVD 43378 IANA-RSVD 43379 IANA-RSVD 43380 IANA-RSVD 43381 IANA-RSVD 43382 IANA-RSVD 43383 IANA-RSVD 43384 IANA-RSVD 43385 IANA-RSVD 43386 IANA-RSVD 43387 IANA-RSVD 43388 IANA-RSVD 43389 IANA-RSVD 43390 IANA-RSVD 43391 IANA-RSVD 43392 IANA-RSVD 43393 IANA-RSVD 43394 IANA-RSVD 43395 IANA-RSVD 43396 IANA-RSVD 43397 IANA-RSVD 43398 IANA-RSVD 43399 IANA-RSVD 43400 IANA-RSVD 43401 IANA-RSVD 43402 IANA-RSVD 43403 IANA-RSVD 43404 IANA-RSVD 43405 IANA-RSVD 43406 IANA-RSVD 43407 IANA-RSVD 43408 IANA-RSVD 43409 IANA-RSVD 43410 IANA-RSVD 43411 IANA-RSVD 43412 IANA-RSVD 43413 IANA-RSVD 43414 IANA-RSVD 43415 IANA-RSVD 43416 IANA-RSVD 43417 IANA-RSVD 43418 IANA-RSVD 43419 IANA-RSVD 43420 IANA-RSVD 43421 IANA-RSVD 43422 IANA-RSVD 43423 IANA-RSVD 43424 IANA-RSVD 43425 IANA-RSVD 43426 IANA-RSVD 43427 IANA-RSVD 43428 IANA-RSVD 43429 IANA-RSVD 43430 IANA-RSVD 43431 IANA-RSVD 43432 IANA-RSVD 43433 IANA-RSVD 43434 IANA-RSVD 43435 IANA-RSVD 43436 IANA-RSVD 43437 IANA-RSVD 43438 IANA-RSVD 43439 IANA-RSVD 43440 IANA-RSVD 43441 IANA-RSVD 43442 IANA-RSVD 43443 IANA-RSVD 43444 IANA-RSVD 43445 IANA-RSVD 43446 IANA-RSVD 43447 IANA-RSVD 43448 IANA-RSVD 43449 IANA-RSVD 43450 IANA-RSVD 43451 IANA-RSVD 43452 IANA-RSVD 43453 IANA-RSVD 43454 IANA-RSVD 43455 IANA-RSVD 43456 IANA-RSVD 43457 IANA-RSVD 43458 IANA-RSVD 43459 IANA-RSVD 43460 IANA-RSVD 43461 IANA-RSVD 43462 IANA-RSVD 43463 IANA-RSVD 43464 IANA-RSVD 43465 IANA-RSVD 43466 IANA-RSVD 43467 IANA-RSVD 43468 IANA-RSVD 43469 IANA-RSVD 43470 IANA-RSVD 43471 IANA-RSVD 43472 IANA-RSVD 43473 IANA-RSVD 43474 IANA-RSVD 43475 IANA-RSVD 43476 IANA-RSVD 43477 IANA-RSVD 43478 IANA-RSVD 43479 IANA-RSVD 43480 IANA-RSVD 43481 IANA-RSVD 43482 IANA-RSVD 43483 IANA-RSVD 43484 IANA-RSVD 43485 IANA-RSVD 43486 IANA-RSVD 43487 IANA-RSVD 43488 IANA-RSVD 43489 IANA-RSVD 43490 IANA-RSVD 43491 IANA-RSVD 43492 IANA-RSVD 43493 IANA-RSVD 43494 IANA-RSVD 43495 IANA-RSVD 43496 IANA-RSVD 43497 IANA-RSVD 43498 IANA-RSVD 43499 IANA-RSVD 43500 IANA-RSVD 43501 IANA-RSVD 43502 IANA-RSVD 43503 IANA-RSVD 43504 IANA-RSVD 43505 IANA-RSVD 43506 IANA-RSVD 43507 IANA-RSVD 43508 IANA-RSVD 43509 IANA-RSVD 43510 IANA-RSVD 43511 IANA-RSVD 43512 IANA-RSVD 43513 IANA-RSVD 43514 IANA-RSVD 43515 IANA-RSVD 43516 IANA-RSVD 43517 IANA-RSVD 43518 IANA-RSVD 43519 IANA-RSVD 43520 IANA-RSVD 43521 IANA-RSVD 43522 IANA-RSVD 43523 IANA-RSVD 43524 IANA-RSVD 43525 IANA-RSVD 43526 IANA-RSVD 43527 IANA-RSVD 43528 IANA-RSVD 43529 IANA-RSVD 43530 IANA-RSVD 43531 IANA-RSVD 43532 IANA-RSVD 43533 IANA-RSVD 43534 IANA-RSVD 43535 IANA-RSVD 43536 IANA-RSVD 43537 IANA-RSVD 43538 IANA-RSVD 43539 IANA-RSVD 43540 IANA-RSVD 43541 IANA-RSVD 43542 IANA-RSVD 43543 IANA-RSVD 43544 IANA-RSVD 43545 IANA-RSVD 43546 IANA-RSVD 43547 IANA-RSVD 43548 IANA-RSVD 43549 IANA-RSVD 43550 IANA-RSVD 43551 IANA-RSVD 43552 IANA-RSVD 43553 IANA-RSVD 43554 IANA-RSVD 43555 IANA-RSVD 43556 IANA-RSVD 43557 IANA-RSVD 43558 IANA-RSVD 43559 IANA-RSVD 43560 IANA-RSVD 43561 IANA-RSVD 43562 IANA-RSVD 43563 IANA-RSVD 43564 IANA-RSVD 43565 IANA-RSVD 43566 IANA-RSVD 43567 IANA-RSVD 43568 IANA-RSVD 43569 IANA-RSVD 43570 IANA-RSVD 43571 IANA-RSVD 43572 IANA-RSVD 43573 IANA-RSVD 43574 IANA-RSVD 43575 IANA-RSVD 43576 IANA-RSVD 43577 IANA-RSVD 43578 IANA-RSVD 43579 IANA-RSVD 43580 IANA-RSVD 43581 IANA-RSVD 43582 IANA-RSVD 43583 IANA-RSVD 43584 IANA-RSVD 43585 IANA-RSVD 43586 IANA-RSVD 43587 IANA-RSVD 43588 IANA-RSVD 43589 IANA-RSVD 43590 IANA-RSVD 43591 IANA-RSVD 43592 IANA-RSVD 43593 IANA-RSVD 43594 IANA-RSVD 43595 IANA-RSVD 43596 IANA-RSVD 43597 IANA-RSVD 43598 IANA-RSVD 43599 IANA-RSVD 43600 IANA-RSVD 43601 IANA-RSVD 43602 IANA-RSVD 43603 IANA-RSVD 43604 IANA-RSVD 43605 IANA-RSVD 43606 IANA-RSVD 43607 IANA-RSVD 43608 IANA-RSVD 43609 IANA-RSVD 43610 IANA-RSVD 43611 IANA-RSVD 43612 IANA-RSVD 43613 IANA-RSVD 43614 IANA-RSVD 43615 IANA-RSVD 43616 IANA-RSVD 43617 IANA-RSVD 43618 IANA-RSVD 43619 IANA-RSVD 43620 IANA-RSVD 43621 IANA-RSVD 43622 IANA-RSVD 43623 IANA-RSVD 43624 IANA-RSVD 43625 IANA-RSVD 43626 IANA-RSVD 43627 IANA-RSVD 43628 IANA-RSVD 43629 IANA-RSVD 43630 IANA-RSVD 43631 IANA-RSVD 43632 IANA-RSVD 43633 IANA-RSVD 43634 IANA-RSVD 43635 IANA-RSVD 43636 IANA-RSVD 43637 IANA-RSVD 43638 IANA-RSVD 43639 IANA-RSVD 43640 IANA-RSVD 43641 IANA-RSVD 43642 IANA-RSVD 43643 IANA-RSVD 43644 IANA-RSVD 43645 IANA-RSVD 43646 IANA-RSVD 43647 IANA-RSVD 43648 IANA-RSVD 43649 IANA-RSVD 43650 IANA-RSVD 43651 IANA-RSVD 43652 IANA-RSVD 43653 IANA-RSVD 43654 IANA-RSVD 43655 IANA-RSVD 43656 IANA-RSVD 43657 IANA-RSVD 43658 IANA-RSVD 43659 IANA-RSVD 43660 IANA-RSVD 43661 IANA-RSVD 43662 IANA-RSVD 43663 IANA-RSVD 43664 IANA-RSVD 43665 IANA-RSVD 43666 IANA-RSVD 43667 IANA-RSVD 43668 IANA-RSVD 43669 IANA-RSVD 43670 IANA-RSVD 43671 IANA-RSVD 43672 IANA-RSVD 43673 IANA-RSVD 43674 IANA-RSVD 43675 IANA-RSVD 43676 IANA-RSVD 43677 IANA-RSVD 43678 IANA-RSVD 43679 IANA-RSVD 43680 IANA-RSVD 43681 IANA-RSVD 43682 IANA-RSVD 43683 IANA-RSVD 43684 IANA-RSVD 43685 IANA-RSVD 43686 IANA-RSVD 43687 IANA-RSVD 43688 IANA-RSVD 43689 IANA-RSVD 43690 IANA-RSVD 43691 IANA-RSVD 43692 IANA-RSVD 43693 IANA-RSVD 43694 IANA-RSVD 43695 IANA-RSVD 43696 IANA-RSVD 43697 IANA-RSVD 43698 IANA-RSVD 43699 IANA-RSVD 43700 IANA-RSVD 43701 IANA-RSVD 43702 IANA-RSVD 43703 IANA-RSVD 43704 IANA-RSVD 43705 IANA-RSVD 43706 IANA-RSVD 43707 IANA-RSVD 43708 IANA-RSVD 43709 IANA-RSVD 43710 IANA-RSVD 43711 IANA-RSVD 43712 IANA-RSVD 43713 IANA-RSVD 43714 IANA-RSVD 43715 IANA-RSVD 43716 IANA-RSVD 43717 IANA-RSVD 43718 IANA-RSVD 43719 IANA-RSVD 43720 IANA-RSVD 43721 IANA-RSVD 43722 IANA-RSVD 43723 IANA-RSVD 43724 IANA-RSVD 43725 IANA-RSVD 43726 IANA-RSVD 43727 IANA-RSVD 43728 IANA-RSVD 43729 IANA-RSVD 43730 IANA-RSVD 43731 IANA-RSVD 43732 IANA-RSVD 43733 IANA-RSVD 43734 IANA-RSVD 43735 IANA-RSVD 43736 IANA-RSVD 43737 IANA-RSVD 43738 IANA-RSVD 43739 IANA-RSVD 43740 IANA-RSVD 43741 IANA-RSVD 43742 IANA-RSVD 43743 IANA-RSVD 43744 IANA-RSVD 43745 IANA-RSVD 43746 IANA-RSVD 43747 IANA-RSVD 43748 IANA-RSVD 43749 IANA-RSVD 43750 IANA-RSVD 43751 IANA-RSVD 43752 IANA-RSVD 43753 IANA-RSVD 43754 IANA-RSVD 43755 IANA-RSVD 43756 IANA-RSVD 43757 IANA-RSVD 43758 IANA-RSVD 43759 IANA-RSVD 43760 IANA-RSVD 43761 IANA-RSVD 43762 IANA-RSVD 43763 IANA-RSVD 43764 IANA-RSVD 43765 IANA-RSVD 43766 IANA-RSVD 43767 IANA-RSVD 43768 IANA-RSVD 43769 IANA-RSVD 43770 IANA-RSVD 43771 IANA-RSVD 43772 IANA-RSVD 43773 IANA-RSVD 43774 IANA-RSVD 43775 IANA-RSVD 43776 IANA-RSVD 43777 IANA-RSVD 43778 IANA-RSVD 43779 IANA-RSVD 43780 IANA-RSVD 43781 IANA-RSVD 43782 IANA-RSVD 43783 IANA-RSVD 43784 IANA-RSVD 43785 IANA-RSVD 43786 IANA-RSVD 43787 IANA-RSVD 43788 IANA-RSVD 43789 IANA-RSVD 43790 IANA-RSVD 43791 IANA-RSVD 43792 IANA-RSVD 43793 IANA-RSVD 43794 IANA-RSVD 43795 IANA-RSVD 43796 IANA-RSVD 43797 IANA-RSVD 43798 IANA-RSVD 43799 IANA-RSVD 43800 IANA-RSVD 43801 IANA-RSVD 43802 IANA-RSVD 43803 IANA-RSVD 43804 IANA-RSVD 43805 IANA-RSVD 43806 IANA-RSVD 43807 IANA-RSVD 43808 IANA-RSVD 43809 IANA-RSVD 43810 IANA-RSVD 43811 IANA-RSVD 43812 IANA-RSVD 43813 IANA-RSVD 43814 IANA-RSVD 43815 IANA-RSVD 43816 IANA-RSVD 43817 IANA-RSVD 43818 IANA-RSVD 43819 IANA-RSVD 43820 IANA-RSVD 43821 IANA-RSVD 43822 IANA-RSVD 43823 IANA-RSVD 43824 IANA-RSVD 43825 IANA-RSVD 43826 IANA-RSVD 43827 IANA-RSVD 43828 IANA-RSVD 43829 IANA-RSVD 43830 IANA-RSVD 43831 IANA-RSVD 43832 IANA-RSVD 43833 IANA-RSVD 43834 IANA-RSVD 43835 IANA-RSVD 43836 IANA-RSVD 43837 IANA-RSVD 43838 IANA-RSVD 43839 IANA-RSVD 43840 IANA-RSVD 43841 IANA-RSVD 43842 IANA-RSVD 43843 IANA-RSVD 43844 IANA-RSVD 43845 IANA-RSVD 43846 IANA-RSVD 43847 IANA-RSVD 43848 IANA-RSVD 43849 IANA-RSVD 43850 IANA-RSVD 43851 IANA-RSVD 43852 IANA-RSVD 43853 IANA-RSVD 43854 IANA-RSVD 43855 IANA-RSVD 43856 IANA-RSVD 43857 IANA-RSVD 43858 IANA-RSVD 43859 IANA-RSVD 43860 IANA-RSVD 43861 IANA-RSVD 43862 IANA-RSVD 43863 IANA-RSVD 43864 IANA-RSVD 43865 IANA-RSVD 43866 IANA-RSVD 43867 IANA-RSVD 43868 IANA-RSVD 43869 IANA-RSVD 43870 IANA-RSVD 43871 IANA-RSVD 43872 IANA-RSVD 43873 IANA-RSVD 43874 IANA-RSVD 43875 IANA-RSVD 43876 IANA-RSVD 43877 IANA-RSVD 43878 IANA-RSVD 43879 IANA-RSVD 43880 IANA-RSVD 43881 IANA-RSVD 43882 IANA-RSVD 43883 IANA-RSVD 43884 IANA-RSVD 43885 IANA-RSVD 43886 IANA-RSVD 43887 IANA-RSVD 43888 IANA-RSVD 43889 IANA-RSVD 43890 IANA-RSVD 43891 IANA-RSVD 43892 IANA-RSVD 43893 IANA-RSVD 43894 IANA-RSVD 43895 IANA-RSVD 43896 IANA-RSVD 43897 IANA-RSVD 43898 IANA-RSVD 43899 IANA-RSVD 43900 IANA-RSVD 43901 IANA-RSVD 43902 IANA-RSVD 43903 IANA-RSVD 43904 IANA-RSVD 43905 IANA-RSVD 43906 IANA-RSVD 43907 IANA-RSVD 43908 IANA-RSVD 43909 IANA-RSVD 43910 IANA-RSVD 43911 IANA-RSVD 43912 IANA-RSVD 43913 IANA-RSVD 43914 IANA-RSVD 43915 IANA-RSVD 43916 IANA-RSVD 43917 IANA-RSVD 43918 IANA-RSVD 43919 IANA-RSVD 43920 IANA-RSVD 43921 IANA-RSVD 43922 IANA-RSVD 43923 IANA-RSVD 43924 IANA-RSVD 43925 IANA-RSVD 43926 IANA-RSVD 43927 IANA-RSVD 43928 IANA-RSVD 43929 IANA-RSVD 43930 IANA-RSVD 43931 IANA-RSVD 43932 IANA-RSVD 43933 IANA-RSVD 43934 IANA-RSVD 43935 IANA-RSVD 43936 IANA-RSVD 43937 IANA-RSVD 43938 IANA-RSVD 43939 IANA-RSVD 43940 IANA-RSVD 43941 IANA-RSVD 43942 IANA-RSVD 43943 IANA-RSVD 43944 IANA-RSVD 43945 IANA-RSVD 43946 IANA-RSVD 43947 IANA-RSVD 43948 IANA-RSVD 43949 IANA-RSVD 43950 IANA-RSVD 43951 IANA-RSVD 43952 IANA-RSVD 43953 IANA-RSVD 43954 IANA-RSVD 43955 IANA-RSVD 43956 IANA-RSVD 43957 IANA-RSVD 43958 IANA-RSVD 43959 IANA-RSVD 43960 IANA-RSVD 43961 IANA-RSVD 43962 IANA-RSVD 43963 IANA-RSVD 43964 IANA-RSVD 43965 IANA-RSVD 43966 IANA-RSVD 43967 IANA-RSVD 43968 IANA-RSVD 43969 IANA-RSVD 43970 IANA-RSVD 43971 IANA-RSVD 43972 IANA-RSVD 43973 IANA-RSVD 43974 IANA-RSVD 43975 IANA-RSVD 43976 IANA-RSVD 43977 IANA-RSVD 43978 IANA-RSVD 43979 IANA-RSVD 43980 IANA-RSVD 43981 IANA-RSVD 43982 IANA-RSVD 43983 IANA-RSVD 43984 IANA-RSVD 43985 IANA-RSVD 43986 IANA-RSVD 43987 IANA-RSVD 43988 IANA-RSVD 43989 IANA-RSVD 43990 IANA-RSVD 43991 IANA-RSVD 43992 IANA-RSVD 43993 IANA-RSVD 43994 IANA-RSVD 43995 IANA-RSVD 43996 IANA-RSVD 43997 IANA-RSVD 43998 IANA-RSVD 43999 IANA-RSVD 44000 IANA-RSVD 44001 IANA-RSVD 44002 IANA-RSVD 44003 IANA-RSVD 44004 IANA-RSVD 44005 IANA-RSVD 44006 IANA-RSVD 44007 IANA-RSVD 44008 IANA-RSVD 44009 IANA-RSVD 44010 IANA-RSVD 44011 IANA-RSVD 44012 IANA-RSVD 44013 IANA-RSVD 44014 IANA-RSVD 44015 IANA-RSVD 44016 IANA-RSVD 44017 IANA-RSVD 44018 IANA-RSVD 44019 IANA-RSVD 44020 IANA-RSVD 44021 IANA-RSVD 44022 IANA-RSVD 44023 IANA-RSVD 44024 IANA-RSVD 44025 IANA-RSVD 44026 IANA-RSVD 44027 IANA-RSVD 44028 IANA-RSVD 44029 IANA-RSVD 44030 IANA-RSVD 44031 IANA-RSVD 44032 IANA-RSVD 44033 IANA-RSVD 44034 IANA-RSVD 44035 IANA-RSVD 44036 IANA-RSVD 44037 IANA-RSVD 44038 IANA-RSVD 44039 IANA-RSVD 44040 IANA-RSVD 44041 IANA-RSVD 44042 IANA-RSVD 44043 IANA-RSVD 44044 IANA-RSVD 44045 IANA-RSVD 44046 IANA-RSVD 44047 IANA-RSVD 44048 IANA-RSVD 44049 IANA-RSVD 44050 IANA-RSVD 44051 IANA-RSVD 44052 IANA-RSVD 44053 IANA-RSVD 44054 IANA-RSVD 44055 IANA-RSVD 44056 IANA-RSVD 44057 IANA-RSVD 44058 IANA-RSVD 44059 IANA-RSVD 44060 IANA-RSVD 44061 IANA-RSVD 44062 IANA-RSVD 44063 IANA-RSVD 44064 IANA-RSVD 44065 IANA-RSVD 44066 IANA-RSVD 44067 IANA-RSVD 44068 IANA-RSVD 44069 IANA-RSVD 44070 IANA-RSVD 44071 IANA-RSVD 44072 IANA-RSVD 44073 IANA-RSVD 44074 IANA-RSVD 44075 IANA-RSVD 44076 IANA-RSVD 44077 IANA-RSVD 44078 IANA-RSVD 44079 IANA-RSVD 44080 IANA-RSVD 44081 IANA-RSVD 44082 IANA-RSVD 44083 IANA-RSVD 44084 IANA-RSVD 44085 IANA-RSVD 44086 IANA-RSVD 44087 IANA-RSVD 44088 IANA-RSVD 44089 IANA-RSVD 44090 IANA-RSVD 44091 IANA-RSVD 44092 IANA-RSVD 44093 IANA-RSVD 44094 IANA-RSVD 44095 IANA-RSVD 44096 IANA-RSVD 44097 IANA-RSVD 44098 IANA-RSVD 44099 IANA-RSVD 44100 IANA-RSVD 44101 IANA-RSVD 44102 IANA-RSVD 44103 IANA-RSVD 44104 IANA-RSVD 44105 IANA-RSVD 44106 IANA-RSVD 44107 IANA-RSVD 44108 IANA-RSVD 44109 IANA-RSVD 44110 IANA-RSVD 44111 IANA-RSVD 44112 IANA-RSVD 44113 IANA-RSVD 44114 IANA-RSVD 44115 IANA-RSVD 44116 IANA-RSVD 44117 IANA-RSVD 44118 IANA-RSVD 44119 IANA-RSVD 44120 IANA-RSVD 44121 IANA-RSVD 44122 IANA-RSVD 44123 IANA-RSVD 44124 IANA-RSVD 44125 IANA-RSVD 44126 IANA-RSVD 44127 IANA-RSVD 44128 IANA-RSVD 44129 IANA-RSVD 44130 IANA-RSVD 44131 IANA-RSVD 44132 IANA-RSVD 44133 IANA-RSVD 44134 IANA-RSVD 44135 IANA-RSVD 44136 IANA-RSVD 44137 IANA-RSVD 44138 IANA-RSVD 44139 IANA-RSVD 44140 IANA-RSVD 44141 IANA-RSVD 44142 IANA-RSVD 44143 IANA-RSVD 44144 IANA-RSVD 44145 IANA-RSVD 44146 IANA-RSVD 44147 IANA-RSVD 44148 IANA-RSVD 44149 IANA-RSVD 44150 IANA-RSVD 44151 IANA-RSVD 44152 IANA-RSVD 44153 IANA-RSVD 44154 IANA-RSVD 44155 IANA-RSVD 44156 IANA-RSVD 44157 IANA-RSVD 44158 IANA-RSVD 44159 IANA-RSVD 44160 IANA-RSVD 44161 IANA-RSVD 44162 IANA-RSVD 44163 IANA-RSVD 44164 IANA-RSVD 44165 IANA-RSVD 44166 IANA-RSVD 44167 IANA-RSVD 44168 IANA-RSVD 44169 IANA-RSVD 44170 IANA-RSVD 44171 IANA-RSVD 44172 IANA-RSVD 44173 IANA-RSVD 44174 IANA-RSVD 44175 IANA-RSVD 44176 IANA-RSVD 44177 IANA-RSVD 44178 IANA-RSVD 44179 IANA-RSVD 44180 IANA-RSVD 44181 IANA-RSVD 44182 IANA-RSVD 44183 IANA-RSVD 44184 IANA-RSVD 44185 IANA-RSVD 44186 IANA-RSVD 44187 IANA-RSVD 44188 IANA-RSVD 44189 IANA-RSVD 44190 IANA-RSVD 44191 IANA-RSVD 44192 IANA-RSVD 44193 IANA-RSVD 44194 IANA-RSVD 44195 IANA-RSVD 44196 IANA-RSVD 44197 IANA-RSVD 44198 IANA-RSVD 44199 IANA-RSVD 44200 IANA-RSVD 44201 IANA-RSVD 44202 IANA-RSVD 44203 IANA-RSVD 44204 IANA-RSVD 44205 IANA-RSVD 44206 IANA-RSVD 44207 IANA-RSVD 44208 IANA-RSVD 44209 IANA-RSVD 44210 IANA-RSVD 44211 IANA-RSVD 44212 IANA-RSVD 44213 IANA-RSVD 44214 IANA-RSVD 44215 IANA-RSVD 44216 IANA-RSVD 44217 IANA-RSVD 44218 IANA-RSVD 44219 IANA-RSVD 44220 IANA-RSVD 44221 IANA-RSVD 44222 IANA-RSVD 44223 IANA-RSVD 44224 IANA-RSVD 44225 IANA-RSVD 44226 IANA-RSVD 44227 IANA-RSVD 44228 IANA-RSVD 44229 IANA-RSVD 44230 IANA-RSVD 44231 IANA-RSVD 44232 IANA-RSVD 44233 IANA-RSVD 44234 IANA-RSVD 44235 IANA-RSVD 44236 IANA-RSVD 44237 IANA-RSVD 44238 IANA-RSVD 44239 IANA-RSVD 44240 IANA-RSVD 44241 IANA-RSVD 44242 IANA-RSVD 44243 IANA-RSVD 44244 IANA-RSVD 44245 IANA-RSVD 44246 IANA-RSVD 44247 IANA-RSVD 44248 IANA-RSVD 44249 IANA-RSVD 44250 IANA-RSVD 44251 IANA-RSVD 44252 IANA-RSVD 44253 IANA-RSVD 44254 IANA-RSVD 44255 IANA-RSVD 44256 IANA-RSVD 44257 IANA-RSVD 44258 IANA-RSVD 44259 IANA-RSVD 44260 IANA-RSVD 44261 IANA-RSVD 44262 IANA-RSVD 44263 IANA-RSVD 44264 IANA-RSVD 44265 IANA-RSVD 44266 IANA-RSVD 44267 IANA-RSVD 44268 IANA-RSVD 44269 IANA-RSVD 44270 IANA-RSVD 44271 IANA-RSVD 44272 IANA-RSVD 44273 IANA-RSVD 44274 IANA-RSVD 44275 IANA-RSVD 44276 IANA-RSVD 44277 IANA-RSVD 44278 IANA-RSVD 44279 IANA-RSVD 44280 IANA-RSVD 44281 IANA-RSVD 44282 IANA-RSVD 44283 IANA-RSVD 44284 IANA-RSVD 44285 IANA-RSVD 44286 IANA-RSVD 44287 IANA-RSVD 44288 IANA-RSVD 44289 IANA-RSVD 44290 IANA-RSVD 44291 IANA-RSVD 44292 IANA-RSVD 44293 IANA-RSVD 44294 IANA-RSVD 44295 IANA-RSVD 44296 IANA-RSVD 44297 IANA-RSVD 44298 IANA-RSVD 44299 IANA-RSVD 44300 IANA-RSVD 44301 IANA-RSVD 44302 IANA-RSVD 44303 IANA-RSVD 44304 IANA-RSVD 44305 IANA-RSVD 44306 IANA-RSVD 44307 IANA-RSVD 44308 IANA-RSVD 44309 IANA-RSVD 44310 IANA-RSVD 44311 IANA-RSVD 44312 IANA-RSVD 44313 IANA-RSVD 44314 IANA-RSVD 44315 IANA-RSVD 44316 IANA-RSVD 44317 IANA-RSVD 44318 IANA-RSVD 44319 IANA-RSVD 44320 IANA-RSVD 44321 IANA-RSVD 44322 IANA-RSVD 44323 IANA-RSVD 44324 IANA-RSVD 44325 IANA-RSVD 44326 IANA-RSVD 44327 IANA-RSVD 44328 IANA-RSVD 44329 IANA-RSVD 44330 IANA-RSVD 44331 IANA-RSVD 44332 IANA-RSVD 44333 IANA-RSVD 44334 IANA-RSVD 44335 IANA-RSVD 44336 IANA-RSVD 44337 IANA-RSVD 44338 IANA-RSVD 44339 IANA-RSVD 44340 IANA-RSVD 44341 IANA-RSVD 44342 IANA-RSVD 44343 IANA-RSVD 44344 IANA-RSVD 44345 IANA-RSVD 44346 IANA-RSVD 44347 IANA-RSVD 44348 IANA-RSVD 44349 IANA-RSVD 44350 IANA-RSVD 44351 IANA-RSVD 44352 IANA-RSVD 44353 IANA-RSVD 44354 IANA-RSVD 44355 IANA-RSVD 44356 IANA-RSVD 44357 IANA-RSVD 44358 IANA-RSVD 44359 IANA-RSVD 44360 IANA-RSVD 44361 IANA-RSVD 44362 IANA-RSVD 44363 IANA-RSVD 44364 IANA-RSVD 44365 IANA-RSVD 44366 IANA-RSVD 44367 IANA-RSVD 44368 IANA-RSVD 44369 IANA-RSVD 44370 IANA-RSVD 44371 IANA-RSVD 44372 IANA-RSVD 44373 IANA-RSVD 44374 IANA-RSVD 44375 IANA-RSVD 44376 IANA-RSVD 44377 IANA-RSVD 44378 IANA-RSVD 44379 IANA-RSVD 44380 IANA-RSVD 44381 IANA-RSVD 44382 IANA-RSVD 44383 IANA-RSVD 44384 IANA-RSVD 44385 IANA-RSVD 44386 IANA-RSVD 44387 IANA-RSVD 44388 IANA-RSVD 44389 IANA-RSVD 44390 IANA-RSVD 44391 IANA-RSVD 44392 IANA-RSVD 44393 IANA-RSVD 44394 IANA-RSVD 44395 IANA-RSVD 44396 IANA-RSVD 44397 IANA-RSVD 44398 IANA-RSVD 44399 IANA-RSVD 44400 IANA-RSVD 44401 IANA-RSVD 44402 IANA-RSVD 44403 IANA-RSVD 44404 IANA-RSVD 44405 IANA-RSVD 44406 IANA-RSVD 44407 IANA-RSVD 44408 IANA-RSVD 44409 IANA-RSVD 44410 IANA-RSVD 44411 IANA-RSVD 44412 IANA-RSVD 44413 IANA-RSVD 44414 IANA-RSVD 44415 IANA-RSVD 44416 IANA-RSVD 44417 IANA-RSVD 44418 IANA-RSVD 44419 IANA-RSVD 44420 IANA-RSVD 44421 IANA-RSVD 44422 IANA-RSVD 44423 IANA-RSVD 44424 IANA-RSVD 44425 IANA-RSVD 44426 IANA-RSVD 44427 IANA-RSVD 44428 IANA-RSVD 44429 IANA-RSVD 44430 IANA-RSVD 44431 IANA-RSVD 44432 IANA-RSVD 44433 IANA-RSVD 44434 IANA-RSVD 44435 IANA-RSVD 44436 IANA-RSVD 44437 IANA-RSVD 44438 IANA-RSVD 44439 IANA-RSVD 44440 IANA-RSVD 44441 IANA-RSVD 44442 IANA-RSVD 44443 IANA-RSVD 44444 IANA-RSVD 44445 IANA-RSVD 44446 IANA-RSVD 44447 IANA-RSVD 44448 IANA-RSVD 44449 IANA-RSVD 44450 IANA-RSVD 44451 IANA-RSVD 44452 IANA-RSVD 44453 IANA-RSVD 44454 IANA-RSVD 44455 IANA-RSVD 44456 IANA-RSVD 44457 IANA-RSVD 44458 IANA-RSVD 44459 IANA-RSVD 44460 IANA-RSVD 44461 IANA-RSVD 44462 IANA-RSVD 44463 IANA-RSVD 44464 IANA-RSVD 44465 IANA-RSVD 44466 IANA-RSVD 44467 IANA-RSVD 44468 IANA-RSVD 44469 IANA-RSVD 44470 IANA-RSVD 44471 IANA-RSVD 44472 IANA-RSVD 44473 IANA-RSVD 44474 IANA-RSVD 44475 IANA-RSVD 44476 IANA-RSVD 44477 IANA-RSVD 44478 IANA-RSVD 44479 IANA-RSVD 44480 IANA-RSVD 44481 IANA-RSVD 44482 IANA-RSVD 44483 IANA-RSVD 44484 IANA-RSVD 44485 IANA-RSVD 44486 IANA-RSVD 44487 IANA-RSVD 44488 IANA-RSVD 44489 IANA-RSVD 44490 IANA-RSVD 44491 IANA-RSVD 44492 IANA-RSVD 44493 IANA-RSVD 44494 IANA-RSVD 44495 IANA-RSVD 44496 IANA-RSVD 44497 IANA-RSVD 44498 IANA-RSVD 44499 IANA-RSVD 44500 IANA-RSVD 44501 IANA-RSVD 44502 IANA-RSVD 44503 IANA-RSVD 44504 IANA-RSVD 44505 IANA-RSVD 44506 IANA-RSVD 44507 IANA-RSVD 44508 IANA-RSVD 44509 IANA-RSVD 44510 IANA-RSVD 44511 IANA-RSVD 44512 IANA-RSVD 44513 IANA-RSVD 44514 IANA-RSVD 44515 IANA-RSVD 44516 IANA-RSVD 44517 IANA-RSVD 44518 IANA-RSVD 44519 IANA-RSVD 44520 IANA-RSVD 44521 IANA-RSVD 44522 IANA-RSVD 44523 IANA-RSVD 44524 IANA-RSVD 44525 IANA-RSVD 44526 IANA-RSVD 44527 IANA-RSVD 44528 IANA-RSVD 44529 IANA-RSVD 44530 IANA-RSVD 44531 IANA-RSVD 44532 IANA-RSVD 44533 IANA-RSVD 44534 IANA-RSVD 44535 IANA-RSVD 44536 IANA-RSVD 44537 IANA-RSVD 44538 IANA-RSVD 44539 IANA-RSVD 44540 IANA-RSVD 44541 IANA-RSVD 44542 IANA-RSVD 44543 IANA-RSVD 44544 IANA-RSVD 44545 IANA-RSVD 44546 IANA-RSVD 44547 IANA-RSVD 44548 IANA-RSVD 44549 IANA-RSVD 44550 IANA-RSVD 44551 IANA-RSVD 44552 IANA-RSVD 44553 IANA-RSVD 44554 IANA-RSVD 44555 IANA-RSVD 44556 IANA-RSVD 44557 IANA-RSVD 44558 IANA-RSVD 44559 IANA-RSVD 44560 IANA-RSVD 44561 IANA-RSVD 44562 IANA-RSVD 44563 IANA-RSVD 44564 IANA-RSVD 44565 IANA-RSVD 44566 IANA-RSVD 44567 IANA-RSVD 44568 IANA-RSVD 44569 IANA-RSVD 44570 IANA-RSVD 44571 IANA-RSVD 44572 IANA-RSVD 44573 IANA-RSVD 44574 IANA-RSVD 44575 IANA-RSVD 44576 IANA-RSVD 44577 IANA-RSVD 44578 IANA-RSVD 44579 IANA-RSVD 44580 IANA-RSVD 44581 IANA-RSVD 44582 IANA-RSVD 44583 IANA-RSVD 44584 IANA-RSVD 44585 IANA-RSVD 44586 IANA-RSVD 44587 IANA-RSVD 44588 IANA-RSVD 44589 IANA-RSVD 44590 IANA-RSVD 44591 IANA-RSVD 44592 IANA-RSVD 44593 IANA-RSVD 44594 IANA-RSVD 44595 IANA-RSVD 44596 IANA-RSVD 44597 IANA-RSVD 44598 IANA-RSVD 44599 IANA-RSVD 44600 IANA-RSVD 44601 IANA-RSVD 44602 IANA-RSVD 44603 IANA-RSVD 44604 IANA-RSVD 44605 IANA-RSVD 44606 IANA-RSVD 44607 IANA-RSVD 44608 IANA-RSVD 44609 IANA-RSVD 44610 IANA-RSVD 44611 IANA-RSVD 44612 IANA-RSVD 44613 IANA-RSVD 44614 IANA-RSVD 44615 IANA-RSVD 44616 IANA-RSVD 44617 IANA-RSVD 44618 IANA-RSVD 44619 IANA-RSVD 44620 IANA-RSVD 44621 IANA-RSVD 44622 IANA-RSVD 44623 IANA-RSVD 44624 IANA-RSVD 44625 IANA-RSVD 44626 IANA-RSVD 44627 IANA-RSVD 44628 IANA-RSVD 44629 IANA-RSVD 44630 IANA-RSVD 44631 IANA-RSVD 44632 IANA-RSVD 44633 IANA-RSVD 44634 IANA-RSVD 44635 IANA-RSVD 44636 IANA-RSVD 44637 IANA-RSVD 44638 IANA-RSVD 44639 IANA-RSVD 44640 IANA-RSVD 44641 IANA-RSVD 44642 IANA-RSVD 44643 IANA-RSVD 44644 IANA-RSVD 44645 IANA-RSVD 44646 IANA-RSVD 44647 IANA-RSVD 44648 IANA-RSVD 44649 IANA-RSVD 44650 IANA-RSVD 44651 IANA-RSVD 44652 IANA-RSVD 44653 IANA-RSVD 44654 IANA-RSVD 44655 IANA-RSVD 44656 IANA-RSVD 44657 IANA-RSVD 44658 IANA-RSVD 44659 IANA-RSVD 44660 IANA-RSVD 44661 IANA-RSVD 44662 IANA-RSVD 44663 IANA-RSVD 44664 IANA-RSVD 44665 IANA-RSVD 44666 IANA-RSVD 44667 IANA-RSVD 44668 IANA-RSVD 44669 IANA-RSVD 44670 IANA-RSVD 44671 IANA-RSVD 44672 IANA-RSVD 44673 IANA-RSVD 44674 IANA-RSVD 44675 IANA-RSVD 44676 IANA-RSVD 44677 IANA-RSVD 44678 IANA-RSVD 44679 IANA-RSVD 44680 IANA-RSVD 44681 IANA-RSVD 44682 IANA-RSVD 44683 IANA-RSVD 44684 IANA-RSVD 44685 IANA-RSVD 44686 IANA-RSVD 44687 IANA-RSVD 44688 IANA-RSVD 44689 IANA-RSVD 44690 IANA-RSVD 44691 IANA-RSVD 44692 IANA-RSVD 44693 IANA-RSVD 44694 IANA-RSVD 44695 IANA-RSVD 44696 IANA-RSVD 44697 IANA-RSVD 44698 IANA-RSVD 44699 IANA-RSVD 44700 IANA-RSVD 44701 IANA-RSVD 44702 IANA-RSVD 44703 IANA-RSVD 44704 IANA-RSVD 44705 IANA-RSVD 44706 IANA-RSVD 44707 IANA-RSVD 44708 IANA-RSVD 44709 IANA-RSVD 44710 IANA-RSVD 44711 IANA-RSVD 44712 IANA-RSVD 44713 IANA-RSVD 44714 IANA-RSVD 44715 IANA-RSVD 44716 IANA-RSVD 44717 IANA-RSVD 44718 IANA-RSVD 44719 IANA-RSVD 44720 IANA-RSVD 44721 IANA-RSVD 44722 IANA-RSVD 44723 IANA-RSVD 44724 IANA-RSVD 44725 IANA-RSVD 44726 IANA-RSVD 44727 IANA-RSVD 44728 IANA-RSVD 44729 IANA-RSVD 44730 IANA-RSVD 44731 IANA-RSVD 44732 IANA-RSVD 44733 IANA-RSVD 44734 IANA-RSVD 44735 IANA-RSVD 44736 IANA-RSVD 44737 IANA-RSVD 44738 IANA-RSVD 44739 IANA-RSVD 44740 IANA-RSVD 44741 IANA-RSVD 44742 IANA-RSVD 44743 IANA-RSVD 44744 IANA-RSVD 44745 IANA-RSVD 44746 IANA-RSVD 44747 IANA-RSVD 44748 IANA-RSVD 44749 IANA-RSVD 44750 IANA-RSVD 44751 IANA-RSVD 44752 IANA-RSVD 44753 IANA-RSVD 44754 IANA-RSVD 44755 IANA-RSVD 44756 IANA-RSVD 44757 IANA-RSVD 44758 IANA-RSVD 44759 IANA-RSVD 44760 IANA-RSVD 44761 IANA-RSVD 44762 IANA-RSVD 44763 IANA-RSVD 44764 IANA-RSVD 44765 IANA-RSVD 44766 IANA-RSVD 44767 IANA-RSVD 44768 IANA-RSVD 44769 IANA-RSVD 44770 IANA-RSVD 44771 IANA-RSVD 44772 IANA-RSVD 44773 IANA-RSVD 44774 IANA-RSVD 44775 IANA-RSVD 44776 IANA-RSVD 44777 IANA-RSVD 44778 IANA-RSVD 44779 IANA-RSVD 44780 IANA-RSVD 44781 IANA-RSVD 44782 IANA-RSVD 44783 IANA-RSVD 44784 IANA-RSVD 44785 IANA-RSVD 44786 IANA-RSVD 44787 IANA-RSVD 44788 IANA-RSVD 44789 IANA-RSVD 44790 IANA-RSVD 44791 IANA-RSVD 44792 IANA-RSVD 44793 IANA-RSVD 44794 IANA-RSVD 44795 IANA-RSVD 44796 IANA-RSVD 44797 IANA-RSVD 44798 IANA-RSVD 44799 IANA-RSVD 44800 IANA-RSVD 44801 IANA-RSVD 44802 IANA-RSVD 44803 IANA-RSVD 44804 IANA-RSVD 44805 IANA-RSVD 44806 IANA-RSVD 44807 IANA-RSVD 44808 IANA-RSVD 44809 IANA-RSVD 44810 IANA-RSVD 44811 IANA-RSVD 44812 IANA-RSVD 44813 IANA-RSVD 44814 IANA-RSVD 44815 IANA-RSVD 44816 IANA-RSVD 44817 IANA-RSVD 44818 IANA-RSVD 44819 IANA-RSVD 44820 IANA-RSVD 44821 IANA-RSVD 44822 IANA-RSVD 44823 IANA-RSVD 44824 IANA-RSVD 44825 IANA-RSVD 44826 IANA-RSVD 44827 IANA-RSVD 44828 IANA-RSVD 44829 IANA-RSVD 44830 IANA-RSVD 44831 IANA-RSVD 44832 IANA-RSVD 44833 IANA-RSVD 44834 IANA-RSVD 44835 IANA-RSVD 44836 IANA-RSVD 44837 IANA-RSVD 44838 IANA-RSVD 44839 IANA-RSVD 44840 IANA-RSVD 44841 IANA-RSVD 44842 IANA-RSVD 44843 IANA-RSVD 44844 IANA-RSVD 44845 IANA-RSVD 44846 IANA-RSVD 44847 IANA-RSVD 44848 IANA-RSVD 44849 IANA-RSVD 44850 IANA-RSVD 44851 IANA-RSVD 44852 IANA-RSVD 44853 IANA-RSVD 44854 IANA-RSVD 44855 IANA-RSVD 44856 IANA-RSVD 44857 IANA-RSVD 44858 IANA-RSVD 44859 IANA-RSVD 44860 IANA-RSVD 44861 IANA-RSVD 44862 IANA-RSVD 44863 IANA-RSVD 44864 IANA-RSVD 44865 IANA-RSVD 44866 IANA-RSVD 44867 IANA-RSVD 44868 IANA-RSVD 44869 IANA-RSVD 44870 IANA-RSVD 44871 IANA-RSVD 44872 IANA-RSVD 44873 IANA-RSVD 44874 IANA-RSVD 44875 IANA-RSVD 44876 IANA-RSVD 44877 IANA-RSVD 44878 IANA-RSVD 44879 IANA-RSVD 44880 IANA-RSVD 44881 IANA-RSVD 44882 IANA-RSVD 44883 IANA-RSVD 44884 IANA-RSVD 44885 IANA-RSVD 44886 IANA-RSVD 44887 IANA-RSVD 44888 IANA-RSVD 44889 IANA-RSVD 44890 IANA-RSVD 44891 IANA-RSVD 44892 IANA-RSVD 44893 IANA-RSVD 44894 IANA-RSVD 44895 IANA-RSVD 44896 IANA-RSVD 44897 IANA-RSVD 44898 IANA-RSVD 44899 IANA-RSVD 44900 IANA-RSVD 44901 IANA-RSVD 44902 IANA-RSVD 44903 IANA-RSVD 44904 IANA-RSVD 44905 IANA-RSVD 44906 IANA-RSVD 44907 IANA-RSVD 44908 IANA-RSVD 44909 IANA-RSVD 44910 IANA-RSVD 44911 IANA-RSVD 44912 IANA-RSVD 44913 IANA-RSVD 44914 IANA-RSVD 44915 IANA-RSVD 44916 IANA-RSVD 44917 IANA-RSVD 44918 IANA-RSVD 44919 IANA-RSVD 44920 IANA-RSVD 44921 IANA-RSVD 44922 IANA-RSVD 44923 IANA-RSVD 44924 IANA-RSVD 44925 IANA-RSVD 44926 IANA-RSVD 44927 IANA-RSVD 44928 IANA-RSVD 44929 IANA-RSVD 44930 IANA-RSVD 44931 IANA-RSVD 44932 IANA-RSVD 44933 IANA-RSVD 44934 IANA-RSVD 44935 IANA-RSVD 44936 IANA-RSVD 44937 IANA-RSVD 44938 IANA-RSVD 44939 IANA-RSVD 44940 IANA-RSVD 44941 IANA-RSVD 44942 IANA-RSVD 44943 IANA-RSVD 44944 IANA-RSVD 44945 IANA-RSVD 44946 IANA-RSVD 44947 IANA-RSVD 44948 IANA-RSVD 44949 IANA-RSVD 44950 IANA-RSVD 44951 IANA-RSVD 44952 IANA-RSVD 44953 IANA-RSVD 44954 IANA-RSVD 44955 IANA-RSVD 44956 IANA-RSVD 44957 IANA-RSVD 44958 IANA-RSVD 44959 IANA-RSVD 44960 IANA-RSVD 44961 IANA-RSVD 44962 IANA-RSVD 44963 IANA-RSVD 44964 IANA-RSVD 44965 IANA-RSVD 44966 IANA-RSVD 44967 IANA-RSVD 44968 IANA-RSVD 44969 IANA-RSVD 44970 IANA-RSVD 44971 IANA-RSVD 44972 IANA-RSVD 44973 IANA-RSVD 44974 IANA-RSVD 44975 IANA-RSVD 44976 IANA-RSVD 44977 IANA-RSVD 44978 IANA-RSVD 44979 IANA-RSVD 44980 IANA-RSVD 44981 IANA-RSVD 44982 IANA-RSVD 44983 IANA-RSVD 44984 IANA-RSVD 44985 IANA-RSVD 44986 IANA-RSVD 44987 IANA-RSVD 44988 IANA-RSVD 44989 IANA-RSVD 44990 IANA-RSVD 44991 IANA-RSVD 44992 IANA-RSVD 44993 IANA-RSVD 44994 IANA-RSVD 44995 IANA-RSVD 44996 IANA-RSVD 44997 IANA-RSVD 44998 IANA-RSVD 44999 IANA-RSVD 45000 IANA-RSVD 45001 IANA-RSVD 45002 IANA-RSVD 45003 IANA-RSVD 45004 IANA-RSVD 45005 IANA-RSVD 45006 IANA-RSVD 45007 IANA-RSVD 45008 IANA-RSVD 45009 IANA-RSVD 45010 IANA-RSVD 45011 IANA-RSVD 45012 IANA-RSVD 45013 IANA-RSVD 45014 IANA-RSVD 45015 IANA-RSVD 45016 IANA-RSVD 45017 IANA-RSVD 45018 IANA-RSVD 45019 IANA-RSVD 45020 IANA-RSVD 45021 IANA-RSVD 45022 IANA-RSVD 45023 IANA-RSVD 45024 IANA-RSVD 45025 IANA-RSVD 45026 IANA-RSVD 45027 IANA-RSVD 45028 IANA-RSVD 45029 IANA-RSVD 45030 IANA-RSVD 45031 IANA-RSVD 45032 IANA-RSVD 45033 IANA-RSVD 45034 IANA-RSVD 45035 IANA-RSVD 45036 IANA-RSVD 45037 IANA-RSVD 45038 IANA-RSVD 45039 IANA-RSVD 45040 IANA-RSVD 45041 IANA-RSVD 45042 IANA-RSVD 45043 IANA-RSVD 45044 IANA-RSVD 45045 IANA-RSVD 45046 IANA-RSVD 45047 IANA-RSVD 45048 IANA-RSVD 45049 IANA-RSVD 45050 IANA-RSVD 45051 IANA-RSVD 45052 IANA-RSVD 45053 IANA-RSVD 45054 IANA-RSVD 45055 IANA-RSVD 45056 IANA-RSVD 45057 IANA-RSVD 45058 IANA-RSVD 45059 IANA-RSVD 45060 IANA-RSVD 45061 IANA-RSVD 45062 IANA-RSVD 45063 IANA-RSVD 45064 IANA-RSVD 45065 IANA-RSVD 45066 IANA-RSVD 45067 IANA-RSVD 45068 IANA-RSVD 45069 IANA-RSVD 45070 IANA-RSVD 45071 IANA-RSVD 45072 IANA-RSVD 45073 IANA-RSVD 45074 IANA-RSVD 45075 IANA-RSVD 45076 IANA-RSVD 45077 IANA-RSVD 45078 IANA-RSVD 45079 IANA-RSVD 45080 IANA-RSVD 45081 IANA-RSVD 45082 IANA-RSVD 45083 IANA-RSVD 45084 IANA-RSVD 45085 IANA-RSVD 45086 IANA-RSVD 45087 IANA-RSVD 45088 IANA-RSVD 45089 IANA-RSVD 45090 IANA-RSVD 45091 IANA-RSVD 45092 IANA-RSVD 45093 IANA-RSVD 45094 IANA-RSVD 45095 IANA-RSVD 45096 IANA-RSVD 45097 IANA-RSVD 45098 IANA-RSVD 45099 IANA-RSVD 45100 IANA-RSVD 45101 IANA-RSVD 45102 IANA-RSVD 45103 IANA-RSVD 45104 IANA-RSVD 45105 IANA-RSVD 45106 IANA-RSVD 45107 IANA-RSVD 45108 IANA-RSVD 45109 IANA-RSVD 45110 IANA-RSVD 45111 IANA-RSVD 45112 IANA-RSVD 45113 IANA-RSVD 45114 IANA-RSVD 45115 IANA-RSVD 45116 IANA-RSVD 45117 IANA-RSVD 45118 IANA-RSVD 45119 IANA-RSVD 45120 IANA-RSVD 45121 IANA-RSVD 45122 IANA-RSVD 45123 IANA-RSVD 45124 IANA-RSVD 45125 IANA-RSVD 45126 IANA-RSVD 45127 IANA-RSVD 45128 IANA-RSVD 45129 IANA-RSVD 45130 IANA-RSVD 45131 IANA-RSVD 45132 IANA-RSVD 45133 IANA-RSVD 45134 IANA-RSVD 45135 IANA-RSVD 45136 IANA-RSVD 45137 IANA-RSVD 45138 IANA-RSVD 45139 IANA-RSVD 45140 IANA-RSVD 45141 IANA-RSVD 45142 IANA-RSVD 45143 IANA-RSVD 45144 IANA-RSVD 45145 IANA-RSVD 45146 IANA-RSVD 45147 IANA-RSVD 45148 IANA-RSVD 45149 IANA-RSVD 45150 IANA-RSVD 45151 IANA-RSVD 45152 IANA-RSVD 45153 IANA-RSVD 45154 IANA-RSVD 45155 IANA-RSVD 45156 IANA-RSVD 45157 IANA-RSVD 45158 IANA-RSVD 45159 IANA-RSVD 45160 IANA-RSVD 45161 IANA-RSVD 45162 IANA-RSVD 45163 IANA-RSVD 45164 IANA-RSVD 45165 IANA-RSVD 45166 IANA-RSVD 45167 IANA-RSVD 45168 IANA-RSVD 45169 IANA-RSVD 45170 IANA-RSVD 45171 IANA-RSVD 45172 IANA-RSVD 45173 IANA-RSVD 45174 IANA-RSVD 45175 IANA-RSVD 45176 IANA-RSVD 45177 IANA-RSVD 45178 IANA-RSVD 45179 IANA-RSVD 45180 IANA-RSVD 45181 IANA-RSVD 45182 IANA-RSVD 45183 IANA-RSVD 45184 IANA-RSVD 45185 IANA-RSVD 45186 IANA-RSVD 45187 IANA-RSVD 45188 IANA-RSVD 45189 IANA-RSVD 45190 IANA-RSVD 45191 IANA-RSVD 45192 IANA-RSVD 45193 IANA-RSVD 45194 IANA-RSVD 45195 IANA-RSVD 45196 IANA-RSVD 45197 IANA-RSVD 45198 IANA-RSVD 45199 IANA-RSVD 45200 IANA-RSVD 45201 IANA-RSVD 45202 IANA-RSVD 45203 IANA-RSVD 45204 IANA-RSVD 45205 IANA-RSVD 45206 IANA-RSVD 45207 IANA-RSVD 45208 IANA-RSVD 45209 IANA-RSVD 45210 IANA-RSVD 45211 IANA-RSVD 45212 IANA-RSVD 45213 IANA-RSVD 45214 IANA-RSVD 45215 IANA-RSVD 45216 IANA-RSVD 45217 IANA-RSVD 45218 IANA-RSVD 45219 IANA-RSVD 45220 IANA-RSVD 45221 IANA-RSVD 45222 IANA-RSVD 45223 IANA-RSVD 45224 IANA-RSVD 45225 IANA-RSVD 45226 IANA-RSVD 45227 IANA-RSVD 45228 IANA-RSVD 45229 IANA-RSVD 45230 IANA-RSVD 45231 IANA-RSVD 45232 IANA-RSVD 45233 IANA-RSVD 45234 IANA-RSVD 45235 IANA-RSVD 45236 IANA-RSVD 45237 IANA-RSVD 45238 IANA-RSVD 45239 IANA-RSVD 45240 IANA-RSVD 45241 IANA-RSVD 45242 IANA-RSVD 45243 IANA-RSVD 45244 IANA-RSVD 45245 IANA-RSVD 45246 IANA-RSVD 45247 IANA-RSVD 45248 IANA-RSVD 45249 IANA-RSVD 45250 IANA-RSVD 45251 IANA-RSVD 45252 IANA-RSVD 45253 IANA-RSVD 45254 IANA-RSVD 45255 IANA-RSVD 45256 IANA-RSVD 45257 IANA-RSVD 45258 IANA-RSVD 45259 IANA-RSVD 45260 IANA-RSVD 45261 IANA-RSVD 45262 IANA-RSVD 45263 IANA-RSVD 45264 IANA-RSVD 45265 IANA-RSVD 45266 IANA-RSVD 45267 IANA-RSVD 45268 IANA-RSVD 45269 IANA-RSVD 45270 IANA-RSVD 45271 IANA-RSVD 45272 IANA-RSVD 45273 IANA-RSVD 45274 IANA-RSVD 45275 IANA-RSVD 45276 IANA-RSVD 45277 IANA-RSVD 45278 IANA-RSVD 45279 IANA-RSVD 45280 IANA-RSVD 45281 IANA-RSVD 45282 IANA-RSVD 45283 IANA-RSVD 45284 IANA-RSVD 45285 IANA-RSVD 45286 IANA-RSVD 45287 IANA-RSVD 45288 IANA-RSVD 45289 IANA-RSVD 45290 IANA-RSVD 45291 IANA-RSVD 45292 IANA-RSVD 45293 IANA-RSVD 45294 IANA-RSVD 45295 IANA-RSVD 45296 IANA-RSVD 45297 IANA-RSVD 45298 IANA-RSVD 45299 IANA-RSVD 45300 IANA-RSVD 45301 IANA-RSVD 45302 IANA-RSVD 45303 IANA-RSVD 45304 IANA-RSVD 45305 IANA-RSVD 45306 IANA-RSVD 45307 IANA-RSVD 45308 IANA-RSVD 45309 IANA-RSVD 45310 IANA-RSVD 45311 IANA-RSVD 45312 IANA-RSVD 45313 IANA-RSVD 45314 IANA-RSVD 45315 IANA-RSVD 45316 IANA-RSVD 45317 IANA-RSVD 45318 IANA-RSVD 45319 IANA-RSVD 45320 IANA-RSVD 45321 IANA-RSVD 45322 IANA-RSVD 45323 IANA-RSVD 45324 IANA-RSVD 45325 IANA-RSVD 45326 IANA-RSVD 45327 IANA-RSVD 45328 IANA-RSVD 45329 IANA-RSVD 45330 IANA-RSVD 45331 IANA-RSVD 45332 IANA-RSVD 45333 IANA-RSVD 45334 IANA-RSVD 45335 IANA-RSVD 45336 IANA-RSVD 45337 IANA-RSVD 45338 IANA-RSVD 45339 IANA-RSVD 45340 IANA-RSVD 45341 IANA-RSVD 45342 IANA-RSVD 45343 IANA-RSVD 45344 IANA-RSVD 45345 IANA-RSVD 45346 IANA-RSVD 45347 IANA-RSVD 45348 IANA-RSVD 45349 IANA-RSVD 45350 IANA-RSVD 45351 IANA-RSVD 45352 IANA-RSVD 45353 IANA-RSVD 45354 IANA-RSVD 45355 IANA-RSVD 45356 IANA-RSVD 45357 IANA-RSVD 45358 IANA-RSVD 45359 IANA-RSVD 45360 IANA-RSVD 45361 IANA-RSVD 45362 IANA-RSVD 45363 IANA-RSVD 45364 IANA-RSVD 45365 IANA-RSVD 45366 IANA-RSVD 45367 IANA-RSVD 45368 IANA-RSVD 45369 IANA-RSVD 45370 IANA-RSVD 45371 IANA-RSVD 45372 IANA-RSVD 45373 IANA-RSVD 45374 IANA-RSVD 45375 IANA-RSVD 45376 IANA-RSVD 45377 IANA-RSVD 45378 IANA-RSVD 45379 IANA-RSVD 45380 IANA-RSVD 45381 IANA-RSVD 45382 IANA-RSVD 45383 IANA-RSVD 45384 IANA-RSVD 45385 IANA-RSVD 45386 IANA-RSVD 45387 IANA-RSVD 45388 IANA-RSVD 45389 IANA-RSVD 45390 IANA-RSVD 45391 IANA-RSVD 45392 IANA-RSVD 45393 IANA-RSVD 45394 IANA-RSVD 45395 IANA-RSVD 45396 IANA-RSVD 45397 IANA-RSVD 45398 IANA-RSVD 45399 IANA-RSVD 45400 IANA-RSVD 45401 IANA-RSVD 45402 IANA-RSVD 45403 IANA-RSVD 45404 IANA-RSVD 45405 IANA-RSVD 45406 IANA-RSVD 45407 IANA-RSVD 45408 IANA-RSVD 45409 IANA-RSVD 45410 IANA-RSVD 45411 IANA-RSVD 45412 IANA-RSVD 45413 IANA-RSVD 45414 IANA-RSVD 45415 IANA-RSVD 45416 IANA-RSVD 45417 IANA-RSVD 45418 IANA-RSVD 45419 IANA-RSVD 45420 IANA-RSVD 45421 IANA-RSVD 45422 IANA-RSVD 45423 IANA-RSVD 45424 IANA-RSVD 45425 IANA-RSVD 45426 IANA-RSVD 45427 IANA-RSVD 45428 IANA-RSVD 45429 IANA-RSVD 45430 IANA-RSVD 45431 IANA-RSVD 45432 IANA-RSVD 45433 IANA-RSVD 45434 IANA-RSVD 45435 IANA-RSVD 45436 IANA-RSVD 45437 IANA-RSVD 45438 IANA-RSVD 45439 IANA-RSVD 45440 IANA-RSVD 45441 IANA-RSVD 45442 IANA-RSVD 45443 IANA-RSVD 45444 IANA-RSVD 45445 IANA-RSVD 45446 IANA-RSVD 45447 IANA-RSVD 45448 IANA-RSVD 45449 IANA-RSVD 45450 IANA-RSVD 45451 IANA-RSVD 45452 IANA-RSVD 45453 IANA-RSVD 45454 IANA-RSVD 45455 IANA-RSVD 45456 IANA-RSVD 45457 IANA-RSVD 45458 IANA-RSVD 45459 IANA-RSVD 45460 IANA-RSVD 45461 IANA-RSVD 45462 IANA-RSVD 45463 IANA-RSVD 45464 IANA-RSVD 45465 IANA-RSVD 45466 IANA-RSVD 45467 IANA-RSVD 45468 IANA-RSVD 45469 IANA-RSVD 45470 IANA-RSVD 45471 IANA-RSVD 45472 IANA-RSVD 45473 IANA-RSVD 45474 IANA-RSVD 45475 IANA-RSVD 45476 IANA-RSVD 45477 IANA-RSVD 45478 IANA-RSVD 45479 IANA-RSVD 45480 IANA-RSVD 45481 IANA-RSVD 45482 IANA-RSVD 45483 IANA-RSVD 45484 IANA-RSVD 45485 IANA-RSVD 45486 IANA-RSVD 45487 IANA-RSVD 45488 IANA-RSVD 45489 IANA-RSVD 45490 IANA-RSVD 45491 IANA-RSVD 45492 IANA-RSVD 45493 IANA-RSVD 45494 IANA-RSVD 45495 IANA-RSVD 45496 IANA-RSVD 45497 IANA-RSVD 45498 IANA-RSVD 45499 IANA-RSVD 45500 IANA-RSVD 45501 IANA-RSVD 45502 IANA-RSVD 45503 IANA-RSVD 45504 IANA-RSVD 45505 IANA-RSVD 45506 IANA-RSVD 45507 IANA-RSVD 45508 IANA-RSVD 45509 IANA-RSVD 45510 IANA-RSVD 45511 IANA-RSVD 45512 IANA-RSVD 45513 IANA-RSVD 45514 IANA-RSVD 45515 IANA-RSVD 45516 IANA-RSVD 45517 IANA-RSVD 45518 IANA-RSVD 45519 IANA-RSVD 45520 IANA-RSVD 45521 IANA-RSVD 45522 IANA-RSVD 45523 IANA-RSVD 45524 IANA-RSVD 45525 IANA-RSVD 45526 IANA-RSVD 45527 IANA-RSVD 45528 IANA-RSVD 45529 IANA-RSVD 45530 IANA-RSVD 45531 IANA-RSVD 45532 IANA-RSVD 45533 IANA-RSVD 45534 IANA-RSVD 45535 IANA-RSVD 45536 IANA-RSVD 45537 IANA-RSVD 45538 IANA-RSVD 45539 IANA-RSVD 45540 IANA-RSVD 45541 IANA-RSVD 45542 IANA-RSVD 45543 IANA-RSVD 45544 IANA-RSVD 45545 IANA-RSVD 45546 IANA-RSVD 45547 IANA-RSVD 45548 IANA-RSVD 45549 IANA-RSVD 45550 IANA-RSVD 45551 IANA-RSVD 45552 IANA-RSVD 45553 IANA-RSVD 45554 IANA-RSVD 45555 IANA-RSVD 45556 IANA-RSVD 45557 IANA-RSVD 45558 IANA-RSVD 45559 IANA-RSVD 45560 IANA-RSVD 45561 IANA-RSVD 45562 IANA-RSVD 45563 IANA-RSVD 45564 IANA-RSVD 45565 IANA-RSVD 45566 IANA-RSVD 45567 IANA-RSVD 45568 IANA-RSVD 45569 IANA-RSVD 45570 IANA-RSVD 45571 IANA-RSVD 45572 IANA-RSVD 45573 IANA-RSVD 45574 IANA-RSVD 45575 IANA-RSVD 45576 IANA-RSVD 45577 IANA-RSVD 45578 IANA-RSVD 45579 IANA-RSVD 45580 IANA-RSVD 45581 IANA-RSVD 45582 IANA-RSVD 45583 IANA-RSVD 45584 IANA-RSVD 45585 IANA-RSVD 45586 IANA-RSVD 45587 IANA-RSVD 45588 IANA-RSVD 45589 IANA-RSVD 45590 IANA-RSVD 45591 IANA-RSVD 45592 IANA-RSVD 45593 IANA-RSVD 45594 IANA-RSVD 45595 IANA-RSVD 45596 IANA-RSVD 45597 IANA-RSVD 45598 IANA-RSVD 45599 IANA-RSVD 45600 IANA-RSVD 45601 IANA-RSVD 45602 IANA-RSVD 45603 IANA-RSVD 45604 IANA-RSVD 45605 IANA-RSVD 45606 IANA-RSVD 45607 IANA-RSVD 45608 IANA-RSVD 45609 IANA-RSVD 45610 IANA-RSVD 45611 IANA-RSVD 45612 IANA-RSVD 45613 IANA-RSVD 45614 IANA-RSVD 45615 IANA-RSVD 45616 IANA-RSVD 45617 IANA-RSVD 45618 IANA-RSVD 45619 IANA-RSVD 45620 IANA-RSVD 45621 IANA-RSVD 45622 IANA-RSVD 45623 IANA-RSVD 45624 IANA-RSVD 45625 IANA-RSVD 45626 IANA-RSVD 45627 IANA-RSVD 45628 IANA-RSVD 45629 IANA-RSVD 45630 IANA-RSVD 45631 IANA-RSVD 45632 IANA-RSVD 45633 IANA-RSVD 45634 IANA-RSVD 45635 IANA-RSVD 45636 IANA-RSVD 45637 IANA-RSVD 45638 IANA-RSVD 45639 IANA-RSVD 45640 IANA-RSVD 45641 IANA-RSVD 45642 IANA-RSVD 45643 IANA-RSVD 45644 IANA-RSVD 45645 IANA-RSVD 45646 IANA-RSVD 45647 IANA-RSVD 45648 IANA-RSVD 45649 IANA-RSVD 45650 IANA-RSVD 45651 IANA-RSVD 45652 IANA-RSVD 45653 IANA-RSVD 45654 IANA-RSVD 45655 IANA-RSVD 45656 IANA-RSVD 45657 IANA-RSVD 45658 IANA-RSVD 45659 IANA-RSVD 45660 IANA-RSVD 45661 IANA-RSVD 45662 IANA-RSVD 45663 IANA-RSVD 45664 IANA-RSVD 45665 IANA-RSVD 45666 IANA-RSVD 45667 IANA-RSVD 45668 IANA-RSVD 45669 IANA-RSVD 45670 IANA-RSVD 45671 IANA-RSVD 45672 IANA-RSVD 45673 IANA-RSVD 45674 IANA-RSVD 45675 IANA-RSVD 45676 IANA-RSVD 45677 IANA-RSVD 45678 IANA-RSVD 45679 IANA-RSVD 45680 IANA-RSVD 45681 IANA-RSVD 45682 IANA-RSVD 45683 IANA-RSVD 45684 IANA-RSVD 45685 IANA-RSVD 45686 IANA-RSVD 45687 IANA-RSVD 45688 IANA-RSVD 45689 IANA-RSVD 45690 IANA-RSVD 45691 IANA-RSVD 45692 IANA-RSVD 45693 IANA-RSVD 45694 IANA-RSVD 45695 IANA-RSVD 45696 IANA-RSVD 45697 IANA-RSVD 45698 IANA-RSVD 45699 IANA-RSVD 45700 IANA-RSVD 45701 IANA-RSVD 45702 IANA-RSVD 45703 IANA-RSVD 45704 IANA-RSVD 45705 IANA-RSVD 45706 IANA-RSVD 45707 IANA-RSVD 45708 IANA-RSVD 45709 IANA-RSVD 45710 IANA-RSVD 45711 IANA-RSVD 45712 IANA-RSVD 45713 IANA-RSVD 45714 IANA-RSVD 45715 IANA-RSVD 45716 IANA-RSVD 45717 IANA-RSVD 45718 IANA-RSVD 45719 IANA-RSVD 45720 IANA-RSVD 45721 IANA-RSVD 45722 IANA-RSVD 45723 IANA-RSVD 45724 IANA-RSVD 45725 IANA-RSVD 45726 IANA-RSVD 45727 IANA-RSVD 45728 IANA-RSVD 45729 IANA-RSVD 45730 IANA-RSVD 45731 IANA-RSVD 45732 IANA-RSVD 45733 IANA-RSVD 45734 IANA-RSVD 45735 IANA-RSVD 45736 IANA-RSVD 45737 IANA-RSVD 45738 IANA-RSVD 45739 IANA-RSVD 45740 IANA-RSVD 45741 IANA-RSVD 45742 IANA-RSVD 45743 IANA-RSVD 45744 IANA-RSVD 45745 IANA-RSVD 45746 IANA-RSVD 45747 IANA-RSVD 45748 IANA-RSVD 45749 IANA-RSVD 45750 IANA-RSVD 45751 IANA-RSVD 45752 IANA-RSVD 45753 IANA-RSVD 45754 IANA-RSVD 45755 IANA-RSVD 45756 IANA-RSVD 45757 IANA-RSVD 45758 IANA-RSVD 45759 IANA-RSVD 45760 IANA-RSVD 45761 IANA-RSVD 45762 IANA-RSVD 45763 IANA-RSVD 45764 IANA-RSVD 45765 IANA-RSVD 45766 IANA-RSVD 45767 IANA-RSVD 45768 IANA-RSVD 45769 IANA-RSVD 45770 IANA-RSVD 45771 IANA-RSVD 45772 IANA-RSVD 45773 IANA-RSVD 45774 IANA-RSVD 45775 IANA-RSVD 45776 IANA-RSVD 45777 IANA-RSVD 45778 IANA-RSVD 45779 IANA-RSVD 45780 IANA-RSVD 45781 IANA-RSVD 45782 IANA-RSVD 45783 IANA-RSVD 45784 IANA-RSVD 45785 IANA-RSVD 45786 IANA-RSVD 45787 IANA-RSVD 45788 IANA-RSVD 45789 IANA-RSVD 45790 IANA-RSVD 45791 IANA-RSVD 45792 IANA-RSVD 45793 IANA-RSVD 45794 IANA-RSVD 45795 IANA-RSVD 45796 IANA-RSVD 45797 IANA-RSVD 45798 IANA-RSVD 45799 IANA-RSVD 45800 IANA-RSVD 45801 IANA-RSVD 45802 IANA-RSVD 45803 IANA-RSVD 45804 IANA-RSVD 45805 IANA-RSVD 45806 IANA-RSVD 45807 IANA-RSVD 45808 IANA-RSVD 45809 IANA-RSVD 45810 IANA-RSVD 45811 IANA-RSVD 45812 IANA-RSVD 45813 IANA-RSVD 45814 IANA-RSVD 45815 IANA-RSVD 45816 IANA-RSVD 45817 IANA-RSVD 45818 IANA-RSVD 45819 IANA-RSVD 45820 IANA-RSVD 45821 IANA-RSVD 45822 IANA-RSVD 45823 IANA-RSVD 45824 IANA-RSVD 45825 IANA-RSVD 45826 IANA-RSVD 45827 IANA-RSVD 45828 IANA-RSVD 45829 IANA-RSVD 45830 IANA-RSVD 45831 IANA-RSVD 45832 IANA-RSVD 45833 IANA-RSVD 45834 IANA-RSVD 45835 IANA-RSVD 45836 IANA-RSVD 45837 IANA-RSVD 45838 IANA-RSVD 45839 IANA-RSVD 45840 IANA-RSVD 45841 IANA-RSVD 45842 IANA-RSVD 45843 IANA-RSVD 45844 IANA-RSVD 45845 IANA-RSVD 45846 IANA-RSVD 45847 IANA-RSVD 45848 IANA-RSVD 45849 IANA-RSVD 45850 IANA-RSVD 45851 IANA-RSVD 45852 IANA-RSVD 45853 IANA-RSVD 45854 IANA-RSVD 45855 IANA-RSVD 45856 IANA-RSVD 45857 IANA-RSVD 45858 IANA-RSVD 45859 IANA-RSVD 45860 IANA-RSVD 45861 IANA-RSVD 45862 IANA-RSVD 45863 IANA-RSVD 45864 IANA-RSVD 45865 IANA-RSVD 45866 IANA-RSVD 45867 IANA-RSVD 45868 IANA-RSVD 45869 IANA-RSVD 45870 IANA-RSVD 45871 IANA-RSVD 45872 IANA-RSVD 45873 IANA-RSVD 45874 IANA-RSVD 45875 IANA-RSVD 45876 IANA-RSVD 45877 IANA-RSVD 45878 IANA-RSVD 45879 IANA-RSVD 45880 IANA-RSVD 45881 IANA-RSVD 45882 IANA-RSVD 45883 IANA-RSVD 45884 IANA-RSVD 45885 IANA-RSVD 45886 IANA-RSVD 45887 IANA-RSVD 45888 IANA-RSVD 45889 IANA-RSVD 45890 IANA-RSVD 45891 IANA-RSVD 45892 IANA-RSVD 45893 IANA-RSVD 45894 IANA-RSVD 45895 IANA-RSVD 45896 IANA-RSVD 45897 IANA-RSVD 45898 IANA-RSVD 45899 IANA-RSVD 45900 IANA-RSVD 45901 IANA-RSVD 45902 IANA-RSVD 45903 IANA-RSVD 45904 IANA-RSVD 45905 IANA-RSVD 45906 IANA-RSVD 45907 IANA-RSVD 45908 IANA-RSVD 45909 IANA-RSVD 45910 IANA-RSVD 45911 IANA-RSVD 45912 IANA-RSVD 45913 IANA-RSVD 45914 IANA-RSVD 45915 IANA-RSVD 45916 IANA-RSVD 45917 IANA-RSVD 45918 IANA-RSVD 45919 IANA-RSVD 45920 IANA-RSVD 45921 IANA-RSVD 45922 IANA-RSVD 45923 IANA-RSVD 45924 IANA-RSVD 45925 IANA-RSVD 45926 IANA-RSVD 45927 IANA-RSVD 45928 IANA-RSVD 45929 IANA-RSVD 45930 IANA-RSVD 45931 IANA-RSVD 45932 IANA-RSVD 45933 IANA-RSVD 45934 IANA-RSVD 45935 IANA-RSVD 45936 IANA-RSVD 45937 IANA-RSVD 45938 IANA-RSVD 45939 IANA-RSVD 45940 IANA-RSVD 45941 IANA-RSVD 45942 IANA-RSVD 45943 IANA-RSVD 45944 IANA-RSVD 45945 IANA-RSVD 45946 IANA-RSVD 45947 IANA-RSVD 45948 IANA-RSVD 45949 IANA-RSVD 45950 IANA-RSVD 45951 IANA-RSVD 45952 IANA-RSVD 45953 IANA-RSVD 45954 IANA-RSVD 45955 IANA-RSVD 45956 IANA-RSVD 45957 IANA-RSVD 45958 IANA-RSVD 45959 IANA-RSVD 45960 IANA-RSVD 45961 IANA-RSVD 45962 IANA-RSVD 45963 IANA-RSVD 45964 IANA-RSVD 45965 IANA-RSVD 45966 IANA-RSVD 45967 IANA-RSVD 45968 IANA-RSVD 45969 IANA-RSVD 45970 IANA-RSVD 45971 IANA-RSVD 45972 IANA-RSVD 45973 IANA-RSVD 45974 IANA-RSVD 45975 IANA-RSVD 45976 IANA-RSVD 45977 IANA-RSVD 45978 IANA-RSVD 45979 IANA-RSVD 45980 IANA-RSVD 45981 IANA-RSVD 45982 IANA-RSVD 45983 IANA-RSVD 45984 IANA-RSVD 45985 IANA-RSVD 45986 IANA-RSVD 45987 IANA-RSVD 45988 IANA-RSVD 45989 IANA-RSVD 45990 IANA-RSVD 45991 IANA-RSVD 45992 IANA-RSVD 45993 IANA-RSVD 45994 IANA-RSVD 45995 IANA-RSVD 45996 IANA-RSVD 45997 IANA-RSVD 45998 IANA-RSVD 45999 IANA-RSVD 46000 IANA-RSVD 46001 IANA-RSVD 46002 IANA-RSVD 46003 IANA-RSVD 46004 IANA-RSVD 46005 IANA-RSVD 46006 IANA-RSVD 46007 IANA-RSVD 46008 IANA-RSVD 46009 IANA-RSVD 46010 IANA-RSVD 46011 IANA-RSVD 46012 IANA-RSVD 46013 IANA-RSVD 46014 IANA-RSVD 46015 IANA-RSVD 46016 IANA-RSVD 46017 IANA-RSVD 46018 IANA-RSVD 46019 IANA-RSVD 46020 IANA-RSVD 46021 IANA-RSVD 46022 IANA-RSVD 46023 IANA-RSVD 46024 IANA-RSVD 46025 IANA-RSVD 46026 IANA-RSVD 46027 IANA-RSVD 46028 IANA-RSVD 46029 IANA-RSVD 46030 IANA-RSVD 46031 IANA-RSVD 46032 IANA-RSVD 46033 IANA-RSVD 46034 IANA-RSVD 46035 IANA-RSVD 46036 IANA-RSVD 46037 IANA-RSVD 46038 IANA-RSVD 46039 IANA-RSVD 46040 IANA-RSVD 46041 IANA-RSVD 46042 IANA-RSVD 46043 IANA-RSVD 46044 IANA-RSVD 46045 IANA-RSVD 46046 IANA-RSVD 46047 IANA-RSVD 46048 IANA-RSVD 46049 IANA-RSVD 46050 IANA-RSVD 46051 IANA-RSVD 46052 IANA-RSVD 46053 IANA-RSVD 46054 IANA-RSVD 46055 IANA-RSVD 46056 IANA-RSVD 46057 IANA-RSVD 46058 IANA-RSVD 46059 IANA-RSVD 46060 IANA-RSVD 46061 IANA-RSVD 46062 IANA-RSVD 46063 IANA-RSVD 46064 IANA-RSVD 46065 IANA-RSVD 46066 IANA-RSVD 46067 IANA-RSVD 46068 IANA-RSVD 46069 IANA-RSVD 46070 IANA-RSVD 46071 IANA-RSVD 46072 IANA-RSVD 46073 IANA-RSVD 46074 IANA-RSVD 46075 IANA-RSVD 46076 IANA-RSVD 46077 IANA-RSVD 46078 IANA-RSVD 46079 IANA-RSVD 46080 IANA-RSVD 46081 IANA-RSVD 46082 IANA-RSVD 46083 IANA-RSVD 46084 IANA-RSVD 46085 IANA-RSVD 46086 IANA-RSVD 46087 IANA-RSVD 46088 IANA-RSVD 46089 IANA-RSVD 46090 IANA-RSVD 46091 IANA-RSVD 46092 IANA-RSVD 46093 IANA-RSVD 46094 IANA-RSVD 46095 IANA-RSVD 46096 IANA-RSVD 46097 IANA-RSVD 46098 IANA-RSVD 46099 IANA-RSVD 46100 IANA-RSVD 46101 IANA-RSVD 46102 IANA-RSVD 46103 IANA-RSVD 46104 IANA-RSVD 46105 IANA-RSVD 46106 IANA-RSVD 46107 IANA-RSVD 46108 IANA-RSVD 46109 IANA-RSVD 46110 IANA-RSVD 46111 IANA-RSVD 46112 IANA-RSVD 46113 IANA-RSVD 46114 IANA-RSVD 46115 IANA-RSVD 46116 IANA-RSVD 46117 IANA-RSVD 46118 IANA-RSVD 46119 IANA-RSVD 46120 IANA-RSVD 46121 IANA-RSVD 46122 IANA-RSVD 46123 IANA-RSVD 46124 IANA-RSVD 46125 IANA-RSVD 46126 IANA-RSVD 46127 IANA-RSVD 46128 IANA-RSVD 46129 IANA-RSVD 46130 IANA-RSVD 46131 IANA-RSVD 46132 IANA-RSVD 46133 IANA-RSVD 46134 IANA-RSVD 46135 IANA-RSVD 46136 IANA-RSVD 46137 IANA-RSVD 46138 IANA-RSVD 46139 IANA-RSVD 46140 IANA-RSVD 46141 IANA-RSVD 46142 IANA-RSVD 46143 IANA-RSVD 46144 IANA-RSVD 46145 IANA-RSVD 46146 IANA-RSVD 46147 IANA-RSVD 46148 IANA-RSVD 46149 IANA-RSVD 46150 IANA-RSVD 46151 IANA-RSVD 46152 IANA-RSVD 46153 IANA-RSVD 46154 IANA-RSVD 46155 IANA-RSVD 46156 IANA-RSVD 46157 IANA-RSVD 46158 IANA-RSVD 46159 IANA-RSVD 46160 IANA-RSVD 46161 IANA-RSVD 46162 IANA-RSVD 46163 IANA-RSVD 46164 IANA-RSVD 46165 IANA-RSVD 46166 IANA-RSVD 46167 IANA-RSVD 46168 IANA-RSVD 46169 IANA-RSVD 46170 IANA-RSVD 46171 IANA-RSVD 46172 IANA-RSVD 46173 IANA-RSVD 46174 IANA-RSVD 46175 IANA-RSVD 46176 IANA-RSVD 46177 IANA-RSVD 46178 IANA-RSVD 46179 IANA-RSVD 46180 IANA-RSVD 46181 IANA-RSVD 46182 IANA-RSVD 46183 IANA-RSVD 46184 IANA-RSVD 46185 IANA-RSVD 46186 IANA-RSVD 46187 IANA-RSVD 46188 IANA-RSVD 46189 IANA-RSVD 46190 IANA-RSVD 46191 IANA-RSVD 46192 IANA-RSVD 46193 IANA-RSVD 46194 IANA-RSVD 46195 IANA-RSVD 46196 IANA-RSVD 46197 IANA-RSVD 46198 IANA-RSVD 46199 IANA-RSVD 46200 IANA-RSVD 46201 IANA-RSVD 46202 IANA-RSVD 46203 IANA-RSVD 46204 IANA-RSVD 46205 IANA-RSVD 46206 IANA-RSVD 46207 IANA-RSVD 46208 IANA-RSVD 46209 IANA-RSVD 46210 IANA-RSVD 46211 IANA-RSVD 46212 IANA-RSVD 46213 IANA-RSVD 46214 IANA-RSVD 46215 IANA-RSVD 46216 IANA-RSVD 46217 IANA-RSVD 46218 IANA-RSVD 46219 IANA-RSVD 46220 IANA-RSVD 46221 IANA-RSVD 46222 IANA-RSVD 46223 IANA-RSVD 46224 IANA-RSVD 46225 IANA-RSVD 46226 IANA-RSVD 46227 IANA-RSVD 46228 IANA-RSVD 46229 IANA-RSVD 46230 IANA-RSVD 46231 IANA-RSVD 46232 IANA-RSVD 46233 IANA-RSVD 46234 IANA-RSVD 46235 IANA-RSVD 46236 IANA-RSVD 46237 IANA-RSVD 46238 IANA-RSVD 46239 IANA-RSVD 46240 IANA-RSVD 46241 IANA-RSVD 46242 IANA-RSVD 46243 IANA-RSVD 46244 IANA-RSVD 46245 IANA-RSVD 46246 IANA-RSVD 46247 IANA-RSVD 46248 IANA-RSVD 46249 IANA-RSVD 46250 IANA-RSVD 46251 IANA-RSVD 46252 IANA-RSVD 46253 IANA-RSVD 46254 IANA-RSVD 46255 IANA-RSVD 46256 IANA-RSVD 46257 IANA-RSVD 46258 IANA-RSVD 46259 IANA-RSVD 46260 IANA-RSVD 46261 IANA-RSVD 46262 IANA-RSVD 46263 IANA-RSVD 46264 IANA-RSVD 46265 IANA-RSVD 46266 IANA-RSVD 46267 IANA-RSVD 46268 IANA-RSVD 46269 IANA-RSVD 46270 IANA-RSVD 46271 IANA-RSVD 46272 IANA-RSVD 46273 IANA-RSVD 46274 IANA-RSVD 46275 IANA-RSVD 46276 IANA-RSVD 46277 IANA-RSVD 46278 IANA-RSVD 46279 IANA-RSVD 46280 IANA-RSVD 46281 IANA-RSVD 46282 IANA-RSVD 46283 IANA-RSVD 46284 IANA-RSVD 46285 IANA-RSVD 46286 IANA-RSVD 46287 IANA-RSVD 46288 IANA-RSVD 46289 IANA-RSVD 46290 IANA-RSVD 46291 IANA-RSVD 46292 IANA-RSVD 46293 IANA-RSVD 46294 IANA-RSVD 46295 IANA-RSVD 46296 IANA-RSVD 46297 IANA-RSVD 46298 IANA-RSVD 46299 IANA-RSVD 46300 IANA-RSVD 46301 IANA-RSVD 46302 IANA-RSVD 46303 IANA-RSVD 46304 IANA-RSVD 46305 IANA-RSVD 46306 IANA-RSVD 46307 IANA-RSVD 46308 IANA-RSVD 46309 IANA-RSVD 46310 IANA-RSVD 46311 IANA-RSVD 46312 IANA-RSVD 46313 IANA-RSVD 46314 IANA-RSVD 46315 IANA-RSVD 46316 IANA-RSVD 46317 IANA-RSVD 46318 IANA-RSVD 46319 IANA-RSVD 46320 IANA-RSVD 46321 IANA-RSVD 46322 IANA-RSVD 46323 IANA-RSVD 46324 IANA-RSVD 46325 IANA-RSVD 46326 IANA-RSVD 46327 IANA-RSVD 46328 IANA-RSVD 46329 IANA-RSVD 46330 IANA-RSVD 46331 IANA-RSVD 46332 IANA-RSVD 46333 IANA-RSVD 46334 IANA-RSVD 46335 IANA-RSVD 46336 IANA-RSVD 46337 IANA-RSVD 46338 IANA-RSVD 46339 IANA-RSVD 46340 IANA-RSVD 46341 IANA-RSVD 46342 IANA-RSVD 46343 IANA-RSVD 46344 IANA-RSVD 46345 IANA-RSVD 46346 IANA-RSVD 46347 IANA-RSVD 46348 IANA-RSVD 46349 IANA-RSVD 46350 IANA-RSVD 46351 IANA-RSVD 46352 IANA-RSVD 46353 IANA-RSVD 46354 IANA-RSVD 46355 IANA-RSVD 46356 IANA-RSVD 46357 IANA-RSVD 46358 IANA-RSVD 46359 IANA-RSVD 46360 IANA-RSVD 46361 IANA-RSVD 46362 IANA-RSVD 46363 IANA-RSVD 46364 IANA-RSVD 46365 IANA-RSVD 46366 IANA-RSVD 46367 IANA-RSVD 46368 IANA-RSVD 46369 IANA-RSVD 46370 IANA-RSVD 46371 IANA-RSVD 46372 IANA-RSVD 46373 IANA-RSVD 46374 IANA-RSVD 46375 IANA-RSVD 46376 IANA-RSVD 46377 IANA-RSVD 46378 IANA-RSVD 46379 IANA-RSVD 46380 IANA-RSVD 46381 IANA-RSVD 46382 IANA-RSVD 46383 IANA-RSVD 46384 IANA-RSVD 46385 IANA-RSVD 46386 IANA-RSVD 46387 IANA-RSVD 46388 IANA-RSVD 46389 IANA-RSVD 46390 IANA-RSVD 46391 IANA-RSVD 46392 IANA-RSVD 46393 IANA-RSVD 46394 IANA-RSVD 46395 IANA-RSVD 46396 IANA-RSVD 46397 IANA-RSVD 46398 IANA-RSVD 46399 IANA-RSVD 46400 IANA-RSVD 46401 IANA-RSVD 46402 IANA-RSVD 46403 IANA-RSVD 46404 IANA-RSVD 46405 IANA-RSVD 46406 IANA-RSVD 46407 IANA-RSVD 46408 IANA-RSVD 46409 IANA-RSVD 46410 IANA-RSVD 46411 IANA-RSVD 46412 IANA-RSVD 46413 IANA-RSVD 46414 IANA-RSVD 46415 IANA-RSVD 46416 IANA-RSVD 46417 IANA-RSVD 46418 IANA-RSVD 46419 IANA-RSVD 46420 IANA-RSVD 46421 IANA-RSVD 46422 IANA-RSVD 46423 IANA-RSVD 46424 IANA-RSVD 46425 IANA-RSVD 46426 IANA-RSVD 46427 IANA-RSVD 46428 IANA-RSVD 46429 IANA-RSVD 46430 IANA-RSVD 46431 IANA-RSVD 46432 IANA-RSVD 46433 IANA-RSVD 46434 IANA-RSVD 46435 IANA-RSVD 46436 IANA-RSVD 46437 IANA-RSVD 46438 IANA-RSVD 46439 IANA-RSVD 46440 IANA-RSVD 46441 IANA-RSVD 46442 IANA-RSVD 46443 IANA-RSVD 46444 IANA-RSVD 46445 IANA-RSVD 46446 IANA-RSVD 46447 IANA-RSVD 46448 IANA-RSVD 46449 IANA-RSVD 46450 IANA-RSVD 46451 IANA-RSVD 46452 IANA-RSVD 46453 IANA-RSVD 46454 IANA-RSVD 46455 IANA-RSVD 46456 IANA-RSVD 46457 IANA-RSVD 46458 IANA-RSVD 46459 IANA-RSVD 46460 IANA-RSVD 46461 IANA-RSVD 46462 IANA-RSVD 46463 IANA-RSVD 46464 IANA-RSVD 46465 IANA-RSVD 46466 IANA-RSVD 46467 IANA-RSVD 46468 IANA-RSVD 46469 IANA-RSVD 46470 IANA-RSVD 46471 IANA-RSVD 46472 IANA-RSVD 46473 IANA-RSVD 46474 IANA-RSVD 46475 IANA-RSVD 46476 IANA-RSVD 46477 IANA-RSVD 46478 IANA-RSVD 46479 IANA-RSVD 46480 IANA-RSVD 46481 IANA-RSVD 46482 IANA-RSVD 46483 IANA-RSVD 46484 IANA-RSVD 46485 IANA-RSVD 46486 IANA-RSVD 46487 IANA-RSVD 46488 IANA-RSVD 46489 IANA-RSVD 46490 IANA-RSVD 46491 IANA-RSVD 46492 IANA-RSVD 46493 IANA-RSVD 46494 IANA-RSVD 46495 IANA-RSVD 46496 IANA-RSVD 46497 IANA-RSVD 46498 IANA-RSVD 46499 IANA-RSVD 46500 IANA-RSVD 46501 IANA-RSVD 46502 IANA-RSVD 46503 IANA-RSVD 46504 IANA-RSVD 46505 IANA-RSVD 46506 IANA-RSVD 46507 IANA-RSVD 46508 IANA-RSVD 46509 IANA-RSVD 46510 IANA-RSVD 46511 IANA-RSVD 46512 IANA-RSVD 46513 IANA-RSVD 46514 IANA-RSVD 46515 IANA-RSVD 46516 IANA-RSVD 46517 IANA-RSVD 46518 IANA-RSVD 46519 IANA-RSVD 46520 IANA-RSVD 46521 IANA-RSVD 46522 IANA-RSVD 46523 IANA-RSVD 46524 IANA-RSVD 46525 IANA-RSVD 46526 IANA-RSVD 46527 IANA-RSVD 46528 IANA-RSVD 46529 IANA-RSVD 46530 IANA-RSVD 46531 IANA-RSVD 46532 IANA-RSVD 46533 IANA-RSVD 46534 IANA-RSVD 46535 IANA-RSVD 46536 IANA-RSVD 46537 IANA-RSVD 46538 IANA-RSVD 46539 IANA-RSVD 46540 IANA-RSVD 46541 IANA-RSVD 46542 IANA-RSVD 46543 IANA-RSVD 46544 IANA-RSVD 46545 IANA-RSVD 46546 IANA-RSVD 46547 IANA-RSVD 46548 IANA-RSVD 46549 IANA-RSVD 46550 IANA-RSVD 46551 IANA-RSVD 46552 IANA-RSVD 46553 IANA-RSVD 46554 IANA-RSVD 46555 IANA-RSVD 46556 IANA-RSVD 46557 IANA-RSVD 46558 IANA-RSVD 46559 IANA-RSVD 46560 IANA-RSVD 46561 IANA-RSVD 46562 IANA-RSVD 46563 IANA-RSVD 46564 IANA-RSVD 46565 IANA-RSVD 46566 IANA-RSVD 46567 IANA-RSVD 46568 IANA-RSVD 46569 IANA-RSVD 46570 IANA-RSVD 46571 IANA-RSVD 46572 IANA-RSVD 46573 IANA-RSVD 46574 IANA-RSVD 46575 IANA-RSVD 46576 IANA-RSVD 46577 IANA-RSVD 46578 IANA-RSVD 46579 IANA-RSVD 46580 IANA-RSVD 46581 IANA-RSVD 46582 IANA-RSVD 46583 IANA-RSVD 46584 IANA-RSVD 46585 IANA-RSVD 46586 IANA-RSVD 46587 IANA-RSVD 46588 IANA-RSVD 46589 IANA-RSVD 46590 IANA-RSVD 46591 IANA-RSVD 46592 IANA-RSVD 46593 IANA-RSVD 46594 IANA-RSVD 46595 IANA-RSVD 46596 IANA-RSVD 46597 IANA-RSVD 46598 IANA-RSVD 46599 IANA-RSVD 46600 IANA-RSVD 46601 IANA-RSVD 46602 IANA-RSVD 46603 IANA-RSVD 46604 IANA-RSVD 46605 IANA-RSVD 46606 IANA-RSVD 46607 IANA-RSVD 46608 IANA-RSVD 46609 IANA-RSVD 46610 IANA-RSVD 46611 IANA-RSVD 46612 IANA-RSVD 46613 IANA-RSVD 46614 IANA-RSVD 46615 IANA-RSVD 46616 IANA-RSVD 46617 IANA-RSVD 46618 IANA-RSVD 46619 IANA-RSVD 46620 IANA-RSVD 46621 IANA-RSVD 46622 IANA-RSVD 46623 IANA-RSVD 46624 IANA-RSVD 46625 IANA-RSVD 46626 IANA-RSVD 46627 IANA-RSVD 46628 IANA-RSVD 46629 IANA-RSVD 46630 IANA-RSVD 46631 IANA-RSVD 46632 IANA-RSVD 46633 IANA-RSVD 46634 IANA-RSVD 46635 IANA-RSVD 46636 IANA-RSVD 46637 IANA-RSVD 46638 IANA-RSVD 46639 IANA-RSVD 46640 IANA-RSVD 46641 IANA-RSVD 46642 IANA-RSVD 46643 IANA-RSVD 46644 IANA-RSVD 46645 IANA-RSVD 46646 IANA-RSVD 46647 IANA-RSVD 46648 IANA-RSVD 46649 IANA-RSVD 46650 IANA-RSVD 46651 IANA-RSVD 46652 IANA-RSVD 46653 IANA-RSVD 46654 IANA-RSVD 46655 IANA-RSVD 46656 IANA-RSVD 46657 IANA-RSVD 46658 IANA-RSVD 46659 IANA-RSVD 46660 IANA-RSVD 46661 IANA-RSVD 46662 IANA-RSVD 46663 IANA-RSVD 46664 IANA-RSVD 46665 IANA-RSVD 46666 IANA-RSVD 46667 IANA-RSVD 46668 IANA-RSVD 46669 IANA-RSVD 46670 IANA-RSVD 46671 IANA-RSVD 46672 IANA-RSVD 46673 IANA-RSVD 46674 IANA-RSVD 46675 IANA-RSVD 46676 IANA-RSVD 46677 IANA-RSVD 46678 IANA-RSVD 46679 IANA-RSVD 46680 IANA-RSVD 46681 IANA-RSVD 46682 IANA-RSVD 46683 IANA-RSVD 46684 IANA-RSVD 46685 IANA-RSVD 46686 IANA-RSVD 46687 IANA-RSVD 46688 IANA-RSVD 46689 IANA-RSVD 46690 IANA-RSVD 46691 IANA-RSVD 46692 IANA-RSVD 46693 IANA-RSVD 46694 IANA-RSVD 46695 IANA-RSVD 46696 IANA-RSVD 46697 IANA-RSVD 46698 IANA-RSVD 46699 IANA-RSVD 46700 IANA-RSVD 46701 IANA-RSVD 46702 IANA-RSVD 46703 IANA-RSVD 46704 IANA-RSVD 46705 IANA-RSVD 46706 IANA-RSVD 46707 IANA-RSVD 46708 IANA-RSVD 46709 IANA-RSVD 46710 IANA-RSVD 46711 IANA-RSVD 46712 IANA-RSVD 46713 IANA-RSVD 46714 IANA-RSVD 46715 IANA-RSVD 46716 IANA-RSVD 46717 IANA-RSVD 46718 IANA-RSVD 46719 IANA-RSVD 46720 IANA-RSVD 46721 IANA-RSVD 46722 IANA-RSVD 46723 IANA-RSVD 46724 IANA-RSVD 46725 IANA-RSVD 46726 IANA-RSVD 46727 IANA-RSVD 46728 IANA-RSVD 46729 IANA-RSVD 46730 IANA-RSVD 46731 IANA-RSVD 46732 IANA-RSVD 46733 IANA-RSVD 46734 IANA-RSVD 46735 IANA-RSVD 46736 IANA-RSVD 46737 IANA-RSVD 46738 IANA-RSVD 46739 IANA-RSVD 46740 IANA-RSVD 46741 IANA-RSVD 46742 IANA-RSVD 46743 IANA-RSVD 46744 IANA-RSVD 46745 IANA-RSVD 46746 IANA-RSVD 46747 IANA-RSVD 46748 IANA-RSVD 46749 IANA-RSVD 46750 IANA-RSVD 46751 IANA-RSVD 46752 IANA-RSVD 46753 IANA-RSVD 46754 IANA-RSVD 46755 IANA-RSVD 46756 IANA-RSVD 46757 IANA-RSVD 46758 IANA-RSVD 46759 IANA-RSVD 46760 IANA-RSVD 46761 IANA-RSVD 46762 IANA-RSVD 46763 IANA-RSVD 46764 IANA-RSVD 46765 IANA-RSVD 46766 IANA-RSVD 46767 IANA-RSVD 46768 IANA-RSVD 46769 IANA-RSVD 46770 IANA-RSVD 46771 IANA-RSVD 46772 IANA-RSVD 46773 IANA-RSVD 46774 IANA-RSVD 46775 IANA-RSVD 46776 IANA-RSVD 46777 IANA-RSVD 46778 IANA-RSVD 46779 IANA-RSVD 46780 IANA-RSVD 46781 IANA-RSVD 46782 IANA-RSVD 46783 IANA-RSVD 46784 IANA-RSVD 46785 IANA-RSVD 46786 IANA-RSVD 46787 IANA-RSVD 46788 IANA-RSVD 46789 IANA-RSVD 46790 IANA-RSVD 46791 IANA-RSVD 46792 IANA-RSVD 46793 IANA-RSVD 46794 IANA-RSVD 46795 IANA-RSVD 46796 IANA-RSVD 46797 IANA-RSVD 46798 IANA-RSVD 46799 IANA-RSVD 46800 IANA-RSVD 46801 IANA-RSVD 46802 IANA-RSVD 46803 IANA-RSVD 46804 IANA-RSVD 46805 IANA-RSVD 46806 IANA-RSVD 46807 IANA-RSVD 46808 IANA-RSVD 46809 IANA-RSVD 46810 IANA-RSVD 46811 IANA-RSVD 46812 IANA-RSVD 46813 IANA-RSVD 46814 IANA-RSVD 46815 IANA-RSVD 46816 IANA-RSVD 46817 IANA-RSVD 46818 IANA-RSVD 46819 IANA-RSVD 46820 IANA-RSVD 46821 IANA-RSVD 46822 IANA-RSVD 46823 IANA-RSVD 46824 IANA-RSVD 46825 IANA-RSVD 46826 IANA-RSVD 46827 IANA-RSVD 46828 IANA-RSVD 46829 IANA-RSVD 46830 IANA-RSVD 46831 IANA-RSVD 46832 IANA-RSVD 46833 IANA-RSVD 46834 IANA-RSVD 46835 IANA-RSVD 46836 IANA-RSVD 46837 IANA-RSVD 46838 IANA-RSVD 46839 IANA-RSVD 46840 IANA-RSVD 46841 IANA-RSVD 46842 IANA-RSVD 46843 IANA-RSVD 46844 IANA-RSVD 46845 IANA-RSVD 46846 IANA-RSVD 46847 IANA-RSVD 46848 IANA-RSVD 46849 IANA-RSVD 46850 IANA-RSVD 46851 IANA-RSVD 46852 IANA-RSVD 46853 IANA-RSVD 46854 IANA-RSVD 46855 IANA-RSVD 46856 IANA-RSVD 46857 IANA-RSVD 46858 IANA-RSVD 46859 IANA-RSVD 46860 IANA-RSVD 46861 IANA-RSVD 46862 IANA-RSVD 46863 IANA-RSVD 46864 IANA-RSVD 46865 IANA-RSVD 46866 IANA-RSVD 46867 IANA-RSVD 46868 IANA-RSVD 46869 IANA-RSVD 46870 IANA-RSVD 46871 IANA-RSVD 46872 IANA-RSVD 46873 IANA-RSVD 46874 IANA-RSVD 46875 IANA-RSVD 46876 IANA-RSVD 46877 IANA-RSVD 46878 IANA-RSVD 46879 IANA-RSVD 46880 IANA-RSVD 46881 IANA-RSVD 46882 IANA-RSVD 46883 IANA-RSVD 46884 IANA-RSVD 46885 IANA-RSVD 46886 IANA-RSVD 46887 IANA-RSVD 46888 IANA-RSVD 46889 IANA-RSVD 46890 IANA-RSVD 46891 IANA-RSVD 46892 IANA-RSVD 46893 IANA-RSVD 46894 IANA-RSVD 46895 IANA-RSVD 46896 IANA-RSVD 46897 IANA-RSVD 46898 IANA-RSVD 46899 IANA-RSVD 46900 IANA-RSVD 46901 IANA-RSVD 46902 IANA-RSVD 46903 IANA-RSVD 46904 IANA-RSVD 46905 IANA-RSVD 46906 IANA-RSVD 46907 IANA-RSVD 46908 IANA-RSVD 46909 IANA-RSVD 46910 IANA-RSVD 46911 IANA-RSVD 46912 IANA-RSVD 46913 IANA-RSVD 46914 IANA-RSVD 46915 IANA-RSVD 46916 IANA-RSVD 46917 IANA-RSVD 46918 IANA-RSVD 46919 IANA-RSVD 46920 IANA-RSVD 46921 IANA-RSVD 46922 IANA-RSVD 46923 IANA-RSVD 46924 IANA-RSVD 46925 IANA-RSVD 46926 IANA-RSVD 46927 IANA-RSVD 46928 IANA-RSVD 46929 IANA-RSVD 46930 IANA-RSVD 46931 IANA-RSVD 46932 IANA-RSVD 46933 IANA-RSVD 46934 IANA-RSVD 46935 IANA-RSVD 46936 IANA-RSVD 46937 IANA-RSVD 46938 IANA-RSVD 46939 IANA-RSVD 46940 IANA-RSVD 46941 IANA-RSVD 46942 IANA-RSVD 46943 IANA-RSVD 46944 IANA-RSVD 46945 IANA-RSVD 46946 IANA-RSVD 46947 IANA-RSVD 46948 IANA-RSVD 46949 IANA-RSVD 46950 IANA-RSVD 46951 IANA-RSVD 46952 IANA-RSVD 46953 IANA-RSVD 46954 IANA-RSVD 46955 IANA-RSVD 46956 IANA-RSVD 46957 IANA-RSVD 46958 IANA-RSVD 46959 IANA-RSVD 46960 IANA-RSVD 46961 IANA-RSVD 46962 IANA-RSVD 46963 IANA-RSVD 46964 IANA-RSVD 46965 IANA-RSVD 46966 IANA-RSVD 46967 IANA-RSVD 46968 IANA-RSVD 46969 IANA-RSVD 46970 IANA-RSVD 46971 IANA-RSVD 46972 IANA-RSVD 46973 IANA-RSVD 46974 IANA-RSVD 46975 IANA-RSVD 46976 IANA-RSVD 46977 IANA-RSVD 46978 IANA-RSVD 46979 IANA-RSVD 46980 IANA-RSVD 46981 IANA-RSVD 46982 IANA-RSVD 46983 IANA-RSVD 46984 IANA-RSVD 46985 IANA-RSVD 46986 IANA-RSVD 46987 IANA-RSVD 46988 IANA-RSVD 46989 IANA-RSVD 46990 IANA-RSVD 46991 IANA-RSVD 46992 IANA-RSVD 46993 IANA-RSVD 46994 IANA-RSVD 46995 IANA-RSVD 46996 IANA-RSVD 46997 IANA-RSVD 46998 IANA-RSVD 46999 IANA-RSVD 47000 IANA-RSVD 47001 IANA-RSVD 47002 IANA-RSVD 47003 IANA-RSVD 47004 IANA-RSVD 47005 IANA-RSVD 47006 IANA-RSVD 47007 IANA-RSVD 47008 IANA-RSVD 47009 IANA-RSVD 47010 IANA-RSVD 47011 IANA-RSVD 47012 IANA-RSVD 47013 IANA-RSVD 47014 IANA-RSVD 47015 IANA-RSVD 47016 IANA-RSVD 47017 IANA-RSVD 47018 IANA-RSVD 47019 IANA-RSVD 47020 IANA-RSVD 47021 IANA-RSVD 47022 IANA-RSVD 47023 IANA-RSVD 47024 IANA-RSVD 47025 IANA-RSVD 47026 IANA-RSVD 47027 IANA-RSVD 47028 IANA-RSVD 47029 IANA-RSVD 47030 IANA-RSVD 47031 IANA-RSVD 47032 IANA-RSVD 47033 IANA-RSVD 47034 IANA-RSVD 47035 IANA-RSVD 47036 IANA-RSVD 47037 IANA-RSVD 47038 IANA-RSVD 47039 IANA-RSVD 47040 IANA-RSVD 47041 IANA-RSVD 47042 IANA-RSVD 47043 IANA-RSVD 47044 IANA-RSVD 47045 IANA-RSVD 47046 IANA-RSVD 47047 IANA-RSVD 47048 IANA-RSVD 47049 IANA-RSVD 47050 IANA-RSVD 47051 IANA-RSVD 47052 IANA-RSVD 47053 IANA-RSVD 47054 IANA-RSVD 47055 IANA-RSVD 47056 IANA-RSVD 47057 IANA-RSVD 47058 IANA-RSVD 47059 IANA-RSVD 47060 IANA-RSVD 47061 IANA-RSVD 47062 IANA-RSVD 47063 IANA-RSVD 47064 IANA-RSVD 47065 IANA-RSVD 47066 IANA-RSVD 47067 IANA-RSVD 47068 IANA-RSVD 47069 IANA-RSVD 47070 IANA-RSVD 47071 IANA-RSVD 47072 IANA-RSVD 47073 IANA-RSVD 47074 IANA-RSVD 47075 IANA-RSVD 47076 IANA-RSVD 47077 IANA-RSVD 47078 IANA-RSVD 47079 IANA-RSVD 47080 IANA-RSVD 47081 IANA-RSVD 47082 IANA-RSVD 47083 IANA-RSVD 47084 IANA-RSVD 47085 IANA-RSVD 47086 IANA-RSVD 47087 IANA-RSVD 47088 IANA-RSVD 47089 IANA-RSVD 47090 IANA-RSVD 47091 IANA-RSVD 47092 IANA-RSVD 47093 IANA-RSVD 47094 IANA-RSVD 47095 IANA-RSVD 47096 IANA-RSVD 47097 IANA-RSVD 47098 IANA-RSVD 47099 IANA-RSVD 47100 IANA-RSVD 47101 IANA-RSVD 47102 IANA-RSVD 47103 IANA-RSVD 47104 IANA-RSVD 47105 IANA-RSVD 47106 IANA-RSVD 47107 IANA-RSVD 47108 IANA-RSVD 47109 IANA-RSVD 47110 IANA-RSVD 47111 IANA-RSVD 47112 IANA-RSVD 47113 IANA-RSVD 47114 IANA-RSVD 47115 IANA-RSVD 47116 IANA-RSVD 47117 IANA-RSVD 47118 IANA-RSVD 47119 IANA-RSVD 47120 IANA-RSVD 47121 IANA-RSVD 47122 IANA-RSVD 47123 IANA-RSVD 47124 IANA-RSVD 47125 IANA-RSVD 47126 IANA-RSVD 47127 IANA-RSVD 47128 IANA-RSVD 47129 IANA-RSVD 47130 IANA-RSVD 47131 IANA-RSVD 47132 IANA-RSVD 47133 IANA-RSVD 47134 IANA-RSVD 47135 IANA-RSVD 47136 IANA-RSVD 47137 IANA-RSVD 47138 IANA-RSVD 47139 IANA-RSVD 47140 IANA-RSVD 47141 IANA-RSVD 47142 IANA-RSVD 47143 IANA-RSVD 47144 IANA-RSVD 47145 IANA-RSVD 47146 IANA-RSVD 47147 IANA-RSVD 47148 IANA-RSVD 47149 IANA-RSVD 47150 IANA-RSVD 47151 IANA-RSVD 47152 IANA-RSVD 47153 IANA-RSVD 47154 IANA-RSVD 47155 IANA-RSVD 47156 IANA-RSVD 47157 IANA-RSVD 47158 IANA-RSVD 47159 IANA-RSVD 47160 IANA-RSVD 47161 IANA-RSVD 47162 IANA-RSVD 47163 IANA-RSVD 47164 IANA-RSVD 47165 IANA-RSVD 47166 IANA-RSVD 47167 IANA-RSVD 47168 IANA-RSVD 47169 IANA-RSVD 47170 IANA-RSVD 47171 IANA-RSVD 47172 IANA-RSVD 47173 IANA-RSVD 47174 IANA-RSVD 47175 IANA-RSVD 47176 IANA-RSVD 47177 IANA-RSVD 47178 IANA-RSVD 47179 IANA-RSVD 47180 IANA-RSVD 47181 IANA-RSVD 47182 IANA-RSVD 47183 IANA-RSVD 47184 IANA-RSVD 47185 IANA-RSVD 47186 IANA-RSVD 47187 IANA-RSVD 47188 IANA-RSVD 47189 IANA-RSVD 47190 IANA-RSVD 47191 IANA-RSVD 47192 IANA-RSVD 47193 IANA-RSVD 47194 IANA-RSVD 47195 IANA-RSVD 47196 IANA-RSVD 47197 IANA-RSVD 47198 IANA-RSVD 47199 IANA-RSVD 47200 IANA-RSVD 47201 IANA-RSVD 47202 IANA-RSVD 47203 IANA-RSVD 47204 IANA-RSVD 47205 IANA-RSVD 47206 IANA-RSVD 47207 IANA-RSVD 47208 IANA-RSVD 47209 IANA-RSVD 47210 IANA-RSVD 47211 IANA-RSVD 47212 IANA-RSVD 47213 IANA-RSVD 47214 IANA-RSVD 47215 IANA-RSVD 47216 IANA-RSVD 47217 IANA-RSVD 47218 IANA-RSVD 47219 IANA-RSVD 47220 IANA-RSVD 47221 IANA-RSVD 47222 IANA-RSVD 47223 IANA-RSVD 47224 IANA-RSVD 47225 IANA-RSVD 47226 IANA-RSVD 47227 IANA-RSVD 47228 IANA-RSVD 47229 IANA-RSVD 47230 IANA-RSVD 47231 IANA-RSVD 47232 IANA-RSVD 47233 IANA-RSVD 47234 IANA-RSVD 47235 IANA-RSVD 47236 IANA-RSVD 47237 IANA-RSVD 47238 IANA-RSVD 47239 IANA-RSVD 47240 IANA-RSVD 47241 IANA-RSVD 47242 IANA-RSVD 47243 IANA-RSVD 47244 IANA-RSVD 47245 IANA-RSVD 47246 IANA-RSVD 47247 IANA-RSVD 47248 IANA-RSVD 47249 IANA-RSVD 47250 IANA-RSVD 47251 IANA-RSVD 47252 IANA-RSVD 47253 IANA-RSVD 47254 IANA-RSVD 47255 IANA-RSVD 47256 IANA-RSVD 47257 IANA-RSVD 47258 IANA-RSVD 47259 IANA-RSVD 47260 IANA-RSVD 47261 IANA-RSVD 47262 IANA-RSVD 47263 IANA-RSVD 47264 IANA-RSVD 47265 IANA-RSVD 47266 IANA-RSVD 47267 IANA-RSVD 47268 IANA-RSVD 47269 IANA-RSVD 47270 IANA-RSVD 47271 IANA-RSVD 47272 IANA-RSVD 47273 IANA-RSVD 47274 IANA-RSVD 47275 IANA-RSVD 47276 IANA-RSVD 47277 IANA-RSVD 47278 IANA-RSVD 47279 IANA-RSVD 47280 IANA-RSVD 47281 IANA-RSVD 47282 IANA-RSVD 47283 IANA-RSVD 47284 IANA-RSVD 47285 IANA-RSVD 47286 IANA-RSVD 47287 IANA-RSVD 47288 IANA-RSVD 47289 IANA-RSVD 47290 IANA-RSVD 47291 IANA-RSVD 47292 IANA-RSVD 47293 IANA-RSVD 47294 IANA-RSVD 47295 IANA-RSVD 47296 IANA-RSVD 47297 IANA-RSVD 47298 IANA-RSVD 47299 IANA-RSVD 47300 IANA-RSVD 47301 IANA-RSVD 47302 IANA-RSVD 47303 IANA-RSVD 47304 IANA-RSVD 47305 IANA-RSVD 47306 IANA-RSVD 47307 IANA-RSVD 47308 IANA-RSVD 47309 IANA-RSVD 47310 IANA-RSVD 47311 IANA-RSVD 47312 IANA-RSVD 47313 IANA-RSVD 47314 IANA-RSVD 47315 IANA-RSVD 47316 IANA-RSVD 47317 IANA-RSVD 47318 IANA-RSVD 47319 IANA-RSVD 47320 IANA-RSVD 47321 IANA-RSVD 47322 IANA-RSVD 47323 IANA-RSVD 47324 IANA-RSVD 47325 IANA-RSVD 47326 IANA-RSVD 47327 IANA-RSVD 47328 IANA-RSVD 47329 IANA-RSVD 47330 IANA-RSVD 47331 IANA-RSVD 47332 IANA-RSVD 47333 IANA-RSVD 47334 IANA-RSVD 47335 IANA-RSVD 47336 IANA-RSVD 47337 IANA-RSVD 47338 IANA-RSVD 47339 IANA-RSVD 47340 IANA-RSVD 47341 IANA-RSVD 47342 IANA-RSVD 47343 IANA-RSVD 47344 IANA-RSVD 47345 IANA-RSVD 47346 IANA-RSVD 47347 IANA-RSVD 47348 IANA-RSVD 47349 IANA-RSVD 47350 IANA-RSVD 47351 IANA-RSVD 47352 IANA-RSVD 47353 IANA-RSVD 47354 IANA-RSVD 47355 IANA-RSVD 47356 IANA-RSVD 47357 IANA-RSVD 47358 IANA-RSVD 47359 IANA-RSVD 47360 IANA-RSVD 47361 IANA-RSVD 47362 IANA-RSVD 47363 IANA-RSVD 47364 IANA-RSVD 47365 IANA-RSVD 47366 IANA-RSVD 47367 IANA-RSVD 47368 IANA-RSVD 47369 IANA-RSVD 47370 IANA-RSVD 47371 IANA-RSVD 47372 IANA-RSVD 47373 IANA-RSVD 47374 IANA-RSVD 47375 IANA-RSVD 47376 IANA-RSVD 47377 IANA-RSVD 47378 IANA-RSVD 47379 IANA-RSVD 47380 IANA-RSVD 47381 IANA-RSVD 47382 IANA-RSVD 47383 IANA-RSVD 47384 IANA-RSVD 47385 IANA-RSVD 47386 IANA-RSVD 47387 IANA-RSVD 47388 IANA-RSVD 47389 IANA-RSVD 47390 IANA-RSVD 47391 IANA-RSVD 47392 IANA-RSVD 47393 IANA-RSVD 47394 IANA-RSVD 47395 IANA-RSVD 47396 IANA-RSVD 47397 IANA-RSVD 47398 IANA-RSVD 47399 IANA-RSVD 47400 IANA-RSVD 47401 IANA-RSVD 47402 IANA-RSVD 47403 IANA-RSVD 47404 IANA-RSVD 47405 IANA-RSVD 47406 IANA-RSVD 47407 IANA-RSVD 47408 IANA-RSVD 47409 IANA-RSVD 47410 IANA-RSVD 47411 IANA-RSVD 47412 IANA-RSVD 47413 IANA-RSVD 47414 IANA-RSVD 47415 IANA-RSVD 47416 IANA-RSVD 47417 IANA-RSVD 47418 IANA-RSVD 47419 IANA-RSVD 47420 IANA-RSVD 47421 IANA-RSVD 47422 IANA-RSVD 47423 IANA-RSVD 47424 IANA-RSVD 47425 IANA-RSVD 47426 IANA-RSVD 47427 IANA-RSVD 47428 IANA-RSVD 47429 IANA-RSVD 47430 IANA-RSVD 47431 IANA-RSVD 47432 IANA-RSVD 47433 IANA-RSVD 47434 IANA-RSVD 47435 IANA-RSVD 47436 IANA-RSVD 47437 IANA-RSVD 47438 IANA-RSVD 47439 IANA-RSVD 47440 IANA-RSVD 47441 IANA-RSVD 47442 IANA-RSVD 47443 IANA-RSVD 47444 IANA-RSVD 47445 IANA-RSVD 47446 IANA-RSVD 47447 IANA-RSVD 47448 IANA-RSVD 47449 IANA-RSVD 47450 IANA-RSVD 47451 IANA-RSVD 47452 IANA-RSVD 47453 IANA-RSVD 47454 IANA-RSVD 47455 IANA-RSVD 47456 IANA-RSVD 47457 IANA-RSVD 47458 IANA-RSVD 47459 IANA-RSVD 47460 IANA-RSVD 47461 IANA-RSVD 47462 IANA-RSVD 47463 IANA-RSVD 47464 IANA-RSVD 47465 IANA-RSVD 47466 IANA-RSVD 47467 IANA-RSVD 47468 IANA-RSVD 47469 IANA-RSVD 47470 IANA-RSVD 47471 IANA-RSVD 47472 IANA-RSVD 47473 IANA-RSVD 47474 IANA-RSVD 47475 IANA-RSVD 47476 IANA-RSVD 47477 IANA-RSVD 47478 IANA-RSVD 47479 IANA-RSVD 47480 IANA-RSVD 47481 IANA-RSVD 47482 IANA-RSVD 47483 IANA-RSVD 47484 IANA-RSVD 47485 IANA-RSVD 47486 IANA-RSVD 47487 IANA-RSVD 47488 IANA-RSVD 47489 IANA-RSVD 47490 IANA-RSVD 47491 IANA-RSVD 47492 IANA-RSVD 47493 IANA-RSVD 47494 IANA-RSVD 47495 IANA-RSVD 47496 IANA-RSVD 47497 IANA-RSVD 47498 IANA-RSVD 47499 IANA-RSVD 47500 IANA-RSVD 47501 IANA-RSVD 47502 IANA-RSVD 47503 IANA-RSVD 47504 IANA-RSVD 47505 IANA-RSVD 47506 IANA-RSVD 47507 IANA-RSVD 47508 IANA-RSVD 47509 IANA-RSVD 47510 IANA-RSVD 47511 IANA-RSVD 47512 IANA-RSVD 47513 IANA-RSVD 47514 IANA-RSVD 47515 IANA-RSVD 47516 IANA-RSVD 47517 IANA-RSVD 47518 IANA-RSVD 47519 IANA-RSVD 47520 IANA-RSVD 47521 IANA-RSVD 47522 IANA-RSVD 47523 IANA-RSVD 47524 IANA-RSVD 47525 IANA-RSVD 47526 IANA-RSVD 47527 IANA-RSVD 47528 IANA-RSVD 47529 IANA-RSVD 47530 IANA-RSVD 47531 IANA-RSVD 47532 IANA-RSVD 47533 IANA-RSVD 47534 IANA-RSVD 47535 IANA-RSVD 47536 IANA-RSVD 47537 IANA-RSVD 47538 IANA-RSVD 47539 IANA-RSVD 47540 IANA-RSVD 47541 IANA-RSVD 47542 IANA-RSVD 47543 IANA-RSVD 47544 IANA-RSVD 47545 IANA-RSVD 47546 IANA-RSVD 47547 IANA-RSVD 47548 IANA-RSVD 47549 IANA-RSVD 47550 IANA-RSVD 47551 IANA-RSVD 47552 IANA-RSVD 47553 IANA-RSVD 47554 IANA-RSVD 47555 IANA-RSVD 47556 IANA-RSVD 47557 IANA-RSVD 47558 IANA-RSVD 47559 IANA-RSVD 47560 IANA-RSVD 47561 IANA-RSVD 47562 IANA-RSVD 47563 IANA-RSVD 47564 IANA-RSVD 47565 IANA-RSVD 47566 IANA-RSVD 47567 IANA-RSVD 47568 IANA-RSVD 47569 IANA-RSVD 47570 IANA-RSVD 47571 IANA-RSVD 47572 IANA-RSVD 47573 IANA-RSVD 47574 IANA-RSVD 47575 IANA-RSVD 47576 IANA-RSVD 47577 IANA-RSVD 47578 IANA-RSVD 47579 IANA-RSVD 47580 IANA-RSVD 47581 IANA-RSVD 47582 IANA-RSVD 47583 IANA-RSVD 47584 IANA-RSVD 47585 IANA-RSVD 47586 IANA-RSVD 47587 IANA-RSVD 47588 IANA-RSVD 47589 IANA-RSVD 47590 IANA-RSVD 47591 IANA-RSVD 47592 IANA-RSVD 47593 IANA-RSVD 47594 IANA-RSVD 47595 IANA-RSVD 47596 IANA-RSVD 47597 IANA-RSVD 47598 IANA-RSVD 47599 IANA-RSVD 47600 IANA-RSVD 47601 IANA-RSVD 47602 IANA-RSVD 47603 IANA-RSVD 47604 IANA-RSVD 47605 IANA-RSVD 47606 IANA-RSVD 47607 IANA-RSVD 47608 IANA-RSVD 47609 IANA-RSVD 47610 IANA-RSVD 47611 IANA-RSVD 47612 IANA-RSVD 47613 IANA-RSVD 47614 IANA-RSVD 47615 IANA-RSVD 47616 IANA-RSVD 47617 IANA-RSVD 47618 IANA-RSVD 47619 IANA-RSVD 47620 IANA-RSVD 47621 IANA-RSVD 47622 IANA-RSVD 47623 IANA-RSVD 47624 IANA-RSVD 47625 IANA-RSVD 47626 IANA-RSVD 47627 IANA-RSVD 47628 IANA-RSVD 47629 IANA-RSVD 47630 IANA-RSVD 47631 IANA-RSVD 47632 IANA-RSVD 47633 IANA-RSVD 47634 IANA-RSVD 47635 IANA-RSVD 47636 IANA-RSVD 47637 IANA-RSVD 47638 IANA-RSVD 47639 IANA-RSVD 47640 IANA-RSVD 47641 IANA-RSVD 47642 IANA-RSVD 47643 IANA-RSVD 47644 IANA-RSVD 47645 IANA-RSVD 47646 IANA-RSVD 47647 IANA-RSVD 47648 IANA-RSVD 47649 IANA-RSVD 47650 IANA-RSVD 47651 IANA-RSVD 47652 IANA-RSVD 47653 IANA-RSVD 47654 IANA-RSVD 47655 IANA-RSVD 47656 IANA-RSVD 47657 IANA-RSVD 47658 IANA-RSVD 47659 IANA-RSVD 47660 IANA-RSVD 47661 IANA-RSVD 47662 IANA-RSVD 47663 IANA-RSVD 47664 IANA-RSVD 47665 IANA-RSVD 47666 IANA-RSVD 47667 IANA-RSVD 47668 IANA-RSVD 47669 IANA-RSVD 47670 IANA-RSVD 47671 IANA-RSVD 47672 IANA-RSVD 47673 IANA-RSVD 47674 IANA-RSVD 47675 IANA-RSVD 47676 IANA-RSVD 47677 IANA-RSVD 47678 IANA-RSVD 47679 IANA-RSVD 47680 IANA-RSVD 47681 IANA-RSVD 47682 IANA-RSVD 47683 IANA-RSVD 47684 IANA-RSVD 47685 IANA-RSVD 47686 IANA-RSVD 47687 IANA-RSVD 47688 IANA-RSVD 47689 IANA-RSVD 47690 IANA-RSVD 47691 IANA-RSVD 47692 IANA-RSVD 47693 IANA-RSVD 47694 IANA-RSVD 47695 IANA-RSVD 47696 IANA-RSVD 47697 IANA-RSVD 47698 IANA-RSVD 47699 IANA-RSVD 47700 IANA-RSVD 47701 IANA-RSVD 47702 IANA-RSVD 47703 IANA-RSVD 47704 IANA-RSVD 47705 IANA-RSVD 47706 IANA-RSVD 47707 IANA-RSVD 47708 IANA-RSVD 47709 IANA-RSVD 47710 IANA-RSVD 47711 IANA-RSVD 47712 IANA-RSVD 47713 IANA-RSVD 47714 IANA-RSVD 47715 IANA-RSVD 47716 IANA-RSVD 47717 IANA-RSVD 47718 IANA-RSVD 47719 IANA-RSVD 47720 IANA-RSVD 47721 IANA-RSVD 47722 IANA-RSVD 47723 IANA-RSVD 47724 IANA-RSVD 47725 IANA-RSVD 47726 IANA-RSVD 47727 IANA-RSVD 47728 IANA-RSVD 47729 IANA-RSVD 47730 IANA-RSVD 47731 IANA-RSVD 47732 IANA-RSVD 47733 IANA-RSVD 47734 IANA-RSVD 47735 IANA-RSVD 47736 IANA-RSVD 47737 IANA-RSVD 47738 IANA-RSVD 47739 IANA-RSVD 47740 IANA-RSVD 47741 IANA-RSVD 47742 IANA-RSVD 47743 IANA-RSVD 47744 IANA-RSVD 47745 IANA-RSVD 47746 IANA-RSVD 47747 IANA-RSVD 47748 IANA-RSVD 47749 IANA-RSVD 47750 IANA-RSVD 47751 IANA-RSVD 47752 IANA-RSVD 47753 IANA-RSVD 47754 IANA-RSVD 47755 IANA-RSVD 47756 IANA-RSVD 47757 IANA-RSVD 47758 IANA-RSVD 47759 IANA-RSVD 47760 IANA-RSVD 47761 IANA-RSVD 47762 IANA-RSVD 47763 IANA-RSVD 47764 IANA-RSVD 47765 IANA-RSVD 47766 IANA-RSVD 47767 IANA-RSVD 47768 IANA-RSVD 47769 IANA-RSVD 47770 IANA-RSVD 47771 IANA-RSVD 47772 IANA-RSVD 47773 IANA-RSVD 47774 IANA-RSVD 47775 IANA-RSVD 47776 IANA-RSVD 47777 IANA-RSVD 47778 IANA-RSVD 47779 IANA-RSVD 47780 IANA-RSVD 47781 IANA-RSVD 47782 IANA-RSVD 47783 IANA-RSVD 47784 IANA-RSVD 47785 IANA-RSVD 47786 IANA-RSVD 47787 IANA-RSVD 47788 IANA-RSVD 47789 IANA-RSVD 47790 IANA-RSVD 47791 IANA-RSVD 47792 IANA-RSVD 47793 IANA-RSVD 47794 IANA-RSVD 47795 IANA-RSVD 47796 IANA-RSVD 47797 IANA-RSVD 47798 IANA-RSVD 47799 IANA-RSVD 47800 IANA-RSVD 47801 IANA-RSVD 47802 IANA-RSVD 47803 IANA-RSVD 47804 IANA-RSVD 47805 IANA-RSVD 47806 IANA-RSVD 47807 IANA-RSVD 47808 IANA-RSVD 47809 IANA-RSVD 47810 IANA-RSVD 47811 IANA-RSVD 47812 IANA-RSVD 47813 IANA-RSVD 47814 IANA-RSVD 47815 IANA-RSVD 47816 IANA-RSVD 47817 IANA-RSVD 47818 IANA-RSVD 47819 IANA-RSVD 47820 IANA-RSVD 47821 IANA-RSVD 47822 IANA-RSVD 47823 IANA-RSVD 47824 IANA-RSVD 47825 IANA-RSVD 47826 IANA-RSVD 47827 IANA-RSVD 47828 IANA-RSVD 47829 IANA-RSVD 47830 IANA-RSVD 47831 IANA-RSVD 47832 IANA-RSVD 47833 IANA-RSVD 47834 IANA-RSVD 47835 IANA-RSVD 47836 IANA-RSVD 47837 IANA-RSVD 47838 IANA-RSVD 47839 IANA-RSVD 47840 IANA-RSVD 47841 IANA-RSVD 47842 IANA-RSVD 47843 IANA-RSVD 47844 IANA-RSVD 47845 IANA-RSVD 47846 IANA-RSVD 47847 IANA-RSVD 47848 IANA-RSVD 47849 IANA-RSVD 47850 IANA-RSVD 47851 IANA-RSVD 47852 IANA-RSVD 47853 IANA-RSVD 47854 IANA-RSVD 47855 IANA-RSVD 47856 IANA-RSVD 47857 IANA-RSVD 47858 IANA-RSVD 47859 IANA-RSVD 47860 IANA-RSVD 47861 IANA-RSVD 47862 IANA-RSVD 47863 IANA-RSVD 47864 IANA-RSVD 47865 IANA-RSVD 47866 IANA-RSVD 47867 IANA-RSVD 47868 IANA-RSVD 47869 IANA-RSVD 47870 IANA-RSVD 47871 IANA-RSVD 47872 IANA-RSVD 47873 IANA-RSVD 47874 IANA-RSVD 47875 IANA-RSVD 47876 IANA-RSVD 47877 IANA-RSVD 47878 IANA-RSVD 47879 IANA-RSVD 47880 IANA-RSVD 47881 IANA-RSVD 47882 IANA-RSVD 47883 IANA-RSVD 47884 IANA-RSVD 47885 IANA-RSVD 47886 IANA-RSVD 47887 IANA-RSVD 47888 IANA-RSVD 47889 IANA-RSVD 47890 IANA-RSVD 47891 IANA-RSVD 47892 IANA-RSVD 47893 IANA-RSVD 47894 IANA-RSVD 47895 IANA-RSVD 47896 IANA-RSVD 47897 IANA-RSVD 47898 IANA-RSVD 47899 IANA-RSVD 47900 IANA-RSVD 47901 IANA-RSVD 47902 IANA-RSVD 47903 IANA-RSVD 47904 IANA-RSVD 47905 IANA-RSVD 47906 IANA-RSVD 47907 IANA-RSVD 47908 IANA-RSVD 47909 IANA-RSVD 47910 IANA-RSVD 47911 IANA-RSVD 47912 IANA-RSVD 47913 IANA-RSVD 47914 IANA-RSVD 47915 IANA-RSVD 47916 IANA-RSVD 47917 IANA-RSVD 47918 IANA-RSVD 47919 IANA-RSVD 47920 IANA-RSVD 47921 IANA-RSVD 47922 IANA-RSVD 47923 IANA-RSVD 47924 IANA-RSVD 47925 IANA-RSVD 47926 IANA-RSVD 47927 IANA-RSVD 47928 IANA-RSVD 47929 IANA-RSVD 47930 IANA-RSVD 47931 IANA-RSVD 47932 IANA-RSVD 47933 IANA-RSVD 47934 IANA-RSVD 47935 IANA-RSVD 47936 IANA-RSVD 47937 IANA-RSVD 47938 IANA-RSVD 47939 IANA-RSVD 47940 IANA-RSVD 47941 IANA-RSVD 47942 IANA-RSVD 47943 IANA-RSVD 47944 IANA-RSVD 47945 IANA-RSVD 47946 IANA-RSVD 47947 IANA-RSVD 47948 IANA-RSVD 47949 IANA-RSVD 47950 IANA-RSVD 47951 IANA-RSVD 47952 IANA-RSVD 47953 IANA-RSVD 47954 IANA-RSVD 47955 IANA-RSVD 47956 IANA-RSVD 47957 IANA-RSVD 47958 IANA-RSVD 47959 IANA-RSVD 47960 IANA-RSVD 47961 IANA-RSVD 47962 IANA-RSVD 47963 IANA-RSVD 47964 IANA-RSVD 47965 IANA-RSVD 47966 IANA-RSVD 47967 IANA-RSVD 47968 IANA-RSVD 47969 IANA-RSVD 47970 IANA-RSVD 47971 IANA-RSVD 47972 IANA-RSVD 47973 IANA-RSVD 47974 IANA-RSVD 47975 IANA-RSVD 47976 IANA-RSVD 47977 IANA-RSVD 47978 IANA-RSVD 47979 IANA-RSVD 47980 IANA-RSVD 47981 IANA-RSVD 47982 IANA-RSVD 47983 IANA-RSVD 47984 IANA-RSVD 47985 IANA-RSVD 47986 IANA-RSVD 47987 IANA-RSVD 47988 IANA-RSVD 47989 IANA-RSVD 47990 IANA-RSVD 47991 IANA-RSVD 47992 IANA-RSVD 47993 IANA-RSVD 47994 IANA-RSVD 47995 IANA-RSVD 47996 IANA-RSVD 47997 IANA-RSVD 47998 IANA-RSVD 47999 IANA-RSVD 48000 IANA-RSVD 48001 IANA-RSVD 48002 IANA-RSVD 48003 IANA-RSVD 48004 IANA-RSVD 48005 IANA-RSVD 48006 IANA-RSVD 48007 IANA-RSVD 48008 IANA-RSVD 48009 IANA-RSVD 48010 IANA-RSVD 48011 IANA-RSVD 48012 IANA-RSVD 48013 IANA-RSVD 48014 IANA-RSVD 48015 IANA-RSVD 48016 IANA-RSVD 48017 IANA-RSVD 48018 IANA-RSVD 48019 IANA-RSVD 48020 IANA-RSVD 48021 IANA-RSVD 48022 IANA-RSVD 48023 IANA-RSVD 48024 IANA-RSVD 48025 IANA-RSVD 48026 IANA-RSVD 48027 IANA-RSVD 48028 IANA-RSVD 48029 IANA-RSVD 48030 IANA-RSVD 48031 IANA-RSVD 48032 IANA-RSVD 48033 IANA-RSVD 48034 IANA-RSVD 48035 IANA-RSVD 48036 IANA-RSVD 48037 IANA-RSVD 48038 IANA-RSVD 48039 IANA-RSVD 48040 IANA-RSVD 48041 IANA-RSVD 48042 IANA-RSVD 48043 IANA-RSVD 48044 IANA-RSVD 48045 IANA-RSVD 48046 IANA-RSVD 48047 IANA-RSVD 48048 IANA-RSVD 48049 IANA-RSVD 48050 IANA-RSVD 48051 IANA-RSVD 48052 IANA-RSVD 48053 IANA-RSVD 48054 IANA-RSVD 48055 IANA-RSVD 48056 IANA-RSVD 48057 IANA-RSVD 48058 IANA-RSVD 48059 IANA-RSVD 48060 IANA-RSVD 48061 IANA-RSVD 48062 IANA-RSVD 48063 IANA-RSVD 48064 IANA-RSVD 48065 IANA-RSVD 48066 IANA-RSVD 48067 IANA-RSVD 48068 IANA-RSVD 48069 IANA-RSVD 48070 IANA-RSVD 48071 IANA-RSVD 48072 IANA-RSVD 48073 IANA-RSVD 48074 IANA-RSVD 48075 IANA-RSVD 48076 IANA-RSVD 48077 IANA-RSVD 48078 IANA-RSVD 48079 IANA-RSVD 48080 IANA-RSVD 48081 IANA-RSVD 48082 IANA-RSVD 48083 IANA-RSVD 48084 IANA-RSVD 48085 IANA-RSVD 48086 IANA-RSVD 48087 IANA-RSVD 48088 IANA-RSVD 48089 IANA-RSVD 48090 IANA-RSVD 48091 IANA-RSVD 48092 IANA-RSVD 48093 IANA-RSVD 48094 IANA-RSVD 48095 IANA-RSVD 48096 IANA-RSVD 48097 IANA-RSVD 48098 IANA-RSVD 48099 IANA-RSVD 48100 IANA-RSVD 48101 IANA-RSVD 48102 IANA-RSVD 48103 IANA-RSVD 48104 IANA-RSVD 48105 IANA-RSVD 48106 IANA-RSVD 48107 IANA-RSVD 48108 IANA-RSVD 48109 IANA-RSVD 48110 IANA-RSVD 48111 IANA-RSVD 48112 IANA-RSVD 48113 IANA-RSVD 48114 IANA-RSVD 48115 IANA-RSVD 48116 IANA-RSVD 48117 IANA-RSVD 48118 IANA-RSVD 48119 IANA-RSVD 48120 IANA-RSVD 48121 IANA-RSVD 48122 IANA-RSVD 48123 IANA-RSVD 48124 IANA-RSVD 48125 IANA-RSVD 48126 IANA-RSVD 48127 IANA-RSVD 48128 IANA-RSVD 48129 IANA-RSVD 48130 IANA-RSVD 48131 IANA-RSVD 48132 IANA-RSVD 48133 IANA-RSVD 48134 IANA-RSVD 48135 IANA-RSVD 48136 IANA-RSVD 48137 IANA-RSVD 48138 IANA-RSVD 48139 IANA-RSVD 48140 IANA-RSVD 48141 IANA-RSVD 48142 IANA-RSVD 48143 IANA-RSVD 48144 IANA-RSVD 48145 IANA-RSVD 48146 IANA-RSVD 48147 IANA-RSVD 48148 IANA-RSVD 48149 IANA-RSVD 48150 IANA-RSVD 48151 IANA-RSVD 48152 IANA-RSVD 48153 IANA-RSVD 48154 IANA-RSVD 48155 IANA-RSVD 48156 IANA-RSVD 48157 IANA-RSVD 48158 IANA-RSVD 48159 IANA-RSVD 48160 IANA-RSVD 48161 IANA-RSVD 48162 IANA-RSVD 48163 IANA-RSVD 48164 IANA-RSVD 48165 IANA-RSVD 48166 IANA-RSVD 48167 IANA-RSVD 48168 IANA-RSVD 48169 IANA-RSVD 48170 IANA-RSVD 48171 IANA-RSVD 48172 IANA-RSVD 48173 IANA-RSVD 48174 IANA-RSVD 48175 IANA-RSVD 48176 IANA-RSVD 48177 IANA-RSVD 48178 IANA-RSVD 48179 IANA-RSVD 48180 IANA-RSVD 48181 IANA-RSVD 48182 IANA-RSVD 48183 IANA-RSVD 48184 IANA-RSVD 48185 IANA-RSVD 48186 IANA-RSVD 48187 IANA-RSVD 48188 IANA-RSVD 48189 IANA-RSVD 48190 IANA-RSVD 48191 IANA-RSVD 48192 IANA-RSVD 48193 IANA-RSVD 48194 IANA-RSVD 48195 IANA-RSVD 48196 IANA-RSVD 48197 IANA-RSVD 48198 IANA-RSVD 48199 IANA-RSVD 48200 IANA-RSVD 48201 IANA-RSVD 48202 IANA-RSVD 48203 IANA-RSVD 48204 IANA-RSVD 48205 IANA-RSVD 48206 IANA-RSVD 48207 IANA-RSVD 48208 IANA-RSVD 48209 IANA-RSVD 48210 IANA-RSVD 48211 IANA-RSVD 48212 IANA-RSVD 48213 IANA-RSVD 48214 IANA-RSVD 48215 IANA-RSVD 48216 IANA-RSVD 48217 IANA-RSVD 48218 IANA-RSVD 48219 IANA-RSVD 48220 IANA-RSVD 48221 IANA-RSVD 48222 IANA-RSVD 48223 IANA-RSVD 48224 IANA-RSVD 48225 IANA-RSVD 48226 IANA-RSVD 48227 IANA-RSVD 48228 IANA-RSVD 48229 IANA-RSVD 48230 IANA-RSVD 48231 IANA-RSVD 48232 IANA-RSVD 48233 IANA-RSVD 48234 IANA-RSVD 48235 IANA-RSVD 48236 IANA-RSVD 48237 IANA-RSVD 48238 IANA-RSVD 48239 IANA-RSVD 48240 IANA-RSVD 48241 IANA-RSVD 48242 IANA-RSVD 48243 IANA-RSVD 48244 IANA-RSVD 48245 IANA-RSVD 48246 IANA-RSVD 48247 IANA-RSVD 48248 IANA-RSVD 48249 IANA-RSVD 48250 IANA-RSVD 48251 IANA-RSVD 48252 IANA-RSVD 48253 IANA-RSVD 48254 IANA-RSVD 48255 IANA-RSVD 48256 IANA-RSVD 48257 IANA-RSVD 48258 IANA-RSVD 48259 IANA-RSVD 48260 IANA-RSVD 48261 IANA-RSVD 48262 IANA-RSVD 48263 IANA-RSVD 48264 IANA-RSVD 48265 IANA-RSVD 48266 IANA-RSVD 48267 IANA-RSVD 48268 IANA-RSVD 48269 IANA-RSVD 48270 IANA-RSVD 48271 IANA-RSVD 48272 IANA-RSVD 48273 IANA-RSVD 48274 IANA-RSVD 48275 IANA-RSVD 48276 IANA-RSVD 48277 IANA-RSVD 48278 IANA-RSVD 48279 IANA-RSVD 48280 IANA-RSVD 48281 IANA-RSVD 48282 IANA-RSVD 48283 IANA-RSVD 48284 IANA-RSVD 48285 IANA-RSVD 48286 IANA-RSVD 48287 IANA-RSVD 48288 IANA-RSVD 48289 IANA-RSVD 48290 IANA-RSVD 48291 IANA-RSVD 48292 IANA-RSVD 48293 IANA-RSVD 48294 IANA-RSVD 48295 IANA-RSVD 48296 IANA-RSVD 48297 IANA-RSVD 48298 IANA-RSVD 48299 IANA-RSVD 48300 IANA-RSVD 48301 IANA-RSVD 48302 IANA-RSVD 48303 IANA-RSVD 48304 IANA-RSVD 48305 IANA-RSVD 48306 IANA-RSVD 48307 IANA-RSVD 48308 IANA-RSVD 48309 IANA-RSVD 48310 IANA-RSVD 48311 IANA-RSVD 48312 IANA-RSVD 48313 IANA-RSVD 48314 IANA-RSVD 48315 IANA-RSVD 48316 IANA-RSVD 48317 IANA-RSVD 48318 IANA-RSVD 48319 IANA-RSVD 48320 IANA-RSVD 48321 IANA-RSVD 48322 IANA-RSVD 48323 IANA-RSVD 48324 IANA-RSVD 48325 IANA-RSVD 48326 IANA-RSVD 48327 IANA-RSVD 48328 IANA-RSVD 48329 IANA-RSVD 48330 IANA-RSVD 48331 IANA-RSVD 48332 IANA-RSVD 48333 IANA-RSVD 48334 IANA-RSVD 48335 IANA-RSVD 48336 IANA-RSVD 48337 IANA-RSVD 48338 IANA-RSVD 48339 IANA-RSVD 48340 IANA-RSVD 48341 IANA-RSVD 48342 IANA-RSVD 48343 IANA-RSVD 48344 IANA-RSVD 48345 IANA-RSVD 48346 IANA-RSVD 48347 IANA-RSVD 48348 IANA-RSVD 48349 IANA-RSVD 48350 IANA-RSVD 48351 IANA-RSVD 48352 IANA-RSVD 48353 IANA-RSVD 48354 IANA-RSVD 48355 IANA-RSVD 48356 IANA-RSVD 48357 IANA-RSVD 48358 IANA-RSVD 48359 IANA-RSVD 48360 IANA-RSVD 48361 IANA-RSVD 48362 IANA-RSVD 48363 IANA-RSVD 48364 IANA-RSVD 48365 IANA-RSVD 48366 IANA-RSVD 48367 IANA-RSVD 48368 IANA-RSVD 48369 IANA-RSVD 48370 IANA-RSVD 48371 IANA-RSVD 48372 IANA-RSVD 48373 IANA-RSVD 48374 IANA-RSVD 48375 IANA-RSVD 48376 IANA-RSVD 48377 IANA-RSVD 48378 IANA-RSVD 48379 IANA-RSVD 48380 IANA-RSVD 48381 IANA-RSVD 48382 IANA-RSVD 48383 IANA-RSVD 48384 IANA-RSVD 48385 IANA-RSVD 48386 IANA-RSVD 48387 IANA-RSVD 48388 IANA-RSVD 48389 IANA-RSVD 48390 IANA-RSVD 48391 IANA-RSVD 48392 IANA-RSVD 48393 IANA-RSVD 48394 IANA-RSVD 48395 IANA-RSVD 48396 IANA-RSVD 48397 IANA-RSVD 48398 IANA-RSVD 48399 IANA-RSVD 48400 IANA-RSVD 48401 IANA-RSVD 48402 IANA-RSVD 48403 IANA-RSVD 48404 IANA-RSVD 48405 IANA-RSVD 48406 IANA-RSVD 48407 IANA-RSVD 48408 IANA-RSVD 48409 IANA-RSVD 48410 IANA-RSVD 48411 IANA-RSVD 48412 IANA-RSVD 48413 IANA-RSVD 48414 IANA-RSVD 48415 IANA-RSVD 48416 IANA-RSVD 48417 IANA-RSVD 48418 IANA-RSVD 48419 IANA-RSVD 48420 IANA-RSVD 48421 IANA-RSVD 48422 IANA-RSVD 48423 IANA-RSVD 48424 IANA-RSVD 48425 IANA-RSVD 48426 IANA-RSVD 48427 IANA-RSVD 48428 IANA-RSVD 48429 IANA-RSVD 48430 IANA-RSVD 48431 IANA-RSVD 48432 IANA-RSVD 48433 IANA-RSVD 48434 IANA-RSVD 48435 IANA-RSVD 48436 IANA-RSVD 48437 IANA-RSVD 48438 IANA-RSVD 48439 IANA-RSVD 48440 IANA-RSVD 48441 IANA-RSVD 48442 IANA-RSVD 48443 IANA-RSVD 48444 IANA-RSVD 48445 IANA-RSVD 48446 IANA-RSVD 48447 IANA-RSVD 48448 IANA-RSVD 48449 IANA-RSVD 48450 IANA-RSVD 48451 IANA-RSVD 48452 IANA-RSVD 48453 IANA-RSVD 48454 IANA-RSVD 48455 IANA-RSVD 48456 IANA-RSVD 48457 IANA-RSVD 48458 IANA-RSVD 48459 IANA-RSVD 48460 IANA-RSVD 48461 IANA-RSVD 48462 IANA-RSVD 48463 IANA-RSVD 48464 IANA-RSVD 48465 IANA-RSVD 48466 IANA-RSVD 48467 IANA-RSVD 48468 IANA-RSVD 48469 IANA-RSVD 48470 IANA-RSVD 48471 IANA-RSVD 48472 IANA-RSVD 48473 IANA-RSVD 48474 IANA-RSVD 48475 IANA-RSVD 48476 IANA-RSVD 48477 IANA-RSVD 48478 IANA-RSVD 48479 IANA-RSVD 48480 IANA-RSVD 48481 IANA-RSVD 48482 IANA-RSVD 48483 IANA-RSVD 48484 IANA-RSVD 48485 IANA-RSVD 48486 IANA-RSVD 48487 IANA-RSVD 48488 IANA-RSVD 48489 IANA-RSVD 48490 IANA-RSVD 48491 IANA-RSVD 48492 IANA-RSVD 48493 IANA-RSVD 48494 IANA-RSVD 48495 IANA-RSVD 48496 IANA-RSVD 48497 IANA-RSVD 48498 IANA-RSVD 48499 IANA-RSVD 48500 IANA-RSVD 48501 IANA-RSVD 48502 IANA-RSVD 48503 IANA-RSVD 48504 IANA-RSVD 48505 IANA-RSVD 48506 IANA-RSVD 48507 IANA-RSVD 48508 IANA-RSVD 48509 IANA-RSVD 48510 IANA-RSVD 48511 IANA-RSVD 48512 IANA-RSVD 48513 IANA-RSVD 48514 IANA-RSVD 48515 IANA-RSVD 48516 IANA-RSVD 48517 IANA-RSVD 48518 IANA-RSVD 48519 IANA-RSVD 48520 IANA-RSVD 48521 IANA-RSVD 48522 IANA-RSVD 48523 IANA-RSVD 48524 IANA-RSVD 48525 IANA-RSVD 48526 IANA-RSVD 48527 IANA-RSVD 48528 IANA-RSVD 48529 IANA-RSVD 48530 IANA-RSVD 48531 IANA-RSVD 48532 IANA-RSVD 48533 IANA-RSVD 48534 IANA-RSVD 48535 IANA-RSVD 48536 IANA-RSVD 48537 IANA-RSVD 48538 IANA-RSVD 48539 IANA-RSVD 48540 IANA-RSVD 48541 IANA-RSVD 48542 IANA-RSVD 48543 IANA-RSVD 48544 IANA-RSVD 48545 IANA-RSVD 48546 IANA-RSVD 48547 IANA-RSVD 48548 IANA-RSVD 48549 IANA-RSVD 48550 IANA-RSVD 48551 IANA-RSVD 48552 IANA-RSVD 48553 IANA-RSVD 48554 IANA-RSVD 48555 IANA-RSVD 48556 IANA-RSVD 48557 IANA-RSVD 48558 IANA-RSVD 48559 IANA-RSVD 48560 IANA-RSVD 48561 IANA-RSVD 48562 IANA-RSVD 48563 IANA-RSVD 48564 IANA-RSVD 48565 IANA-RSVD 48566 IANA-RSVD 48567 IANA-RSVD 48568 IANA-RSVD 48569 IANA-RSVD 48570 IANA-RSVD 48571 IANA-RSVD 48572 IANA-RSVD 48573 IANA-RSVD 48574 IANA-RSVD 48575 IANA-RSVD 48576 IANA-RSVD 48577 IANA-RSVD 48578 IANA-RSVD 48579 IANA-RSVD 48580 IANA-RSVD 48581 IANA-RSVD 48582 IANA-RSVD 48583 IANA-RSVD 48584 IANA-RSVD 48585 IANA-RSVD 48586 IANA-RSVD 48587 IANA-RSVD 48588 IANA-RSVD 48589 IANA-RSVD 48590 IANA-RSVD 48591 IANA-RSVD 48592 IANA-RSVD 48593 IANA-RSVD 48594 IANA-RSVD 48595 IANA-RSVD 48596 IANA-RSVD 48597 IANA-RSVD 48598 IANA-RSVD 48599 IANA-RSVD 48600 IANA-RSVD 48601 IANA-RSVD 48602 IANA-RSVD 48603 IANA-RSVD 48604 IANA-RSVD 48605 IANA-RSVD 48606 IANA-RSVD 48607 IANA-RSVD 48608 IANA-RSVD 48609 IANA-RSVD 48610 IANA-RSVD 48611 IANA-RSVD 48612 IANA-RSVD 48613 IANA-RSVD 48614 IANA-RSVD 48615 IANA-RSVD 48616 IANA-RSVD 48617 IANA-RSVD 48618 IANA-RSVD 48619 IANA-RSVD 48620 IANA-RSVD 48621 IANA-RSVD 48622 IANA-RSVD 48623 IANA-RSVD 48624 IANA-RSVD 48625 IANA-RSVD 48626 IANA-RSVD 48627 IANA-RSVD 48628 IANA-RSVD 48629 IANA-RSVD 48630 IANA-RSVD 48631 IANA-RSVD 48632 IANA-RSVD 48633 IANA-RSVD 48634 IANA-RSVD 48635 IANA-RSVD 48636 IANA-RSVD 48637 IANA-RSVD 48638 IANA-RSVD 48639 IANA-RSVD 48640 IANA-RSVD 48641 IANA-RSVD 48642 IANA-RSVD 48643 IANA-RSVD 48644 IANA-RSVD 48645 IANA-RSVD 48646 IANA-RSVD 48647 IANA-RSVD 48648 IANA-RSVD 48649 IANA-RSVD 48650 IANA-RSVD 48651 IANA-RSVD 48652 IANA-RSVD 48653 IANA-RSVD 48654 IANA-RSVD 48655 IANA-RSVD 48656 IANA-RSVD 48657 IANA-RSVD 48658 IANA-RSVD 48659 IANA-RSVD 48660 IANA-RSVD 48661 IANA-RSVD 48662 IANA-RSVD 48663 IANA-RSVD 48664 IANA-RSVD 48665 IANA-RSVD 48666 IANA-RSVD 48667 IANA-RSVD 48668 IANA-RSVD 48669 IANA-RSVD 48670 IANA-RSVD 48671 IANA-RSVD 48672 IANA-RSVD 48673 IANA-RSVD 48674 IANA-RSVD 48675 IANA-RSVD 48676 IANA-RSVD 48677 IANA-RSVD 48678 IANA-RSVD 48679 IANA-RSVD 48680 IANA-RSVD 48681 IANA-RSVD 48682 IANA-RSVD 48683 IANA-RSVD 48684 IANA-RSVD 48685 IANA-RSVD 48686 IANA-RSVD 48687 IANA-RSVD 48688 IANA-RSVD 48689 IANA-RSVD 48690 IANA-RSVD 48691 IANA-RSVD 48692 IANA-RSVD 48693 IANA-RSVD 48694 IANA-RSVD 48695 IANA-RSVD 48696 IANA-RSVD 48697 IANA-RSVD 48698 IANA-RSVD 48699 IANA-RSVD 48700 IANA-RSVD 48701 IANA-RSVD 48702 IANA-RSVD 48703 IANA-RSVD 48704 IANA-RSVD 48705 IANA-RSVD 48706 IANA-RSVD 48707 IANA-RSVD 48708 IANA-RSVD 48709 IANA-RSVD 48710 IANA-RSVD 48711 IANA-RSVD 48712 IANA-RSVD 48713 IANA-RSVD 48714 IANA-RSVD 48715 IANA-RSVD 48716 IANA-RSVD 48717 IANA-RSVD 48718 IANA-RSVD 48719 IANA-RSVD 48720 IANA-RSVD 48721 IANA-RSVD 48722 IANA-RSVD 48723 IANA-RSVD 48724 IANA-RSVD 48725 IANA-RSVD 48726 IANA-RSVD 48727 IANA-RSVD 48728 IANA-RSVD 48729 IANA-RSVD 48730 IANA-RSVD 48731 IANA-RSVD 48732 IANA-RSVD 48733 IANA-RSVD 48734 IANA-RSVD 48735 IANA-RSVD 48736 IANA-RSVD 48737 IANA-RSVD 48738 IANA-RSVD 48739 IANA-RSVD 48740 IANA-RSVD 48741 IANA-RSVD 48742 IANA-RSVD 48743 IANA-RSVD 48744 IANA-RSVD 48745 IANA-RSVD 48746 IANA-RSVD 48747 IANA-RSVD 48748 IANA-RSVD 48749 IANA-RSVD 48750 IANA-RSVD 48751 IANA-RSVD 48752 IANA-RSVD 48753 IANA-RSVD 48754 IANA-RSVD 48755 IANA-RSVD 48756 IANA-RSVD 48757 IANA-RSVD 48758 IANA-RSVD 48759 IANA-RSVD 48760 IANA-RSVD 48761 IANA-RSVD 48762 IANA-RSVD 48763 IANA-RSVD 48764 IANA-RSVD 48765 IANA-RSVD 48766 IANA-RSVD 48767 IANA-RSVD 48768 IANA-RSVD 48769 IANA-RSVD 48770 IANA-RSVD 48771 IANA-RSVD 48772 IANA-RSVD 48773 IANA-RSVD 48774 IANA-RSVD 48775 IANA-RSVD 48776 IANA-RSVD 48777 IANA-RSVD 48778 IANA-RSVD 48779 IANA-RSVD 48780 IANA-RSVD 48781 IANA-RSVD 48782 IANA-RSVD 48783 IANA-RSVD 48784 IANA-RSVD 48785 IANA-RSVD 48786 IANA-RSVD 48787 IANA-RSVD 48788 IANA-RSVD 48789 IANA-RSVD 48790 IANA-RSVD 48791 IANA-RSVD 48792 IANA-RSVD 48793 IANA-RSVD 48794 IANA-RSVD 48795 IANA-RSVD 48796 IANA-RSVD 48797 IANA-RSVD 48798 IANA-RSVD 48799 IANA-RSVD 48800 IANA-RSVD 48801 IANA-RSVD 48802 IANA-RSVD 48803 IANA-RSVD 48804 IANA-RSVD 48805 IANA-RSVD 48806 IANA-RSVD 48807 IANA-RSVD 48808 IANA-RSVD 48809 IANA-RSVD 48810 IANA-RSVD 48811 IANA-RSVD 48812 IANA-RSVD 48813 IANA-RSVD 48814 IANA-RSVD 48815 IANA-RSVD 48816 IANA-RSVD 48817 IANA-RSVD 48818 IANA-RSVD 48819 IANA-RSVD 48820 IANA-RSVD 48821 IANA-RSVD 48822 IANA-RSVD 48823 IANA-RSVD 48824 IANA-RSVD 48825 IANA-RSVD 48826 IANA-RSVD 48827 IANA-RSVD 48828 IANA-RSVD 48829 IANA-RSVD 48830 IANA-RSVD 48831 IANA-RSVD 48832 IANA-RSVD 48833 IANA-RSVD 48834 IANA-RSVD 48835 IANA-RSVD 48836 IANA-RSVD 48837 IANA-RSVD 48838 IANA-RSVD 48839 IANA-RSVD 48840 IANA-RSVD 48841 IANA-RSVD 48842 IANA-RSVD 48843 IANA-RSVD 48844 IANA-RSVD 48845 IANA-RSVD 48846 IANA-RSVD 48847 IANA-RSVD 48848 IANA-RSVD 48849 IANA-RSVD 48850 IANA-RSVD 48851 IANA-RSVD 48852 IANA-RSVD 48853 IANA-RSVD 48854 IANA-RSVD 48855 IANA-RSVD 48856 IANA-RSVD 48857 IANA-RSVD 48858 IANA-RSVD 48859 IANA-RSVD 48860 IANA-RSVD 48861 IANA-RSVD 48862 IANA-RSVD 48863 IANA-RSVD 48864 IANA-RSVD 48865 IANA-RSVD 48866 IANA-RSVD 48867 IANA-RSVD 48868 IANA-RSVD 48869 IANA-RSVD 48870 IANA-RSVD 48871 IANA-RSVD 48872 IANA-RSVD 48873 IANA-RSVD 48874 IANA-RSVD 48875 IANA-RSVD 48876 IANA-RSVD 48877 IANA-RSVD 48878 IANA-RSVD 48879 IANA-RSVD 48880 IANA-RSVD 48881 IANA-RSVD 48882 IANA-RSVD 48883 IANA-RSVD 48884 IANA-RSVD 48885 IANA-RSVD 48886 IANA-RSVD 48887 IANA-RSVD 48888 IANA-RSVD 48889 IANA-RSVD 48890 IANA-RSVD 48891 IANA-RSVD 48892 IANA-RSVD 48893 IANA-RSVD 48894 IANA-RSVD 48895 IANA-RSVD 48896 IANA-RSVD 48897 IANA-RSVD 48898 IANA-RSVD 48899 IANA-RSVD 48900 IANA-RSVD 48901 IANA-RSVD 48902 IANA-RSVD 48903 IANA-RSVD 48904 IANA-RSVD 48905 IANA-RSVD 48906 IANA-RSVD 48907 IANA-RSVD 48908 IANA-RSVD 48909 IANA-RSVD 48910 IANA-RSVD 48911 IANA-RSVD 48912 IANA-RSVD 48913 IANA-RSVD 48914 IANA-RSVD 48915 IANA-RSVD 48916 IANA-RSVD 48917 IANA-RSVD 48918 IANA-RSVD 48919 IANA-RSVD 48920 IANA-RSVD 48921 IANA-RSVD 48922 IANA-RSVD 48923 IANA-RSVD 48924 IANA-RSVD 48925 IANA-RSVD 48926 IANA-RSVD 48927 IANA-RSVD 48928 IANA-RSVD 48929 IANA-RSVD 48930 IANA-RSVD 48931 IANA-RSVD 48932 IANA-RSVD 48933 IANA-RSVD 48934 IANA-RSVD 48935 IANA-RSVD 48936 IANA-RSVD 48937 IANA-RSVD 48938 IANA-RSVD 48939 IANA-RSVD 48940 IANA-RSVD 48941 IANA-RSVD 48942 IANA-RSVD 48943 IANA-RSVD 48944 IANA-RSVD 48945 IANA-RSVD 48946 IANA-RSVD 48947 IANA-RSVD 48948 IANA-RSVD 48949 IANA-RSVD 48950 IANA-RSVD 48951 IANA-RSVD 48952 IANA-RSVD 48953 IANA-RSVD 48954 IANA-RSVD 48955 IANA-RSVD 48956 IANA-RSVD 48957 IANA-RSVD 48958 IANA-RSVD 48959 IANA-RSVD 48960 IANA-RSVD 48961 IANA-RSVD 48962 IANA-RSVD 48963 IANA-RSVD 48964 IANA-RSVD 48965 IANA-RSVD 48966 IANA-RSVD 48967 IANA-RSVD 48968 IANA-RSVD 48969 IANA-RSVD 48970 IANA-RSVD 48971 IANA-RSVD 48972 IANA-RSVD 48973 IANA-RSVD 48974 IANA-RSVD 48975 IANA-RSVD 48976 IANA-RSVD 48977 IANA-RSVD 48978 IANA-RSVD 48979 IANA-RSVD 48980 IANA-RSVD 48981 IANA-RSVD 48982 IANA-RSVD 48983 IANA-RSVD 48984 IANA-RSVD 48985 IANA-RSVD 48986 IANA-RSVD 48987 IANA-RSVD 48988 IANA-RSVD 48989 IANA-RSVD 48990 IANA-RSVD 48991 IANA-RSVD 48992 IANA-RSVD 48993 IANA-RSVD 48994 IANA-RSVD 48995 IANA-RSVD 48996 IANA-RSVD 48997 IANA-RSVD 48998 IANA-RSVD 48999 IANA-RSVD 49000 IANA-RSVD 49001 IANA-RSVD 49002 IANA-RSVD 49003 IANA-RSVD 49004 IANA-RSVD 49005 IANA-RSVD 49006 IANA-RSVD 49007 IANA-RSVD 49008 IANA-RSVD 49009 IANA-RSVD 49010 IANA-RSVD 49011 IANA-RSVD 49012 IANA-RSVD 49013 IANA-RSVD 49014 IANA-RSVD 49015 IANA-RSVD 49016 IANA-RSVD 49017 IANA-RSVD 49018 IANA-RSVD 49019 IANA-RSVD 49020 IANA-RSVD 49021 IANA-RSVD 49022 IANA-RSVD 49023 IANA-RSVD 49024 IANA-RSVD 49025 IANA-RSVD 49026 IANA-RSVD 49027 IANA-RSVD 49028 IANA-RSVD 49029 IANA-RSVD 49030 IANA-RSVD 49031 IANA-RSVD 49032 IANA-RSVD 49033 IANA-RSVD 49034 IANA-RSVD 49035 IANA-RSVD 49036 IANA-RSVD 49037 IANA-RSVD 49038 IANA-RSVD 49039 IANA-RSVD 49040 IANA-RSVD 49041 IANA-RSVD 49042 IANA-RSVD 49043 IANA-RSVD 49044 IANA-RSVD 49045 IANA-RSVD 49046 IANA-RSVD 49047 IANA-RSVD 49048 IANA-RSVD 49049 IANA-RSVD 49050 IANA-RSVD 49051 IANA-RSVD 49052 IANA-RSVD 49053 IANA-RSVD 49054 IANA-RSVD 49055 IANA-RSVD 49056 IANA-RSVD 49057 IANA-RSVD 49058 IANA-RSVD 49059 IANA-RSVD 49060 IANA-RSVD 49061 IANA-RSVD 49062 IANA-RSVD 49063 IANA-RSVD 49064 IANA-RSVD 49065 IANA-RSVD 49066 IANA-RSVD 49067 IANA-RSVD 49068 IANA-RSVD 49069 IANA-RSVD 49070 IANA-RSVD 49071 IANA-RSVD 49072 IANA-RSVD 49073 IANA-RSVD 49074 IANA-RSVD 49075 IANA-RSVD 49076 IANA-RSVD 49077 IANA-RSVD 49078 IANA-RSVD 49079 IANA-RSVD 49080 IANA-RSVD 49081 IANA-RSVD 49082 IANA-RSVD 49083 IANA-RSVD 49084 IANA-RSVD 49085 IANA-RSVD 49086 IANA-RSVD 49087 IANA-RSVD 49088 IANA-RSVD 49089 IANA-RSVD 49090 IANA-RSVD 49091 IANA-RSVD 49092 IANA-RSVD 49093 IANA-RSVD 49094 IANA-RSVD 49095 IANA-RSVD 49096 IANA-RSVD 49097 IANA-RSVD 49098 IANA-RSVD 49099 IANA-RSVD 49100 IANA-RSVD 49101 IANA-RSVD 49102 IANA-RSVD 49103 IANA-RSVD 49104 IANA-RSVD 49105 IANA-RSVD 49106 IANA-RSVD 49107 IANA-RSVD 49108 IANA-RSVD 49109 IANA-RSVD 49110 IANA-RSVD 49111 IANA-RSVD 49112 IANA-RSVD 49113 IANA-RSVD 49114 IANA-RSVD 49115 IANA-RSVD 49116 IANA-RSVD 49117 IANA-RSVD 49118 IANA-RSVD 49119 IANA-RSVD 49120 IANA-RSVD 49121 IANA-RSVD 49122 IANA-RSVD 49123 IANA-RSVD 49124 IANA-RSVD 49125 IANA-RSVD 49126 IANA-RSVD 49127 IANA-RSVD 49128 IANA-RSVD 49129 IANA-RSVD 49130 IANA-RSVD 49131 IANA-RSVD 49132 IANA-RSVD 49133 IANA-RSVD 49134 IANA-RSVD 49135 IANA-RSVD 49136 IANA-RSVD 49137 IANA-RSVD 49138 IANA-RSVD 49139 IANA-RSVD 49140 IANA-RSVD 49141 IANA-RSVD 49142 IANA-RSVD 49143 IANA-RSVD 49144 IANA-RSVD 49145 IANA-RSVD 49146 IANA-RSVD 49147 IANA-RSVD 49148 IANA-RSVD 49149 IANA-RSVD 49150 IANA-RSVD 49151 IANA-RSVD 49152 IANA-RSVD 49153 IANA-RSVD 49154 IANA-RSVD 49155 IANA-RSVD 49156 IANA-RSVD 49157 IANA-RSVD 49158 IANA-RSVD 49159 IANA-RSVD 49160 IANA-RSVD 49161 IANA-RSVD 49162 IANA-RSVD 49163 IANA-RSVD 49164 IANA-RSVD 49165 IANA-RSVD 49166 IANA-RSVD 49167 IANA-RSVD 49168 IANA-RSVD 49169 IANA-RSVD 49170 IANA-RSVD 49171 IANA-RSVD 49172 IANA-RSVD 49173 IANA-RSVD 49174 IANA-RSVD 49175 IANA-RSVD 49176 IANA-RSVD 49177 IANA-RSVD 49178 IANA-RSVD 49179 IANA-RSVD 49180 IANA-RSVD 49181 IANA-RSVD 49182 IANA-RSVD 49183 IANA-RSVD 49184 IANA-RSVD 49185 IANA-RSVD 49186 IANA-RSVD 49187 IANA-RSVD 49188 IANA-RSVD 49189 IANA-RSVD 49190 IANA-RSVD 49191 IANA-RSVD 49192 IANA-RSVD 49193 IANA-RSVD 49194 IANA-RSVD 49195 IANA-RSVD 49196 IANA-RSVD 49197 IANA-RSVD 49198 IANA-RSVD 49199 IANA-RSVD 49200 IANA-RSVD 49201 IANA-RSVD 49202 IANA-RSVD 49203 IANA-RSVD 49204 IANA-RSVD 49205 IANA-RSVD 49206 IANA-RSVD 49207 IANA-RSVD 49208 IANA-RSVD 49209 IANA-RSVD 49210 IANA-RSVD 49211 IANA-RSVD 49212 IANA-RSVD 49213 IANA-RSVD 49214 IANA-RSVD 49215 IANA-RSVD 49216 IANA-RSVD 49217 IANA-RSVD 49218 IANA-RSVD 49219 IANA-RSVD 49220 IANA-RSVD 49221 IANA-RSVD 49222 IANA-RSVD 49223 IANA-RSVD 49224 IANA-RSVD 49225 IANA-RSVD 49226 IANA-RSVD 49227 IANA-RSVD 49228 IANA-RSVD 49229 IANA-RSVD 49230 IANA-RSVD 49231 IANA-RSVD 49232 IANA-RSVD 49233 IANA-RSVD 49234 IANA-RSVD 49235 IANA-RSVD 49236 IANA-RSVD 49237 IANA-RSVD 49238 IANA-RSVD 49239 IANA-RSVD 49240 IANA-RSVD 49241 IANA-RSVD 49242 IANA-RSVD 49243 IANA-RSVD 49244 IANA-RSVD 49245 IANA-RSVD 49246 IANA-RSVD 49247 IANA-RSVD 49248 IANA-RSVD 49249 IANA-RSVD 49250 IANA-RSVD 49251 IANA-RSVD 49252 IANA-RSVD 49253 IANA-RSVD 49254 IANA-RSVD 49255 IANA-RSVD 49256 IANA-RSVD 49257 IANA-RSVD 49258 IANA-RSVD 49259 IANA-RSVD 49260 IANA-RSVD 49261 IANA-RSVD 49262 IANA-RSVD 49263 IANA-RSVD 49264 IANA-RSVD 49265 IANA-RSVD 49266 IANA-RSVD 49267 IANA-RSVD 49268 IANA-RSVD 49269 IANA-RSVD 49270 IANA-RSVD 49271 IANA-RSVD 49272 IANA-RSVD 49273 IANA-RSVD 49274 IANA-RSVD 49275 IANA-RSVD 49276 IANA-RSVD 49277 IANA-RSVD 49278 IANA-RSVD 49279 IANA-RSVD 49280 IANA-RSVD 49281 IANA-RSVD 49282 IANA-RSVD 49283 IANA-RSVD 49284 IANA-RSVD 49285 IANA-RSVD 49286 IANA-RSVD 49287 IANA-RSVD 49288 IANA-RSVD 49289 IANA-RSVD 49290 IANA-RSVD 49291 IANA-RSVD 49292 IANA-RSVD 49293 IANA-RSVD 49294 IANA-RSVD 49295 IANA-RSVD 49296 IANA-RSVD 49297 IANA-RSVD 49298 IANA-RSVD 49299 IANA-RSVD 49300 IANA-RSVD 49301 IANA-RSVD 49302 IANA-RSVD 49303 IANA-RSVD 49304 IANA-RSVD 49305 IANA-RSVD 49306 IANA-RSVD 49307 IANA-RSVD 49308 IANA-RSVD 49309 IANA-RSVD 49310 IANA-RSVD 49311 IANA-RSVD 49312 IANA-RSVD 49313 IANA-RSVD 49314 IANA-RSVD 49315 IANA-RSVD 49316 IANA-RSVD 49317 IANA-RSVD 49318 IANA-RSVD 49319 IANA-RSVD 49320 IANA-RSVD 49321 IANA-RSVD 49322 IANA-RSVD 49323 IANA-RSVD 49324 IANA-RSVD 49325 IANA-RSVD 49326 IANA-RSVD 49327 IANA-RSVD 49328 IANA-RSVD 49329 IANA-RSVD 49330 IANA-RSVD 49331 IANA-RSVD 49332 IANA-RSVD 49333 IANA-RSVD 49334 IANA-RSVD 49335 IANA-RSVD 49336 IANA-RSVD 49337 IANA-RSVD 49338 IANA-RSVD 49339 IANA-RSVD 49340 IANA-RSVD 49341 IANA-RSVD 49342 IANA-RSVD 49343 IANA-RSVD 49344 IANA-RSVD 49345 IANA-RSVD 49346 IANA-RSVD 49347 IANA-RSVD 49348 IANA-RSVD 49349 IANA-RSVD 49350 IANA-RSVD 49351 IANA-RSVD 49352 IANA-RSVD 49353 IANA-RSVD 49354 IANA-RSVD 49355 IANA-RSVD 49356 IANA-RSVD 49357 IANA-RSVD 49358 IANA-RSVD 49359 IANA-RSVD 49360 IANA-RSVD 49361 IANA-RSVD 49362 IANA-RSVD 49363 IANA-RSVD 49364 IANA-RSVD 49365 IANA-RSVD 49366 IANA-RSVD 49367 IANA-RSVD 49368 IANA-RSVD 49369 IANA-RSVD 49370 IANA-RSVD 49371 IANA-RSVD 49372 IANA-RSVD 49373 IANA-RSVD 49374 IANA-RSVD 49375 IANA-RSVD 49376 IANA-RSVD 49377 IANA-RSVD 49378 IANA-RSVD 49379 IANA-RSVD 49380 IANA-RSVD 49381 IANA-RSVD 49382 IANA-RSVD 49383 IANA-RSVD 49384 IANA-RSVD 49385 IANA-RSVD 49386 IANA-RSVD 49387 IANA-RSVD 49388 IANA-RSVD 49389 IANA-RSVD 49390 IANA-RSVD 49391 IANA-RSVD 49392 IANA-RSVD 49393 IANA-RSVD 49394 IANA-RSVD 49395 IANA-RSVD 49396 IANA-RSVD 49397 IANA-RSVD 49398 IANA-RSVD 49399 IANA-RSVD 49400 IANA-RSVD 49401 IANA-RSVD 49402 IANA-RSVD 49403 IANA-RSVD 49404 IANA-RSVD 49405 IANA-RSVD 49406 IANA-RSVD 49407 IANA-RSVD 49408 IANA-RSVD 49409 IANA-RSVD 49410 IANA-RSVD 49411 IANA-RSVD 49412 IANA-RSVD 49413 IANA-RSVD 49414 IANA-RSVD 49415 IANA-RSVD 49416 IANA-RSVD 49417 IANA-RSVD 49418 IANA-RSVD 49419 IANA-RSVD 49420 IANA-RSVD 49421 IANA-RSVD 49422 IANA-RSVD 49423 IANA-RSVD 49424 IANA-RSVD 49425 IANA-RSVD 49426 IANA-RSVD 49427 IANA-RSVD 49428 IANA-RSVD 49429 IANA-RSVD 49430 IANA-RSVD 49431 IANA-RSVD 49432 IANA-RSVD 49433 IANA-RSVD 49434 IANA-RSVD 49435 IANA-RSVD 49436 IANA-RSVD 49437 IANA-RSVD 49438 IANA-RSVD 49439 IANA-RSVD 49440 IANA-RSVD 49441 IANA-RSVD 49442 IANA-RSVD 49443 IANA-RSVD 49444 IANA-RSVD 49445 IANA-RSVD 49446 IANA-RSVD 49447 IANA-RSVD 49448 IANA-RSVD 49449 IANA-RSVD 49450 IANA-RSVD 49451 IANA-RSVD 49452 IANA-RSVD 49453 IANA-RSVD 49454 IANA-RSVD 49455 IANA-RSVD 49456 IANA-RSVD 49457 IANA-RSVD 49458 IANA-RSVD 49459 IANA-RSVD 49460 IANA-RSVD 49461 IANA-RSVD 49462 IANA-RSVD 49463 IANA-RSVD 49464 IANA-RSVD 49465 IANA-RSVD 49466 IANA-RSVD 49467 IANA-RSVD 49468 IANA-RSVD 49469 IANA-RSVD 49470 IANA-RSVD 49471 IANA-RSVD 49472 IANA-RSVD 49473 IANA-RSVD 49474 IANA-RSVD 49475 IANA-RSVD 49476 IANA-RSVD 49477 IANA-RSVD 49478 IANA-RSVD 49479 IANA-RSVD 49480 IANA-RSVD 49481 IANA-RSVD 49482 IANA-RSVD 49483 IANA-RSVD 49484 IANA-RSVD 49485 IANA-RSVD 49486 IANA-RSVD 49487 IANA-RSVD 49488 IANA-RSVD 49489 IANA-RSVD 49490 IANA-RSVD 49491 IANA-RSVD 49492 IANA-RSVD 49493 IANA-RSVD 49494 IANA-RSVD 49495 IANA-RSVD 49496 IANA-RSVD 49497 IANA-RSVD 49498 IANA-RSVD 49499 IANA-RSVD 49500 IANA-RSVD 49501 IANA-RSVD 49502 IANA-RSVD 49503 IANA-RSVD 49504 IANA-RSVD 49505 IANA-RSVD 49506 IANA-RSVD 49507 IANA-RSVD 49508 IANA-RSVD 49509 IANA-RSVD 49510 IANA-RSVD 49511 IANA-RSVD 49512 IANA-RSVD 49513 IANA-RSVD 49514 IANA-RSVD 49515 IANA-RSVD 49516 IANA-RSVD 49517 IANA-RSVD 49518 IANA-RSVD 49519 IANA-RSVD 49520 IANA-RSVD 49521 IANA-RSVD 49522 IANA-RSVD 49523 IANA-RSVD 49524 IANA-RSVD 49525 IANA-RSVD 49526 IANA-RSVD 49527 IANA-RSVD 49528 IANA-RSVD 49529 IANA-RSVD 49530 IANA-RSVD 49531 IANA-RSVD 49532 IANA-RSVD 49533 IANA-RSVD 49534 IANA-RSVD 49535 IANA-RSVD 49536 IANA-RSVD 49537 IANA-RSVD 49538 IANA-RSVD 49539 IANA-RSVD 49540 IANA-RSVD 49541 IANA-RSVD 49542 IANA-RSVD 49543 IANA-RSVD 49544 IANA-RSVD 49545 IANA-RSVD 49546 IANA-RSVD 49547 IANA-RSVD 49548 IANA-RSVD 49549 IANA-RSVD 49550 IANA-RSVD 49551 IANA-RSVD 49552 IANA-RSVD 49553 IANA-RSVD 49554 IANA-RSVD 49555 IANA-RSVD 49556 IANA-RSVD 49557 IANA-RSVD 49558 IANA-RSVD 49559 IANA-RSVD 49560 IANA-RSVD 49561 IANA-RSVD 49562 IANA-RSVD 49563 IANA-RSVD 49564 IANA-RSVD 49565 IANA-RSVD 49566 IANA-RSVD 49567 IANA-RSVD 49568 IANA-RSVD 49569 IANA-RSVD 49570 IANA-RSVD 49571 IANA-RSVD 49572 IANA-RSVD 49573 IANA-RSVD 49574 IANA-RSVD 49575 IANA-RSVD 49576 IANA-RSVD 49577 IANA-RSVD 49578 IANA-RSVD 49579 IANA-RSVD 49580 IANA-RSVD 49581 IANA-RSVD 49582 IANA-RSVD 49583 IANA-RSVD 49584 IANA-RSVD 49585 IANA-RSVD 49586 IANA-RSVD 49587 IANA-RSVD 49588 IANA-RSVD 49589 IANA-RSVD 49590 IANA-RSVD 49591 IANA-RSVD 49592 IANA-RSVD 49593 IANA-RSVD 49594 IANA-RSVD 49595 IANA-RSVD 49596 IANA-RSVD 49597 IANA-RSVD 49598 IANA-RSVD 49599 IANA-RSVD 49600 IANA-RSVD 49601 IANA-RSVD 49602 IANA-RSVD 49603 IANA-RSVD 49604 IANA-RSVD 49605 IANA-RSVD 49606 IANA-RSVD 49607 IANA-RSVD 49608 IANA-RSVD 49609 IANA-RSVD 49610 IANA-RSVD 49611 IANA-RSVD 49612 IANA-RSVD 49613 IANA-RSVD 49614 IANA-RSVD 49615 IANA-RSVD 49616 IANA-RSVD 49617 IANA-RSVD 49618 IANA-RSVD 49619 IANA-RSVD 49620 IANA-RSVD 49621 IANA-RSVD 49622 IANA-RSVD 49623 IANA-RSVD 49624 IANA-RSVD 49625 IANA-RSVD 49626 IANA-RSVD 49627 IANA-RSVD 49628 IANA-RSVD 49629 IANA-RSVD 49630 IANA-RSVD 49631 IANA-RSVD 49632 IANA-RSVD 49633 IANA-RSVD 49634 IANA-RSVD 49635 IANA-RSVD 49636 IANA-RSVD 49637 IANA-RSVD 49638 IANA-RSVD 49639 IANA-RSVD 49640 IANA-RSVD 49641 IANA-RSVD 49642 IANA-RSVD 49643 IANA-RSVD 49644 IANA-RSVD 49645 IANA-RSVD 49646 IANA-RSVD 49647 IANA-RSVD 49648 IANA-RSVD 49649 IANA-RSVD 49650 IANA-RSVD 49651 IANA-RSVD 49652 IANA-RSVD 49653 IANA-RSVD 49654 IANA-RSVD 49655 IANA-RSVD 49656 IANA-RSVD 49657 IANA-RSVD 49658 IANA-RSVD 49659 IANA-RSVD 49660 IANA-RSVD 49661 IANA-RSVD 49662 IANA-RSVD 49663 IANA-RSVD 49664 IANA-RSVD 49665 IANA-RSVD 49666 IANA-RSVD 49667 IANA-RSVD 49668 IANA-RSVD 49669 IANA-RSVD 49670 IANA-RSVD 49671 IANA-RSVD 49672 IANA-RSVD 49673 IANA-RSVD 49674 IANA-RSVD 49675 IANA-RSVD 49676 IANA-RSVD 49677 IANA-RSVD 49678 IANA-RSVD 49679 IANA-RSVD 49680 IANA-RSVD 49681 IANA-RSVD 49682 IANA-RSVD 49683 IANA-RSVD 49684 IANA-RSVD 49685 IANA-RSVD 49686 IANA-RSVD 49687 IANA-RSVD 49688 IANA-RSVD 49689 IANA-RSVD 49690 IANA-RSVD 49691 IANA-RSVD 49692 IANA-RSVD 49693 IANA-RSVD 49694 IANA-RSVD 49695 IANA-RSVD 49696 IANA-RSVD 49697 IANA-RSVD 49698 IANA-RSVD 49699 IANA-RSVD 49700 IANA-RSVD 49701 IANA-RSVD 49702 IANA-RSVD 49703 IANA-RSVD 49704 IANA-RSVD 49705 IANA-RSVD 49706 IANA-RSVD 49707 IANA-RSVD 49708 IANA-RSVD 49709 IANA-RSVD 49710 IANA-RSVD 49711 IANA-RSVD 49712 IANA-RSVD 49713 IANA-RSVD 49714 IANA-RSVD 49715 IANA-RSVD 49716 IANA-RSVD 49717 IANA-RSVD 49718 IANA-RSVD 49719 IANA-RSVD 49720 IANA-RSVD 49721 IANA-RSVD 49722 IANA-RSVD 49723 IANA-RSVD 49724 IANA-RSVD 49725 IANA-RSVD 49726 IANA-RSVD 49727 IANA-RSVD 49728 IANA-RSVD 49729 IANA-RSVD 49730 IANA-RSVD 49731 IANA-RSVD 49732 IANA-RSVD 49733 IANA-RSVD 49734 IANA-RSVD 49735 IANA-RSVD 49736 IANA-RSVD 49737 IANA-RSVD 49738 IANA-RSVD 49739 IANA-RSVD 49740 IANA-RSVD 49741 IANA-RSVD 49742 IANA-RSVD 49743 IANA-RSVD 49744 IANA-RSVD 49745 IANA-RSVD 49746 IANA-RSVD 49747 IANA-RSVD 49748 IANA-RSVD 49749 IANA-RSVD 49750 IANA-RSVD 49751 IANA-RSVD 49752 IANA-RSVD 49753 IANA-RSVD 49754 IANA-RSVD 49755 IANA-RSVD 49756 IANA-RSVD 49757 IANA-RSVD 49758 IANA-RSVD 49759 IANA-RSVD 49760 IANA-RSVD 49761 IANA-RSVD 49762 IANA-RSVD 49763 IANA-RSVD 49764 IANA-RSVD 49765 IANA-RSVD 49766 IANA-RSVD 49767 IANA-RSVD 49768 IANA-RSVD 49769 IANA-RSVD 49770 IANA-RSVD 49771 IANA-RSVD 49772 IANA-RSVD 49773 IANA-RSVD 49774 IANA-RSVD 49775 IANA-RSVD 49776 IANA-RSVD 49777 IANA-RSVD 49778 IANA-RSVD 49779 IANA-RSVD 49780 IANA-RSVD 49781 IANA-RSVD 49782 IANA-RSVD 49783 IANA-RSVD 49784 IANA-RSVD 49785 IANA-RSVD 49786 IANA-RSVD 49787 IANA-RSVD 49788 IANA-RSVD 49789 IANA-RSVD 49790 IANA-RSVD 49791 IANA-RSVD 49792 IANA-RSVD 49793 IANA-RSVD 49794 IANA-RSVD 49795 IANA-RSVD 49796 IANA-RSVD 49797 IANA-RSVD 49798 IANA-RSVD 49799 IANA-RSVD 49800 IANA-RSVD 49801 IANA-RSVD 49802 IANA-RSVD 49803 IANA-RSVD 49804 IANA-RSVD 49805 IANA-RSVD 49806 IANA-RSVD 49807 IANA-RSVD 49808 IANA-RSVD 49809 IANA-RSVD 49810 IANA-RSVD 49811 IANA-RSVD 49812 IANA-RSVD 49813 IANA-RSVD 49814 IANA-RSVD 49815 IANA-RSVD 49816 IANA-RSVD 49817 IANA-RSVD 49818 IANA-RSVD 49819 IANA-RSVD 49820 IANA-RSVD 49821 IANA-RSVD 49822 IANA-RSVD 49823 IANA-RSVD 49824 IANA-RSVD 49825 IANA-RSVD 49826 IANA-RSVD 49827 IANA-RSVD 49828 IANA-RSVD 49829 IANA-RSVD 49830 IANA-RSVD 49831 IANA-RSVD 49832 IANA-RSVD 49833 IANA-RSVD 49834 IANA-RSVD 49835 IANA-RSVD 49836 IANA-RSVD 49837 IANA-RSVD 49838 IANA-RSVD 49839 IANA-RSVD 49840 IANA-RSVD 49841 IANA-RSVD 49842 IANA-RSVD 49843 IANA-RSVD 49844 IANA-RSVD 49845 IANA-RSVD 49846 IANA-RSVD 49847 IANA-RSVD 49848 IANA-RSVD 49849 IANA-RSVD 49850 IANA-RSVD 49851 IANA-RSVD 49852 IANA-RSVD 49853 IANA-RSVD 49854 IANA-RSVD 49855 IANA-RSVD 49856 IANA-RSVD 49857 IANA-RSVD 49858 IANA-RSVD 49859 IANA-RSVD 49860 IANA-RSVD 49861 IANA-RSVD 49862 IANA-RSVD 49863 IANA-RSVD 49864 IANA-RSVD 49865 IANA-RSVD 49866 IANA-RSVD 49867 IANA-RSVD 49868 IANA-RSVD 49869 IANA-RSVD 49870 IANA-RSVD 49871 IANA-RSVD 49872 IANA-RSVD 49873 IANA-RSVD 49874 IANA-RSVD 49875 IANA-RSVD 49876 IANA-RSVD 49877 IANA-RSVD 49878 IANA-RSVD 49879 IANA-RSVD 49880 IANA-RSVD 49881 IANA-RSVD 49882 IANA-RSVD 49883 IANA-RSVD 49884 IANA-RSVD 49885 IANA-RSVD 49886 IANA-RSVD 49887 IANA-RSVD 49888 IANA-RSVD 49889 IANA-RSVD 49890 IANA-RSVD 49891 IANA-RSVD 49892 IANA-RSVD 49893 IANA-RSVD 49894 IANA-RSVD 49895 IANA-RSVD 49896 IANA-RSVD 49897 IANA-RSVD 49898 IANA-RSVD 49899 IANA-RSVD 49900 IANA-RSVD 49901 IANA-RSVD 49902 IANA-RSVD 49903 IANA-RSVD 49904 IANA-RSVD 49905 IANA-RSVD 49906 IANA-RSVD 49907 IANA-RSVD 49908 IANA-RSVD 49909 IANA-RSVD 49910 IANA-RSVD 49911 IANA-RSVD 49912 IANA-RSVD 49913 IANA-RSVD 49914 IANA-RSVD 49915 IANA-RSVD 49916 IANA-RSVD 49917 IANA-RSVD 49918 IANA-RSVD 49919 IANA-RSVD 49920 IANA-RSVD 49921 IANA-RSVD 49922 IANA-RSVD 49923 IANA-RSVD 49924 IANA-RSVD 49925 IANA-RSVD 49926 IANA-RSVD 49927 IANA-RSVD 49928 IANA-RSVD 49929 IANA-RSVD 49930 IANA-RSVD 49931 IANA-RSVD 49932 IANA-RSVD 49933 IANA-RSVD 49934 IANA-RSVD 49935 IANA-RSVD 49936 IANA-RSVD 49937 IANA-RSVD 49938 IANA-RSVD 49939 IANA-RSVD 49940 IANA-RSVD 49941 IANA-RSVD 49942 IANA-RSVD 49943 IANA-RSVD 49944 IANA-RSVD 49945 IANA-RSVD 49946 IANA-RSVD 49947 IANA-RSVD 49948 IANA-RSVD 49949 IANA-RSVD 49950 IANA-RSVD 49951 IANA-RSVD 49952 IANA-RSVD 49953 IANA-RSVD 49954 IANA-RSVD 49955 IANA-RSVD 49956 IANA-RSVD 49957 IANA-RSVD 49958 IANA-RSVD 49959 IANA-RSVD 49960 IANA-RSVD 49961 IANA-RSVD 49962 IANA-RSVD 49963 IANA-RSVD 49964 IANA-RSVD 49965 IANA-RSVD 49966 IANA-RSVD 49967 IANA-RSVD 49968 IANA-RSVD 49969 IANA-RSVD 49970 IANA-RSVD 49971 IANA-RSVD 49972 IANA-RSVD 49973 IANA-RSVD 49974 IANA-RSVD 49975 IANA-RSVD 49976 IANA-RSVD 49977 IANA-RSVD 49978 IANA-RSVD 49979 IANA-RSVD 49980 IANA-RSVD 49981 IANA-RSVD 49982 IANA-RSVD 49983 IANA-RSVD 49984 IANA-RSVD 49985 IANA-RSVD 49986 IANA-RSVD 49987 IANA-RSVD 49988 IANA-RSVD 49989 IANA-RSVD 49990 IANA-RSVD 49991 IANA-RSVD 49992 IANA-RSVD 49993 IANA-RSVD 49994 IANA-RSVD 49995 IANA-RSVD 49996 IANA-RSVD 49997 IANA-RSVD 49998 IANA-RSVD 49999 IANA-RSVD 50000 IANA-RSVD 50001 IANA-RSVD 50002 IANA-RSVD 50003 IANA-RSVD 50004 IANA-RSVD 50005 IANA-RSVD 50006 IANA-RSVD 50007 IANA-RSVD 50008 IANA-RSVD 50009 IANA-RSVD 50010 IANA-RSVD 50011 IANA-RSVD 50012 IANA-RSVD 50013 IANA-RSVD 50014 IANA-RSVD 50015 IANA-RSVD 50016 IANA-RSVD 50017 IANA-RSVD 50018 IANA-RSVD 50019 IANA-RSVD 50020 IANA-RSVD 50021 IANA-RSVD 50022 IANA-RSVD 50023 IANA-RSVD 50024 IANA-RSVD 50025 IANA-RSVD 50026 IANA-RSVD 50027 IANA-RSVD 50028 IANA-RSVD 50029 IANA-RSVD 50030 IANA-RSVD 50031 IANA-RSVD 50032 IANA-RSVD 50033 IANA-RSVD 50034 IANA-RSVD 50035 IANA-RSVD 50036 IANA-RSVD 50037 IANA-RSVD 50038 IANA-RSVD 50039 IANA-RSVD 50040 IANA-RSVD 50041 IANA-RSVD 50042 IANA-RSVD 50043 IANA-RSVD 50044 IANA-RSVD 50045 IANA-RSVD 50046 IANA-RSVD 50047 IANA-RSVD 50048 IANA-RSVD 50049 IANA-RSVD 50050 IANA-RSVD 50051 IANA-RSVD 50052 IANA-RSVD 50053 IANA-RSVD 50054 IANA-RSVD 50055 IANA-RSVD 50056 IANA-RSVD 50057 IANA-RSVD 50058 IANA-RSVD 50059 IANA-RSVD 50060 IANA-RSVD 50061 IANA-RSVD 50062 IANA-RSVD 50063 IANA-RSVD 50064 IANA-RSVD 50065 IANA-RSVD 50066 IANA-RSVD 50067 IANA-RSVD 50068 IANA-RSVD 50069 IANA-RSVD 50070 IANA-RSVD 50071 IANA-RSVD 50072 IANA-RSVD 50073 IANA-RSVD 50074 IANA-RSVD 50075 IANA-RSVD 50076 IANA-RSVD 50077 IANA-RSVD 50078 IANA-RSVD 50079 IANA-RSVD 50080 IANA-RSVD 50081 IANA-RSVD 50082 IANA-RSVD 50083 IANA-RSVD 50084 IANA-RSVD 50085 IANA-RSVD 50086 IANA-RSVD 50087 IANA-RSVD 50088 IANA-RSVD 50089 IANA-RSVD 50090 IANA-RSVD 50091 IANA-RSVD 50092 IANA-RSVD 50093 IANA-RSVD 50094 IANA-RSVD 50095 IANA-RSVD 50096 IANA-RSVD 50097 IANA-RSVD 50098 IANA-RSVD 50099 IANA-RSVD 50100 IANA-RSVD 50101 IANA-RSVD 50102 IANA-RSVD 50103 IANA-RSVD 50104 IANA-RSVD 50105 IANA-RSVD 50106 IANA-RSVD 50107 IANA-RSVD 50108 IANA-RSVD 50109 IANA-RSVD 50110 IANA-RSVD 50111 IANA-RSVD 50112 IANA-RSVD 50113 IANA-RSVD 50114 IANA-RSVD 50115 IANA-RSVD 50116 IANA-RSVD 50117 IANA-RSVD 50118 IANA-RSVD 50119 IANA-RSVD 50120 IANA-RSVD 50121 IANA-RSVD 50122 IANA-RSVD 50123 IANA-RSVD 50124 IANA-RSVD 50125 IANA-RSVD 50126 IANA-RSVD 50127 IANA-RSVD 50128 IANA-RSVD 50129 IANA-RSVD 50130 IANA-RSVD 50131 IANA-RSVD 50132 IANA-RSVD 50133 IANA-RSVD 50134 IANA-RSVD 50135 IANA-RSVD 50136 IANA-RSVD 50137 IANA-RSVD 50138 IANA-RSVD 50139 IANA-RSVD 50140 IANA-RSVD 50141 IANA-RSVD 50142 IANA-RSVD 50143 IANA-RSVD 50144 IANA-RSVD 50145 IANA-RSVD 50146 IANA-RSVD 50147 IANA-RSVD 50148 IANA-RSVD 50149 IANA-RSVD 50150 IANA-RSVD 50151 IANA-RSVD 50152 IANA-RSVD 50153 IANA-RSVD 50154 IANA-RSVD 50155 IANA-RSVD 50156 IANA-RSVD 50157 IANA-RSVD 50158 IANA-RSVD 50159 IANA-RSVD 50160 IANA-RSVD 50161 IANA-RSVD 50162 IANA-RSVD 50163 IANA-RSVD 50164 IANA-RSVD 50165 IANA-RSVD 50166 IANA-RSVD 50167 IANA-RSVD 50168 IANA-RSVD 50169 IANA-RSVD 50170 IANA-RSVD 50171 IANA-RSVD 50172 IANA-RSVD 50173 IANA-RSVD 50174 IANA-RSVD 50175 IANA-RSVD 50176 IANA-RSVD 50177 IANA-RSVD 50178 IANA-RSVD 50179 IANA-RSVD 50180 IANA-RSVD 50181 IANA-RSVD 50182 IANA-RSVD 50183 IANA-RSVD 50184 IANA-RSVD 50185 IANA-RSVD 50186 IANA-RSVD 50187 IANA-RSVD 50188 IANA-RSVD 50189 IANA-RSVD 50190 IANA-RSVD 50191 IANA-RSVD 50192 IANA-RSVD 50193 IANA-RSVD 50194 IANA-RSVD 50195 IANA-RSVD 50196 IANA-RSVD 50197 IANA-RSVD 50198 IANA-RSVD 50199 IANA-RSVD 50200 IANA-RSVD 50201 IANA-RSVD 50202 IANA-RSVD 50203 IANA-RSVD 50204 IANA-RSVD 50205 IANA-RSVD 50206 IANA-RSVD 50207 IANA-RSVD 50208 IANA-RSVD 50209 IANA-RSVD 50210 IANA-RSVD 50211 IANA-RSVD 50212 IANA-RSVD 50213 IANA-RSVD 50214 IANA-RSVD 50215 IANA-RSVD 50216 IANA-RSVD 50217 IANA-RSVD 50218 IANA-RSVD 50219 IANA-RSVD 50220 IANA-RSVD 50221 IANA-RSVD 50222 IANA-RSVD 50223 IANA-RSVD 50224 IANA-RSVD 50225 IANA-RSVD 50226 IANA-RSVD 50227 IANA-RSVD 50228 IANA-RSVD 50229 IANA-RSVD 50230 IANA-RSVD 50231 IANA-RSVD 50232 IANA-RSVD 50233 IANA-RSVD 50234 IANA-RSVD 50235 IANA-RSVD 50236 IANA-RSVD 50237 IANA-RSVD 50238 IANA-RSVD 50239 IANA-RSVD 50240 IANA-RSVD 50241 IANA-RSVD 50242 IANA-RSVD 50243 IANA-RSVD 50244 IANA-RSVD 50245 IANA-RSVD 50246 IANA-RSVD 50247 IANA-RSVD 50248 IANA-RSVD 50249 IANA-RSVD 50250 IANA-RSVD 50251 IANA-RSVD 50252 IANA-RSVD 50253 IANA-RSVD 50254 IANA-RSVD 50255 IANA-RSVD 50256 IANA-RSVD 50257 IANA-RSVD 50258 IANA-RSVD 50259 IANA-RSVD 50260 IANA-RSVD 50261 IANA-RSVD 50262 IANA-RSVD 50263 IANA-RSVD 50264 IANA-RSVD 50265 IANA-RSVD 50266 IANA-RSVD 50267 IANA-RSVD 50268 IANA-RSVD 50269 IANA-RSVD 50270 IANA-RSVD 50271 IANA-RSVD 50272 IANA-RSVD 50273 IANA-RSVD 50274 IANA-RSVD 50275 IANA-RSVD 50276 IANA-RSVD 50277 IANA-RSVD 50278 IANA-RSVD 50279 IANA-RSVD 50280 IANA-RSVD 50281 IANA-RSVD 50282 IANA-RSVD 50283 IANA-RSVD 50284 IANA-RSVD 50285 IANA-RSVD 50286 IANA-RSVD 50287 IANA-RSVD 50288 IANA-RSVD 50289 IANA-RSVD 50290 IANA-RSVD 50291 IANA-RSVD 50292 IANA-RSVD 50293 IANA-RSVD 50294 IANA-RSVD 50295 IANA-RSVD 50296 IANA-RSVD 50297 IANA-RSVD 50298 IANA-RSVD 50299 IANA-RSVD 50300 IANA-RSVD 50301 IANA-RSVD 50302 IANA-RSVD 50303 IANA-RSVD 50304 IANA-RSVD 50305 IANA-RSVD 50306 IANA-RSVD 50307 IANA-RSVD 50308 IANA-RSVD 50309 IANA-RSVD 50310 IANA-RSVD 50311 IANA-RSVD 50312 IANA-RSVD 50313 IANA-RSVD 50314 IANA-RSVD 50315 IANA-RSVD 50316 IANA-RSVD 50317 IANA-RSVD 50318 IANA-RSVD 50319 IANA-RSVD 50320 IANA-RSVD 50321 IANA-RSVD 50322 IANA-RSVD 50323 IANA-RSVD 50324 IANA-RSVD 50325 IANA-RSVD 50326 IANA-RSVD 50327 IANA-RSVD 50328 IANA-RSVD 50329 IANA-RSVD 50330 IANA-RSVD 50331 IANA-RSVD 50332 IANA-RSVD 50333 IANA-RSVD 50334 IANA-RSVD 50335 IANA-RSVD 50336 IANA-RSVD 50337 IANA-RSVD 50338 IANA-RSVD 50339 IANA-RSVD 50340 IANA-RSVD 50341 IANA-RSVD 50342 IANA-RSVD 50343 IANA-RSVD 50344 IANA-RSVD 50345 IANA-RSVD 50346 IANA-RSVD 50347 IANA-RSVD 50348 IANA-RSVD 50349 IANA-RSVD 50350 IANA-RSVD 50351 IANA-RSVD 50352 IANA-RSVD 50353 IANA-RSVD 50354 IANA-RSVD 50355 IANA-RSVD 50356 IANA-RSVD 50357 IANA-RSVD 50358 IANA-RSVD 50359 IANA-RSVD 50360 IANA-RSVD 50361 IANA-RSVD 50362 IANA-RSVD 50363 IANA-RSVD 50364 IANA-RSVD 50365 IANA-RSVD 50366 IANA-RSVD 50367 IANA-RSVD 50368 IANA-RSVD 50369 IANA-RSVD 50370 IANA-RSVD 50371 IANA-RSVD 50372 IANA-RSVD 50373 IANA-RSVD 50374 IANA-RSVD 50375 IANA-RSVD 50376 IANA-RSVD 50377 IANA-RSVD 50378 IANA-RSVD 50379 IANA-RSVD 50380 IANA-RSVD 50381 IANA-RSVD 50382 IANA-RSVD 50383 IANA-RSVD 50384 IANA-RSVD 50385 IANA-RSVD 50386 IANA-RSVD 50387 IANA-RSVD 50388 IANA-RSVD 50389 IANA-RSVD 50390 IANA-RSVD 50391 IANA-RSVD 50392 IANA-RSVD 50393 IANA-RSVD 50394 IANA-RSVD 50395 IANA-RSVD 50396 IANA-RSVD 50397 IANA-RSVD 50398 IANA-RSVD 50399 IANA-RSVD 50400 IANA-RSVD 50401 IANA-RSVD 50402 IANA-RSVD 50403 IANA-RSVD 50404 IANA-RSVD 50405 IANA-RSVD 50406 IANA-RSVD 50407 IANA-RSVD 50408 IANA-RSVD 50409 IANA-RSVD 50410 IANA-RSVD 50411 IANA-RSVD 50412 IANA-RSVD 50413 IANA-RSVD 50414 IANA-RSVD 50415 IANA-RSVD 50416 IANA-RSVD 50417 IANA-RSVD 50418 IANA-RSVD 50419 IANA-RSVD 50420 IANA-RSVD 50421 IANA-RSVD 50422 IANA-RSVD 50423 IANA-RSVD 50424 IANA-RSVD 50425 IANA-RSVD 50426 IANA-RSVD 50427 IANA-RSVD 50428 IANA-RSVD 50429 IANA-RSVD 50430 IANA-RSVD 50431 IANA-RSVD 50432 IANA-RSVD 50433 IANA-RSVD 50434 IANA-RSVD 50435 IANA-RSVD 50436 IANA-RSVD 50437 IANA-RSVD 50438 IANA-RSVD 50439 IANA-RSVD 50440 IANA-RSVD 50441 IANA-RSVD 50442 IANA-RSVD 50443 IANA-RSVD 50444 IANA-RSVD 50445 IANA-RSVD 50446 IANA-RSVD 50447 IANA-RSVD 50448 IANA-RSVD 50449 IANA-RSVD 50450 IANA-RSVD 50451 IANA-RSVD 50452 IANA-RSVD 50453 IANA-RSVD 50454 IANA-RSVD 50455 IANA-RSVD 50456 IANA-RSVD 50457 IANA-RSVD 50458 IANA-RSVD 50459 IANA-RSVD 50460 IANA-RSVD 50461 IANA-RSVD 50462 IANA-RSVD 50463 IANA-RSVD 50464 IANA-RSVD 50465 IANA-RSVD 50466 IANA-RSVD 50467 IANA-RSVD 50468 IANA-RSVD 50469 IANA-RSVD 50470 IANA-RSVD 50471 IANA-RSVD 50472 IANA-RSVD 50473 IANA-RSVD 50474 IANA-RSVD 50475 IANA-RSVD 50476 IANA-RSVD 50477 IANA-RSVD 50478 IANA-RSVD 50479 IANA-RSVD 50480 IANA-RSVD 50481 IANA-RSVD 50482 IANA-RSVD 50483 IANA-RSVD 50484 IANA-RSVD 50485 IANA-RSVD 50486 IANA-RSVD 50487 IANA-RSVD 50488 IANA-RSVD 50489 IANA-RSVD 50490 IANA-RSVD 50491 IANA-RSVD 50492 IANA-RSVD 50493 IANA-RSVD 50494 IANA-RSVD 50495 IANA-RSVD 50496 IANA-RSVD 50497 IANA-RSVD 50498 IANA-RSVD 50499 IANA-RSVD 50500 IANA-RSVD 50501 IANA-RSVD 50502 IANA-RSVD 50503 IANA-RSVD 50504 IANA-RSVD 50505 IANA-RSVD 50506 IANA-RSVD 50507 IANA-RSVD 50508 IANA-RSVD 50509 IANA-RSVD 50510 IANA-RSVD 50511 IANA-RSVD 50512 IANA-RSVD 50513 IANA-RSVD 50514 IANA-RSVD 50515 IANA-RSVD 50516 IANA-RSVD 50517 IANA-RSVD 50518 IANA-RSVD 50519 IANA-RSVD 50520 IANA-RSVD 50521 IANA-RSVD 50522 IANA-RSVD 50523 IANA-RSVD 50524 IANA-RSVD 50525 IANA-RSVD 50526 IANA-RSVD 50527 IANA-RSVD 50528 IANA-RSVD 50529 IANA-RSVD 50530 IANA-RSVD 50531 IANA-RSVD 50532 IANA-RSVD 50533 IANA-RSVD 50534 IANA-RSVD 50535 IANA-RSVD 50536 IANA-RSVD 50537 IANA-RSVD 50538 IANA-RSVD 50539 IANA-RSVD 50540 IANA-RSVD 50541 IANA-RSVD 50542 IANA-RSVD 50543 IANA-RSVD 50544 IANA-RSVD 50545 IANA-RSVD 50546 IANA-RSVD 50547 IANA-RSVD 50548 IANA-RSVD 50549 IANA-RSVD 50550 IANA-RSVD 50551 IANA-RSVD 50552 IANA-RSVD 50553 IANA-RSVD 50554 IANA-RSVD 50555 IANA-RSVD 50556 IANA-RSVD 50557 IANA-RSVD 50558 IANA-RSVD 50559 IANA-RSVD 50560 IANA-RSVD 50561 IANA-RSVD 50562 IANA-RSVD 50563 IANA-RSVD 50564 IANA-RSVD 50565 IANA-RSVD 50566 IANA-RSVD 50567 IANA-RSVD 50568 IANA-RSVD 50569 IANA-RSVD 50570 IANA-RSVD 50571 IANA-RSVD 50572 IANA-RSVD 50573 IANA-RSVD 50574 IANA-RSVD 50575 IANA-RSVD 50576 IANA-RSVD 50577 IANA-RSVD 50578 IANA-RSVD 50579 IANA-RSVD 50580 IANA-RSVD 50581 IANA-RSVD 50582 IANA-RSVD 50583 IANA-RSVD 50584 IANA-RSVD 50585 IANA-RSVD 50586 IANA-RSVD 50587 IANA-RSVD 50588 IANA-RSVD 50589 IANA-RSVD 50590 IANA-RSVD 50591 IANA-RSVD 50592 IANA-RSVD 50593 IANA-RSVD 50594 IANA-RSVD 50595 IANA-RSVD 50596 IANA-RSVD 50597 IANA-RSVD 50598 IANA-RSVD 50599 IANA-RSVD 50600 IANA-RSVD 50601 IANA-RSVD 50602 IANA-RSVD 50603 IANA-RSVD 50604 IANA-RSVD 50605 IANA-RSVD 50606 IANA-RSVD 50607 IANA-RSVD 50608 IANA-RSVD 50609 IANA-RSVD 50610 IANA-RSVD 50611 IANA-RSVD 50612 IANA-RSVD 50613 IANA-RSVD 50614 IANA-RSVD 50615 IANA-RSVD 50616 IANA-RSVD 50617 IANA-RSVD 50618 IANA-RSVD 50619 IANA-RSVD 50620 IANA-RSVD 50621 IANA-RSVD 50622 IANA-RSVD 50623 IANA-RSVD 50624 IANA-RSVD 50625 IANA-RSVD 50626 IANA-RSVD 50627 IANA-RSVD 50628 IANA-RSVD 50629 IANA-RSVD 50630 IANA-RSVD 50631 IANA-RSVD 50632 IANA-RSVD 50633 IANA-RSVD 50634 IANA-RSVD 50635 IANA-RSVD 50636 IANA-RSVD 50637 IANA-RSVD 50638 IANA-RSVD 50639 IANA-RSVD 50640 IANA-RSVD 50641 IANA-RSVD 50642 IANA-RSVD 50643 IANA-RSVD 50644 IANA-RSVD 50645 IANA-RSVD 50646 IANA-RSVD 50647 IANA-RSVD 50648 IANA-RSVD 50649 IANA-RSVD 50650 IANA-RSVD 50651 IANA-RSVD 50652 IANA-RSVD 50653 IANA-RSVD 50654 IANA-RSVD 50655 IANA-RSVD 50656 IANA-RSVD 50657 IANA-RSVD 50658 IANA-RSVD 50659 IANA-RSVD 50660 IANA-RSVD 50661 IANA-RSVD 50662 IANA-RSVD 50663 IANA-RSVD 50664 IANA-RSVD 50665 IANA-RSVD 50666 IANA-RSVD 50667 IANA-RSVD 50668 IANA-RSVD 50669 IANA-RSVD 50670 IANA-RSVD 50671 IANA-RSVD 50672 IANA-RSVD 50673 IANA-RSVD 50674 IANA-RSVD 50675 IANA-RSVD 50676 IANA-RSVD 50677 IANA-RSVD 50678 IANA-RSVD 50679 IANA-RSVD 50680 IANA-RSVD 50681 IANA-RSVD 50682 IANA-RSVD 50683 IANA-RSVD 50684 IANA-RSVD 50685 IANA-RSVD 50686 IANA-RSVD 50687 IANA-RSVD 50688 IANA-RSVD 50689 IANA-RSVD 50690 IANA-RSVD 50691 IANA-RSVD 50692 IANA-RSVD 50693 IANA-RSVD 50694 IANA-RSVD 50695 IANA-RSVD 50696 IANA-RSVD 50697 IANA-RSVD 50698 IANA-RSVD 50699 IANA-RSVD 50700 IANA-RSVD 50701 IANA-RSVD 50702 IANA-RSVD 50703 IANA-RSVD 50704 IANA-RSVD 50705 IANA-RSVD 50706 IANA-RSVD 50707 IANA-RSVD 50708 IANA-RSVD 50709 IANA-RSVD 50710 IANA-RSVD 50711 IANA-RSVD 50712 IANA-RSVD 50713 IANA-RSVD 50714 IANA-RSVD 50715 IANA-RSVD 50716 IANA-RSVD 50717 IANA-RSVD 50718 IANA-RSVD 50719 IANA-RSVD 50720 IANA-RSVD 50721 IANA-RSVD 50722 IANA-RSVD 50723 IANA-RSVD 50724 IANA-RSVD 50725 IANA-RSVD 50726 IANA-RSVD 50727 IANA-RSVD 50728 IANA-RSVD 50729 IANA-RSVD 50730 IANA-RSVD 50731 IANA-RSVD 50732 IANA-RSVD 50733 IANA-RSVD 50734 IANA-RSVD 50735 IANA-RSVD 50736 IANA-RSVD 50737 IANA-RSVD 50738 IANA-RSVD 50739 IANA-RSVD 50740 IANA-RSVD 50741 IANA-RSVD 50742 IANA-RSVD 50743 IANA-RSVD 50744 IANA-RSVD 50745 IANA-RSVD 50746 IANA-RSVD 50747 IANA-RSVD 50748 IANA-RSVD 50749 IANA-RSVD 50750 IANA-RSVD 50751 IANA-RSVD 50752 IANA-RSVD 50753 IANA-RSVD 50754 IANA-RSVD 50755 IANA-RSVD 50756 IANA-RSVD 50757 IANA-RSVD 50758 IANA-RSVD 50759 IANA-RSVD 50760 IANA-RSVD 50761 IANA-RSVD 50762 IANA-RSVD 50763 IANA-RSVD 50764 IANA-RSVD 50765 IANA-RSVD 50766 IANA-RSVD 50767 IANA-RSVD 50768 IANA-RSVD 50769 IANA-RSVD 50770 IANA-RSVD 50771 IANA-RSVD 50772 IANA-RSVD 50773 IANA-RSVD 50774 IANA-RSVD 50775 IANA-RSVD 50776 IANA-RSVD 50777 IANA-RSVD 50778 IANA-RSVD 50779 IANA-RSVD 50780 IANA-RSVD 50781 IANA-RSVD 50782 IANA-RSVD 50783 IANA-RSVD 50784 IANA-RSVD 50785 IANA-RSVD 50786 IANA-RSVD 50787 IANA-RSVD 50788 IANA-RSVD 50789 IANA-RSVD 50790 IANA-RSVD 50791 IANA-RSVD 50792 IANA-RSVD 50793 IANA-RSVD 50794 IANA-RSVD 50795 IANA-RSVD 50796 IANA-RSVD 50797 IANA-RSVD 50798 IANA-RSVD 50799 IANA-RSVD 50800 IANA-RSVD 50801 IANA-RSVD 50802 IANA-RSVD 50803 IANA-RSVD 50804 IANA-RSVD 50805 IANA-RSVD 50806 IANA-RSVD 50807 IANA-RSVD 50808 IANA-RSVD 50809 IANA-RSVD 50810 IANA-RSVD 50811 IANA-RSVD 50812 IANA-RSVD 50813 IANA-RSVD 50814 IANA-RSVD 50815 IANA-RSVD 50816 IANA-RSVD 50817 IANA-RSVD 50818 IANA-RSVD 50819 IANA-RSVD 50820 IANA-RSVD 50821 IANA-RSVD 50822 IANA-RSVD 50823 IANA-RSVD 50824 IANA-RSVD 50825 IANA-RSVD 50826 IANA-RSVD 50827 IANA-RSVD 50828 IANA-RSVD 50829 IANA-RSVD 50830 IANA-RSVD 50831 IANA-RSVD 50832 IANA-RSVD 50833 IANA-RSVD 50834 IANA-RSVD 50835 IANA-RSVD 50836 IANA-RSVD 50837 IANA-RSVD 50838 IANA-RSVD 50839 IANA-RSVD 50840 IANA-RSVD 50841 IANA-RSVD 50842 IANA-RSVD 50843 IANA-RSVD 50844 IANA-RSVD 50845 IANA-RSVD 50846 IANA-RSVD 50847 IANA-RSVD 50848 IANA-RSVD 50849 IANA-RSVD 50850 IANA-RSVD 50851 IANA-RSVD 50852 IANA-RSVD 50853 IANA-RSVD 50854 IANA-RSVD 50855 IANA-RSVD 50856 IANA-RSVD 50857 IANA-RSVD 50858 IANA-RSVD 50859 IANA-RSVD 50860 IANA-RSVD 50861 IANA-RSVD 50862 IANA-RSVD 50863 IANA-RSVD 50864 IANA-RSVD 50865 IANA-RSVD 50866 IANA-RSVD 50867 IANA-RSVD 50868 IANA-RSVD 50869 IANA-RSVD 50870 IANA-RSVD 50871 IANA-RSVD 50872 IANA-RSVD 50873 IANA-RSVD 50874 IANA-RSVD 50875 IANA-RSVD 50876 IANA-RSVD 50877 IANA-RSVD 50878 IANA-RSVD 50879 IANA-RSVD 50880 IANA-RSVD 50881 IANA-RSVD 50882 IANA-RSVD 50883 IANA-RSVD 50884 IANA-RSVD 50885 IANA-RSVD 50886 IANA-RSVD 50887 IANA-RSVD 50888 IANA-RSVD 50889 IANA-RSVD 50890 IANA-RSVD 50891 IANA-RSVD 50892 IANA-RSVD 50893 IANA-RSVD 50894 IANA-RSVD 50895 IANA-RSVD 50896 IANA-RSVD 50897 IANA-RSVD 50898 IANA-RSVD 50899 IANA-RSVD 50900 IANA-RSVD 50901 IANA-RSVD 50902 IANA-RSVD 50903 IANA-RSVD 50904 IANA-RSVD 50905 IANA-RSVD 50906 IANA-RSVD 50907 IANA-RSVD 50908 IANA-RSVD 50909 IANA-RSVD 50910 IANA-RSVD 50911 IANA-RSVD 50912 IANA-RSVD 50913 IANA-RSVD 50914 IANA-RSVD 50915 IANA-RSVD 50916 IANA-RSVD 50917 IANA-RSVD 50918 IANA-RSVD 50919 IANA-RSVD 50920 IANA-RSVD 50921 IANA-RSVD 50922 IANA-RSVD 50923 IANA-RSVD 50924 IANA-RSVD 50925 IANA-RSVD 50926 IANA-RSVD 50927 IANA-RSVD 50928 IANA-RSVD 50929 IANA-RSVD 50930 IANA-RSVD 50931 IANA-RSVD 50932 IANA-RSVD 50933 IANA-RSVD 50934 IANA-RSVD 50935 IANA-RSVD 50936 IANA-RSVD 50937 IANA-RSVD 50938 IANA-RSVD 50939 IANA-RSVD 50940 IANA-RSVD 50941 IANA-RSVD 50942 IANA-RSVD 50943 IANA-RSVD 50944 IANA-RSVD 50945 IANA-RSVD 50946 IANA-RSVD 50947 IANA-RSVD 50948 IANA-RSVD 50949 IANA-RSVD 50950 IANA-RSVD 50951 IANA-RSVD 50952 IANA-RSVD 50953 IANA-RSVD 50954 IANA-RSVD 50955 IANA-RSVD 50956 IANA-RSVD 50957 IANA-RSVD 50958 IANA-RSVD 50959 IANA-RSVD 50960 IANA-RSVD 50961 IANA-RSVD 50962 IANA-RSVD 50963 IANA-RSVD 50964 IANA-RSVD 50965 IANA-RSVD 50966 IANA-RSVD 50967 IANA-RSVD 50968 IANA-RSVD 50969 IANA-RSVD 50970 IANA-RSVD 50971 IANA-RSVD 50972 IANA-RSVD 50973 IANA-RSVD 50974 IANA-RSVD 50975 IANA-RSVD 50976 IANA-RSVD 50977 IANA-RSVD 50978 IANA-RSVD 50979 IANA-RSVD 50980 IANA-RSVD 50981 IANA-RSVD 50982 IANA-RSVD 50983 IANA-RSVD 50984 IANA-RSVD 50985 IANA-RSVD 50986 IANA-RSVD 50987 IANA-RSVD 50988 IANA-RSVD 50989 IANA-RSVD 50990 IANA-RSVD 50991 IANA-RSVD 50992 IANA-RSVD 50993 IANA-RSVD 50994 IANA-RSVD 50995 IANA-RSVD 50996 IANA-RSVD 50997 IANA-RSVD 50998 IANA-RSVD 50999 IANA-RSVD 51000 IANA-RSVD 51001 IANA-RSVD 51002 IANA-RSVD 51003 IANA-RSVD 51004 IANA-RSVD 51005 IANA-RSVD 51006 IANA-RSVD 51007 IANA-RSVD 51008 IANA-RSVD 51009 IANA-RSVD 51010 IANA-RSVD 51011 IANA-RSVD 51012 IANA-RSVD 51013 IANA-RSVD 51014 IANA-RSVD 51015 IANA-RSVD 51016 IANA-RSVD 51017 IANA-RSVD 51018 IANA-RSVD 51019 IANA-RSVD 51020 IANA-RSVD 51021 IANA-RSVD 51022 IANA-RSVD 51023 IANA-RSVD 51024 IANA-RSVD 51025 IANA-RSVD 51026 IANA-RSVD 51027 IANA-RSVD 51028 IANA-RSVD 51029 IANA-RSVD 51030 IANA-RSVD 51031 IANA-RSVD 51032 IANA-RSVD 51033 IANA-RSVD 51034 IANA-RSVD 51035 IANA-RSVD 51036 IANA-RSVD 51037 IANA-RSVD 51038 IANA-RSVD 51039 IANA-RSVD 51040 IANA-RSVD 51041 IANA-RSVD 51042 IANA-RSVD 51043 IANA-RSVD 51044 IANA-RSVD 51045 IANA-RSVD 51046 IANA-RSVD 51047 IANA-RSVD 51048 IANA-RSVD 51049 IANA-RSVD 51050 IANA-RSVD 51051 IANA-RSVD 51052 IANA-RSVD 51053 IANA-RSVD 51054 IANA-RSVD 51055 IANA-RSVD 51056 IANA-RSVD 51057 IANA-RSVD 51058 IANA-RSVD 51059 IANA-RSVD 51060 IANA-RSVD 51061 IANA-RSVD 51062 IANA-RSVD 51063 IANA-RSVD 51064 IANA-RSVD 51065 IANA-RSVD 51066 IANA-RSVD 51067 IANA-RSVD 51068 IANA-RSVD 51069 IANA-RSVD 51070 IANA-RSVD 51071 IANA-RSVD 51072 IANA-RSVD 51073 IANA-RSVD 51074 IANA-RSVD 51075 IANA-RSVD 51076 IANA-RSVD 51077 IANA-RSVD 51078 IANA-RSVD 51079 IANA-RSVD 51080 IANA-RSVD 51081 IANA-RSVD 51082 IANA-RSVD 51083 IANA-RSVD 51084 IANA-RSVD 51085 IANA-RSVD 51086 IANA-RSVD 51087 IANA-RSVD 51088 IANA-RSVD 51089 IANA-RSVD 51090 IANA-RSVD 51091 IANA-RSVD 51092 IANA-RSVD 51093 IANA-RSVD 51094 IANA-RSVD 51095 IANA-RSVD 51096 IANA-RSVD 51097 IANA-RSVD 51098 IANA-RSVD 51099 IANA-RSVD 51100 IANA-RSVD 51101 IANA-RSVD 51102 IANA-RSVD 51103 IANA-RSVD 51104 IANA-RSVD 51105 IANA-RSVD 51106 IANA-RSVD 51107 IANA-RSVD 51108 IANA-RSVD 51109 IANA-RSVD 51110 IANA-RSVD 51111 IANA-RSVD 51112 IANA-RSVD 51113 IANA-RSVD 51114 IANA-RSVD 51115 IANA-RSVD 51116 IANA-RSVD 51117 IANA-RSVD 51118 IANA-RSVD 51119 IANA-RSVD 51120 IANA-RSVD 51121 IANA-RSVD 51122 IANA-RSVD 51123 IANA-RSVD 51124 IANA-RSVD 51125 IANA-RSVD 51126 IANA-RSVD 51127 IANA-RSVD 51128 IANA-RSVD 51129 IANA-RSVD 51130 IANA-RSVD 51131 IANA-RSVD 51132 IANA-RSVD 51133 IANA-RSVD 51134 IANA-RSVD 51135 IANA-RSVD 51136 IANA-RSVD 51137 IANA-RSVD 51138 IANA-RSVD 51139 IANA-RSVD 51140 IANA-RSVD 51141 IANA-RSVD 51142 IANA-RSVD 51143 IANA-RSVD 51144 IANA-RSVD 51145 IANA-RSVD 51146 IANA-RSVD 51147 IANA-RSVD 51148 IANA-RSVD 51149 IANA-RSVD 51150 IANA-RSVD 51151 IANA-RSVD 51152 IANA-RSVD 51153 IANA-RSVD 51154 IANA-RSVD 51155 IANA-RSVD 51156 IANA-RSVD 51157 IANA-RSVD 51158 IANA-RSVD 51159 IANA-RSVD 51160 IANA-RSVD 51161 IANA-RSVD 51162 IANA-RSVD 51163 IANA-RSVD 51164 IANA-RSVD 51165 IANA-RSVD 51166 IANA-RSVD 51167 IANA-RSVD 51168 IANA-RSVD 51169 IANA-RSVD 51170 IANA-RSVD 51171 IANA-RSVD 51172 IANA-RSVD 51173 IANA-RSVD 51174 IANA-RSVD 51175 IANA-RSVD 51176 IANA-RSVD 51177 IANA-RSVD 51178 IANA-RSVD 51179 IANA-RSVD 51180 IANA-RSVD 51181 IANA-RSVD 51182 IANA-RSVD 51183 IANA-RSVD 51184 IANA-RSVD 51185 IANA-RSVD 51186 IANA-RSVD 51187 IANA-RSVD 51188 IANA-RSVD 51189 IANA-RSVD 51190 IANA-RSVD 51191 IANA-RSVD 51192 IANA-RSVD 51193 IANA-RSVD 51194 IANA-RSVD 51195 IANA-RSVD 51196 IANA-RSVD 51197 IANA-RSVD 51198 IANA-RSVD 51199 IANA-RSVD 51200 IANA-RSVD 51201 IANA-RSVD 51202 IANA-RSVD 51203 IANA-RSVD 51204 IANA-RSVD 51205 IANA-RSVD 51206 IANA-RSVD 51207 IANA-RSVD 51208 IANA-RSVD 51209 IANA-RSVD 51210 IANA-RSVD 51211 IANA-RSVD 51212 IANA-RSVD 51213 IANA-RSVD 51214 IANA-RSVD 51215 IANA-RSVD 51216 IANA-RSVD 51217 IANA-RSVD 51218 IANA-RSVD 51219 IANA-RSVD 51220 IANA-RSVD 51221 IANA-RSVD 51222 IANA-RSVD 51223 IANA-RSVD 51224 IANA-RSVD 51225 IANA-RSVD 51226 IANA-RSVD 51227 IANA-RSVD 51228 IANA-RSVD 51229 IANA-RSVD 51230 IANA-RSVD 51231 IANA-RSVD 51232 IANA-RSVD 51233 IANA-RSVD 51234 IANA-RSVD 51235 IANA-RSVD 51236 IANA-RSVD 51237 IANA-RSVD 51238 IANA-RSVD 51239 IANA-RSVD 51240 IANA-RSVD 51241 IANA-RSVD 51242 IANA-RSVD 51243 IANA-RSVD 51244 IANA-RSVD 51245 IANA-RSVD 51246 IANA-RSVD 51247 IANA-RSVD 51248 IANA-RSVD 51249 IANA-RSVD 51250 IANA-RSVD 51251 IANA-RSVD 51252 IANA-RSVD 51253 IANA-RSVD 51254 IANA-RSVD 51255 IANA-RSVD 51256 IANA-RSVD 51257 IANA-RSVD 51258 IANA-RSVD 51259 IANA-RSVD 51260 IANA-RSVD 51261 IANA-RSVD 51262 IANA-RSVD 51263 IANA-RSVD 51264 IANA-RSVD 51265 IANA-RSVD 51266 IANA-RSVD 51267 IANA-RSVD 51268 IANA-RSVD 51269 IANA-RSVD 51270 IANA-RSVD 51271 IANA-RSVD 51272 IANA-RSVD 51273 IANA-RSVD 51274 IANA-RSVD 51275 IANA-RSVD 51276 IANA-RSVD 51277 IANA-RSVD 51278 IANA-RSVD 51279 IANA-RSVD 51280 IANA-RSVD 51281 IANA-RSVD 51282 IANA-RSVD 51283 IANA-RSVD 51284 IANA-RSVD 51285 IANA-RSVD 51286 IANA-RSVD 51287 IANA-RSVD 51288 IANA-RSVD 51289 IANA-RSVD 51290 IANA-RSVD 51291 IANA-RSVD 51292 IANA-RSVD 51293 IANA-RSVD 51294 IANA-RSVD 51295 IANA-RSVD 51296 IANA-RSVD 51297 IANA-RSVD 51298 IANA-RSVD 51299 IANA-RSVD 51300 IANA-RSVD 51301 IANA-RSVD 51302 IANA-RSVD 51303 IANA-RSVD 51304 IANA-RSVD 51305 IANA-RSVD 51306 IANA-RSVD 51307 IANA-RSVD 51308 IANA-RSVD 51309 IANA-RSVD 51310 IANA-RSVD 51311 IANA-RSVD 51312 IANA-RSVD 51313 IANA-RSVD 51314 IANA-RSVD 51315 IANA-RSVD 51316 IANA-RSVD 51317 IANA-RSVD 51318 IANA-RSVD 51319 IANA-RSVD 51320 IANA-RSVD 51321 IANA-RSVD 51322 IANA-RSVD 51323 IANA-RSVD 51324 IANA-RSVD 51325 IANA-RSVD 51326 IANA-RSVD 51327 IANA-RSVD 51328 IANA-RSVD 51329 IANA-RSVD 51330 IANA-RSVD 51331 IANA-RSVD 51332 IANA-RSVD 51333 IANA-RSVD 51334 IANA-RSVD 51335 IANA-RSVD 51336 IANA-RSVD 51337 IANA-RSVD 51338 IANA-RSVD 51339 IANA-RSVD 51340 IANA-RSVD 51341 IANA-RSVD 51342 IANA-RSVD 51343 IANA-RSVD 51344 IANA-RSVD 51345 IANA-RSVD 51346 IANA-RSVD 51347 IANA-RSVD 51348 IANA-RSVD 51349 IANA-RSVD 51350 IANA-RSVD 51351 IANA-RSVD 51352 IANA-RSVD 51353 IANA-RSVD 51354 IANA-RSVD 51355 IANA-RSVD 51356 IANA-RSVD 51357 IANA-RSVD 51358 IANA-RSVD 51359 IANA-RSVD 51360 IANA-RSVD 51361 IANA-RSVD 51362 IANA-RSVD 51363 IANA-RSVD 51364 IANA-RSVD 51365 IANA-RSVD 51366 IANA-RSVD 51367 IANA-RSVD 51368 IANA-RSVD 51369 IANA-RSVD 51370 IANA-RSVD 51371 IANA-RSVD 51372 IANA-RSVD 51373 IANA-RSVD 51374 IANA-RSVD 51375 IANA-RSVD 51376 IANA-RSVD 51377 IANA-RSVD 51378 IANA-RSVD 51379 IANA-RSVD 51380 IANA-RSVD 51381 IANA-RSVD 51382 IANA-RSVD 51383 IANA-RSVD 51384 IANA-RSVD 51385 IANA-RSVD 51386 IANA-RSVD 51387 IANA-RSVD 51388 IANA-RSVD 51389 IANA-RSVD 51390 IANA-RSVD 51391 IANA-RSVD 51392 IANA-RSVD 51393 IANA-RSVD 51394 IANA-RSVD 51395 IANA-RSVD 51396 IANA-RSVD 51397 IANA-RSVD 51398 IANA-RSVD 51399 IANA-RSVD 51400 IANA-RSVD 51401 IANA-RSVD 51402 IANA-RSVD 51403 IANA-RSVD 51404 IANA-RSVD 51405 IANA-RSVD 51406 IANA-RSVD 51407 IANA-RSVD 51408 IANA-RSVD 51409 IANA-RSVD 51410 IANA-RSVD 51411 IANA-RSVD 51412 IANA-RSVD 51413 IANA-RSVD 51414 IANA-RSVD 51415 IANA-RSVD 51416 IANA-RSVD 51417 IANA-RSVD 51418 IANA-RSVD 51419 IANA-RSVD 51420 IANA-RSVD 51421 IANA-RSVD 51422 IANA-RSVD 51423 IANA-RSVD 51424 IANA-RSVD 51425 IANA-RSVD 51426 IANA-RSVD 51427 IANA-RSVD 51428 IANA-RSVD 51429 IANA-RSVD 51430 IANA-RSVD 51431 IANA-RSVD 51432 IANA-RSVD 51433 IANA-RSVD 51434 IANA-RSVD 51435 IANA-RSVD 51436 IANA-RSVD 51437 IANA-RSVD 51438 IANA-RSVD 51439 IANA-RSVD 51440 IANA-RSVD 51441 IANA-RSVD 51442 IANA-RSVD 51443 IANA-RSVD 51444 IANA-RSVD 51445 IANA-RSVD 51446 IANA-RSVD 51447 IANA-RSVD 51448 IANA-RSVD 51449 IANA-RSVD 51450 IANA-RSVD 51451 IANA-RSVD 51452 IANA-RSVD 51453 IANA-RSVD 51454 IANA-RSVD 51455 IANA-RSVD 51456 IANA-RSVD 51457 IANA-RSVD 51458 IANA-RSVD 51459 IANA-RSVD 51460 IANA-RSVD 51461 IANA-RSVD 51462 IANA-RSVD 51463 IANA-RSVD 51464 IANA-RSVD 51465 IANA-RSVD 51466 IANA-RSVD 51467 IANA-RSVD 51468 IANA-RSVD 51469 IANA-RSVD 51470 IANA-RSVD 51471 IANA-RSVD 51472 IANA-RSVD 51473 IANA-RSVD 51474 IANA-RSVD 51475 IANA-RSVD 51476 IANA-RSVD 51477 IANA-RSVD 51478 IANA-RSVD 51479 IANA-RSVD 51480 IANA-RSVD 51481 IANA-RSVD 51482 IANA-RSVD 51483 IANA-RSVD 51484 IANA-RSVD 51485 IANA-RSVD 51486 IANA-RSVD 51487 IANA-RSVD 51488 IANA-RSVD 51489 IANA-RSVD 51490 IANA-RSVD 51491 IANA-RSVD 51492 IANA-RSVD 51493 IANA-RSVD 51494 IANA-RSVD 51495 IANA-RSVD 51496 IANA-RSVD 51497 IANA-RSVD 51498 IANA-RSVD 51499 IANA-RSVD 51500 IANA-RSVD 51501 IANA-RSVD 51502 IANA-RSVD 51503 IANA-RSVD 51504 IANA-RSVD 51505 IANA-RSVD 51506 IANA-RSVD 51507 IANA-RSVD 51508 IANA-RSVD 51509 IANA-RSVD 51510 IANA-RSVD 51511 IANA-RSVD 51512 IANA-RSVD 51513 IANA-RSVD 51514 IANA-RSVD 51515 IANA-RSVD 51516 IANA-RSVD 51517 IANA-RSVD 51518 IANA-RSVD 51519 IANA-RSVD 51520 IANA-RSVD 51521 IANA-RSVD 51522 IANA-RSVD 51523 IANA-RSVD 51524 IANA-RSVD 51525 IANA-RSVD 51526 IANA-RSVD 51527 IANA-RSVD 51528 IANA-RSVD 51529 IANA-RSVD 51530 IANA-RSVD 51531 IANA-RSVD 51532 IANA-RSVD 51533 IANA-RSVD 51534 IANA-RSVD 51535 IANA-RSVD 51536 IANA-RSVD 51537 IANA-RSVD 51538 IANA-RSVD 51539 IANA-RSVD 51540 IANA-RSVD 51541 IANA-RSVD 51542 IANA-RSVD 51543 IANA-RSVD 51544 IANA-RSVD 51545 IANA-RSVD 51546 IANA-RSVD 51547 IANA-RSVD 51548 IANA-RSVD 51549 IANA-RSVD 51550 IANA-RSVD 51551 IANA-RSVD 51552 IANA-RSVD 51553 IANA-RSVD 51554 IANA-RSVD 51555 IANA-RSVD 51556 IANA-RSVD 51557 IANA-RSVD 51558 IANA-RSVD 51559 IANA-RSVD 51560 IANA-RSVD 51561 IANA-RSVD 51562 IANA-RSVD 51563 IANA-RSVD 51564 IANA-RSVD 51565 IANA-RSVD 51566 IANA-RSVD 51567 IANA-RSVD 51568 IANA-RSVD 51569 IANA-RSVD 51570 IANA-RSVD 51571 IANA-RSVD 51572 IANA-RSVD 51573 IANA-RSVD 51574 IANA-RSVD 51575 IANA-RSVD 51576 IANA-RSVD 51577 IANA-RSVD 51578 IANA-RSVD 51579 IANA-RSVD 51580 IANA-RSVD 51581 IANA-RSVD 51582 IANA-RSVD 51583 IANA-RSVD 51584 IANA-RSVD 51585 IANA-RSVD 51586 IANA-RSVD 51587 IANA-RSVD 51588 IANA-RSVD 51589 IANA-RSVD 51590 IANA-RSVD 51591 IANA-RSVD 51592 IANA-RSVD 51593 IANA-RSVD 51594 IANA-RSVD 51595 IANA-RSVD 51596 IANA-RSVD 51597 IANA-RSVD 51598 IANA-RSVD 51599 IANA-RSVD 51600 IANA-RSVD 51601 IANA-RSVD 51602 IANA-RSVD 51603 IANA-RSVD 51604 IANA-RSVD 51605 IANA-RSVD 51606 IANA-RSVD 51607 IANA-RSVD 51608 IANA-RSVD 51609 IANA-RSVD 51610 IANA-RSVD 51611 IANA-RSVD 51612 IANA-RSVD 51613 IANA-RSVD 51614 IANA-RSVD 51615 IANA-RSVD 51616 IANA-RSVD 51617 IANA-RSVD 51618 IANA-RSVD 51619 IANA-RSVD 51620 IANA-RSVD 51621 IANA-RSVD 51622 IANA-RSVD 51623 IANA-RSVD 51624 IANA-RSVD 51625 IANA-RSVD 51626 IANA-RSVD 51627 IANA-RSVD 51628 IANA-RSVD 51629 IANA-RSVD 51630 IANA-RSVD 51631 IANA-RSVD 51632 IANA-RSVD 51633 IANA-RSVD 51634 IANA-RSVD 51635 IANA-RSVD 51636 IANA-RSVD 51637 IANA-RSVD 51638 IANA-RSVD 51639 IANA-RSVD 51640 IANA-RSVD 51641 IANA-RSVD 51642 IANA-RSVD 51643 IANA-RSVD 51644 IANA-RSVD 51645 IANA-RSVD 51646 IANA-RSVD 51647 IANA-RSVD 51648 IANA-RSVD 51649 IANA-RSVD 51650 IANA-RSVD 51651 IANA-RSVD 51652 IANA-RSVD 51653 IANA-RSVD 51654 IANA-RSVD 51655 IANA-RSVD 51656 IANA-RSVD 51657 IANA-RSVD 51658 IANA-RSVD 51659 IANA-RSVD 51660 IANA-RSVD 51661 IANA-RSVD 51662 IANA-RSVD 51663 IANA-RSVD 51664 IANA-RSVD 51665 IANA-RSVD 51666 IANA-RSVD 51667 IANA-RSVD 51668 IANA-RSVD 51669 IANA-RSVD 51670 IANA-RSVD 51671 IANA-RSVD 51672 IANA-RSVD 51673 IANA-RSVD 51674 IANA-RSVD 51675 IANA-RSVD 51676 IANA-RSVD 51677 IANA-RSVD 51678 IANA-RSVD 51679 IANA-RSVD 51680 IANA-RSVD 51681 IANA-RSVD 51682 IANA-RSVD 51683 IANA-RSVD 51684 IANA-RSVD 51685 IANA-RSVD 51686 IANA-RSVD 51687 IANA-RSVD 51688 IANA-RSVD 51689 IANA-RSVD 51690 IANA-RSVD 51691 IANA-RSVD 51692 IANA-RSVD 51693 IANA-RSVD 51694 IANA-RSVD 51695 IANA-RSVD 51696 IANA-RSVD 51697 IANA-RSVD 51698 IANA-RSVD 51699 IANA-RSVD 51700 IANA-RSVD 51701 IANA-RSVD 51702 IANA-RSVD 51703 IANA-RSVD 51704 IANA-RSVD 51705 IANA-RSVD 51706 IANA-RSVD 51707 IANA-RSVD 51708 IANA-RSVD 51709 IANA-RSVD 51710 IANA-RSVD 51711 IANA-RSVD 51712 IANA-RSVD 51713 IANA-RSVD 51714 IANA-RSVD 51715 IANA-RSVD 51716 IANA-RSVD 51717 IANA-RSVD 51718 IANA-RSVD 51719 IANA-RSVD 51720 IANA-RSVD 51721 IANA-RSVD 51722 IANA-RSVD 51723 IANA-RSVD 51724 IANA-RSVD 51725 IANA-RSVD 51726 IANA-RSVD 51727 IANA-RSVD 51728 IANA-RSVD 51729 IANA-RSVD 51730 IANA-RSVD 51731 IANA-RSVD 51732 IANA-RSVD 51733 IANA-RSVD 51734 IANA-RSVD 51735 IANA-RSVD 51736 IANA-RSVD 51737 IANA-RSVD 51738 IANA-RSVD 51739 IANA-RSVD 51740 IANA-RSVD 51741 IANA-RSVD 51742 IANA-RSVD 51743 IANA-RSVD 51744 IANA-RSVD 51745 IANA-RSVD 51746 IANA-RSVD 51747 IANA-RSVD 51748 IANA-RSVD 51749 IANA-RSVD 51750 IANA-RSVD 51751 IANA-RSVD 51752 IANA-RSVD 51753 IANA-RSVD 51754 IANA-RSVD 51755 IANA-RSVD 51756 IANA-RSVD 51757 IANA-RSVD 51758 IANA-RSVD 51759 IANA-RSVD 51760 IANA-RSVD 51761 IANA-RSVD 51762 IANA-RSVD 51763 IANA-RSVD 51764 IANA-RSVD 51765 IANA-RSVD 51766 IANA-RSVD 51767 IANA-RSVD 51768 IANA-RSVD 51769 IANA-RSVD 51770 IANA-RSVD 51771 IANA-RSVD 51772 IANA-RSVD 51773 IANA-RSVD 51774 IANA-RSVD 51775 IANA-RSVD 51776 IANA-RSVD 51777 IANA-RSVD 51778 IANA-RSVD 51779 IANA-RSVD 51780 IANA-RSVD 51781 IANA-RSVD 51782 IANA-RSVD 51783 IANA-RSVD 51784 IANA-RSVD 51785 IANA-RSVD 51786 IANA-RSVD 51787 IANA-RSVD 51788 IANA-RSVD 51789 IANA-RSVD 51790 IANA-RSVD 51791 IANA-RSVD 51792 IANA-RSVD 51793 IANA-RSVD 51794 IANA-RSVD 51795 IANA-RSVD 51796 IANA-RSVD 51797 IANA-RSVD 51798 IANA-RSVD 51799 IANA-RSVD 51800 IANA-RSVD 51801 IANA-RSVD 51802 IANA-RSVD 51803 IANA-RSVD 51804 IANA-RSVD 51805 IANA-RSVD 51806 IANA-RSVD 51807 IANA-RSVD 51808 IANA-RSVD 51809 IANA-RSVD 51810 IANA-RSVD 51811 IANA-RSVD 51812 IANA-RSVD 51813 IANA-RSVD 51814 IANA-RSVD 51815 IANA-RSVD 51816 IANA-RSVD 51817 IANA-RSVD 51818 IANA-RSVD 51819 IANA-RSVD 51820 IANA-RSVD 51821 IANA-RSVD 51822 IANA-RSVD 51823 IANA-RSVD 51824 IANA-RSVD 51825 IANA-RSVD 51826 IANA-RSVD 51827 IANA-RSVD 51828 IANA-RSVD 51829 IANA-RSVD 51830 IANA-RSVD 51831 IANA-RSVD 51832 IANA-RSVD 51833 IANA-RSVD 51834 IANA-RSVD 51835 IANA-RSVD 51836 IANA-RSVD 51837 IANA-RSVD 51838 IANA-RSVD 51839 IANA-RSVD 51840 IANA-RSVD 51841 IANA-RSVD 51842 IANA-RSVD 51843 IANA-RSVD 51844 IANA-RSVD 51845 IANA-RSVD 51846 IANA-RSVD 51847 IANA-RSVD 51848 IANA-RSVD 51849 IANA-RSVD 51850 IANA-RSVD 51851 IANA-RSVD 51852 IANA-RSVD 51853 IANA-RSVD 51854 IANA-RSVD 51855 IANA-RSVD 51856 IANA-RSVD 51857 IANA-RSVD 51858 IANA-RSVD 51859 IANA-RSVD 51860 IANA-RSVD 51861 IANA-RSVD 51862 IANA-RSVD 51863 IANA-RSVD 51864 IANA-RSVD 51865 IANA-RSVD 51866 IANA-RSVD 51867 IANA-RSVD 51868 IANA-RSVD 51869 IANA-RSVD 51870 IANA-RSVD 51871 IANA-RSVD 51872 IANA-RSVD 51873 IANA-RSVD 51874 IANA-RSVD 51875 IANA-RSVD 51876 IANA-RSVD 51877 IANA-RSVD 51878 IANA-RSVD 51879 IANA-RSVD 51880 IANA-RSVD 51881 IANA-RSVD 51882 IANA-RSVD 51883 IANA-RSVD 51884 IANA-RSVD 51885 IANA-RSVD 51886 IANA-RSVD 51887 IANA-RSVD 51888 IANA-RSVD 51889 IANA-RSVD 51890 IANA-RSVD 51891 IANA-RSVD 51892 IANA-RSVD 51893 IANA-RSVD 51894 IANA-RSVD 51895 IANA-RSVD 51896 IANA-RSVD 51897 IANA-RSVD 51898 IANA-RSVD 51899 IANA-RSVD 51900 IANA-RSVD 51901 IANA-RSVD 51902 IANA-RSVD 51903 IANA-RSVD 51904 IANA-RSVD 51905 IANA-RSVD 51906 IANA-RSVD 51907 IANA-RSVD 51908 IANA-RSVD 51909 IANA-RSVD 51910 IANA-RSVD 51911 IANA-RSVD 51912 IANA-RSVD 51913 IANA-RSVD 51914 IANA-RSVD 51915 IANA-RSVD 51916 IANA-RSVD 51917 IANA-RSVD 51918 IANA-RSVD 51919 IANA-RSVD 51920 IANA-RSVD 51921 IANA-RSVD 51922 IANA-RSVD 51923 IANA-RSVD 51924 IANA-RSVD 51925 IANA-RSVD 51926 IANA-RSVD 51927 IANA-RSVD 51928 IANA-RSVD 51929 IANA-RSVD 51930 IANA-RSVD 51931 IANA-RSVD 51932 IANA-RSVD 51933 IANA-RSVD 51934 IANA-RSVD 51935 IANA-RSVD 51936 IANA-RSVD 51937 IANA-RSVD 51938 IANA-RSVD 51939 IANA-RSVD 51940 IANA-RSVD 51941 IANA-RSVD 51942 IANA-RSVD 51943 IANA-RSVD 51944 IANA-RSVD 51945 IANA-RSVD 51946 IANA-RSVD 51947 IANA-RSVD 51948 IANA-RSVD 51949 IANA-RSVD 51950 IANA-RSVD 51951 IANA-RSVD 51952 IANA-RSVD 51953 IANA-RSVD 51954 IANA-RSVD 51955 IANA-RSVD 51956 IANA-RSVD 51957 IANA-RSVD 51958 IANA-RSVD 51959 IANA-RSVD 51960 IANA-RSVD 51961 IANA-RSVD 51962 IANA-RSVD 51963 IANA-RSVD 51964 IANA-RSVD 51965 IANA-RSVD 51966 IANA-RSVD 51967 IANA-RSVD 51968 IANA-RSVD 51969 IANA-RSVD 51970 IANA-RSVD 51971 IANA-RSVD 51972 IANA-RSVD 51973 IANA-RSVD 51974 IANA-RSVD 51975 IANA-RSVD 51976 IANA-RSVD 51977 IANA-RSVD 51978 IANA-RSVD 51979 IANA-RSVD 51980 IANA-RSVD 51981 IANA-RSVD 51982 IANA-RSVD 51983 IANA-RSVD 51984 IANA-RSVD 51985 IANA-RSVD 51986 IANA-RSVD 51987 IANA-RSVD 51988 IANA-RSVD 51989 IANA-RSVD 51990 IANA-RSVD 51991 IANA-RSVD 51992 IANA-RSVD 51993 IANA-RSVD 51994 IANA-RSVD 51995 IANA-RSVD 51996 IANA-RSVD 51997 IANA-RSVD 51998 IANA-RSVD 51999 IANA-RSVD 52000 IANA-RSVD 52001 IANA-RSVD 52002 IANA-RSVD 52003 IANA-RSVD 52004 IANA-RSVD 52005 IANA-RSVD 52006 IANA-RSVD 52007 IANA-RSVD 52008 IANA-RSVD 52009 IANA-RSVD 52010 IANA-RSVD 52011 IANA-RSVD 52012 IANA-RSVD 52013 IANA-RSVD 52014 IANA-RSVD 52015 IANA-RSVD 52016 IANA-RSVD 52017 IANA-RSVD 52018 IANA-RSVD 52019 IANA-RSVD 52020 IANA-RSVD 52021 IANA-RSVD 52022 IANA-RSVD 52023 IANA-RSVD 52024 IANA-RSVD 52025 IANA-RSVD 52026 IANA-RSVD 52027 IANA-RSVD 52028 IANA-RSVD 52029 IANA-RSVD 52030 IANA-RSVD 52031 IANA-RSVD 52032 IANA-RSVD 52033 IANA-RSVD 52034 IANA-RSVD 52035 IANA-RSVD 52036 IANA-RSVD 52037 IANA-RSVD 52038 IANA-RSVD 52039 IANA-RSVD 52040 IANA-RSVD 52041 IANA-RSVD 52042 IANA-RSVD 52043 IANA-RSVD 52044 IANA-RSVD 52045 IANA-RSVD 52046 IANA-RSVD 52047 IANA-RSVD 52048 IANA-RSVD 52049 IANA-RSVD 52050 IANA-RSVD 52051 IANA-RSVD 52052 IANA-RSVD 52053 IANA-RSVD 52054 IANA-RSVD 52055 IANA-RSVD 52056 IANA-RSVD 52057 IANA-RSVD 52058 IANA-RSVD 52059 IANA-RSVD 52060 IANA-RSVD 52061 IANA-RSVD 52062 IANA-RSVD 52063 IANA-RSVD 52064 IANA-RSVD 52065 IANA-RSVD 52066 IANA-RSVD 52067 IANA-RSVD 52068 IANA-RSVD 52069 IANA-RSVD 52070 IANA-RSVD 52071 IANA-RSVD 52072 IANA-RSVD 52073 IANA-RSVD 52074 IANA-RSVD 52075 IANA-RSVD 52076 IANA-RSVD 52077 IANA-RSVD 52078 IANA-RSVD 52079 IANA-RSVD 52080 IANA-RSVD 52081 IANA-RSVD 52082 IANA-RSVD 52083 IANA-RSVD 52084 IANA-RSVD 52085 IANA-RSVD 52086 IANA-RSVD 52087 IANA-RSVD 52088 IANA-RSVD 52089 IANA-RSVD 52090 IANA-RSVD 52091 IANA-RSVD 52092 IANA-RSVD 52093 IANA-RSVD 52094 IANA-RSVD 52095 IANA-RSVD 52096 IANA-RSVD 52097 IANA-RSVD 52098 IANA-RSVD 52099 IANA-RSVD 52100 IANA-RSVD 52101 IANA-RSVD 52102 IANA-RSVD 52103 IANA-RSVD 52104 IANA-RSVD 52105 IANA-RSVD 52106 IANA-RSVD 52107 IANA-RSVD 52108 IANA-RSVD 52109 IANA-RSVD 52110 IANA-RSVD 52111 IANA-RSVD 52112 IANA-RSVD 52113 IANA-RSVD 52114 IANA-RSVD 52115 IANA-RSVD 52116 IANA-RSVD 52117 IANA-RSVD 52118 IANA-RSVD 52119 IANA-RSVD 52120 IANA-RSVD 52121 IANA-RSVD 52122 IANA-RSVD 52123 IANA-RSVD 52124 IANA-RSVD 52125 IANA-RSVD 52126 IANA-RSVD 52127 IANA-RSVD 52128 IANA-RSVD 52129 IANA-RSVD 52130 IANA-RSVD 52131 IANA-RSVD 52132 IANA-RSVD 52133 IANA-RSVD 52134 IANA-RSVD 52135 IANA-RSVD 52136 IANA-RSVD 52137 IANA-RSVD 52138 IANA-RSVD 52139 IANA-RSVD 52140 IANA-RSVD 52141 IANA-RSVD 52142 IANA-RSVD 52143 IANA-RSVD 52144 IANA-RSVD 52145 IANA-RSVD 52146 IANA-RSVD 52147 IANA-RSVD 52148 IANA-RSVD 52149 IANA-RSVD 52150 IANA-RSVD 52151 IANA-RSVD 52152 IANA-RSVD 52153 IANA-RSVD 52154 IANA-RSVD 52155 IANA-RSVD 52156 IANA-RSVD 52157 IANA-RSVD 52158 IANA-RSVD 52159 IANA-RSVD 52160 IANA-RSVD 52161 IANA-RSVD 52162 IANA-RSVD 52163 IANA-RSVD 52164 IANA-RSVD 52165 IANA-RSVD 52166 IANA-RSVD 52167 IANA-RSVD 52168 IANA-RSVD 52169 IANA-RSVD 52170 IANA-RSVD 52171 IANA-RSVD 52172 IANA-RSVD 52173 IANA-RSVD 52174 IANA-RSVD 52175 IANA-RSVD 52176 IANA-RSVD 52177 IANA-RSVD 52178 IANA-RSVD 52179 IANA-RSVD 52180 IANA-RSVD 52181 IANA-RSVD 52182 IANA-RSVD 52183 IANA-RSVD 52184 IANA-RSVD 52185 IANA-RSVD 52186 IANA-RSVD 52187 IANA-RSVD 52188 IANA-RSVD 52189 IANA-RSVD 52190 IANA-RSVD 52191 IANA-RSVD 52192 IANA-RSVD 52193 IANA-RSVD 52194 IANA-RSVD 52195 IANA-RSVD 52196 IANA-RSVD 52197 IANA-RSVD 52198 IANA-RSVD 52199 IANA-RSVD 52200 IANA-RSVD 52201 IANA-RSVD 52202 IANA-RSVD 52203 IANA-RSVD 52204 IANA-RSVD 52205 IANA-RSVD 52206 IANA-RSVD 52207 IANA-RSVD 52208 IANA-RSVD 52209 IANA-RSVD 52210 IANA-RSVD 52211 IANA-RSVD 52212 IANA-RSVD 52213 IANA-RSVD 52214 IANA-RSVD 52215 IANA-RSVD 52216 IANA-RSVD 52217 IANA-RSVD 52218 IANA-RSVD 52219 IANA-RSVD 52220 IANA-RSVD 52221 IANA-RSVD 52222 IANA-RSVD 52223 IANA-RSVD 52224 IANA-RSVD 52225 IANA-RSVD 52226 IANA-RSVD 52227 IANA-RSVD 52228 IANA-RSVD 52229 IANA-RSVD 52230 IANA-RSVD 52231 IANA-RSVD 52232 IANA-RSVD 52233 IANA-RSVD 52234 IANA-RSVD 52235 IANA-RSVD 52236 IANA-RSVD 52237 IANA-RSVD 52238 IANA-RSVD 52239 IANA-RSVD 52240 IANA-RSVD 52241 IANA-RSVD 52242 IANA-RSVD 52243 IANA-RSVD 52244 IANA-RSVD 52245 IANA-RSVD 52246 IANA-RSVD 52247 IANA-RSVD 52248 IANA-RSVD 52249 IANA-RSVD 52250 IANA-RSVD 52251 IANA-RSVD 52252 IANA-RSVD 52253 IANA-RSVD 52254 IANA-RSVD 52255 IANA-RSVD 52256 IANA-RSVD 52257 IANA-RSVD 52258 IANA-RSVD 52259 IANA-RSVD 52260 IANA-RSVD 52261 IANA-RSVD 52262 IANA-RSVD 52263 IANA-RSVD 52264 IANA-RSVD 52265 IANA-RSVD 52266 IANA-RSVD 52267 IANA-RSVD 52268 IANA-RSVD 52269 IANA-RSVD 52270 IANA-RSVD 52271 IANA-RSVD 52272 IANA-RSVD 52273 IANA-RSVD 52274 IANA-RSVD 52275 IANA-RSVD 52276 IANA-RSVD 52277 IANA-RSVD 52278 IANA-RSVD 52279 IANA-RSVD 52280 IANA-RSVD 52281 IANA-RSVD 52282 IANA-RSVD 52283 IANA-RSVD 52284 IANA-RSVD 52285 IANA-RSVD 52286 IANA-RSVD 52287 IANA-RSVD 52288 IANA-RSVD 52289 IANA-RSVD 52290 IANA-RSVD 52291 IANA-RSVD 52292 IANA-RSVD 52293 IANA-RSVD 52294 IANA-RSVD 52295 IANA-RSVD 52296 IANA-RSVD 52297 IANA-RSVD 52298 IANA-RSVD 52299 IANA-RSVD 52300 IANA-RSVD 52301 IANA-RSVD 52302 IANA-RSVD 52303 IANA-RSVD 52304 IANA-RSVD 52305 IANA-RSVD 52306 IANA-RSVD 52307 IANA-RSVD 52308 IANA-RSVD 52309 IANA-RSVD 52310 IANA-RSVD 52311 IANA-RSVD 52312 IANA-RSVD 52313 IANA-RSVD 52314 IANA-RSVD 52315 IANA-RSVD 52316 IANA-RSVD 52317 IANA-RSVD 52318 IANA-RSVD 52319 IANA-RSVD 52320 IANA-RSVD 52321 IANA-RSVD 52322 IANA-RSVD 52323 IANA-RSVD 52324 IANA-RSVD 52325 IANA-RSVD 52326 IANA-RSVD 52327 IANA-RSVD 52328 IANA-RSVD 52329 IANA-RSVD 52330 IANA-RSVD 52331 IANA-RSVD 52332 IANA-RSVD 52333 IANA-RSVD 52334 IANA-RSVD 52335 IANA-RSVD 52336 IANA-RSVD 52337 IANA-RSVD 52338 IANA-RSVD 52339 IANA-RSVD 52340 IANA-RSVD 52341 IANA-RSVD 52342 IANA-RSVD 52343 IANA-RSVD 52344 IANA-RSVD 52345 IANA-RSVD 52346 IANA-RSVD 52347 IANA-RSVD 52348 IANA-RSVD 52349 IANA-RSVD 52350 IANA-RSVD 52351 IANA-RSVD 52352 IANA-RSVD 52353 IANA-RSVD 52354 IANA-RSVD 52355 IANA-RSVD 52356 IANA-RSVD 52357 IANA-RSVD 52358 IANA-RSVD 52359 IANA-RSVD 52360 IANA-RSVD 52361 IANA-RSVD 52362 IANA-RSVD 52363 IANA-RSVD 52364 IANA-RSVD 52365 IANA-RSVD 52366 IANA-RSVD 52367 IANA-RSVD 52368 IANA-RSVD 52369 IANA-RSVD 52370 IANA-RSVD 52371 IANA-RSVD 52372 IANA-RSVD 52373 IANA-RSVD 52374 IANA-RSVD 52375 IANA-RSVD 52376 IANA-RSVD 52377 IANA-RSVD 52378 IANA-RSVD 52379 IANA-RSVD 52380 IANA-RSVD 52381 IANA-RSVD 52382 IANA-RSVD 52383 IANA-RSVD 52384 IANA-RSVD 52385 IANA-RSVD 52386 IANA-RSVD 52387 IANA-RSVD 52388 IANA-RSVD 52389 IANA-RSVD 52390 IANA-RSVD 52391 IANA-RSVD 52392 IANA-RSVD 52393 IANA-RSVD 52394 IANA-RSVD 52395 IANA-RSVD 52396 IANA-RSVD 52397 IANA-RSVD 52398 IANA-RSVD 52399 IANA-RSVD 52400 IANA-RSVD 52401 IANA-RSVD 52402 IANA-RSVD 52403 IANA-RSVD 52404 IANA-RSVD 52405 IANA-RSVD 52406 IANA-RSVD 52407 IANA-RSVD 52408 IANA-RSVD 52409 IANA-RSVD 52410 IANA-RSVD 52411 IANA-RSVD 52412 IANA-RSVD 52413 IANA-RSVD 52414 IANA-RSVD 52415 IANA-RSVD 52416 IANA-RSVD 52417 IANA-RSVD 52418 IANA-RSVD 52419 IANA-RSVD 52420 IANA-RSVD 52421 IANA-RSVD 52422 IANA-RSVD 52423 IANA-RSVD 52424 IANA-RSVD 52425 IANA-RSVD 52426 IANA-RSVD 52427 IANA-RSVD 52428 IANA-RSVD 52429 IANA-RSVD 52430 IANA-RSVD 52431 IANA-RSVD 52432 IANA-RSVD 52433 IANA-RSVD 52434 IANA-RSVD 52435 IANA-RSVD 52436 IANA-RSVD 52437 IANA-RSVD 52438 IANA-RSVD 52439 IANA-RSVD 52440 IANA-RSVD 52441 IANA-RSVD 52442 IANA-RSVD 52443 IANA-RSVD 52444 IANA-RSVD 52445 IANA-RSVD 52446 IANA-RSVD 52447 IANA-RSVD 52448 IANA-RSVD 52449 IANA-RSVD 52450 IANA-RSVD 52451 IANA-RSVD 52452 IANA-RSVD 52453 IANA-RSVD 52454 IANA-RSVD 52455 IANA-RSVD 52456 IANA-RSVD 52457 IANA-RSVD 52458 IANA-RSVD 52459 IANA-RSVD 52460 IANA-RSVD 52461 IANA-RSVD 52462 IANA-RSVD 52463 IANA-RSVD 52464 IANA-RSVD 52465 IANA-RSVD 52466 IANA-RSVD 52467 IANA-RSVD 52468 IANA-RSVD 52469 IANA-RSVD 52470 IANA-RSVD 52471 IANA-RSVD 52472 IANA-RSVD 52473 IANA-RSVD 52474 IANA-RSVD 52475 IANA-RSVD 52476 IANA-RSVD 52477 IANA-RSVD 52478 IANA-RSVD 52479 IANA-RSVD 52480 IANA-RSVD 52481 IANA-RSVD 52482 IANA-RSVD 52483 IANA-RSVD 52484 IANA-RSVD 52485 IANA-RSVD 52486 IANA-RSVD 52487 IANA-RSVD 52488 IANA-RSVD 52489 IANA-RSVD 52490 IANA-RSVD 52491 IANA-RSVD 52492 IANA-RSVD 52493 IANA-RSVD 52494 IANA-RSVD 52495 IANA-RSVD 52496 IANA-RSVD 52497 IANA-RSVD 52498 IANA-RSVD 52499 IANA-RSVD 52500 IANA-RSVD 52501 IANA-RSVD 52502 IANA-RSVD 52503 IANA-RSVD 52504 IANA-RSVD 52505 IANA-RSVD 52506 IANA-RSVD 52507 IANA-RSVD 52508 IANA-RSVD 52509 IANA-RSVD 52510 IANA-RSVD 52511 IANA-RSVD 52512 IANA-RSVD 52513 IANA-RSVD 52514 IANA-RSVD 52515 IANA-RSVD 52516 IANA-RSVD 52517 IANA-RSVD 52518 IANA-RSVD 52519 IANA-RSVD 52520 IANA-RSVD 52521 IANA-RSVD 52522 IANA-RSVD 52523 IANA-RSVD 52524 IANA-RSVD 52525 IANA-RSVD 52526 IANA-RSVD 52527 IANA-RSVD 52528 IANA-RSVD 52529 IANA-RSVD 52530 IANA-RSVD 52531 IANA-RSVD 52532 IANA-RSVD 52533 IANA-RSVD 52534 IANA-RSVD 52535 IANA-RSVD 52536 IANA-RSVD 52537 IANA-RSVD 52538 IANA-RSVD 52539 IANA-RSVD 52540 IANA-RSVD 52541 IANA-RSVD 52542 IANA-RSVD 52543 IANA-RSVD 52544 IANA-RSVD 52545 IANA-RSVD 52546 IANA-RSVD 52547 IANA-RSVD 52548 IANA-RSVD 52549 IANA-RSVD 52550 IANA-RSVD 52551 IANA-RSVD 52552 IANA-RSVD 52553 IANA-RSVD 52554 IANA-RSVD 52555 IANA-RSVD 52556 IANA-RSVD 52557 IANA-RSVD 52558 IANA-RSVD 52559 IANA-RSVD 52560 IANA-RSVD 52561 IANA-RSVD 52562 IANA-RSVD 52563 IANA-RSVD 52564 IANA-RSVD 52565 IANA-RSVD 52566 IANA-RSVD 52567 IANA-RSVD 52568 IANA-RSVD 52569 IANA-RSVD 52570 IANA-RSVD 52571 IANA-RSVD 52572 IANA-RSVD 52573 IANA-RSVD 52574 IANA-RSVD 52575 IANA-RSVD 52576 IANA-RSVD 52577 IANA-RSVD 52578 IANA-RSVD 52579 IANA-RSVD 52580 IANA-RSVD 52581 IANA-RSVD 52582 IANA-RSVD 52583 IANA-RSVD 52584 IANA-RSVD 52585 IANA-RSVD 52586 IANA-RSVD 52587 IANA-RSVD 52588 IANA-RSVD 52589 IANA-RSVD 52590 IANA-RSVD 52591 IANA-RSVD 52592 IANA-RSVD 52593 IANA-RSVD 52594 IANA-RSVD 52595 IANA-RSVD 52596 IANA-RSVD 52597 IANA-RSVD 52598 IANA-RSVD 52599 IANA-RSVD 52600 IANA-RSVD 52601 IANA-RSVD 52602 IANA-RSVD 52603 IANA-RSVD 52604 IANA-RSVD 52605 IANA-RSVD 52606 IANA-RSVD 52607 IANA-RSVD 52608 IANA-RSVD 52609 IANA-RSVD 52610 IANA-RSVD 52611 IANA-RSVD 52612 IANA-RSVD 52613 IANA-RSVD 52614 IANA-RSVD 52615 IANA-RSVD 52616 IANA-RSVD 52617 IANA-RSVD 52618 IANA-RSVD 52619 IANA-RSVD 52620 IANA-RSVD 52621 IANA-RSVD 52622 IANA-RSVD 52623 IANA-RSVD 52624 IANA-RSVD 52625 IANA-RSVD 52626 IANA-RSVD 52627 IANA-RSVD 52628 IANA-RSVD 52629 IANA-RSVD 52630 IANA-RSVD 52631 IANA-RSVD 52632 IANA-RSVD 52633 IANA-RSVD 52634 IANA-RSVD 52635 IANA-RSVD 52636 IANA-RSVD 52637 IANA-RSVD 52638 IANA-RSVD 52639 IANA-RSVD 52640 IANA-RSVD 52641 IANA-RSVD 52642 IANA-RSVD 52643 IANA-RSVD 52644 IANA-RSVD 52645 IANA-RSVD 52646 IANA-RSVD 52647 IANA-RSVD 52648 IANA-RSVD 52649 IANA-RSVD 52650 IANA-RSVD 52651 IANA-RSVD 52652 IANA-RSVD 52653 IANA-RSVD 52654 IANA-RSVD 52655 IANA-RSVD 52656 IANA-RSVD 52657 IANA-RSVD 52658 IANA-RSVD 52659 IANA-RSVD 52660 IANA-RSVD 52661 IANA-RSVD 52662 IANA-RSVD 52663 IANA-RSVD 52664 IANA-RSVD 52665 IANA-RSVD 52666 IANA-RSVD 52667 IANA-RSVD 52668 IANA-RSVD 52669 IANA-RSVD 52670 IANA-RSVD 52671 IANA-RSVD 52672 IANA-RSVD 52673 IANA-RSVD 52674 IANA-RSVD 52675 IANA-RSVD 52676 IANA-RSVD 52677 IANA-RSVD 52678 IANA-RSVD 52679 IANA-RSVD 52680 IANA-RSVD 52681 IANA-RSVD 52682 IANA-RSVD 52683 IANA-RSVD 52684 IANA-RSVD 52685 IANA-RSVD 52686 IANA-RSVD 52687 IANA-RSVD 52688 IANA-RSVD 52689 IANA-RSVD 52690 IANA-RSVD 52691 IANA-RSVD 52692 IANA-RSVD 52693 IANA-RSVD 52694 IANA-RSVD 52695 IANA-RSVD 52696 IANA-RSVD 52697 IANA-RSVD 52698 IANA-RSVD 52699 IANA-RSVD 52700 IANA-RSVD 52701 IANA-RSVD 52702 IANA-RSVD 52703 IANA-RSVD 52704 IANA-RSVD 52705 IANA-RSVD 52706 IANA-RSVD 52707 IANA-RSVD 52708 IANA-RSVD 52709 IANA-RSVD 52710 IANA-RSVD 52711 IANA-RSVD 52712 IANA-RSVD 52713 IANA-RSVD 52714 IANA-RSVD 52715 IANA-RSVD 52716 IANA-RSVD 52717 IANA-RSVD 52718 IANA-RSVD 52719 IANA-RSVD 52720 IANA-RSVD 52721 IANA-RSVD 52722 IANA-RSVD 52723 IANA-RSVD 52724 IANA-RSVD 52725 IANA-RSVD 52726 IANA-RSVD 52727 IANA-RSVD 52728 IANA-RSVD 52729 IANA-RSVD 52730 IANA-RSVD 52731 IANA-RSVD 52732 IANA-RSVD 52733 IANA-RSVD 52734 IANA-RSVD 52735 IANA-RSVD 52736 IANA-RSVD 52737 IANA-RSVD 52738 IANA-RSVD 52739 IANA-RSVD 52740 IANA-RSVD 52741 IANA-RSVD 52742 IANA-RSVD 52743 IANA-RSVD 52744 IANA-RSVD 52745 IANA-RSVD 52746 IANA-RSVD 52747 IANA-RSVD 52748 IANA-RSVD 52749 IANA-RSVD 52750 IANA-RSVD 52751 IANA-RSVD 52752 IANA-RSVD 52753 IANA-RSVD 52754 IANA-RSVD 52755 IANA-RSVD 52756 IANA-RSVD 52757 IANA-RSVD 52758 IANA-RSVD 52759 IANA-RSVD 52760 IANA-RSVD 52761 IANA-RSVD 52762 IANA-RSVD 52763 IANA-RSVD 52764 IANA-RSVD 52765 IANA-RSVD 52766 IANA-RSVD 52767 IANA-RSVD 52768 IANA-RSVD 52769 IANA-RSVD 52770 IANA-RSVD 52771 IANA-RSVD 52772 IANA-RSVD 52773 IANA-RSVD 52774 IANA-RSVD 52775 IANA-RSVD 52776 IANA-RSVD 52777 IANA-RSVD 52778 IANA-RSVD 52779 IANA-RSVD 52780 IANA-RSVD 52781 IANA-RSVD 52782 IANA-RSVD 52783 IANA-RSVD 52784 IANA-RSVD 52785 IANA-RSVD 52786 IANA-RSVD 52787 IANA-RSVD 52788 IANA-RSVD 52789 IANA-RSVD 52790 IANA-RSVD 52791 IANA-RSVD 52792 IANA-RSVD 52793 IANA-RSVD 52794 IANA-RSVD 52795 IANA-RSVD 52796 IANA-RSVD 52797 IANA-RSVD 52798 IANA-RSVD 52799 IANA-RSVD 52800 IANA-RSVD 52801 IANA-RSVD 52802 IANA-RSVD 52803 IANA-RSVD 52804 IANA-RSVD 52805 IANA-RSVD 52806 IANA-RSVD 52807 IANA-RSVD 52808 IANA-RSVD 52809 IANA-RSVD 52810 IANA-RSVD 52811 IANA-RSVD 52812 IANA-RSVD 52813 IANA-RSVD 52814 IANA-RSVD 52815 IANA-RSVD 52816 IANA-RSVD 52817 IANA-RSVD 52818 IANA-RSVD 52819 IANA-RSVD 52820 IANA-RSVD 52821 IANA-RSVD 52822 IANA-RSVD 52823 IANA-RSVD 52824 IANA-RSVD 52825 IANA-RSVD 52826 IANA-RSVD 52827 IANA-RSVD 52828 IANA-RSVD 52829 IANA-RSVD 52830 IANA-RSVD 52831 IANA-RSVD 52832 IANA-RSVD 52833 IANA-RSVD 52834 IANA-RSVD 52835 IANA-RSVD 52836 IANA-RSVD 52837 IANA-RSVD 52838 IANA-RSVD 52839 IANA-RSVD 52840 IANA-RSVD 52841 IANA-RSVD 52842 IANA-RSVD 52843 IANA-RSVD 52844 IANA-RSVD 52845 IANA-RSVD 52846 IANA-RSVD 52847 IANA-RSVD 52848 IANA-RSVD 52849 IANA-RSVD 52850 IANA-RSVD 52851 IANA-RSVD 52852 IANA-RSVD 52853 IANA-RSVD 52854 IANA-RSVD 52855 IANA-RSVD 52856 IANA-RSVD 52857 IANA-RSVD 52858 IANA-RSVD 52859 IANA-RSVD 52860 IANA-RSVD 52861 IANA-RSVD 52862 IANA-RSVD 52863 IANA-RSVD 52864 IANA-RSVD 52865 IANA-RSVD 52866 IANA-RSVD 52867 IANA-RSVD 52868 IANA-RSVD 52869 IANA-RSVD 52870 IANA-RSVD 52871 IANA-RSVD 52872 IANA-RSVD 52873 IANA-RSVD 52874 IANA-RSVD 52875 IANA-RSVD 52876 IANA-RSVD 52877 IANA-RSVD 52878 IANA-RSVD 52879 IANA-RSVD 52880 IANA-RSVD 52881 IANA-RSVD 52882 IANA-RSVD 52883 IANA-RSVD 52884 IANA-RSVD 52885 IANA-RSVD 52886 IANA-RSVD 52887 IANA-RSVD 52888 IANA-RSVD 52889 IANA-RSVD 52890 IANA-RSVD 52891 IANA-RSVD 52892 IANA-RSVD 52893 IANA-RSVD 52894 IANA-RSVD 52895 IANA-RSVD 52896 IANA-RSVD 52897 IANA-RSVD 52898 IANA-RSVD 52899 IANA-RSVD 52900 IANA-RSVD 52901 IANA-RSVD 52902 IANA-RSVD 52903 IANA-RSVD 52904 IANA-RSVD 52905 IANA-RSVD 52906 IANA-RSVD 52907 IANA-RSVD 52908 IANA-RSVD 52909 IANA-RSVD 52910 IANA-RSVD 52911 IANA-RSVD 52912 IANA-RSVD 52913 IANA-RSVD 52914 IANA-RSVD 52915 IANA-RSVD 52916 IANA-RSVD 52917 IANA-RSVD 52918 IANA-RSVD 52919 IANA-RSVD 52920 IANA-RSVD 52921 IANA-RSVD 52922 IANA-RSVD 52923 IANA-RSVD 52924 IANA-RSVD 52925 IANA-RSVD 52926 IANA-RSVD 52927 IANA-RSVD 52928 IANA-RSVD 52929 IANA-RSVD 52930 IANA-RSVD 52931 IANA-RSVD 52932 IANA-RSVD 52933 IANA-RSVD 52934 IANA-RSVD 52935 IANA-RSVD 52936 IANA-RSVD 52937 IANA-RSVD 52938 IANA-RSVD 52939 IANA-RSVD 52940 IANA-RSVD 52941 IANA-RSVD 52942 IANA-RSVD 52943 IANA-RSVD 52944 IANA-RSVD 52945 IANA-RSVD 52946 IANA-RSVD 52947 IANA-RSVD 52948 IANA-RSVD 52949 IANA-RSVD 52950 IANA-RSVD 52951 IANA-RSVD 52952 IANA-RSVD 52953 IANA-RSVD 52954 IANA-RSVD 52955 IANA-RSVD 52956 IANA-RSVD 52957 IANA-RSVD 52958 IANA-RSVD 52959 IANA-RSVD 52960 IANA-RSVD 52961 IANA-RSVD 52962 IANA-RSVD 52963 IANA-RSVD 52964 IANA-RSVD 52965 IANA-RSVD 52966 IANA-RSVD 52967 IANA-RSVD 52968 IANA-RSVD 52969 IANA-RSVD 52970 IANA-RSVD 52971 IANA-RSVD 52972 IANA-RSVD 52973 IANA-RSVD 52974 IANA-RSVD 52975 IANA-RSVD 52976 IANA-RSVD 52977 IANA-RSVD 52978 IANA-RSVD 52979 IANA-RSVD 52980 IANA-RSVD 52981 IANA-RSVD 52982 IANA-RSVD 52983 IANA-RSVD 52984 IANA-RSVD 52985 IANA-RSVD 52986 IANA-RSVD 52987 IANA-RSVD 52988 IANA-RSVD 52989 IANA-RSVD 52990 IANA-RSVD 52991 IANA-RSVD 52992 IANA-RSVD 52993 IANA-RSVD 52994 IANA-RSVD 52995 IANA-RSVD 52996 IANA-RSVD 52997 IANA-RSVD 52998 IANA-RSVD 52999 IANA-RSVD 53000 IANA-RSVD 53001 IANA-RSVD 53002 IANA-RSVD 53003 IANA-RSVD 53004 IANA-RSVD 53005 IANA-RSVD 53006 IANA-RSVD 53007 IANA-RSVD 53008 IANA-RSVD 53009 IANA-RSVD 53010 IANA-RSVD 53011 IANA-RSVD 53012 IANA-RSVD 53013 IANA-RSVD 53014 IANA-RSVD 53015 IANA-RSVD 53016 IANA-RSVD 53017 IANA-RSVD 53018 IANA-RSVD 53019 IANA-RSVD 53020 IANA-RSVD 53021 IANA-RSVD 53022 IANA-RSVD 53023 IANA-RSVD 53024 IANA-RSVD 53025 IANA-RSVD 53026 IANA-RSVD 53027 IANA-RSVD 53028 IANA-RSVD 53029 IANA-RSVD 53030 IANA-RSVD 53031 IANA-RSVD 53032 IANA-RSVD 53033 IANA-RSVD 53034 IANA-RSVD 53035 IANA-RSVD 53036 IANA-RSVD 53037 IANA-RSVD 53038 IANA-RSVD 53039 IANA-RSVD 53040 IANA-RSVD 53041 IANA-RSVD 53042 IANA-RSVD 53043 IANA-RSVD 53044 IANA-RSVD 53045 IANA-RSVD 53046 IANA-RSVD 53047 IANA-RSVD 53048 IANA-RSVD 53049 IANA-RSVD 53050 IANA-RSVD 53051 IANA-RSVD 53052 IANA-RSVD 53053 IANA-RSVD 53054 IANA-RSVD 53055 IANA-RSVD 53056 IANA-RSVD 53057 IANA-RSVD 53058 IANA-RSVD 53059 IANA-RSVD 53060 IANA-RSVD 53061 IANA-RSVD 53062 IANA-RSVD 53063 IANA-RSVD 53064 IANA-RSVD 53065 IANA-RSVD 53066 IANA-RSVD 53067 IANA-RSVD 53068 IANA-RSVD 53069 IANA-RSVD 53070 IANA-RSVD 53071 IANA-RSVD 53072 IANA-RSVD 53073 IANA-RSVD 53074 IANA-RSVD 53075 IANA-RSVD 53076 IANA-RSVD 53077 IANA-RSVD 53078 IANA-RSVD 53079 IANA-RSVD 53080 IANA-RSVD 53081 IANA-RSVD 53082 IANA-RSVD 53083 IANA-RSVD 53084 IANA-RSVD 53085 IANA-RSVD 53086 IANA-RSVD 53087 IANA-RSVD 53088 IANA-RSVD 53089 IANA-RSVD 53090 IANA-RSVD 53091 IANA-RSVD 53092 IANA-RSVD 53093 IANA-RSVD 53094 IANA-RSVD 53095 IANA-RSVD 53096 IANA-RSVD 53097 IANA-RSVD 53098 IANA-RSVD 53099 IANA-RSVD 53100 IANA-RSVD 53101 IANA-RSVD 53102 IANA-RSVD 53103 IANA-RSVD 53104 IANA-RSVD 53105 IANA-RSVD 53106 IANA-RSVD 53107 IANA-RSVD 53108 IANA-RSVD 53109 IANA-RSVD 53110 IANA-RSVD 53111 IANA-RSVD 53112 IANA-RSVD 53113 IANA-RSVD 53114 IANA-RSVD 53115 IANA-RSVD 53116 IANA-RSVD 53117 IANA-RSVD 53118 IANA-RSVD 53119 IANA-RSVD 53120 IANA-RSVD 53121 IANA-RSVD 53122 IANA-RSVD 53123 IANA-RSVD 53124 IANA-RSVD 53125 IANA-RSVD 53126 IANA-RSVD 53127 IANA-RSVD 53128 IANA-RSVD 53129 IANA-RSVD 53130 IANA-RSVD 53131 IANA-RSVD 53132 IANA-RSVD 53133 IANA-RSVD 53134 IANA-RSVD 53135 IANA-RSVD 53136 IANA-RSVD 53137 IANA-RSVD 53138 IANA-RSVD 53139 IANA-RSVD 53140 IANA-RSVD 53141 IANA-RSVD 53142 IANA-RSVD 53143 IANA-RSVD 53144 IANA-RSVD 53145 IANA-RSVD 53146 IANA-RSVD 53147 IANA-RSVD 53148 IANA-RSVD 53149 IANA-RSVD 53150 IANA-RSVD 53151 IANA-RSVD 53152 IANA-RSVD 53153 IANA-RSVD 53154 IANA-RSVD 53155 IANA-RSVD 53156 IANA-RSVD 53157 IANA-RSVD 53158 IANA-RSVD 53159 IANA-RSVD 53160 IANA-RSVD 53161 IANA-RSVD 53162 IANA-RSVD 53163 IANA-RSVD 53164 IANA-RSVD 53165 IANA-RSVD 53166 IANA-RSVD 53167 IANA-RSVD 53168 IANA-RSVD 53169 IANA-RSVD 53170 IANA-RSVD 53171 IANA-RSVD 53172 IANA-RSVD 53173 IANA-RSVD 53174 IANA-RSVD 53175 IANA-RSVD 53176 IANA-RSVD 53177 IANA-RSVD 53178 IANA-RSVD 53179 IANA-RSVD 53180 IANA-RSVD 53181 IANA-RSVD 53182 IANA-RSVD 53183 IANA-RSVD 53184 IANA-RSVD 53185 IANA-RSVD 53186 IANA-RSVD 53187 IANA-RSVD 53188 IANA-RSVD 53189 IANA-RSVD 53190 IANA-RSVD 53191 IANA-RSVD 53192 IANA-RSVD 53193 IANA-RSVD 53194 IANA-RSVD 53195 IANA-RSVD 53196 IANA-RSVD 53197 IANA-RSVD 53198 IANA-RSVD 53199 IANA-RSVD 53200 IANA-RSVD 53201 IANA-RSVD 53202 IANA-RSVD 53203 IANA-RSVD 53204 IANA-RSVD 53205 IANA-RSVD 53206 IANA-RSVD 53207 IANA-RSVD 53208 IANA-RSVD 53209 IANA-RSVD 53210 IANA-RSVD 53211 IANA-RSVD 53212 IANA-RSVD 53213 IANA-RSVD 53214 IANA-RSVD 53215 IANA-RSVD 53216 IANA-RSVD 53217 IANA-RSVD 53218 IANA-RSVD 53219 IANA-RSVD 53220 IANA-RSVD 53221 IANA-RSVD 53222 IANA-RSVD 53223 IANA-RSVD 53224 IANA-RSVD 53225 IANA-RSVD 53226 IANA-RSVD 53227 IANA-RSVD 53228 IANA-RSVD 53229 IANA-RSVD 53230 IANA-RSVD 53231 IANA-RSVD 53232 IANA-RSVD 53233 IANA-RSVD 53234 IANA-RSVD 53235 IANA-RSVD 53236 IANA-RSVD 53237 IANA-RSVD 53238 IANA-RSVD 53239 IANA-RSVD 53240 IANA-RSVD 53241 IANA-RSVD 53242 IANA-RSVD 53243 IANA-RSVD 53244 IANA-RSVD 53245 IANA-RSVD 53246 IANA-RSVD 53247 IANA-RSVD 53248 IANA-RSVD 53249 IANA-RSVD 53250 IANA-RSVD 53251 IANA-RSVD 53252 IANA-RSVD 53253 IANA-RSVD 53254 IANA-RSVD 53255 IANA-RSVD 53256 IANA-RSVD 53257 IANA-RSVD 53258 IANA-RSVD 53259 IANA-RSVD 53260 IANA-RSVD 53261 IANA-RSVD 53262 IANA-RSVD 53263 IANA-RSVD 53264 IANA-RSVD 53265 IANA-RSVD 53266 IANA-RSVD 53267 IANA-RSVD 53268 IANA-RSVD 53269 IANA-RSVD 53270 IANA-RSVD 53271 IANA-RSVD 53272 IANA-RSVD 53273 IANA-RSVD 53274 IANA-RSVD 53275 IANA-RSVD 53276 IANA-RSVD 53277 IANA-RSVD 53278 IANA-RSVD 53279 IANA-RSVD 53280 IANA-RSVD 53281 IANA-RSVD 53282 IANA-RSVD 53283 IANA-RSVD 53284 IANA-RSVD 53285 IANA-RSVD 53286 IANA-RSVD 53287 IANA-RSVD 53288 IANA-RSVD 53289 IANA-RSVD 53290 IANA-RSVD 53291 IANA-RSVD 53292 IANA-RSVD 53293 IANA-RSVD 53294 IANA-RSVD 53295 IANA-RSVD 53296 IANA-RSVD 53297 IANA-RSVD 53298 IANA-RSVD 53299 IANA-RSVD 53300 IANA-RSVD 53301 IANA-RSVD 53302 IANA-RSVD 53303 IANA-RSVD 53304 IANA-RSVD 53305 IANA-RSVD 53306 IANA-RSVD 53307 IANA-RSVD 53308 IANA-RSVD 53309 IANA-RSVD 53310 IANA-RSVD 53311 IANA-RSVD 53312 IANA-RSVD 53313 IANA-RSVD 53314 IANA-RSVD 53315 IANA-RSVD 53316 IANA-RSVD 53317 IANA-RSVD 53318 IANA-RSVD 53319 IANA-RSVD 53320 IANA-RSVD 53321 IANA-RSVD 53322 IANA-RSVD 53323 IANA-RSVD 53324 IANA-RSVD 53325 IANA-RSVD 53326 IANA-RSVD 53327 IANA-RSVD 53328 IANA-RSVD 53329 IANA-RSVD 53330 IANA-RSVD 53331 IANA-RSVD 53332 IANA-RSVD 53333 IANA-RSVD 53334 IANA-RSVD 53335 IANA-RSVD 53336 IANA-RSVD 53337 IANA-RSVD 53338 IANA-RSVD 53339 IANA-RSVD 53340 IANA-RSVD 53341 IANA-RSVD 53342 IANA-RSVD 53343 IANA-RSVD 53344 IANA-RSVD 53345 IANA-RSVD 53346 IANA-RSVD 53347 IANA-RSVD 53348 IANA-RSVD 53349 IANA-RSVD 53350 IANA-RSVD 53351 IANA-RSVD 53352 IANA-RSVD 53353 IANA-RSVD 53354 IANA-RSVD 53355 IANA-RSVD 53356 IANA-RSVD 53357 IANA-RSVD 53358 IANA-RSVD 53359 IANA-RSVD 53360 IANA-RSVD 53361 IANA-RSVD 53362 IANA-RSVD 53363 IANA-RSVD 53364 IANA-RSVD 53365 IANA-RSVD 53366 IANA-RSVD 53367 IANA-RSVD 53368 IANA-RSVD 53369 IANA-RSVD 53370 IANA-RSVD 53371 IANA-RSVD 53372 IANA-RSVD 53373 IANA-RSVD 53374 IANA-RSVD 53375 IANA-RSVD 53376 IANA-RSVD 53377 IANA-RSVD 53378 IANA-RSVD 53379 IANA-RSVD 53380 IANA-RSVD 53381 IANA-RSVD 53382 IANA-RSVD 53383 IANA-RSVD 53384 IANA-RSVD 53385 IANA-RSVD 53386 IANA-RSVD 53387 IANA-RSVD 53388 IANA-RSVD 53389 IANA-RSVD 53390 IANA-RSVD 53391 IANA-RSVD 53392 IANA-RSVD 53393 IANA-RSVD 53394 IANA-RSVD 53395 IANA-RSVD 53396 IANA-RSVD 53397 IANA-RSVD 53398 IANA-RSVD 53399 IANA-RSVD 53400 IANA-RSVD 53401 IANA-RSVD 53402 IANA-RSVD 53403 IANA-RSVD 53404 IANA-RSVD 53405 IANA-RSVD 53406 IANA-RSVD 53407 IANA-RSVD 53408 IANA-RSVD 53409 IANA-RSVD 53410 IANA-RSVD 53411 IANA-RSVD 53412 IANA-RSVD 53413 IANA-RSVD 53414 IANA-RSVD 53415 IANA-RSVD 53416 IANA-RSVD 53417 IANA-RSVD 53418 IANA-RSVD 53419 IANA-RSVD 53420 IANA-RSVD 53421 IANA-RSVD 53422 IANA-RSVD 53423 IANA-RSVD 53424 IANA-RSVD 53425 IANA-RSVD 53426 IANA-RSVD 53427 IANA-RSVD 53428 IANA-RSVD 53429 IANA-RSVD 53430 IANA-RSVD 53431 IANA-RSVD 53432 IANA-RSVD 53433 IANA-RSVD 53434 IANA-RSVD 53435 IANA-RSVD 53436 IANA-RSVD 53437 IANA-RSVD 53438 IANA-RSVD 53439 IANA-RSVD 53440 IANA-RSVD 53441 IANA-RSVD 53442 IANA-RSVD 53443 IANA-RSVD 53444 IANA-RSVD 53445 IANA-RSVD 53446 IANA-RSVD 53447 IANA-RSVD 53448 IANA-RSVD 53449 IANA-RSVD 53450 IANA-RSVD 53451 IANA-RSVD 53452 IANA-RSVD 53453 IANA-RSVD 53454 IANA-RSVD 53455 IANA-RSVD 53456 IANA-RSVD 53457 IANA-RSVD 53458 IANA-RSVD 53459 IANA-RSVD 53460 IANA-RSVD 53461 IANA-RSVD 53462 IANA-RSVD 53463 IANA-RSVD 53464 IANA-RSVD 53465 IANA-RSVD 53466 IANA-RSVD 53467 IANA-RSVD 53468 IANA-RSVD 53469 IANA-RSVD 53470 IANA-RSVD 53471 IANA-RSVD 53472 IANA-RSVD 53473 IANA-RSVD 53474 IANA-RSVD 53475 IANA-RSVD 53476 IANA-RSVD 53477 IANA-RSVD 53478 IANA-RSVD 53479 IANA-RSVD 53480 IANA-RSVD 53481 IANA-RSVD 53482 IANA-RSVD 53483 IANA-RSVD 53484 IANA-RSVD 53485 IANA-RSVD 53486 IANA-RSVD 53487 IANA-RSVD 53488 IANA-RSVD 53489 IANA-RSVD 53490 IANA-RSVD 53491 IANA-RSVD 53492 IANA-RSVD 53493 IANA-RSVD 53494 IANA-RSVD 53495 IANA-RSVD 53496 IANA-RSVD 53497 IANA-RSVD 53498 IANA-RSVD 53499 IANA-RSVD 53500 IANA-RSVD 53501 IANA-RSVD 53502 IANA-RSVD 53503 IANA-RSVD 53504 IANA-RSVD 53505 IANA-RSVD 53506 IANA-RSVD 53507 IANA-RSVD 53508 IANA-RSVD 53509 IANA-RSVD 53510 IANA-RSVD 53511 IANA-RSVD 53512 IANA-RSVD 53513 IANA-RSVD 53514 IANA-RSVD 53515 IANA-RSVD 53516 IANA-RSVD 53517 IANA-RSVD 53518 IANA-RSVD 53519 IANA-RSVD 53520 IANA-RSVD 53521 IANA-RSVD 53522 IANA-RSVD 53523 IANA-RSVD 53524 IANA-RSVD 53525 IANA-RSVD 53526 IANA-RSVD 53527 IANA-RSVD 53528 IANA-RSVD 53529 IANA-RSVD 53530 IANA-RSVD 53531 IANA-RSVD 53532 IANA-RSVD 53533 IANA-RSVD 53534 IANA-RSVD 53535 IANA-RSVD 53536 IANA-RSVD 53537 IANA-RSVD 53538 IANA-RSVD 53539 IANA-RSVD 53540 IANA-RSVD 53541 IANA-RSVD 53542 IANA-RSVD 53543 IANA-RSVD 53544 IANA-RSVD 53545 IANA-RSVD 53546 IANA-RSVD 53547 IANA-RSVD 53548 IANA-RSVD 53549 IANA-RSVD 53550 IANA-RSVD 53551 IANA-RSVD 53552 IANA-RSVD 53553 IANA-RSVD 53554 IANA-RSVD 53555 IANA-RSVD 53556 IANA-RSVD 53557 IANA-RSVD 53558 IANA-RSVD 53559 IANA-RSVD 53560 IANA-RSVD 53561 IANA-RSVD 53562 IANA-RSVD 53563 IANA-RSVD 53564 IANA-RSVD 53565 IANA-RSVD 53566 IANA-RSVD 53567 IANA-RSVD 53568 IANA-RSVD 53569 IANA-RSVD 53570 IANA-RSVD 53571 IANA-RSVD 53572 IANA-RSVD 53573 IANA-RSVD 53574 IANA-RSVD 53575 IANA-RSVD 53576 IANA-RSVD 53577 IANA-RSVD 53578 IANA-RSVD 53579 IANA-RSVD 53580 IANA-RSVD 53581 IANA-RSVD 53582 IANA-RSVD 53583 IANA-RSVD 53584 IANA-RSVD 53585 IANA-RSVD 53586 IANA-RSVD 53587 IANA-RSVD 53588 IANA-RSVD 53589 IANA-RSVD 53590 IANA-RSVD 53591 IANA-RSVD 53592 IANA-RSVD 53593 IANA-RSVD 53594 IANA-RSVD 53595 IANA-RSVD 53596 IANA-RSVD 53597 IANA-RSVD 53598 IANA-RSVD 53599 IANA-RSVD 53600 IANA-RSVD 53601 IANA-RSVD 53602 IANA-RSVD 53603 IANA-RSVD 53604 IANA-RSVD 53605 IANA-RSVD 53606 IANA-RSVD 53607 IANA-RSVD 53608 IANA-RSVD 53609 IANA-RSVD 53610 IANA-RSVD 53611 IANA-RSVD 53612 IANA-RSVD 53613 IANA-RSVD 53614 IANA-RSVD 53615 IANA-RSVD 53616 IANA-RSVD 53617 IANA-RSVD 53618 IANA-RSVD 53619 IANA-RSVD 53620 IANA-RSVD 53621 IANA-RSVD 53622 IANA-RSVD 53623 IANA-RSVD 53624 IANA-RSVD 53625 IANA-RSVD 53626 IANA-RSVD 53627 IANA-RSVD 53628 IANA-RSVD 53629 IANA-RSVD 53630 IANA-RSVD 53631 IANA-RSVD 53632 IANA-RSVD 53633 IANA-RSVD 53634 IANA-RSVD 53635 IANA-RSVD 53636 IANA-RSVD 53637 IANA-RSVD 53638 IANA-RSVD 53639 IANA-RSVD 53640 IANA-RSVD 53641 IANA-RSVD 53642 IANA-RSVD 53643 IANA-RSVD 53644 IANA-RSVD 53645 IANA-RSVD 53646 IANA-RSVD 53647 IANA-RSVD 53648 IANA-RSVD 53649 IANA-RSVD 53650 IANA-RSVD 53651 IANA-RSVD 53652 IANA-RSVD 53653 IANA-RSVD 53654 IANA-RSVD 53655 IANA-RSVD 53656 IANA-RSVD 53657 IANA-RSVD 53658 IANA-RSVD 53659 IANA-RSVD 53660 IANA-RSVD 53661 IANA-RSVD 53662 IANA-RSVD 53663 IANA-RSVD 53664 IANA-RSVD 53665 IANA-RSVD 53666 IANA-RSVD 53667 IANA-RSVD 53668 IANA-RSVD 53669 IANA-RSVD 53670 IANA-RSVD 53671 IANA-RSVD 53672 IANA-RSVD 53673 IANA-RSVD 53674 IANA-RSVD 53675 IANA-RSVD 53676 IANA-RSVD 53677 IANA-RSVD 53678 IANA-RSVD 53679 IANA-RSVD 53680 IANA-RSVD 53681 IANA-RSVD 53682 IANA-RSVD 53683 IANA-RSVD 53684 IANA-RSVD 53685 IANA-RSVD 53686 IANA-RSVD 53687 IANA-RSVD 53688 IANA-RSVD 53689 IANA-RSVD 53690 IANA-RSVD 53691 IANA-RSVD 53692 IANA-RSVD 53693 IANA-RSVD 53694 IANA-RSVD 53695 IANA-RSVD 53696 IANA-RSVD 53697 IANA-RSVD 53698 IANA-RSVD 53699 IANA-RSVD 53700 IANA-RSVD 53701 IANA-RSVD 53702 IANA-RSVD 53703 IANA-RSVD 53704 IANA-RSVD 53705 IANA-RSVD 53706 IANA-RSVD 53707 IANA-RSVD 53708 IANA-RSVD 53709 IANA-RSVD 53710 IANA-RSVD 53711 IANA-RSVD 53712 IANA-RSVD 53713 IANA-RSVD 53714 IANA-RSVD 53715 IANA-RSVD 53716 IANA-RSVD 53717 IANA-RSVD 53718 IANA-RSVD 53719 IANA-RSVD 53720 IANA-RSVD 53721 IANA-RSVD 53722 IANA-RSVD 53723 IANA-RSVD 53724 IANA-RSVD 53725 IANA-RSVD 53726 IANA-RSVD 53727 IANA-RSVD 53728 IANA-RSVD 53729 IANA-RSVD 53730 IANA-RSVD 53731 IANA-RSVD 53732 IANA-RSVD 53733 IANA-RSVD 53734 IANA-RSVD 53735 IANA-RSVD 53736 IANA-RSVD 53737 IANA-RSVD 53738 IANA-RSVD 53739 IANA-RSVD 53740 IANA-RSVD 53741 IANA-RSVD 53742 IANA-RSVD 53743 IANA-RSVD 53744 IANA-RSVD 53745 IANA-RSVD 53746 IANA-RSVD 53747 IANA-RSVD 53748 IANA-RSVD 53749 IANA-RSVD 53750 IANA-RSVD 53751 IANA-RSVD 53752 IANA-RSVD 53753 IANA-RSVD 53754 IANA-RSVD 53755 IANA-RSVD 53756 IANA-RSVD 53757 IANA-RSVD 53758 IANA-RSVD 53759 IANA-RSVD 53760 IANA-RSVD 53761 IANA-RSVD 53762 IANA-RSVD 53763 IANA-RSVD 53764 IANA-RSVD 53765 IANA-RSVD 53766 IANA-RSVD 53767 IANA-RSVD 53768 IANA-RSVD 53769 IANA-RSVD 53770 IANA-RSVD 53771 IANA-RSVD 53772 IANA-RSVD 53773 IANA-RSVD 53774 IANA-RSVD 53775 IANA-RSVD 53776 IANA-RSVD 53777 IANA-RSVD 53778 IANA-RSVD 53779 IANA-RSVD 53780 IANA-RSVD 53781 IANA-RSVD 53782 IANA-RSVD 53783 IANA-RSVD 53784 IANA-RSVD 53785 IANA-RSVD 53786 IANA-RSVD 53787 IANA-RSVD 53788 IANA-RSVD 53789 IANA-RSVD 53790 IANA-RSVD 53791 IANA-RSVD 53792 IANA-RSVD 53793 IANA-RSVD 53794 IANA-RSVD 53795 IANA-RSVD 53796 IANA-RSVD 53797 IANA-RSVD 53798 IANA-RSVD 53799 IANA-RSVD 53800 IANA-RSVD 53801 IANA-RSVD 53802 IANA-RSVD 53803 IANA-RSVD 53804 IANA-RSVD 53805 IANA-RSVD 53806 IANA-RSVD 53807 IANA-RSVD 53808 IANA-RSVD 53809 IANA-RSVD 53810 IANA-RSVD 53811 IANA-RSVD 53812 IANA-RSVD 53813 IANA-RSVD 53814 IANA-RSVD 53815 IANA-RSVD 53816 IANA-RSVD 53817 IANA-RSVD 53818 IANA-RSVD 53819 IANA-RSVD 53820 IANA-RSVD 53821 IANA-RSVD 53822 IANA-RSVD 53823 IANA-RSVD 53824 IANA-RSVD 53825 IANA-RSVD 53826 IANA-RSVD 53827 IANA-RSVD 53828 IANA-RSVD 53829 IANA-RSVD 53830 IANA-RSVD 53831 IANA-RSVD 53832 IANA-RSVD 53833 IANA-RSVD 53834 IANA-RSVD 53835 IANA-RSVD 53836 IANA-RSVD 53837 IANA-RSVD 53838 IANA-RSVD 53839 IANA-RSVD 53840 IANA-RSVD 53841 IANA-RSVD 53842 IANA-RSVD 53843 IANA-RSVD 53844 IANA-RSVD 53845 IANA-RSVD 53846 IANA-RSVD 53847 IANA-RSVD 53848 IANA-RSVD 53849 IANA-RSVD 53850 IANA-RSVD 53851 IANA-RSVD 53852 IANA-RSVD 53853 IANA-RSVD 53854 IANA-RSVD 53855 IANA-RSVD 53856 IANA-RSVD 53857 IANA-RSVD 53858 IANA-RSVD 53859 IANA-RSVD 53860 IANA-RSVD 53861 IANA-RSVD 53862 IANA-RSVD 53863 IANA-RSVD 53864 IANA-RSVD 53865 IANA-RSVD 53866 IANA-RSVD 53867 IANA-RSVD 53868 IANA-RSVD 53869 IANA-RSVD 53870 IANA-RSVD 53871 IANA-RSVD 53872 IANA-RSVD 53873 IANA-RSVD 53874 IANA-RSVD 53875 IANA-RSVD 53876 IANA-RSVD 53877 IANA-RSVD 53878 IANA-RSVD 53879 IANA-RSVD 53880 IANA-RSVD 53881 IANA-RSVD 53882 IANA-RSVD 53883 IANA-RSVD 53884 IANA-RSVD 53885 IANA-RSVD 53886 IANA-RSVD 53887 IANA-RSVD 53888 IANA-RSVD 53889 IANA-RSVD 53890 IANA-RSVD 53891 IANA-RSVD 53892 IANA-RSVD 53893 IANA-RSVD 53894 IANA-RSVD 53895 IANA-RSVD 53896 IANA-RSVD 53897 IANA-RSVD 53898 IANA-RSVD 53899 IANA-RSVD 53900 IANA-RSVD 53901 IANA-RSVD 53902 IANA-RSVD 53903 IANA-RSVD 53904 IANA-RSVD 53905 IANA-RSVD 53906 IANA-RSVD 53907 IANA-RSVD 53908 IANA-RSVD 53909 IANA-RSVD 53910 IANA-RSVD 53911 IANA-RSVD 53912 IANA-RSVD 53913 IANA-RSVD 53914 IANA-RSVD 53915 IANA-RSVD 53916 IANA-RSVD 53917 IANA-RSVD 53918 IANA-RSVD 53919 IANA-RSVD 53920 IANA-RSVD 53921 IANA-RSVD 53922 IANA-RSVD 53923 IANA-RSVD 53924 IANA-RSVD 53925 IANA-RSVD 53926 IANA-RSVD 53927 IANA-RSVD 53928 IANA-RSVD 53929 IANA-RSVD 53930 IANA-RSVD 53931 IANA-RSVD 53932 IANA-RSVD 53933 IANA-RSVD 53934 IANA-RSVD 53935 IANA-RSVD 53936 IANA-RSVD 53937 IANA-RSVD 53938 IANA-RSVD 53939 IANA-RSVD 53940 IANA-RSVD 53941 IANA-RSVD 53942 IANA-RSVD 53943 IANA-RSVD 53944 IANA-RSVD 53945 IANA-RSVD 53946 IANA-RSVD 53947 IANA-RSVD 53948 IANA-RSVD 53949 IANA-RSVD 53950 IANA-RSVD 53951 IANA-RSVD 53952 IANA-RSVD 53953 IANA-RSVD 53954 IANA-RSVD 53955 IANA-RSVD 53956 IANA-RSVD 53957 IANA-RSVD 53958 IANA-RSVD 53959 IANA-RSVD 53960 IANA-RSVD 53961 IANA-RSVD 53962 IANA-RSVD 53963 IANA-RSVD 53964 IANA-RSVD 53965 IANA-RSVD 53966 IANA-RSVD 53967 IANA-RSVD 53968 IANA-RSVD 53969 IANA-RSVD 53970 IANA-RSVD 53971 IANA-RSVD 53972 IANA-RSVD 53973 IANA-RSVD 53974 IANA-RSVD 53975 IANA-RSVD 53976 IANA-RSVD 53977 IANA-RSVD 53978 IANA-RSVD 53979 IANA-RSVD 53980 IANA-RSVD 53981 IANA-RSVD 53982 IANA-RSVD 53983 IANA-RSVD 53984 IANA-RSVD 53985 IANA-RSVD 53986 IANA-RSVD 53987 IANA-RSVD 53988 IANA-RSVD 53989 IANA-RSVD 53990 IANA-RSVD 53991 IANA-RSVD 53992 IANA-RSVD 53993 IANA-RSVD 53994 IANA-RSVD 53995 IANA-RSVD 53996 IANA-RSVD 53997 IANA-RSVD 53998 IANA-RSVD 53999 IANA-RSVD 54000 IANA-RSVD 54001 IANA-RSVD 54002 IANA-RSVD 54003 IANA-RSVD 54004 IANA-RSVD 54005 IANA-RSVD 54006 IANA-RSVD 54007 IANA-RSVD 54008 IANA-RSVD 54009 IANA-RSVD 54010 IANA-RSVD 54011 IANA-RSVD 54012 IANA-RSVD 54013 IANA-RSVD 54014 IANA-RSVD 54015 IANA-RSVD 54016 IANA-RSVD 54017 IANA-RSVD 54018 IANA-RSVD 54019 IANA-RSVD 54020 IANA-RSVD 54021 IANA-RSVD 54022 IANA-RSVD 54023 IANA-RSVD 54024 IANA-RSVD 54025 IANA-RSVD 54026 IANA-RSVD 54027 IANA-RSVD 54028 IANA-RSVD 54029 IANA-RSVD 54030 IANA-RSVD 54031 IANA-RSVD 54032 IANA-RSVD 54033 IANA-RSVD 54034 IANA-RSVD 54035 IANA-RSVD 54036 IANA-RSVD 54037 IANA-RSVD 54038 IANA-RSVD 54039 IANA-RSVD 54040 IANA-RSVD 54041 IANA-RSVD 54042 IANA-RSVD 54043 IANA-RSVD 54044 IANA-RSVD 54045 IANA-RSVD 54046 IANA-RSVD 54047 IANA-RSVD 54048 IANA-RSVD 54049 IANA-RSVD 54050 IANA-RSVD 54051 IANA-RSVD 54052 IANA-RSVD 54053 IANA-RSVD 54054 IANA-RSVD 54055 IANA-RSVD 54056 IANA-RSVD 54057 IANA-RSVD 54058 IANA-RSVD 54059 IANA-RSVD 54060 IANA-RSVD 54061 IANA-RSVD 54062 IANA-RSVD 54063 IANA-RSVD 54064 IANA-RSVD 54065 IANA-RSVD 54066 IANA-RSVD 54067 IANA-RSVD 54068 IANA-RSVD 54069 IANA-RSVD 54070 IANA-RSVD 54071 IANA-RSVD 54072 IANA-RSVD 54073 IANA-RSVD 54074 IANA-RSVD 54075 IANA-RSVD 54076 IANA-RSVD 54077 IANA-RSVD 54078 IANA-RSVD 54079 IANA-RSVD 54080 IANA-RSVD 54081 IANA-RSVD 54082 IANA-RSVD 54083 IANA-RSVD 54084 IANA-RSVD 54085 IANA-RSVD 54086 IANA-RSVD 54087 IANA-RSVD 54088 IANA-RSVD 54089 IANA-RSVD 54090 IANA-RSVD 54091 IANA-RSVD 54092 IANA-RSVD 54093 IANA-RSVD 54094 IANA-RSVD 54095 IANA-RSVD 54096 IANA-RSVD 54097 IANA-RSVD 54098 IANA-RSVD 54099 IANA-RSVD 54100 IANA-RSVD 54101 IANA-RSVD 54102 IANA-RSVD 54103 IANA-RSVD 54104 IANA-RSVD 54105 IANA-RSVD 54106 IANA-RSVD 54107 IANA-RSVD 54108 IANA-RSVD 54109 IANA-RSVD 54110 IANA-RSVD 54111 IANA-RSVD 54112 IANA-RSVD 54113 IANA-RSVD 54114 IANA-RSVD 54115 IANA-RSVD 54116 IANA-RSVD 54117 IANA-RSVD 54118 IANA-RSVD 54119 IANA-RSVD 54120 IANA-RSVD 54121 IANA-RSVD 54122 IANA-RSVD 54123 IANA-RSVD 54124 IANA-RSVD 54125 IANA-RSVD 54126 IANA-RSVD 54127 IANA-RSVD 54128 IANA-RSVD 54129 IANA-RSVD 54130 IANA-RSVD 54131 IANA-RSVD 54132 IANA-RSVD 54133 IANA-RSVD 54134 IANA-RSVD 54135 IANA-RSVD 54136 IANA-RSVD 54137 IANA-RSVD 54138 IANA-RSVD 54139 IANA-RSVD 54140 IANA-RSVD 54141 IANA-RSVD 54142 IANA-RSVD 54143 IANA-RSVD 54144 IANA-RSVD 54145 IANA-RSVD 54146 IANA-RSVD 54147 IANA-RSVD 54148 IANA-RSVD 54149 IANA-RSVD 54150 IANA-RSVD 54151 IANA-RSVD 54152 IANA-RSVD 54153 IANA-RSVD 54154 IANA-RSVD 54155 IANA-RSVD 54156 IANA-RSVD 54157 IANA-RSVD 54158 IANA-RSVD 54159 IANA-RSVD 54160 IANA-RSVD 54161 IANA-RSVD 54162 IANA-RSVD 54163 IANA-RSVD 54164 IANA-RSVD 54165 IANA-RSVD 54166 IANA-RSVD 54167 IANA-RSVD 54168 IANA-RSVD 54169 IANA-RSVD 54170 IANA-RSVD 54171 IANA-RSVD 54172 IANA-RSVD 54173 IANA-RSVD 54174 IANA-RSVD 54175 IANA-RSVD 54176 IANA-RSVD 54177 IANA-RSVD 54178 IANA-RSVD 54179 IANA-RSVD 54180 IANA-RSVD 54181 IANA-RSVD 54182 IANA-RSVD 54183 IANA-RSVD 54184 IANA-RSVD 54185 IANA-RSVD 54186 IANA-RSVD 54187 IANA-RSVD 54188 IANA-RSVD 54189 IANA-RSVD 54190 IANA-RSVD 54191 IANA-RSVD 54192 IANA-RSVD 54193 IANA-RSVD 54194 IANA-RSVD 54195 IANA-RSVD 54196 IANA-RSVD 54197 IANA-RSVD 54198 IANA-RSVD 54199 IANA-RSVD 54200 IANA-RSVD 54201 IANA-RSVD 54202 IANA-RSVD 54203 IANA-RSVD 54204 IANA-RSVD 54205 IANA-RSVD 54206 IANA-RSVD 54207 IANA-RSVD 54208 IANA-RSVD 54209 IANA-RSVD 54210 IANA-RSVD 54211 IANA-RSVD 54212 IANA-RSVD 54213 IANA-RSVD 54214 IANA-RSVD 54215 IANA-RSVD 54216 IANA-RSVD 54217 IANA-RSVD 54218 IANA-RSVD 54219 IANA-RSVD 54220 IANA-RSVD 54221 IANA-RSVD 54222 IANA-RSVD 54223 IANA-RSVD 54224 IANA-RSVD 54225 IANA-RSVD 54226 IANA-RSVD 54227 IANA-RSVD 54228 IANA-RSVD 54229 IANA-RSVD 54230 IANA-RSVD 54231 IANA-RSVD 54232 IANA-RSVD 54233 IANA-RSVD 54234 IANA-RSVD 54235 IANA-RSVD 54236 IANA-RSVD 54237 IANA-RSVD 54238 IANA-RSVD 54239 IANA-RSVD 54240 IANA-RSVD 54241 IANA-RSVD 54242 IANA-RSVD 54243 IANA-RSVD 54244 IANA-RSVD 54245 IANA-RSVD 54246 IANA-RSVD 54247 IANA-RSVD 54248 IANA-RSVD 54249 IANA-RSVD 54250 IANA-RSVD 54251 IANA-RSVD 54252 IANA-RSVD 54253 IANA-RSVD 54254 IANA-RSVD 54255 IANA-RSVD 54256 IANA-RSVD 54257 IANA-RSVD 54258 IANA-RSVD 54259 IANA-RSVD 54260 IANA-RSVD 54261 IANA-RSVD 54262 IANA-RSVD 54263 IANA-RSVD 54264 IANA-RSVD 54265 IANA-RSVD 54266 IANA-RSVD 54267 IANA-RSVD 54268 IANA-RSVD 54269 IANA-RSVD 54270 IANA-RSVD 54271 IANA-RSVD 54272 IANA-RSVD 54273 IANA-RSVD 54274 IANA-RSVD 54275 IANA-RSVD 54276 IANA-RSVD 54277 IANA-RSVD 54278 IANA-RSVD 54279 IANA-RSVD 54280 IANA-RSVD 54281 IANA-RSVD 54282 IANA-RSVD 54283 IANA-RSVD 54284 IANA-RSVD 54285 IANA-RSVD 54286 IANA-RSVD 54287 IANA-RSVD 54288 IANA-RSVD 54289 IANA-RSVD 54290 IANA-RSVD 54291 IANA-RSVD 54292 IANA-RSVD 54293 IANA-RSVD 54294 IANA-RSVD 54295 IANA-RSVD 54296 IANA-RSVD 54297 IANA-RSVD 54298 IANA-RSVD 54299 IANA-RSVD 54300 IANA-RSVD 54301 IANA-RSVD 54302 IANA-RSVD 54303 IANA-RSVD 54304 IANA-RSVD 54305 IANA-RSVD 54306 IANA-RSVD 54307 IANA-RSVD 54308 IANA-RSVD 54309 IANA-RSVD 54310 IANA-RSVD 54311 IANA-RSVD 54312 IANA-RSVD 54313 IANA-RSVD 54314 IANA-RSVD 54315 IANA-RSVD 54316 IANA-RSVD 54317 IANA-RSVD 54318 IANA-RSVD 54319 IANA-RSVD 54320 IANA-RSVD 54321 IANA-RSVD 54322 IANA-RSVD 54323 IANA-RSVD 54324 IANA-RSVD 54325 IANA-RSVD 54326 IANA-RSVD 54327 IANA-RSVD 54328 IANA-RSVD 54329 IANA-RSVD 54330 IANA-RSVD 54331 IANA-RSVD 54332 IANA-RSVD 54333 IANA-RSVD 54334 IANA-RSVD 54335 IANA-RSVD 54336 IANA-RSVD 54337 IANA-RSVD 54338 IANA-RSVD 54339 IANA-RSVD 54340 IANA-RSVD 54341 IANA-RSVD 54342 IANA-RSVD 54343 IANA-RSVD 54344 IANA-RSVD 54345 IANA-RSVD 54346 IANA-RSVD 54347 IANA-RSVD 54348 IANA-RSVD 54349 IANA-RSVD 54350 IANA-RSVD 54351 IANA-RSVD 54352 IANA-RSVD 54353 IANA-RSVD 54354 IANA-RSVD 54355 IANA-RSVD 54356 IANA-RSVD 54357 IANA-RSVD 54358 IANA-RSVD 54359 IANA-RSVD 54360 IANA-RSVD 54361 IANA-RSVD 54362 IANA-RSVD 54363 IANA-RSVD 54364 IANA-RSVD 54365 IANA-RSVD 54366 IANA-RSVD 54367 IANA-RSVD 54368 IANA-RSVD 54369 IANA-RSVD 54370 IANA-RSVD 54371 IANA-RSVD 54372 IANA-RSVD 54373 IANA-RSVD 54374 IANA-RSVD 54375 IANA-RSVD 54376 IANA-RSVD 54377 IANA-RSVD 54378 IANA-RSVD 54379 IANA-RSVD 54380 IANA-RSVD 54381 IANA-RSVD 54382 IANA-RSVD 54383 IANA-RSVD 54384 IANA-RSVD 54385 IANA-RSVD 54386 IANA-RSVD 54387 IANA-RSVD 54388 IANA-RSVD 54389 IANA-RSVD 54390 IANA-RSVD 54391 IANA-RSVD 54392 IANA-RSVD 54393 IANA-RSVD 54394 IANA-RSVD 54395 IANA-RSVD 54396 IANA-RSVD 54397 IANA-RSVD 54398 IANA-RSVD 54399 IANA-RSVD 54400 IANA-RSVD 54401 IANA-RSVD 54402 IANA-RSVD 54403 IANA-RSVD 54404 IANA-RSVD 54405 IANA-RSVD 54406 IANA-RSVD 54407 IANA-RSVD 54408 IANA-RSVD 54409 IANA-RSVD 54410 IANA-RSVD 54411 IANA-RSVD 54412 IANA-RSVD 54413 IANA-RSVD 54414 IANA-RSVD 54415 IANA-RSVD 54416 IANA-RSVD 54417 IANA-RSVD 54418 IANA-RSVD 54419 IANA-RSVD 54420 IANA-RSVD 54421 IANA-RSVD 54422 IANA-RSVD 54423 IANA-RSVD 54424 IANA-RSVD 54425 IANA-RSVD 54426 IANA-RSVD 54427 IANA-RSVD 54428 IANA-RSVD 54429 IANA-RSVD 54430 IANA-RSVD 54431 IANA-RSVD 54432 IANA-RSVD 54433 IANA-RSVD 54434 IANA-RSVD 54435 IANA-RSVD 54436 IANA-RSVD 54437 IANA-RSVD 54438 IANA-RSVD 54439 IANA-RSVD 54440 IANA-RSVD 54441 IANA-RSVD 54442 IANA-RSVD 54443 IANA-RSVD 54444 IANA-RSVD 54445 IANA-RSVD 54446 IANA-RSVD 54447 IANA-RSVD 54448 IANA-RSVD 54449 IANA-RSVD 54450 IANA-RSVD 54451 IANA-RSVD 54452 IANA-RSVD 54453 IANA-RSVD 54454 IANA-RSVD 54455 IANA-RSVD 54456 IANA-RSVD 54457 IANA-RSVD 54458 IANA-RSVD 54459 IANA-RSVD 54460 IANA-RSVD 54461 IANA-RSVD 54462 IANA-RSVD 54463 IANA-RSVD 54464 IANA-RSVD 54465 IANA-RSVD 54466 IANA-RSVD 54467 IANA-RSVD 54468 IANA-RSVD 54469 IANA-RSVD 54470 IANA-RSVD 54471 IANA-RSVD 54472 IANA-RSVD 54473 IANA-RSVD 54474 IANA-RSVD 54475 IANA-RSVD 54476 IANA-RSVD 54477 IANA-RSVD 54478 IANA-RSVD 54479 IANA-RSVD 54480 IANA-RSVD 54481 IANA-RSVD 54482 IANA-RSVD 54483 IANA-RSVD 54484 IANA-RSVD 54485 IANA-RSVD 54486 IANA-RSVD 54487 IANA-RSVD 54488 IANA-RSVD 54489 IANA-RSVD 54490 IANA-RSVD 54491 IANA-RSVD 54492 IANA-RSVD 54493 IANA-RSVD 54494 IANA-RSVD 54495 IANA-RSVD 54496 IANA-RSVD 54497 IANA-RSVD 54498 IANA-RSVD 54499 IANA-RSVD 54500 IANA-RSVD 54501 IANA-RSVD 54502 IANA-RSVD 54503 IANA-RSVD 54504 IANA-RSVD 54505 IANA-RSVD 54506 IANA-RSVD 54507 IANA-RSVD 54508 IANA-RSVD 54509 IANA-RSVD 54510 IANA-RSVD 54511 IANA-RSVD 54512 IANA-RSVD 54513 IANA-RSVD 54514 IANA-RSVD 54515 IANA-RSVD 54516 IANA-RSVD 54517 IANA-RSVD 54518 IANA-RSVD 54519 IANA-RSVD 54520 IANA-RSVD 54521 IANA-RSVD 54522 IANA-RSVD 54523 IANA-RSVD 54524 IANA-RSVD 54525 IANA-RSVD 54526 IANA-RSVD 54527 IANA-RSVD 54528 IANA-RSVD 54529 IANA-RSVD 54530 IANA-RSVD 54531 IANA-RSVD 54532 IANA-RSVD 54533 IANA-RSVD 54534 IANA-RSVD 54535 IANA-RSVD 54536 IANA-RSVD 54537 IANA-RSVD 54538 IANA-RSVD 54539 IANA-RSVD 54540 IANA-RSVD 54541 IANA-RSVD 54542 IANA-RSVD 54543 IANA-RSVD 54544 IANA-RSVD 54545 IANA-RSVD 54546 IANA-RSVD 54547 IANA-RSVD 54548 IANA-RSVD 54549 IANA-RSVD 54550 IANA-RSVD 54551 IANA-RSVD 54552 IANA-RSVD 54553 IANA-RSVD 54554 IANA-RSVD 54555 IANA-RSVD 54556 IANA-RSVD 54557 IANA-RSVD 54558 IANA-RSVD 54559 IANA-RSVD 54560 IANA-RSVD 54561 IANA-RSVD 54562 IANA-RSVD 54563 IANA-RSVD 54564 IANA-RSVD 54565 IANA-RSVD 54566 IANA-RSVD 54567 IANA-RSVD 54568 IANA-RSVD 54569 IANA-RSVD 54570 IANA-RSVD 54571 IANA-RSVD 54572 IANA-RSVD 54573 IANA-RSVD 54574 IANA-RSVD 54575 IANA-RSVD 54576 IANA-RSVD 54577 IANA-RSVD 54578 IANA-RSVD 54579 IANA-RSVD 54580 IANA-RSVD 54581 IANA-RSVD 54582 IANA-RSVD 54583 IANA-RSVD 54584 IANA-RSVD 54585 IANA-RSVD 54586 IANA-RSVD 54587 IANA-RSVD 54588 IANA-RSVD 54589 IANA-RSVD 54590 IANA-RSVD 54591 IANA-RSVD 54592 IANA-RSVD 54593 IANA-RSVD 54594 IANA-RSVD 54595 IANA-RSVD 54596 IANA-RSVD 54597 IANA-RSVD 54598 IANA-RSVD 54599 IANA-RSVD 54600 IANA-RSVD 54601 IANA-RSVD 54602 IANA-RSVD 54603 IANA-RSVD 54604 IANA-RSVD 54605 IANA-RSVD 54606 IANA-RSVD 54607 IANA-RSVD 54608 IANA-RSVD 54609 IANA-RSVD 54610 IANA-RSVD 54611 IANA-RSVD 54612 IANA-RSVD 54613 IANA-RSVD 54614 IANA-RSVD 54615 IANA-RSVD 54616 IANA-RSVD 54617 IANA-RSVD 54618 IANA-RSVD 54619 IANA-RSVD 54620 IANA-RSVD 54621 IANA-RSVD 54622 IANA-RSVD 54623 IANA-RSVD 54624 IANA-RSVD 54625 IANA-RSVD 54626 IANA-RSVD 54627 IANA-RSVD 54628 IANA-RSVD 54629 IANA-RSVD 54630 IANA-RSVD 54631 IANA-RSVD 54632 IANA-RSVD 54633 IANA-RSVD 54634 IANA-RSVD 54635 IANA-RSVD 54636 IANA-RSVD 54637 IANA-RSVD 54638 IANA-RSVD 54639 IANA-RSVD 54640 IANA-RSVD 54641 IANA-RSVD 54642 IANA-RSVD 54643 IANA-RSVD 54644 IANA-RSVD 54645 IANA-RSVD 54646 IANA-RSVD 54647 IANA-RSVD 54648 IANA-RSVD 54649 IANA-RSVD 54650 IANA-RSVD 54651 IANA-RSVD 54652 IANA-RSVD 54653 IANA-RSVD 54654 IANA-RSVD 54655 IANA-RSVD 54656 IANA-RSVD 54657 IANA-RSVD 54658 IANA-RSVD 54659 IANA-RSVD 54660 IANA-RSVD 54661 IANA-RSVD 54662 IANA-RSVD 54663 IANA-RSVD 54664 IANA-RSVD 54665 IANA-RSVD 54666 IANA-RSVD 54667 IANA-RSVD 54668 IANA-RSVD 54669 IANA-RSVD 54670 IANA-RSVD 54671 IANA-RSVD 54672 IANA-RSVD 54673 IANA-RSVD 54674 IANA-RSVD 54675 IANA-RSVD 54676 IANA-RSVD 54677 IANA-RSVD 54678 IANA-RSVD 54679 IANA-RSVD 54680 IANA-RSVD 54681 IANA-RSVD 54682 IANA-RSVD 54683 IANA-RSVD 54684 IANA-RSVD 54685 IANA-RSVD 54686 IANA-RSVD 54687 IANA-RSVD 54688 IANA-RSVD 54689 IANA-RSVD 54690 IANA-RSVD 54691 IANA-RSVD 54692 IANA-RSVD 54693 IANA-RSVD 54694 IANA-RSVD 54695 IANA-RSVD 54696 IANA-RSVD 54697 IANA-RSVD 54698 IANA-RSVD 54699 IANA-RSVD 54700 IANA-RSVD 54701 IANA-RSVD 54702 IANA-RSVD 54703 IANA-RSVD 54704 IANA-RSVD 54705 IANA-RSVD 54706 IANA-RSVD 54707 IANA-RSVD 54708 IANA-RSVD 54709 IANA-RSVD 54710 IANA-RSVD 54711 IANA-RSVD 54712 IANA-RSVD 54713 IANA-RSVD 54714 IANA-RSVD 54715 IANA-RSVD 54716 IANA-RSVD 54717 IANA-RSVD 54718 IANA-RSVD 54719 IANA-RSVD 54720 IANA-RSVD 54721 IANA-RSVD 54722 IANA-RSVD 54723 IANA-RSVD 54724 IANA-RSVD 54725 IANA-RSVD 54726 IANA-RSVD 54727 IANA-RSVD 54728 IANA-RSVD 54729 IANA-RSVD 54730 IANA-RSVD 54731 IANA-RSVD 54732 IANA-RSVD 54733 IANA-RSVD 54734 IANA-RSVD 54735 IANA-RSVD 54736 IANA-RSVD 54737 IANA-RSVD 54738 IANA-RSVD 54739 IANA-RSVD 54740 IANA-RSVD 54741 IANA-RSVD 54742 IANA-RSVD 54743 IANA-RSVD 54744 IANA-RSVD 54745 IANA-RSVD 54746 IANA-RSVD 54747 IANA-RSVD 54748 IANA-RSVD 54749 IANA-RSVD 54750 IANA-RSVD 54751 IANA-RSVD 54752 IANA-RSVD 54753 IANA-RSVD 54754 IANA-RSVD 54755 IANA-RSVD 54756 IANA-RSVD 54757 IANA-RSVD 54758 IANA-RSVD 54759 IANA-RSVD 54760 IANA-RSVD 54761 IANA-RSVD 54762 IANA-RSVD 54763 IANA-RSVD 54764 IANA-RSVD 54765 IANA-RSVD 54766 IANA-RSVD 54767 IANA-RSVD 54768 IANA-RSVD 54769 IANA-RSVD 54770 IANA-RSVD 54771 IANA-RSVD 54772 IANA-RSVD 54773 IANA-RSVD 54774 IANA-RSVD 54775 IANA-RSVD 54776 IANA-RSVD 54777 IANA-RSVD 54778 IANA-RSVD 54779 IANA-RSVD 54780 IANA-RSVD 54781 IANA-RSVD 54782 IANA-RSVD 54783 IANA-RSVD 54784 IANA-RSVD 54785 IANA-RSVD 54786 IANA-RSVD 54787 IANA-RSVD 54788 IANA-RSVD 54789 IANA-RSVD 54790 IANA-RSVD 54791 IANA-RSVD 54792 IANA-RSVD 54793 IANA-RSVD 54794 IANA-RSVD 54795 IANA-RSVD 54796 IANA-RSVD 54797 IANA-RSVD 54798 IANA-RSVD 54799 IANA-RSVD 54800 IANA-RSVD 54801 IANA-RSVD 54802 IANA-RSVD 54803 IANA-RSVD 54804 IANA-RSVD 54805 IANA-RSVD 54806 IANA-RSVD 54807 IANA-RSVD 54808 IANA-RSVD 54809 IANA-RSVD 54810 IANA-RSVD 54811 IANA-RSVD 54812 IANA-RSVD 54813 IANA-RSVD 54814 IANA-RSVD 54815 IANA-RSVD 54816 IANA-RSVD 54817 IANA-RSVD 54818 IANA-RSVD 54819 IANA-RSVD 54820 IANA-RSVD 54821 IANA-RSVD 54822 IANA-RSVD 54823 IANA-RSVD 54824 IANA-RSVD 54825 IANA-RSVD 54826 IANA-RSVD 54827 IANA-RSVD 54828 IANA-RSVD 54829 IANA-RSVD 54830 IANA-RSVD 54831 IANA-RSVD 54832 IANA-RSVD 54833 IANA-RSVD 54834 IANA-RSVD 54835 IANA-RSVD 54836 IANA-RSVD 54837 IANA-RSVD 54838 IANA-RSVD 54839 IANA-RSVD 54840 IANA-RSVD 54841 IANA-RSVD 54842 IANA-RSVD 54843 IANA-RSVD 54844 IANA-RSVD 54845 IANA-RSVD 54846 IANA-RSVD 54847 IANA-RSVD 54848 IANA-RSVD 54849 IANA-RSVD 54850 IANA-RSVD 54851 IANA-RSVD 54852 IANA-RSVD 54853 IANA-RSVD 54854 IANA-RSVD 54855 IANA-RSVD 54856 IANA-RSVD 54857 IANA-RSVD 54858 IANA-RSVD 54859 IANA-RSVD 54860 IANA-RSVD 54861 IANA-RSVD 54862 IANA-RSVD 54863 IANA-RSVD 54864 IANA-RSVD 54865 IANA-RSVD 54866 IANA-RSVD 54867 IANA-RSVD 54868 IANA-RSVD 54869 IANA-RSVD 54870 IANA-RSVD 54871 IANA-RSVD 54872 IANA-RSVD 54873 IANA-RSVD 54874 IANA-RSVD 54875 IANA-RSVD 54876 IANA-RSVD 54877 IANA-RSVD 54878 IANA-RSVD 54879 IANA-RSVD 54880 IANA-RSVD 54881 IANA-RSVD 54882 IANA-RSVD 54883 IANA-RSVD 54884 IANA-RSVD 54885 IANA-RSVD 54886 IANA-RSVD 54887 IANA-RSVD 54888 IANA-RSVD 54889 IANA-RSVD 54890 IANA-RSVD 54891 IANA-RSVD 54892 IANA-RSVD 54893 IANA-RSVD 54894 IANA-RSVD 54895 IANA-RSVD 54896 IANA-RSVD 54897 IANA-RSVD 54898 IANA-RSVD 54899 IANA-RSVD 54900 IANA-RSVD 54901 IANA-RSVD 54902 IANA-RSVD 54903 IANA-RSVD 54904 IANA-RSVD 54905 IANA-RSVD 54906 IANA-RSVD 54907 IANA-RSVD 54908 IANA-RSVD 54909 IANA-RSVD 54910 IANA-RSVD 54911 IANA-RSVD 54912 IANA-RSVD 54913 IANA-RSVD 54914 IANA-RSVD 54915 IANA-RSVD 54916 IANA-RSVD 54917 IANA-RSVD 54918 IANA-RSVD 54919 IANA-RSVD 54920 IANA-RSVD 54921 IANA-RSVD 54922 IANA-RSVD 54923 IANA-RSVD 54924 IANA-RSVD 54925 IANA-RSVD 54926 IANA-RSVD 54927 IANA-RSVD 54928 IANA-RSVD 54929 IANA-RSVD 54930 IANA-RSVD 54931 IANA-RSVD 54932 IANA-RSVD 54933 IANA-RSVD 54934 IANA-RSVD 54935 IANA-RSVD 54936 IANA-RSVD 54937 IANA-RSVD 54938 IANA-RSVD 54939 IANA-RSVD 54940 IANA-RSVD 54941 IANA-RSVD 54942 IANA-RSVD 54943 IANA-RSVD 54944 IANA-RSVD 54945 IANA-RSVD 54946 IANA-RSVD 54947 IANA-RSVD 54948 IANA-RSVD 54949 IANA-RSVD 54950 IANA-RSVD 54951 IANA-RSVD 54952 IANA-RSVD 54953 IANA-RSVD 54954 IANA-RSVD 54955 IANA-RSVD 54956 IANA-RSVD 54957 IANA-RSVD 54958 IANA-RSVD 54959 IANA-RSVD 54960 IANA-RSVD 54961 IANA-RSVD 54962 IANA-RSVD 54963 IANA-RSVD 54964 IANA-RSVD 54965 IANA-RSVD 54966 IANA-RSVD 54967 IANA-RSVD 54968 IANA-RSVD 54969 IANA-RSVD 54970 IANA-RSVD 54971 IANA-RSVD 54972 IANA-RSVD 54973 IANA-RSVD 54974 IANA-RSVD 54975 IANA-RSVD 54976 IANA-RSVD 54977 IANA-RSVD 54978 IANA-RSVD 54979 IANA-RSVD 54980 IANA-RSVD 54981 IANA-RSVD 54982 IANA-RSVD 54983 IANA-RSVD 54984 IANA-RSVD 54985 IANA-RSVD 54986 IANA-RSVD 54987 IANA-RSVD 54988 IANA-RSVD 54989 IANA-RSVD 54990 IANA-RSVD 54991 IANA-RSVD 54992 IANA-RSVD 54993 IANA-RSVD 54994 IANA-RSVD 54995 IANA-RSVD 54996 IANA-RSVD 54997 IANA-RSVD 54998 IANA-RSVD 54999 IANA-RSVD 55000 IANA-RSVD 55001 IANA-RSVD 55002 IANA-RSVD 55003 IANA-RSVD 55004 IANA-RSVD 55005 IANA-RSVD 55006 IANA-RSVD 55007 IANA-RSVD 55008 IANA-RSVD 55009 IANA-RSVD 55010 IANA-RSVD 55011 IANA-RSVD 55012 IANA-RSVD 55013 IANA-RSVD 55014 IANA-RSVD 55015 IANA-RSVD 55016 IANA-RSVD 55017 IANA-RSVD 55018 IANA-RSVD 55019 IANA-RSVD 55020 IANA-RSVD 55021 IANA-RSVD 55022 IANA-RSVD 55023 IANA-RSVD 55024 IANA-RSVD 55025 IANA-RSVD 55026 IANA-RSVD 55027 IANA-RSVD 55028 IANA-RSVD 55029 IANA-RSVD 55030 IANA-RSVD 55031 IANA-RSVD 55032 IANA-RSVD 55033 IANA-RSVD 55034 IANA-RSVD 55035 IANA-RSVD 55036 IANA-RSVD 55037 IANA-RSVD 55038 IANA-RSVD 55039 IANA-RSVD 55040 IANA-RSVD 55041 IANA-RSVD 55042 IANA-RSVD 55043 IANA-RSVD 55044 IANA-RSVD 55045 IANA-RSVD 55046 IANA-RSVD 55047 IANA-RSVD 55048 IANA-RSVD 55049 IANA-RSVD 55050 IANA-RSVD 55051 IANA-RSVD 55052 IANA-RSVD 55053 IANA-RSVD 55054 IANA-RSVD 55055 IANA-RSVD 55056 IANA-RSVD 55057 IANA-RSVD 55058 IANA-RSVD 55059 IANA-RSVD 55060 IANA-RSVD 55061 IANA-RSVD 55062 IANA-RSVD 55063 IANA-RSVD 55064 IANA-RSVD 55065 IANA-RSVD 55066 IANA-RSVD 55067 IANA-RSVD 55068 IANA-RSVD 55069 IANA-RSVD 55070 IANA-RSVD 55071 IANA-RSVD 55072 IANA-RSVD 55073 IANA-RSVD 55074 IANA-RSVD 55075 IANA-RSVD 55076 IANA-RSVD 55077 IANA-RSVD 55078 IANA-RSVD 55079 IANA-RSVD 55080 IANA-RSVD 55081 IANA-RSVD 55082 IANA-RSVD 55083 IANA-RSVD 55084 IANA-RSVD 55085 IANA-RSVD 55086 IANA-RSVD 55087 IANA-RSVD 55088 IANA-RSVD 55089 IANA-RSVD 55090 IANA-RSVD 55091 IANA-RSVD 55092 IANA-RSVD 55093 IANA-RSVD 55094 IANA-RSVD 55095 IANA-RSVD 55096 IANA-RSVD 55097 IANA-RSVD 55098 IANA-RSVD 55099 IANA-RSVD 55100 IANA-RSVD 55101 IANA-RSVD 55102 IANA-RSVD 55103 IANA-RSVD 55104 IANA-RSVD 55105 IANA-RSVD 55106 IANA-RSVD 55107 IANA-RSVD 55108 IANA-RSVD 55109 IANA-RSVD 55110 IANA-RSVD 55111 IANA-RSVD 55112 IANA-RSVD 55113 IANA-RSVD 55114 IANA-RSVD 55115 IANA-RSVD 55116 IANA-RSVD 55117 IANA-RSVD 55118 IANA-RSVD 55119 IANA-RSVD 55120 IANA-RSVD 55121 IANA-RSVD 55122 IANA-RSVD 55123 IANA-RSVD 55124 IANA-RSVD 55125 IANA-RSVD 55126 IANA-RSVD 55127 IANA-RSVD 55128 IANA-RSVD 55129 IANA-RSVD 55130 IANA-RSVD 55131 IANA-RSVD 55132 IANA-RSVD 55133 IANA-RSVD 55134 IANA-RSVD 55135 IANA-RSVD 55136 IANA-RSVD 55137 IANA-RSVD 55138 IANA-RSVD 55139 IANA-RSVD 55140 IANA-RSVD 55141 IANA-RSVD 55142 IANA-RSVD 55143 IANA-RSVD 55144 IANA-RSVD 55145 IANA-RSVD 55146 IANA-RSVD 55147 IANA-RSVD 55148 IANA-RSVD 55149 IANA-RSVD 55150 IANA-RSVD 55151 IANA-RSVD 55152 IANA-RSVD 55153 IANA-RSVD 55154 IANA-RSVD 55155 IANA-RSVD 55156 IANA-RSVD 55157 IANA-RSVD 55158 IANA-RSVD 55159 IANA-RSVD 55160 IANA-RSVD 55161 IANA-RSVD 55162 IANA-RSVD 55163 IANA-RSVD 55164 IANA-RSVD 55165 IANA-RSVD 55166 IANA-RSVD 55167 IANA-RSVD 55168 IANA-RSVD 55169 IANA-RSVD 55170 IANA-RSVD 55171 IANA-RSVD 55172 IANA-RSVD 55173 IANA-RSVD 55174 IANA-RSVD 55175 IANA-RSVD 55176 IANA-RSVD 55177 IANA-RSVD 55178 IANA-RSVD 55179 IANA-RSVD 55180 IANA-RSVD 55181 IANA-RSVD 55182 IANA-RSVD 55183 IANA-RSVD 55184 IANA-RSVD 55185 IANA-RSVD 55186 IANA-RSVD 55187 IANA-RSVD 55188 IANA-RSVD 55189 IANA-RSVD 55190 IANA-RSVD 55191 IANA-RSVD 55192 IANA-RSVD 55193 IANA-RSVD 55194 IANA-RSVD 55195 IANA-RSVD 55196 IANA-RSVD 55197 IANA-RSVD 55198 IANA-RSVD 55199 IANA-RSVD 55200 IANA-RSVD 55201 IANA-RSVD 55202 IANA-RSVD 55203 IANA-RSVD 55204 IANA-RSVD 55205 IANA-RSVD 55206 IANA-RSVD 55207 IANA-RSVD 55208 IANA-RSVD 55209 IANA-RSVD 55210 IANA-RSVD 55211 IANA-RSVD 55212 IANA-RSVD 55213 IANA-RSVD 55214 IANA-RSVD 55215 IANA-RSVD 55216 IANA-RSVD 55217 IANA-RSVD 55218 IANA-RSVD 55219 IANA-RSVD 55220 IANA-RSVD 55221 IANA-RSVD 55222 IANA-RSVD 55223 IANA-RSVD 55224 IANA-RSVD 55225 IANA-RSVD 55226 IANA-RSVD 55227 IANA-RSVD 55228 IANA-RSVD 55229 IANA-RSVD 55230 IANA-RSVD 55231 IANA-RSVD 55232 IANA-RSVD 55233 IANA-RSVD 55234 IANA-RSVD 55235 IANA-RSVD 55236 IANA-RSVD 55237 IANA-RSVD 55238 IANA-RSVD 55239 IANA-RSVD 55240 IANA-RSVD 55241 IANA-RSVD 55242 IANA-RSVD 55243 IANA-RSVD 55244 IANA-RSVD 55245 IANA-RSVD 55246 IANA-RSVD 55247 IANA-RSVD 55248 IANA-RSVD 55249 IANA-RSVD 55250 IANA-RSVD 55251 IANA-RSVD 55252 IANA-RSVD 55253 IANA-RSVD 55254 IANA-RSVD 55255 IANA-RSVD 55256 IANA-RSVD 55257 IANA-RSVD 55258 IANA-RSVD 55259 IANA-RSVD 55260 IANA-RSVD 55261 IANA-RSVD 55262 IANA-RSVD 55263 IANA-RSVD 55264 IANA-RSVD 55265 IANA-RSVD 55266 IANA-RSVD 55267 IANA-RSVD 55268 IANA-RSVD 55269 IANA-RSVD 55270 IANA-RSVD 55271 IANA-RSVD 55272 IANA-RSVD 55273 IANA-RSVD 55274 IANA-RSVD 55275 IANA-RSVD 55276 IANA-RSVD 55277 IANA-RSVD 55278 IANA-RSVD 55279 IANA-RSVD 55280 IANA-RSVD 55281 IANA-RSVD 55282 IANA-RSVD 55283 IANA-RSVD 55284 IANA-RSVD 55285 IANA-RSVD 55286 IANA-RSVD 55287 IANA-RSVD 55288 IANA-RSVD 55289 IANA-RSVD 55290 IANA-RSVD 55291 IANA-RSVD 55292 IANA-RSVD 55293 IANA-RSVD 55294 IANA-RSVD 55295 IANA-RSVD 55296 IANA-RSVD 55297 IANA-RSVD 55298 IANA-RSVD 55299 IANA-RSVD 55300 IANA-RSVD 55301 IANA-RSVD 55302 IANA-RSVD 55303 IANA-RSVD 55304 IANA-RSVD 55305 IANA-RSVD 55306 IANA-RSVD 55307 IANA-RSVD 55308 IANA-RSVD 55309 IANA-RSVD 55310 IANA-RSVD 55311 IANA-RSVD 55312 IANA-RSVD 55313 IANA-RSVD 55314 IANA-RSVD 55315 IANA-RSVD 55316 IANA-RSVD 55317 IANA-RSVD 55318 IANA-RSVD 55319 IANA-RSVD 55320 IANA-RSVD 55321 IANA-RSVD 55322 IANA-RSVD 55323 IANA-RSVD 55324 IANA-RSVD 55325 IANA-RSVD 55326 IANA-RSVD 55327 IANA-RSVD 55328 IANA-RSVD 55329 IANA-RSVD 55330 IANA-RSVD 55331 IANA-RSVD 55332 IANA-RSVD 55333 IANA-RSVD 55334 IANA-RSVD 55335 IANA-RSVD 55336 IANA-RSVD 55337 IANA-RSVD 55338 IANA-RSVD 55339 IANA-RSVD 55340 IANA-RSVD 55341 IANA-RSVD 55342 IANA-RSVD 55343 IANA-RSVD 55344 IANA-RSVD 55345 IANA-RSVD 55346 IANA-RSVD 55347 IANA-RSVD 55348 IANA-RSVD 55349 IANA-RSVD 55350 IANA-RSVD 55351 IANA-RSVD 55352 IANA-RSVD 55353 IANA-RSVD 55354 IANA-RSVD 55355 IANA-RSVD 55356 IANA-RSVD 55357 IANA-RSVD 55358 IANA-RSVD 55359 IANA-RSVD 55360 IANA-RSVD 55361 IANA-RSVD 55362 IANA-RSVD 55363 IANA-RSVD 55364 IANA-RSVD 55365 IANA-RSVD 55366 IANA-RSVD 55367 IANA-RSVD 55368 IANA-RSVD 55369 IANA-RSVD 55370 IANA-RSVD 55371 IANA-RSVD 55372 IANA-RSVD 55373 IANA-RSVD 55374 IANA-RSVD 55375 IANA-RSVD 55376 IANA-RSVD 55377 IANA-RSVD 55378 IANA-RSVD 55379 IANA-RSVD 55380 IANA-RSVD 55381 IANA-RSVD 55382 IANA-RSVD 55383 IANA-RSVD 55384 IANA-RSVD 55385 IANA-RSVD 55386 IANA-RSVD 55387 IANA-RSVD 55388 IANA-RSVD 55389 IANA-RSVD 55390 IANA-RSVD 55391 IANA-RSVD 55392 IANA-RSVD 55393 IANA-RSVD 55394 IANA-RSVD 55395 IANA-RSVD 55396 IANA-RSVD 55397 IANA-RSVD 55398 IANA-RSVD 55399 IANA-RSVD 55400 IANA-RSVD 55401 IANA-RSVD 55402 IANA-RSVD 55403 IANA-RSVD 55404 IANA-RSVD 55405 IANA-RSVD 55406 IANA-RSVD 55407 IANA-RSVD 55408 IANA-RSVD 55409 IANA-RSVD 55410 IANA-RSVD 55411 IANA-RSVD 55412 IANA-RSVD 55413 IANA-RSVD 55414 IANA-RSVD 55415 IANA-RSVD 55416 IANA-RSVD 55417 IANA-RSVD 55418 IANA-RSVD 55419 IANA-RSVD 55420 IANA-RSVD 55421 IANA-RSVD 55422 IANA-RSVD 55423 IANA-RSVD 55424 IANA-RSVD 55425 IANA-RSVD 55426 IANA-RSVD 55427 IANA-RSVD 55428 IANA-RSVD 55429 IANA-RSVD 55430 IANA-RSVD 55431 IANA-RSVD 55432 IANA-RSVD 55433 IANA-RSVD 55434 IANA-RSVD 55435 IANA-RSVD 55436 IANA-RSVD 55437 IANA-RSVD 55438 IANA-RSVD 55439 IANA-RSVD 55440 IANA-RSVD 55441 IANA-RSVD 55442 IANA-RSVD 55443 IANA-RSVD 55444 IANA-RSVD 55445 IANA-RSVD 55446 IANA-RSVD 55447 IANA-RSVD 55448 IANA-RSVD 55449 IANA-RSVD 55450 IANA-RSVD 55451 IANA-RSVD 55452 IANA-RSVD 55453 IANA-RSVD 55454 IANA-RSVD 55455 IANA-RSVD 55456 IANA-RSVD 55457 IANA-RSVD 55458 IANA-RSVD 55459 IANA-RSVD 55460 IANA-RSVD 55461 IANA-RSVD 55462 IANA-RSVD 55463 IANA-RSVD 55464 IANA-RSVD 55465 IANA-RSVD 55466 IANA-RSVD 55467 IANA-RSVD 55468 IANA-RSVD 55469 IANA-RSVD 55470 IANA-RSVD 55471 IANA-RSVD 55472 IANA-RSVD 55473 IANA-RSVD 55474 IANA-RSVD 55475 IANA-RSVD 55476 IANA-RSVD 55477 IANA-RSVD 55478 IANA-RSVD 55479 IANA-RSVD 55480 IANA-RSVD 55481 IANA-RSVD 55482 IANA-RSVD 55483 IANA-RSVD 55484 IANA-RSVD 55485 IANA-RSVD 55486 IANA-RSVD 55487 IANA-RSVD 55488 IANA-RSVD 55489 IANA-RSVD 55490 IANA-RSVD 55491 IANA-RSVD 55492 IANA-RSVD 55493 IANA-RSVD 55494 IANA-RSVD 55495 IANA-RSVD 55496 IANA-RSVD 55497 IANA-RSVD 55498 IANA-RSVD 55499 IANA-RSVD 55500 IANA-RSVD 55501 IANA-RSVD 55502 IANA-RSVD 55503 IANA-RSVD 55504 IANA-RSVD 55505 IANA-RSVD 55506 IANA-RSVD 55507 IANA-RSVD 55508 IANA-RSVD 55509 IANA-RSVD 55510 IANA-RSVD 55511 IANA-RSVD 55512 IANA-RSVD 55513 IANA-RSVD 55514 IANA-RSVD 55515 IANA-RSVD 55516 IANA-RSVD 55517 IANA-RSVD 55518 IANA-RSVD 55519 IANA-RSVD 55520 IANA-RSVD 55521 IANA-RSVD 55522 IANA-RSVD 55523 IANA-RSVD 55524 IANA-RSVD 55525 IANA-RSVD 55526 IANA-RSVD 55527 IANA-RSVD 55528 IANA-RSVD 55529 IANA-RSVD 55530 IANA-RSVD 55531 IANA-RSVD 55532 IANA-RSVD 55533 IANA-RSVD 55534 IANA-RSVD 55535 IANA-RSVD 55536 IANA-RSVD 55537 IANA-RSVD 55538 IANA-RSVD 55539 IANA-RSVD 55540 IANA-RSVD 55541 IANA-RSVD 55542 IANA-RSVD 55543 IANA-RSVD 55544 IANA-RSVD 55545 IANA-RSVD 55546 IANA-RSVD 55547 IANA-RSVD 55548 IANA-RSVD 55549 IANA-RSVD 55550 IANA-RSVD 55551 IANA-RSVD 55552 IANA-RSVD 55553 IANA-RSVD 55554 IANA-RSVD 55555 IANA-RSVD 55556 IANA-RSVD 55557 IANA-RSVD 55558 IANA-RSVD 55559 IANA-RSVD 55560 IANA-RSVD 55561 IANA-RSVD 55562 IANA-RSVD 55563 IANA-RSVD 55564 IANA-RSVD 55565 IANA-RSVD 55566 IANA-RSVD 55567 IANA-RSVD 55568 IANA-RSVD 55569 IANA-RSVD 55570 IANA-RSVD 55571 IANA-RSVD 55572 IANA-RSVD 55573 IANA-RSVD 55574 IANA-RSVD 55575 IANA-RSVD 55576 IANA-RSVD 55577 IANA-RSVD 55578 IANA-RSVD 55579 IANA-RSVD 55580 IANA-RSVD 55581 IANA-RSVD 55582 IANA-RSVD 55583 IANA-RSVD 55584 IANA-RSVD 55585 IANA-RSVD 55586 IANA-RSVD 55587 IANA-RSVD 55588 IANA-RSVD 55589 IANA-RSVD 55590 IANA-RSVD 55591 IANA-RSVD 55592 IANA-RSVD 55593 IANA-RSVD 55594 IANA-RSVD 55595 IANA-RSVD 55596 IANA-RSVD 55597 IANA-RSVD 55598 IANA-RSVD 55599 IANA-RSVD 55600 IANA-RSVD 55601 IANA-RSVD 55602 IANA-RSVD 55603 IANA-RSVD 55604 IANA-RSVD 55605 IANA-RSVD 55606 IANA-RSVD 55607 IANA-RSVD 55608 IANA-RSVD 55609 IANA-RSVD 55610 IANA-RSVD 55611 IANA-RSVD 55612 IANA-RSVD 55613 IANA-RSVD 55614 IANA-RSVD 55615 IANA-RSVD 55616 IANA-RSVD 55617 IANA-RSVD 55618 IANA-RSVD 55619 IANA-RSVD 55620 IANA-RSVD 55621 IANA-RSVD 55622 IANA-RSVD 55623 IANA-RSVD 55624 IANA-RSVD 55625 IANA-RSVD 55626 IANA-RSVD 55627 IANA-RSVD 55628 IANA-RSVD 55629 IANA-RSVD 55630 IANA-RSVD 55631 IANA-RSVD 55632 IANA-RSVD 55633 IANA-RSVD 55634 IANA-RSVD 55635 IANA-RSVD 55636 IANA-RSVD 55637 IANA-RSVD 55638 IANA-RSVD 55639 IANA-RSVD 55640 IANA-RSVD 55641 IANA-RSVD 55642 IANA-RSVD 55643 IANA-RSVD 55644 IANA-RSVD 55645 IANA-RSVD 55646 IANA-RSVD 55647 IANA-RSVD 55648 IANA-RSVD 55649 IANA-RSVD 55650 IANA-RSVD 55651 IANA-RSVD 55652 IANA-RSVD 55653 IANA-RSVD 55654 IANA-RSVD 55655 IANA-RSVD 55656 IANA-RSVD 55657 IANA-RSVD 55658 IANA-RSVD 55659 IANA-RSVD 55660 IANA-RSVD 55661 IANA-RSVD 55662 IANA-RSVD 55663 IANA-RSVD 55664 IANA-RSVD 55665 IANA-RSVD 55666 IANA-RSVD 55667 IANA-RSVD 55668 IANA-RSVD 55669 IANA-RSVD 55670 IANA-RSVD 55671 IANA-RSVD 55672 IANA-RSVD 55673 IANA-RSVD 55674 IANA-RSVD 55675 IANA-RSVD 55676 IANA-RSVD 55677 IANA-RSVD 55678 IANA-RSVD 55679 IANA-RSVD 55680 IANA-RSVD 55681 IANA-RSVD 55682 IANA-RSVD 55683 IANA-RSVD 55684 IANA-RSVD 55685 IANA-RSVD 55686 IANA-RSVD 55687 IANA-RSVD 55688 IANA-RSVD 55689 IANA-RSVD 55690 IANA-RSVD 55691 IANA-RSVD 55692 IANA-RSVD 55693 IANA-RSVD 55694 IANA-RSVD 55695 IANA-RSVD 55696 IANA-RSVD 55697 IANA-RSVD 55698 IANA-RSVD 55699 IANA-RSVD 55700 IANA-RSVD 55701 IANA-RSVD 55702 IANA-RSVD 55703 IANA-RSVD 55704 IANA-RSVD 55705 IANA-RSVD 55706 IANA-RSVD 55707 IANA-RSVD 55708 IANA-RSVD 55709 IANA-RSVD 55710 IANA-RSVD 55711 IANA-RSVD 55712 IANA-RSVD 55713 IANA-RSVD 55714 IANA-RSVD 55715 IANA-RSVD 55716 IANA-RSVD 55717 IANA-RSVD 55718 IANA-RSVD 55719 IANA-RSVD 55720 IANA-RSVD 55721 IANA-RSVD 55722 IANA-RSVD 55723 IANA-RSVD 55724 IANA-RSVD 55725 IANA-RSVD 55726 IANA-RSVD 55727 IANA-RSVD 55728 IANA-RSVD 55729 IANA-RSVD 55730 IANA-RSVD 55731 IANA-RSVD 55732 IANA-RSVD 55733 IANA-RSVD 55734 IANA-RSVD 55735 IANA-RSVD 55736 IANA-RSVD 55737 IANA-RSVD 55738 IANA-RSVD 55739 IANA-RSVD 55740 IANA-RSVD 55741 IANA-RSVD 55742 IANA-RSVD 55743 IANA-RSVD 55744 IANA-RSVD 55745 IANA-RSVD 55746 IANA-RSVD 55747 IANA-RSVD 55748 IANA-RSVD 55749 IANA-RSVD 55750 IANA-RSVD 55751 IANA-RSVD 55752 IANA-RSVD 55753 IANA-RSVD 55754 IANA-RSVD 55755 IANA-RSVD 55756 IANA-RSVD 55757 IANA-RSVD 55758 IANA-RSVD 55759 IANA-RSVD 55760 IANA-RSVD 55761 IANA-RSVD 55762 IANA-RSVD 55763 IANA-RSVD 55764 IANA-RSVD 55765 IANA-RSVD 55766 IANA-RSVD 55767 IANA-RSVD 55768 IANA-RSVD 55769 IANA-RSVD 55770 IANA-RSVD 55771 IANA-RSVD 55772 IANA-RSVD 55773 IANA-RSVD 55774 IANA-RSVD 55775 IANA-RSVD 55776 IANA-RSVD 55777 IANA-RSVD 55778 IANA-RSVD 55779 IANA-RSVD 55780 IANA-RSVD 55781 IANA-RSVD 55782 IANA-RSVD 55783 IANA-RSVD 55784 IANA-RSVD 55785 IANA-RSVD 55786 IANA-RSVD 55787 IANA-RSVD 55788 IANA-RSVD 55789 IANA-RSVD 55790 IANA-RSVD 55791 IANA-RSVD 55792 IANA-RSVD 55793 IANA-RSVD 55794 IANA-RSVD 55795 IANA-RSVD 55796 IANA-RSVD 55797 IANA-RSVD 55798 IANA-RSVD 55799 IANA-RSVD 55800 IANA-RSVD 55801 IANA-RSVD 55802 IANA-RSVD 55803 IANA-RSVD 55804 IANA-RSVD 55805 IANA-RSVD 55806 IANA-RSVD 55807 IANA-RSVD 55808 IANA-RSVD 55809 IANA-RSVD 55810 IANA-RSVD 55811 IANA-RSVD 55812 IANA-RSVD 55813 IANA-RSVD 55814 IANA-RSVD 55815 IANA-RSVD 55816 IANA-RSVD 55817 IANA-RSVD 55818 IANA-RSVD 55819 IANA-RSVD 55820 IANA-RSVD 55821 IANA-RSVD 55822 IANA-RSVD 55823 IANA-RSVD 55824 IANA-RSVD 55825 IANA-RSVD 55826 IANA-RSVD 55827 IANA-RSVD 55828 IANA-RSVD 55829 IANA-RSVD 55830 IANA-RSVD 55831 IANA-RSVD 55832 IANA-RSVD 55833 IANA-RSVD 55834 IANA-RSVD 55835 IANA-RSVD 55836 IANA-RSVD 55837 IANA-RSVD 55838 IANA-RSVD 55839 IANA-RSVD 55840 IANA-RSVD 55841 IANA-RSVD 55842 IANA-RSVD 55843 IANA-RSVD 55844 IANA-RSVD 55845 IANA-RSVD 55846 IANA-RSVD 55847 IANA-RSVD 55848 IANA-RSVD 55849 IANA-RSVD 55850 IANA-RSVD 55851 IANA-RSVD 55852 IANA-RSVD 55853 IANA-RSVD 55854 IANA-RSVD 55855 IANA-RSVD 55856 IANA-RSVD 55857 IANA-RSVD 55858 IANA-RSVD 55859 IANA-RSVD 55860 IANA-RSVD 55861 IANA-RSVD 55862 IANA-RSVD 55863 IANA-RSVD 55864 IANA-RSVD 55865 IANA-RSVD 55866 IANA-RSVD 55867 IANA-RSVD 55868 IANA-RSVD 55869 IANA-RSVD 55870 IANA-RSVD 55871 IANA-RSVD 55872 IANA-RSVD 55873 IANA-RSVD 55874 IANA-RSVD 55875 IANA-RSVD 55876 IANA-RSVD 55877 IANA-RSVD 55878 IANA-RSVD 55879 IANA-RSVD 55880 IANA-RSVD 55881 IANA-RSVD 55882 IANA-RSVD 55883 IANA-RSVD 55884 IANA-RSVD 55885 IANA-RSVD 55886 IANA-RSVD 55887 IANA-RSVD 55888 IANA-RSVD 55889 IANA-RSVD 55890 IANA-RSVD 55891 IANA-RSVD 55892 IANA-RSVD 55893 IANA-RSVD 55894 IANA-RSVD 55895 IANA-RSVD 55896 IANA-RSVD 55897 IANA-RSVD 55898 IANA-RSVD 55899 IANA-RSVD 55900 IANA-RSVD 55901 IANA-RSVD 55902 IANA-RSVD 55903 IANA-RSVD 55904 IANA-RSVD 55905 IANA-RSVD 55906 IANA-RSVD 55907 IANA-RSVD 55908 IANA-RSVD 55909 IANA-RSVD 55910 IANA-RSVD 55911 IANA-RSVD 55912 IANA-RSVD 55913 IANA-RSVD 55914 IANA-RSVD 55915 IANA-RSVD 55916 IANA-RSVD 55917 IANA-RSVD 55918 IANA-RSVD 55919 IANA-RSVD 55920 IANA-RSVD 55921 IANA-RSVD 55922 IANA-RSVD 55923 IANA-RSVD 55924 IANA-RSVD 55925 IANA-RSVD 55926 IANA-RSVD 55927 IANA-RSVD 55928 IANA-RSVD 55929 IANA-RSVD 55930 IANA-RSVD 55931 IANA-RSVD 55932 IANA-RSVD 55933 IANA-RSVD 55934 IANA-RSVD 55935 IANA-RSVD 55936 IANA-RSVD 55937 IANA-RSVD 55938 IANA-RSVD 55939 IANA-RSVD 55940 IANA-RSVD 55941 IANA-RSVD 55942 IANA-RSVD 55943 IANA-RSVD 55944 IANA-RSVD 55945 IANA-RSVD 55946 IANA-RSVD 55947 IANA-RSVD 55948 IANA-RSVD 55949 IANA-RSVD 55950 IANA-RSVD 55951 IANA-RSVD 55952 IANA-RSVD 55953 IANA-RSVD 55954 IANA-RSVD 55955 IANA-RSVD 55956 IANA-RSVD 55957 IANA-RSVD 55958 IANA-RSVD 55959 IANA-RSVD 55960 IANA-RSVD 55961 IANA-RSVD 55962 IANA-RSVD 55963 IANA-RSVD 55964 IANA-RSVD 55965 IANA-RSVD 55966 IANA-RSVD 55967 IANA-RSVD 55968 IANA-RSVD 55969 IANA-RSVD 55970 IANA-RSVD 55971 IANA-RSVD 55972 IANA-RSVD 55973 IANA-RSVD 55974 IANA-RSVD 55975 IANA-RSVD 55976 IANA-RSVD 55977 IANA-RSVD 55978 IANA-RSVD 55979 IANA-RSVD 55980 IANA-RSVD 55981 IANA-RSVD 55982 IANA-RSVD 55983 IANA-RSVD 55984 IANA-RSVD 55985 IANA-RSVD 55986 IANA-RSVD 55987 IANA-RSVD 55988 IANA-RSVD 55989 IANA-RSVD 55990 IANA-RSVD 55991 IANA-RSVD 55992 IANA-RSVD 55993 IANA-RSVD 55994 IANA-RSVD 55995 IANA-RSVD 55996 IANA-RSVD 55997 IANA-RSVD 55998 IANA-RSVD 55999 IANA-RSVD 56000 IANA-RSVD 56001 IANA-RSVD 56002 IANA-RSVD 56003 IANA-RSVD 56004 IANA-RSVD 56005 IANA-RSVD 56006 IANA-RSVD 56007 IANA-RSVD 56008 IANA-RSVD 56009 IANA-RSVD 56010 IANA-RSVD 56011 IANA-RSVD 56012 IANA-RSVD 56013 IANA-RSVD 56014 IANA-RSVD 56015 IANA-RSVD 56016 IANA-RSVD 56017 IANA-RSVD 56018 IANA-RSVD 56019 IANA-RSVD 56020 IANA-RSVD 56021 IANA-RSVD 56022 IANA-RSVD 56023 IANA-RSVD 56024 IANA-RSVD 56025 IANA-RSVD 56026 IANA-RSVD 56027 IANA-RSVD 56028 IANA-RSVD 56029 IANA-RSVD 56030 IANA-RSVD 56031 IANA-RSVD 56032 IANA-RSVD 56033 IANA-RSVD 56034 IANA-RSVD 56035 IANA-RSVD 56036 IANA-RSVD 56037 IANA-RSVD 56038 IANA-RSVD 56039 IANA-RSVD 56040 IANA-RSVD 56041 IANA-RSVD 56042 IANA-RSVD 56043 IANA-RSVD 56044 IANA-RSVD 56045 IANA-RSVD 56046 IANA-RSVD 56047 IANA-RSVD 56048 IANA-RSVD 56049 IANA-RSVD 56050 IANA-RSVD 56051 IANA-RSVD 56052 IANA-RSVD 56053 IANA-RSVD 56054 IANA-RSVD 56055 IANA-RSVD 56056 IANA-RSVD 56057 IANA-RSVD 56058 IANA-RSVD 56059 IANA-RSVD 56060 IANA-RSVD 56061 IANA-RSVD 56062 IANA-RSVD 56063 IANA-RSVD 56064 IANA-RSVD 56065 IANA-RSVD 56066 IANA-RSVD 56067 IANA-RSVD 56068 IANA-RSVD 56069 IANA-RSVD 56070 IANA-RSVD 56071 IANA-RSVD 56072 IANA-RSVD 56073 IANA-RSVD 56074 IANA-RSVD 56075 IANA-RSVD 56076 IANA-RSVD 56077 IANA-RSVD 56078 IANA-RSVD 56079 IANA-RSVD 56080 IANA-RSVD 56081 IANA-RSVD 56082 IANA-RSVD 56083 IANA-RSVD 56084 IANA-RSVD 56085 IANA-RSVD 56086 IANA-RSVD 56087 IANA-RSVD 56088 IANA-RSVD 56089 IANA-RSVD 56090 IANA-RSVD 56091 IANA-RSVD 56092 IANA-RSVD 56093 IANA-RSVD 56094 IANA-RSVD 56095 IANA-RSVD 56096 IANA-RSVD 56097 IANA-RSVD 56098 IANA-RSVD 56099 IANA-RSVD 56100 IANA-RSVD 56101 IANA-RSVD 56102 IANA-RSVD 56103 IANA-RSVD 56104 IANA-RSVD 56105 IANA-RSVD 56106 IANA-RSVD 56107 IANA-RSVD 56108 IANA-RSVD 56109 IANA-RSVD 56110 IANA-RSVD 56111 IANA-RSVD 56112 IANA-RSVD 56113 IANA-RSVD 56114 IANA-RSVD 56115 IANA-RSVD 56116 IANA-RSVD 56117 IANA-RSVD 56118 IANA-RSVD 56119 IANA-RSVD 56120 IANA-RSVD 56121 IANA-RSVD 56122 IANA-RSVD 56123 IANA-RSVD 56124 IANA-RSVD 56125 IANA-RSVD 56126 IANA-RSVD 56127 IANA-RSVD 56128 IANA-RSVD 56129 IANA-RSVD 56130 IANA-RSVD 56131 IANA-RSVD 56132 IANA-RSVD 56133 IANA-RSVD 56134 IANA-RSVD 56135 IANA-RSVD 56136 IANA-RSVD 56137 IANA-RSVD 56138 IANA-RSVD 56139 IANA-RSVD 56140 IANA-RSVD 56141 IANA-RSVD 56142 IANA-RSVD 56143 IANA-RSVD 56144 IANA-RSVD 56145 IANA-RSVD 56146 IANA-RSVD 56147 IANA-RSVD 56148 IANA-RSVD 56149 IANA-RSVD 56150 IANA-RSVD 56151 IANA-RSVD 56152 IANA-RSVD 56153 IANA-RSVD 56154 IANA-RSVD 56155 IANA-RSVD 56156 IANA-RSVD 56157 IANA-RSVD 56158 IANA-RSVD 56159 IANA-RSVD 56160 IANA-RSVD 56161 IANA-RSVD 56162 IANA-RSVD 56163 IANA-RSVD 56164 IANA-RSVD 56165 IANA-RSVD 56166 IANA-RSVD 56167 IANA-RSVD 56168 IANA-RSVD 56169 IANA-RSVD 56170 IANA-RSVD 56171 IANA-RSVD 56172 IANA-RSVD 56173 IANA-RSVD 56174 IANA-RSVD 56175 IANA-RSVD 56176 IANA-RSVD 56177 IANA-RSVD 56178 IANA-RSVD 56179 IANA-RSVD 56180 IANA-RSVD 56181 IANA-RSVD 56182 IANA-RSVD 56183 IANA-RSVD 56184 IANA-RSVD 56185 IANA-RSVD 56186 IANA-RSVD 56187 IANA-RSVD 56188 IANA-RSVD 56189 IANA-RSVD 56190 IANA-RSVD 56191 IANA-RSVD 56192 IANA-RSVD 56193 IANA-RSVD 56194 IANA-RSVD 56195 IANA-RSVD 56196 IANA-RSVD 56197 IANA-RSVD 56198 IANA-RSVD 56199 IANA-RSVD 56200 IANA-RSVD 56201 IANA-RSVD 56202 IANA-RSVD 56203 IANA-RSVD 56204 IANA-RSVD 56205 IANA-RSVD 56206 IANA-RSVD 56207 IANA-RSVD 56208 IANA-RSVD 56209 IANA-RSVD 56210 IANA-RSVD 56211 IANA-RSVD 56212 IANA-RSVD 56213 IANA-RSVD 56214 IANA-RSVD 56215 IANA-RSVD 56216 IANA-RSVD 56217 IANA-RSVD 56218 IANA-RSVD 56219 IANA-RSVD 56220 IANA-RSVD 56221 IANA-RSVD 56222 IANA-RSVD 56223 IANA-RSVD 56224 IANA-RSVD 56225 IANA-RSVD 56226 IANA-RSVD 56227 IANA-RSVD 56228 IANA-RSVD 56229 IANA-RSVD 56230 IANA-RSVD 56231 IANA-RSVD 56232 IANA-RSVD 56233 IANA-RSVD 56234 IANA-RSVD 56235 IANA-RSVD 56236 IANA-RSVD 56237 IANA-RSVD 56238 IANA-RSVD 56239 IANA-RSVD 56240 IANA-RSVD 56241 IANA-RSVD 56242 IANA-RSVD 56243 IANA-RSVD 56244 IANA-RSVD 56245 IANA-RSVD 56246 IANA-RSVD 56247 IANA-RSVD 56248 IANA-RSVD 56249 IANA-RSVD 56250 IANA-RSVD 56251 IANA-RSVD 56252 IANA-RSVD 56253 IANA-RSVD 56254 IANA-RSVD 56255 IANA-RSVD 56256 IANA-RSVD 56257 IANA-RSVD 56258 IANA-RSVD 56259 IANA-RSVD 56260 IANA-RSVD 56261 IANA-RSVD 56262 IANA-RSVD 56263 IANA-RSVD 56264 IANA-RSVD 56265 IANA-RSVD 56266 IANA-RSVD 56267 IANA-RSVD 56268 IANA-RSVD 56269 IANA-RSVD 56270 IANA-RSVD 56271 IANA-RSVD 56272 IANA-RSVD 56273 IANA-RSVD 56274 IANA-RSVD 56275 IANA-RSVD 56276 IANA-RSVD 56277 IANA-RSVD 56278 IANA-RSVD 56279 IANA-RSVD 56280 IANA-RSVD 56281 IANA-RSVD 56282 IANA-RSVD 56283 IANA-RSVD 56284 IANA-RSVD 56285 IANA-RSVD 56286 IANA-RSVD 56287 IANA-RSVD 56288 IANA-RSVD 56289 IANA-RSVD 56290 IANA-RSVD 56291 IANA-RSVD 56292 IANA-RSVD 56293 IANA-RSVD 56294 IANA-RSVD 56295 IANA-RSVD 56296 IANA-RSVD 56297 IANA-RSVD 56298 IANA-RSVD 56299 IANA-RSVD 56300 IANA-RSVD 56301 IANA-RSVD 56302 IANA-RSVD 56303 IANA-RSVD 56304 IANA-RSVD 56305 IANA-RSVD 56306 IANA-RSVD 56307 IANA-RSVD 56308 IANA-RSVD 56309 IANA-RSVD 56310 IANA-RSVD 56311 IANA-RSVD 56312 IANA-RSVD 56313 IANA-RSVD 56314 IANA-RSVD 56315 IANA-RSVD 56316 IANA-RSVD 56317 IANA-RSVD 56318 IANA-RSVD 56319 IANA-RSVD 56320 IANA-RSVD 56321 IANA-RSVD 56322 IANA-RSVD 56323 IANA-RSVD 56324 IANA-RSVD 56325 IANA-RSVD 56326 IANA-RSVD 56327 IANA-RSVD 56328 IANA-RSVD 56329 IANA-RSVD 56330 IANA-RSVD 56331 IANA-RSVD 56332 IANA-RSVD 56333 IANA-RSVD 56334 IANA-RSVD 56335 IANA-RSVD 56336 IANA-RSVD 56337 IANA-RSVD 56338 IANA-RSVD 56339 IANA-RSVD 56340 IANA-RSVD 56341 IANA-RSVD 56342 IANA-RSVD 56343 IANA-RSVD 56344 IANA-RSVD 56345 IANA-RSVD 56346 IANA-RSVD 56347 IANA-RSVD 56348 IANA-RSVD 56349 IANA-RSVD 56350 IANA-RSVD 56351 IANA-RSVD 56352 IANA-RSVD 56353 IANA-RSVD 56354 IANA-RSVD 56355 IANA-RSVD 56356 IANA-RSVD 56357 IANA-RSVD 56358 IANA-RSVD 56359 IANA-RSVD 56360 IANA-RSVD 56361 IANA-RSVD 56362 IANA-RSVD 56363 IANA-RSVD 56364 IANA-RSVD 56365 IANA-RSVD 56366 IANA-RSVD 56367 IANA-RSVD 56368 IANA-RSVD 56369 IANA-RSVD 56370 IANA-RSVD 56371 IANA-RSVD 56372 IANA-RSVD 56373 IANA-RSVD 56374 IANA-RSVD 56375 IANA-RSVD 56376 IANA-RSVD 56377 IANA-RSVD 56378 IANA-RSVD 56379 IANA-RSVD 56380 IANA-RSVD 56381 IANA-RSVD 56382 IANA-RSVD 56383 IANA-RSVD 56384 IANA-RSVD 56385 IANA-RSVD 56386 IANA-RSVD 56387 IANA-RSVD 56388 IANA-RSVD 56389 IANA-RSVD 56390 IANA-RSVD 56391 IANA-RSVD 56392 IANA-RSVD 56393 IANA-RSVD 56394 IANA-RSVD 56395 IANA-RSVD 56396 IANA-RSVD 56397 IANA-RSVD 56398 IANA-RSVD 56399 IANA-RSVD 56400 IANA-RSVD 56401 IANA-RSVD 56402 IANA-RSVD 56403 IANA-RSVD 56404 IANA-RSVD 56405 IANA-RSVD 56406 IANA-RSVD 56407 IANA-RSVD 56408 IANA-RSVD 56409 IANA-RSVD 56410 IANA-RSVD 56411 IANA-RSVD 56412 IANA-RSVD 56413 IANA-RSVD 56414 IANA-RSVD 56415 IANA-RSVD 56416 IANA-RSVD 56417 IANA-RSVD 56418 IANA-RSVD 56419 IANA-RSVD 56420 IANA-RSVD 56421 IANA-RSVD 56422 IANA-RSVD 56423 IANA-RSVD 56424 IANA-RSVD 56425 IANA-RSVD 56426 IANA-RSVD 56427 IANA-RSVD 56428 IANA-RSVD 56429 IANA-RSVD 56430 IANA-RSVD 56431 IANA-RSVD 56432 IANA-RSVD 56433 IANA-RSVD 56434 IANA-RSVD 56435 IANA-RSVD 56436 IANA-RSVD 56437 IANA-RSVD 56438 IANA-RSVD 56439 IANA-RSVD 56440 IANA-RSVD 56441 IANA-RSVD 56442 IANA-RSVD 56443 IANA-RSVD 56444 IANA-RSVD 56445 IANA-RSVD 56446 IANA-RSVD 56447 IANA-RSVD 56448 IANA-RSVD 56449 IANA-RSVD 56450 IANA-RSVD 56451 IANA-RSVD 56452 IANA-RSVD 56453 IANA-RSVD 56454 IANA-RSVD 56455 IANA-RSVD 56456 IANA-RSVD 56457 IANA-RSVD 56458 IANA-RSVD 56459 IANA-RSVD 56460 IANA-RSVD 56461 IANA-RSVD 56462 IANA-RSVD 56463 IANA-RSVD 56464 IANA-RSVD 56465 IANA-RSVD 56466 IANA-RSVD 56467 IANA-RSVD 56468 IANA-RSVD 56469 IANA-RSVD 56470 IANA-RSVD 56471 IANA-RSVD 56472 IANA-RSVD 56473 IANA-RSVD 56474 IANA-RSVD 56475 IANA-RSVD 56476 IANA-RSVD 56477 IANA-RSVD 56478 IANA-RSVD 56479 IANA-RSVD 56480 IANA-RSVD 56481 IANA-RSVD 56482 IANA-RSVD 56483 IANA-RSVD 56484 IANA-RSVD 56485 IANA-RSVD 56486 IANA-RSVD 56487 IANA-RSVD 56488 IANA-RSVD 56489 IANA-RSVD 56490 IANA-RSVD 56491 IANA-RSVD 56492 IANA-RSVD 56493 IANA-RSVD 56494 IANA-RSVD 56495 IANA-RSVD 56496 IANA-RSVD 56497 IANA-RSVD 56498 IANA-RSVD 56499 IANA-RSVD 56500 IANA-RSVD 56501 IANA-RSVD 56502 IANA-RSVD 56503 IANA-RSVD 56504 IANA-RSVD 56505 IANA-RSVD 56506 IANA-RSVD 56507 IANA-RSVD 56508 IANA-RSVD 56509 IANA-RSVD 56510 IANA-RSVD 56511 IANA-RSVD 56512 IANA-RSVD 56513 IANA-RSVD 56514 IANA-RSVD 56515 IANA-RSVD 56516 IANA-RSVD 56517 IANA-RSVD 56518 IANA-RSVD 56519 IANA-RSVD 56520 IANA-RSVD 56521 IANA-RSVD 56522 IANA-RSVD 56523 IANA-RSVD 56524 IANA-RSVD 56525 IANA-RSVD 56526 IANA-RSVD 56527 IANA-RSVD 56528 IANA-RSVD 56529 IANA-RSVD 56530 IANA-RSVD 56531 IANA-RSVD 56532 IANA-RSVD 56533 IANA-RSVD 56534 IANA-RSVD 56535 IANA-RSVD 56536 IANA-RSVD 56537 IANA-RSVD 56538 IANA-RSVD 56539 IANA-RSVD 56540 IANA-RSVD 56541 IANA-RSVD 56542 IANA-RSVD 56543 IANA-RSVD 56544 IANA-RSVD 56545 IANA-RSVD 56546 IANA-RSVD 56547 IANA-RSVD 56548 IANA-RSVD 56549 IANA-RSVD 56550 IANA-RSVD 56551 IANA-RSVD 56552 IANA-RSVD 56553 IANA-RSVD 56554 IANA-RSVD 56555 IANA-RSVD 56556 IANA-RSVD 56557 IANA-RSVD 56558 IANA-RSVD 56559 IANA-RSVD 56560 IANA-RSVD 56561 IANA-RSVD 56562 IANA-RSVD 56563 IANA-RSVD 56564 IANA-RSVD 56565 IANA-RSVD 56566 IANA-RSVD 56567 IANA-RSVD 56568 IANA-RSVD 56569 IANA-RSVD 56570 IANA-RSVD 56571 IANA-RSVD 56572 IANA-RSVD 56573 IANA-RSVD 56574 IANA-RSVD 56575 IANA-RSVD 56576 IANA-RSVD 56577 IANA-RSVD 56578 IANA-RSVD 56579 IANA-RSVD 56580 IANA-RSVD 56581 IANA-RSVD 56582 IANA-RSVD 56583 IANA-RSVD 56584 IANA-RSVD 56585 IANA-RSVD 56586 IANA-RSVD 56587 IANA-RSVD 56588 IANA-RSVD 56589 IANA-RSVD 56590 IANA-RSVD 56591 IANA-RSVD 56592 IANA-RSVD 56593 IANA-RSVD 56594 IANA-RSVD 56595 IANA-RSVD 56596 IANA-RSVD 56597 IANA-RSVD 56598 IANA-RSVD 56599 IANA-RSVD 56600 IANA-RSVD 56601 IANA-RSVD 56602 IANA-RSVD 56603 IANA-RSVD 56604 IANA-RSVD 56605 IANA-RSVD 56606 IANA-RSVD 56607 IANA-RSVD 56608 IANA-RSVD 56609 IANA-RSVD 56610 IANA-RSVD 56611 IANA-RSVD 56612 IANA-RSVD 56613 IANA-RSVD 56614 IANA-RSVD 56615 IANA-RSVD 56616 IANA-RSVD 56617 IANA-RSVD 56618 IANA-RSVD 56619 IANA-RSVD 56620 IANA-RSVD 56621 IANA-RSVD 56622 IANA-RSVD 56623 IANA-RSVD 56624 IANA-RSVD 56625 IANA-RSVD 56626 IANA-RSVD 56627 IANA-RSVD 56628 IANA-RSVD 56629 IANA-RSVD 56630 IANA-RSVD 56631 IANA-RSVD 56632 IANA-RSVD 56633 IANA-RSVD 56634 IANA-RSVD 56635 IANA-RSVD 56636 IANA-RSVD 56637 IANA-RSVD 56638 IANA-RSVD 56639 IANA-RSVD 56640 IANA-RSVD 56641 IANA-RSVD 56642 IANA-RSVD 56643 IANA-RSVD 56644 IANA-RSVD 56645 IANA-RSVD 56646 IANA-RSVD 56647 IANA-RSVD 56648 IANA-RSVD 56649 IANA-RSVD 56650 IANA-RSVD 56651 IANA-RSVD 56652 IANA-RSVD 56653 IANA-RSVD 56654 IANA-RSVD 56655 IANA-RSVD 56656 IANA-RSVD 56657 IANA-RSVD 56658 IANA-RSVD 56659 IANA-RSVD 56660 IANA-RSVD 56661 IANA-RSVD 56662 IANA-RSVD 56663 IANA-RSVD 56664 IANA-RSVD 56665 IANA-RSVD 56666 IANA-RSVD 56667 IANA-RSVD 56668 IANA-RSVD 56669 IANA-RSVD 56670 IANA-RSVD 56671 IANA-RSVD 56672 IANA-RSVD 56673 IANA-RSVD 56674 IANA-RSVD 56675 IANA-RSVD 56676 IANA-RSVD 56677 IANA-RSVD 56678 IANA-RSVD 56679 IANA-RSVD 56680 IANA-RSVD 56681 IANA-RSVD 56682 IANA-RSVD 56683 IANA-RSVD 56684 IANA-RSVD 56685 IANA-RSVD 56686 IANA-RSVD 56687 IANA-RSVD 56688 IANA-RSVD 56689 IANA-RSVD 56690 IANA-RSVD 56691 IANA-RSVD 56692 IANA-RSVD 56693 IANA-RSVD 56694 IANA-RSVD 56695 IANA-RSVD 56696 IANA-RSVD 56697 IANA-RSVD 56698 IANA-RSVD 56699 IANA-RSVD 56700 IANA-RSVD 56701 IANA-RSVD 56702 IANA-RSVD 56703 IANA-RSVD 56704 IANA-RSVD 56705 IANA-RSVD 56706 IANA-RSVD 56707 IANA-RSVD 56708 IANA-RSVD 56709 IANA-RSVD 56710 IANA-RSVD 56711 IANA-RSVD 56712 IANA-RSVD 56713 IANA-RSVD 56714 IANA-RSVD 56715 IANA-RSVD 56716 IANA-RSVD 56717 IANA-RSVD 56718 IANA-RSVD 56719 IANA-RSVD 56720 IANA-RSVD 56721 IANA-RSVD 56722 IANA-RSVD 56723 IANA-RSVD 56724 IANA-RSVD 56725 IANA-RSVD 56726 IANA-RSVD 56727 IANA-RSVD 56728 IANA-RSVD 56729 IANA-RSVD 56730 IANA-RSVD 56731 IANA-RSVD 56732 IANA-RSVD 56733 IANA-RSVD 56734 IANA-RSVD 56735 IANA-RSVD 56736 IANA-RSVD 56737 IANA-RSVD 56738 IANA-RSVD 56739 IANA-RSVD 56740 IANA-RSVD 56741 IANA-RSVD 56742 IANA-RSVD 56743 IANA-RSVD 56744 IANA-RSVD 56745 IANA-RSVD 56746 IANA-RSVD 56747 IANA-RSVD 56748 IANA-RSVD 56749 IANA-RSVD 56750 IANA-RSVD 56751 IANA-RSVD 56752 IANA-RSVD 56753 IANA-RSVD 56754 IANA-RSVD 56755 IANA-RSVD 56756 IANA-RSVD 56757 IANA-RSVD 56758 IANA-RSVD 56759 IANA-RSVD 56760 IANA-RSVD 56761 IANA-RSVD 56762 IANA-RSVD 56763 IANA-RSVD 56764 IANA-RSVD 56765 IANA-RSVD 56766 IANA-RSVD 56767 IANA-RSVD 56768 IANA-RSVD 56769 IANA-RSVD 56770 IANA-RSVD 56771 IANA-RSVD 56772 IANA-RSVD 56773 IANA-RSVD 56774 IANA-RSVD 56775 IANA-RSVD 56776 IANA-RSVD 56777 IANA-RSVD 56778 IANA-RSVD 56779 IANA-RSVD 56780 IANA-RSVD 56781 IANA-RSVD 56782 IANA-RSVD 56783 IANA-RSVD 56784 IANA-RSVD 56785 IANA-RSVD 56786 IANA-RSVD 56787 IANA-RSVD 56788 IANA-RSVD 56789 IANA-RSVD 56790 IANA-RSVD 56791 IANA-RSVD 56792 IANA-RSVD 56793 IANA-RSVD 56794 IANA-RSVD 56795 IANA-RSVD 56796 IANA-RSVD 56797 IANA-RSVD 56798 IANA-RSVD 56799 IANA-RSVD 56800 IANA-RSVD 56801 IANA-RSVD 56802 IANA-RSVD 56803 IANA-RSVD 56804 IANA-RSVD 56805 IANA-RSVD 56806 IANA-RSVD 56807 IANA-RSVD 56808 IANA-RSVD 56809 IANA-RSVD 56810 IANA-RSVD 56811 IANA-RSVD 56812 IANA-RSVD 56813 IANA-RSVD 56814 IANA-RSVD 56815 IANA-RSVD 56816 IANA-RSVD 56817 IANA-RSVD 56818 IANA-RSVD 56819 IANA-RSVD 56820 IANA-RSVD 56821 IANA-RSVD 56822 IANA-RSVD 56823 IANA-RSVD 56824 IANA-RSVD 56825 IANA-RSVD 56826 IANA-RSVD 56827 IANA-RSVD 56828 IANA-RSVD 56829 IANA-RSVD 56830 IANA-RSVD 56831 IANA-RSVD 56832 IANA-RSVD 56833 IANA-RSVD 56834 IANA-RSVD 56835 IANA-RSVD 56836 IANA-RSVD 56837 IANA-RSVD 56838 IANA-RSVD 56839 IANA-RSVD 56840 IANA-RSVD 56841 IANA-RSVD 56842 IANA-RSVD 56843 IANA-RSVD 56844 IANA-RSVD 56845 IANA-RSVD 56846 IANA-RSVD 56847 IANA-RSVD 56848 IANA-RSVD 56849 IANA-RSVD 56850 IANA-RSVD 56851 IANA-RSVD 56852 IANA-RSVD 56853 IANA-RSVD 56854 IANA-RSVD 56855 IANA-RSVD 56856 IANA-RSVD 56857 IANA-RSVD 56858 IANA-RSVD 56859 IANA-RSVD 56860 IANA-RSVD 56861 IANA-RSVD 56862 IANA-RSVD 56863 IANA-RSVD 56864 IANA-RSVD 56865 IANA-RSVD 56866 IANA-RSVD 56867 IANA-RSVD 56868 IANA-RSVD 56869 IANA-RSVD 56870 IANA-RSVD 56871 IANA-RSVD 56872 IANA-RSVD 56873 IANA-RSVD 56874 IANA-RSVD 56875 IANA-RSVD 56876 IANA-RSVD 56877 IANA-RSVD 56878 IANA-RSVD 56879 IANA-RSVD 56880 IANA-RSVD 56881 IANA-RSVD 56882 IANA-RSVD 56883 IANA-RSVD 56884 IANA-RSVD 56885 IANA-RSVD 56886 IANA-RSVD 56887 IANA-RSVD 56888 IANA-RSVD 56889 IANA-RSVD 56890 IANA-RSVD 56891 IANA-RSVD 56892 IANA-RSVD 56893 IANA-RSVD 56894 IANA-RSVD 56895 IANA-RSVD 56896 IANA-RSVD 56897 IANA-RSVD 56898 IANA-RSVD 56899 IANA-RSVD 56900 IANA-RSVD 56901 IANA-RSVD 56902 IANA-RSVD 56903 IANA-RSVD 56904 IANA-RSVD 56905 IANA-RSVD 56906 IANA-RSVD 56907 IANA-RSVD 56908 IANA-RSVD 56909 IANA-RSVD 56910 IANA-RSVD 56911 IANA-RSVD 56912 IANA-RSVD 56913 IANA-RSVD 56914 IANA-RSVD 56915 IANA-RSVD 56916 IANA-RSVD 56917 IANA-RSVD 56918 IANA-RSVD 56919 IANA-RSVD 56920 IANA-RSVD 56921 IANA-RSVD 56922 IANA-RSVD 56923 IANA-RSVD 56924 IANA-RSVD 56925 IANA-RSVD 56926 IANA-RSVD 56927 IANA-RSVD 56928 IANA-RSVD 56929 IANA-RSVD 56930 IANA-RSVD 56931 IANA-RSVD 56932 IANA-RSVD 56933 IANA-RSVD 56934 IANA-RSVD 56935 IANA-RSVD 56936 IANA-RSVD 56937 IANA-RSVD 56938 IANA-RSVD 56939 IANA-RSVD 56940 IANA-RSVD 56941 IANA-RSVD 56942 IANA-RSVD 56943 IANA-RSVD 56944 IANA-RSVD 56945 IANA-RSVD 56946 IANA-RSVD 56947 IANA-RSVD 56948 IANA-RSVD 56949 IANA-RSVD 56950 IANA-RSVD 56951 IANA-RSVD 56952 IANA-RSVD 56953 IANA-RSVD 56954 IANA-RSVD 56955 IANA-RSVD 56956 IANA-RSVD 56957 IANA-RSVD 56958 IANA-RSVD 56959 IANA-RSVD 56960 IANA-RSVD 56961 IANA-RSVD 56962 IANA-RSVD 56963 IANA-RSVD 56964 IANA-RSVD 56965 IANA-RSVD 56966 IANA-RSVD 56967 IANA-RSVD 56968 IANA-RSVD 56969 IANA-RSVD 56970 IANA-RSVD 56971 IANA-RSVD 56972 IANA-RSVD 56973 IANA-RSVD 56974 IANA-RSVD 56975 IANA-RSVD 56976 IANA-RSVD 56977 IANA-RSVD 56978 IANA-RSVD 56979 IANA-RSVD 56980 IANA-RSVD 56981 IANA-RSVD 56982 IANA-RSVD 56983 IANA-RSVD 56984 IANA-RSVD 56985 IANA-RSVD 56986 IANA-RSVD 56987 IANA-RSVD 56988 IANA-RSVD 56989 IANA-RSVD 56990 IANA-RSVD 56991 IANA-RSVD 56992 IANA-RSVD 56993 IANA-RSVD 56994 IANA-RSVD 56995 IANA-RSVD 56996 IANA-RSVD 56997 IANA-RSVD 56998 IANA-RSVD 56999 IANA-RSVD 57000 IANA-RSVD 57001 IANA-RSVD 57002 IANA-RSVD 57003 IANA-RSVD 57004 IANA-RSVD 57005 IANA-RSVD 57006 IANA-RSVD 57007 IANA-RSVD 57008 IANA-RSVD 57009 IANA-RSVD 57010 IANA-RSVD 57011 IANA-RSVD 57012 IANA-RSVD 57013 IANA-RSVD 57014 IANA-RSVD 57015 IANA-RSVD 57016 IANA-RSVD 57017 IANA-RSVD 57018 IANA-RSVD 57019 IANA-RSVD 57020 IANA-RSVD 57021 IANA-RSVD 57022 IANA-RSVD 57023 IANA-RSVD 57024 IANA-RSVD 57025 IANA-RSVD 57026 IANA-RSVD 57027 IANA-RSVD 57028 IANA-RSVD 57029 IANA-RSVD 57030 IANA-RSVD 57031 IANA-RSVD 57032 IANA-RSVD 57033 IANA-RSVD 57034 IANA-RSVD 57035 IANA-RSVD 57036 IANA-RSVD 57037 IANA-RSVD 57038 IANA-RSVD 57039 IANA-RSVD 57040 IANA-RSVD 57041 IANA-RSVD 57042 IANA-RSVD 57043 IANA-RSVD 57044 IANA-RSVD 57045 IANA-RSVD 57046 IANA-RSVD 57047 IANA-RSVD 57048 IANA-RSVD 57049 IANA-RSVD 57050 IANA-RSVD 57051 IANA-RSVD 57052 IANA-RSVD 57053 IANA-RSVD 57054 IANA-RSVD 57055 IANA-RSVD 57056 IANA-RSVD 57057 IANA-RSVD 57058 IANA-RSVD 57059 IANA-RSVD 57060 IANA-RSVD 57061 IANA-RSVD 57062 IANA-RSVD 57063 IANA-RSVD 57064 IANA-RSVD 57065 IANA-RSVD 57066 IANA-RSVD 57067 IANA-RSVD 57068 IANA-RSVD 57069 IANA-RSVD 57070 IANA-RSVD 57071 IANA-RSVD 57072 IANA-RSVD 57073 IANA-RSVD 57074 IANA-RSVD 57075 IANA-RSVD 57076 IANA-RSVD 57077 IANA-RSVD 57078 IANA-RSVD 57079 IANA-RSVD 57080 IANA-RSVD 57081 IANA-RSVD 57082 IANA-RSVD 57083 IANA-RSVD 57084 IANA-RSVD 57085 IANA-RSVD 57086 IANA-RSVD 57087 IANA-RSVD 57088 IANA-RSVD 57089 IANA-RSVD 57090 IANA-RSVD 57091 IANA-RSVD 57092 IANA-RSVD 57093 IANA-RSVD 57094 IANA-RSVD 57095 IANA-RSVD 57096 IANA-RSVD 57097 IANA-RSVD 57098 IANA-RSVD 57099 IANA-RSVD 57100 IANA-RSVD 57101 IANA-RSVD 57102 IANA-RSVD 57103 IANA-RSVD 57104 IANA-RSVD 57105 IANA-RSVD 57106 IANA-RSVD 57107 IANA-RSVD 57108 IANA-RSVD 57109 IANA-RSVD 57110 IANA-RSVD 57111 IANA-RSVD 57112 IANA-RSVD 57113 IANA-RSVD 57114 IANA-RSVD 57115 IANA-RSVD 57116 IANA-RSVD 57117 IANA-RSVD 57118 IANA-RSVD 57119 IANA-RSVD 57120 IANA-RSVD 57121 IANA-RSVD 57122 IANA-RSVD 57123 IANA-RSVD 57124 IANA-RSVD 57125 IANA-RSVD 57126 IANA-RSVD 57127 IANA-RSVD 57128 IANA-RSVD 57129 IANA-RSVD 57130 IANA-RSVD 57131 IANA-RSVD 57132 IANA-RSVD 57133 IANA-RSVD 57134 IANA-RSVD 57135 IANA-RSVD 57136 IANA-RSVD 57137 IANA-RSVD 57138 IANA-RSVD 57139 IANA-RSVD 57140 IANA-RSVD 57141 IANA-RSVD 57142 IANA-RSVD 57143 IANA-RSVD 57144 IANA-RSVD 57145 IANA-RSVD 57146 IANA-RSVD 57147 IANA-RSVD 57148 IANA-RSVD 57149 IANA-RSVD 57150 IANA-RSVD 57151 IANA-RSVD 57152 IANA-RSVD 57153 IANA-RSVD 57154 IANA-RSVD 57155 IANA-RSVD 57156 IANA-RSVD 57157 IANA-RSVD 57158 IANA-RSVD 57159 IANA-RSVD 57160 IANA-RSVD 57161 IANA-RSVD 57162 IANA-RSVD 57163 IANA-RSVD 57164 IANA-RSVD 57165 IANA-RSVD 57166 IANA-RSVD 57167 IANA-RSVD 57168 IANA-RSVD 57169 IANA-RSVD 57170 IANA-RSVD 57171 IANA-RSVD 57172 IANA-RSVD 57173 IANA-RSVD 57174 IANA-RSVD 57175 IANA-RSVD 57176 IANA-RSVD 57177 IANA-RSVD 57178 IANA-RSVD 57179 IANA-RSVD 57180 IANA-RSVD 57181 IANA-RSVD 57182 IANA-RSVD 57183 IANA-RSVD 57184 IANA-RSVD 57185 IANA-RSVD 57186 IANA-RSVD 57187 IANA-RSVD 57188 IANA-RSVD 57189 IANA-RSVD 57190 IANA-RSVD 57191 IANA-RSVD 57192 IANA-RSVD 57193 IANA-RSVD 57194 IANA-RSVD 57195 IANA-RSVD 57196 IANA-RSVD 57197 IANA-RSVD 57198 IANA-RSVD 57199 IANA-RSVD 57200 IANA-RSVD 57201 IANA-RSVD 57202 IANA-RSVD 57203 IANA-RSVD 57204 IANA-RSVD 57205 IANA-RSVD 57206 IANA-RSVD 57207 IANA-RSVD 57208 IANA-RSVD 57209 IANA-RSVD 57210 IANA-RSVD 57211 IANA-RSVD 57212 IANA-RSVD 57213 IANA-RSVD 57214 IANA-RSVD 57215 IANA-RSVD 57216 IANA-RSVD 57217 IANA-RSVD 57218 IANA-RSVD 57219 IANA-RSVD 57220 IANA-RSVD 57221 IANA-RSVD 57222 IANA-RSVD 57223 IANA-RSVD 57224 IANA-RSVD 57225 IANA-RSVD 57226 IANA-RSVD 57227 IANA-RSVD 57228 IANA-RSVD 57229 IANA-RSVD 57230 IANA-RSVD 57231 IANA-RSVD 57232 IANA-RSVD 57233 IANA-RSVD 57234 IANA-RSVD 57235 IANA-RSVD 57236 IANA-RSVD 57237 IANA-RSVD 57238 IANA-RSVD 57239 IANA-RSVD 57240 IANA-RSVD 57241 IANA-RSVD 57242 IANA-RSVD 57243 IANA-RSVD 57244 IANA-RSVD 57245 IANA-RSVD 57246 IANA-RSVD 57247 IANA-RSVD 57248 IANA-RSVD 57249 IANA-RSVD 57250 IANA-RSVD 57251 IANA-RSVD 57252 IANA-RSVD 57253 IANA-RSVD 57254 IANA-RSVD 57255 IANA-RSVD 57256 IANA-RSVD 57257 IANA-RSVD 57258 IANA-RSVD 57259 IANA-RSVD 57260 IANA-RSVD 57261 IANA-RSVD 57262 IANA-RSVD 57263 IANA-RSVD 57264 IANA-RSVD 57265 IANA-RSVD 57266 IANA-RSVD 57267 IANA-RSVD 57268 IANA-RSVD 57269 IANA-RSVD 57270 IANA-RSVD 57271 IANA-RSVD 57272 IANA-RSVD 57273 IANA-RSVD 57274 IANA-RSVD 57275 IANA-RSVD 57276 IANA-RSVD 57277 IANA-RSVD 57278 IANA-RSVD 57279 IANA-RSVD 57280 IANA-RSVD 57281 IANA-RSVD 57282 IANA-RSVD 57283 IANA-RSVD 57284 IANA-RSVD 57285 IANA-RSVD 57286 IANA-RSVD 57287 IANA-RSVD 57288 IANA-RSVD 57289 IANA-RSVD 57290 IANA-RSVD 57291 IANA-RSVD 57292 IANA-RSVD 57293 IANA-RSVD 57294 IANA-RSVD 57295 IANA-RSVD 57296 IANA-RSVD 57297 IANA-RSVD 57298 IANA-RSVD 57299 IANA-RSVD 57300 IANA-RSVD 57301 IANA-RSVD 57302 IANA-RSVD 57303 IANA-RSVD 57304 IANA-RSVD 57305 IANA-RSVD 57306 IANA-RSVD 57307 IANA-RSVD 57308 IANA-RSVD 57309 IANA-RSVD 57310 IANA-RSVD 57311 IANA-RSVD 57312 IANA-RSVD 57313 IANA-RSVD 57314 IANA-RSVD 57315 IANA-RSVD 57316 IANA-RSVD 57317 IANA-RSVD 57318 IANA-RSVD 57319 IANA-RSVD 57320 IANA-RSVD 57321 IANA-RSVD 57322 IANA-RSVD 57323 IANA-RSVD 57324 IANA-RSVD 57325 IANA-RSVD 57326 IANA-RSVD 57327 IANA-RSVD 57328 IANA-RSVD 57329 IANA-RSVD 57330 IANA-RSVD 57331 IANA-RSVD 57332 IANA-RSVD 57333 IANA-RSVD 57334 IANA-RSVD 57335 IANA-RSVD 57336 IANA-RSVD 57337 IANA-RSVD 57338 IANA-RSVD 57339 IANA-RSVD 57340 IANA-RSVD 57341 IANA-RSVD 57342 IANA-RSVD 57343 IANA-RSVD 57344 IANA-RSVD 57345 IANA-RSVD 57346 IANA-RSVD 57347 IANA-RSVD 57348 IANA-RSVD 57349 IANA-RSVD 57350 IANA-RSVD 57351 IANA-RSVD 57352 IANA-RSVD 57353 IANA-RSVD 57354 IANA-RSVD 57355 IANA-RSVD 57356 IANA-RSVD 57357 IANA-RSVD 57358 IANA-RSVD 57359 IANA-RSVD 57360 IANA-RSVD 57361 IANA-RSVD 57362 IANA-RSVD 57363 IANA-RSVD 57364 IANA-RSVD 57365 IANA-RSVD 57366 IANA-RSVD 57367 IANA-RSVD 57368 IANA-RSVD 57369 IANA-RSVD 57370 IANA-RSVD 57371 IANA-RSVD 57372 IANA-RSVD 57373 IANA-RSVD 57374 IANA-RSVD 57375 IANA-RSVD 57376 IANA-RSVD 57377 IANA-RSVD 57378 IANA-RSVD 57379 IANA-RSVD 57380 IANA-RSVD 57381 IANA-RSVD 57382 IANA-RSVD 57383 IANA-RSVD 57384 IANA-RSVD 57385 IANA-RSVD 57386 IANA-RSVD 57387 IANA-RSVD 57388 IANA-RSVD 57389 IANA-RSVD 57390 IANA-RSVD 57391 IANA-RSVD 57392 IANA-RSVD 57393 IANA-RSVD 57394 IANA-RSVD 57395 IANA-RSVD 57396 IANA-RSVD 57397 IANA-RSVD 57398 IANA-RSVD 57399 IANA-RSVD 57400 IANA-RSVD 57401 IANA-RSVD 57402 IANA-RSVD 57403 IANA-RSVD 57404 IANA-RSVD 57405 IANA-RSVD 57406 IANA-RSVD 57407 IANA-RSVD 57408 IANA-RSVD 57409 IANA-RSVD 57410 IANA-RSVD 57411 IANA-RSVD 57412 IANA-RSVD 57413 IANA-RSVD 57414 IANA-RSVD 57415 IANA-RSVD 57416 IANA-RSVD 57417 IANA-RSVD 57418 IANA-RSVD 57419 IANA-RSVD 57420 IANA-RSVD 57421 IANA-RSVD 57422 IANA-RSVD 57423 IANA-RSVD 57424 IANA-RSVD 57425 IANA-RSVD 57426 IANA-RSVD 57427 IANA-RSVD 57428 IANA-RSVD 57429 IANA-RSVD 57430 IANA-RSVD 57431 IANA-RSVD 57432 IANA-RSVD 57433 IANA-RSVD 57434 IANA-RSVD 57435 IANA-RSVD 57436 IANA-RSVD 57437 IANA-RSVD 57438 IANA-RSVD 57439 IANA-RSVD 57440 IANA-RSVD 57441 IANA-RSVD 57442 IANA-RSVD 57443 IANA-RSVD 57444 IANA-RSVD 57445 IANA-RSVD 57446 IANA-RSVD 57447 IANA-RSVD 57448 IANA-RSVD 57449 IANA-RSVD 57450 IANA-RSVD 57451 IANA-RSVD 57452 IANA-RSVD 57453 IANA-RSVD 57454 IANA-RSVD 57455 IANA-RSVD 57456 IANA-RSVD 57457 IANA-RSVD 57458 IANA-RSVD 57459 IANA-RSVD 57460 IANA-RSVD 57461 IANA-RSVD 57462 IANA-RSVD 57463 IANA-RSVD 57464 IANA-RSVD 57465 IANA-RSVD 57466 IANA-RSVD 57467 IANA-RSVD 57468 IANA-RSVD 57469 IANA-RSVD 57470 IANA-RSVD 57471 IANA-RSVD 57472 IANA-RSVD 57473 IANA-RSVD 57474 IANA-RSVD 57475 IANA-RSVD 57476 IANA-RSVD 57477 IANA-RSVD 57478 IANA-RSVD 57479 IANA-RSVD 57480 IANA-RSVD 57481 IANA-RSVD 57482 IANA-RSVD 57483 IANA-RSVD 57484 IANA-RSVD 57485 IANA-RSVD 57486 IANA-RSVD 57487 IANA-RSVD 57488 IANA-RSVD 57489 IANA-RSVD 57490 IANA-RSVD 57491 IANA-RSVD 57492 IANA-RSVD 57493 IANA-RSVD 57494 IANA-RSVD 57495 IANA-RSVD 57496 IANA-RSVD 57497 IANA-RSVD 57498 IANA-RSVD 57499 IANA-RSVD 57500 IANA-RSVD 57501 IANA-RSVD 57502 IANA-RSVD 57503 IANA-RSVD 57504 IANA-RSVD 57505 IANA-RSVD 57506 IANA-RSVD 57507 IANA-RSVD 57508 IANA-RSVD 57509 IANA-RSVD 57510 IANA-RSVD 57511 IANA-RSVD 57512 IANA-RSVD 57513 IANA-RSVD 57514 IANA-RSVD 57515 IANA-RSVD 57516 IANA-RSVD 57517 IANA-RSVD 57518 IANA-RSVD 57519 IANA-RSVD 57520 IANA-RSVD 57521 IANA-RSVD 57522 IANA-RSVD 57523 IANA-RSVD 57524 IANA-RSVD 57525 IANA-RSVD 57526 IANA-RSVD 57527 IANA-RSVD 57528 IANA-RSVD 57529 IANA-RSVD 57530 IANA-RSVD 57531 IANA-RSVD 57532 IANA-RSVD 57533 IANA-RSVD 57534 IANA-RSVD 57535 IANA-RSVD 57536 IANA-RSVD 57537 IANA-RSVD 57538 IANA-RSVD 57539 IANA-RSVD 57540 IANA-RSVD 57541 IANA-RSVD 57542 IANA-RSVD 57543 IANA-RSVD 57544 IANA-RSVD 57545 IANA-RSVD 57546 IANA-RSVD 57547 IANA-RSVD 57548 IANA-RSVD 57549 IANA-RSVD 57550 IANA-RSVD 57551 IANA-RSVD 57552 IANA-RSVD 57553 IANA-RSVD 57554 IANA-RSVD 57555 IANA-RSVD 57556 IANA-RSVD 57557 IANA-RSVD 57558 IANA-RSVD 57559 IANA-RSVD 57560 IANA-RSVD 57561 IANA-RSVD 57562 IANA-RSVD 57563 IANA-RSVD 57564 IANA-RSVD 57565 IANA-RSVD 57566 IANA-RSVD 57567 IANA-RSVD 57568 IANA-RSVD 57569 IANA-RSVD 57570 IANA-RSVD 57571 IANA-RSVD 57572 IANA-RSVD 57573 IANA-RSVD 57574 IANA-RSVD 57575 IANA-RSVD 57576 IANA-RSVD 57577 IANA-RSVD 57578 IANA-RSVD 57579 IANA-RSVD 57580 IANA-RSVD 57581 IANA-RSVD 57582 IANA-RSVD 57583 IANA-RSVD 57584 IANA-RSVD 57585 IANA-RSVD 57586 IANA-RSVD 57587 IANA-RSVD 57588 IANA-RSVD 57589 IANA-RSVD 57590 IANA-RSVD 57591 IANA-RSVD 57592 IANA-RSVD 57593 IANA-RSVD 57594 IANA-RSVD 57595 IANA-RSVD 57596 IANA-RSVD 57597 IANA-RSVD 57598 IANA-RSVD 57599 IANA-RSVD 57600 IANA-RSVD 57601 IANA-RSVD 57602 IANA-RSVD 57603 IANA-RSVD 57604 IANA-RSVD 57605 IANA-RSVD 57606 IANA-RSVD 57607 IANA-RSVD 57608 IANA-RSVD 57609 IANA-RSVD 57610 IANA-RSVD 57611 IANA-RSVD 57612 IANA-RSVD 57613 IANA-RSVD 57614 IANA-RSVD 57615 IANA-RSVD 57616 IANA-RSVD 57617 IANA-RSVD 57618 IANA-RSVD 57619 IANA-RSVD 57620 IANA-RSVD 57621 IANA-RSVD 57622 IANA-RSVD 57623 IANA-RSVD 57624 IANA-RSVD 57625 IANA-RSVD 57626 IANA-RSVD 57627 IANA-RSVD 57628 IANA-RSVD 57629 IANA-RSVD 57630 IANA-RSVD 57631 IANA-RSVD 57632 IANA-RSVD 57633 IANA-RSVD 57634 IANA-RSVD 57635 IANA-RSVD 57636 IANA-RSVD 57637 IANA-RSVD 57638 IANA-RSVD 57639 IANA-RSVD 57640 IANA-RSVD 57641 IANA-RSVD 57642 IANA-RSVD 57643 IANA-RSVD 57644 IANA-RSVD 57645 IANA-RSVD 57646 IANA-RSVD 57647 IANA-RSVD 57648 IANA-RSVD 57649 IANA-RSVD 57650 IANA-RSVD 57651 IANA-RSVD 57652 IANA-RSVD 57653 IANA-RSVD 57654 IANA-RSVD 57655 IANA-RSVD 57656 IANA-RSVD 57657 IANA-RSVD 57658 IANA-RSVD 57659 IANA-RSVD 57660 IANA-RSVD 57661 IANA-RSVD 57662 IANA-RSVD 57663 IANA-RSVD 57664 IANA-RSVD 57665 IANA-RSVD 57666 IANA-RSVD 57667 IANA-RSVD 57668 IANA-RSVD 57669 IANA-RSVD 57670 IANA-RSVD 57671 IANA-RSVD 57672 IANA-RSVD 57673 IANA-RSVD 57674 IANA-RSVD 57675 IANA-RSVD 57676 IANA-RSVD 57677 IANA-RSVD 57678 IANA-RSVD 57679 IANA-RSVD 57680 IANA-RSVD 57681 IANA-RSVD 57682 IANA-RSVD 57683 IANA-RSVD 57684 IANA-RSVD 57685 IANA-RSVD 57686 IANA-RSVD 57687 IANA-RSVD 57688 IANA-RSVD 57689 IANA-RSVD 57690 IANA-RSVD 57691 IANA-RSVD 57692 IANA-RSVD 57693 IANA-RSVD 57694 IANA-RSVD 57695 IANA-RSVD 57696 IANA-RSVD 57697 IANA-RSVD 57698 IANA-RSVD 57699 IANA-RSVD 57700 IANA-RSVD 57701 IANA-RSVD 57702 IANA-RSVD 57703 IANA-RSVD 57704 IANA-RSVD 57705 IANA-RSVD 57706 IANA-RSVD 57707 IANA-RSVD 57708 IANA-RSVD 57709 IANA-RSVD 57710 IANA-RSVD 57711 IANA-RSVD 57712 IANA-RSVD 57713 IANA-RSVD 57714 IANA-RSVD 57715 IANA-RSVD 57716 IANA-RSVD 57717 IANA-RSVD 57718 IANA-RSVD 57719 IANA-RSVD 57720 IANA-RSVD 57721 IANA-RSVD 57722 IANA-RSVD 57723 IANA-RSVD 57724 IANA-RSVD 57725 IANA-RSVD 57726 IANA-RSVD 57727 IANA-RSVD 57728 IANA-RSVD 57729 IANA-RSVD 57730 IANA-RSVD 57731 IANA-RSVD 57732 IANA-RSVD 57733 IANA-RSVD 57734 IANA-RSVD 57735 IANA-RSVD 57736 IANA-RSVD 57737 IANA-RSVD 57738 IANA-RSVD 57739 IANA-RSVD 57740 IANA-RSVD 57741 IANA-RSVD 57742 IANA-RSVD 57743 IANA-RSVD 57744 IANA-RSVD 57745 IANA-RSVD 57746 IANA-RSVD 57747 IANA-RSVD 57748 IANA-RSVD 57749 IANA-RSVD 57750 IANA-RSVD 57751 IANA-RSVD 57752 IANA-RSVD 57753 IANA-RSVD 57754 IANA-RSVD 57755 IANA-RSVD 57756 IANA-RSVD 57757 IANA-RSVD 57758 IANA-RSVD 57759 IANA-RSVD 57760 IANA-RSVD 57761 IANA-RSVD 57762 IANA-RSVD 57763 IANA-RSVD 57764 IANA-RSVD 57765 IANA-RSVD 57766 IANA-RSVD 57767 IANA-RSVD 57768 IANA-RSVD 57769 IANA-RSVD 57770 IANA-RSVD 57771 IANA-RSVD 57772 IANA-RSVD 57773 IANA-RSVD 57774 IANA-RSVD 57775 IANA-RSVD 57776 IANA-RSVD 57777 IANA-RSVD 57778 IANA-RSVD 57779 IANA-RSVD 57780 IANA-RSVD 57781 IANA-RSVD 57782 IANA-RSVD 57783 IANA-RSVD 57784 IANA-RSVD 57785 IANA-RSVD 57786 IANA-RSVD 57787 IANA-RSVD 57788 IANA-RSVD 57789 IANA-RSVD 57790 IANA-RSVD 57791 IANA-RSVD 57792 IANA-RSVD 57793 IANA-RSVD 57794 IANA-RSVD 57795 IANA-RSVD 57796 IANA-RSVD 57797 IANA-RSVD 57798 IANA-RSVD 57799 IANA-RSVD 57800 IANA-RSVD 57801 IANA-RSVD 57802 IANA-RSVD 57803 IANA-RSVD 57804 IANA-RSVD 57805 IANA-RSVD 57806 IANA-RSVD 57807 IANA-RSVD 57808 IANA-RSVD 57809 IANA-RSVD 57810 IANA-RSVD 57811 IANA-RSVD 57812 IANA-RSVD 57813 IANA-RSVD 57814 IANA-RSVD 57815 IANA-RSVD 57816 IANA-RSVD 57817 IANA-RSVD 57818 IANA-RSVD 57819 IANA-RSVD 57820 IANA-RSVD 57821 IANA-RSVD 57822 IANA-RSVD 57823 IANA-RSVD 57824 IANA-RSVD 57825 IANA-RSVD 57826 IANA-RSVD 57827 IANA-RSVD 57828 IANA-RSVD 57829 IANA-RSVD 57830 IANA-RSVD 57831 IANA-RSVD 57832 IANA-RSVD 57833 IANA-RSVD 57834 IANA-RSVD 57835 IANA-RSVD 57836 IANA-RSVD 57837 IANA-RSVD 57838 IANA-RSVD 57839 IANA-RSVD 57840 IANA-RSVD 57841 IANA-RSVD 57842 IANA-RSVD 57843 IANA-RSVD 57844 IANA-RSVD 57845 IANA-RSVD 57846 IANA-RSVD 57847 IANA-RSVD 57848 IANA-RSVD 57849 IANA-RSVD 57850 IANA-RSVD 57851 IANA-RSVD 57852 IANA-RSVD 57853 IANA-RSVD 57854 IANA-RSVD 57855 IANA-RSVD 57856 IANA-RSVD 57857 IANA-RSVD 57858 IANA-RSVD 57859 IANA-RSVD 57860 IANA-RSVD 57861 IANA-RSVD 57862 IANA-RSVD 57863 IANA-RSVD 57864 IANA-RSVD 57865 IANA-RSVD 57866 IANA-RSVD 57867 IANA-RSVD 57868 IANA-RSVD 57869 IANA-RSVD 57870 IANA-RSVD 57871 IANA-RSVD 57872 IANA-RSVD 57873 IANA-RSVD 57874 IANA-RSVD 57875 IANA-RSVD 57876 IANA-RSVD 57877 IANA-RSVD 57878 IANA-RSVD 57879 IANA-RSVD 57880 IANA-RSVD 57881 IANA-RSVD 57882 IANA-RSVD 57883 IANA-RSVD 57884 IANA-RSVD 57885 IANA-RSVD 57886 IANA-RSVD 57887 IANA-RSVD 57888 IANA-RSVD 57889 IANA-RSVD 57890 IANA-RSVD 57891 IANA-RSVD 57892 IANA-RSVD 57893 IANA-RSVD 57894 IANA-RSVD 57895 IANA-RSVD 57896 IANA-RSVD 57897 IANA-RSVD 57898 IANA-RSVD 57899 IANA-RSVD 57900 IANA-RSVD 57901 IANA-RSVD 57902 IANA-RSVD 57903 IANA-RSVD 57904 IANA-RSVD 57905 IANA-RSVD 57906 IANA-RSVD 57907 IANA-RSVD 57908 IANA-RSVD 57909 IANA-RSVD 57910 IANA-RSVD 57911 IANA-RSVD 57912 IANA-RSVD 57913 IANA-RSVD 57914 IANA-RSVD 57915 IANA-RSVD 57916 IANA-RSVD 57917 IANA-RSVD 57918 IANA-RSVD 57919 IANA-RSVD 57920 IANA-RSVD 57921 IANA-RSVD 57922 IANA-RSVD 57923 IANA-RSVD 57924 IANA-RSVD 57925 IANA-RSVD 57926 IANA-RSVD 57927 IANA-RSVD 57928 IANA-RSVD 57929 IANA-RSVD 57930 IANA-RSVD 57931 IANA-RSVD 57932 IANA-RSVD 57933 IANA-RSVD 57934 IANA-RSVD 57935 IANA-RSVD 57936 IANA-RSVD 57937 IANA-RSVD 57938 IANA-RSVD 57939 IANA-RSVD 57940 IANA-RSVD 57941 IANA-RSVD 57942 IANA-RSVD 57943 IANA-RSVD 57944 IANA-RSVD 57945 IANA-RSVD 57946 IANA-RSVD 57947 IANA-RSVD 57948 IANA-RSVD 57949 IANA-RSVD 57950 IANA-RSVD 57951 IANA-RSVD 57952 IANA-RSVD 57953 IANA-RSVD 57954 IANA-RSVD 57955 IANA-RSVD 57956 IANA-RSVD 57957 IANA-RSVD 57958 IANA-RSVD 57959 IANA-RSVD 57960 IANA-RSVD 57961 IANA-RSVD 57962 IANA-RSVD 57963 IANA-RSVD 57964 IANA-RSVD 57965 IANA-RSVD 57966 IANA-RSVD 57967 IANA-RSVD 57968 IANA-RSVD 57969 IANA-RSVD 57970 IANA-RSVD 57971 IANA-RSVD 57972 IANA-RSVD 57973 IANA-RSVD 57974 IANA-RSVD 57975 IANA-RSVD 57976 IANA-RSVD 57977 IANA-RSVD 57978 IANA-RSVD 57979 IANA-RSVD 57980 IANA-RSVD 57981 IANA-RSVD 57982 IANA-RSVD 57983 IANA-RSVD 57984 IANA-RSVD 57985 IANA-RSVD 57986 IANA-RSVD 57987 IANA-RSVD 57988 IANA-RSVD 57989 IANA-RSVD 57990 IANA-RSVD 57991 IANA-RSVD 57992 IANA-RSVD 57993 IANA-RSVD 57994 IANA-RSVD 57995 IANA-RSVD 57996 IANA-RSVD 57997 IANA-RSVD 57998 IANA-RSVD 57999 IANA-RSVD 58000 IANA-RSVD 58001 IANA-RSVD 58002 IANA-RSVD 58003 IANA-RSVD 58004 IANA-RSVD 58005 IANA-RSVD 58006 IANA-RSVD 58007 IANA-RSVD 58008 IANA-RSVD 58009 IANA-RSVD 58010 IANA-RSVD 58011 IANA-RSVD 58012 IANA-RSVD 58013 IANA-RSVD 58014 IANA-RSVD 58015 IANA-RSVD 58016 IANA-RSVD 58017 IANA-RSVD 58018 IANA-RSVD 58019 IANA-RSVD 58020 IANA-RSVD 58021 IANA-RSVD 58022 IANA-RSVD 58023 IANA-RSVD 58024 IANA-RSVD 58025 IANA-RSVD 58026 IANA-RSVD 58027 IANA-RSVD 58028 IANA-RSVD 58029 IANA-RSVD 58030 IANA-RSVD 58031 IANA-RSVD 58032 IANA-RSVD 58033 IANA-RSVD 58034 IANA-RSVD 58035 IANA-RSVD 58036 IANA-RSVD 58037 IANA-RSVD 58038 IANA-RSVD 58039 IANA-RSVD 58040 IANA-RSVD 58041 IANA-RSVD 58042 IANA-RSVD 58043 IANA-RSVD 58044 IANA-RSVD 58045 IANA-RSVD 58046 IANA-RSVD 58047 IANA-RSVD 58048 IANA-RSVD 58049 IANA-RSVD 58050 IANA-RSVD 58051 IANA-RSVD 58052 IANA-RSVD 58053 IANA-RSVD 58054 IANA-RSVD 58055 IANA-RSVD 58056 IANA-RSVD 58057 IANA-RSVD 58058 IANA-RSVD 58059 IANA-RSVD 58060 IANA-RSVD 58061 IANA-RSVD 58062 IANA-RSVD 58063 IANA-RSVD 58064 IANA-RSVD 58065 IANA-RSVD 58066 IANA-RSVD 58067 IANA-RSVD 58068 IANA-RSVD 58069 IANA-RSVD 58070 IANA-RSVD 58071 IANA-RSVD 58072 IANA-RSVD 58073 IANA-RSVD 58074 IANA-RSVD 58075 IANA-RSVD 58076 IANA-RSVD 58077 IANA-RSVD 58078 IANA-RSVD 58079 IANA-RSVD 58080 IANA-RSVD 58081 IANA-RSVD 58082 IANA-RSVD 58083 IANA-RSVD 58084 IANA-RSVD 58085 IANA-RSVD 58086 IANA-RSVD 58087 IANA-RSVD 58088 IANA-RSVD 58089 IANA-RSVD 58090 IANA-RSVD 58091 IANA-RSVD 58092 IANA-RSVD 58093 IANA-RSVD 58094 IANA-RSVD 58095 IANA-RSVD 58096 IANA-RSVD 58097 IANA-RSVD 58098 IANA-RSVD 58099 IANA-RSVD 58100 IANA-RSVD 58101 IANA-RSVD 58102 IANA-RSVD 58103 IANA-RSVD 58104 IANA-RSVD 58105 IANA-RSVD 58106 IANA-RSVD 58107 IANA-RSVD 58108 IANA-RSVD 58109 IANA-RSVD 58110 IANA-RSVD 58111 IANA-RSVD 58112 IANA-RSVD 58113 IANA-RSVD 58114 IANA-RSVD 58115 IANA-RSVD 58116 IANA-RSVD 58117 IANA-RSVD 58118 IANA-RSVD 58119 IANA-RSVD 58120 IANA-RSVD 58121 IANA-RSVD 58122 IANA-RSVD 58123 IANA-RSVD 58124 IANA-RSVD 58125 IANA-RSVD 58126 IANA-RSVD 58127 IANA-RSVD 58128 IANA-RSVD 58129 IANA-RSVD 58130 IANA-RSVD 58131 IANA-RSVD 58132 IANA-RSVD 58133 IANA-RSVD 58134 IANA-RSVD 58135 IANA-RSVD 58136 IANA-RSVD 58137 IANA-RSVD 58138 IANA-RSVD 58139 IANA-RSVD 58140 IANA-RSVD 58141 IANA-RSVD 58142 IANA-RSVD 58143 IANA-RSVD 58144 IANA-RSVD 58145 IANA-RSVD 58146 IANA-RSVD 58147 IANA-RSVD 58148 IANA-RSVD 58149 IANA-RSVD 58150 IANA-RSVD 58151 IANA-RSVD 58152 IANA-RSVD 58153 IANA-RSVD 58154 IANA-RSVD 58155 IANA-RSVD 58156 IANA-RSVD 58157 IANA-RSVD 58158 IANA-RSVD 58159 IANA-RSVD 58160 IANA-RSVD 58161 IANA-RSVD 58162 IANA-RSVD 58163 IANA-RSVD 58164 IANA-RSVD 58165 IANA-RSVD 58166 IANA-RSVD 58167 IANA-RSVD 58168 IANA-RSVD 58169 IANA-RSVD 58170 IANA-RSVD 58171 IANA-RSVD 58172 IANA-RSVD 58173 IANA-RSVD 58174 IANA-RSVD 58175 IANA-RSVD 58176 IANA-RSVD 58177 IANA-RSVD 58178 IANA-RSVD 58179 IANA-RSVD 58180 IANA-RSVD 58181 IANA-RSVD 58182 IANA-RSVD 58183 IANA-RSVD 58184 IANA-RSVD 58185 IANA-RSVD 58186 IANA-RSVD 58187 IANA-RSVD 58188 IANA-RSVD 58189 IANA-RSVD 58190 IANA-RSVD 58191 IANA-RSVD 58192 IANA-RSVD 58193 IANA-RSVD 58194 IANA-RSVD 58195 IANA-RSVD 58196 IANA-RSVD 58197 IANA-RSVD 58198 IANA-RSVD 58199 IANA-RSVD 58200 IANA-RSVD 58201 IANA-RSVD 58202 IANA-RSVD 58203 IANA-RSVD 58204 IANA-RSVD 58205 IANA-RSVD 58206 IANA-RSVD 58207 IANA-RSVD 58208 IANA-RSVD 58209 IANA-RSVD 58210 IANA-RSVD 58211 IANA-RSVD 58212 IANA-RSVD 58213 IANA-RSVD 58214 IANA-RSVD 58215 IANA-RSVD 58216 IANA-RSVD 58217 IANA-RSVD 58218 IANA-RSVD 58219 IANA-RSVD 58220 IANA-RSVD 58221 IANA-RSVD 58222 IANA-RSVD 58223 IANA-RSVD 58224 IANA-RSVD 58225 IANA-RSVD 58226 IANA-RSVD 58227 IANA-RSVD 58228 IANA-RSVD 58229 IANA-RSVD 58230 IANA-RSVD 58231 IANA-RSVD 58232 IANA-RSVD 58233 IANA-RSVD 58234 IANA-RSVD 58235 IANA-RSVD 58236 IANA-RSVD 58237 IANA-RSVD 58238 IANA-RSVD 58239 IANA-RSVD 58240 IANA-RSVD 58241 IANA-RSVD 58242 IANA-RSVD 58243 IANA-RSVD 58244 IANA-RSVD 58245 IANA-RSVD 58246 IANA-RSVD 58247 IANA-RSVD 58248 IANA-RSVD 58249 IANA-RSVD 58250 IANA-RSVD 58251 IANA-RSVD 58252 IANA-RSVD 58253 IANA-RSVD 58254 IANA-RSVD 58255 IANA-RSVD 58256 IANA-RSVD 58257 IANA-RSVD 58258 IANA-RSVD 58259 IANA-RSVD 58260 IANA-RSVD 58261 IANA-RSVD 58262 IANA-RSVD 58263 IANA-RSVD 58264 IANA-RSVD 58265 IANA-RSVD 58266 IANA-RSVD 58267 IANA-RSVD 58268 IANA-RSVD 58269 IANA-RSVD 58270 IANA-RSVD 58271 IANA-RSVD 58272 IANA-RSVD 58273 IANA-RSVD 58274 IANA-RSVD 58275 IANA-RSVD 58276 IANA-RSVD 58277 IANA-RSVD 58278 IANA-RSVD 58279 IANA-RSVD 58280 IANA-RSVD 58281 IANA-RSVD 58282 IANA-RSVD 58283 IANA-RSVD 58284 IANA-RSVD 58285 IANA-RSVD 58286 IANA-RSVD 58287 IANA-RSVD 58288 IANA-RSVD 58289 IANA-RSVD 58290 IANA-RSVD 58291 IANA-RSVD 58292 IANA-RSVD 58293 IANA-RSVD 58294 IANA-RSVD 58295 IANA-RSVD 58296 IANA-RSVD 58297 IANA-RSVD 58298 IANA-RSVD 58299 IANA-RSVD 58300 IANA-RSVD 58301 IANA-RSVD 58302 IANA-RSVD 58303 IANA-RSVD 58304 IANA-RSVD 58305 IANA-RSVD 58306 IANA-RSVD 58307 IANA-RSVD 58308 IANA-RSVD 58309 IANA-RSVD 58310 IANA-RSVD 58311 IANA-RSVD 58312 IANA-RSVD 58313 IANA-RSVD 58314 IANA-RSVD 58315 IANA-RSVD 58316 IANA-RSVD 58317 IANA-RSVD 58318 IANA-RSVD 58319 IANA-RSVD 58320 IANA-RSVD 58321 IANA-RSVD 58322 IANA-RSVD 58323 IANA-RSVD 58324 IANA-RSVD 58325 IANA-RSVD 58326 IANA-RSVD 58327 IANA-RSVD 58328 IANA-RSVD 58329 IANA-RSVD 58330 IANA-RSVD 58331 IANA-RSVD 58332 IANA-RSVD 58333 IANA-RSVD 58334 IANA-RSVD 58335 IANA-RSVD 58336 IANA-RSVD 58337 IANA-RSVD 58338 IANA-RSVD 58339 IANA-RSVD 58340 IANA-RSVD 58341 IANA-RSVD 58342 IANA-RSVD 58343 IANA-RSVD 58344 IANA-RSVD 58345 IANA-RSVD 58346 IANA-RSVD 58347 IANA-RSVD 58348 IANA-RSVD 58349 IANA-RSVD 58350 IANA-RSVD 58351 IANA-RSVD 58352 IANA-RSVD 58353 IANA-RSVD 58354 IANA-RSVD 58355 IANA-RSVD 58356 IANA-RSVD 58357 IANA-RSVD 58358 IANA-RSVD 58359 IANA-RSVD 58360 IANA-RSVD 58361 IANA-RSVD 58362 IANA-RSVD 58363 IANA-RSVD 58364 IANA-RSVD 58365 IANA-RSVD 58366 IANA-RSVD 58367 IANA-RSVD 58368 IANA-RSVD 58369 IANA-RSVD 58370 IANA-RSVD 58371 IANA-RSVD 58372 IANA-RSVD 58373 IANA-RSVD 58374 IANA-RSVD 58375 IANA-RSVD 58376 IANA-RSVD 58377 IANA-RSVD 58378 IANA-RSVD 58379 IANA-RSVD 58380 IANA-RSVD 58381 IANA-RSVD 58382 IANA-RSVD 58383 IANA-RSVD 58384 IANA-RSVD 58385 IANA-RSVD 58386 IANA-RSVD 58387 IANA-RSVD 58388 IANA-RSVD 58389 IANA-RSVD 58390 IANA-RSVD 58391 IANA-RSVD 58392 IANA-RSVD 58393 IANA-RSVD 58394 IANA-RSVD 58395 IANA-RSVD 58396 IANA-RSVD 58397 IANA-RSVD 58398 IANA-RSVD 58399 IANA-RSVD 58400 IANA-RSVD 58401 IANA-RSVD 58402 IANA-RSVD 58403 IANA-RSVD 58404 IANA-RSVD 58405 IANA-RSVD 58406 IANA-RSVD 58407 IANA-RSVD 58408 IANA-RSVD 58409 IANA-RSVD 58410 IANA-RSVD 58411 IANA-RSVD 58412 IANA-RSVD 58413 IANA-RSVD 58414 IANA-RSVD 58415 IANA-RSVD 58416 IANA-RSVD 58417 IANA-RSVD 58418 IANA-RSVD 58419 IANA-RSVD 58420 IANA-RSVD 58421 IANA-RSVD 58422 IANA-RSVD 58423 IANA-RSVD 58424 IANA-RSVD 58425 IANA-RSVD 58426 IANA-RSVD 58427 IANA-RSVD 58428 IANA-RSVD 58429 IANA-RSVD 58430 IANA-RSVD 58431 IANA-RSVD 58432 IANA-RSVD 58433 IANA-RSVD 58434 IANA-RSVD 58435 IANA-RSVD 58436 IANA-RSVD 58437 IANA-RSVD 58438 IANA-RSVD 58439 IANA-RSVD 58440 IANA-RSVD 58441 IANA-RSVD 58442 IANA-RSVD 58443 IANA-RSVD 58444 IANA-RSVD 58445 IANA-RSVD 58446 IANA-RSVD 58447 IANA-RSVD 58448 IANA-RSVD 58449 IANA-RSVD 58450 IANA-RSVD 58451 IANA-RSVD 58452 IANA-RSVD 58453 IANA-RSVD 58454 IANA-RSVD 58455 IANA-RSVD 58456 IANA-RSVD 58457 IANA-RSVD 58458 IANA-RSVD 58459 IANA-RSVD 58460 IANA-RSVD 58461 IANA-RSVD 58462 IANA-RSVD 58463 IANA-RSVD 58464 IANA-RSVD 58465 IANA-RSVD 58466 IANA-RSVD 58467 IANA-RSVD 58468 IANA-RSVD 58469 IANA-RSVD 58470 IANA-RSVD 58471 IANA-RSVD 58472 IANA-RSVD 58473 IANA-RSVD 58474 IANA-RSVD 58475 IANA-RSVD 58476 IANA-RSVD 58477 IANA-RSVD 58478 IANA-RSVD 58479 IANA-RSVD 58480 IANA-RSVD 58481 IANA-RSVD 58482 IANA-RSVD 58483 IANA-RSVD 58484 IANA-RSVD 58485 IANA-RSVD 58486 IANA-RSVD 58487 IANA-RSVD 58488 IANA-RSVD 58489 IANA-RSVD 58490 IANA-RSVD 58491 IANA-RSVD 58492 IANA-RSVD 58493 IANA-RSVD 58494 IANA-RSVD 58495 IANA-RSVD 58496 IANA-RSVD 58497 IANA-RSVD 58498 IANA-RSVD 58499 IANA-RSVD 58500 IANA-RSVD 58501 IANA-RSVD 58502 IANA-RSVD 58503 IANA-RSVD 58504 IANA-RSVD 58505 IANA-RSVD 58506 IANA-RSVD 58507 IANA-RSVD 58508 IANA-RSVD 58509 IANA-RSVD 58510 IANA-RSVD 58511 IANA-RSVD 58512 IANA-RSVD 58513 IANA-RSVD 58514 IANA-RSVD 58515 IANA-RSVD 58516 IANA-RSVD 58517 IANA-RSVD 58518 IANA-RSVD 58519 IANA-RSVD 58520 IANA-RSVD 58521 IANA-RSVD 58522 IANA-RSVD 58523 IANA-RSVD 58524 IANA-RSVD 58525 IANA-RSVD 58526 IANA-RSVD 58527 IANA-RSVD 58528 IANA-RSVD 58529 IANA-RSVD 58530 IANA-RSVD 58531 IANA-RSVD 58532 IANA-RSVD 58533 IANA-RSVD 58534 IANA-RSVD 58535 IANA-RSVD 58536 IANA-RSVD 58537 IANA-RSVD 58538 IANA-RSVD 58539 IANA-RSVD 58540 IANA-RSVD 58541 IANA-RSVD 58542 IANA-RSVD 58543 IANA-RSVD 58544 IANA-RSVD 58545 IANA-RSVD 58546 IANA-RSVD 58547 IANA-RSVD 58548 IANA-RSVD 58549 IANA-RSVD 58550 IANA-RSVD 58551 IANA-RSVD 58552 IANA-RSVD 58553 IANA-RSVD 58554 IANA-RSVD 58555 IANA-RSVD 58556 IANA-RSVD 58557 IANA-RSVD 58558 IANA-RSVD 58559 IANA-RSVD 58560 IANA-RSVD 58561 IANA-RSVD 58562 IANA-RSVD 58563 IANA-RSVD 58564 IANA-RSVD 58565 IANA-RSVD 58566 IANA-RSVD 58567 IANA-RSVD 58568 IANA-RSVD 58569 IANA-RSVD 58570 IANA-RSVD 58571 IANA-RSVD 58572 IANA-RSVD 58573 IANA-RSVD 58574 IANA-RSVD 58575 IANA-RSVD 58576 IANA-RSVD 58577 IANA-RSVD 58578 IANA-RSVD 58579 IANA-RSVD 58580 IANA-RSVD 58581 IANA-RSVD 58582 IANA-RSVD 58583 IANA-RSVD 58584 IANA-RSVD 58585 IANA-RSVD 58586 IANA-RSVD 58587 IANA-RSVD 58588 IANA-RSVD 58589 IANA-RSVD 58590 IANA-RSVD 58591 IANA-RSVD 58592 IANA-RSVD 58593 IANA-RSVD 58594 IANA-RSVD 58595 IANA-RSVD 58596 IANA-RSVD 58597 IANA-RSVD 58598 IANA-RSVD 58599 IANA-RSVD 58600 IANA-RSVD 58601 IANA-RSVD 58602 IANA-RSVD 58603 IANA-RSVD 58604 IANA-RSVD 58605 IANA-RSVD 58606 IANA-RSVD 58607 IANA-RSVD 58608 IANA-RSVD 58609 IANA-RSVD 58610 IANA-RSVD 58611 IANA-RSVD 58612 IANA-RSVD 58613 IANA-RSVD 58614 IANA-RSVD 58615 IANA-RSVD 58616 IANA-RSVD 58617 IANA-RSVD 58618 IANA-RSVD 58619 IANA-RSVD 58620 IANA-RSVD 58621 IANA-RSVD 58622 IANA-RSVD 58623 IANA-RSVD 58624 IANA-RSVD 58625 IANA-RSVD 58626 IANA-RSVD 58627 IANA-RSVD 58628 IANA-RSVD 58629 IANA-RSVD 58630 IANA-RSVD 58631 IANA-RSVD 58632 IANA-RSVD 58633 IANA-RSVD 58634 IANA-RSVD 58635 IANA-RSVD 58636 IANA-RSVD 58637 IANA-RSVD 58638 IANA-RSVD 58639 IANA-RSVD 58640 IANA-RSVD 58641 IANA-RSVD 58642 IANA-RSVD 58643 IANA-RSVD 58644 IANA-RSVD 58645 IANA-RSVD 58646 IANA-RSVD 58647 IANA-RSVD 58648 IANA-RSVD 58649 IANA-RSVD 58650 IANA-RSVD 58651 IANA-RSVD 58652 IANA-RSVD 58653 IANA-RSVD 58654 IANA-RSVD 58655 IANA-RSVD 58656 IANA-RSVD 58657 IANA-RSVD 58658 IANA-RSVD 58659 IANA-RSVD 58660 IANA-RSVD 58661 IANA-RSVD 58662 IANA-RSVD 58663 IANA-RSVD 58664 IANA-RSVD 58665 IANA-RSVD 58666 IANA-RSVD 58667 IANA-RSVD 58668 IANA-RSVD 58669 IANA-RSVD 58670 IANA-RSVD 58671 IANA-RSVD 58672 IANA-RSVD 58673 IANA-RSVD 58674 IANA-RSVD 58675 IANA-RSVD 58676 IANA-RSVD 58677 IANA-RSVD 58678 IANA-RSVD 58679 IANA-RSVD 58680 IANA-RSVD 58681 IANA-RSVD 58682 IANA-RSVD 58683 IANA-RSVD 58684 IANA-RSVD 58685 IANA-RSVD 58686 IANA-RSVD 58687 IANA-RSVD 58688 IANA-RSVD 58689 IANA-RSVD 58690 IANA-RSVD 58691 IANA-RSVD 58692 IANA-RSVD 58693 IANA-RSVD 58694 IANA-RSVD 58695 IANA-RSVD 58696 IANA-RSVD 58697 IANA-RSVD 58698 IANA-RSVD 58699 IANA-RSVD 58700 IANA-RSVD 58701 IANA-RSVD 58702 IANA-RSVD 58703 IANA-RSVD 58704 IANA-RSVD 58705 IANA-RSVD 58706 IANA-RSVD 58707 IANA-RSVD 58708 IANA-RSVD 58709 IANA-RSVD 58710 IANA-RSVD 58711 IANA-RSVD 58712 IANA-RSVD 58713 IANA-RSVD 58714 IANA-RSVD 58715 IANA-RSVD 58716 IANA-RSVD 58717 IANA-RSVD 58718 IANA-RSVD 58719 IANA-RSVD 58720 IANA-RSVD 58721 IANA-RSVD 58722 IANA-RSVD 58723 IANA-RSVD 58724 IANA-RSVD 58725 IANA-RSVD 58726 IANA-RSVD 58727 IANA-RSVD 58728 IANA-RSVD 58729 IANA-RSVD 58730 IANA-RSVD 58731 IANA-RSVD 58732 IANA-RSVD 58733 IANA-RSVD 58734 IANA-RSVD 58735 IANA-RSVD 58736 IANA-RSVD 58737 IANA-RSVD 58738 IANA-RSVD 58739 IANA-RSVD 58740 IANA-RSVD 58741 IANA-RSVD 58742 IANA-RSVD 58743 IANA-RSVD 58744 IANA-RSVD 58745 IANA-RSVD 58746 IANA-RSVD 58747 IANA-RSVD 58748 IANA-RSVD 58749 IANA-RSVD 58750 IANA-RSVD 58751 IANA-RSVD 58752 IANA-RSVD 58753 IANA-RSVD 58754 IANA-RSVD 58755 IANA-RSVD 58756 IANA-RSVD 58757 IANA-RSVD 58758 IANA-RSVD 58759 IANA-RSVD 58760 IANA-RSVD 58761 IANA-RSVD 58762 IANA-RSVD 58763 IANA-RSVD 58764 IANA-RSVD 58765 IANA-RSVD 58766 IANA-RSVD 58767 IANA-RSVD 58768 IANA-RSVD 58769 IANA-RSVD 58770 IANA-RSVD 58771 IANA-RSVD 58772 IANA-RSVD 58773 IANA-RSVD 58774 IANA-RSVD 58775 IANA-RSVD 58776 IANA-RSVD 58777 IANA-RSVD 58778 IANA-RSVD 58779 IANA-RSVD 58780 IANA-RSVD 58781 IANA-RSVD 58782 IANA-RSVD 58783 IANA-RSVD 58784 IANA-RSVD 58785 IANA-RSVD 58786 IANA-RSVD 58787 IANA-RSVD 58788 IANA-RSVD 58789 IANA-RSVD 58790 IANA-RSVD 58791 IANA-RSVD 58792 IANA-RSVD 58793 IANA-RSVD 58794 IANA-RSVD 58795 IANA-RSVD 58796 IANA-RSVD 58797 IANA-RSVD 58798 IANA-RSVD 58799 IANA-RSVD 58800 IANA-RSVD 58801 IANA-RSVD 58802 IANA-RSVD 58803 IANA-RSVD 58804 IANA-RSVD 58805 IANA-RSVD 58806 IANA-RSVD 58807 IANA-RSVD 58808 IANA-RSVD 58809 IANA-RSVD 58810 IANA-RSVD 58811 IANA-RSVD 58812 IANA-RSVD 58813 IANA-RSVD 58814 IANA-RSVD 58815 IANA-RSVD 58816 IANA-RSVD 58817 IANA-RSVD 58818 IANA-RSVD 58819 IANA-RSVD 58820 IANA-RSVD 58821 IANA-RSVD 58822 IANA-RSVD 58823 IANA-RSVD 58824 IANA-RSVD 58825 IANA-RSVD 58826 IANA-RSVD 58827 IANA-RSVD 58828 IANA-RSVD 58829 IANA-RSVD 58830 IANA-RSVD 58831 IANA-RSVD 58832 IANA-RSVD 58833 IANA-RSVD 58834 IANA-RSVD 58835 IANA-RSVD 58836 IANA-RSVD 58837 IANA-RSVD 58838 IANA-RSVD 58839 IANA-RSVD 58840 IANA-RSVD 58841 IANA-RSVD 58842 IANA-RSVD 58843 IANA-RSVD 58844 IANA-RSVD 58845 IANA-RSVD 58846 IANA-RSVD 58847 IANA-RSVD 58848 IANA-RSVD 58849 IANA-RSVD 58850 IANA-RSVD 58851 IANA-RSVD 58852 IANA-RSVD 58853 IANA-RSVD 58854 IANA-RSVD 58855 IANA-RSVD 58856 IANA-RSVD 58857 IANA-RSVD 58858 IANA-RSVD 58859 IANA-RSVD 58860 IANA-RSVD 58861 IANA-RSVD 58862 IANA-RSVD 58863 IANA-RSVD 58864 IANA-RSVD 58865 IANA-RSVD 58866 IANA-RSVD 58867 IANA-RSVD 58868 IANA-RSVD 58869 IANA-RSVD 58870 IANA-RSVD 58871 IANA-RSVD 58872 IANA-RSVD 58873 IANA-RSVD 58874 IANA-RSVD 58875 IANA-RSVD 58876 IANA-RSVD 58877 IANA-RSVD 58878 IANA-RSVD 58879 IANA-RSVD 58880 IANA-RSVD 58881 IANA-RSVD 58882 IANA-RSVD 58883 IANA-RSVD 58884 IANA-RSVD 58885 IANA-RSVD 58886 IANA-RSVD 58887 IANA-RSVD 58888 IANA-RSVD 58889 IANA-RSVD 58890 IANA-RSVD 58891 IANA-RSVD 58892 IANA-RSVD 58893 IANA-RSVD 58894 IANA-RSVD 58895 IANA-RSVD 58896 IANA-RSVD 58897 IANA-RSVD 58898 IANA-RSVD 58899 IANA-RSVD 58900 IANA-RSVD 58901 IANA-RSVD 58902 IANA-RSVD 58903 IANA-RSVD 58904 IANA-RSVD 58905 IANA-RSVD 58906 IANA-RSVD 58907 IANA-RSVD 58908 IANA-RSVD 58909 IANA-RSVD 58910 IANA-RSVD 58911 IANA-RSVD 58912 IANA-RSVD 58913 IANA-RSVD 58914 IANA-RSVD 58915 IANA-RSVD 58916 IANA-RSVD 58917 IANA-RSVD 58918 IANA-RSVD 58919 IANA-RSVD 58920 IANA-RSVD 58921 IANA-RSVD 58922 IANA-RSVD 58923 IANA-RSVD 58924 IANA-RSVD 58925 IANA-RSVD 58926 IANA-RSVD 58927 IANA-RSVD 58928 IANA-RSVD 58929 IANA-RSVD 58930 IANA-RSVD 58931 IANA-RSVD 58932 IANA-RSVD 58933 IANA-RSVD 58934 IANA-RSVD 58935 IANA-RSVD 58936 IANA-RSVD 58937 IANA-RSVD 58938 IANA-RSVD 58939 IANA-RSVD 58940 IANA-RSVD 58941 IANA-RSVD 58942 IANA-RSVD 58943 IANA-RSVD 58944 IANA-RSVD 58945 IANA-RSVD 58946 IANA-RSVD 58947 IANA-RSVD 58948 IANA-RSVD 58949 IANA-RSVD 58950 IANA-RSVD 58951 IANA-RSVD 58952 IANA-RSVD 58953 IANA-RSVD 58954 IANA-RSVD 58955 IANA-RSVD 58956 IANA-RSVD 58957 IANA-RSVD 58958 IANA-RSVD 58959 IANA-RSVD 58960 IANA-RSVD 58961 IANA-RSVD 58962 IANA-RSVD 58963 IANA-RSVD 58964 IANA-RSVD 58965 IANA-RSVD 58966 IANA-RSVD 58967 IANA-RSVD 58968 IANA-RSVD 58969 IANA-RSVD 58970 IANA-RSVD 58971 IANA-RSVD 58972 IANA-RSVD 58973 IANA-RSVD 58974 IANA-RSVD 58975 IANA-RSVD 58976 IANA-RSVD 58977 IANA-RSVD 58978 IANA-RSVD 58979 IANA-RSVD 58980 IANA-RSVD 58981 IANA-RSVD 58982 IANA-RSVD 58983 IANA-RSVD 58984 IANA-RSVD 58985 IANA-RSVD 58986 IANA-RSVD 58987 IANA-RSVD 58988 IANA-RSVD 58989 IANA-RSVD 58990 IANA-RSVD 58991 IANA-RSVD 58992 IANA-RSVD 58993 IANA-RSVD 58994 IANA-RSVD 58995 IANA-RSVD 58996 IANA-RSVD 58997 IANA-RSVD 58998 IANA-RSVD 58999 IANA-RSVD 59000 IANA-RSVD 59001 IANA-RSVD 59002 IANA-RSVD 59003 IANA-RSVD 59004 IANA-RSVD 59005 IANA-RSVD 59006 IANA-RSVD 59007 IANA-RSVD 59008 IANA-RSVD 59009 IANA-RSVD 59010 IANA-RSVD 59011 IANA-RSVD 59012 IANA-RSVD 59013 IANA-RSVD 59014 IANA-RSVD 59015 IANA-RSVD 59016 IANA-RSVD 59017 IANA-RSVD 59018 IANA-RSVD 59019 IANA-RSVD 59020 IANA-RSVD 59021 IANA-RSVD 59022 IANA-RSVD 59023 IANA-RSVD 59024 IANA-RSVD 59025 IANA-RSVD 59026 IANA-RSVD 59027 IANA-RSVD 59028 IANA-RSVD 59029 IANA-RSVD 59030 IANA-RSVD 59031 IANA-RSVD 59032 IANA-RSVD 59033 IANA-RSVD 59034 IANA-RSVD 59035 IANA-RSVD 59036 IANA-RSVD 59037 IANA-RSVD 59038 IANA-RSVD 59039 IANA-RSVD 59040 IANA-RSVD 59041 IANA-RSVD 59042 IANA-RSVD 59043 IANA-RSVD 59044 IANA-RSVD 59045 IANA-RSVD 59046 IANA-RSVD 59047 IANA-RSVD 59048 IANA-RSVD 59049 IANA-RSVD 59050 IANA-RSVD 59051 IANA-RSVD 59052 IANA-RSVD 59053 IANA-RSVD 59054 IANA-RSVD 59055 IANA-RSVD 59056 IANA-RSVD 59057 IANA-RSVD 59058 IANA-RSVD 59059 IANA-RSVD 59060 IANA-RSVD 59061 IANA-RSVD 59062 IANA-RSVD 59063 IANA-RSVD 59064 IANA-RSVD 59065 IANA-RSVD 59066 IANA-RSVD 59067 IANA-RSVD 59068 IANA-RSVD 59069 IANA-RSVD 59070 IANA-RSVD 59071 IANA-RSVD 59072 IANA-RSVD 59073 IANA-RSVD 59074 IANA-RSVD 59075 IANA-RSVD 59076 IANA-RSVD 59077 IANA-RSVD 59078 IANA-RSVD 59079 IANA-RSVD 59080 IANA-RSVD 59081 IANA-RSVD 59082 IANA-RSVD 59083 IANA-RSVD 59084 IANA-RSVD 59085 IANA-RSVD 59086 IANA-RSVD 59087 IANA-RSVD 59088 IANA-RSVD 59089 IANA-RSVD 59090 IANA-RSVD 59091 IANA-RSVD 59092 IANA-RSVD 59093 IANA-RSVD 59094 IANA-RSVD 59095 IANA-RSVD 59096 IANA-RSVD 59097 IANA-RSVD 59098 IANA-RSVD 59099 IANA-RSVD 59100 IANA-RSVD 59101 IANA-RSVD 59102 IANA-RSVD 59103 IANA-RSVD 59104 IANA-RSVD 59105 IANA-RSVD 59106 IANA-RSVD 59107 IANA-RSVD 59108 IANA-RSVD 59109 IANA-RSVD 59110 IANA-RSVD 59111 IANA-RSVD 59112 IANA-RSVD 59113 IANA-RSVD 59114 IANA-RSVD 59115 IANA-RSVD 59116 IANA-RSVD 59117 IANA-RSVD 59118 IANA-RSVD 59119 IANA-RSVD 59120 IANA-RSVD 59121 IANA-RSVD 59122 IANA-RSVD 59123 IANA-RSVD 59124 IANA-RSVD 59125 IANA-RSVD 59126 IANA-RSVD 59127 IANA-RSVD 59128 IANA-RSVD 59129 IANA-RSVD 59130 IANA-RSVD 59131 IANA-RSVD 59132 IANA-RSVD 59133 IANA-RSVD 59134 IANA-RSVD 59135 IANA-RSVD 59136 IANA-RSVD 59137 IANA-RSVD 59138 IANA-RSVD 59139 IANA-RSVD 59140 IANA-RSVD 59141 IANA-RSVD 59142 IANA-RSVD 59143 IANA-RSVD 59144 IANA-RSVD 59145 IANA-RSVD 59146 IANA-RSVD 59147 IANA-RSVD 59148 IANA-RSVD 59149 IANA-RSVD 59150 IANA-RSVD 59151 IANA-RSVD 59152 IANA-RSVD 59153 IANA-RSVD 59154 IANA-RSVD 59155 IANA-RSVD 59156 IANA-RSVD 59157 IANA-RSVD 59158 IANA-RSVD 59159 IANA-RSVD 59160 IANA-RSVD 59161 IANA-RSVD 59162 IANA-RSVD 59163 IANA-RSVD 59164 IANA-RSVD 59165 IANA-RSVD 59166 IANA-RSVD 59167 IANA-RSVD 59168 IANA-RSVD 59169 IANA-RSVD 59170 IANA-RSVD 59171 IANA-RSVD 59172 IANA-RSVD 59173 IANA-RSVD 59174 IANA-RSVD 59175 IANA-RSVD 59176 IANA-RSVD 59177 IANA-RSVD 59178 IANA-RSVD 59179 IANA-RSVD 59180 IANA-RSVD 59181 IANA-RSVD 59182 IANA-RSVD 59183 IANA-RSVD 59184 IANA-RSVD 59185 IANA-RSVD 59186 IANA-RSVD 59187 IANA-RSVD 59188 IANA-RSVD 59189 IANA-RSVD 59190 IANA-RSVD 59191 IANA-RSVD 59192 IANA-RSVD 59193 IANA-RSVD 59194 IANA-RSVD 59195 IANA-RSVD 59196 IANA-RSVD 59197 IANA-RSVD 59198 IANA-RSVD 59199 IANA-RSVD 59200 IANA-RSVD 59201 IANA-RSVD 59202 IANA-RSVD 59203 IANA-RSVD 59204 IANA-RSVD 59205 IANA-RSVD 59206 IANA-RSVD 59207 IANA-RSVD 59208 IANA-RSVD 59209 IANA-RSVD 59210 IANA-RSVD 59211 IANA-RSVD 59212 IANA-RSVD 59213 IANA-RSVD 59214 IANA-RSVD 59215 IANA-RSVD 59216 IANA-RSVD 59217 IANA-RSVD 59218 IANA-RSVD 59219 IANA-RSVD 59220 IANA-RSVD 59221 IANA-RSVD 59222 IANA-RSVD 59223 IANA-RSVD 59224 IANA-RSVD 59225 IANA-RSVD 59226 IANA-RSVD 59227 IANA-RSVD 59228 IANA-RSVD 59229 IANA-RSVD 59230 IANA-RSVD 59231 IANA-RSVD 59232 IANA-RSVD 59233 IANA-RSVD 59234 IANA-RSVD 59235 IANA-RSVD 59236 IANA-RSVD 59237 IANA-RSVD 59238 IANA-RSVD 59239 IANA-RSVD 59240 IANA-RSVD 59241 IANA-RSVD 59242 IANA-RSVD 59243 IANA-RSVD 59244 IANA-RSVD 59245 IANA-RSVD 59246 IANA-RSVD 59247 IANA-RSVD 59248 IANA-RSVD 59249 IANA-RSVD 59250 IANA-RSVD 59251 IANA-RSVD 59252 IANA-RSVD 59253 IANA-RSVD 59254 IANA-RSVD 59255 IANA-RSVD 59256 IANA-RSVD 59257 IANA-RSVD 59258 IANA-RSVD 59259 IANA-RSVD 59260 IANA-RSVD 59261 IANA-RSVD 59262 IANA-RSVD 59263 IANA-RSVD 59264 IANA-RSVD 59265 IANA-RSVD 59266 IANA-RSVD 59267 IANA-RSVD 59268 IANA-RSVD 59269 IANA-RSVD 59270 IANA-RSVD 59271 IANA-RSVD 59272 IANA-RSVD 59273 IANA-RSVD 59274 IANA-RSVD 59275 IANA-RSVD 59276 IANA-RSVD 59277 IANA-RSVD 59278 IANA-RSVD 59279 IANA-RSVD 59280 IANA-RSVD 59281 IANA-RSVD 59282 IANA-RSVD 59283 IANA-RSVD 59284 IANA-RSVD 59285 IANA-RSVD 59286 IANA-RSVD 59287 IANA-RSVD 59288 IANA-RSVD 59289 IANA-RSVD 59290 IANA-RSVD 59291 IANA-RSVD 59292 IANA-RSVD 59293 IANA-RSVD 59294 IANA-RSVD 59295 IANA-RSVD 59296 IANA-RSVD 59297 IANA-RSVD 59298 IANA-RSVD 59299 IANA-RSVD 59300 IANA-RSVD 59301 IANA-RSVD 59302 IANA-RSVD 59303 IANA-RSVD 59304 IANA-RSVD 59305 IANA-RSVD 59306 IANA-RSVD 59307 IANA-RSVD 59308 IANA-RSVD 59309 IANA-RSVD 59310 IANA-RSVD 59311 IANA-RSVD 59312 IANA-RSVD 59313 IANA-RSVD 59314 IANA-RSVD 59315 IANA-RSVD 59316 IANA-RSVD 59317 IANA-RSVD 59318 IANA-RSVD 59319 IANA-RSVD 59320 IANA-RSVD 59321 IANA-RSVD 59322 IANA-RSVD 59323 IANA-RSVD 59324 IANA-RSVD 59325 IANA-RSVD 59326 IANA-RSVD 59327 IANA-RSVD 59328 IANA-RSVD 59329 IANA-RSVD 59330 IANA-RSVD 59331 IANA-RSVD 59332 IANA-RSVD 59333 IANA-RSVD 59334 IANA-RSVD 59335 IANA-RSVD 59336 IANA-RSVD 59337 IANA-RSVD 59338 IANA-RSVD 59339 IANA-RSVD 59340 IANA-RSVD 59341 IANA-RSVD 59342 IANA-RSVD 59343 IANA-RSVD 59344 IANA-RSVD 59345 IANA-RSVD 59346 IANA-RSVD 59347 IANA-RSVD 59348 IANA-RSVD 59349 IANA-RSVD 59350 IANA-RSVD 59351 IANA-RSVD 59352 IANA-RSVD 59353 IANA-RSVD 59354 IANA-RSVD 59355 IANA-RSVD 59356 IANA-RSVD 59357 IANA-RSVD 59358 IANA-RSVD 59359 IANA-RSVD 59360 IANA-RSVD 59361 IANA-RSVD 59362 IANA-RSVD 59363 IANA-RSVD 59364 IANA-RSVD 59365 IANA-RSVD 59366 IANA-RSVD 59367 IANA-RSVD 59368 IANA-RSVD 59369 IANA-RSVD 59370 IANA-RSVD 59371 IANA-RSVD 59372 IANA-RSVD 59373 IANA-RSVD 59374 IANA-RSVD 59375 IANA-RSVD 59376 IANA-RSVD 59377 IANA-RSVD 59378 IANA-RSVD 59379 IANA-RSVD 59380 IANA-RSVD 59381 IANA-RSVD 59382 IANA-RSVD 59383 IANA-RSVD 59384 IANA-RSVD 59385 IANA-RSVD 59386 IANA-RSVD 59387 IANA-RSVD 59388 IANA-RSVD 59389 IANA-RSVD 59390 IANA-RSVD 59391 IANA-RSVD 59392 IANA-RSVD 59393 IANA-RSVD 59394 IANA-RSVD 59395 IANA-RSVD 59396 IANA-RSVD 59397 IANA-RSVD 59398 IANA-RSVD 59399 IANA-RSVD 59400 IANA-RSVD 59401 IANA-RSVD 59402 IANA-RSVD 59403 IANA-RSVD 59404 IANA-RSVD 59405 IANA-RSVD 59406 IANA-RSVD 59407 IANA-RSVD 59408 IANA-RSVD 59409 IANA-RSVD 59410 IANA-RSVD 59411 IANA-RSVD 59412 IANA-RSVD 59413 IANA-RSVD 59414 IANA-RSVD 59415 IANA-RSVD 59416 IANA-RSVD 59417 IANA-RSVD 59418 IANA-RSVD 59419 IANA-RSVD 59420 IANA-RSVD 59421 IANA-RSVD 59422 IANA-RSVD 59423 IANA-RSVD 59424 IANA-RSVD 59425 IANA-RSVD 59426 IANA-RSVD 59427 IANA-RSVD 59428 IANA-RSVD 59429 IANA-RSVD 59430 IANA-RSVD 59431 IANA-RSVD 59432 IANA-RSVD 59433 IANA-RSVD 59434 IANA-RSVD 59435 IANA-RSVD 59436 IANA-RSVD 59437 IANA-RSVD 59438 IANA-RSVD 59439 IANA-RSVD 59440 IANA-RSVD 59441 IANA-RSVD 59442 IANA-RSVD 59443 IANA-RSVD 59444 IANA-RSVD 59445 IANA-RSVD 59446 IANA-RSVD 59447 IANA-RSVD 59448 IANA-RSVD 59449 IANA-RSVD 59450 IANA-RSVD 59451 IANA-RSVD 59452 IANA-RSVD 59453 IANA-RSVD 59454 IANA-RSVD 59455 IANA-RSVD 59456 IANA-RSVD 59457 IANA-RSVD 59458 IANA-RSVD 59459 IANA-RSVD 59460 IANA-RSVD 59461 IANA-RSVD 59462 IANA-RSVD 59463 IANA-RSVD 59464 IANA-RSVD 59465 IANA-RSVD 59466 IANA-RSVD 59467 IANA-RSVD 59468 IANA-RSVD 59469 IANA-RSVD 59470 IANA-RSVD 59471 IANA-RSVD 59472 IANA-RSVD 59473 IANA-RSVD 59474 IANA-RSVD 59475 IANA-RSVD 59476 IANA-RSVD 59477 IANA-RSVD 59478 IANA-RSVD 59479 IANA-RSVD 59480 IANA-RSVD 59481 IANA-RSVD 59482 IANA-RSVD 59483 IANA-RSVD 59484 IANA-RSVD 59485 IANA-RSVD 59486 IANA-RSVD 59487 IANA-RSVD 59488 IANA-RSVD 59489 IANA-RSVD 59490 IANA-RSVD 59491 IANA-RSVD 59492 IANA-RSVD 59493 IANA-RSVD 59494 IANA-RSVD 59495 IANA-RSVD 59496 IANA-RSVD 59497 IANA-RSVD 59498 IANA-RSVD 59499 IANA-RSVD 59500 IANA-RSVD 59501 IANA-RSVD 59502 IANA-RSVD 59503 IANA-RSVD 59504 IANA-RSVD 59505 IANA-RSVD 59506 IANA-RSVD 59507 IANA-RSVD 59508 IANA-RSVD 59509 IANA-RSVD 59510 IANA-RSVD 59511 IANA-RSVD 59512 IANA-RSVD 59513 IANA-RSVD 59514 IANA-RSVD 59515 IANA-RSVD 59516 IANA-RSVD 59517 IANA-RSVD 59518 IANA-RSVD 59519 IANA-RSVD 59520 IANA-RSVD 59521 IANA-RSVD 59522 IANA-RSVD 59523 IANA-RSVD 59524 IANA-RSVD 59525 IANA-RSVD 59526 IANA-RSVD 59527 IANA-RSVD 59528 IANA-RSVD 59529 IANA-RSVD 59530 IANA-RSVD 59531 IANA-RSVD 59532 IANA-RSVD 59533 IANA-RSVD 59534 IANA-RSVD 59535 IANA-RSVD 59536 IANA-RSVD 59537 IANA-RSVD 59538 IANA-RSVD 59539 IANA-RSVD 59540 IANA-RSVD 59541 IANA-RSVD 59542 IANA-RSVD 59543 IANA-RSVD 59544 IANA-RSVD 59545 IANA-RSVD 59546 IANA-RSVD 59547 IANA-RSVD 59548 IANA-RSVD 59549 IANA-RSVD 59550 IANA-RSVD 59551 IANA-RSVD 59552 IANA-RSVD 59553 IANA-RSVD 59554 IANA-RSVD 59555 IANA-RSVD 59556 IANA-RSVD 59557 IANA-RSVD 59558 IANA-RSVD 59559 IANA-RSVD 59560 IANA-RSVD 59561 IANA-RSVD 59562 IANA-RSVD 59563 IANA-RSVD 59564 IANA-RSVD 59565 IANA-RSVD 59566 IANA-RSVD 59567 IANA-RSVD 59568 IANA-RSVD 59569 IANA-RSVD 59570 IANA-RSVD 59571 IANA-RSVD 59572 IANA-RSVD 59573 IANA-RSVD 59574 IANA-RSVD 59575 IANA-RSVD 59576 IANA-RSVD 59577 IANA-RSVD 59578 IANA-RSVD 59579 IANA-RSVD 59580 IANA-RSVD 59581 IANA-RSVD 59582 IANA-RSVD 59583 IANA-RSVD 59584 IANA-RSVD 59585 IANA-RSVD 59586 IANA-RSVD 59587 IANA-RSVD 59588 IANA-RSVD 59589 IANA-RSVD 59590 IANA-RSVD 59591 IANA-RSVD 59592 IANA-RSVD 59593 IANA-RSVD 59594 IANA-RSVD 59595 IANA-RSVD 59596 IANA-RSVD 59597 IANA-RSVD 59598 IANA-RSVD 59599 IANA-RSVD 59600 IANA-RSVD 59601 IANA-RSVD 59602 IANA-RSVD 59603 IANA-RSVD 59604 IANA-RSVD 59605 IANA-RSVD 59606 IANA-RSVD 59607 IANA-RSVD 59608 IANA-RSVD 59609 IANA-RSVD 59610 IANA-RSVD 59611 IANA-RSVD 59612 IANA-RSVD 59613 IANA-RSVD 59614 IANA-RSVD 59615 IANA-RSVD 59616 IANA-RSVD 59617 IANA-RSVD 59618 IANA-RSVD 59619 IANA-RSVD 59620 IANA-RSVD 59621 IANA-RSVD 59622 IANA-RSVD 59623 IANA-RSVD 59624 IANA-RSVD 59625 IANA-RSVD 59626 IANA-RSVD 59627 IANA-RSVD 59628 IANA-RSVD 59629 IANA-RSVD 59630 IANA-RSVD 59631 IANA-RSVD 59632 IANA-RSVD 59633 IANA-RSVD 59634 IANA-RSVD 59635 IANA-RSVD 59636 IANA-RSVD 59637 IANA-RSVD 59638 IANA-RSVD 59639 IANA-RSVD 59640 IANA-RSVD 59641 IANA-RSVD 59642 IANA-RSVD 59643 IANA-RSVD 59644 IANA-RSVD 59645 IANA-RSVD 59646 IANA-RSVD 59647 IANA-RSVD 59648 IANA-RSVD 59649 IANA-RSVD 59650 IANA-RSVD 59651 IANA-RSVD 59652 IANA-RSVD 59653 IANA-RSVD 59654 IANA-RSVD 59655 IANA-RSVD 59656 IANA-RSVD 59657 IANA-RSVD 59658 IANA-RSVD 59659 IANA-RSVD 59660 IANA-RSVD 59661 IANA-RSVD 59662 IANA-RSVD 59663 IANA-RSVD 59664 IANA-RSVD 59665 IANA-RSVD 59666 IANA-RSVD 59667 IANA-RSVD 59668 IANA-RSVD 59669 IANA-RSVD 59670 IANA-RSVD 59671 IANA-RSVD 59672 IANA-RSVD 59673 IANA-RSVD 59674 IANA-RSVD 59675 IANA-RSVD 59676 IANA-RSVD 59677 IANA-RSVD 59678 IANA-RSVD 59679 IANA-RSVD 59680 IANA-RSVD 59681 IANA-RSVD 59682 IANA-RSVD 59683 IANA-RSVD 59684 IANA-RSVD 59685 IANA-RSVD 59686 IANA-RSVD 59687 IANA-RSVD 59688 IANA-RSVD 59689 IANA-RSVD 59690 IANA-RSVD 59691 IANA-RSVD 59692 IANA-RSVD 59693 IANA-RSVD 59694 IANA-RSVD 59695 IANA-RSVD 59696 IANA-RSVD 59697 IANA-RSVD 59698 IANA-RSVD 59699 IANA-RSVD 59700 IANA-RSVD 59701 IANA-RSVD 59702 IANA-RSVD 59703 IANA-RSVD 59704 IANA-RSVD 59705 IANA-RSVD 59706 IANA-RSVD 59707 IANA-RSVD 59708 IANA-RSVD 59709 IANA-RSVD 59710 IANA-RSVD 59711 IANA-RSVD 59712 IANA-RSVD 59713 IANA-RSVD 59714 IANA-RSVD 59715 IANA-RSVD 59716 IANA-RSVD 59717 IANA-RSVD 59718 IANA-RSVD 59719 IANA-RSVD 59720 IANA-RSVD 59721 IANA-RSVD 59722 IANA-RSVD 59723 IANA-RSVD 59724 IANA-RSVD 59725 IANA-RSVD 59726 IANA-RSVD 59727 IANA-RSVD 59728 IANA-RSVD 59729 IANA-RSVD 59730 IANA-RSVD 59731 IANA-RSVD 59732 IANA-RSVD 59733 IANA-RSVD 59734 IANA-RSVD 59735 IANA-RSVD 59736 IANA-RSVD 59737 IANA-RSVD 59738 IANA-RSVD 59739 IANA-RSVD 59740 IANA-RSVD 59741 IANA-RSVD 59742 IANA-RSVD 59743 IANA-RSVD 59744 IANA-RSVD 59745 IANA-RSVD 59746 IANA-RSVD 59747 IANA-RSVD 59748 IANA-RSVD 59749 IANA-RSVD 59750 IANA-RSVD 59751 IANA-RSVD 59752 IANA-RSVD 59753 IANA-RSVD 59754 IANA-RSVD 59755 IANA-RSVD 59756 IANA-RSVD 59757 IANA-RSVD 59758 IANA-RSVD 59759 IANA-RSVD 59760 IANA-RSVD 59761 IANA-RSVD 59762 IANA-RSVD 59763 IANA-RSVD 59764 IANA-RSVD 59765 IANA-RSVD 59766 IANA-RSVD 59767 IANA-RSVD 59768 IANA-RSVD 59769 IANA-RSVD 59770 IANA-RSVD 59771 IANA-RSVD 59772 IANA-RSVD 59773 IANA-RSVD 59774 IANA-RSVD 59775 IANA-RSVD 59776 IANA-RSVD 59777 IANA-RSVD 59778 IANA-RSVD 59779 IANA-RSVD 59780 IANA-RSVD 59781 IANA-RSVD 59782 IANA-RSVD 59783 IANA-RSVD 59784 IANA-RSVD 59785 IANA-RSVD 59786 IANA-RSVD 59787 IANA-RSVD 59788 IANA-RSVD 59789 IANA-RSVD 59790 IANA-RSVD 59791 IANA-RSVD 59792 IANA-RSVD 59793 IANA-RSVD 59794 IANA-RSVD 59795 IANA-RSVD 59796 IANA-RSVD 59797 IANA-RSVD 59798 IANA-RSVD 59799 IANA-RSVD 59800 IANA-RSVD 59801 IANA-RSVD 59802 IANA-RSVD 59803 IANA-RSVD 59804 IANA-RSVD 59805 IANA-RSVD 59806 IANA-RSVD 59807 IANA-RSVD 59808 IANA-RSVD 59809 IANA-RSVD 59810 IANA-RSVD 59811 IANA-RSVD 59812 IANA-RSVD 59813 IANA-RSVD 59814 IANA-RSVD 59815 IANA-RSVD 59816 IANA-RSVD 59817 IANA-RSVD 59818 IANA-RSVD 59819 IANA-RSVD 59820 IANA-RSVD 59821 IANA-RSVD 59822 IANA-RSVD 59823 IANA-RSVD 59824 IANA-RSVD 59825 IANA-RSVD 59826 IANA-RSVD 59827 IANA-RSVD 59828 IANA-RSVD 59829 IANA-RSVD 59830 IANA-RSVD 59831 IANA-RSVD 59832 IANA-RSVD 59833 IANA-RSVD 59834 IANA-RSVD 59835 IANA-RSVD 59836 IANA-RSVD 59837 IANA-RSVD 59838 IANA-RSVD 59839 IANA-RSVD 59840 IANA-RSVD 59841 IANA-RSVD 59842 IANA-RSVD 59843 IANA-RSVD 59844 IANA-RSVD 59845 IANA-RSVD 59846 IANA-RSVD 59847 IANA-RSVD 59848 IANA-RSVD 59849 IANA-RSVD 59850 IANA-RSVD 59851 IANA-RSVD 59852 IANA-RSVD 59853 IANA-RSVD 59854 IANA-RSVD 59855 IANA-RSVD 59856 IANA-RSVD 59857 IANA-RSVD 59858 IANA-RSVD 59859 IANA-RSVD 59860 IANA-RSVD 59861 IANA-RSVD 59862 IANA-RSVD 59863 IANA-RSVD 59864 IANA-RSVD 59865 IANA-RSVD 59866 IANA-RSVD 59867 IANA-RSVD 59868 IANA-RSVD 59869 IANA-RSVD 59870 IANA-RSVD 59871 IANA-RSVD 59872 IANA-RSVD 59873 IANA-RSVD 59874 IANA-RSVD 59875 IANA-RSVD 59876 IANA-RSVD 59877 IANA-RSVD 59878 IANA-RSVD 59879 IANA-RSVD 59880 IANA-RSVD 59881 IANA-RSVD 59882 IANA-RSVD 59883 IANA-RSVD 59884 IANA-RSVD 59885 IANA-RSVD 59886 IANA-RSVD 59887 IANA-RSVD 59888 IANA-RSVD 59889 IANA-RSVD 59890 IANA-RSVD 59891 IANA-RSVD 59892 IANA-RSVD 59893 IANA-RSVD 59894 IANA-RSVD 59895 IANA-RSVD 59896 IANA-RSVD 59897 IANA-RSVD 59898 IANA-RSVD 59899 IANA-RSVD 59900 IANA-RSVD 59901 IANA-RSVD 59902 IANA-RSVD 59903 IANA-RSVD 59904 IANA-RSVD 59905 IANA-RSVD 59906 IANA-RSVD 59907 IANA-RSVD 59908 IANA-RSVD 59909 IANA-RSVD 59910 IANA-RSVD 59911 IANA-RSVD 59912 IANA-RSVD 59913 IANA-RSVD 59914 IANA-RSVD 59915 IANA-RSVD 59916 IANA-RSVD 59917 IANA-RSVD 59918 IANA-RSVD 59919 IANA-RSVD 59920 IANA-RSVD 59921 IANA-RSVD 59922 IANA-RSVD 59923 IANA-RSVD 59924 IANA-RSVD 59925 IANA-RSVD 59926 IANA-RSVD 59927 IANA-RSVD 59928 IANA-RSVD 59929 IANA-RSVD 59930 IANA-RSVD 59931 IANA-RSVD 59932 IANA-RSVD 59933 IANA-RSVD 59934 IANA-RSVD 59935 IANA-RSVD 59936 IANA-RSVD 59937 IANA-RSVD 59938 IANA-RSVD 59939 IANA-RSVD 59940 IANA-RSVD 59941 IANA-RSVD 59942 IANA-RSVD 59943 IANA-RSVD 59944 IANA-RSVD 59945 IANA-RSVD 59946 IANA-RSVD 59947 IANA-RSVD 59948 IANA-RSVD 59949 IANA-RSVD 59950 IANA-RSVD 59951 IANA-RSVD 59952 IANA-RSVD 59953 IANA-RSVD 59954 IANA-RSVD 59955 IANA-RSVD 59956 IANA-RSVD 59957 IANA-RSVD 59958 IANA-RSVD 59959 IANA-RSVD 59960 IANA-RSVD 59961 IANA-RSVD 59962 IANA-RSVD 59963 IANA-RSVD 59964 IANA-RSVD 59965 IANA-RSVD 59966 IANA-RSVD 59967 IANA-RSVD 59968 IANA-RSVD 59969 IANA-RSVD 59970 IANA-RSVD 59971 IANA-RSVD 59972 IANA-RSVD 59973 IANA-RSVD 59974 IANA-RSVD 59975 IANA-RSVD 59976 IANA-RSVD 59977 IANA-RSVD 59978 IANA-RSVD 59979 IANA-RSVD 59980 IANA-RSVD 59981 IANA-RSVD 59982 IANA-RSVD 59983 IANA-RSVD 59984 IANA-RSVD 59985 IANA-RSVD 59986 IANA-RSVD 59987 IANA-RSVD 59988 IANA-RSVD 59989 IANA-RSVD 59990 IANA-RSVD 59991 IANA-RSVD 59992 IANA-RSVD 59993 IANA-RSVD 59994 IANA-RSVD 59995 IANA-RSVD 59996 IANA-RSVD 59997 IANA-RSVD 59998 IANA-RSVD 59999 IANA-RSVD 60000 IANA-RSVD 60001 IANA-RSVD 60002 IANA-RSVD 60003 IANA-RSVD 60004 IANA-RSVD 60005 IANA-RSVD 60006 IANA-RSVD 60007 IANA-RSVD 60008 IANA-RSVD 60009 IANA-RSVD 60010 IANA-RSVD 60011 IANA-RSVD 60012 IANA-RSVD 60013 IANA-RSVD 60014 IANA-RSVD 60015 IANA-RSVD 60016 IANA-RSVD 60017 IANA-RSVD 60018 IANA-RSVD 60019 IANA-RSVD 60020 IANA-RSVD 60021 IANA-RSVD 60022 IANA-RSVD 60023 IANA-RSVD 60024 IANA-RSVD 60025 IANA-RSVD 60026 IANA-RSVD 60027 IANA-RSVD 60028 IANA-RSVD 60029 IANA-RSVD 60030 IANA-RSVD 60031 IANA-RSVD 60032 IANA-RSVD 60033 IANA-RSVD 60034 IANA-RSVD 60035 IANA-RSVD 60036 IANA-RSVD 60037 IANA-RSVD 60038 IANA-RSVD 60039 IANA-RSVD 60040 IANA-RSVD 60041 IANA-RSVD 60042 IANA-RSVD 60043 IANA-RSVD 60044 IANA-RSVD 60045 IANA-RSVD 60046 IANA-RSVD 60047 IANA-RSVD 60048 IANA-RSVD 60049 IANA-RSVD 60050 IANA-RSVD 60051 IANA-RSVD 60052 IANA-RSVD 60053 IANA-RSVD 60054 IANA-RSVD 60055 IANA-RSVD 60056 IANA-RSVD 60057 IANA-RSVD 60058 IANA-RSVD 60059 IANA-RSVD 60060 IANA-RSVD 60061 IANA-RSVD 60062 IANA-RSVD 60063 IANA-RSVD 60064 IANA-RSVD 60065 IANA-RSVD 60066 IANA-RSVD 60067 IANA-RSVD 60068 IANA-RSVD 60069 IANA-RSVD 60070 IANA-RSVD 60071 IANA-RSVD 60072 IANA-RSVD 60073 IANA-RSVD 60074 IANA-RSVD 60075 IANA-RSVD 60076 IANA-RSVD 60077 IANA-RSVD 60078 IANA-RSVD 60079 IANA-RSVD 60080 IANA-RSVD 60081 IANA-RSVD 60082 IANA-RSVD 60083 IANA-RSVD 60084 IANA-RSVD 60085 IANA-RSVD 60086 IANA-RSVD 60087 IANA-RSVD 60088 IANA-RSVD 60089 IANA-RSVD 60090 IANA-RSVD 60091 IANA-RSVD 60092 IANA-RSVD 60093 IANA-RSVD 60094 IANA-RSVD 60095 IANA-RSVD 60096 IANA-RSVD 60097 IANA-RSVD 60098 IANA-RSVD 60099 IANA-RSVD 60100 IANA-RSVD 60101 IANA-RSVD 60102 IANA-RSVD 60103 IANA-RSVD 60104 IANA-RSVD 60105 IANA-RSVD 60106 IANA-RSVD 60107 IANA-RSVD 60108 IANA-RSVD 60109 IANA-RSVD 60110 IANA-RSVD 60111 IANA-RSVD 60112 IANA-RSVD 60113 IANA-RSVD 60114 IANA-RSVD 60115 IANA-RSVD 60116 IANA-RSVD 60117 IANA-RSVD 60118 IANA-RSVD 60119 IANA-RSVD 60120 IANA-RSVD 60121 IANA-RSVD 60122 IANA-RSVD 60123 IANA-RSVD 60124 IANA-RSVD 60125 IANA-RSVD 60126 IANA-RSVD 60127 IANA-RSVD 60128 IANA-RSVD 60129 IANA-RSVD 60130 IANA-RSVD 60131 IANA-RSVD 60132 IANA-RSVD 60133 IANA-RSVD 60134 IANA-RSVD 60135 IANA-RSVD 60136 IANA-RSVD 60137 IANA-RSVD 60138 IANA-RSVD 60139 IANA-RSVD 60140 IANA-RSVD 60141 IANA-RSVD 60142 IANA-RSVD 60143 IANA-RSVD 60144 IANA-RSVD 60145 IANA-RSVD 60146 IANA-RSVD 60147 IANA-RSVD 60148 IANA-RSVD 60149 IANA-RSVD 60150 IANA-RSVD 60151 IANA-RSVD 60152 IANA-RSVD 60153 IANA-RSVD 60154 IANA-RSVD 60155 IANA-RSVD 60156 IANA-RSVD 60157 IANA-RSVD 60158 IANA-RSVD 60159 IANA-RSVD 60160 IANA-RSVD 60161 IANA-RSVD 60162 IANA-RSVD 60163 IANA-RSVD 60164 IANA-RSVD 60165 IANA-RSVD 60166 IANA-RSVD 60167 IANA-RSVD 60168 IANA-RSVD 60169 IANA-RSVD 60170 IANA-RSVD 60171 IANA-RSVD 60172 IANA-RSVD 60173 IANA-RSVD 60174 IANA-RSVD 60175 IANA-RSVD 60176 IANA-RSVD 60177 IANA-RSVD 60178 IANA-RSVD 60179 IANA-RSVD 60180 IANA-RSVD 60181 IANA-RSVD 60182 IANA-RSVD 60183 IANA-RSVD 60184 IANA-RSVD 60185 IANA-RSVD 60186 IANA-RSVD 60187 IANA-RSVD 60188 IANA-RSVD 60189 IANA-RSVD 60190 IANA-RSVD 60191 IANA-RSVD 60192 IANA-RSVD 60193 IANA-RSVD 60194 IANA-RSVD 60195 IANA-RSVD 60196 IANA-RSVD 60197 IANA-RSVD 60198 IANA-RSVD 60199 IANA-RSVD 60200 IANA-RSVD 60201 IANA-RSVD 60202 IANA-RSVD 60203 IANA-RSVD 60204 IANA-RSVD 60205 IANA-RSVD 60206 IANA-RSVD 60207 IANA-RSVD 60208 IANA-RSVD 60209 IANA-RSVD 60210 IANA-RSVD 60211 IANA-RSVD 60212 IANA-RSVD 60213 IANA-RSVD 60214 IANA-RSVD 60215 IANA-RSVD 60216 IANA-RSVD 60217 IANA-RSVD 60218 IANA-RSVD 60219 IANA-RSVD 60220 IANA-RSVD 60221 IANA-RSVD 60222 IANA-RSVD 60223 IANA-RSVD 60224 IANA-RSVD 60225 IANA-RSVD 60226 IANA-RSVD 60227 IANA-RSVD 60228 IANA-RSVD 60229 IANA-RSVD 60230 IANA-RSVD 60231 IANA-RSVD 60232 IANA-RSVD 60233 IANA-RSVD 60234 IANA-RSVD 60235 IANA-RSVD 60236 IANA-RSVD 60237 IANA-RSVD 60238 IANA-RSVD 60239 IANA-RSVD 60240 IANA-RSVD 60241 IANA-RSVD 60242 IANA-RSVD 60243 IANA-RSVD 60244 IANA-RSVD 60245 IANA-RSVD 60246 IANA-RSVD 60247 IANA-RSVD 60248 IANA-RSVD 60249 IANA-RSVD 60250 IANA-RSVD 60251 IANA-RSVD 60252 IANA-RSVD 60253 IANA-RSVD 60254 IANA-RSVD 60255 IANA-RSVD 60256 IANA-RSVD 60257 IANA-RSVD 60258 IANA-RSVD 60259 IANA-RSVD 60260 IANA-RSVD 60261 IANA-RSVD 60262 IANA-RSVD 60263 IANA-RSVD 60264 IANA-RSVD 60265 IANA-RSVD 60266 IANA-RSVD 60267 IANA-RSVD 60268 IANA-RSVD 60269 IANA-RSVD 60270 IANA-RSVD 60271 IANA-RSVD 60272 IANA-RSVD 60273 IANA-RSVD 60274 IANA-RSVD 60275 IANA-RSVD 60276 IANA-RSVD 60277 IANA-RSVD 60278 IANA-RSVD 60279 IANA-RSVD 60280 IANA-RSVD 60281 IANA-RSVD 60282 IANA-RSVD 60283 IANA-RSVD 60284 IANA-RSVD 60285 IANA-RSVD 60286 IANA-RSVD 60287 IANA-RSVD 60288 IANA-RSVD 60289 IANA-RSVD 60290 IANA-RSVD 60291 IANA-RSVD 60292 IANA-RSVD 60293 IANA-RSVD 60294 IANA-RSVD 60295 IANA-RSVD 60296 IANA-RSVD 60297 IANA-RSVD 60298 IANA-RSVD 60299 IANA-RSVD 60300 IANA-RSVD 60301 IANA-RSVD 60302 IANA-RSVD 60303 IANA-RSVD 60304 IANA-RSVD 60305 IANA-RSVD 60306 IANA-RSVD 60307 IANA-RSVD 60308 IANA-RSVD 60309 IANA-RSVD 60310 IANA-RSVD 60311 IANA-RSVD 60312 IANA-RSVD 60313 IANA-RSVD 60314 IANA-RSVD 60315 IANA-RSVD 60316 IANA-RSVD 60317 IANA-RSVD 60318 IANA-RSVD 60319 IANA-RSVD 60320 IANA-RSVD 60321 IANA-RSVD 60322 IANA-RSVD 60323 IANA-RSVD 60324 IANA-RSVD 60325 IANA-RSVD 60326 IANA-RSVD 60327 IANA-RSVD 60328 IANA-RSVD 60329 IANA-RSVD 60330 IANA-RSVD 60331 IANA-RSVD 60332 IANA-RSVD 60333 IANA-RSVD 60334 IANA-RSVD 60335 IANA-RSVD 60336 IANA-RSVD 60337 IANA-RSVD 60338 IANA-RSVD 60339 IANA-RSVD 60340 IANA-RSVD 60341 IANA-RSVD 60342 IANA-RSVD 60343 IANA-RSVD 60344 IANA-RSVD 60345 IANA-RSVD 60346 IANA-RSVD 60347 IANA-RSVD 60348 IANA-RSVD 60349 IANA-RSVD 60350 IANA-RSVD 60351 IANA-RSVD 60352 IANA-RSVD 60353 IANA-RSVD 60354 IANA-RSVD 60355 IANA-RSVD 60356 IANA-RSVD 60357 IANA-RSVD 60358 IANA-RSVD 60359 IANA-RSVD 60360 IANA-RSVD 60361 IANA-RSVD 60362 IANA-RSVD 60363 IANA-RSVD 60364 IANA-RSVD 60365 IANA-RSVD 60366 IANA-RSVD 60367 IANA-RSVD 60368 IANA-RSVD 60369 IANA-RSVD 60370 IANA-RSVD 60371 IANA-RSVD 60372 IANA-RSVD 60373 IANA-RSVD 60374 IANA-RSVD 60375 IANA-RSVD 60376 IANA-RSVD 60377 IANA-RSVD 60378 IANA-RSVD 60379 IANA-RSVD 60380 IANA-RSVD 60381 IANA-RSVD 60382 IANA-RSVD 60383 IANA-RSVD 60384 IANA-RSVD 60385 IANA-RSVD 60386 IANA-RSVD 60387 IANA-RSVD 60388 IANA-RSVD 60389 IANA-RSVD 60390 IANA-RSVD 60391 IANA-RSVD 60392 IANA-RSVD 60393 IANA-RSVD 60394 IANA-RSVD 60395 IANA-RSVD 60396 IANA-RSVD 60397 IANA-RSVD 60398 IANA-RSVD 60399 IANA-RSVD 60400 IANA-RSVD 60401 IANA-RSVD 60402 IANA-RSVD 60403 IANA-RSVD 60404 IANA-RSVD 60405 IANA-RSVD 60406 IANA-RSVD 60407 IANA-RSVD 60408 IANA-RSVD 60409 IANA-RSVD 60410 IANA-RSVD 60411 IANA-RSVD 60412 IANA-RSVD 60413 IANA-RSVD 60414 IANA-RSVD 60415 IANA-RSVD 60416 IANA-RSVD 60417 IANA-RSVD 60418 IANA-RSVD 60419 IANA-RSVD 60420 IANA-RSVD 60421 IANA-RSVD 60422 IANA-RSVD 60423 IANA-RSVD 60424 IANA-RSVD 60425 IANA-RSVD 60426 IANA-RSVD 60427 IANA-RSVD 60428 IANA-RSVD 60429 IANA-RSVD 60430 IANA-RSVD 60431 IANA-RSVD 60432 IANA-RSVD 60433 IANA-RSVD 60434 IANA-RSVD 60435 IANA-RSVD 60436 IANA-RSVD 60437 IANA-RSVD 60438 IANA-RSVD 60439 IANA-RSVD 60440 IANA-RSVD 60441 IANA-RSVD 60442 IANA-RSVD 60443 IANA-RSVD 60444 IANA-RSVD 60445 IANA-RSVD 60446 IANA-RSVD 60447 IANA-RSVD 60448 IANA-RSVD 60449 IANA-RSVD 60450 IANA-RSVD 60451 IANA-RSVD 60452 IANA-RSVD 60453 IANA-RSVD 60454 IANA-RSVD 60455 IANA-RSVD 60456 IANA-RSVD 60457 IANA-RSVD 60458 IANA-RSVD 60459 IANA-RSVD 60460 IANA-RSVD 60461 IANA-RSVD 60462 IANA-RSVD 60463 IANA-RSVD 60464 IANA-RSVD 60465 IANA-RSVD 60466 IANA-RSVD 60467 IANA-RSVD 60468 IANA-RSVD 60469 IANA-RSVD 60470 IANA-RSVD 60471 IANA-RSVD 60472 IANA-RSVD 60473 IANA-RSVD 60474 IANA-RSVD 60475 IANA-RSVD 60476 IANA-RSVD 60477 IANA-RSVD 60478 IANA-RSVD 60479 IANA-RSVD 60480 IANA-RSVD 60481 IANA-RSVD 60482 IANA-RSVD 60483 IANA-RSVD 60484 IANA-RSVD 60485 IANA-RSVD 60486 IANA-RSVD 60487 IANA-RSVD 60488 IANA-RSVD 60489 IANA-RSVD 60490 IANA-RSVD 60491 IANA-RSVD 60492 IANA-RSVD 60493 IANA-RSVD 60494 IANA-RSVD 60495 IANA-RSVD 60496 IANA-RSVD 60497 IANA-RSVD 60498 IANA-RSVD 60499 IANA-RSVD 60500 IANA-RSVD 60501 IANA-RSVD 60502 IANA-RSVD 60503 IANA-RSVD 60504 IANA-RSVD 60505 IANA-RSVD 60506 IANA-RSVD 60507 IANA-RSVD 60508 IANA-RSVD 60509 IANA-RSVD 60510 IANA-RSVD 60511 IANA-RSVD 60512 IANA-RSVD 60513 IANA-RSVD 60514 IANA-RSVD 60515 IANA-RSVD 60516 IANA-RSVD 60517 IANA-RSVD 60518 IANA-RSVD 60519 IANA-RSVD 60520 IANA-RSVD 60521 IANA-RSVD 60522 IANA-RSVD 60523 IANA-RSVD 60524 IANA-RSVD 60525 IANA-RSVD 60526 IANA-RSVD 60527 IANA-RSVD 60528 IANA-RSVD 60529 IANA-RSVD 60530 IANA-RSVD 60531 IANA-RSVD 60532 IANA-RSVD 60533 IANA-RSVD 60534 IANA-RSVD 60535 IANA-RSVD 60536 IANA-RSVD 60537 IANA-RSVD 60538 IANA-RSVD 60539 IANA-RSVD 60540 IANA-RSVD 60541 IANA-RSVD 60542 IANA-RSVD 60543 IANA-RSVD 60544 IANA-RSVD 60545 IANA-RSVD 60546 IANA-RSVD 60547 IANA-RSVD 60548 IANA-RSVD 60549 IANA-RSVD 60550 IANA-RSVD 60551 IANA-RSVD 60552 IANA-RSVD 60553 IANA-RSVD 60554 IANA-RSVD 60555 IANA-RSVD 60556 IANA-RSVD 60557 IANA-RSVD 60558 IANA-RSVD 60559 IANA-RSVD 60560 IANA-RSVD 60561 IANA-RSVD 60562 IANA-RSVD 60563 IANA-RSVD 60564 IANA-RSVD 60565 IANA-RSVD 60566 IANA-RSVD 60567 IANA-RSVD 60568 IANA-RSVD 60569 IANA-RSVD 60570 IANA-RSVD 60571 IANA-RSVD 60572 IANA-RSVD 60573 IANA-RSVD 60574 IANA-RSVD 60575 IANA-RSVD 60576 IANA-RSVD 60577 IANA-RSVD 60578 IANA-RSVD 60579 IANA-RSVD 60580 IANA-RSVD 60581 IANA-RSVD 60582 IANA-RSVD 60583 IANA-RSVD 60584 IANA-RSVD 60585 IANA-RSVD 60586 IANA-RSVD 60587 IANA-RSVD 60588 IANA-RSVD 60589 IANA-RSVD 60590 IANA-RSVD 60591 IANA-RSVD 60592 IANA-RSVD 60593 IANA-RSVD 60594 IANA-RSVD 60595 IANA-RSVD 60596 IANA-RSVD 60597 IANA-RSVD 60598 IANA-RSVD 60599 IANA-RSVD 60600 IANA-RSVD 60601 IANA-RSVD 60602 IANA-RSVD 60603 IANA-RSVD 60604 IANA-RSVD 60605 IANA-RSVD 60606 IANA-RSVD 60607 IANA-RSVD 60608 IANA-RSVD 60609 IANA-RSVD 60610 IANA-RSVD 60611 IANA-RSVD 60612 IANA-RSVD 60613 IANA-RSVD 60614 IANA-RSVD 60615 IANA-RSVD 60616 IANA-RSVD 60617 IANA-RSVD 60618 IANA-RSVD 60619 IANA-RSVD 60620 IANA-RSVD 60621 IANA-RSVD 60622 IANA-RSVD 60623 IANA-RSVD 60624 IANA-RSVD 60625 IANA-RSVD 60626 IANA-RSVD 60627 IANA-RSVD 60628 IANA-RSVD 60629 IANA-RSVD 60630 IANA-RSVD 60631 IANA-RSVD 60632 IANA-RSVD 60633 IANA-RSVD 60634 IANA-RSVD 60635 IANA-RSVD 60636 IANA-RSVD 60637 IANA-RSVD 60638 IANA-RSVD 60639 IANA-RSVD 60640 IANA-RSVD 60641 IANA-RSVD 60642 IANA-RSVD 60643 IANA-RSVD 60644 IANA-RSVD 60645 IANA-RSVD 60646 IANA-RSVD 60647 IANA-RSVD 60648 IANA-RSVD 60649 IANA-RSVD 60650 IANA-RSVD 60651 IANA-RSVD 60652 IANA-RSVD 60653 IANA-RSVD 60654 IANA-RSVD 60655 IANA-RSVD 60656 IANA-RSVD 60657 IANA-RSVD 60658 IANA-RSVD 60659 IANA-RSVD 60660 IANA-RSVD 60661 IANA-RSVD 60662 IANA-RSVD 60663 IANA-RSVD 60664 IANA-RSVD 60665 IANA-RSVD 60666 IANA-RSVD 60667 IANA-RSVD 60668 IANA-RSVD 60669 IANA-RSVD 60670 IANA-RSVD 60671 IANA-RSVD 60672 IANA-RSVD 60673 IANA-RSVD 60674 IANA-RSVD 60675 IANA-RSVD 60676 IANA-RSVD 60677 IANA-RSVD 60678 IANA-RSVD 60679 IANA-RSVD 60680 IANA-RSVD 60681 IANA-RSVD 60682 IANA-RSVD 60683 IANA-RSVD 60684 IANA-RSVD 60685 IANA-RSVD 60686 IANA-RSVD 60687 IANA-RSVD 60688 IANA-RSVD 60689 IANA-RSVD 60690 IANA-RSVD 60691 IANA-RSVD 60692 IANA-RSVD 60693 IANA-RSVD 60694 IANA-RSVD 60695 IANA-RSVD 60696 IANA-RSVD 60697 IANA-RSVD 60698 IANA-RSVD 60699 IANA-RSVD 60700 IANA-RSVD 60701 IANA-RSVD 60702 IANA-RSVD 60703 IANA-RSVD 60704 IANA-RSVD 60705 IANA-RSVD 60706 IANA-RSVD 60707 IANA-RSVD 60708 IANA-RSVD 60709 IANA-RSVD 60710 IANA-RSVD 60711 IANA-RSVD 60712 IANA-RSVD 60713 IANA-RSVD 60714 IANA-RSVD 60715 IANA-RSVD 60716 IANA-RSVD 60717 IANA-RSVD 60718 IANA-RSVD 60719 IANA-RSVD 60720 IANA-RSVD 60721 IANA-RSVD 60722 IANA-RSVD 60723 IANA-RSVD 60724 IANA-RSVD 60725 IANA-RSVD 60726 IANA-RSVD 60727 IANA-RSVD 60728 IANA-RSVD 60729 IANA-RSVD 60730 IANA-RSVD 60731 IANA-RSVD 60732 IANA-RSVD 60733 IANA-RSVD 60734 IANA-RSVD 60735 IANA-RSVD 60736 IANA-RSVD 60737 IANA-RSVD 60738 IANA-RSVD 60739 IANA-RSVD 60740 IANA-RSVD 60741 IANA-RSVD 60742 IANA-RSVD 60743 IANA-RSVD 60744 IANA-RSVD 60745 IANA-RSVD 60746 IANA-RSVD 60747 IANA-RSVD 60748 IANA-RSVD 60749 IANA-RSVD 60750 IANA-RSVD 60751 IANA-RSVD 60752 IANA-RSVD 60753 IANA-RSVD 60754 IANA-RSVD 60755 IANA-RSVD 60756 IANA-RSVD 60757 IANA-RSVD 60758 IANA-RSVD 60759 IANA-RSVD 60760 IANA-RSVD 60761 IANA-RSVD 60762 IANA-RSVD 60763 IANA-RSVD 60764 IANA-RSVD 60765 IANA-RSVD 60766 IANA-RSVD 60767 IANA-RSVD 60768 IANA-RSVD 60769 IANA-RSVD 60770 IANA-RSVD 60771 IANA-RSVD 60772 IANA-RSVD 60773 IANA-RSVD 60774 IANA-RSVD 60775 IANA-RSVD 60776 IANA-RSVD 60777 IANA-RSVD 60778 IANA-RSVD 60779 IANA-RSVD 60780 IANA-RSVD 60781 IANA-RSVD 60782 IANA-RSVD 60783 IANA-RSVD 60784 IANA-RSVD 60785 IANA-RSVD 60786 IANA-RSVD 60787 IANA-RSVD 60788 IANA-RSVD 60789 IANA-RSVD 60790 IANA-RSVD 60791 IANA-RSVD 60792 IANA-RSVD 60793 IANA-RSVD 60794 IANA-RSVD 60795 IANA-RSVD 60796 IANA-RSVD 60797 IANA-RSVD 60798 IANA-RSVD 60799 IANA-RSVD 60800 IANA-RSVD 60801 IANA-RSVD 60802 IANA-RSVD 60803 IANA-RSVD 60804 IANA-RSVD 60805 IANA-RSVD 60806 IANA-RSVD 60807 IANA-RSVD 60808 IANA-RSVD 60809 IANA-RSVD 60810 IANA-RSVD 60811 IANA-RSVD 60812 IANA-RSVD 60813 IANA-RSVD 60814 IANA-RSVD 60815 IANA-RSVD 60816 IANA-RSVD 60817 IANA-RSVD 60818 IANA-RSVD 60819 IANA-RSVD 60820 IANA-RSVD 60821 IANA-RSVD 60822 IANA-RSVD 60823 IANA-RSVD 60824 IANA-RSVD 60825 IANA-RSVD 60826 IANA-RSVD 60827 IANA-RSVD 60828 IANA-RSVD 60829 IANA-RSVD 60830 IANA-RSVD 60831 IANA-RSVD 60832 IANA-RSVD 60833 IANA-RSVD 60834 IANA-RSVD 60835 IANA-RSVD 60836 IANA-RSVD 60837 IANA-RSVD 60838 IANA-RSVD 60839 IANA-RSVD 60840 IANA-RSVD 60841 IANA-RSVD 60842 IANA-RSVD 60843 IANA-RSVD 60844 IANA-RSVD 60845 IANA-RSVD 60846 IANA-RSVD 60847 IANA-RSVD 60848 IANA-RSVD 60849 IANA-RSVD 60850 IANA-RSVD 60851 IANA-RSVD 60852 IANA-RSVD 60853 IANA-RSVD 60854 IANA-RSVD 60855 IANA-RSVD 60856 IANA-RSVD 60857 IANA-RSVD 60858 IANA-RSVD 60859 IANA-RSVD 60860 IANA-RSVD 60861 IANA-RSVD 60862 IANA-RSVD 60863 IANA-RSVD 60864 IANA-RSVD 60865 IANA-RSVD 60866 IANA-RSVD 60867 IANA-RSVD 60868 IANA-RSVD 60869 IANA-RSVD 60870 IANA-RSVD 60871 IANA-RSVD 60872 IANA-RSVD 60873 IANA-RSVD 60874 IANA-RSVD 60875 IANA-RSVD 60876 IANA-RSVD 60877 IANA-RSVD 60878 IANA-RSVD 60879 IANA-RSVD 60880 IANA-RSVD 60881 IANA-RSVD 60882 IANA-RSVD 60883 IANA-RSVD 60884 IANA-RSVD 60885 IANA-RSVD 60886 IANA-RSVD 60887 IANA-RSVD 60888 IANA-RSVD 60889 IANA-RSVD 60890 IANA-RSVD 60891 IANA-RSVD 60892 IANA-RSVD 60893 IANA-RSVD 60894 IANA-RSVD 60895 IANA-RSVD 60896 IANA-RSVD 60897 IANA-RSVD 60898 IANA-RSVD 60899 IANA-RSVD 60900 IANA-RSVD 60901 IANA-RSVD 60902 IANA-RSVD 60903 IANA-RSVD 60904 IANA-RSVD 60905 IANA-RSVD 60906 IANA-RSVD 60907 IANA-RSVD 60908 IANA-RSVD 60909 IANA-RSVD 60910 IANA-RSVD 60911 IANA-RSVD 60912 IANA-RSVD 60913 IANA-RSVD 60914 IANA-RSVD 60915 IANA-RSVD 60916 IANA-RSVD 60917 IANA-RSVD 60918 IANA-RSVD 60919 IANA-RSVD 60920 IANA-RSVD 60921 IANA-RSVD 60922 IANA-RSVD 60923 IANA-RSVD 60924 IANA-RSVD 60925 IANA-RSVD 60926 IANA-RSVD 60927 IANA-RSVD 60928 IANA-RSVD 60929 IANA-RSVD 60930 IANA-RSVD 60931 IANA-RSVD 60932 IANA-RSVD 60933 IANA-RSVD 60934 IANA-RSVD 60935 IANA-RSVD 60936 IANA-RSVD 60937 IANA-RSVD 60938 IANA-RSVD 60939 IANA-RSVD 60940 IANA-RSVD 60941 IANA-RSVD 60942 IANA-RSVD 60943 IANA-RSVD 60944 IANA-RSVD 60945 IANA-RSVD 60946 IANA-RSVD 60947 IANA-RSVD 60948 IANA-RSVD 60949 IANA-RSVD 60950 IANA-RSVD 60951 IANA-RSVD 60952 IANA-RSVD 60953 IANA-RSVD 60954 IANA-RSVD 60955 IANA-RSVD 60956 IANA-RSVD 60957 IANA-RSVD 60958 IANA-RSVD 60959 IANA-RSVD 60960 IANA-RSVD 60961 IANA-RSVD 60962 IANA-RSVD 60963 IANA-RSVD 60964 IANA-RSVD 60965 IANA-RSVD 60966 IANA-RSVD 60967 IANA-RSVD 60968 IANA-RSVD 60969 IANA-RSVD 60970 IANA-RSVD 60971 IANA-RSVD 60972 IANA-RSVD 60973 IANA-RSVD 60974 IANA-RSVD 60975 IANA-RSVD 60976 IANA-RSVD 60977 IANA-RSVD 60978 IANA-RSVD 60979 IANA-RSVD 60980 IANA-RSVD 60981 IANA-RSVD 60982 IANA-RSVD 60983 IANA-RSVD 60984 IANA-RSVD 60985 IANA-RSVD 60986 IANA-RSVD 60987 IANA-RSVD 60988 IANA-RSVD 60989 IANA-RSVD 60990 IANA-RSVD 60991 IANA-RSVD 60992 IANA-RSVD 60993 IANA-RSVD 60994 IANA-RSVD 60995 IANA-RSVD 60996 IANA-RSVD 60997 IANA-RSVD 60998 IANA-RSVD 60999 IANA-RSVD 61000 IANA-RSVD 61001 IANA-RSVD 61002 IANA-RSVD 61003 IANA-RSVD 61004 IANA-RSVD 61005 IANA-RSVD 61006 IANA-RSVD 61007 IANA-RSVD 61008 IANA-RSVD 61009 IANA-RSVD 61010 IANA-RSVD 61011 IANA-RSVD 61012 IANA-RSVD 61013 IANA-RSVD 61014 IANA-RSVD 61015 IANA-RSVD 61016 IANA-RSVD 61017 IANA-RSVD 61018 IANA-RSVD 61019 IANA-RSVD 61020 IANA-RSVD 61021 IANA-RSVD 61022 IANA-RSVD 61023 IANA-RSVD 61024 IANA-RSVD 61025 IANA-RSVD 61026 IANA-RSVD 61027 IANA-RSVD 61028 IANA-RSVD 61029 IANA-RSVD 61030 IANA-RSVD 61031 IANA-RSVD 61032 IANA-RSVD 61033 IANA-RSVD 61034 IANA-RSVD 61035 IANA-RSVD 61036 IANA-RSVD 61037 IANA-RSVD 61038 IANA-RSVD 61039 IANA-RSVD 61040 IANA-RSVD 61041 IANA-RSVD 61042 IANA-RSVD 61043 IANA-RSVD 61044 IANA-RSVD 61045 IANA-RSVD 61046 IANA-RSVD 61047 IANA-RSVD 61048 IANA-RSVD 61049 IANA-RSVD 61050 IANA-RSVD 61051 IANA-RSVD 61052 IANA-RSVD 61053 IANA-RSVD 61054 IANA-RSVD 61055 IANA-RSVD 61056 IANA-RSVD 61057 IANA-RSVD 61058 IANA-RSVD 61059 IANA-RSVD 61060 IANA-RSVD 61061 IANA-RSVD 61062 IANA-RSVD 61063 IANA-RSVD 61064 IANA-RSVD 61065 IANA-RSVD 61066 IANA-RSVD 61067 IANA-RSVD 61068 IANA-RSVD 61069 IANA-RSVD 61070 IANA-RSVD 61071 IANA-RSVD 61072 IANA-RSVD 61073 IANA-RSVD 61074 IANA-RSVD 61075 IANA-RSVD 61076 IANA-RSVD 61077 IANA-RSVD 61078 IANA-RSVD 61079 IANA-RSVD 61080 IANA-RSVD 61081 IANA-RSVD 61082 IANA-RSVD 61083 IANA-RSVD 61084 IANA-RSVD 61085 IANA-RSVD 61086 IANA-RSVD 61087 IANA-RSVD 61088 IANA-RSVD 61089 IANA-RSVD 61090 IANA-RSVD 61091 IANA-RSVD 61092 IANA-RSVD 61093 IANA-RSVD 61094 IANA-RSVD 61095 IANA-RSVD 61096 IANA-RSVD 61097 IANA-RSVD 61098 IANA-RSVD 61099 IANA-RSVD 61100 IANA-RSVD 61101 IANA-RSVD 61102 IANA-RSVD 61103 IANA-RSVD 61104 IANA-RSVD 61105 IANA-RSVD 61106 IANA-RSVD 61107 IANA-RSVD 61108 IANA-RSVD 61109 IANA-RSVD 61110 IANA-RSVD 61111 IANA-RSVD 61112 IANA-RSVD 61113 IANA-RSVD 61114 IANA-RSVD 61115 IANA-RSVD 61116 IANA-RSVD 61117 IANA-RSVD 61118 IANA-RSVD 61119 IANA-RSVD 61120 IANA-RSVD 61121 IANA-RSVD 61122 IANA-RSVD 61123 IANA-RSVD 61124 IANA-RSVD 61125 IANA-RSVD 61126 IANA-RSVD 61127 IANA-RSVD 61128 IANA-RSVD 61129 IANA-RSVD 61130 IANA-RSVD 61131 IANA-RSVD 61132 IANA-RSVD 61133 IANA-RSVD 61134 IANA-RSVD 61135 IANA-RSVD 61136 IANA-RSVD 61137 IANA-RSVD 61138 IANA-RSVD 61139 IANA-RSVD 61140 IANA-RSVD 61141 IANA-RSVD 61142 IANA-RSVD 61143 IANA-RSVD 61144 IANA-RSVD 61145 IANA-RSVD 61146 IANA-RSVD 61147 IANA-RSVD 61148 IANA-RSVD 61149 IANA-RSVD 61150 IANA-RSVD 61151 IANA-RSVD 61152 IANA-RSVD 61153 IANA-RSVD 61154 IANA-RSVD 61155 IANA-RSVD 61156 IANA-RSVD 61157 IANA-RSVD 61158 IANA-RSVD 61159 IANA-RSVD 61160 IANA-RSVD 61161 IANA-RSVD 61162 IANA-RSVD 61163 IANA-RSVD 61164 IANA-RSVD 61165 IANA-RSVD 61166 IANA-RSVD 61167 IANA-RSVD 61168 IANA-RSVD 61169 IANA-RSVD 61170 IANA-RSVD 61171 IANA-RSVD 61172 IANA-RSVD 61173 IANA-RSVD 61174 IANA-RSVD 61175 IANA-RSVD 61176 IANA-RSVD 61177 IANA-RSVD 61178 IANA-RSVD 61179 IANA-RSVD 61180 IANA-RSVD 61181 IANA-RSVD 61182 IANA-RSVD 61183 IANA-RSVD 61184 IANA-RSVD 61185 IANA-RSVD 61186 IANA-RSVD 61187 IANA-RSVD 61188 IANA-RSVD 61189 IANA-RSVD 61190 IANA-RSVD 61191 IANA-RSVD 61192 IANA-RSVD 61193 IANA-RSVD 61194 IANA-RSVD 61195 IANA-RSVD 61196 IANA-RSVD 61197 IANA-RSVD 61198 IANA-RSVD 61199 IANA-RSVD 61200 IANA-RSVD 61201 IANA-RSVD 61202 IANA-RSVD 61203 IANA-RSVD 61204 IANA-RSVD 61205 IANA-RSVD 61206 IANA-RSVD 61207 IANA-RSVD 61208 IANA-RSVD 61209 IANA-RSVD 61210 IANA-RSVD 61211 IANA-RSVD 61212 IANA-RSVD 61213 IANA-RSVD 61214 IANA-RSVD 61215 IANA-RSVD 61216 IANA-RSVD 61217 IANA-RSVD 61218 IANA-RSVD 61219 IANA-RSVD 61220 IANA-RSVD 61221 IANA-RSVD 61222 IANA-RSVD 61223 IANA-RSVD 61224 IANA-RSVD 61225 IANA-RSVD 61226 IANA-RSVD 61227 IANA-RSVD 61228 IANA-RSVD 61229 IANA-RSVD 61230 IANA-RSVD 61231 IANA-RSVD 61232 IANA-RSVD 61233 IANA-RSVD 61234 IANA-RSVD 61235 IANA-RSVD 61236 IANA-RSVD 61237 IANA-RSVD 61238 IANA-RSVD 61239 IANA-RSVD 61240 IANA-RSVD 61241 IANA-RSVD 61242 IANA-RSVD 61243 IANA-RSVD 61244 IANA-RSVD 61245 IANA-RSVD 61246 IANA-RSVD 61247 IANA-RSVD 61248 IANA-RSVD 61249 IANA-RSVD 61250 IANA-RSVD 61251 IANA-RSVD 61252 IANA-RSVD 61253 IANA-RSVD 61254 IANA-RSVD 61255 IANA-RSVD 61256 IANA-RSVD 61257 IANA-RSVD 61258 IANA-RSVD 61259 IANA-RSVD 61260 IANA-RSVD 61261 IANA-RSVD 61262 IANA-RSVD 61263 IANA-RSVD 61264 IANA-RSVD 61265 IANA-RSVD 61266 IANA-RSVD 61267 IANA-RSVD 61268 IANA-RSVD 61269 IANA-RSVD 61270 IANA-RSVD 61271 IANA-RSVD 61272 IANA-RSVD 61273 IANA-RSVD 61274 IANA-RSVD 61275 IANA-RSVD 61276 IANA-RSVD 61277 IANA-RSVD 61278 IANA-RSVD 61279 IANA-RSVD 61280 IANA-RSVD 61281 IANA-RSVD 61282 IANA-RSVD 61283 IANA-RSVD 61284 IANA-RSVD 61285 IANA-RSVD 61286 IANA-RSVD 61287 IANA-RSVD 61288 IANA-RSVD 61289 IANA-RSVD 61290 IANA-RSVD 61291 IANA-RSVD 61292 IANA-RSVD 61293 IANA-RSVD 61294 IANA-RSVD 61295 IANA-RSVD 61296 IANA-RSVD 61297 IANA-RSVD 61298 IANA-RSVD 61299 IANA-RSVD 61300 IANA-RSVD 61301 IANA-RSVD 61302 IANA-RSVD 61303 IANA-RSVD 61304 IANA-RSVD 61305 IANA-RSVD 61306 IANA-RSVD 61307 IANA-RSVD 61308 IANA-RSVD 61309 IANA-RSVD 61310 IANA-RSVD 61311 IANA-RSVD 61312 IANA-RSVD 61313 IANA-RSVD 61314 IANA-RSVD 61315 IANA-RSVD 61316 IANA-RSVD 61317 IANA-RSVD 61318 IANA-RSVD 61319 IANA-RSVD 61320 IANA-RSVD 61321 IANA-RSVD 61322 IANA-RSVD 61323 IANA-RSVD 61324 IANA-RSVD 61325 IANA-RSVD 61326 IANA-RSVD 61327 IANA-RSVD 61328 IANA-RSVD 61329 IANA-RSVD 61330 IANA-RSVD 61331 IANA-RSVD 61332 IANA-RSVD 61333 IANA-RSVD 61334 IANA-RSVD 61335 IANA-RSVD 61336 IANA-RSVD 61337 IANA-RSVD 61338 IANA-RSVD 61339 IANA-RSVD 61340 IANA-RSVD 61341 IANA-RSVD 61342 IANA-RSVD 61343 IANA-RSVD 61344 IANA-RSVD 61345 IANA-RSVD 61346 IANA-RSVD 61347 IANA-RSVD 61348 IANA-RSVD 61349 IANA-RSVD 61350 IANA-RSVD 61351 IANA-RSVD 61352 IANA-RSVD 61353 IANA-RSVD 61354 IANA-RSVD 61355 IANA-RSVD 61356 IANA-RSVD 61357 IANA-RSVD 61358 IANA-RSVD 61359 IANA-RSVD 61360 IANA-RSVD 61361 IANA-RSVD 61362 IANA-RSVD 61363 IANA-RSVD 61364 IANA-RSVD 61365 IANA-RSVD 61366 IANA-RSVD 61367 IANA-RSVD 61368 IANA-RSVD 61369 IANA-RSVD 61370 IANA-RSVD 61371 IANA-RSVD 61372 IANA-RSVD 61373 IANA-RSVD 61374 IANA-RSVD 61375 IANA-RSVD 61376 IANA-RSVD 61377 IANA-RSVD 61378 IANA-RSVD 61379 IANA-RSVD 61380 IANA-RSVD 61381 IANA-RSVD 61382 IANA-RSVD 61383 IANA-RSVD 61384 IANA-RSVD 61385 IANA-RSVD 61386 IANA-RSVD 61387 IANA-RSVD 61388 IANA-RSVD 61389 IANA-RSVD 61390 IANA-RSVD 61391 IANA-RSVD 61392 IANA-RSVD 61393 IANA-RSVD 61394 IANA-RSVD 61395 IANA-RSVD 61396 IANA-RSVD 61397 IANA-RSVD 61398 IANA-RSVD 61399 IANA-RSVD 61400 IANA-RSVD 61401 IANA-RSVD 61402 IANA-RSVD 61403 IANA-RSVD 61404 IANA-RSVD 61405 IANA-RSVD 61406 IANA-RSVD 61407 IANA-RSVD 61408 IANA-RSVD 61409 IANA-RSVD 61410 IANA-RSVD 61411 IANA-RSVD 61412 IANA-RSVD 61413 IANA-RSVD 61414 IANA-RSVD 61415 IANA-RSVD 61416 IANA-RSVD 61417 IANA-RSVD 61418 IANA-RSVD 61419 IANA-RSVD 61420 IANA-RSVD 61421 IANA-RSVD 61422 IANA-RSVD 61423 IANA-RSVD 61424 IANA-RSVD 61425 IANA-RSVD 61426 IANA-RSVD 61427 IANA-RSVD 61428 IANA-RSVD 61429 IANA-RSVD 61430 IANA-RSVD 61431 IANA-RSVD 61432 IANA-RSVD 61433 IANA-RSVD 61434 IANA-RSVD 61435 IANA-RSVD 61436 IANA-RSVD 61437 IANA-RSVD 61438 IANA-RSVD 61439 IANA-RSVD 61440 IANA-RSVD 61441 IANA-RSVD 61442 IANA-RSVD 61443 IANA-RSVD 61444 IANA-RSVD 61445 IANA-RSVD 61446 IANA-RSVD 61447 IANA-RSVD 61448 IANA-RSVD 61449 IANA-RSVD 61450 IANA-RSVD 61451 IANA-RSVD 61452 IANA-RSVD 61453 IANA-RSVD 61454 IANA-RSVD 61455 IANA-RSVD 61456 IANA-RSVD 61457 IANA-RSVD 61458 IANA-RSVD 61459 IANA-RSVD 61460 IANA-RSVD 61461 IANA-RSVD 61462 IANA-RSVD 61463 IANA-RSVD 61464 IANA-RSVD 61465 IANA-RSVD 61466 IANA-RSVD 61467 IANA-RSVD 61468 IANA-RSVD 61469 IANA-RSVD 61470 IANA-RSVD 61471 IANA-RSVD 61472 IANA-RSVD 61473 IANA-RSVD 61474 IANA-RSVD 61475 IANA-RSVD 61476 IANA-RSVD 61477 IANA-RSVD 61478 IANA-RSVD 61479 IANA-RSVD 61480 IANA-RSVD 61481 IANA-RSVD 61482 IANA-RSVD 61483 IANA-RSVD 61484 IANA-RSVD 61485 IANA-RSVD 61486 IANA-RSVD 61487 IANA-RSVD 61488 IANA-RSVD 61489 IANA-RSVD 61490 IANA-RSVD 61491 IANA-RSVD 61492 IANA-RSVD 61493 IANA-RSVD 61494 IANA-RSVD 61495 IANA-RSVD 61496 IANA-RSVD 61497 IANA-RSVD 61498 IANA-RSVD 61499 IANA-RSVD 61500 IANA-RSVD 61501 IANA-RSVD 61502 IANA-RSVD 61503 IANA-RSVD 61504 IANA-RSVD 61505 IANA-RSVD 61506 IANA-RSVD 61507 IANA-RSVD 61508 IANA-RSVD 61509 IANA-RSVD 61510 IANA-RSVD 61511 IANA-RSVD 61512 IANA-RSVD 61513 IANA-RSVD 61514 IANA-RSVD 61515 IANA-RSVD 61516 IANA-RSVD 61517 IANA-RSVD 61518 IANA-RSVD 61519 IANA-RSVD 61520 IANA-RSVD 61521 IANA-RSVD 61522 IANA-RSVD 61523 IANA-RSVD 61524 IANA-RSVD 61525 IANA-RSVD 61526 IANA-RSVD 61527 IANA-RSVD 61528 IANA-RSVD 61529 IANA-RSVD 61530 IANA-RSVD 61531 IANA-RSVD 61532 IANA-RSVD 61533 IANA-RSVD 61534 IANA-RSVD 61535 IANA-RSVD 61536 IANA-RSVD 61537 IANA-RSVD 61538 IANA-RSVD 61539 IANA-RSVD 61540 IANA-RSVD 61541 IANA-RSVD 61542 IANA-RSVD 61543 IANA-RSVD 61544 IANA-RSVD 61545 IANA-RSVD 61546 IANA-RSVD 61547 IANA-RSVD 61548 IANA-RSVD 61549 IANA-RSVD 61550 IANA-RSVD 61551 IANA-RSVD 61552 IANA-RSVD 61553 IANA-RSVD 61554 IANA-RSVD 61555 IANA-RSVD 61556 IANA-RSVD 61557 IANA-RSVD 61558 IANA-RSVD 61559 IANA-RSVD 61560 IANA-RSVD 61561 IANA-RSVD 61562 IANA-RSVD 61563 IANA-RSVD 61564 IANA-RSVD 61565 IANA-RSVD 61566 IANA-RSVD 61567 IANA-RSVD 61568 IANA-RSVD 61569 IANA-RSVD 61570 IANA-RSVD 61571 IANA-RSVD 61572 IANA-RSVD 61573 IANA-RSVD 61574 IANA-RSVD 61575 IANA-RSVD 61576 IANA-RSVD 61577 IANA-RSVD 61578 IANA-RSVD 61579 IANA-RSVD 61580 IANA-RSVD 61581 IANA-RSVD 61582 IANA-RSVD 61583 IANA-RSVD 61584 IANA-RSVD 61585 IANA-RSVD 61586 IANA-RSVD 61587 IANA-RSVD 61588 IANA-RSVD 61589 IANA-RSVD 61590 IANA-RSVD 61591 IANA-RSVD 61592 IANA-RSVD 61593 IANA-RSVD 61594 IANA-RSVD 61595 IANA-RSVD 61596 IANA-RSVD 61597 IANA-RSVD 61598 IANA-RSVD 61599 IANA-RSVD 61600 IANA-RSVD 61601 IANA-RSVD 61602 IANA-RSVD 61603 IANA-RSVD 61604 IANA-RSVD 61605 IANA-RSVD 61606 IANA-RSVD 61607 IANA-RSVD 61608 IANA-RSVD 61609 IANA-RSVD 61610 IANA-RSVD 61611 IANA-RSVD 61612 IANA-RSVD 61613 IANA-RSVD 61614 IANA-RSVD 61615 IANA-RSVD 61616 IANA-RSVD 61617 IANA-RSVD 61618 IANA-RSVD 61619 IANA-RSVD 61620 IANA-RSVD 61621 IANA-RSVD 61622 IANA-RSVD 61623 IANA-RSVD 61624 IANA-RSVD 61625 IANA-RSVD 61626 IANA-RSVD 61627 IANA-RSVD 61628 IANA-RSVD 61629 IANA-RSVD 61630 IANA-RSVD 61631 IANA-RSVD 61632 IANA-RSVD 61633 IANA-RSVD 61634 IANA-RSVD 61635 IANA-RSVD 61636 IANA-RSVD 61637 IANA-RSVD 61638 IANA-RSVD 61639 IANA-RSVD 61640 IANA-RSVD 61641 IANA-RSVD 61642 IANA-RSVD 61643 IANA-RSVD 61644 IANA-RSVD 61645 IANA-RSVD 61646 IANA-RSVD 61647 IANA-RSVD 61648 IANA-RSVD 61649 IANA-RSVD 61650 IANA-RSVD 61651 IANA-RSVD 61652 IANA-RSVD 61653 IANA-RSVD 61654 IANA-RSVD 61655 IANA-RSVD 61656 IANA-RSVD 61657 IANA-RSVD 61658 IANA-RSVD 61659 IANA-RSVD 61660 IANA-RSVD 61661 IANA-RSVD 61662 IANA-RSVD 61663 IANA-RSVD 61664 IANA-RSVD 61665 IANA-RSVD 61666 IANA-RSVD 61667 IANA-RSVD 61668 IANA-RSVD 61669 IANA-RSVD 61670 IANA-RSVD 61671 IANA-RSVD 61672 IANA-RSVD 61673 IANA-RSVD 61674 IANA-RSVD 61675 IANA-RSVD 61676 IANA-RSVD 61677 IANA-RSVD 61678 IANA-RSVD 61679 IANA-RSVD 61680 IANA-RSVD 61681 IANA-RSVD 61682 IANA-RSVD 61683 IANA-RSVD 61684 IANA-RSVD 61685 IANA-RSVD 61686 IANA-RSVD 61687 IANA-RSVD 61688 IANA-RSVD 61689 IANA-RSVD 61690 IANA-RSVD 61691 IANA-RSVD 61692 IANA-RSVD 61693 IANA-RSVD 61694 IANA-RSVD 61695 IANA-RSVD 61696 IANA-RSVD 61697 IANA-RSVD 61698 IANA-RSVD 61699 IANA-RSVD 61700 IANA-RSVD 61701 IANA-RSVD 61702 IANA-RSVD 61703 IANA-RSVD 61704 IANA-RSVD 61705 IANA-RSVD 61706 IANA-RSVD 61707 IANA-RSVD 61708 IANA-RSVD 61709 IANA-RSVD 61710 IANA-RSVD 61711 IANA-RSVD 61712 IANA-RSVD 61713 IANA-RSVD 61714 IANA-RSVD 61715 IANA-RSVD 61716 IANA-RSVD 61717 IANA-RSVD 61718 IANA-RSVD 61719 IANA-RSVD 61720 IANA-RSVD 61721 IANA-RSVD 61722 IANA-RSVD 61723 IANA-RSVD 61724 IANA-RSVD 61725 IANA-RSVD 61726 IANA-RSVD 61727 IANA-RSVD 61728 IANA-RSVD 61729 IANA-RSVD 61730 IANA-RSVD 61731 IANA-RSVD 61732 IANA-RSVD 61733 IANA-RSVD 61734 IANA-RSVD 61735 IANA-RSVD 61736 IANA-RSVD 61737 IANA-RSVD 61738 IANA-RSVD 61739 IANA-RSVD 61740 IANA-RSVD 61741 IANA-RSVD 61742 IANA-RSVD 61743 IANA-RSVD 61744 IANA-RSVD 61745 IANA-RSVD 61746 IANA-RSVD 61747 IANA-RSVD 61748 IANA-RSVD 61749 IANA-RSVD 61750 IANA-RSVD 61751 IANA-RSVD 61752 IANA-RSVD 61753 IANA-RSVD 61754 IANA-RSVD 61755 IANA-RSVD 61756 IANA-RSVD 61757 IANA-RSVD 61758 IANA-RSVD 61759 IANA-RSVD 61760 IANA-RSVD 61761 IANA-RSVD 61762 IANA-RSVD 61763 IANA-RSVD 61764 IANA-RSVD 61765 IANA-RSVD 61766 IANA-RSVD 61767 IANA-RSVD 61768 IANA-RSVD 61769 IANA-RSVD 61770 IANA-RSVD 61771 IANA-RSVD 61772 IANA-RSVD 61773 IANA-RSVD 61774 IANA-RSVD 61775 IANA-RSVD 61776 IANA-RSVD 61777 IANA-RSVD 61778 IANA-RSVD 61779 IANA-RSVD 61780 IANA-RSVD 61781 IANA-RSVD 61782 IANA-RSVD 61783 IANA-RSVD 61784 IANA-RSVD 61785 IANA-RSVD 61786 IANA-RSVD 61787 IANA-RSVD 61788 IANA-RSVD 61789 IANA-RSVD 61790 IANA-RSVD 61791 IANA-RSVD 61792 IANA-RSVD 61793 IANA-RSVD 61794 IANA-RSVD 61795 IANA-RSVD 61796 IANA-RSVD 61797 IANA-RSVD 61798 IANA-RSVD 61799 IANA-RSVD 61800 IANA-RSVD 61801 IANA-RSVD 61802 IANA-RSVD 61803 IANA-RSVD 61804 IANA-RSVD 61805 IANA-RSVD 61806 IANA-RSVD 61807 IANA-RSVD 61808 IANA-RSVD 61809 IANA-RSVD 61810 IANA-RSVD 61811 IANA-RSVD 61812 IANA-RSVD 61813 IANA-RSVD 61814 IANA-RSVD 61815 IANA-RSVD 61816 IANA-RSVD 61817 IANA-RSVD 61818 IANA-RSVD 61819 IANA-RSVD 61820 IANA-RSVD 61821 IANA-RSVD 61822 IANA-RSVD 61823 IANA-RSVD 61824 IANA-RSVD 61825 IANA-RSVD 61826 IANA-RSVD 61827 IANA-RSVD 61828 IANA-RSVD 61829 IANA-RSVD 61830 IANA-RSVD 61831 IANA-RSVD 61832 IANA-RSVD 61833 IANA-RSVD 61834 IANA-RSVD 61835 IANA-RSVD 61836 IANA-RSVD 61837 IANA-RSVD 61838 IANA-RSVD 61839 IANA-RSVD 61840 IANA-RSVD 61841 IANA-RSVD 61842 IANA-RSVD 61843 IANA-RSVD 61844 IANA-RSVD 61845 IANA-RSVD 61846 IANA-RSVD 61847 IANA-RSVD 61848 IANA-RSVD 61849 IANA-RSVD 61850 IANA-RSVD 61851 IANA-RSVD 61852 IANA-RSVD 61853 IANA-RSVD 61854 IANA-RSVD 61855 IANA-RSVD 61856 IANA-RSVD 61857 IANA-RSVD 61858 IANA-RSVD 61859 IANA-RSVD 61860 IANA-RSVD 61861 IANA-RSVD 61862 IANA-RSVD 61863 IANA-RSVD 61864 IANA-RSVD 61865 IANA-RSVD 61866 IANA-RSVD 61867 IANA-RSVD 61868 IANA-RSVD 61869 IANA-RSVD 61870 IANA-RSVD 61871 IANA-RSVD 61872 IANA-RSVD 61873 IANA-RSVD 61874 IANA-RSVD 61875 IANA-RSVD 61876 IANA-RSVD 61877 IANA-RSVD 61878 IANA-RSVD 61879 IANA-RSVD 61880 IANA-RSVD 61881 IANA-RSVD 61882 IANA-RSVD 61883 IANA-RSVD 61884 IANA-RSVD 61885 IANA-RSVD 61886 IANA-RSVD 61887 IANA-RSVD 61888 IANA-RSVD 61889 IANA-RSVD 61890 IANA-RSVD 61891 IANA-RSVD 61892 IANA-RSVD 61893 IANA-RSVD 61894 IANA-RSVD 61895 IANA-RSVD 61896 IANA-RSVD 61897 IANA-RSVD 61898 IANA-RSVD 61899 IANA-RSVD 61900 IANA-RSVD 61901 IANA-RSVD 61902 IANA-RSVD 61903 IANA-RSVD 61904 IANA-RSVD 61905 IANA-RSVD 61906 IANA-RSVD 61907 IANA-RSVD 61908 IANA-RSVD 61909 IANA-RSVD 61910 IANA-RSVD 61911 IANA-RSVD 61912 IANA-RSVD 61913 IANA-RSVD 61914 IANA-RSVD 61915 IANA-RSVD 61916 IANA-RSVD 61917 IANA-RSVD 61918 IANA-RSVD 61919 IANA-RSVD 61920 IANA-RSVD 61921 IANA-RSVD 61922 IANA-RSVD 61923 IANA-RSVD 61924 IANA-RSVD 61925 IANA-RSVD 61926 IANA-RSVD 61927 IANA-RSVD 61928 IANA-RSVD 61929 IANA-RSVD 61930 IANA-RSVD 61931 IANA-RSVD 61932 IANA-RSVD 61933 IANA-RSVD 61934 IANA-RSVD 61935 IANA-RSVD 61936 IANA-RSVD 61937 IANA-RSVD 61938 IANA-RSVD 61939 IANA-RSVD 61940 IANA-RSVD 61941 IANA-RSVD 61942 IANA-RSVD 61943 IANA-RSVD 61944 IANA-RSVD 61945 IANA-RSVD 61946 IANA-RSVD 61947 IANA-RSVD 61948 IANA-RSVD 61949 IANA-RSVD 61950 IANA-RSVD 61951 IANA-RSVD 61952 IANA-RSVD 61953 IANA-RSVD 61954 IANA-RSVD 61955 IANA-RSVD 61956 IANA-RSVD 61957 IANA-RSVD 61958 IANA-RSVD 61959 IANA-RSVD 61960 IANA-RSVD 61961 IANA-RSVD 61962 IANA-RSVD 61963 IANA-RSVD 61964 IANA-RSVD 61965 IANA-RSVD 61966 IANA-RSVD 61967 IANA-RSVD 61968 IANA-RSVD 61969 IANA-RSVD 61970 IANA-RSVD 61971 IANA-RSVD 61972 IANA-RSVD 61973 IANA-RSVD 61974 IANA-RSVD 61975 IANA-RSVD 61976 IANA-RSVD 61977 IANA-RSVD 61978 IANA-RSVD 61979 IANA-RSVD 61980 IANA-RSVD 61981 IANA-RSVD 61982 IANA-RSVD 61983 IANA-RSVD 61984 IANA-RSVD 61985 IANA-RSVD 61986 IANA-RSVD 61987 IANA-RSVD 61988 IANA-RSVD 61989 IANA-RSVD 61990 IANA-RSVD 61991 IANA-RSVD 61992 IANA-RSVD 61993 IANA-RSVD 61994 IANA-RSVD 61995 IANA-RSVD 61996 IANA-RSVD 61997 IANA-RSVD 61998 IANA-RSVD 61999 IANA-RSVD 62000 IANA-RSVD 62001 IANA-RSVD 62002 IANA-RSVD 62003 IANA-RSVD 62004 IANA-RSVD 62005 IANA-RSVD 62006 IANA-RSVD 62007 IANA-RSVD 62008 IANA-RSVD 62009 IANA-RSVD 62010 IANA-RSVD 62011 IANA-RSVD 62012 IANA-RSVD 62013 IANA-RSVD 62014 IANA-RSVD 62015 IANA-RSVD 62016 IANA-RSVD 62017 IANA-RSVD 62018 IANA-RSVD 62019 IANA-RSVD 62020 IANA-RSVD 62021 IANA-RSVD 62022 IANA-RSVD 62023 IANA-RSVD 62024 IANA-RSVD 62025 IANA-RSVD 62026 IANA-RSVD 62027 IANA-RSVD 62028 IANA-RSVD 62029 IANA-RSVD 62030 IANA-RSVD 62031 IANA-RSVD 62032 IANA-RSVD 62033 IANA-RSVD 62034 IANA-RSVD 62035 IANA-RSVD 62036 IANA-RSVD 62037 IANA-RSVD 62038 IANA-RSVD 62039 IANA-RSVD 62040 IANA-RSVD 62041 IANA-RSVD 62042 IANA-RSVD 62043 IANA-RSVD 62044 IANA-RSVD 62045 IANA-RSVD 62046 IANA-RSVD 62047 IANA-RSVD 62048 IANA-RSVD 62049 IANA-RSVD 62050 IANA-RSVD 62051 IANA-RSVD 62052 IANA-RSVD 62053 IANA-RSVD 62054 IANA-RSVD 62055 IANA-RSVD 62056 IANA-RSVD 62057 IANA-RSVD 62058 IANA-RSVD 62059 IANA-RSVD 62060 IANA-RSVD 62061 IANA-RSVD 62062 IANA-RSVD 62063 IANA-RSVD 62064 IANA-RSVD 62065 IANA-RSVD 62066 IANA-RSVD 62067 IANA-RSVD 62068 IANA-RSVD 62069 IANA-RSVD 62070 IANA-RSVD 62071 IANA-RSVD 62072 IANA-RSVD 62073 IANA-RSVD 62074 IANA-RSVD 62075 IANA-RSVD 62076 IANA-RSVD 62077 IANA-RSVD 62078 IANA-RSVD 62079 IANA-RSVD 62080 IANA-RSVD 62081 IANA-RSVD 62082 IANA-RSVD 62083 IANA-RSVD 62084 IANA-RSVD 62085 IANA-RSVD 62086 IANA-RSVD 62087 IANA-RSVD 62088 IANA-RSVD 62089 IANA-RSVD 62090 IANA-RSVD 62091 IANA-RSVD 62092 IANA-RSVD 62093 IANA-RSVD 62094 IANA-RSVD 62095 IANA-RSVD 62096 IANA-RSVD 62097 IANA-RSVD 62098 IANA-RSVD 62099 IANA-RSVD 62100 IANA-RSVD 62101 IANA-RSVD 62102 IANA-RSVD 62103 IANA-RSVD 62104 IANA-RSVD 62105 IANA-RSVD 62106 IANA-RSVD 62107 IANA-RSVD 62108 IANA-RSVD 62109 IANA-RSVD 62110 IANA-RSVD 62111 IANA-RSVD 62112 IANA-RSVD 62113 IANA-RSVD 62114 IANA-RSVD 62115 IANA-RSVD 62116 IANA-RSVD 62117 IANA-RSVD 62118 IANA-RSVD 62119 IANA-RSVD 62120 IANA-RSVD 62121 IANA-RSVD 62122 IANA-RSVD 62123 IANA-RSVD 62124 IANA-RSVD 62125 IANA-RSVD 62126 IANA-RSVD 62127 IANA-RSVD 62128 IANA-RSVD 62129 IANA-RSVD 62130 IANA-RSVD 62131 IANA-RSVD 62132 IANA-RSVD 62133 IANA-RSVD 62134 IANA-RSVD 62135 IANA-RSVD 62136 IANA-RSVD 62137 IANA-RSVD 62138 IANA-RSVD 62139 IANA-RSVD 62140 IANA-RSVD 62141 IANA-RSVD 62142 IANA-RSVD 62143 IANA-RSVD 62144 IANA-RSVD 62145 IANA-RSVD 62146 IANA-RSVD 62147 IANA-RSVD 62148 IANA-RSVD 62149 IANA-RSVD 62150 IANA-RSVD 62151 IANA-RSVD 62152 IANA-RSVD 62153 IANA-RSVD 62154 IANA-RSVD 62155 IANA-RSVD 62156 IANA-RSVD 62157 IANA-RSVD 62158 IANA-RSVD 62159 IANA-RSVD 62160 IANA-RSVD 62161 IANA-RSVD 62162 IANA-RSVD 62163 IANA-RSVD 62164 IANA-RSVD 62165 IANA-RSVD 62166 IANA-RSVD 62167 IANA-RSVD 62168 IANA-RSVD 62169 IANA-RSVD 62170 IANA-RSVD 62171 IANA-RSVD 62172 IANA-RSVD 62173 IANA-RSVD 62174 IANA-RSVD 62175 IANA-RSVD 62176 IANA-RSVD 62177 IANA-RSVD 62178 IANA-RSVD 62179 IANA-RSVD 62180 IANA-RSVD 62181 IANA-RSVD 62182 IANA-RSVD 62183 IANA-RSVD 62184 IANA-RSVD 62185 IANA-RSVD 62186 IANA-RSVD 62187 IANA-RSVD 62188 IANA-RSVD 62189 IANA-RSVD 62190 IANA-RSVD 62191 IANA-RSVD 62192 IANA-RSVD 62193 IANA-RSVD 62194 IANA-RSVD 62195 IANA-RSVD 62196 IANA-RSVD 62197 IANA-RSVD 62198 IANA-RSVD 62199 IANA-RSVD 62200 IANA-RSVD 62201 IANA-RSVD 62202 IANA-RSVD 62203 IANA-RSVD 62204 IANA-RSVD 62205 IANA-RSVD 62206 IANA-RSVD 62207 IANA-RSVD 62208 IANA-RSVD 62209 IANA-RSVD 62210 IANA-RSVD 62211 IANA-RSVD 62212 IANA-RSVD 62213 IANA-RSVD 62214 IANA-RSVD 62215 IANA-RSVD 62216 IANA-RSVD 62217 IANA-RSVD 62218 IANA-RSVD 62219 IANA-RSVD 62220 IANA-RSVD 62221 IANA-RSVD 62222 IANA-RSVD 62223 IANA-RSVD 62224 IANA-RSVD 62225 IANA-RSVD 62226 IANA-RSVD 62227 IANA-RSVD 62228 IANA-RSVD 62229 IANA-RSVD 62230 IANA-RSVD 62231 IANA-RSVD 62232 IANA-RSVD 62233 IANA-RSVD 62234 IANA-RSVD 62235 IANA-RSVD 62236 IANA-RSVD 62237 IANA-RSVD 62238 IANA-RSVD 62239 IANA-RSVD 62240 IANA-RSVD 62241 IANA-RSVD 62242 IANA-RSVD 62243 IANA-RSVD 62244 IANA-RSVD 62245 IANA-RSVD 62246 IANA-RSVD 62247 IANA-RSVD 62248 IANA-RSVD 62249 IANA-RSVD 62250 IANA-RSVD 62251 IANA-RSVD 62252 IANA-RSVD 62253 IANA-RSVD 62254 IANA-RSVD 62255 IANA-RSVD 62256 IANA-RSVD 62257 IANA-RSVD 62258 IANA-RSVD 62259 IANA-RSVD 62260 IANA-RSVD 62261 IANA-RSVD 62262 IANA-RSVD 62263 IANA-RSVD 62264 IANA-RSVD 62265 IANA-RSVD 62266 IANA-RSVD 62267 IANA-RSVD 62268 IANA-RSVD 62269 IANA-RSVD 62270 IANA-RSVD 62271 IANA-RSVD 62272 IANA-RSVD 62273 IANA-RSVD 62274 IANA-RSVD 62275 IANA-RSVD 62276 IANA-RSVD 62277 IANA-RSVD 62278 IANA-RSVD 62279 IANA-RSVD 62280 IANA-RSVD 62281 IANA-RSVD 62282 IANA-RSVD 62283 IANA-RSVD 62284 IANA-RSVD 62285 IANA-RSVD 62286 IANA-RSVD 62287 IANA-RSVD 62288 IANA-RSVD 62289 IANA-RSVD 62290 IANA-RSVD 62291 IANA-RSVD 62292 IANA-RSVD 62293 IANA-RSVD 62294 IANA-RSVD 62295 IANA-RSVD 62296 IANA-RSVD 62297 IANA-RSVD 62298 IANA-RSVD 62299 IANA-RSVD 62300 IANA-RSVD 62301 IANA-RSVD 62302 IANA-RSVD 62303 IANA-RSVD 62304 IANA-RSVD 62305 IANA-RSVD 62306 IANA-RSVD 62307 IANA-RSVD 62308 IANA-RSVD 62309 IANA-RSVD 62310 IANA-RSVD 62311 IANA-RSVD 62312 IANA-RSVD 62313 IANA-RSVD 62314 IANA-RSVD 62315 IANA-RSVD 62316 IANA-RSVD 62317 IANA-RSVD 62318 IANA-RSVD 62319 IANA-RSVD 62320 IANA-RSVD 62321 IANA-RSVD 62322 IANA-RSVD 62323 IANA-RSVD 62324 IANA-RSVD 62325 IANA-RSVD 62326 IANA-RSVD 62327 IANA-RSVD 62328 IANA-RSVD 62329 IANA-RSVD 62330 IANA-RSVD 62331 IANA-RSVD 62332 IANA-RSVD 62333 IANA-RSVD 62334 IANA-RSVD 62335 IANA-RSVD 62336 IANA-RSVD 62337 IANA-RSVD 62338 IANA-RSVD 62339 IANA-RSVD 62340 IANA-RSVD 62341 IANA-RSVD 62342 IANA-RSVD 62343 IANA-RSVD 62344 IANA-RSVD 62345 IANA-RSVD 62346 IANA-RSVD 62347 IANA-RSVD 62348 IANA-RSVD 62349 IANA-RSVD 62350 IANA-RSVD 62351 IANA-RSVD 62352 IANA-RSVD 62353 IANA-RSVD 62354 IANA-RSVD 62355 IANA-RSVD 62356 IANA-RSVD 62357 IANA-RSVD 62358 IANA-RSVD 62359 IANA-RSVD 62360 IANA-RSVD 62361 IANA-RSVD 62362 IANA-RSVD 62363 IANA-RSVD 62364 IANA-RSVD 62365 IANA-RSVD 62366 IANA-RSVD 62367 IANA-RSVD 62368 IANA-RSVD 62369 IANA-RSVD 62370 IANA-RSVD 62371 IANA-RSVD 62372 IANA-RSVD 62373 IANA-RSVD 62374 IANA-RSVD 62375 IANA-RSVD 62376 IANA-RSVD 62377 IANA-RSVD 62378 IANA-RSVD 62379 IANA-RSVD 62380 IANA-RSVD 62381 IANA-RSVD 62382 IANA-RSVD 62383 IANA-RSVD 62384 IANA-RSVD 62385 IANA-RSVD 62386 IANA-RSVD 62387 IANA-RSVD 62388 IANA-RSVD 62389 IANA-RSVD 62390 IANA-RSVD 62391 IANA-RSVD 62392 IANA-RSVD 62393 IANA-RSVD 62394 IANA-RSVD 62395 IANA-RSVD 62396 IANA-RSVD 62397 IANA-RSVD 62398 IANA-RSVD 62399 IANA-RSVD 62400 IANA-RSVD 62401 IANA-RSVD 62402 IANA-RSVD 62403 IANA-RSVD 62404 IANA-RSVD 62405 IANA-RSVD 62406 IANA-RSVD 62407 IANA-RSVD 62408 IANA-RSVD 62409 IANA-RSVD 62410 IANA-RSVD 62411 IANA-RSVD 62412 IANA-RSVD 62413 IANA-RSVD 62414 IANA-RSVD 62415 IANA-RSVD 62416 IANA-RSVD 62417 IANA-RSVD 62418 IANA-RSVD 62419 IANA-RSVD 62420 IANA-RSVD 62421 IANA-RSVD 62422 IANA-RSVD 62423 IANA-RSVD 62424 IANA-RSVD 62425 IANA-RSVD 62426 IANA-RSVD 62427 IANA-RSVD 62428 IANA-RSVD 62429 IANA-RSVD 62430 IANA-RSVD 62431 IANA-RSVD 62432 IANA-RSVD 62433 IANA-RSVD 62434 IANA-RSVD 62435 IANA-RSVD 62436 IANA-RSVD 62437 IANA-RSVD 62438 IANA-RSVD 62439 IANA-RSVD 62440 IANA-RSVD 62441 IANA-RSVD 62442 IANA-RSVD 62443 IANA-RSVD 62444 IANA-RSVD 62445 IANA-RSVD 62446 IANA-RSVD 62447 IANA-RSVD 62448 IANA-RSVD 62449 IANA-RSVD 62450 IANA-RSVD 62451 IANA-RSVD 62452 IANA-RSVD 62453 IANA-RSVD 62454 IANA-RSVD 62455 IANA-RSVD 62456 IANA-RSVD 62457 IANA-RSVD 62458 IANA-RSVD 62459 IANA-RSVD 62460 IANA-RSVD 62461 IANA-RSVD 62462 IANA-RSVD 62463 IANA-RSVD 62464 IANA-RSVD 62465 IANA-RSVD 62466 IANA-RSVD 62467 IANA-RSVD 62468 IANA-RSVD 62469 IANA-RSVD 62470 IANA-RSVD 62471 IANA-RSVD 62472 IANA-RSVD 62473 IANA-RSVD 62474 IANA-RSVD 62475 IANA-RSVD 62476 IANA-RSVD 62477 IANA-RSVD 62478 IANA-RSVD 62479 IANA-RSVD 62480 IANA-RSVD 62481 IANA-RSVD 62482 IANA-RSVD 62483 IANA-RSVD 62484 IANA-RSVD 62485 IANA-RSVD 62486 IANA-RSVD 62487 IANA-RSVD 62488 IANA-RSVD 62489 IANA-RSVD 62490 IANA-RSVD 62491 IANA-RSVD 62492 IANA-RSVD 62493 IANA-RSVD 62494 IANA-RSVD 62495 IANA-RSVD 62496 IANA-RSVD 62497 IANA-RSVD 62498 IANA-RSVD 62499 IANA-RSVD 62500 IANA-RSVD 62501 IANA-RSVD 62502 IANA-RSVD 62503 IANA-RSVD 62504 IANA-RSVD 62505 IANA-RSVD 62506 IANA-RSVD 62507 IANA-RSVD 62508 IANA-RSVD 62509 IANA-RSVD 62510 IANA-RSVD 62511 IANA-RSVD 62512 IANA-RSVD 62513 IANA-RSVD 62514 IANA-RSVD 62515 IANA-RSVD 62516 IANA-RSVD 62517 IANA-RSVD 62518 IANA-RSVD 62519 IANA-RSVD 62520 IANA-RSVD 62521 IANA-RSVD 62522 IANA-RSVD 62523 IANA-RSVD 62524 IANA-RSVD 62525 IANA-RSVD 62526 IANA-RSVD 62527 IANA-RSVD 62528 IANA-RSVD 62529 IANA-RSVD 62530 IANA-RSVD 62531 IANA-RSVD 62532 IANA-RSVD 62533 IANA-RSVD 62534 IANA-RSVD 62535 IANA-RSVD 62536 IANA-RSVD 62537 IANA-RSVD 62538 IANA-RSVD 62539 IANA-RSVD 62540 IANA-RSVD 62541 IANA-RSVD 62542 IANA-RSVD 62543 IANA-RSVD 62544 IANA-RSVD 62545 IANA-RSVD 62546 IANA-RSVD 62547 IANA-RSVD 62548 IANA-RSVD 62549 IANA-RSVD 62550 IANA-RSVD 62551 IANA-RSVD 62552 IANA-RSVD 62553 IANA-RSVD 62554 IANA-RSVD 62555 IANA-RSVD 62556 IANA-RSVD 62557 IANA-RSVD 62558 IANA-RSVD 62559 IANA-RSVD 62560 IANA-RSVD 62561 IANA-RSVD 62562 IANA-RSVD 62563 IANA-RSVD 62564 IANA-RSVD 62565 IANA-RSVD 62566 IANA-RSVD 62567 IANA-RSVD 62568 IANA-RSVD 62569 IANA-RSVD 62570 IANA-RSVD 62571 IANA-RSVD 62572 IANA-RSVD 62573 IANA-RSVD 62574 IANA-RSVD 62575 IANA-RSVD 62576 IANA-RSVD 62577 IANA-RSVD 62578 IANA-RSVD 62579 IANA-RSVD 62580 IANA-RSVD 62581 IANA-RSVD 62582 IANA-RSVD 62583 IANA-RSVD 62584 IANA-RSVD 62585 IANA-RSVD 62586 IANA-RSVD 62587 IANA-RSVD 62588 IANA-RSVD 62589 IANA-RSVD 62590 IANA-RSVD 62591 IANA-RSVD 62592 IANA-RSVD 62593 IANA-RSVD 62594 IANA-RSVD 62595 IANA-RSVD 62596 IANA-RSVD 62597 IANA-RSVD 62598 IANA-RSVD 62599 IANA-RSVD 62600 IANA-RSVD 62601 IANA-RSVD 62602 IANA-RSVD 62603 IANA-RSVD 62604 IANA-RSVD 62605 IANA-RSVD 62606 IANA-RSVD 62607 IANA-RSVD 62608 IANA-RSVD 62609 IANA-RSVD 62610 IANA-RSVD 62611 IANA-RSVD 62612 IANA-RSVD 62613 IANA-RSVD 62614 IANA-RSVD 62615 IANA-RSVD 62616 IANA-RSVD 62617 IANA-RSVD 62618 IANA-RSVD 62619 IANA-RSVD 62620 IANA-RSVD 62621 IANA-RSVD 62622 IANA-RSVD 62623 IANA-RSVD 62624 IANA-RSVD 62625 IANA-RSVD 62626 IANA-RSVD 62627 IANA-RSVD 62628 IANA-RSVD 62629 IANA-RSVD 62630 IANA-RSVD 62631 IANA-RSVD 62632 IANA-RSVD 62633 IANA-RSVD 62634 IANA-RSVD 62635 IANA-RSVD 62636 IANA-RSVD 62637 IANA-RSVD 62638 IANA-RSVD 62639 IANA-RSVD 62640 IANA-RSVD 62641 IANA-RSVD 62642 IANA-RSVD 62643 IANA-RSVD 62644 IANA-RSVD 62645 IANA-RSVD 62646 IANA-RSVD 62647 IANA-RSVD 62648 IANA-RSVD 62649 IANA-RSVD 62650 IANA-RSVD 62651 IANA-RSVD 62652 IANA-RSVD 62653 IANA-RSVD 62654 IANA-RSVD 62655 IANA-RSVD 62656 IANA-RSVD 62657 IANA-RSVD 62658 IANA-RSVD 62659 IANA-RSVD 62660 IANA-RSVD 62661 IANA-RSVD 62662 IANA-RSVD 62663 IANA-RSVD 62664 IANA-RSVD 62665 IANA-RSVD 62666 IANA-RSVD 62667 IANA-RSVD 62668 IANA-RSVD 62669 IANA-RSVD 62670 IANA-RSVD 62671 IANA-RSVD 62672 IANA-RSVD 62673 IANA-RSVD 62674 IANA-RSVD 62675 IANA-RSVD 62676 IANA-RSVD 62677 IANA-RSVD 62678 IANA-RSVD 62679 IANA-RSVD 62680 IANA-RSVD 62681 IANA-RSVD 62682 IANA-RSVD 62683 IANA-RSVD 62684 IANA-RSVD 62685 IANA-RSVD 62686 IANA-RSVD 62687 IANA-RSVD 62688 IANA-RSVD 62689 IANA-RSVD 62690 IANA-RSVD 62691 IANA-RSVD 62692 IANA-RSVD 62693 IANA-RSVD 62694 IANA-RSVD 62695 IANA-RSVD 62696 IANA-RSVD 62697 IANA-RSVD 62698 IANA-RSVD 62699 IANA-RSVD 62700 IANA-RSVD 62701 IANA-RSVD 62702 IANA-RSVD 62703 IANA-RSVD 62704 IANA-RSVD 62705 IANA-RSVD 62706 IANA-RSVD 62707 IANA-RSVD 62708 IANA-RSVD 62709 IANA-RSVD 62710 IANA-RSVD 62711 IANA-RSVD 62712 IANA-RSVD 62713 IANA-RSVD 62714 IANA-RSVD 62715 IANA-RSVD 62716 IANA-RSVD 62717 IANA-RSVD 62718 IANA-RSVD 62719 IANA-RSVD 62720 IANA-RSVD 62721 IANA-RSVD 62722 IANA-RSVD 62723 IANA-RSVD 62724 IANA-RSVD 62725 IANA-RSVD 62726 IANA-RSVD 62727 IANA-RSVD 62728 IANA-RSVD 62729 IANA-RSVD 62730 IANA-RSVD 62731 IANA-RSVD 62732 IANA-RSVD 62733 IANA-RSVD 62734 IANA-RSVD 62735 IANA-RSVD 62736 IANA-RSVD 62737 IANA-RSVD 62738 IANA-RSVD 62739 IANA-RSVD 62740 IANA-RSVD 62741 IANA-RSVD 62742 IANA-RSVD 62743 IANA-RSVD 62744 IANA-RSVD 62745 IANA-RSVD 62746 IANA-RSVD 62747 IANA-RSVD 62748 IANA-RSVD 62749 IANA-RSVD 62750 IANA-RSVD 62751 IANA-RSVD 62752 IANA-RSVD 62753 IANA-RSVD 62754 IANA-RSVD 62755 IANA-RSVD 62756 IANA-RSVD 62757 IANA-RSVD 62758 IANA-RSVD 62759 IANA-RSVD 62760 IANA-RSVD 62761 IANA-RSVD 62762 IANA-RSVD 62763 IANA-RSVD 62764 IANA-RSVD 62765 IANA-RSVD 62766 IANA-RSVD 62767 IANA-RSVD 62768 IANA-RSVD 62769 IANA-RSVD 62770 IANA-RSVD 62771 IANA-RSVD 62772 IANA-RSVD 62773 IANA-RSVD 62774 IANA-RSVD 62775 IANA-RSVD 62776 IANA-RSVD 62777 IANA-RSVD 62778 IANA-RSVD 62779 IANA-RSVD 62780 IANA-RSVD 62781 IANA-RSVD 62782 IANA-RSVD 62783 IANA-RSVD 62784 IANA-RSVD 62785 IANA-RSVD 62786 IANA-RSVD 62787 IANA-RSVD 62788 IANA-RSVD 62789 IANA-RSVD 62790 IANA-RSVD 62791 IANA-RSVD 62792 IANA-RSVD 62793 IANA-RSVD 62794 IANA-RSVD 62795 IANA-RSVD 62796 IANA-RSVD 62797 IANA-RSVD 62798 IANA-RSVD 62799 IANA-RSVD 62800 IANA-RSVD 62801 IANA-RSVD 62802 IANA-RSVD 62803 IANA-RSVD 62804 IANA-RSVD 62805 IANA-RSVD 62806 IANA-RSVD 62807 IANA-RSVD 62808 IANA-RSVD 62809 IANA-RSVD 62810 IANA-RSVD 62811 IANA-RSVD 62812 IANA-RSVD 62813 IANA-RSVD 62814 IANA-RSVD 62815 IANA-RSVD 62816 IANA-RSVD 62817 IANA-RSVD 62818 IANA-RSVD 62819 IANA-RSVD 62820 IANA-RSVD 62821 IANA-RSVD 62822 IANA-RSVD 62823 IANA-RSVD 62824 IANA-RSVD 62825 IANA-RSVD 62826 IANA-RSVD 62827 IANA-RSVD 62828 IANA-RSVD 62829 IANA-RSVD 62830 IANA-RSVD 62831 IANA-RSVD 62832 IANA-RSVD 62833 IANA-RSVD 62834 IANA-RSVD 62835 IANA-RSVD 62836 IANA-RSVD 62837 IANA-RSVD 62838 IANA-RSVD 62839 IANA-RSVD 62840 IANA-RSVD 62841 IANA-RSVD 62842 IANA-RSVD 62843 IANA-RSVD 62844 IANA-RSVD 62845 IANA-RSVD 62846 IANA-RSVD 62847 IANA-RSVD 62848 IANA-RSVD 62849 IANA-RSVD 62850 IANA-RSVD 62851 IANA-RSVD 62852 IANA-RSVD 62853 IANA-RSVD 62854 IANA-RSVD 62855 IANA-RSVD 62856 IANA-RSVD 62857 IANA-RSVD 62858 IANA-RSVD 62859 IANA-RSVD 62860 IANA-RSVD 62861 IANA-RSVD 62862 IANA-RSVD 62863 IANA-RSVD 62864 IANA-RSVD 62865 IANA-RSVD 62866 IANA-RSVD 62867 IANA-RSVD 62868 IANA-RSVD 62869 IANA-RSVD 62870 IANA-RSVD 62871 IANA-RSVD 62872 IANA-RSVD 62873 IANA-RSVD 62874 IANA-RSVD 62875 IANA-RSVD 62876 IANA-RSVD 62877 IANA-RSVD 62878 IANA-RSVD 62879 IANA-RSVD 62880 IANA-RSVD 62881 IANA-RSVD 62882 IANA-RSVD 62883 IANA-RSVD 62884 IANA-RSVD 62885 IANA-RSVD 62886 IANA-RSVD 62887 IANA-RSVD 62888 IANA-RSVD 62889 IANA-RSVD 62890 IANA-RSVD 62891 IANA-RSVD 62892 IANA-RSVD 62893 IANA-RSVD 62894 IANA-RSVD 62895 IANA-RSVD 62896 IANA-RSVD 62897 IANA-RSVD 62898 IANA-RSVD 62899 IANA-RSVD 62900 IANA-RSVD 62901 IANA-RSVD 62902 IANA-RSVD 62903 IANA-RSVD 62904 IANA-RSVD 62905 IANA-RSVD 62906 IANA-RSVD 62907 IANA-RSVD 62908 IANA-RSVD 62909 IANA-RSVD 62910 IANA-RSVD 62911 IANA-RSVD 62912 IANA-RSVD 62913 IANA-RSVD 62914 IANA-RSVD 62915 IANA-RSVD 62916 IANA-RSVD 62917 IANA-RSVD 62918 IANA-RSVD 62919 IANA-RSVD 62920 IANA-RSVD 62921 IANA-RSVD 62922 IANA-RSVD 62923 IANA-RSVD 62924 IANA-RSVD 62925 IANA-RSVD 62926 IANA-RSVD 62927 IANA-RSVD 62928 IANA-RSVD 62929 IANA-RSVD 62930 IANA-RSVD 62931 IANA-RSVD 62932 IANA-RSVD 62933 IANA-RSVD 62934 IANA-RSVD 62935 IANA-RSVD 62936 IANA-RSVD 62937 IANA-RSVD 62938 IANA-RSVD 62939 IANA-RSVD 62940 IANA-RSVD 62941 IANA-RSVD 62942 IANA-RSVD 62943 IANA-RSVD 62944 IANA-RSVD 62945 IANA-RSVD 62946 IANA-RSVD 62947 IANA-RSVD 62948 IANA-RSVD 62949 IANA-RSVD 62950 IANA-RSVD 62951 IANA-RSVD 62952 IANA-RSVD 62953 IANA-RSVD 62954 IANA-RSVD 62955 IANA-RSVD 62956 IANA-RSVD 62957 IANA-RSVD 62958 IANA-RSVD 62959 IANA-RSVD 62960 IANA-RSVD 62961 IANA-RSVD 62962 IANA-RSVD 62963 IANA-RSVD 62964 IANA-RSVD 62965 IANA-RSVD 62966 IANA-RSVD 62967 IANA-RSVD 62968 IANA-RSVD 62969 IANA-RSVD 62970 IANA-RSVD 62971 IANA-RSVD 62972 IANA-RSVD 62973 IANA-RSVD 62974 IANA-RSVD 62975 IANA-RSVD 62976 IANA-RSVD 62977 IANA-RSVD 62978 IANA-RSVD 62979 IANA-RSVD 62980 IANA-RSVD 62981 IANA-RSVD 62982 IANA-RSVD 62983 IANA-RSVD 62984 IANA-RSVD 62985 IANA-RSVD 62986 IANA-RSVD 62987 IANA-RSVD 62988 IANA-RSVD 62989 IANA-RSVD 62990 IANA-RSVD 62991 IANA-RSVD 62992 IANA-RSVD 62993 IANA-RSVD 62994 IANA-RSVD 62995 IANA-RSVD 62996 IANA-RSVD 62997 IANA-RSVD 62998 IANA-RSVD 62999 IANA-RSVD 63000 IANA-RSVD 63001 IANA-RSVD 63002 IANA-RSVD 63003 IANA-RSVD 63004 IANA-RSVD 63005 IANA-RSVD 63006 IANA-RSVD 63007 IANA-RSVD 63008 IANA-RSVD 63009 IANA-RSVD 63010 IANA-RSVD 63011 IANA-RSVD 63012 IANA-RSVD 63013 IANA-RSVD 63014 IANA-RSVD 63015 IANA-RSVD 63016 IANA-RSVD 63017 IANA-RSVD 63018 IANA-RSVD 63019 IANA-RSVD 63020 IANA-RSVD 63021 IANA-RSVD 63022 IANA-RSVD 63023 IANA-RSVD 63024 IANA-RSVD 63025 IANA-RSVD 63026 IANA-RSVD 63027 IANA-RSVD 63028 IANA-RSVD 63029 IANA-RSVD 63030 IANA-RSVD 63031 IANA-RSVD 63032 IANA-RSVD 63033 IANA-RSVD 63034 IANA-RSVD 63035 IANA-RSVD 63036 IANA-RSVD 63037 IANA-RSVD 63038 IANA-RSVD 63039 IANA-RSVD 63040 IANA-RSVD 63041 IANA-RSVD 63042 IANA-RSVD 63043 IANA-RSVD 63044 IANA-RSVD 63045 IANA-RSVD 63046 IANA-RSVD 63047 IANA-RSVD 63048 IANA-RSVD 63049 IANA-RSVD 63050 IANA-RSVD 63051 IANA-RSVD 63052 IANA-RSVD 63053 IANA-RSVD 63054 IANA-RSVD 63055 IANA-RSVD 63056 IANA-RSVD 63057 IANA-RSVD 63058 IANA-RSVD 63059 IANA-RSVD 63060 IANA-RSVD 63061 IANA-RSVD 63062 IANA-RSVD 63063 IANA-RSVD 63064 IANA-RSVD 63065 IANA-RSVD 63066 IANA-RSVD 63067 IANA-RSVD 63068 IANA-RSVD 63069 IANA-RSVD 63070 IANA-RSVD 63071 IANA-RSVD 63072 IANA-RSVD 63073 IANA-RSVD 63074 IANA-RSVD 63075 IANA-RSVD 63076 IANA-RSVD 63077 IANA-RSVD 63078 IANA-RSVD 63079 IANA-RSVD 63080 IANA-RSVD 63081 IANA-RSVD 63082 IANA-RSVD 63083 IANA-RSVD 63084 IANA-RSVD 63085 IANA-RSVD 63086 IANA-RSVD 63087 IANA-RSVD 63088 IANA-RSVD 63089 IANA-RSVD 63090 IANA-RSVD 63091 IANA-RSVD 63092 IANA-RSVD 63093 IANA-RSVD 63094 IANA-RSVD 63095 IANA-RSVD 63096 IANA-RSVD 63097 IANA-RSVD 63098 IANA-RSVD 63099 IANA-RSVD 63100 IANA-RSVD 63101 IANA-RSVD 63102 IANA-RSVD 63103 IANA-RSVD 63104 IANA-RSVD 63105 IANA-RSVD 63106 IANA-RSVD 63107 IANA-RSVD 63108 IANA-RSVD 63109 IANA-RSVD 63110 IANA-RSVD 63111 IANA-RSVD 63112 IANA-RSVD 63113 IANA-RSVD 63114 IANA-RSVD 63115 IANA-RSVD 63116 IANA-RSVD 63117 IANA-RSVD 63118 IANA-RSVD 63119 IANA-RSVD 63120 IANA-RSVD 63121 IANA-RSVD 63122 IANA-RSVD 63123 IANA-RSVD 63124 IANA-RSVD 63125 IANA-RSVD 63126 IANA-RSVD 63127 IANA-RSVD 63128 IANA-RSVD 63129 IANA-RSVD 63130 IANA-RSVD 63131 IANA-RSVD 63132 IANA-RSVD 63133 IANA-RSVD 63134 IANA-RSVD 63135 IANA-RSVD 63136 IANA-RSVD 63137 IANA-RSVD 63138 IANA-RSVD 63139 IANA-RSVD 63140 IANA-RSVD 63141 IANA-RSVD 63142 IANA-RSVD 63143 IANA-RSVD 63144 IANA-RSVD 63145 IANA-RSVD 63146 IANA-RSVD 63147 IANA-RSVD 63148 IANA-RSVD 63149 IANA-RSVD 63150 IANA-RSVD 63151 IANA-RSVD 63152 IANA-RSVD 63153 IANA-RSVD 63154 IANA-RSVD 63155 IANA-RSVD 63156 IANA-RSVD 63157 IANA-RSVD 63158 IANA-RSVD 63159 IANA-RSVD 63160 IANA-RSVD 63161 IANA-RSVD 63162 IANA-RSVD 63163 IANA-RSVD 63164 IANA-RSVD 63165 IANA-RSVD 63166 IANA-RSVD 63167 IANA-RSVD 63168 IANA-RSVD 63169 IANA-RSVD 63170 IANA-RSVD 63171 IANA-RSVD 63172 IANA-RSVD 63173 IANA-RSVD 63174 IANA-RSVD 63175 IANA-RSVD 63176 IANA-RSVD 63177 IANA-RSVD 63178 IANA-RSVD 63179 IANA-RSVD 63180 IANA-RSVD 63181 IANA-RSVD 63182 IANA-RSVD 63183 IANA-RSVD 63184 IANA-RSVD 63185 IANA-RSVD 63186 IANA-RSVD 63187 IANA-RSVD 63188 IANA-RSVD 63189 IANA-RSVD 63190 IANA-RSVD 63191 IANA-RSVD 63192 IANA-RSVD 63193 IANA-RSVD 63194 IANA-RSVD 63195 IANA-RSVD 63196 IANA-RSVD 63197 IANA-RSVD 63198 IANA-RSVD 63199 IANA-RSVD 63200 IANA-RSVD 63201 IANA-RSVD 63202 IANA-RSVD 63203 IANA-RSVD 63204 IANA-RSVD 63205 IANA-RSVD 63206 IANA-RSVD 63207 IANA-RSVD 63208 IANA-RSVD 63209 IANA-RSVD 63210 IANA-RSVD 63211 IANA-RSVD 63212 IANA-RSVD 63213 IANA-RSVD 63214 IANA-RSVD 63215 IANA-RSVD 63216 IANA-RSVD 63217 IANA-RSVD 63218 IANA-RSVD 63219 IANA-RSVD 63220 IANA-RSVD 63221 IANA-RSVD 63222 IANA-RSVD 63223 IANA-RSVD 63224 IANA-RSVD 63225 IANA-RSVD 63226 IANA-RSVD 63227 IANA-RSVD 63228 IANA-RSVD 63229 IANA-RSVD 63230 IANA-RSVD 63231 IANA-RSVD 63232 IANA-RSVD 63233 IANA-RSVD 63234 IANA-RSVD 63235 IANA-RSVD 63236 IANA-RSVD 63237 IANA-RSVD 63238 IANA-RSVD 63239 IANA-RSVD 63240 IANA-RSVD 63241 IANA-RSVD 63242 IANA-RSVD 63243 IANA-RSVD 63244 IANA-RSVD 63245 IANA-RSVD 63246 IANA-RSVD 63247 IANA-RSVD 63248 IANA-RSVD 63249 IANA-RSVD 63250 IANA-RSVD 63251 IANA-RSVD 63252 IANA-RSVD 63253 IANA-RSVD 63254 IANA-RSVD 63255 IANA-RSVD 63256 IANA-RSVD 63257 IANA-RSVD 63258 IANA-RSVD 63259 IANA-RSVD 63260 IANA-RSVD 63261 IANA-RSVD 63262 IANA-RSVD 63263 IANA-RSVD 63264 IANA-RSVD 63265 IANA-RSVD 63266 IANA-RSVD 63267 IANA-RSVD 63268 IANA-RSVD 63269 IANA-RSVD 63270 IANA-RSVD 63271 IANA-RSVD 63272 IANA-RSVD 63273 IANA-RSVD 63274 IANA-RSVD 63275 IANA-RSVD 63276 IANA-RSVD 63277 IANA-RSVD 63278 IANA-RSVD 63279 IANA-RSVD 63280 IANA-RSVD 63281 IANA-RSVD 63282 IANA-RSVD 63283 IANA-RSVD 63284 IANA-RSVD 63285 IANA-RSVD 63286 IANA-RSVD 63287 IANA-RSVD 63288 IANA-RSVD 63289 IANA-RSVD 63290 IANA-RSVD 63291 IANA-RSVD 63292 IANA-RSVD 63293 IANA-RSVD 63294 IANA-RSVD 63295 IANA-RSVD 63296 IANA-RSVD 63297 IANA-RSVD 63298 IANA-RSVD 63299 IANA-RSVD 63300 IANA-RSVD 63301 IANA-RSVD 63302 IANA-RSVD 63303 IANA-RSVD 63304 IANA-RSVD 63305 IANA-RSVD 63306 IANA-RSVD 63307 IANA-RSVD 63308 IANA-RSVD 63309 IANA-RSVD 63310 IANA-RSVD 63311 IANA-RSVD 63312 IANA-RSVD 63313 IANA-RSVD 63314 IANA-RSVD 63315 IANA-RSVD 63316 IANA-RSVD 63317 IANA-RSVD 63318 IANA-RSVD 63319 IANA-RSVD 63320 IANA-RSVD 63321 IANA-RSVD 63322 IANA-RSVD 63323 IANA-RSVD 63324 IANA-RSVD 63325 IANA-RSVD 63326 IANA-RSVD 63327 IANA-RSVD 63328 IANA-RSVD 63329 IANA-RSVD 63330 IANA-RSVD 63331 IANA-RSVD 63332 IANA-RSVD 63333 IANA-RSVD 63334 IANA-RSVD 63335 IANA-RSVD 63336 IANA-RSVD 63337 IANA-RSVD 63338 IANA-RSVD 63339 IANA-RSVD 63340 IANA-RSVD 63341 IANA-RSVD 63342 IANA-RSVD 63343 IANA-RSVD 63344 IANA-RSVD 63345 IANA-RSVD 63346 IANA-RSVD 63347 IANA-RSVD 63348 IANA-RSVD 63349 IANA-RSVD 63350 IANA-RSVD 63351 IANA-RSVD 63352 IANA-RSVD 63353 IANA-RSVD 63354 IANA-RSVD 63355 IANA-RSVD 63356 IANA-RSVD 63357 IANA-RSVD 63358 IANA-RSVD 63359 IANA-RSVD 63360 IANA-RSVD 63361 IANA-RSVD 63362 IANA-RSVD 63363 IANA-RSVD 63364 IANA-RSVD 63365 IANA-RSVD 63366 IANA-RSVD 63367 IANA-RSVD 63368 IANA-RSVD 63369 IANA-RSVD 63370 IANA-RSVD 63371 IANA-RSVD 63372 IANA-RSVD 63373 IANA-RSVD 63374 IANA-RSVD 63375 IANA-RSVD 63376 IANA-RSVD 63377 IANA-RSVD 63378 IANA-RSVD 63379 IANA-RSVD 63380 IANA-RSVD 63381 IANA-RSVD 63382 IANA-RSVD 63383 IANA-RSVD 63384 IANA-RSVD 63385 IANA-RSVD 63386 IANA-RSVD 63387 IANA-RSVD 63388 IANA-RSVD 63389 IANA-RSVD 63390 IANA-RSVD 63391 IANA-RSVD 63392 IANA-RSVD 63393 IANA-RSVD 63394 IANA-RSVD 63395 IANA-RSVD 63396 IANA-RSVD 63397 IANA-RSVD 63398 IANA-RSVD 63399 IANA-RSVD 63400 IANA-RSVD 63401 IANA-RSVD 63402 IANA-RSVD 63403 IANA-RSVD 63404 IANA-RSVD 63405 IANA-RSVD 63406 IANA-RSVD 63407 IANA-RSVD 63408 IANA-RSVD 63409 IANA-RSVD 63410 IANA-RSVD 63411 IANA-RSVD 63412 IANA-RSVD 63413 IANA-RSVD 63414 IANA-RSVD 63415 IANA-RSVD 63416 IANA-RSVD 63417 IANA-RSVD 63418 IANA-RSVD 63419 IANA-RSVD 63420 IANA-RSVD 63421 IANA-RSVD 63422 IANA-RSVD 63423 IANA-RSVD 63424 IANA-RSVD 63425 IANA-RSVD 63426 IANA-RSVD 63427 IANA-RSVD 63428 IANA-RSVD 63429 IANA-RSVD 63430 IANA-RSVD 63431 IANA-RSVD 63432 IANA-RSVD 63433 IANA-RSVD 63434 IANA-RSVD 63435 IANA-RSVD 63436 IANA-RSVD 63437 IANA-RSVD 63438 IANA-RSVD 63439 IANA-RSVD 63440 IANA-RSVD 63441 IANA-RSVD 63442 IANA-RSVD 63443 IANA-RSVD 63444 IANA-RSVD 63445 IANA-RSVD 63446 IANA-RSVD 63447 IANA-RSVD 63448 IANA-RSVD 63449 IANA-RSVD 63450 IANA-RSVD 63451 IANA-RSVD 63452 IANA-RSVD 63453 IANA-RSVD 63454 IANA-RSVD 63455 IANA-RSVD 63456 IANA-RSVD 63457 IANA-RSVD 63458 IANA-RSVD 63459 IANA-RSVD 63460 IANA-RSVD 63461 IANA-RSVD 63462 IANA-RSVD 63463 IANA-RSVD 63464 IANA-RSVD 63465 IANA-RSVD 63466 IANA-RSVD 63467 IANA-RSVD 63468 IANA-RSVD 63469 IANA-RSVD 63470 IANA-RSVD 63471 IANA-RSVD 63472 IANA-RSVD 63473 IANA-RSVD 63474 IANA-RSVD 63475 IANA-RSVD 63476 IANA-RSVD 63477 IANA-RSVD 63478 IANA-RSVD 63479 IANA-RSVD 63480 IANA-RSVD 63481 IANA-RSVD 63482 IANA-RSVD 63483 IANA-RSVD 63484 IANA-RSVD 63485 IANA-RSVD 63486 IANA-RSVD 63487 IANA-RSVD 63488 IANA-RSVD 63489 IANA-RSVD 63490 IANA-RSVD 63491 IANA-RSVD 63492 IANA-RSVD 63493 IANA-RSVD 63494 IANA-RSVD 63495 IANA-RSVD 63496 IANA-RSVD 63497 IANA-RSVD 63498 IANA-RSVD 63499 IANA-RSVD 63500 IANA-RSVD 63501 IANA-RSVD 63502 IANA-RSVD 63503 IANA-RSVD 63504 IANA-RSVD 63505 IANA-RSVD 63506 IANA-RSVD 63507 IANA-RSVD 63508 IANA-RSVD 63509 IANA-RSVD 63510 IANA-RSVD 63511 IANA-RSVD 63512 IANA-RSVD 63513 IANA-RSVD 63514 IANA-RSVD 63515 IANA-RSVD 63516 IANA-RSVD 63517 IANA-RSVD 63518 IANA-RSVD 63519 IANA-RSVD 63520 IANA-RSVD 63521 IANA-RSVD 63522 IANA-RSVD 63523 IANA-RSVD 63524 IANA-RSVD 63525 IANA-RSVD 63526 IANA-RSVD 63527 IANA-RSVD 63528 IANA-RSVD 63529 IANA-RSVD 63530 IANA-RSVD 63531 IANA-RSVD 63532 IANA-RSVD 63533 IANA-RSVD 63534 IANA-RSVD 63535 IANA-RSVD 63536 IANA-RSVD 63537 IANA-RSVD 63538 IANA-RSVD 63539 IANA-RSVD 63540 IANA-RSVD 63541 IANA-RSVD 63542 IANA-RSVD 63543 IANA-RSVD 63544 IANA-RSVD 63545 IANA-RSVD 63546 IANA-RSVD 63547 IANA-RSVD 63548 IANA-RSVD 63549 IANA-RSVD 63550 IANA-RSVD 63551 IANA-RSVD 63552 IANA-RSVD 63553 IANA-RSVD 63554 IANA-RSVD 63555 IANA-RSVD 63556 IANA-RSVD 63557 IANA-RSVD 63558 IANA-RSVD 63559 IANA-RSVD 63560 IANA-RSVD 63561 IANA-RSVD 63562 IANA-RSVD 63563 IANA-RSVD 63564 IANA-RSVD 63565 IANA-RSVD 63566 IANA-RSVD 63567 IANA-RSVD 63568 IANA-RSVD 63569 IANA-RSVD 63570 IANA-RSVD 63571 IANA-RSVD 63572 IANA-RSVD 63573 IANA-RSVD 63574 IANA-RSVD 63575 IANA-RSVD 63576 IANA-RSVD 63577 IANA-RSVD 63578 IANA-RSVD 63579 IANA-RSVD 63580 IANA-RSVD 63581 IANA-RSVD 63582 IANA-RSVD 63583 IANA-RSVD 63584 IANA-RSVD 63585 IANA-RSVD 63586 IANA-RSVD 63587 IANA-RSVD 63588 IANA-RSVD 63589 IANA-RSVD 63590 IANA-RSVD 63591 IANA-RSVD 63592 IANA-RSVD 63593 IANA-RSVD 63594 IANA-RSVD 63595 IANA-RSVD 63596 IANA-RSVD 63597 IANA-RSVD 63598 IANA-RSVD 63599 IANA-RSVD 63600 IANA-RSVD 63601 IANA-RSVD 63602 IANA-RSVD 63603 IANA-RSVD 63604 IANA-RSVD 63605 IANA-RSVD 63606 IANA-RSVD 63607 IANA-RSVD 63608 IANA-RSVD 63609 IANA-RSVD 63610 IANA-RSVD 63611 IANA-RSVD 63612 IANA-RSVD 63613 IANA-RSVD 63614 IANA-RSVD 63615 IANA-RSVD 63616 IANA-RSVD 63617 IANA-RSVD 63618 IANA-RSVD 63619 IANA-RSVD 63620 IANA-RSVD 63621 IANA-RSVD 63622 IANA-RSVD 63623 IANA-RSVD 63624 IANA-RSVD 63625 IANA-RSVD 63626 IANA-RSVD 63627 IANA-RSVD 63628 IANA-RSVD 63629 IANA-RSVD 63630 IANA-RSVD 63631 IANA-RSVD 63632 IANA-RSVD 63633 IANA-RSVD 63634 IANA-RSVD 63635 IANA-RSVD 63636 IANA-RSVD 63637 IANA-RSVD 63638 IANA-RSVD 63639 IANA-RSVD 63640 IANA-RSVD 63641 IANA-RSVD 63642 IANA-RSVD 63643 IANA-RSVD 63644 IANA-RSVD 63645 IANA-RSVD 63646 IANA-RSVD 63647 IANA-RSVD 63648 IANA-RSVD 63649 IANA-RSVD 63650 IANA-RSVD 63651 IANA-RSVD 63652 IANA-RSVD 63653 IANA-RSVD 63654 IANA-RSVD 63655 IANA-RSVD 63656 IANA-RSVD 63657 IANA-RSVD 63658 IANA-RSVD 63659 IANA-RSVD 63660 IANA-RSVD 63661 IANA-RSVD 63662 IANA-RSVD 63663 IANA-RSVD 63664 IANA-RSVD 63665 IANA-RSVD 63666 IANA-RSVD 63667 IANA-RSVD 63668 IANA-RSVD 63669 IANA-RSVD 63670 IANA-RSVD 63671 IANA-RSVD 63672 IANA-RSVD 63673 IANA-RSVD 63674 IANA-RSVD 63675 IANA-RSVD 63676 IANA-RSVD 63677 IANA-RSVD 63678 IANA-RSVD 63679 IANA-RSVD 63680 IANA-RSVD 63681 IANA-RSVD 63682 IANA-RSVD 63683 IANA-RSVD 63684 IANA-RSVD 63685 IANA-RSVD 63686 IANA-RSVD 63687 IANA-RSVD 63688 IANA-RSVD 63689 IANA-RSVD 63690 IANA-RSVD 63691 IANA-RSVD 63692 IANA-RSVD 63693 IANA-RSVD 63694 IANA-RSVD 63695 IANA-RSVD 63696 IANA-RSVD 63697 IANA-RSVD 63698 IANA-RSVD 63699 IANA-RSVD 63700 IANA-RSVD 63701 IANA-RSVD 63702 IANA-RSVD 63703 IANA-RSVD 63704 IANA-RSVD 63705 IANA-RSVD 63706 IANA-RSVD 63707 IANA-RSVD 63708 IANA-RSVD 63709 IANA-RSVD 63710 IANA-RSVD 63711 IANA-RSVD 63712 IANA-RSVD 63713 IANA-RSVD 63714 IANA-RSVD 63715 IANA-RSVD 63716 IANA-RSVD 63717 IANA-RSVD 63718 IANA-RSVD 63719 IANA-RSVD 63720 IANA-RSVD 63721 IANA-RSVD 63722 IANA-RSVD 63723 IANA-RSVD 63724 IANA-RSVD 63725 IANA-RSVD 63726 IANA-RSVD 63727 IANA-RSVD 63728 IANA-RSVD 63729 IANA-RSVD 63730 IANA-RSVD 63731 IANA-RSVD 63732 IANA-RSVD 63733 IANA-RSVD 63734 IANA-RSVD 63735 IANA-RSVD 63736 IANA-RSVD 63737 IANA-RSVD 63738 IANA-RSVD 63739 IANA-RSVD 63740 IANA-RSVD 63741 IANA-RSVD 63742 IANA-RSVD 63743 IANA-RSVD 63744 IANA-RSVD 63745 IANA-RSVD 63746 IANA-RSVD 63747 IANA-RSVD 63748 IANA-RSVD 63749 IANA-RSVD 63750 IANA-RSVD 63751 IANA-RSVD 63752 IANA-RSVD 63753 IANA-RSVD 63754 IANA-RSVD 63755 IANA-RSVD 63756 IANA-RSVD 63757 IANA-RSVD 63758 IANA-RSVD 63759 IANA-RSVD 63760 IANA-RSVD 63761 IANA-RSVD 63762 IANA-RSVD 63763 IANA-RSVD 63764 IANA-RSVD 63765 IANA-RSVD 63766 IANA-RSVD 63767 IANA-RSVD 63768 IANA-RSVD 63769 IANA-RSVD 63770 IANA-RSVD 63771 IANA-RSVD 63772 IANA-RSVD 63773 IANA-RSVD 63774 IANA-RSVD 63775 IANA-RSVD 63776 IANA-RSVD 63777 IANA-RSVD 63778 IANA-RSVD 63779 IANA-RSVD 63780 IANA-RSVD 63781 IANA-RSVD 63782 IANA-RSVD 63783 IANA-RSVD 63784 IANA-RSVD 63785 IANA-RSVD 63786 IANA-RSVD 63787 IANA-RSVD 63788 IANA-RSVD 63789 IANA-RSVD 63790 IANA-RSVD 63791 IANA-RSVD 63792 IANA-RSVD 63793 IANA-RSVD 63794 IANA-RSVD 63795 IANA-RSVD 63796 IANA-RSVD 63797 IANA-RSVD 63798 IANA-RSVD 63799 IANA-RSVD 63800 IANA-RSVD 63801 IANA-RSVD 63802 IANA-RSVD 63803 IANA-RSVD 63804 IANA-RSVD 63805 IANA-RSVD 63806 IANA-RSVD 63807 IANA-RSVD 63808 IANA-RSVD 63809 IANA-RSVD 63810 IANA-RSVD 63811 IANA-RSVD 63812 IANA-RSVD 63813 IANA-RSVD 63814 IANA-RSVD 63815 IANA-RSVD 63816 IANA-RSVD 63817 IANA-RSVD 63818 IANA-RSVD 63819 IANA-RSVD 63820 IANA-RSVD 63821 IANA-RSVD 63822 IANA-RSVD 63823 IANA-RSVD 63824 IANA-RSVD 63825 IANA-RSVD 63826 IANA-RSVD 63827 IANA-RSVD 63828 IANA-RSVD 63829 IANA-RSVD 63830 IANA-RSVD 63831 IANA-RSVD 63832 IANA-RSVD 63833 IANA-RSVD 63834 IANA-RSVD 63835 IANA-RSVD 63836 IANA-RSVD 63837 IANA-RSVD 63838 IANA-RSVD 63839 IANA-RSVD 63840 IANA-RSVD 63841 IANA-RSVD 63842 IANA-RSVD 63843 IANA-RSVD 63844 IANA-RSVD 63845 IANA-RSVD 63846 IANA-RSVD 63847 IANA-RSVD 63848 IANA-RSVD 63849 IANA-RSVD 63850 IANA-RSVD 63851 IANA-RSVD 63852 IANA-RSVD 63853 IANA-RSVD 63854 IANA-RSVD 63855 IANA-RSVD 63856 IANA-RSVD 63857 IANA-RSVD 63858 IANA-RSVD 63859 IANA-RSVD 63860 IANA-RSVD 63861 IANA-RSVD 63862 IANA-RSVD 63863 IANA-RSVD 63864 IANA-RSVD 63865 IANA-RSVD 63866 IANA-RSVD 63867 IANA-RSVD 63868 IANA-RSVD 63869 IANA-RSVD 63870 IANA-RSVD 63871 IANA-RSVD 63872 IANA-RSVD 63873 IANA-RSVD 63874 IANA-RSVD 63875 IANA-RSVD 63876 IANA-RSVD 63877 IANA-RSVD 63878 IANA-RSVD 63879 IANA-RSVD 63880 IANA-RSVD 63881 IANA-RSVD 63882 IANA-RSVD 63883 IANA-RSVD 63884 IANA-RSVD 63885 IANA-RSVD 63886 IANA-RSVD 63887 IANA-RSVD 63888 IANA-RSVD 63889 IANA-RSVD 63890 IANA-RSVD 63891 IANA-RSVD 63892 IANA-RSVD 63893 IANA-RSVD 63894 IANA-RSVD 63895 IANA-RSVD 63896 IANA-RSVD 63897 IANA-RSVD 63898 IANA-RSVD 63899 IANA-RSVD 63900 IANA-RSVD 63901 IANA-RSVD 63902 IANA-RSVD 63903 IANA-RSVD 63904 IANA-RSVD 63905 IANA-RSVD 63906 IANA-RSVD 63907 IANA-RSVD 63908 IANA-RSVD 63909 IANA-RSVD 63910 IANA-RSVD 63911 IANA-RSVD 63912 IANA-RSVD 63913 IANA-RSVD 63914 IANA-RSVD 63915 IANA-RSVD 63916 IANA-RSVD 63917 IANA-RSVD 63918 IANA-RSVD 63919 IANA-RSVD 63920 IANA-RSVD 63921 IANA-RSVD 63922 IANA-RSVD 63923 IANA-RSVD 63924 IANA-RSVD 63925 IANA-RSVD 63926 IANA-RSVD 63927 IANA-RSVD 63928 IANA-RSVD 63929 IANA-RSVD 63930 IANA-RSVD 63931 IANA-RSVD 63932 IANA-RSVD 63933 IANA-RSVD 63934 IANA-RSVD 63935 IANA-RSVD 63936 IANA-RSVD 63937 IANA-RSVD 63938 IANA-RSVD 63939 IANA-RSVD 63940 IANA-RSVD 63941 IANA-RSVD 63942 IANA-RSVD 63943 IANA-RSVD 63944 IANA-RSVD 63945 IANA-RSVD 63946 IANA-RSVD 63947 IANA-RSVD 63948 IANA-RSVD 63949 IANA-RSVD 63950 IANA-RSVD 63951 IANA-RSVD 63952 IANA-RSVD 63953 IANA-RSVD 63954 IANA-RSVD 63955 IANA-RSVD 63956 IANA-RSVD 63957 IANA-RSVD 63958 IANA-RSVD 63959 IANA-RSVD 63960 IANA-RSVD 63961 IANA-RSVD 63962 IANA-RSVD 63963 IANA-RSVD 63964 IANA-RSVD 63965 IANA-RSVD 63966 IANA-RSVD 63967 IANA-RSVD 63968 IANA-RSVD 63969 IANA-RSVD 63970 IANA-RSVD 63971 IANA-RSVD 63972 IANA-RSVD 63973 IANA-RSVD 63974 IANA-RSVD 63975 IANA-RSVD 63976 IANA-RSVD 63977 IANA-RSVD 63978 IANA-RSVD 63979 IANA-RSVD 63980 IANA-RSVD 63981 IANA-RSVD 63982 IANA-RSVD 63983 IANA-RSVD 63984 IANA-RSVD 63985 IANA-RSVD 63986 IANA-RSVD 63987 IANA-RSVD 63988 IANA-RSVD 63989 IANA-RSVD 63990 IANA-RSVD 63991 IANA-RSVD 63992 IANA-RSVD 63993 IANA-RSVD 63994 IANA-RSVD 63995 IANA-RSVD 63996 IANA-RSVD 63997 IANA-RSVD 63998 IANA-RSVD 63999 IANA-RSVD 64000 IANA-RSVD 64001 IANA-RSVD 64002 IANA-RSVD 64003 IANA-RSVD 64004 IANA-RSVD 64005 IANA-RSVD 64006 IANA-RSVD 64007 IANA-RSVD 64008 IANA-RSVD 64009 IANA-RSVD 64010 IANA-RSVD 64011 IANA-RSVD 64012 IANA-RSVD 64013 IANA-RSVD 64014 IANA-RSVD 64015 IANA-RSVD 64016 IANA-RSVD 64017 IANA-RSVD 64018 IANA-RSVD 64019 IANA-RSVD 64020 IANA-RSVD 64021 IANA-RSVD 64022 IANA-RSVD 64023 IANA-RSVD 64024 IANA-RSVD 64025 IANA-RSVD 64026 IANA-RSVD 64027 IANA-RSVD 64028 IANA-RSVD 64029 IANA-RSVD 64030 IANA-RSVD 64031 IANA-RSVD 64032 IANA-RSVD 64033 IANA-RSVD 64034 IANA-RSVD 64035 IANA-RSVD 64036 IANA-RSVD 64037 IANA-RSVD 64038 IANA-RSVD 64039 IANA-RSVD 64040 IANA-RSVD 64041 IANA-RSVD 64042 IANA-RSVD 64043 IANA-RSVD 64044 IANA-RSVD 64045 IANA-RSVD 64046 IANA-RSVD 64047 IANA-RSVD 64048 IANA-RSVD 64049 IANA-RSVD 64050 IANA-RSVD 64051 IANA-RSVD 64052 IANA-RSVD 64053 IANA-RSVD 64054 IANA-RSVD 64055 IANA-RSVD 64056 IANA-RSVD 64057 IANA-RSVD 64058 IANA-RSVD 64059 IANA-RSVD 64060 IANA-RSVD 64061 IANA-RSVD 64062 IANA-RSVD 64063 IANA-RSVD 64064 IANA-RSVD 64065 IANA-RSVD 64066 IANA-RSVD 64067 IANA-RSVD 64068 IANA-RSVD 64069 IANA-RSVD 64070 IANA-RSVD 64071 IANA-RSVD 64072 IANA-RSVD 64073 IANA-RSVD 64074 IANA-RSVD 64075 IANA-RSVD 64076 IANA-RSVD 64077 IANA-RSVD 64078 IANA-RSVD 64079 IANA-RSVD 64080 IANA-RSVD 64081 IANA-RSVD 64082 IANA-RSVD 64083 IANA-RSVD 64084 IANA-RSVD 64085 IANA-RSVD 64086 IANA-RSVD 64087 IANA-RSVD 64088 IANA-RSVD 64089 IANA-RSVD 64090 IANA-RSVD 64091 IANA-RSVD 64092 IANA-RSVD 64093 IANA-RSVD 64094 IANA-RSVD 64095 IANA-RSVD 64096 IANA-RSVD 64097 IANA-RSVD 64098 IANA-RSVD 64099 IANA-RSVD 64100 IANA-RSVD 64101 IANA-RSVD 64102 IANA-RSVD 64103 IANA-RSVD 64104 IANA-RSVD 64105 IANA-RSVD 64106 IANA-RSVD 64107 IANA-RSVD 64108 IANA-RSVD 64109 IANA-RSVD 64110 IANA-RSVD 64111 IANA-RSVD 64112 IANA-RSVD 64113 IANA-RSVD 64114 IANA-RSVD 64115 IANA-RSVD 64116 IANA-RSVD 64117 IANA-RSVD 64118 IANA-RSVD 64119 IANA-RSVD 64120 IANA-RSVD 64121 IANA-RSVD 64122 IANA-RSVD 64123 IANA-RSVD 64124 IANA-RSVD 64125 IANA-RSVD 64126 IANA-RSVD 64127 IANA-RSVD 64128 IANA-RSVD 64129 IANA-RSVD 64130 IANA-RSVD 64131 IANA-RSVD 64132 IANA-RSVD 64133 IANA-RSVD 64134 IANA-RSVD 64135 IANA-RSVD 64136 IANA-RSVD 64137 IANA-RSVD 64138 IANA-RSVD 64139 IANA-RSVD 64140 IANA-RSVD 64141 IANA-RSVD 64142 IANA-RSVD 64143 IANA-RSVD 64144 IANA-RSVD 64145 IANA-RSVD 64146 IANA-RSVD 64147 IANA-RSVD 64148 IANA-RSVD 64149 IANA-RSVD 64150 IANA-RSVD 64151 IANA-RSVD 64152 IANA-RSVD 64153 IANA-RSVD 64154 IANA-RSVD 64155 IANA-RSVD 64156 IANA-RSVD 64157 IANA-RSVD 64158 IANA-RSVD 64159 IANA-RSVD 64160 IANA-RSVD 64161 IANA-RSVD 64162 IANA-RSVD 64163 IANA-RSVD 64164 IANA-RSVD 64165 IANA-RSVD 64166 IANA-RSVD 64167 IANA-RSVD 64168 IANA-RSVD 64169 IANA-RSVD 64170 IANA-RSVD 64171 IANA-RSVD 64172 IANA-RSVD 64173 IANA-RSVD 64174 IANA-RSVD 64175 IANA-RSVD 64176 IANA-RSVD 64177 IANA-RSVD 64178 IANA-RSVD 64179 IANA-RSVD 64180 IANA-RSVD 64181 IANA-RSVD 64182 IANA-RSVD 64183 IANA-RSVD 64184 IANA-RSVD 64185 IANA-RSVD 64186 IANA-RSVD 64187 IANA-RSVD 64188 IANA-RSVD 64189 IANA-RSVD 64190 IANA-RSVD 64191 IANA-RSVD 64192 IANA-RSVD 64193 IANA-RSVD 64194 IANA-RSVD 64195 IANA-RSVD 64196 IANA-RSVD 64197 IANA-RSVD 64198 IANA-RSVD 64199 IANA-RSVD 64200 IANA-RSVD 64201 IANA-RSVD 64202 IANA-RSVD 64203 IANA-RSVD 64204 IANA-RSVD 64205 IANA-RSVD 64206 IANA-RSVD 64207 IANA-RSVD 64208 IANA-RSVD 64209 IANA-RSVD 64210 IANA-RSVD 64211 IANA-RSVD 64212 IANA-RSVD 64213 IANA-RSVD 64214 IANA-RSVD 64215 IANA-RSVD 64216 IANA-RSVD 64217 IANA-RSVD 64218 IANA-RSVD 64219 IANA-RSVD 64220 IANA-RSVD 64221 IANA-RSVD 64222 IANA-RSVD 64223 IANA-RSVD 64224 IANA-RSVD 64225 IANA-RSVD 64226 IANA-RSVD 64227 IANA-RSVD 64228 IANA-RSVD 64229 IANA-RSVD 64230 IANA-RSVD 64231 IANA-RSVD 64232 IANA-RSVD 64233 IANA-RSVD 64234 IANA-RSVD 64235 IANA-RSVD 64236 IANA-RSVD 64237 IANA-RSVD 64238 IANA-RSVD 64239 IANA-RSVD 64240 IANA-RSVD 64241 IANA-RSVD 64242 IANA-RSVD 64243 IANA-RSVD 64244 IANA-RSVD 64245 IANA-RSVD 64246 IANA-RSVD 64247 IANA-RSVD 64248 IANA-RSVD 64249 IANA-RSVD 64250 IANA-RSVD 64251 IANA-RSVD 64252 IANA-RSVD 64253 IANA-RSVD 64254 IANA-RSVD 64255 IANA-RSVD 64256 IANA-RSVD 64257 IANA-RSVD 64258 IANA-RSVD 64259 IANA-RSVD 64260 IANA-RSVD 64261 IANA-RSVD 64262 IANA-RSVD 64263 IANA-RSVD 64264 IANA-RSVD 64265 IANA-RSVD 64266 IANA-RSVD 64267 IANA-RSVD 64268 IANA-RSVD 64269 IANA-RSVD 64270 IANA-RSVD 64271 IANA-RSVD 64272 IANA-RSVD 64273 IANA-RSVD 64274 IANA-RSVD 64275 IANA-RSVD 64276 IANA-RSVD 64277 IANA-RSVD 64278 IANA-RSVD 64279 IANA-RSVD 64280 IANA-RSVD 64281 IANA-RSVD 64282 IANA-RSVD 64283 IANA-RSVD 64284 IANA-RSVD 64285 IANA-RSVD 64286 IANA-RSVD 64287 IANA-RSVD 64288 IANA-RSVD 64289 IANA-RSVD 64290 IANA-RSVD 64291 IANA-RSVD 64292 IANA-RSVD 64293 IANA-RSVD 64294 IANA-RSVD 64295 IANA-RSVD 64296 IANA-RSVD 64297 IANA-RSVD 64298 IANA-RSVD 64299 IANA-RSVD 64300 IANA-RSVD 64301 IANA-RSVD 64302 IANA-RSVD 64303 IANA-RSVD 64304 IANA-RSVD 64305 IANA-RSVD 64306 IANA-RSVD 64307 IANA-RSVD 64308 IANA-RSVD 64309 IANA-RSVD 64310 IANA-RSVD 64311 IANA-RSVD 64312 IANA-RSVD 64313 IANA-RSVD 64314 IANA-RSVD 64315 IANA-RSVD 64316 IANA-RSVD 64317 IANA-RSVD 64318 IANA-RSVD 64319 IANA-RSVD 64320 IANA-RSVD 64321 IANA-RSVD 64322 IANA-RSVD 64323 IANA-RSVD 64324 IANA-RSVD 64325 IANA-RSVD 64326 IANA-RSVD 64327 IANA-RSVD 64328 IANA-RSVD 64329 IANA-RSVD 64330 IANA-RSVD 64331 IANA-RSVD 64332 IANA-RSVD 64333 IANA-RSVD 64334 IANA-RSVD 64335 IANA-RSVD 64336 IANA-RSVD 64337 IANA-RSVD 64338 IANA-RSVD 64339 IANA-RSVD 64340 IANA-RSVD 64341 IANA-RSVD 64342 IANA-RSVD 64343 IANA-RSVD 64344 IANA-RSVD 64345 IANA-RSVD 64346 IANA-RSVD 64347 IANA-RSVD 64348 IANA-RSVD 64349 IANA-RSVD 64350 IANA-RSVD 64351 IANA-RSVD 64352 IANA-RSVD 64353 IANA-RSVD 64354 IANA-RSVD 64355 IANA-RSVD 64356 IANA-RSVD 64357 IANA-RSVD 64358 IANA-RSVD 64359 IANA-RSVD 64360 IANA-RSVD 64361 IANA-RSVD 64362 IANA-RSVD 64363 IANA-RSVD 64364 IANA-RSVD 64365 IANA-RSVD 64366 IANA-RSVD 64367 IANA-RSVD 64368 IANA-RSVD 64369 IANA-RSVD 64370 IANA-RSVD 64371 IANA-RSVD 64372 IANA-RSVD 64373 IANA-RSVD 64374 IANA-RSVD 64375 IANA-RSVD 64376 IANA-RSVD 64377 IANA-RSVD 64378 IANA-RSVD 64379 IANA-RSVD 64380 IANA-RSVD 64381 IANA-RSVD 64382 IANA-RSVD 64383 IANA-RSVD 64384 IANA-RSVD 64385 IANA-RSVD 64386 IANA-RSVD 64387 IANA-RSVD 64388 IANA-RSVD 64389 IANA-RSVD 64390 IANA-RSVD 64391 IANA-RSVD 64392 IANA-RSVD 64393 IANA-RSVD 64394 IANA-RSVD 64395 IANA-RSVD 64396 IANA-RSVD 64397 IANA-RSVD 64398 IANA-RSVD 64399 IANA-RSVD 64400 IANA-RSVD 64401 IANA-RSVD 64402 IANA-RSVD 64403 IANA-RSVD 64404 IANA-RSVD 64405 IANA-RSVD 64406 IANA-RSVD 64407 IANA-RSVD 64408 IANA-RSVD 64409 IANA-RSVD 64410 IANA-RSVD 64411 IANA-RSVD 64412 IANA-RSVD 64413 IANA-RSVD 64414 IANA-RSVD 64415 IANA-RSVD 64416 IANA-RSVD 64417 IANA-RSVD 64418 IANA-RSVD 64419 IANA-RSVD 64420 IANA-RSVD 64421 IANA-RSVD 64422 IANA-RSVD 64423 IANA-RSVD 64424 IANA-RSVD 64425 IANA-RSVD 64426 IANA-RSVD 64427 IANA-RSVD 64428 IANA-RSVD 64429 IANA-RSVD 64430 IANA-RSVD 64431 IANA-RSVD 64432 IANA-RSVD 64433 IANA-RSVD 64434 IANA-RSVD 64435 IANA-RSVD 64436 IANA-RSVD 64437 IANA-RSVD 64438 IANA-RSVD 64439 IANA-RSVD 64440 IANA-RSVD 64441 IANA-RSVD 64442 IANA-RSVD 64443 IANA-RSVD 64444 IANA-RSVD 64445 IANA-RSVD 64446 IANA-RSVD 64447 IANA-RSVD 64448 IANA-RSVD 64449 IANA-RSVD 64450 IANA-RSVD 64451 IANA-RSVD 64452 IANA-RSVD 64453 IANA-RSVD 64454 IANA-RSVD 64455 IANA-RSVD 64456 IANA-RSVD 64457 IANA-RSVD 64458 IANA-RSVD 64459 IANA-RSVD 64460 IANA-RSVD 64461 IANA-RSVD 64462 IANA-RSVD 64463 IANA-RSVD 64464 IANA-RSVD 64465 IANA-RSVD 64466 IANA-RSVD 64467 IANA-RSVD 64468 IANA-RSVD 64469 IANA-RSVD 64470 IANA-RSVD 64471 IANA-RSVD 64472 IANA-RSVD 64473 IANA-RSVD 64474 IANA-RSVD 64475 IANA-RSVD 64476 IANA-RSVD 64477 IANA-RSVD 64478 IANA-RSVD 64479 IANA-RSVD 64480 IANA-RSVD 64481 IANA-RSVD 64482 IANA-RSVD 64483 IANA-RSVD 64484 IANA-RSVD 64485 IANA-RSVD 64486 IANA-RSVD 64487 IANA-RSVD 64488 IANA-RSVD 64489 IANA-RSVD 64490 IANA-RSVD 64491 IANA-RSVD 64492 IANA-RSVD 64493 IANA-RSVD 64494 IANA-RSVD 64495 IANA-RSVD 64496 IANA-RSVD 64497 IANA-RSVD 64498 IANA-RSVD 64499 IANA-RSVD 64500 IANA-RSVD 64501 IANA-RSVD 64502 IANA-RSVD 64503 IANA-RSVD 64504 IANA-RSVD 64505 IANA-RSVD 64506 IANA-RSVD 64507 IANA-RSVD 64508 IANA-RSVD 64509 IANA-RSVD 64510 IANA-RSVD 64511 IANA-RSVD 64512 IANA-RSVD2 64513 IANA-RSVD2 64514 IANA-RSVD2 64515 IANA-RSVD2 64516 IANA-RSVD2 64517 IANA-RSVD2 64518 IANA-RSVD2 64519 IANA-RSVD2 64520 IANA-RSVD2 64521 IANA-RSVD2 64522 IANA-RSVD2 64523 IANA-RSVD2 64524 IANA-RSVD2 64525 IANA-RSVD2 64526 IANA-RSVD2 64527 IANA-RSVD2 64528 IANA-RSVD2 64529 IANA-RSVD2 64530 IANA-RSVD2 64531 IANA-RSVD2 64532 IANA-RSVD2 64533 IANA-RSVD2 64534 IANA-RSVD2 64535 IANA-RSVD2 64536 IANA-RSVD2 64537 IANA-RSVD2 64538 IANA-RSVD2 64539 IANA-RSVD2 64540 IANA-RSVD2 64541 IANA-RSVD2 64542 IANA-RSVD2 64543 IANA-RSVD2 64544 IANA-RSVD2 64545 IANA-RSVD2 64546 IANA-RSVD2 64547 IANA-RSVD2 64548 IANA-RSVD2 64549 IANA-RSVD2 64550 IANA-RSVD2 64551 IANA-RSVD2 64552 IANA-RSVD2 64553 IANA-RSVD2 64554 IANA-RSVD2 64555 IANA-RSVD2 64556 IANA-RSVD2 64557 IANA-RSVD2 64558 IANA-RSVD2 64559 IANA-RSVD2 64560 IANA-RSVD2 64561 IANA-RSVD2 64562 IANA-RSVD2 64563 IANA-RSVD2 64564 IANA-RSVD2 64565 IANA-RSVD2 64566 IANA-RSVD2 64567 IANA-RSVD2 64568 IANA-RSVD2 64569 IANA-RSVD2 64570 IANA-RSVD2 64571 IANA-RSVD2 64572 IANA-RSVD2 64573 IANA-RSVD2 64574 IANA-RSVD2 64575 IANA-RSVD2 64576 IANA-RSVD2 64577 IANA-RSVD2 64578 IANA-RSVD2 64579 IANA-RSVD2 64580 IANA-RSVD2 64581 IANA-RSVD2 64582 IANA-RSVD2 64583 IANA-RSVD2 64584 IANA-RSVD2 64585 IANA-RSVD2 64586 IANA-RSVD2 64587 IANA-RSVD2 64588 IANA-RSVD2 64589 IANA-RSVD2 64590 IANA-RSVD2 64591 IANA-RSVD2 64592 IANA-RSVD2 64593 IANA-RSVD2 64594 IANA-RSVD2 64595 IANA-RSVD2 64596 IANA-RSVD2 64597 IANA-RSVD2 64598 IANA-RSVD2 64599 IANA-RSVD2 64600 IANA-RSVD2 64601 IANA-RSVD2 64602 IANA-RSVD2 64603 IANA-RSVD2 64604 IANA-RSVD2 64605 IANA-RSVD2 64606 IANA-RSVD2 64607 IANA-RSVD2 64608 IANA-RSVD2 64609 IANA-RSVD2 64610 IANA-RSVD2 64611 IANA-RSVD2 64612 IANA-RSVD2 64613 IANA-RSVD2 64614 IANA-RSVD2 64615 IANA-RSVD2 64616 IANA-RSVD2 64617 IANA-RSVD2 64618 IANA-RSVD2 64619 IANA-RSVD2 64620 IANA-RSVD2 64621 IANA-RSVD2 64622 IANA-RSVD2 64623 IANA-RSVD2 64624 IANA-RSVD2 64625 IANA-RSVD2 64626 IANA-RSVD2 64627 IANA-RSVD2 64628 IANA-RSVD2 64629 IANA-RSVD2 64630 IANA-RSVD2 64631 IANA-RSVD2 64632 IANA-RSVD2 64633 IANA-RSVD2 64634 IANA-RSVD2 64635 IANA-RSVD2 64636 IANA-RSVD2 64637 IANA-RSVD2 64638 IANA-RSVD2 64639 IANA-RSVD2 64640 IANA-RSVD2 64641 IANA-RSVD2 64642 IANA-RSVD2 64643 IANA-RSVD2 64644 IANA-RSVD2 64645 IANA-RSVD2 64646 IANA-RSVD2 64647 IANA-RSVD2 64648 IANA-RSVD2 64649 IANA-RSVD2 64650 IANA-RSVD2 64651 IANA-RSVD2 64652 IANA-RSVD2 64653 IANA-RSVD2 64654 IANA-RSVD2 64655 IANA-RSVD2 64656 IANA-RSVD2 64657 IANA-RSVD2 64658 IANA-RSVD2 64659 IANA-RSVD2 64660 IANA-RSVD2 64661 IANA-RSVD2 64662 IANA-RSVD2 64663 IANA-RSVD2 64664 IANA-RSVD2 64665 IANA-RSVD2 64666 IANA-RSVD2 64667 IANA-RSVD2 64668 IANA-RSVD2 64669 IANA-RSVD2 64670 IANA-RSVD2 64671 IANA-RSVD2 64672 IANA-RSVD2 64673 IANA-RSVD2 64674 IANA-RSVD2 64675 IANA-RSVD2 64676 IANA-RSVD2 64677 IANA-RSVD2 64678 IANA-RSVD2 64679 IANA-RSVD2 64680 IANA-RSVD2 64681 IANA-RSVD2 64682 IANA-RSVD2 64683 IANA-RSVD2 64684 IANA-RSVD2 64685 IANA-RSVD2 64686 IANA-RSVD2 64687 IANA-RSVD2 64688 IANA-RSVD2 64689 IANA-RSVD2 64690 IANA-RSVD2 64691 IANA-RSVD2 64692 IANA-RSVD2 64693 IANA-RSVD2 64694 IANA-RSVD2 64695 IANA-RSVD2 64696 IANA-RSVD2 64697 IANA-RSVD2 64698 IANA-RSVD2 64699 IANA-RSVD2 64700 IANA-RSVD2 64701 IANA-RSVD2 64702 IANA-RSVD2 64703 IANA-RSVD2 64704 IANA-RSVD2 64705 IANA-RSVD2 64706 IANA-RSVD2 64707 IANA-RSVD2 64708 IANA-RSVD2 64709 IANA-RSVD2 64710 IANA-RSVD2 64711 IANA-RSVD2 64712 IANA-RSVD2 64713 IANA-RSVD2 64714 IANA-RSVD2 64715 IANA-RSVD2 64716 IANA-RSVD2 64717 IANA-RSVD2 64718 IANA-RSVD2 64719 IANA-RSVD2 64720 IANA-RSVD2 64721 IANA-RSVD2 64722 IANA-RSVD2 64723 IANA-RSVD2 64724 IANA-RSVD2 64725 IANA-RSVD2 64726 IANA-RSVD2 64727 IANA-RSVD2 64728 IANA-RSVD2 64729 IANA-RSVD2 64730 IANA-RSVD2 64731 IANA-RSVD2 64732 IANA-RSVD2 64733 IANA-RSVD2 64734 IANA-RSVD2 64735 IANA-RSVD2 64736 IANA-RSVD2 64737 IANA-RSVD2 64738 IANA-RSVD2 64739 IANA-RSVD2 64740 IANA-RSVD2 64741 IANA-RSVD2 64742 IANA-RSVD2 64743 IANA-RSVD2 64744 IANA-RSVD2 64745 IANA-RSVD2 64746 IANA-RSVD2 64747 IANA-RSVD2 64748 IANA-RSVD2 64749 IANA-RSVD2 64750 IANA-RSVD2 64751 IANA-RSVD2 64752 IANA-RSVD2 64753 IANA-RSVD2 64754 IANA-RSVD2 64755 IANA-RSVD2 64756 IANA-RSVD2 64757 IANA-RSVD2 64758 IANA-RSVD2 64759 IANA-RSVD2 64760 IANA-RSVD2 64761 IANA-RSVD2 64762 IANA-RSVD2 64763 IANA-RSVD2 64764 IANA-RSVD2 64765 IANA-RSVD2 64766 IANA-RSVD2 64767 IANA-RSVD2 64768 IANA-RSVD2 64769 IANA-RSVD2 64770 IANA-RSVD2 64771 IANA-RSVD2 64772 IANA-RSVD2 64773 IANA-RSVD2 64774 IANA-RSVD2 64775 IANA-RSVD2 64776 IANA-RSVD2 64777 IANA-RSVD2 64778 IANA-RSVD2 64779 IANA-RSVD2 64780 IANA-RSVD2 64781 IANA-RSVD2 64782 IANA-RSVD2 64783 IANA-RSVD2 64784 IANA-RSVD2 64785 IANA-RSVD2 64786 IANA-RSVD2 64787 IANA-RSVD2 64788 IANA-RSVD2 64789 IANA-RSVD2 64790 IANA-RSVD2 64791 IANA-RSVD2 64792 IANA-RSVD2 64793 IANA-RSVD2 64794 IANA-RSVD2 64795 IANA-RSVD2 64796 IANA-RSVD2 64797 IANA-RSVD2 64798 IANA-RSVD2 64799 IANA-RSVD2 64800 IANA-RSVD2 64801 IANA-RSVD2 64802 IANA-RSVD2 64803 IANA-RSVD2 64804 IANA-RSVD2 64805 IANA-RSVD2 64806 IANA-RSVD2 64807 IANA-RSVD2 64808 IANA-RSVD2 64809 IANA-RSVD2 64810 IANA-RSVD2 64811 IANA-RSVD2 64812 IANA-RSVD2 64813 IANA-RSVD2 64814 IANA-RSVD2 64815 IANA-RSVD2 64816 IANA-RSVD2 64817 IANA-RSVD2 64818 IANA-RSVD2 64819 IANA-RSVD2 64820 IANA-RSVD2 64821 IANA-RSVD2 64822 IANA-RSVD2 64823 IANA-RSVD2 64824 IANA-RSVD2 64825 IANA-RSVD2 64826 IANA-RSVD2 64827 IANA-RSVD2 64828 IANA-RSVD2 64829 IANA-RSVD2 64830 IANA-RSVD2 64831 IANA-RSVD2 64832 IANA-RSVD2 64833 IANA-RSVD2 64834 IANA-RSVD2 64835 IANA-RSVD2 64836 IANA-RSVD2 64837 IANA-RSVD2 64838 IANA-RSVD2 64839 IANA-RSVD2 64840 IANA-RSVD2 64841 IANA-RSVD2 64842 IANA-RSVD2 64843 IANA-RSVD2 64844 IANA-RSVD2 64845 IANA-RSVD2 64846 IANA-RSVD2 64847 IANA-RSVD2 64848 IANA-RSVD2 64849 IANA-RSVD2 64850 IANA-RSVD2 64851 IANA-RSVD2 64852 IANA-RSVD2 64853 IANA-RSVD2 64854 IANA-RSVD2 64855 IANA-RSVD2 64856 IANA-RSVD2 64857 IANA-RSVD2 64858 IANA-RSVD2 64859 IANA-RSVD2 64860 IANA-RSVD2 64861 IANA-RSVD2 64862 IANA-RSVD2 64863 IANA-RSVD2 64864 IANA-RSVD2 64865 IANA-RSVD2 64866 IANA-RSVD2 64867 IANA-RSVD2 64868 IANA-RSVD2 64869 IANA-RSVD2 64870 IANA-RSVD2 64871 IANA-RSVD2 64872 IANA-RSVD2 64873 IANA-RSVD2 64874 IANA-RSVD2 64875 IANA-RSVD2 64876 IANA-RSVD2 64877 IANA-RSVD2 64878 IANA-RSVD2 64879 IANA-RSVD2 64880 IANA-RSVD2 64881 IANA-RSVD2 64882 IANA-RSVD2 64883 IANA-RSVD2 64884 IANA-RSVD2 64885 IANA-RSVD2 64886 IANA-RSVD2 64887 IANA-RSVD2 64888 IANA-RSVD2 64889 IANA-RSVD2 64890 IANA-RSVD2 64891 IANA-RSVD2 64892 IANA-RSVD2 64893 IANA-RSVD2 64894 IANA-RSVD2 64895 IANA-RSVD2 64896 IANA-RSVD2 64897 IANA-RSVD2 64898 IANA-RSVD2 64899 IANA-RSVD2 64900 IANA-RSVD2 64901 IANA-RSVD2 64902 IANA-RSVD2 64903 IANA-RSVD2 64904 IANA-RSVD2 64905 IANA-RSVD2 64906 IANA-RSVD2 64907 IANA-RSVD2 64908 IANA-RSVD2 64909 IANA-RSVD2 64910 IANA-RSVD2 64911 IANA-RSVD2 64912 IANA-RSVD2 64913 IANA-RSVD2 64914 IANA-RSVD2 64915 IANA-RSVD2 64916 IANA-RSVD2 64917 IANA-RSVD2 64918 IANA-RSVD2 64919 IANA-RSVD2 64920 IANA-RSVD2 64921 IANA-RSVD2 64922 IANA-RSVD2 64923 IANA-RSVD2 64924 IANA-RSVD2 64925 IANA-RSVD2 64926 IANA-RSVD2 64927 IANA-RSVD2 64928 IANA-RSVD2 64929 IANA-RSVD2 64930 IANA-RSVD2 64931 IANA-RSVD2 64932 IANA-RSVD2 64933 IANA-RSVD2 64934 IANA-RSVD2 64935 IANA-RSVD2 64936 IANA-RSVD2 64937 IANA-RSVD2 64938 IANA-RSVD2 64939 IANA-RSVD2 64940 IANA-RSVD2 64941 IANA-RSVD2 64942 IANA-RSVD2 64943 IANA-RSVD2 64944 IANA-RSVD2 64945 IANA-RSVD2 64946 IANA-RSVD2 64947 IANA-RSVD2 64948 IANA-RSVD2 64949 IANA-RSVD2 64950 IANA-RSVD2 64951 IANA-RSVD2 64952 IANA-RSVD2 64953 IANA-RSVD2 64954 IANA-RSVD2 64955 IANA-RSVD2 64956 IANA-RSVD2 64957 IANA-RSVD2 64958 IANA-RSVD2 64959 IANA-RSVD2 64960 IANA-RSVD2 64961 IANA-RSVD2 64962 IANA-RSVD2 64963 IANA-RSVD2 64964 IANA-RSVD2 64965 IANA-RSVD2 64966 IANA-RSVD2 64967 IANA-RSVD2 64968 IANA-RSVD2 64969 IANA-RSVD2 64970 IANA-RSVD2 64971 IANA-RSVD2 64972 IANA-RSVD2 64973 IANA-RSVD2 64974 IANA-RSVD2 64975 IANA-RSVD2 64976 IANA-RSVD2 64977 IANA-RSVD2 64978 IANA-RSVD2 64979 IANA-RSVD2 64980 IANA-RSVD2 64981 IANA-RSVD2 64982 IANA-RSVD2 64983 IANA-RSVD2 64984 IANA-RSVD2 64985 IANA-RSVD2 64986 IANA-RSVD2 64987 IANA-RSVD2 64988 IANA-RSVD2 64989 IANA-RSVD2 64990 IANA-RSVD2 64991 IANA-RSVD2 64992 IANA-RSVD2 64993 IANA-RSVD2 64994 IANA-RSVD2 64995 IANA-RSVD2 64996 IANA-RSVD2 64997 IANA-RSVD2 64998 IANA-RSVD2 64999 IANA-RSVD2 65000 IANA-RSVD2 65001 IANA-RSVD2 65002 IANA-RSVD2 65003 IANA-RSVD2 65004 IANA-RSVD2 65005 IANA-RSVD2 65006 IANA-RSVD2 65007 IANA-RSVD2 65008 IANA-RSVD2 65009 IANA-RSVD2 65010 IANA-RSVD2 65011 IANA-RSVD2 65012 IANA-RSVD2 65013 IANA-RSVD2 65014 IANA-RSVD2 65015 IANA-RSVD2 65016 IANA-RSVD2 65017 IANA-RSVD2 65018 IANA-RSVD2 65019 IANA-RSVD2 65020 IANA-RSVD2 65021 IANA-RSVD2 65022 IANA-RSVD2 65023 IANA-RSVD2 65024 IANA-RSVD2 65025 IANA-RSVD2 65026 IANA-RSVD2 65027 IANA-RSVD2 65028 IANA-RSVD2 65029 IANA-RSVD2 65030 IANA-RSVD2 65031 IANA-RSVD2 65032 IANA-RSVD2 65033 IANA-RSVD2 65034 IANA-RSVD2 65035 IANA-RSVD2 65036 IANA-RSVD2 65037 IANA-RSVD2 65038 IANA-RSVD2 65039 IANA-RSVD2 65040 IANA-RSVD2 65041 IANA-RSVD2 65042 IANA-RSVD2 65043 IANA-RSVD2 65044 IANA-RSVD2 65045 IANA-RSVD2 65046 IANA-RSVD2 65047 IANA-RSVD2 65048 IANA-RSVD2 65049 IANA-RSVD2 65050 IANA-RSVD2 65051 IANA-RSVD2 65052 IANA-RSVD2 65053 IANA-RSVD2 65054 IANA-RSVD2 65055 IANA-RSVD2 65056 IANA-RSVD2 65057 IANA-RSVD2 65058 IANA-RSVD2 65059 IANA-RSVD2 65060 IANA-RSVD2 65061 IANA-RSVD2 65062 IANA-RSVD2 65063 IANA-RSVD2 65064 IANA-RSVD2 65065 IANA-RSVD2 65066 IANA-RSVD2 65067 IANA-RSVD2 65068 IANA-RSVD2 65069 IANA-RSVD2 65070 IANA-RSVD2 65071 IANA-RSVD2 65072 IANA-RSVD2 65073 IANA-RSVD2 65074 IANA-RSVD2 65075 IANA-RSVD2 65076 IANA-RSVD2 65077 IANA-RSVD2 65078 IANA-RSVD2 65079 IANA-RSVD2 65080 IANA-RSVD2 65081 IANA-RSVD2 65082 IANA-RSVD2 65083 IANA-RSVD2 65084 IANA-RSVD2 65085 IANA-RSVD2 65086 IANA-RSVD2 65087 IANA-RSVD2 65088 IANA-RSVD2 65089 IANA-RSVD2 65090 IANA-RSVD2 65091 IANA-RSVD2 65092 IANA-RSVD2 65093 IANA-RSVD2 65094 IANA-RSVD2 65095 IANA-RSVD2 65096 IANA-RSVD2 65097 IANA-RSVD2 65098 IANA-RSVD2 65099 IANA-RSVD2 65100 IANA-RSVD2 65101 IANA-RSVD2 65102 IANA-RSVD2 65103 IANA-RSVD2 65104 IANA-RSVD2 65105 IANA-RSVD2 65106 IANA-RSVD2 65107 IANA-RSVD2 65108 IANA-RSVD2 65109 IANA-RSVD2 65110 IANA-RSVD2 65111 IANA-RSVD2 65112 IANA-RSVD2 65113 IANA-RSVD2 65114 IANA-RSVD2 65115 IANA-RSVD2 65116 IANA-RSVD2 65117 IANA-RSVD2 65118 IANA-RSVD2 65119 IANA-RSVD2 65120 IANA-RSVD2 65121 IANA-RSVD2 65122 IANA-RSVD2 65123 IANA-RSVD2 65124 IANA-RSVD2 65125 IANA-RSVD2 65126 IANA-RSVD2 65127 IANA-RSVD2 65128 IANA-RSVD2 65129 IANA-RSVD2 65130 IANA-RSVD2 65131 IANA-RSVD2 65132 IANA-RSVD2 65133 IANA-RSVD2 65134 IANA-RSVD2 65135 IANA-RSVD2 65136 IANA-RSVD2 65137 IANA-RSVD2 65138 IANA-RSVD2 65139 IANA-RSVD2 65140 IANA-RSVD2 65141 IANA-RSVD2 65142 IANA-RSVD2 65143 IANA-RSVD2 65144 IANA-RSVD2 65145 IANA-RSVD2 65146 IANA-RSVD2 65147 IANA-RSVD2 65148 IANA-RSVD2 65149 IANA-RSVD2 65150 IANA-RSVD2 65151 IANA-RSVD2 65152 IANA-RSVD2 65153 IANA-RSVD2 65154 IANA-RSVD2 65155 IANA-RSVD2 65156 IANA-RSVD2 65157 IANA-RSVD2 65158 IANA-RSVD2 65159 IANA-RSVD2 65160 IANA-RSVD2 65161 IANA-RSVD2 65162 IANA-RSVD2 65163 IANA-RSVD2 65164 IANA-RSVD2 65165 IANA-RSVD2 65166 IANA-RSVD2 65167 IANA-RSVD2 65168 IANA-RSVD2 65169 IANA-RSVD2 65170 IANA-RSVD2 65171 IANA-RSVD2 65172 IANA-RSVD2 65173 IANA-RSVD2 65174 IANA-RSVD2 65175 IANA-RSVD2 65176 IANA-RSVD2 65177 IANA-RSVD2 65178 IANA-RSVD2 65179 IANA-RSVD2 65180 IANA-RSVD2 65181 IANA-RSVD2 65182 IANA-RSVD2 65183 IANA-RSVD2 65184 IANA-RSVD2 65185 IANA-RSVD2 65186 IANA-RSVD2 65187 IANA-RSVD2 65188 IANA-RSVD2 65189 IANA-RSVD2 65190 IANA-RSVD2 65191 IANA-RSVD2 65192 IANA-RSVD2 65193 IANA-RSVD2 65194 IANA-RSVD2 65195 IANA-RSVD2 65196 IANA-RSVD2 65197 IANA-RSVD2 65198 IANA-RSVD2 65199 IANA-RSVD2 65200 IANA-RSVD2 65201 IANA-RSVD2 65202 IANA-RSVD2 65203 IANA-RSVD2 65204 IANA-RSVD2 65205 IANA-RSVD2 65206 IANA-RSVD2 65207 IANA-RSVD2 65208 IANA-RSVD2 65209 IANA-RSVD2 65210 IANA-RSVD2 65211 IANA-RSVD2 65212 IANA-RSVD2 65213 IANA-RSVD2 65214 IANA-RSVD2 65215 IANA-RSVD2 65216 IANA-RSVD2 65217 IANA-RSVD2 65218 IANA-RSVD2 65219 IANA-RSVD2 65220 IANA-RSVD2 65221 IANA-RSVD2 65222 IANA-RSVD2 65223 IANA-RSVD2 65224 IANA-RSVD2 65225 IANA-RSVD2 65226 IANA-RSVD2 65227 IANA-RSVD2 65228 IANA-RSVD2 65229 IANA-RSVD2 65230 IANA-RSVD2 65231 IANA-RSVD2 65232 IANA-RSVD2 65233 IANA-RSVD2 65234 IANA-RSVD2 65235 IANA-RSVD2 65236 IANA-RSVD2 65237 IANA-RSVD2 65238 IANA-RSVD2 65239 IANA-RSVD2 65240 IANA-RSVD2 65241 IANA-RSVD2 65242 IANA-RSVD2 65243 IANA-RSVD2 65244 IANA-RSVD2 65245 IANA-RSVD2 65246 IANA-RSVD2 65247 IANA-RSVD2 65248 IANA-RSVD2 65249 IANA-RSVD2 65250 IANA-RSVD2 65251 IANA-RSVD2 65252 IANA-RSVD2 65253 IANA-RSVD2 65254 IANA-RSVD2 65255 IANA-RSVD2 65256 IANA-RSVD2 65257 IANA-RSVD2 65258 IANA-RSVD2 65259 IANA-RSVD2 65260 IANA-RSVD2 65261 IANA-RSVD2 65262 IANA-RSVD2 65263 IANA-RSVD2 65264 IANA-RSVD2 65265 IANA-RSVD2 65266 IANA-RSVD2 65267 IANA-RSVD2 65268 IANA-RSVD2 65269 IANA-RSVD2 65270 IANA-RSVD2 65271 IANA-RSVD2 65272 IANA-RSVD2 65273 IANA-RSVD2 65274 IANA-RSVD2 65275 IANA-RSVD2 65276 IANA-RSVD2 65277 IANA-RSVD2 65278 IANA-RSVD2 65279 IANA-RSVD2 65280 IANA-RSVD2 65281 IANA-RSVD2 65282 IANA-RSVD2 65283 IANA-RSVD2 65284 IANA-RSVD2 65285 IANA-RSVD2 65286 IANA-RSVD2 65287 IANA-RSVD2 65288 IANA-RSVD2 65289 IANA-RSVD2 65290 IANA-RSVD2 65291 IANA-RSVD2 65292 IANA-RSVD2 65293 IANA-RSVD2 65294 IANA-RSVD2 65295 IANA-RSVD2 65296 IANA-RSVD2 65297 IANA-RSVD2 65298 IANA-RSVD2 65299 IANA-RSVD2 65300 IANA-RSVD2 65301 IANA-RSVD2 65302 IANA-RSVD2 65303 IANA-RSVD2 65304 IANA-RSVD2 65305 IANA-RSVD2 65306 IANA-RSVD2 65307 IANA-RSVD2 65308 IANA-RSVD2 65309 IANA-RSVD2 65310 IANA-RSVD2 65311 IANA-RSVD2 65312 IANA-RSVD2 65313 IANA-RSVD2 65314 IANA-RSVD2 65315 IANA-RSVD2 65316 IANA-RSVD2 65317 IANA-RSVD2 65318 IANA-RSVD2 65319 IANA-RSVD2 65320 IANA-RSVD2 65321 IANA-RSVD2 65322 IANA-RSVD2 65323 IANA-RSVD2 65324 IANA-RSVD2 65325 IANA-RSVD2 65326 IANA-RSVD2 65327 IANA-RSVD2 65328 IANA-RSVD2 65329 IANA-RSVD2 65330 IANA-RSVD2 65331 IANA-RSVD2 65332 IANA-RSVD2 65333 IANA-RSVD2 65334 IANA-RSVD2 65335 IANA-RSVD2 65336 IANA-RSVD2 65337 IANA-RSVD2 65338 IANA-RSVD2 65339 IANA-RSVD2 65340 IANA-RSVD2 65341 IANA-RSVD2 65342 IANA-RSVD2 65343 IANA-RSVD2 65344 IANA-RSVD2 65345 IANA-RSVD2 65346 IANA-RSVD2 65347 IANA-RSVD2 65348 IANA-RSVD2 65349 IANA-RSVD2 65350 IANA-RSVD2 65351 IANA-RSVD2 65352 IANA-RSVD2 65353 IANA-RSVD2 65354 IANA-RSVD2 65355 IANA-RSVD2 65356 IANA-RSVD2 65357 IANA-RSVD2 65358 IANA-RSVD2 65359 IANA-RSVD2 65360 IANA-RSVD2 65361 IANA-RSVD2 65362 IANA-RSVD2 65363 IANA-RSVD2 65364 IANA-RSVD2 65365 IANA-RSVD2 65366 IANA-RSVD2 65367 IANA-RSVD2 65368 IANA-RSVD2 65369 IANA-RSVD2 65370 IANA-RSVD2 65371 IANA-RSVD2 65372 IANA-RSVD2 65373 IANA-RSVD2 65374 IANA-RSVD2 65375 IANA-RSVD2 65376 IANA-RSVD2 65377 IANA-RSVD2 65378 IANA-RSVD2 65379 IANA-RSVD2 65380 IANA-RSVD2 65381 IANA-RSVD2 65382 IANA-RSVD2 65383 IANA-RSVD2 65384 IANA-RSVD2 65385 IANA-RSVD2 65386 IANA-RSVD2 65387 IANA-RSVD2 65388 IANA-RSVD2 65389 IANA-RSVD2 65390 IANA-RSVD2 65391 IANA-RSVD2 65392 IANA-RSVD2 65393 IANA-RSVD2 65394 IANA-RSVD2 65395 IANA-RSVD2 65396 IANA-RSVD2 65397 IANA-RSVD2 65398 IANA-RSVD2 65399 IANA-RSVD2 65400 IANA-RSVD2 65401 IANA-RSVD2 65402 IANA-RSVD2 65403 IANA-RSVD2 65404 IANA-RSVD2 65405 IANA-RSVD2 65406 IANA-RSVD2 65407 IANA-RSVD2 65408 IANA-RSVD2 65409 IANA-RSVD2 65410 IANA-RSVD2 65411 IANA-RSVD2 65412 IANA-RSVD2 65413 IANA-RSVD2 65414 IANA-RSVD2 65415 IANA-RSVD2 65416 IANA-RSVD2 65417 IANA-RSVD2 65418 IANA-RSVD2 65419 IANA-RSVD2 65420 IANA-RSVD2 65421 IANA-RSVD2 65422 IANA-RSVD2 65423 IANA-RSVD2 65424 IANA-RSVD2 65425 IANA-RSVD2 65426 IANA-RSVD2 65427 IANA-RSVD2 65428 IANA-RSVD2 65429 IANA-RSVD2 65430 IANA-RSVD2 65431 IANA-RSVD2 65432 IANA-RSVD2 65433 IANA-RSVD2 65434 IANA-RSVD2 65435 IANA-RSVD2 65436 IANA-RSVD2 65437 IANA-RSVD2 65438 IANA-RSVD2 65439 IANA-RSVD2 65440 IANA-RSVD2 65441 IANA-RSVD2 65442 IANA-RSVD2 65443 IANA-RSVD2 65444 IANA-RSVD2 65445 IANA-RSVD2 65446 IANA-RSVD2 65447 IANA-RSVD2 65448 IANA-RSVD2 65449 IANA-RSVD2 65450 IANA-RSVD2 65451 IANA-RSVD2 65452 IANA-RSVD2 65453 IANA-RSVD2 65454 IANA-RSVD2 65455 IANA-RSVD2 65456 IANA-RSVD2 65457 IANA-RSVD2 65458 IANA-RSVD2 65459 IANA-RSVD2 65460 IANA-RSVD2 65461 IANA-RSVD2 65462 IANA-RSVD2 65463 IANA-RSVD2 65464 IANA-RSVD2 65465 IANA-RSVD2 65466 IANA-RSVD2 65467 IANA-RSVD2 65468 IANA-RSVD2 65469 IANA-RSVD2 65470 IANA-RSVD2 65471 IANA-RSVD2 65472 IANA-RSVD2 65473 IANA-RSVD2 65474 IANA-RSVD2 65475 IANA-RSVD2 65476 IANA-RSVD2 65477 IANA-RSVD2 65478 IANA-RSVD2 65479 IANA-RSVD2 65480 IANA-RSVD2 65481 IANA-RSVD2 65482 IANA-RSVD2 65483 IANA-RSVD2 65484 IANA-RSVD2 65485 IANA-RSVD2 65486 IANA-RSVD2 65487 IANA-RSVD2 65488 IANA-RSVD2 65489 IANA-RSVD2 65490 IANA-RSVD2 65491 IANA-RSVD2 65492 IANA-RSVD2 65493 IANA-RSVD2 65494 IANA-RSVD2 65495 IANA-RSVD2 65496 IANA-RSVD2 65497 IANA-RSVD2 65498 IANA-RSVD2 65499 IANA-RSVD2 65500 IANA-RSVD2 65501 IANA-RSVD2 65502 IANA-RSVD2 65503 IANA-RSVD2 65504 IANA-RSVD2 65505 IANA-RSVD2 65506 IANA-RSVD2 65507 IANA-RSVD2 65508 IANA-RSVD2 65509 IANA-RSVD2 65510 IANA-RSVD2 65511 IANA-RSVD2 65512 IANA-RSVD2 65513 IANA-RSVD2 65514 IANA-RSVD2 65515 IANA-RSVD2 65516 IANA-RSVD2 65517 IANA-RSVD2 65518 IANA-RSVD2 65519 IANA-RSVD2 65520 IANA-RSVD2 65521 IANA-RSVD2 65522 IANA-RSVD2 65523 IANA-RSVD2 65524 IANA-RSVD2 65525 IANA-RSVD2 65526 IANA-RSVD2 65527 IANA-RSVD2 65528 IANA-RSVD2 65529 IANA-RSVD2 65530 IANA-RSVD2 65531 IANA-RSVD2 65532 IANA-RSVD2 65533 IANA-RSVD2 65534 IANA-RSVD2 65535 IANA-RSVD2 flow-tools-0.68/configs/asn.txt0000644000076600007660000312042607643062405012241 [asn.txt] 2002-07-08 This file contains a list of autonomous system numbers and names of all registered ASNs. The column on the right below contains the ARIN database "handle" of the coordinator for the ASN. White-pages information may be obtained about any of the ASN coodinators in this list querying the ARIN WHOIS server. For questions or updates on this information please contact the ARIN Registration Services Hostmaster staff, HOSTMASTER@ARIN.NET. ASN Number Name Handle 1 GNTY-1 [CS15-ARIN] 2 DCN-AS [DW19-ARIN] 3 MIT-GATEWAYS [RH164-ARIN] 4 ISI-AS [JKR1-ARIN] 5 SYMBOLICS [SG52-ARIN] 6 BULL-HN [JLM23-ARIN] 7 UK-MOD [RNM1-ARIN] 8 RICE-AS [RUH-ORG-ARIN] 9 CMU-ROUTER [HC-ORG-ARIN] 10 CSNET-EXT-AS [CS15-ARIN] 11 HARVARD [WJO3-ARIN] 12 NYU-DOMAIN [ZN68-ARIN] 13 BRL-AS [RR33-ARIN] 14 COLUMBIA-GW [ZC26-ARIN] 15 NET-DYNAMICS-EXP [ZSU-ARIN] 16 LBL [CAL3-ARIN] 17 PURDUE [SMB17-ARIN] 18 UTEXAS [DLN12-ARIN] 19 CSS-DOMAIN [CR11-ARIN] 20 UR [LB16-ARIN] 21 RAND [ZT72-ARIN] 22 NOSC [RLB3-ARIN] 23 RIACS-AS [DG28-ARIN] 24 AMES-NAS-GW [MT2149-ARIN] 25 UCB [DLW31-ARIN] 26 CORNELL [ZC166-ARIN] 27 UMDNET [UM-ORG-ARIN] 28 DFVLR-SYS [GB7-ARIN] 29 YALE-AS [HML1-ARIN] 30 SRI-AICNET [WMT-ARIN] 31 CIT [HS140-ARIN] 32 STANFORD [JK231-ARIN] 33 DEC-WRL-AS [SS486-ARIN] 34 UDELNET [DJG2-ARIN] 35 MICATON [WDL-ARIN] 36 EGP-TESTOR [PEM4-ARIN] 37 NSWC [DAF9-ARIN] 38 UIUC [CK185-ARIN] 39 NRL-ITD [AP-ARIN] 40 MIT-TEST [ZM80-ARIN] 41 AMES [NNO2-ARIN] 42 WOODYNET-1 [BW1324-ARIN] 43 BNL-AS [FL105-ARIN] 44 S1-DOMAIN [RAK12-ARIN] 45 LLL-TIS-AS [DO91-ARIN] 46 RUTGERS [RU-ORG-ARIN] 47 USC-OBERON [UNA2-ARIN] 48 NRL-AS [MD51-ARIN] 49 ICST-AS [CWH3-ARIN] 50 ORNL-MSRNET [SH1294-ARIN] 51 USAREUR-EM-AS [FWD-ARIN] 52 UCLA [UNO4-ARIN] 53 NORTHROP-AS [DEC3-ARIN] 54 COA-FIN-NET-AS [WRR2-ARIN] 55 UPENN-CIS [GM229-ARIN] 56 OPTIMIS-P [GPL1-ARIN] 57 UMN-REI-UC [TPB3-ARIN] 58 DREA-AS [KDR-ARIN] 59 WISC-MADISON-AS [NO13-ORG-ARIN] 60 DARPA-BFLY [RPD2-ARIN] 61 DEC-MARLBORO-AS [JM60-ARIN] 62 TEKVAXC [TE16-ARIN] 63 LL-MI [ZM44-ARIN] 64 MITRE-B-AS [BSW-ARIN] 65 LOGNET-AS [JRA18-ARIN] 66 ETL-AI [MMM3-ARIN] 67 SDC-PRC-AS [JS1325-ARIN] 68 LANL-INET-AS [PCW-ARIN] 69 WHARTON-AS [HK2-ARIN] 70 NLM-GW [JA1-ARIN] 71 HP-INTERNET-AS [MM53-ARIN] 72 SCHLUMBERGER-AS [ZS104-ARIN] 73 WASHINGTON-AS [UW-NOC-ARIN] 74 XDRENET-AS [JS161-ARIN] 75 ANL-AS [ANA3-ORG-ARIN] 76 SDC-CAM-AS [JS1325-ARIN] 77 JHUAPL-AS [ZJ20-ARIN] 78 SYNTEGRA [RET9-ARIN] 79 DSPO-HC-AS [BT5-ARIN] 80 GE-CRD [JEB50-ARIN] 81 CONCERT [NH34-ORG-ARIN] 82 TWG-DEMO-AS [JS171-ARIN] 83 PICANET-AS [RFD1-ARIN] 84 DTNSRDC-AS1 [RWT2-ARIN] 85 AERO-NET [LCN-ARIN] 86 GENUITY-AS86 [CS15-ARIN] 87 INDIANA-AS [BS69-ARIN] 88 PRINCETON-AS [LCV-ARIN] 89 NUSC-CSTLNET-AS [MP20-ARIN] 90 SUN-AS [FL59-ARIN] 91 RPI-AS [PDA4-ARIN] 92 CLARKSON-AS [RP503-ARIN] 93 VRIO-93 [VIA4-ORG-ARIN] 94 BELVOIR-NET [MDS30-ARIN] 95 NUSCLSB1 [RPP-ARIN] 96 JTELS-BEN1-AS [WRR2-ARIN] 97 VERIO-EC [VIA4-ORG-ARIN] 98 ROCKEFELLER-AS [MK38-ARIN] 99 INTEL-IWARP [RLS115-ARIN] 100 FMC-CTC [WW82-ARIN] 101 WASH-NSF-AS [UW-NOC-ARIN] 102 NSF-HQ-AS [FW17-ARIN] 103 NWU-AS [TW1261-ARIN] 104 COLORADO-AS [DCMW-ARIN] 105 MOT-MCD-AS [DP7-ARIN] 106 GTEGSC-WLO [SMS1-ARIN] 107 ECSNET-AS [CAL7-ARIN] 108 XEROX-AS [DCS-ARIN] 109 CISCOSYSTEMS [MRK4-ARIN] 110 XAIT-AS [AL6-ARIN] 111 BOSTONU-AS [VLC-ORG-ARIN] 112 ROOTSERV [PV15-ARIN] 113 SCCNET-AS [MJO4-ARIN] 114 VRIO-114 [VIA4-ORG-ARIN] 115 PBAS-BEN2-GW-AS [WRR2-ARIN] 116 TELCORDIA [DW648-ARIN] 117 ALBM-NET-AS [DV42-ARIN] 118 NSWSES-NAVY-AS [DD41-ARIN] 119 AMS-AS [NK19-ARIN] 120 MITRE-OMAHA [SM62-ARIN] 121 IH-POE-AS [LK27-ARIN] 122 U-PGH-NET-AS [MS222-ARIN] 123 LOGAIRCOMNET-AS [MS311-ARIN] 124 ENCORE-GW-AS [PYC-ARIN] 125 HI-NET-AS [CV136-ARIN] 126 MINSY-POE-AS [CV14-ARIN] 127 JPL-AS [JAW16-ARIN] 128 ADS-AS [PD5-ARIN] 129 CDA-AS [FJS3-ARIN] 130 CSOCNET-AS [JJD12-ARIN] 131 UCSB-NET-AS [KS1217-ARIN] 132 WPAFB-CSD-NET-AS [JLS6-ARIN] 133 AFIT-AS [DWD20-ARIN] 134 CORONA-GW-AS [LM35-ARIN] 135 BRL-CDCNET-GW-AS [RR33-ARIN] 136 ECONET-AS [TD40-ARIN] 137 ITALY-AS [ABB2-ARIN] 138 BRL-CMCGW-AS [RR33-ARIN] 139 NUWESNET-AS [RM125-ARIN] 140 DAITC-NET-AS [JFH5-ARIN] 141 NWCNET-AS [EG17-ARIN] 142 WESTPOINT [GH178-ARIN] 143 OOG1-AS [JD86-ARIN] 144 ATT-INTERNET [DP1272-ARIN] 145 VBNS [RB1412-ARIN] 146 HQEIS-AS [SMK2-ARIN] 147 NAVCAMS-LAN-AS [JM246-ARIN] 148 NWSC-GW-AS [GS24-ARIN] 149 ADEL-AS [CM115-ARIN] 150 SEANET-AS [JH10-ARIN] 151 IND-NTC-AS [AI2-ORG-ARIN] 152 SRI-ACCATT-AS [RDQ-ARIN] 153 SAAD-ARPA-AS [DRM24-ARIN] 154 USACEC-NET-AS [DEA-ARIN] 155 CACNET-AS [BG25-ARIN] 156 NORTHEASTERN-GW-AS [BW364-ARIN] 157 INTELLIAUTON [EL30-ARIN] 158 ACC-AS [AB20-ARIN] 159 SONNET-AS [GS1050-ARIN] 160 U-CHICAGO-AS [RJR21-ARIN] 161 TI-AS [DF71-ARIN] 162 NOSL-POE-AS [DB211-ARIN] 163 IBM-RESEARCH-AS [TR783-ARIN] 164 DDN-MB-AS [RH6-ARIN] 165 NESEA-DDN-GW-AS [DN48-ARIN] 166 IDA-AS [MM227-ARIN] 167 WESLEYAN-AS [DW485-ARIN] 168 UMASS-AMHERST [ASG-ARIN] 169 HANSCOM-NET-AS [DD63-ARIN] 170 YKTNPOE-GW-AS [WRR5-ARIN] 172 CSDA-AS [LJC2-ARIN] 173 ECLNET [KM82-ARIN] 174 PSINET [MF19-ARIN] 175 AFWL-AS [BSR-ARIN] 176 BCN-AS [RF50-ARIN] 177 MERIT-AS [AA179-ARIN] 178 IBMYORKTOWN-AS [ZM8-ARIN] 179 IBMMILFORD-AS [AA179-ARIN] 180 MCIRESTON-AS [AA179-ARIN] 181 NSFNETTEST1-AS [CL289-ARIN] 182 NSFNETTEST2-AS [MIE-ORG-ARIN] 183 NSFNETTEST3-AS [MIE-ORG-ARIN] 184 NSFNETTEST4-AS [MIE-ORG-ARIN] 185 NSFNETTEST5-AS [MIE-ORG-ARIN] 186 CUA-AS [ECM6-ARIN] 188 SAIC-AS [SDF5-ARIN] 189 GENUITY-AS189 [CS15-ARIN] 190 NSYPTSMH-POE-AS [TSD3-ARIN] 191 NORDA-AS [MG120-ARIN] 192 ROCHINSTTECH [CF35-ARIN] 193 FORD-ASN [WRL6-ARIN] 194 USAN-AS [PS24-ARIN] 195 SDSC-AS [TH60-ARIN] 196 RISC-SYSTEM [CH974-ARIN] 197 RAYTHEON-AS-2 [ZR46-ARIN] 198 ARL-SNI-AS [JTA2-ARIN] 199-203 GENUITY-AS199-203 [CS15-ARIN] 204 PSCNET-AS [PN-ORG-ARIN] 205 MONTCLAIR-AS [MG564-ARIN] 206 CSC-LONS-GW-AS [SWR3-ARIN] 207 CLI-GW-AS [WAH11-ARIN] 208 LBNS-POE-AS [GC104-ARIN] 209 ASN-QWEST [QN-ARIN] 210 WEST-NET-WEST [MC2185-ARIN] 211 RADC-LONS-GW-AS [SWR3-ARIN] 212 HQAFSC-LONS-GW-AS [SWR3-ARIN] 213 APGEA-NET1-AS [REA3-ARIN] 214 USNA-AS [RAD15-ARIN] 215 RIA-2-AUTO-AS [TC72-ARIN] 216 LMSC-HOSTNET-AS [ST55-ARIN] 217 UMN-AGS-NET-AS [TP63-ARIN] 218 AFOTECPCNET-AS [KDA5-ARIN] 219 PUGET-POE-AS [GC104-ARIN] 220 OOALC-HOSTNET-AS [ST55-ARIN] 221 WRALC-HOSTNET-AS [MS544-ARIN] 222 SMALC-HOSTNET-AS [ST55-ARIN] 223 TISW-AS [PW18-ARIN] 224 UNINETT-AS [JT122-ARIN] 225 VIRGINIA-AS [JAJ17-ARIN] 226 LOS-NETTOS-AS [WP8-ARIN] 227 SHAFTER-AS [CR131-ARIN] 228 DC-SUN-NET-AS [MC202-ARIN] 229 NSFNETTEST6-AS [MIE-ORG-ARIN] 230 NSFNETTEST7-AS [MIE-ORG-ARIN] 231 NSFNETTEST8-AS [MIE-ORG-ARIN] 232 NSFNETTEST9-AS [MIE-ORG-ARIN] 233 NSFNETTEST10-AS [MIE-ORG-ARIN] 234 BLACKROSE-1 [DK109-ARIN] 235 NSFNETTEST12-AS [MIE-ORG-ARIN] 236 NSFNETTEST13-AS [MIE-ORG-ARIN] 237 NSFNETTEST14-AS [MIE-ORG-ARIN] 238 NSFNETTEST15-AS [MIE-ORG-ARIN] 239 UTORONTO-AS [LO24-ARIN] 240 SAALC-HOSTNET-AS [ST55-ARIN] 241 OCALC-HOSTNET-AS [ST55-ARIN] 242 SSSD-AS [RGH21-ARIN] 243 HARRIS-ATD-AS [TS14-ARIN] 244 ITT-FEC-AS [RW45-ARIN] 245 PRC-AS [SS172-ARIN] 246 ASIFICS-GW-AS [SC139-ARIN] 247 ROMENET-AS [PV23-ARIN] 248 OBL-LINK-AS [MCB5-ARIN] 249 RDM-LINK-AS [MCB5-ARIN] 250 LON-LINK-AS [MCB5-ARIN] 251 CPO-LINK-AS [MCB5-ARIN] 252 CECOM-A-TACT [MB31-ARIN] 253 VRIO253 [VIA4-ORG-ARIN] 254 TWG-NET-AS [DP221-ARIN] 255 PAFB-GW [NW29-ARIN] 256 NCSC-NET-AS [JD130-ARIN] 257 NPS-GATOR-AS [] 258 BRAGGSRI-EGP-AS [TN5-ARIN] 259 SCUBED-AS [SS135-ARIN] 260 DSI-WR-15 [RPD2-ARIN] 261 EASINET-AS [JLD31-ARIN] 262-263 VRIO-262-3 [VIA4-ORG-ARIN] 264 SRINET-AS [DP2-ARIN] 265 DSI-WR-16 [RPD2-ARIN] 267 NETHER-NET [JM568-ARIN] 268 USUHSNET-AS [MK124-ARIN] 269 INCSYS-AS [JS281-ARIN] 270 PSCNI-AS [BH162-ARIN] 271 BCNET-AS [JCD8-ARIN] 272 FTLEENET-AS [TWH19-ARIN] 273 DARPA-CISCO-AS [SC3-ARIN] 274 SOFT-CON-NTS-AS [RPD2-ARIN] 275 VRIO-275 [VIA4-ORG-ARIN] 276 UTX-AUS [WCB3-ARIN] 277 GENUITY-AS277 [CS15-ARIN] 278 RAM-AS [NU4-ARIN] 279 GENUITY-AS279 [CS15-ARIN] 280 VRIO-280 [VIA4-ORG-ARIN] 281 GENUITY-AS281 [CS15-ARIN] 282 MERIT-AUX-AS [JRJ18-ARIN] 284 UUNET-AS [JM3614-ARIN] 285 AVTROS-AS [CAD10-ARIN] 286 EUNET-AS [EU-NIC-ARIN] 287 CNSYD-POE-AS [MI1-ARIN] 288 ESA-AS [ZE36-ARIN] 289 APGNET-AS [VC5-ARIN] 290 SHOWNET-AS [ED18-ARIN] 291 ESNET-EAST291 [MC434-ARIN] 292 ESNET-CENTRAL292 [MC434-ARIN] 293 ESNET-WEST293 [MC434-ARIN] 294 FRANCE-IP-NET-AS [AR41-ARIN] 295 OSI-GW-AS [WLW-ARIN] 296 ACFP-NET-TST-AS [HR43-ARIN] 297 NSN-UMD-AS [MT2149-ARIN] 298 RADC-LONEX-AS [JAM38-ARIN] 299 UCINET-AS [DM331-ARIN] 300 GUNTER-LAN-AS [TMD6-ARIN] 301 C3PO-AS [RR184-ARIN] 302 BCM-INFO-NET-AS [AR400-ARIN] 303 NPRDC-AS [RFS2-ARIN] 304 SRIEXPRIGNET-AS [PEM4-ARIN] 305 WALTER-REED-AS [BSA2-ARIN] 306-371 NGNET-AS [CAP5-ARIN] 372 NSN-AMES-AS [MSM1-ARIN] 373 IE-TESTBED-AS [GH122-ARIN] 374 BROOKS-AS [RDB35-ARIN] 375 TIETOTIE-AS [TA100-ARIN] 376 RISQ-AS [SC166-ORG-ARIN] 377 SNLA-NET-AS [TCH2-ARIN] 378 ILAN-AS [HN7-ARIN] 379-508 AFCONC-BLOCK1-AS [MWJ6-ARIN] 509 WORMS-GW1-AS [] 510 CSNET-INT-AS [JC347-ARIN] 511 CSNET-MIS-AS [WHN2-ARIN] 512 NAVDEC-NET1 [DG163-ARIN] 514 EDMICS-POE [PWP2-ARIN] 515 PMS312GATE-ASN [DL164-ARIN] 516 KODAK-BTC [RM295-ARIN] 517 XLINK-UKA [AN45-ARIN] 518 CONCORD-POE-AS [SJG2-ARIN] 519 ISCNET [MB487-ARIN] 520 COINSDISNET3 [RLS6-ARIN] 521 FORD-SRL-AS [FJB3-ARIN] 522 AFSC-SSD-AS [DD38-ARIN] 523 REDSTONE-AS [RT64-ARIN] 524 GENUITY-AS524 [CS15-ARIN] 525 WUERZBURG-GW1-AS [LT70-ARIN] 526 ASCHAFFENBURG-GW1-AS [GP129-ARIN] 527 ANSBACH-GW1-AS [JLP35-ARIN] 528 AUGSBURG-GW1-AS [LW137-ARIN] 529 BURTONWOOD-GW1-AS [LW138-ARIN] 530 GEOPPINGEN-GW1-AS [PO2-ARIN] 531 GRAFENWOEHR-GW1-AS [SD131-ARIN] 532 HEIDELBERG-GW1-AS [AH130-ARIN] 533 HEILBRONN-GW1-AS [MG205-ARIN] 534 KARLSRUHE-GW1-AS [OT5-ARIN] 535 MUNICH-GW1-AS [RJ127-ARIN] 536 NUERNBERG-GW1-AS [SJ65-ARIN] 537 ULM-GW1-AS [CR167-ARIN] 538 SCHWEINFURT-GW1-AS [WN4-ARIN] 539 STUTTGART-GW1-AS [CJC31-ARIN] 540 BAMBERG-GW1-AS [DS335-ARIN] 541 IGAUTON [EL30-ARIN] 542 ARNET [ZA28-ARIN] 543 CONVEX [JE126-ARIN] 544 SONERA [ZS175-ARIN] 545 NRI [SW1092-ARIN] 546 SPARTA-AS [MS1073-ARIN] 547 TST-RGN-47-AS [DM353-ARIN] 548 HQUSAF-AS [PBV-ARIN] 549 ONET-AS [ONET-NOC-ARIN] 550 CORNETT-AS [PCW-ARIN] 551 TIS-AS [DID1-ARIN] 552 PATCH-AS [TTS8-ARIN] 553 BELWUE-AS [PM178-ARIN] 554 CALINET-AS [WP8-ARIN] 555 NETWORKCS [NAS-ARIN] 556 CALREN-AS [WP8-ARIN] 557 UMAINE-SYS-AS [IKA-ARIN] 558 OLIVETTI-AS1 [JA13-ARIN] 559 SWITCH-AS [ZS187-ARIN] 560 GENUITY-AS560 [CS15-ARIN] 561 3COM-A [ZG18-ARIN] 562 3COM-B [ZG18-ARIN] 563 3COM-C [ZG18-ARIN] 564 OPSNET [LC151-ARIN] 565 VTTNET-AS [JK187-ARIN] 566 CSSP-ASN [AJ29-ARIN] 567 ASN-DART-AS [WP8-ARIN] 568 SUMNET-AS [JC536-ARIN] 569 DIMNET-AS [FZ-ARIN] 570 SSD-NET-AS [DD38-ARIN] 571 CENTCOM-AS [KMC3-ARIN] 573 NAVDEC-NET3-AS [DG163-ARIN] 574 PSC-TEST-AS [PN-ORG-ARIN] 575 WIESBADDN-GW1 [] 576 NAVDAC-NET3-AS [JC275-ARIN] 577 BACOM [EQ-ARIN] 580 MAINZ-GW1-AS [MM413-ARIN] 581 GDSS-XRSNET-AS [BB276-ARIN] 582 GDSS-21AF-AS [BB276-ARIN] 583 GDSS-22AF-AS [BB276-ARIN] 584 GDSS-23AF-AS [BB276-ARIN] 585 GDSS-322ALD-AS [BB276-ARIN] 586 GDSS-834ALD-AS [BB276-ARIN] 587 GDSS-ANG-AS [BB276-ARIN] 588 FRANKFRT-GW1-AS [SDM8-ARIN] 589 UNT-CAMPUS-AS [PB226-ARIN] 590 EASINET-AS1 [WP90-ARIN] 591 NSTN-AS [MM583-ARIN] 592 USNA-NADN-AS [AF60-ARIN] 593 EASINET-AS1 [] 594-598 GENUITY-AS594-598 [CS15-ARIN] 599 NISC-AS [VN-ARIN] 600 OARNET-AS [GS1050-ARIN] 601 BACOM4-AS [EQ-ARIN] 602 BACOM3-AS [EQ-ARIN] 603 BACOM2-AS [EQ-ARIN] 610 CANET10-AS [CA-NOC-ARIN] 611 CANET11-AS [CA-NOC-ARIN] 612 CANET12-AS [CA-NOC-ARIN] 613 ARCO-AS [SC199-ARIN] 614 CSUNET-AS [DR161-ARIN] 615 AS-RITCHIE-GW1 [JH257-ARIN] 616-665 PENS-NET-AS [DAG32-ARIN] 666 CSTA-CISCO-AS [MH74-ARIN] 667 FSTC-MIL-AS [BB64-ARIN] 668 ASN-ASNET-NET-AS [RJR3-ARIN] 669 OFRIR-IP-INTERNET-AS [YD-ARIN] 670 DARMSTADT-GW1-AS [KL84-ARIN] 671 BAUMHOLDER-GW1-AS [LN10-ARIN] 672 FULDA-GW1-AS [SM48-ARIN] 673 HANAU-GW1-AS [RS521-ARIN] 674 BBN-DSI [JSW27-ARIN] 675 MSUS-AS [DK142-ARIN] 676 ARNET-AS [OS27-ARIN] 677 ASU-AS [SMB33-ARIN] 678 NTSC-IELN-AS [DW198-ARIN] 679 TUNET-AS [JD238-ARIN] 680 DFN-WIN-AS [MW238-ARIN] 681 KAWAIHIKO-1 [DS555-ARIN] 682 AS-ORNL-IGRP1-AS [THD-ARIN] 683 ARGONNE-AS [ANA3-ORG-ARIN] 684 MBNET-AS [JP1488-ARIN] 685 VRIO-685 [VIA4-ORG-ARIN] 686 OSD-GW-AS [WSW11-ARIN] 687 NATC-CSDRD-AS [DS95-ARIN] 688 RECNET-AS [JIMWW-ARIN] 689 AS-NSFNET-T3-BB-AS [MIE-ORG-ARIN] 690 NSFNET-T3-RT-AS [MIE-ORG-ARIN] 691 PEINET-AS [DC307-ARIN] 692 SEMATECH-AS [MP5121-ARIN] 693 NOTRE-DAME-AS [SPS5-ARIN] 694 UTACCS-ASN [SW123-ARIN] 695 SWITCH-R1-AS [ZS187-ARIN] 696 SWITCH-R2-AS [ZS187-ARIN] 697 EASINET-AS2 [WP90-ARIN] 698 ASN-UIUC-REGION-AS [RV80-ARIN] 700 ROKNET-AS [RR280-ARIN] 701-705 ALTERNET-AS [IE8-ARIN] 706 TEST-AUSTIN-IBM-AS [MH486-ARIN] 707 ELAN-AS [DDK1-ARIN] 708 SB-COMM-AS [PSK-ARIN] 709 UHEY-NET-AS [PSK-ARIN] 710 BENT-NET-AS [PSK-ARIN] 711 SB-COMM-AS [PSK-ARIN] 712 ALCON-NET-AS [PSK-ARIN] 713 AFMPCGW-AS [RAN13-ARIN] 714 APPLE-ENGINEERING [ZA42-ARIN] 715 ZOCALO-AS [BW1324-ARIN] 716 ZAMA-AS [SLV4-ARIN] 717 PEOCU-NET-AS [CF54-ARIN] 718 SEABAT-AS [MM379-ARIN] 719 LANLINK-AS [RA145-ARIN] 720 WR-LOGDIS-AS [JM773-ARIN] 721-726 DLA-ASNBLOCK-AS [JC536-ARIN] 727-746 AFCONC-BLOCK2-AS [MWJ6-ARIN] 747 TAEGU-AS [RJH71-ARIN] 748 USCAPAC-AS [MF181-ARIN] 749 ANAD-AS [ES20-ARIN] 750 NSFNETTEST16-AS [MIE-ORG-ARIN] 751 NSFNETTEST17-AS [MIE-ORG-ARIN] 752 NSFNETTEST18-AS [MIE-ORG-ARIN] 753 NSFNETTEST19-AS [MIE-ORG-ARIN] 754 NSFNETTEST20-AS [MIE-ORG-ARIN] 755 NSFNETTEST21-AS [MIE-ORG-ARIN] 756 NSFNETTEST22-AS [MIE-ORG-ARIN] 757 NSFNETTEST23-AS [MIE-ORG-ARIN] 758 NSFNETTEST24-AS [MIE-ORG-ARIN] 759 NSFNETTEST25-AS [MIE-ORG-ARIN] 760 UNIVIE-AS [HS118-ARIN] 761 TIETORAITTI-AS [KV20-ARIN] 762 WELLFLEET-AS [SW159-ARIN] 763 SQNT-TEAMNET-AS [MJE18-ARIN] 764 VN-VERKKO-AS [VH41-ARIN] 765 DCA-JDSSC [ADP2-ARIN] 766 IRIS-AS [CT66-ARIN] 767 NTSC-PEN-AS [WRJ9-ARIN] 768 NCCS-A-AS [DWJ5-ARIN] 769 NTSC-LANT-AS [RWF29-ARIN] 770 NTSC-PAC-AS [GRM-ARIN] 771 NSN-RICE-AS [JB525-ARIN] 772 WALTER-REED1-AS [BSA2-ARIN] 773 SPARTA-MD-AS [MS1073-ARIN] 774 OFRIR-IP-ASNBLOCK-AS [YD-ARIN] 775 OFRIR-IP-ASNBLOCK-2 [YD-ARIN] 776 OFRIR-IP-ASNBLOCK-3 [YD-ARIN] 777 OFRIR-IP-ASNBLOCK-4 [YD-ARIN] 778 OFRIR-IP-ASNBLOCK-5 [YD-ARIN] 779 OFRIR-IP-ASNBLOCK-6 [YD-ARIN] 780 ARAMIS [PL37-ARIN] 781 OFRIR-IP-ASNBLOCK-7 [YD-ARIN] 782 OFRIR-IP-ASNBLOCK-8 [YD-ARIN] 783 OFRIR-IP-ASNBLOCK-9 [YD-ARIN] 784 HJFNET-AS [JD734-ARIN] 785 ASN-ETLASN-AS [LV524-ARIN] 786 JANET [DR222-ARIN] 787 CRCASN-AS [BS222-ARIN] 788 SUBMEPP-ASN [ACD4-ARIN] 789 IN2P3-LYON-AS [GF94-ARIN] 790 FUUG-NET-AS-AS [PO41-ARIN] 791 DWS-ASN [RPD2-ARIN] 792-794 ORACLE-ASNBLOCK-ASN [JKD7-ARIN] 795-797 AMERITECH-AS [JN409-ARIN] 798 BERLIN-ASN-AS [JSD19-ARIN] 799 HDLBRG-ASN-AS [AH130-ARIN] 800 CABLEATLANTIC [DA3001-ORG-ARIN] 801 MFRC1-AS [RAF2-ARIN] 802 YORKU-AS [NOH1-ARIN] 803 SASKTEL [SP776-ARIN] 804 ISTS-AS-AS [MR244-ARIN] 805 CANET1-ASN [CA-NOC-ARIN] 806 ALCIDE-AS [JG266-ARIN] 807 CANET1-ASN-2 [CA-NOC-ARIN] 808 CANET1-ASN-3 [CA-NOC-ARIN] 809 CANET1-ASN-4 [CA-NOC-ARIN] 810 SSCWEST [SC95-ARIN] 811 SSCEAST [SC95-ARIN] 812 ROGERS-AS [AD30-ARIN] 813 UUNET-AS1 [UC24-ORG-ARIN] 814 UUNET-AS2 [UC24-ORG-ARIN] 815 UUNET-AS3 [UC24-ORG-ARIN] 816 UUNET-AS4 [UC24-ORG-ARIN] 817 UUNET-AS5 [UC24-ORG-ARIN] 818 DOC-AS [WFM-ARIN] 819 LARG-NET [JL109-ARIN] 820 ISTC-AS [LB40-ARIN] 821 DISC [AH52-ARIN] 822 STJOSEPHS-AS [DW87-ARIN] 823 UWO-AS [BE26-ARIN] 824 GLAXOCA-AS [DH79-ARIN] 825 CFWS-NET [VD5-ARIN] 826 CRTC-GC-AS [FR15-ARIN] 827 ALCAN-AS [SDA3-ARIN] 828 NLC-BNC-GC-AS [YL17-ARIN] 829 SYGMA-INT-OR [CC52-ARIN] 830 SYGMA-INT-QR [CC52-ARIN] 831 SYGMA-EXT-OR [CC52-ARIN] 832 SYGMA-EXT-QR [CC52-ARIN] 833 CANET1-ASN-5 [CA-NOC-ARIN] 834 ATTCLDS-MIS [RA262-ARIN] 835 CANET1-ASN-6 [CA-NOC-ARIN] 836 CANET1-ASN-7 [CA-NOC-ARIN] 837 RCMP [RA475-ARIN] 838-842 CANET2-ASN [CA-NOC-ARIN] 843 REPTILIAN-ASN [JM7718-ARIN] 844 CANET3-ASN [CA-NOC-ARIN] 845 CANET3-ASN-2 [CA-NOC-ARIN] 846 CANET3-ASN-3 [CA-NOC-ARIN] 847 CANET3-ASN-4 [CA-NOC-ARIN] 848 CANET3-ASN-5 [CA-NOC-ARIN] 849 CANET3-ASN-6 [CA-NOC-ARIN] 850 CANET3-ASN-7 [CA-NOC-ARIN] 851 RISQ-QIX [SC166-ORG-ARIN] 852 ASN852 [FTS1-ARIN] 853 CANET-ASN-2 [CA-NOC-ARIN] 854 CANET-ASN-3 [CA-NOC-ARIN] 855 CANET-ASN-4 [CA-NOC-ARIN] 856 NBIX4 [PJ90-ARIN] 857-1100 CANET-ASN [CA-NOC-ARIN] 1101-1200 SURFNET-AS [EJB-ARIN] 1201 ASN-ODU-AS-AS [SF16-ARIN] 1202 JSC-JIN-AS [JC108-ARIN] 1203 ITALTEL-AS [AF88-ARIN] 1204 SUNYNET-ASN-AS [TP91-ARIN] 1205 JKU-LAN-ASN-AS [GS268-ARIN] 1206 PSCNET-HS-AS [PN-ORG-ARIN] 1207 PSCNET-HS-TEST-AS [PN-ORG-ARIN] 1208 ONREUR-ASN [BJR14-ARIN] 1209 SOSGNET-ASN [RA178-ARIN] 1210 ASN-NET-AS [RP210-ARIN] 1211 TOBY-GW1-AS [RS260-ARIN] 1212 WILDFLCKN-GW1-AS [CS293-ARIN] 1215 ORACLE-NA-AS [JKD7-ARIN] 1216 ORACLE-EUROPE-AS [JKD7-ARIN] 1217 ORACLE-PACRIM-AS [JKD7-ARIN] 1218 NCUBE-BELMONT-AS [JKD7-ARIN] 1219 NCUBE-OREGON-AS [JKD7-ARIN] 1220 INFOASN-AS [AR2-ORG-ARIN] 1222 EPCC-AS [DH421-ARIN] 1223 DSI-WR-17 [RPD2-ARIN] 1224 NCSA-AS [ND63-ORG-ARIN] 1225 VRIO1225 [VIA4-ORG-ARIN] 1226 TEALE-AS [MC601-ARIN] 1227 SDSC-TEST1-AS [TH60-ARIN] 1228-1232 UNINET-ASNBLOCK [ML70-ARIN] 1233 NASDA-ASN [JO129-ARIN] 1234 IVOWAN-AS [TT69-ARIN] 1235 CICB-AS-AS [CC337-ARIN] 1236 GTEGSC [NM47-ARIN] 1237 KREONET [PH211-ARIN] 1238 ICM-MALAYSIA [SPRINT-NOC-ARIN] 1239 SprintLink [SPRINT-NOC-ARIN] 1240 ICM-Pacific [RC471-ARIN] 1241 GR-AUTO-AS [SS241-ARIN] 1242 PLH-AS [DD63-ARIN] 1243 APG-GW1-AS [LC130-ARIN] 1244 AMOCO-AS [JM1486-ARIN] 1245 DET4LAN-AS [DSG4-ARIN] 1246 GENUITY-AS1246 [CS15-ARIN] 1247 AFTERLIFE-GW-AS [CAW21-ARIN] 1248 NOKIA-AS [KM165-ARIN] 1249 FIVE-COLLEGES-AS [PG138-ARIN] 1250 SINGAPORE-AS [CL134-ARIN] 1251 ANBR-AS [ACG8-ARIN] 1252 UNMC-AS [MRN6-ARIN] 1253 VEROAUTOSYS-AS [TH202-ARIN] 1254 NASA-LARC-AS [NC3-ORG-ARIN] 1255 SMITHCOLLEGE-AS [DL395-ARIN] 1256 MASSNET-AS [KCD-ARIN] 1257 SWIPNET-AS [LMJ4-ARIN] 1258 XKL-NET-AS [LB3-ARIN] 1259 CAC-GW2-AS [AS97-ARIN] 1260 PLE [HCV1-ARIN] 1261 NATINST-AS-AS [CO105-ARIN] 1262 NSN-NCAR-AS-AS [JB525-ARIN] 1263 NSN-NCAR-AS-AS [JB525-ARIN] 1264 USACESPK-AS [JP220-ARIN] 1265 SAINT-MARYS-AS [JLC32-ARIN] 1266 NAVPGSCOL-AS [DN2-ARIN] 1267 IUNET-AS [IT2-ORG-ARIN] 1268 IUNET1-AS [IT2-ORG-ARIN] 1269 IUNET2-AS [IT2-ORG-ARIN] 1270-1275 CW-ECRC [EN125-ARIN] 1276 DSI-WR-18 [RPD2-ARIN] 1278 UNIONCARBIDE-AS [HJT-ARIN] 1279 MCDOUGLAS-AS [DW386-ARIN] 1280 CIX-AS1 [MF19-ARIN] 1281 CIX-AS2 [MF19-ARIN] 1282 CIX-AS3 [MF19-ARIN] 1283 CIX-AS4 [MF19-ARIN] 1284 CIX-AS5 [MF19-ARIN] 1285 CMC-AS [LP8-ARIN] 1290 UKNET-AS1290 [JS9839-ARIN] 1291 NAVSWC-WOASN-AS [RK93-ARIN] 1292 ITESM-AS [AS3919-ARIN] 1293 GM-EDS-AS [EH2-ORG-ARIN] 1294 PS-NETPLEX-AS [GL8-ARIN] 1295 GE-AEROSPACE-AS [JEB50-ARIN] 1296 CHILI-AS-AS [VU-ARIN] 1297 CERN1-AS [TB-ARIN] 1298 SEA06-NET-AS [MH-ARIN] 1299 TCN-AS [AH96-ARIN] 1300-1309 FRANCE-ASNBLOCK-AS [YD-ARIN] 1310 CACI-FED [EM29-ARIN] 1311 BARRA-NET-AS [RCB3-ARIN] 1312 VA-TECH-AS [PB123-ARIN] 1313 ADOBE1-AS-AS [AIS-ARIN] 1314 NWSCHS-AS [JLP8-ARIN] 1315 GENUITY-AS1315 [CS15-ARIN] 1316 LERC-AS-AS [ZN14-ARIN] 1317 BUMED-SDIEGO-AS [JS564-ARIN] 1318 ICRFNET-AS [JH210-ARIN] 1319 BUMED-CPEND-AS [JS564-ARIN] 1320 BUMED-LBEACH-AS [JS564-ARIN] 1321-1340 ANSBB-ASNNET-1 [ANS-NOC-ARIN] 1341 AB-AS [WK60-ARIN] 1342 NOKIA-DATA-AS [LBJ1-ARIN] 1343 CISCO-SHONET-AS-AS [KAH13-ARIN] 1344 BUMED-ORLANDO-AS [JS564-ARIN] 1345 BUMED-JAX-AS [JS564-ARIN] 1346 BUMED-PENSA-AS [JS564-ARIN] 1347 MRNET-AS [DB97-ARIN] 1348 CA-DOTNET-AS [SJ90-ARIN] 1349 QUOTRON-AS-AS [CG203-ARIN] 1350 SEARSNET-AS [RB16-ARIN] 1351 UVM-EDU-AS [TR156-ARIN] 1352 SISSA-AS1-AS [RI21-ARIN] 1353 SISSA-AS2-AS [RI21-ARIN] 1354 NEXT-ASN-AS [DG1895-ARIN] 1355 GENUITY-AS1355 [CS15-ARIN] 1356 GENUITY-AS1356 [CS15-ARIN] 1357 ORYX-ENERGY-AS [TJO7-ARIN] 1358 HNSNET-AS [GC237-ARIN] 1361 BUMEDMILLTON-AS [JS564-ARIN] 1362 BUMEDLEMOORE-AS [JS564-ARIN] 1363 BUMEDLEJEUNE-AS [JS564-ARIN] 1364 BUMEDGROTON-AS [JS564-ARIN] 1365 BUMEDGLAKES-AS [JS564-ARIN] 1366 BUMEDCORPUS-AS [JS564-ARIN] 1367 BUMEDCHERRYP-AS [JS564-ARIN] 1368 BUMEDCHARLES-AS [JS564-ARIN] 1369 BUMEDBEAUFORT-AS [JS564-ARIN] 1370 BUMEDNEWPORT-AS [JS564-ARIN] 1371 BUMEDRROADS-AS [JS564-ARIN] 1372 BUMEDBREMTON-AS [JS564-ARIN] 1373 BUMEDSEATTLE-AS [JS564-ARIN] 1374 BUMEDNHPORTS-AS [JS564-ARIN] 1375 BUMEDPHIL-AS [JS564-ARIN] 1376 BUMEDOAKHARB-AS [JS564-ARIN] 1377 BUMEDOAKLAND-AS [JS564-ARIN] 1381-1395 ANSBB-ASNNET-2 [IH4-ARIN] 1450 NCCS-STI-GW [LC1-ARIN] 1485 TACOM-AS-ASN [MIL-HSTMST-ARIN] 1528 STRICOM-NET1 [JMG67-ARIN] 1653 SUNET [] 1654 SWEDEN [] 1655 SPAWAR-GW-AS [DPB10-ARIN] 1656 PAGENET [DH81-ARIN] 1657 LOUISVILLE [HF27-ARIN] 1658 NMI-NET [AM196-ARIN] 1659 TANET-ASN1 [WSC1-ARIN] 1660 ANS-CORP-NY [ANS-NOC-ARIN] 1661 ANS-ATLANTA [ANS-NOC-ARIN] 1662 ANS-1662-AS [ANS-NOC-ARIN] 1663 BERTELSMANN [ANS-NOC-ARIN] 1664 AOL-CORP [ANO3-ORG-ARIN] 1665 ANS-NY [ANS-NOC-ARIN] 1666 ANS-DC [ANS-NOC-ARIN] 1667 ANS-DC2 [ANS-NOC-ARIN] 1668 AOL-PRIMEHOST [AOL-NOC-ARIN] 1669 ANS-BB2 [ANS-NOC-ARIN] 1670 ANS-UK [ANS-NOC-ARIN] 1671 ANS-1671-AS [ANS-NOC-ARIN] 1672 ANS-CHICAGO [ANS-NOC-ARIN] 1673 ANS-BB [ANS-NOC-ARIN] 1674 ANS-SANFRAN [ANS-NOC-ARIN] 1675 ANS-NY2-AS [ANS-NOC-ARIN] 1676 TRANE [DN136-ARIN] 1677 ANS-NY3-AS [ANS-NOC-ARIN] 1678 DOW [MS336-ARIN] 1679 RMTECH [BF1147-ARIN] 1680 NETVISION [GW10-ORG-ARIN] 1681 ANS-CORP-MI [ANS-NOC-ARIN] 1682 AOL-1682-AS [AOL-NOC-ARIN] 1683 ANS-NY4-AS [ANS-NOC-ARIN] 1684 ANS-1684-AS [ANS-NOC-ARIN] 1685 ANS-JAPAN [ANS-NOC-ARIN] 1686 ANS-1686-AS [ANS-NOC-ARIN] 1687 ANS-1687-AS [ANS-NOC-ARIN] 1688 ANS-AT-PACBELL-NAP [ANS-NOC-ARIN] 1689 ANS-1689-AS [ANS-NOC-ARIN] 1690 BOCES [WS26-ARIN] 1691 TELUS [TR321-ARIN] 1692 ANS-1692-AS [ANS-NOC-ARIN] 1693 ANS-1693-AS [ANS-NOC-ARIN] 1694 ANS-SANFRAN2-AS [ANS-NOC-ARIN] 1695 ANS-1695-AS [ANS-NOC-ARIN] 1696 SMITH-BARNEY [RF134-ARIN] 1697 ANS-1697-AS [ANS-NOC-ARIN] 1698 PRODIGY [LWV2-ARIN] 1699 ANS-1699-AS [ANS-NOC-ARIN] 1700 SESQUI-3 [SESQ-ARIN] 1701 EOSDIS-V0 [ZN13-ARIN] 1703 MIX [TP63-ARIN] 1704 KAIST-NET [WC1374-ARIN] 1705 GM-INDY-NET [EH2-ORG-ARIN] 1706 UNIV-ARIZ [TF30-ARIN] 1707 RENATER-ASNBLOCKA [AR41-ARIN] 1727 MRMS-WEST [FEB3-ARIN] 1728 SRI-TPA-GW1 [LJ69-ARIN] 1729 TIPNET1 [AH196-ARIN] 1731 THIOKOL [WW148-ARIN] 1732 MIKROK-AS [VP26-ARIN] 1733 CENTAF-SWA [MSP13-ARIN] 1734 ROP-COCA-AS01 [OD19-ARIN] 1735 FISHER-AS [NG63-ARIN] 1736 MU-AS [SG68-ARIN] 1737 RAYTHEON-AS-1 [ZR46-ARIN] 1738 OKOBANK-AS [KK160-ARIN] 1739 TAMNET [EA12-ARIN] 1740 CERFNET [PM200-ARIN] 1741 FUNET [MS12-ARIN] 1742 HARVARD-UNIV [LD238-ARIN] 1743 MCI-SF-AS [JG2573-ARIN] 1744 LOCKHEED [KS216-ARIN] 1745 CRT-AS [MAH75-ARIN] 1746 DRANET-AS [DRA7-ORG-ARIN] 1747 IBMWATSON-AS [NRT1-ARIN] 1748 FINNAIR-AS [ML446-ARIN] 1749 NASA-GSFC-AS [JPG18-ARIN] 1750 GURU [DA31-ARIN] 1751 LEXMARK-AS [VO4-ARIN] 1752 BT-MH [AFP-ARIN] 1753 OBT-ESCOM [DGD11-ARIN] 1754 DESY-HAMBURG [ME57-ARIN] 1755 EBONE-INTERNAL [] 1756 EBONE-EXTERNAL [] 1757 LEXIS-AS [JM19-ARIN] 1758 AFMPCGW1-AS [RAN13-ARIN] 1759 SONERA-2 [ZS175-ARIN] 1760 INTELNET [NT48-ARIN] 1761 TGSCNET [BB122-ARIN] 1762 DMIS-VAX [MAS70-ARIN] 1763 ITTHARTFORD [BM67-ARIN] 1764 EUNET-CH-AS1 [SP164-ARIN] 1765 PM-NAWC [AR38-ARIN] 1766 MOBIL-CORP [JCP26-ARIN] 1767 IHETSDATANET [SS2034-ARIN] 1768 SEEDNET-ASN1 [MCF16-ARIN] 1769 IIINET-ASN1 [MCF16-ARIN] 1770 NORTELE-A [HV6-ARIN] 1771 NORTELE-T [HV6-ARIN] 1772 SENTRY [RY41-ARIN] 1774 HEANET-IE [MN36-ARIN] 1775 FMCC-1 [FD-ORG-ARIN] 1776 ASN-WU-WIEN [GM62-ARIN] 1778 DMSSC-GATEWAY [AB61-ARIN] 1779 PSTAR-AS [AW180-ARIN] 1780 VALNET [PN13-ARIN] 1781 KAIST-NET1 [SC435-ARIN] 1784 GNAPS [BFB-ARIN] 1785 APPLIED [NDA5-ARIN] 1786 AIXSERV-AS [JP631-ARIN] 1787 EJV-ALPHA [GJW12-ARIN] 1788 SONAMNET [SR205-ARIN] 1789 SPRINTLINK1 [SPRINT-NOC-ARIN] 1790 SPRINTLINK2 [SPRINT-NOC-ARIN] 1791 SPRINTLINK3 [SPRINT-NOC-ARIN] 1792 SPRINTLINK4 [SPRINT-NOC-ARIN] 1793 SPRINTLINK5 [SPRINT-NOC-ARIN] 1794 SPRINTLINK6 [SPRINT-NOC-ARIN] 1795 SPRINTLINK7 [SPRINT-NOC-ARIN] 1797 AS1797 [IH24-ARIN] 1798 AS1798 [FH208-ARIN] 1799 ICMNET-1 [SPRINT-NOC-ARIN] 1800 ICM-Atlantic [SPRINT-NOC-ARIN] 1801 ICMNET-3 [SPRINT-NOC-ARIN] 1802 ICMNET-4 [SPRINT-NOC-ARIN] 1803 ICMNET-5 [SPRINT-NOC-ARIN] 1804 ICMNET-6 [SPRINT-NOC-ARIN] 1805 ICMNET-7 [SPRINT-NOC-ARIN] 1806 ICMNET-8 [SPRINT-NOC-ARIN] 1807 ICMNET-9 [SPRINT-NOC-ARIN] 1808 ICMNET-10 [SPRINT-NOC-ARIN] 1809-1828 GENUITY-AS1809-1828 [CS15-ARIN] 1829 NOTES [PCW-ARIN] 1830 IACNET2 [CH4-ARIN] 1831 ITESO-GWY [HG17-ARIN] 1832 SMU [RBM17-ARIN] 1833 TELIANET [RH1308-ARIN] 1834 NCTAMS-ETHER [DWC10-ARIN] 1835 DENET [EL16-ARIN] 1836 EUNET-CH-AS2 [SP164-ARIN] 1837 NC3A [AV900-ARIN] 1838 CERFNET-2 [PM200-ARIN] 1839 DNA-SCN [RM56-ARIN] 1840 UDLAP-NET [CA81-ARIN] 1841 NETCS-AS1 [SK120-ARIN] 1842 USGS-AS [JRF-ARIN] 1843-1848 NASA-KSC-AS [JB234-ARIN] 1849 PIPEX-AS [TB118-ARIN] 1850 SURIS [HJ18-ARIN] 1851 ADELAIDE-UNI [PLN2-ARIN] 1852 UCDLA-AS [UD14-ORG-ARIN] 1853 AT-BONE [WK42-ARIN] 1854 KTT [ET35-ARIN] 1855 DISN-PILOTNET1 [JHW19-ARIN] 1856 DISN-PILOTNET2 [JHW19-ARIN] 1857 DISN-PILOTNET3 [JHW19-ARIN] 1858 DISN-PILOTNET4 [JHW19-ARIN] 1859 DISN-PILOTNET5 [JHW19-ARIN] 1860 DISN-PILOTNET6 [JHW19-ARIN] 1861 DISN-PILOTNET7 [JHW19-ARIN] 1862 DISN-PILOTNET8 [JHW19-ARIN] 1863 DISN-PILOTNET9 [JHW19-ARIN] 1864 DISN-PILOTNET10 [JHW19-ARIN] 1865 DISN-PILOTNET11 [JHW19-ARIN] 1866 DISN-PILOTNET12 [JHW19-ARIN] 1867 DISN-PILOTNET13 [JHW19-ARIN] 1868 DISN-PILOTNET14 [JHW19-ARIN] 1869 DISN-PILOTNET15 [JHW19-ARIN] 1870 3COM-EUR [ZG18-ARIN] 1871 3COM-USA [ZG18-ARIN] 1872 3COM-HDQ [ZG18-ARIN] 1873 DMSSCA-AS [BWR2-ARIN] 1874 DMSSCH-AS [BWR2-ARIN] 1875 CIS [RBM17-ARIN] 1876 SEAS [RBM17-ARIN] 1877-1901 ASNBLK-RIPE [RIPE-NCC-ARIN] 1889 AS1889 [KB57-ARIN] 1893 DKRZ-HAMBURG [GH39-ARIN] 1895 ERLANGEN-VFR [JK198-ARIN] 1902 FESNET-L [JG116-ARIN] 1903 CHEMNET-FES [CC317-ARIN] 1904 JITC-TESTBED [KL759-ARIN] 1905 DRC [DMS7-ARIN] 1906 INRI-AS [DA192-ARIN] 1907 IPSERV-AS [GM278-ARIN] 1908 NAWC-AD-INDY [JRH16-ARIN] 1909 ALPHA-NAP-AS [HWB-ARIN] 1910 DLA1 [FB31-ARIN] 1911 DLA2 [FB31-ARIN] 1912 DLA3 [FB31-ARIN] 1913 DLA4 [FB31-ARIN] 1914 DLA5 [FB31-ARIN] 1915 SEQUOIA-AS [KRF1-ARIN] 1916 RNP-AS [DG36-ARIN] 1917 CTCSERV-AS [JL120-ARIN] 1918 CNAP-INTRANET [RWS10-ARIN] 1919 UMASS-AMHERST1 [DLB2-ARIN] 1920 QUOTRON-WAN [DN30-ARIN] 1921 UDNVIE [JD238-ARIN] 1922 UAKOM-DAMIS [LE2-ARIN] 1923 TAYS [LL205-ARIN] 1924 DAFFY [CB355-ARIN] 1925 DISA-EUROPE [BMW13-ARIN] 1926 UTANET-AS [TK51-ARIN] 1927 NADC-LAN-AS [RMF4-ARIN] 1928 WRNL-PDVS [SS163-ARIN] 1929 UMASSNET-NET [DLB2-ARIN] 1930 RCCNET [JF1291-ARIN] 1931 GM-EDS-EURO [EH2-ORG-ARIN] 1932 CONED [JL4612-ARIN] 1933 NAVAIRHQ [JG255-ARIN] 1934 ANS-RESTON-AS [GA44-ARIN] 1935-1954 RENATER-ASNBLOCK [AR41-ARIN] 1955 HBONE [LK93-ARIN] 1956 IBMEVS-AS [DG811-ARIN] 1957 ANSCIX-AS [JM1337-ARIN] 1958 NCRWIN1958 [TH31-ARIN] 1959 DMSLABNET [WS76-ARIN] 1960 MARS-EUROPE [GL62-ARIN] 1961 MARS-AMERICAS [GL62-ARIN] 1962 MARS-ASIA-PACIFIC [GL62-ARIN] 1963 PENRIL-AS [KH78-ARIN] 1964 MCI-NETCS [IW41-ARIN] 1965 TUELECTRIC [DM224-ARIN] 1966 MASSO-GW [CN9-ARIN] 1967 TR-NET [AO14-ARIN] 1968 UMASSP-DOM [MF5-ARIN] 1969 TELEDYNE-AS [SK126-ARIN] 1970 TAMUS-NET [NG16-ORG-ARIN] 1971 GITN-JITC [DMG21-ARIN] 1972 HPC-NET [SW2975-ARIN] 1973 PHNSY-POEGW [VR30-ARIN] 1974 GSI-DISNNT [RG315-ARIN] 1975 UMI-AS [BH88-ARIN] 1976 BUMEDPORTSNH [RJW26-ARIN] 1977 BUMED29PALMS [RJW26-ARIN] 1978 BUMEDLONDON [RJW26-ARIN] 1979 BUMEDKINGSBY [RJW26-ARIN] 1980 BUMEDKEFLAVK [RJW26-ARIN] 1981 BUMEDADAK [RJW26-ARIN] 1982 ASN-NWNEXUS [DA2237-ORG-ARIN] 1983 BERNALILLO [AC1054-ARIN] 1984 BUMEDSIGONEL [RJW26-ARIN] 1985 BUMEDYOKOSUKA [RJW26-ARIN] 1986 BUMEDROTA [RJW26-ARIN] 1987 BUMEDPHARBOR [RJW26-ARIN] 1988 BUMEDPAXRVER [RJW26-ARIN] 1989 BUMEDOKINAWA [RJW26-ARIN] 1990 BUMEDORLEANS [RJW26-ARIN] 1991 BUMEDNAPLES [RJW26-ARIN] 1992 BUMEDKEYWEST [RJW26-ARIN] 1993 BUMEDHUENEME [RJW26-ARIN] 1994 BUMEDGBAY [RJW26-ARIN] 1995 BUMEDGUAM [RJW26-ARIN] 1997 IBMDES-AS [BHV-ARIN] 1998 STATE-OF-MN [KV30-ARIN] 1999 HOUSE-AS-1 [JA1117-ARIN] 2002 IBM-PV-AS [DM353-ARIN] 2003 EPRI-PA [DA159-ARIN] 2004 TNO-HDO [FV12-ARIN] 2005 INFONET1 [AR2-ORG-ARIN] 2006 INFONET2 [AR2-ORG-ARIN] 2007 INFONET3 [AR2-ORG-ARIN] 2008 INFONET4 [AR2-ORG-ARIN] 2009 INFONET5 [AR2-ORG-ARIN] 2010 INFONET6 [AR2-ORG-ARIN] 2011 WACHOVIA [DWS30-ARIN] 2012 UNINET1 [LD119-ARIN] 2013 PACIFIC-GAS [ZP73-ARIN] 2014 SPRINT-INTL [ZK22-ARIN] 2015 MSEN-SYSTEM [MNO5-ARIN] 2016 OTANET [JT186-ARIN] 2017 KRPNET [SP157-ARIN] 2018 TERTIARY-1 [DM1581-ARIN] 2019 MORGAN-AS [DL954-ARIN] 2020 HWWILSON-AS [MW177-ARIN] 2021 UNISYS-INT [JS1325-ARIN] 2022 SIEMENS-AS [DL113-ARIN] 2023 RUTYC [MM304-ARIN] 2024 NU [RN69-ARIN] 2025 UTOLEDO [WTD4-ARIN] 2026 HELSINKI [JS797-ARIN] 2028 NORTEL-HARLOW [HN30-ORG-ARIN] 2029 GGR-AS [IP-FIX-ARIN] 2030 RDYNE [LHS1-ARIN] 2031 COWACONET [JCD20-ARIN] 2032 CSC-TMD-CC [BMV-ARIN] 2033 Panix [PANIX5-ARIN] 2034 ATK-AS1 [FR20-ARIN] 2035 ATK-AS2 [FR20-ARIN] 2036 JOANNEUM [RB467-ARIN] 2037 CSUFRESNO [GW97-ARIN] 2038 INFN-AS1 [AG113-ARIN] 2039 INFN-AS2 [AG113-ARIN] 2040 INFN-AS3 [AG113-ARIN] 2041 CRL-GATE [CRL-NOC-ARIN] 2042 JARING [MBA-ARIN] 2043 EMPB-AS [JN50-ARIN] 2044 WORLDNET-AS [ADR5-ARIN] 2045 FACILITIES [ITB3-ARIN] 2046 DECCO-AS [LAH37-ARIN] 2048 LANET-1 [JL141-ARIN] 2049 AVL-GRAZ [PK135-ARIN] 2050 SPRINTCORP [RW445-ARIN] 2051 CISCO-EXT [MRK4-ARIN] 2052 RJRNI-NFGI [EDL4-ARIN] 2053 SPRINTCORP1 [RW445-ARIN] 2054 PAC-DISA [WD39-ARIN] 2055 LSU-1 [MF106-ARIN] 2056 AOL-AS [AOL-NOC-ARIN] 2057-2106 RENATER_ASNBLOCK1 [AR41-ARIN] 2107-2136 RIPE-ASNBLOCK2 [RIPE-NCC-ARIN] 2137 DISA-PAC [WD39-ARIN] 2138 DOW2-AS [MS336-ARIN] 2139 DOW1-AS [MS336-ARIN] 2140 ISSC-AS [MG28-ARIN] 2141 BUMEDQUANTIC [JS564-ARIN] 2142 NSI-FFIX-E [JB525-ARIN] 2143 NSN-FFIX-W [JB525-ARIN] 2144 ETAFE [DB447-ARIN] 2145 ALERON-AS [MG3042-ARIN] 2146 CRNET [GFD3-ARIN] 2147 COMPNEWS-AS [PM244-ARIN] 2148 ITEP-MOSCOW [AB293-ARIN] 2149 PSINET-2 [PSI-NISC-ARIN] 2150 CSUNET-SW [MM313-ARIN] 2151 CSUNET-SE [MM313-ARIN] 2152 CSUNET-NW [MM313-ARIN] 2153 CSUNET-NE [MM313-ARIN] 2154-2173 EDS [EH2-ORG-ARIN] 2174-2273 FR-ASNBLOCK [AR41-ARIN] 2274 CBO [SN34-ARIN] 2275 EUR-DISA [MA96-ARIN] 2276 OCS-AS1 [KH556-ARIN] 2277 ECUANET [XMB-ARIN] 2278-2377 FRANCE-TELECOM-AS [RB468-ARIN] 2378 DOI-BIA [JH653-ARIN] 2379 UNIT-TEL-FLA [JAG5-ARIN] 2380 ESTNET [AW131-ARIN] 2381 WISCNET1-AS [WN29-ORG-ARIN] 2382 WISCNET2-AS [WN29-ORG-ARIN] 2383 OTA [SB304-ARIN] 2384 AOCNET [RMB30-ARIN] 2385 STARNET [SJ135-ARIN] 2386 INS-AS [JB3310-ARIN] 2387-2486 FR-ASNBLOCK2 [AR41-ARIN] 2487 MOSCOW-HEP [AB293-ARIN] 2488 IIASA-NET [JC63-ARIN] 2489 NETIOWA-AS [CC376-ARIN] 2490 MILNET-T20 [JHW19-ARIN] 2491 SPRNT-CA-AS-3 [NOC71-ORG-ARIN] 2492 SPRNT-CA-AS-2 [NOC71-ORG-ARIN] 2493 SPRNT-CA-AS-1 [NOC71-ORG-ARIN] 2494 AKHNET [GG145-ARIN] 2495 KANREN [JN102-ARIN] 2496 UKANS [JN102-ARIN] 2497-2528 APNIC-AS-X-BLOCK [SA90-ARIN] 2529 DEMON-SYS [DEMON-HM-ARIN] 2530 CIBA-AS [JS748-ARIN] 2531 EUCOM-GW [HRF6-ARIN] 2532 LOC [JM727-ARIN] 2533 HOU-METRO-AS [KM239-ARIN] 2534 SYNTEX [BP155-ARIN] 2535 BP [CFS2-ARIN] 2536 TCADA [MC477-ARIN] 2537 STATS-GOVTNZ [BB228-ARIN] 2538 IBM-KINGS-AS [NV20-ARIN] 2539 SMITHKLINE-AS [RK495-ARIN] 2540 INGRES-AS [LT114-ARIN] 2541 WM-NET [] 2542 VOUGHT [DM160-ARIN] 2543 UCIMC-AS [DW96-ARIN] 2544 METRO-AS [PA55-ARIN] 2545 STRATHOST [AWB-ARIN] 2546 ARIADNE [DS640-ARIN] 2547 BMENET-AS [LF109-ARIN] 2548 ICIX-MD-AS [ZI44-ARIN] 2549 REDUDG [JSF21-ARIN] 2550 STRATS [AWB-ARIN] 2551 ICG [ST452-ARIN] 2552 WUSTL-ASN [JR756-ARIN] 2553 FSU-AS [LG36-ARIN] 2554 INTER-GRP-A [PJ-ORG-ARIN] 2555 INTER-GRP-B [AW90-ARIN] 2556 INTER-GRP-C [AW90-ARIN] 2557 INTER-GRP-D [AW90-ARIN] 2558 CIWMBNET [TRM-ARIN] 2559 VISANET [TVP3-ARIN] 2560 BOCA-AS [NH-ARIN] 2561 FRCU-EUN [AG233-ARIN] 2562 TI-US/INTL [DG1-ARIN] 2563 KREN-GATEWAY [CB5-ARIN] 2564 GLO [DL284-ARIN] 2565 TX-REHAB [RS324-ARIN] 2566 ISINM [BM2-ARIN] 2567 WAII-AS [RKW-ARIN] 2568 CTSNET [TB1091-ARIN] 2569 NETWAY-0 [JL4614-ARIN] 2570 NETWAY-1 [JL4614-ARIN] 2571 DHLNET [SK314-ARIN] 2572 MORENET [DR261-ORG-ARIN] 2573 QED-SYS [WD25-ARIN] 2574 TRS [LMF3-ARIN] 2575 SRPNET [TW163-ARIN] 2576 DOT-AS [GC5-ARIN] 2577 AFIP-OSD [PL7-ARIN] 2578 RELCOM-DEMOS [PA75-ARIN] 2579 NEWBRIDGE-AS [DG230-ARIN] 2580 ASSEMBLY [RH11-ARIN] 2581 GAO [NDG2-ARIN] 2582 CDE [WH5-ARIN] 2583 CDI [PH10-ARIN] 2584 CUMMINS [MG10-ARIN] 2585-2614 ASNBLK-RIPE-NCC [RIPE-NCC-ARIN] 2615 BECHTEL [SD5-ARIN] 2616-2620 NAVNET-BLOCK2 [SCG-ARIN] 2621 STDN4-AS1 [KJ5-ARIN] 2622 STDN4-AS2 [KJ5-ARIN] 2623 JWICS [BKA-ARIN] 2624 TECNET-EXP [GH14-ARIN] 2625 DSIBBN [EDS3-ARIN] 2626 STDN4-AS3 [KJ5-ARIN] 2627 STDN4-AS4 [KJ5-ARIN] 2628 STDN4-AS5 [KJ5-ARIN] 2629 DMSSCE [KH13-ARIN] 2630 NUWCDETHINET [MM54-ARIN] 2631 DISCOVERY-AS [GM1997-ARIN] 2632 NCTSLNDN-AS [TAT10-ARIN] 2633 NAS1-AS [SW4-ARIN] 2634 CENTEL-VA [RA213-ARIN] 2635 CENTEL-NV [RA213-ARIN] 2636 NCR-FT-COL [HSJ1-ARIN] 2637 GEORGIA-TECH [RH129-ARIN] 2638 RAIN [YM14-ARIN] 2639 CENTEL [RA213-ARIN] 2640 AMESLAB-AS [DS7820-ARIN] 2641 TSRI-AS [NS72-ORG-ARIN] 2642 LEG-CA-GOV [NG3-ARIN] 2643 SU-IHEP [LY22-ARIN] 2644 SMARTS-AS [YR5-ARIN] 2645 ASN-CAVENET [JL424-ARIN] 2646 CONEXANT [IC41-ARIN] 2647 SITA [SITA-NOC-ARIN] 2648 NIST-BOULDER [MT110-ARIN] 2649 NAS2-AS [PSI-NISC-ARIN] 2650 EOP_GATEKEEPER [JSF-ARIN] 2651-2682 CDAGOVN [TR43-ARIN] 2683 RADIO-MSU [SS3568-ARIN] 2684 NET-ASSEMBLY-CA-GOV [RH11-ARIN] 2685-2694 IBM-MMD-AS [PS4071-ARIN] 2695 RJRT01-TOB1 [KEF-ARIN] 2696 IREN-AS [KE3-ARIN] 2697 ERNET-AS [SR7-ARIN] 2698 IASTATE-AS [RD108-ARIN] 2699 BBN-DSI1 [RPD2-ARIN] 2700 CLARIS-CORP [WS18-ARIN] 2701 KSU-NET [TR558-ARIN] 2702 INTERSERVE [TO204-ARIN] 2703 NCR-FRMRELAY [HSJ1-ARIN] 2704 HOOKUP-NET-A [HCR2-ORG-ARIN] 2705 CARENET [KD6-ARIN] 2706 HKSUPER [VS7-ARIN] 2707 WEC [JAM79-ARIN] 2708 REDUGTO [GC127-ARIN] 2709 AOS-AS [DPZ-ARIN] 2710 AMSINC-NET [EW7-ARIN] 2711 SUNBELT-AS [TRM3-ARIN] 2712 LGC [JN7-ARIN] 2713 INTERSPIN-AS [HO4-ARIN] 2714 GSA_GOV [RB27-ARIN] 2715 REDERIO-AS [DG36-ARIN] 2716 TCHE-AS [DG36-ARIN] 2717 CUMMINS-AS1 [MG10-ARIN] 2718 APSCN-AR [BF7-ARIN] 2719-2738 GENUITY-AS2719-2738 [CS15-ARIN] 2739 RUTYC-ASN [SL153-ARIN] 2740 ATTCLDS [RA262-ARIN] 2741 DSMC [ABG-ARIN] 2742 TASDAC-LAFB [GWH-ARIN] 2743 AFIWC01 [WC14-ARIN] 2744 DECCO-EUROPE [AF16-ARIN] 2745 NAPC [DW319-ARIN] 2746 DDN-WEATHER [CD10-ARIN] 2747 AF-PROTEUS [JCC3-ARIN] 2748 CASC-NET [DD39-ARIN] 2749 CNET-AS [DH145-ARIN] 2750 CIO [JB158-ARIN] 2751 ATT-PARADYNE [GH17-ARIN] 2752 THOMSONCA-AS [MH12-ARIN] 2753 LARSECOM [MT192-ARIN] 2754 EPNG-AS [WHB26-ARIN] 2755 SJHMC_CHW [AM19-ARIN] 2756 EYNZ-O [DP22-ARIN] 2757 MCI-NETA [IW41-ARIN] 2758 MCI-NETB [IW41-ARIN] 2759 MCI-NETC [IW41-ARIN] 2760 MCI-NETD [IW41-ARIN] 2761 MCI-NETE [IW41-ARIN] 2762 GENUITY-AS2762 [CS15-ARIN] 2763 GENUITY-AS2763 [CS15-ARIN] 2764 CONNECT-NET [CC89-ARIN] 2765 CONNECTED [CON-SUP-ARIN] 2766 GLASNET [AV7-ARIN] 2767 ATTCTSC-3 [ZA95-ARIN] 2768 ATTCLDS-DVPN [RA262-ARIN] 2769 NEBRASKA [WM9-ARIN] 2770 TDHS-WEL-NET [WR126-ARIN] 2771 TRW-HSV [CS3-ARIN] 2772 HKIGS [ZP69-ARIN] 2773-2822 ASN-BLKRIPE2 [RIPE-NCC-ARIN] 2823 BT-AU-1 [PG185-ARIN] 2824 BT-EU-1 [JM44-ARIN] 2825 BT-NA-1 [JM44-ARIN] 2826 GTE-PACIFIC [BTC2-ARIN] 2827 KH-AS [JF212-ARIN] 2828 XO-AS15 [DIA-ORG-ARIN] 2829 I-LINK [BD27-ARIN] 2830-2879 ASN-BLKRIPE3 [RIPE-NCC-ARIN] 2880 NIIT [BD29-ARIN] 2881 RHGC-AS [GT76-ARIN] 2882 RSNG-PACBELL [ZM8-ARIN] 2883 NAP-AADS [ZM8-ARIN] 2884 NAP-THREE [WM110-ARIN] 2885 NAP-MAEEAST [ZM8-ARIN] 2886 EPO-TEST-0 [WM110-ARIN] 2887 RRM-ASN [FD-ORG-ARIN] 2888 MCI-AREA-1 [IW41-ARIN] 2889 MCI-AREA-2 [IW41-ARIN] 2890 MCI-AREA-3 [IW41-ARIN] 2891 MCI-AREA-4 [IW41-ARIN] 2892 MCI-AREA-5 [IW41-ARIN] 2893 CLI-NET [CS29-ARIN] 2894 CALIF-DWR [TS274-ARIN] 2895 FREE-NET-AS [ASM-ARIN] 2897 GEORGIA-1 [DK3992-ARIN] 2898 GEORGIA-2 [DK3992-ARIN] 2899 WN-ID-AS [DRS12-ORG-ARIN] 2900 WN-AZ-AS [SG230-ARIN] 2901 WN-NM-AS [LH100-ARIN] 2902 WN-WY-AS [RM177-ARIN] 2904 RED-UACJ [PJ77-ARIN] 2905 TICSA-ASN [ZZ1966-ARIN] 2906 NCR-CANADA [HSJ1-ARIN] 2907 SINET-AS [SA15-ARIN] 2908 CITI1 [PW16-ARIN] 2909 CITI2 [PW16-ARIN] 2910 CITI3 [PW16-ARIN] 2911 CITI4 [PW16-ARIN] 2912 CITI5 [PW16-ARIN] 2913 CITI6 [PW16-ARIN] 2914 VERIO [VP8-ARIN] 2915 SPIN-NET [HO4-ARIN] 2916 CYBER-AS [LK4-ARIN] 2917 OLEANE [JP44-ARIN] 2918 ERCNET [YSW-ARIN] 2919 DIRECTV [AH52-ARIN] 2920 LACOE [JM72-ARIN] 2921 SAS-SDD [FG10-ARIN] 2922 CRSS [SMJ2-ARIN] 2923 AS-TIAA-NET [HP14-ARIN] 2924 EQUIFAX-NS [BH38-ARIN] 2925 FIS [LD6-ARIN] 2926 DB-2 [CG92-ARIN] 2927 ZONE-NET1 [LC125-ARIN] 2928 COAT [MF173-ARIN] 2929 SUN-RM [TJM58-ARIN] 2930 NASCA-AS [ML31-ARIN] 2931 BIS [MLH16-ARIN] 2932 NEDI-GIS [HB8-ARIN] 2933 REALTIME [BG99-ARIN] 2934 TXASHLTH [MH2744-ARIN] 2935 CDOLNET-GOV [RB49-ARIN] 2936-2937 NERSC [AT80-ARIN] 2938 SPRINT-MRN [MW25-ARIN] 2939 SCAROLINA-AS [RC50-ARIN] 2940 NET-UEN-UTAH [ER10-ARIN] 2941 LINECOAST [MM2691-ARIN] 2942-3041 SPRINT-MRN-BLOCK [MW25-ARIN] 3042 LACHMAN-ASN [MB487-ARIN] 3043 AMPHIB-AS [PE416-ARIN] 3044 SNAP-01 [SESQ-ARIN] 3045 SNAP-02 [SESQ-ARIN] 3046 SNAP-03 [SESQ-ARIN] 3047 SNAP-04 [SESQ-ARIN] 3048 SNAP-05 [SESQ-ARIN] 3049 SNAP-06 [SESQ-ARIN] 3050 SNAP-07 [SESQ-ARIN] 3051 SNAP-08 [SESQ-ARIN] 3052 SNAP-09 [SESQ-ARIN] 3053 SNAP-10 [SESQ-ARIN] 3054 FIRST-FLOOR [DC9-ARIN] 3055 SHL [DO15-ARIN] 3056 AB-ASN [WK59-ARIN] 3057 3COM-BGPTEST [ZG18-ARIN] 3058 EMNET [NR5-ARIN] 3059 IBMCANAS [LR7-ARIN] 3060 SC-YORKTECH [AB39-ARIN] 3061 NCR-AUGSBURG [HSJ1-ARIN] 3062 CBIS-NET [MK49-ARIN] 3063 TIS-BA-NET [JES-ARIN] 3064 CYBER-ASN [CN313-ARIN] 3065 NYCENET-AS [LK293-ARIN] 3066 RS-AS [RES70-ARIN] 3067 DENINF-IPLAN [CO6-ARIN] 3068 DENINF-IVAN [CO6-ARIN] 3069 DSI-WR-1 [RPD2-ARIN] 3070 DSI-WR-2 [RPD2-ARIN] 3071 DSI-WR-3 [RPD2-ARIN] 3072 DSI-WR-4 [RPD2-ARIN] 3073 CITI7 [PW16-ARIN] 3074 CITI8 [PW16-ARIN] 3075 CITI9 [PW16-ARIN] 3076 CITI10 [PW16-ARIN] 3077 CITI11 [PW16-ARIN] 3078 CITI12 [PW16-ARIN] 3079 CITI13 [PW16-ARIN] 3080 CITI14 [PW16-ARIN] 3081 CITI15 [PW16-ARIN] 3082 ADVANTIS [MG305-ARIN] 3083-3109 LINK1 [MS463-ARIN] 3110 HOLONET [KJP5-ARIN] 3111 DIRECT [IND-NOC-ARIN] 3112 OARNET-AS-1 [GS1050-ARIN] 3113 DOC-ESA-ASN [KR2-ARIN] 3114 DOJ-CRT-ASN [CL14-ARIN] 3115 DSMNET [TB31-ARIN] 3116 PPCI [BK23-ARIN] 3117 TXMHMR [SJ70-ARIN] 3118 NCR-UK [LL115-ARIN] 3119 DATAPOINT [DM368-ARIN] 3120-3126 MAGIC-INTRNL [IG78-ARIN] 3127 CAPRICA-AS [JL26-ARIN] 3128 WISC1-AS [NO13-ORG-ARIN] 3129 WISC2-AS [MD40-ARIN] 3130 RG-BIWA [RB366-ARIN] 3131 DIALNET [MC55-ARIN] 3132 RCP-AS [JS117-ARIN] 3133 DHHS-NET-ASN [RMD3-ARIN] 3134 USAID-ASN [KR11-ARIN] 3135 MITC [MMM5-ARIN] 3136 STATE1-AS [MD40-ARIN] 3137 STATE2-AS [MD40-ARIN] 3138 GSA-DDN [LL19-ARIN] 3139 ASEE [SB48-ARIN] 3140 TJHSST-AS [DH981-ARIN] 3141 BUAP-MEX [HO17-ARIN] 3142 DORSAI [JB753-ARIN] 3143 VANET [DB46-ARIN] 3144 PINNACLE [MR48-ARIN] 3145 WESTPUB-AS [DN19-ARIN] 3146 DMSSC [LY3-ARIN] 3147 FIRSTBANK [DD183-ARIN] 3148 WISC-CS [PB22-ARIN] 3149 SOSI-AS [JW58-ARIN] 3150 VRIO-3150 [VIA4-ORG-ARIN] 3151 CEDEL-MRS [IL7-ARIN] 3152 FERMILAB [MK167-ARIN] 3153 FEMANET [DG44-ARIN] 3154-3353 RIPE-ASNBLOCK4 [RIPE-NCC-ARIN] 3354 THENET-AS-1 [DLN12-ARIN] 3355 LITC [JBB2-ARIN] 3356 LEVEL3 [LC-ORG-ARIN] 3357 SEC [HL11-ARIN] 3358 UCIA-AS [DW1276-ARIN] 3359 U-ALBERTA [KW1848-ARIN] 3360 CSC-ASN [RS6100-ARIN] 3362 GROUP-NAMES [CS98-ARIN] 3363 HKUST [LL23-ARIN] 3364 CSDCO-AS [JN24-ARIN] 3365 MCSNET [KD124-ARIN] 3366 A2I-WEST [RD69-ARIN] 3367 RHS-ROP [OD19-ARIN] 3368 CHARMNET [JB2972-ARIN] 3369-3378 MCI-ASN [IW41-ARIN] 3379 KAISER-NCAL [DH247-ARIN] 3380 PPPL-AS1 [PF66-ARIN] 3381 MHPCC-AS [ZM32-ARIN] 3382 JUITA-UINET [HDS5-ARIN] 3383 REDBRICK-HQ [MMT10-ARIN] 3385 EUREKA-BROADBAND-AS [LH3-ORG-ARIN] 3386 USNET-AS [DS34-ARIN] 3387 USIA [CV19-ARIN] 3388 UNM-AS [JS89-ARIN] 3389 FORDSRL-AS [FD-ORG-ARIN] 3390 UMKCNET [UNO5-ARIN] 3391 ASCII-NET [KK44-ARIN] 3392 INFINET [TB756-ARIN] 3394 ELPRESS-AS [DM88-ARIN] 3395 HUMAN-HEALTH [TM48-ARIN] 3396 EGG [TG63-ARIN] 3397 EMI-AS [BT95-ARIN] 3398 SAND-NET [TH60-ARIN] 3399 ITSKR [KAR-ARIN] 3400 POWERDOG [KR87-ARIN] 3401 SEATTLE [DIC1-ARIN] 3402 MAPS-2 [PV15-ARIN] 3403 TIAC [KL1621-ARIN] 3404 COLORADOCOOP [RLE-ARIN] 3405 QNSNET [WLC-ARIN] 3406 UUN [DM22-ARIN] 3407 INTERPATH-NC [INTP-HM-ARIN] 3408-3411 INET-1-AS [II32-ARIN] 3412-3415 LINK2 [MS463-ARIN] 3416 SIPR-NETWORK1 [DO99-ARIN] 3417 SIPR-NETWORK2 [DO99-ARIN] 3418 SIPR-NETWORK3 [DO99-ARIN] 3419 SIPR-NETWORK4 [DO99-ARIN] 3420 AADS-DETROIT [MDS22-ARIN] 3421 AADS-CHICAGO [MDS22-ARIN] 3422 AADS-GRAPIDS [MDS22-ARIN] 3423 AADS-LANSING [MDS22-ARIN] 3424 SATURN [DDH3-ARIN] 3425-3445 ESNET-AS [MC434-ARIN] 3446 KANSAS [AS68-ARIN] 3447 CENTEL-CMDS [DP226-ARIN] 3448 MCCAW-AS [TT186-ARIN] 3449 REDUBA [JD75-ARIN] 3450 UTK [UTK-NAC-ARIN] 3451 DTD-AS [SP42-ARIN] 3452 UAB-AS [JI30-ARIN] 3453 COMMNET [MDB12-ARIN] 3454 UANL [AD54-ARIN] 3455 WAUSAU-INS [AL25-ARIN] 3456 TW-CABLE [JD4-ARIN] 3457 PORTAL-COM [PORTAL-CS-ARIN] 3458 VWNA-AS [AP105-ARIN] 3459 PRIMENET2 [IA12-ORG-ARIN] 3460 HEPCAS-AS [RX-ARIN] 3461 GONZAGA-ASN [MK80-ARIN] 3462 HINET-AS [NW17-ARIN] 3463 ACES-AS [EG76-ARIN] 3464 ASC-NET [BB175-ARIN] 3465 JBHUNT [CH64-ARIN] 3466 ITSDN-ASN1 [JM184-ARIN] 3467 ITSDN-ASN2 [JM184-ARIN] 3468 ITSDN-ASN3 [JM184-ARIN] 3469 ITSDN-ASN4 [JM184-ARIN] 3470 DODEA-ODE [TON2-ARIN] 3471 JCSE01 [JJH3-ARIN] 3472 JCSE02 [JJH3-ARIN] 3473 JCSE03 [JJH3-ARIN] 3474 JCSE04 [JJH3-ARIN] 3475 LANT-AFLOAT [KW41-ARIN] 3476 JIEO-ITSI-BB [RQ12-ARIN] 3477 NOAA-BOULDER [ZN49-ARIN] 3478 IGC-BACKBONE [JH588-ARIN] 3479 PEACHNET-AS1 [JS469-ARIN] 3480 PEACHNET-AS2 [JS469-ARIN] 3481 STOFCTDAS [JM188-ARIN] 3482 MTSTGOV [RH31-ARIN] 3483 RECKITT-MRS [SM108-ARIN] 3484 IPN-MX [JGN-ARIN] 3485 FCMCNET [AD33-ARIN] 3486 JPMORGAN-ASN [DS183-ARIN] 3487 LAGOVEN-ASN [MM126-ARIN] 3488 SPACENETJP [SH63-ARIN] 3489 UNIFYNET [RA448-ARIN] 3490 CDINET [AMH2-ARIN] 3491 CAIS-ASN [CAIS-NOC-ARIN] 3492 ATLANTA [ADJH-ARIN] 3493 INTERLINK [RQ8-ARIN] 3494 INS-COM [KB428-ARIN] 3495 SENATE-AS [BJ104-ARIN] 3496 MRVNET [JM204-ARIN] 3497 NET-DPA-CA-GOV [ST8-ARIN] 3498 NET-SEN-CA-GOV [DM155-ARIN] 3499 NET-DMV-CA-GOV [RK9-ARIN] 3500 BLACK-STAR [JC49-ARIN] 3501 ES-USDA [GP9-ARIN] 3502 INTNET [GP12-ARIN] 3503 SMSNET [SJ14-ARIN] 3504 MWDSOCA [HRH11-ARIN] 3505 VNET-GA [DR297-ARIN] 3506 FSU-SCRI [KMH8-ARIN] 3507 CAPASSOC-AS [GC43-ARIN] 3508 CALL-AMERICA [CALL-NOC-ARIN] 3509 NET-CALPUC [JH5708-ARIN] 3510 RWC-NET [MY43-ARIN] 3511 INFONET [SB223-ARIN] 3512 EUSHC [CC-ARIN] 3513 INET-ON-RAMP [DS59-ARIN] 3514 INS-INFOSERVICES [INS-NOC-ARIN] 3515-3524 DSI-WR [SSW-ARIN] 3525 ALBERTSONS [KD24-ARIN] 3526 SCCS1 [SCCSI-NOC-ARIN] 3527 NIH-NET [BH1178-ARIN] 3528 ITSDN-S1 [ME10-ARIN] 3529 ITSDN-S2 [ME10-ARIN] 3530 ITSDN-S3 [ME10-ARIN] 3535 ITSDN-S8 [ME10-ARIN] 3536 ITSDN-S9 [ME10-ARIN] 3537 ITSDN-S10 [ME10-ARIN] 3538 ITSDN-U1 [KS100-ARIN] 3539 ITSDN-U2 [KS100-ARIN] 3540 ITSDN-U3 [KS100-ARIN] 3541 ITSDN-U4 [KS100-ARIN] 3542 ITSDN-U5 [KS100-ARIN] 3543 ITSDN-U6 [KS100-ARIN] 3544 ITSDN-U7 [KS100-ARIN] 3545 ITSDN-U8 [KS100-ARIN] 3546 ITSDN-U9 [KS100-ARIN] 3547 ITSDN-U10 [KS100-ARIN] 3548 CINVESRED [MM542-ARIN] 3549 GBLX [IA12-ORG-ARIN] 3550 PHILNET [RRC3-ARIN] 3551 PANNET [VL7-ARIN] 3552 UMI-AS2 [JR144-ARIN] 3553 COVANET [MBV-ARIN] 3554 USIT-ASN [USIT-DNS-ARIN] 3555 GRCI-WAN [GD-ORG-ARIN] 3556 INTEVEP [SG54-ARIN] 3557 VIX [PV15-ARIN] 3558 MRWA [MR16-ARIN] 3559 KORNET [JS206-ARIN] 3560 GDSAS [ZO26-ARIN] 3561 CWUSA [IA3-ORG-ARIN] 3562 SNLB-NET-AS [TCH2-ARIN] 3563 PILOT-ASN [PILOT3-ARIN] 3564 PENTELEDATA-1 [ZP98-ARIN] 3565 GHS-ASN [NA15-ARIN] 3566 JRIVER-LINK [JH186-ARIN] 3567 AGATE [CG91-ARIN] 3568 WAIS-AS [HM140-ARIN] 3569 ANDERSEN [DG1471-ARIN] 3570 FMC-1 [DB1050-ARIN] 3571 EY-AS [JR367-ARIN] 3572 TEXAS-TYC [PM75-ARIN] 3573 AC-PALO-ALTO [CEH1-ARIN] 3574 ICTV-NET [DL55-ARIN] 3575 SEANET-ASN [IK5-ARIN] 3578 MV-1 [MEM26-ARIN] 3579 DATABANK [BO4-ARIN] 3580 ACCESSCOOP [JC151-ARIN] 3581 OBS-NET [ZO8-ARIN] 3582 UONET [DMM65-ARIN] 3583 IPTEK-ASN [RS90-ARIN] 3584 PUBNIX2-ASN [AW45-ARIN] 3585 AMPNET-AS [JK49-ARIN] 3586 JAMNET [KM236-ARIN] 3587 TWA [RS127-ARIN] 3588 EVERGREEN-AS [TCO-ORG-ARIN] 3589 DIALCORP [MB179-ARIN] 3590 C-TEC [JG101-ARIN] 3591 EMORY [PP1526-ARIN] 3592 TRINCOLL-AS [PS173-ARIN] 3593 EPIX [DD12-ARIN] 3594 RAIN1 [TT125-ARIN] 3595 NETDEPO-AS [DD74-ARIN] 3596 TELEAUM [JMD65-ARIN] 3597 NET-RETINA [GHC16-ARIN] 3598 AS-BABOON [MN495-ARIN] 3599 BINCNET [JB187-ARIN] 3600 SUNNET-AS [GGB2-ARIN] 3601 IXA-NET [NM75-ARIN] 3602 SPRINT-CA-AS [NOC71-ORG-ARIN] 3603 NET-INTERCOL [HST-ARIN] 3604 CPBX [BL55-ARIN] 3605 KUENTOS-AS [PC34-ARIN] 3606 CONNCOLL-AS [TCM6-ARIN] 3607 EDS-PLANO-AS [EH2-ORG-ARIN] 3608 NBNIC-NCA [KW43-ARIN] 3609 CYBER-NET [JB59-ARIN] 3610 MHV-NET [CH7-ARIN] 3611 PIC [WW53-ARIN] 3612-3615 DELL-BLK [JC509-ARIN] 3616 IP-NET-AS [KB31-ARIN] 3617-3623 MCIASN-BLK [IW41-ARIN] 3624 CONCERTMANSER [EA77-ARIN] 3625-3626 MCIASN-2-BLK [IW41-ARIN] 3627 NRAO-VLBA [PG58-ARIN] 3628-3630 NYSERNET-BLK [ZN56-ARIN] 3631 MRECIC [NOC101-ORG-ARIN] 3632 CONACYT [SF127-ARIN] 3633 BC-SYSTEMS [AT110-ARIN] 3634 SFASU-AS [JG2220-ARIN] 3635 BEA [MBL7-ARIN] 3636 CPVNET [MDG3-ARIN] 3637 ASN-NWNEXUS2 [DA2237-ORG-ARIN] 3638 DASH [GIN1-ARIN] 3639 AS-BIZNET [DM149-ARIN] 3640 RED-CICESE [RV5-ARIN] 3641 NETHEAVEN [RS134-ARIN] 3642 GSA-PAN-DDN [LL19-ARIN] 3643-3652 SPRINT-BB-NETBLK [SPRINT-NOC-ARIN] 3653 SKYMALL [JH816-ARIN] 3654 AMSTD-NET [MN11-ARIN] 3655 GE-IPS [JCS3-ARIN] 3656 CITYPHX1 [BK54-ARIN] 3657 TSS-NET [TE26-ARIN] 3658 LIGHTLINK [WS29-ARIN] 3659 CLAREMONT [AD74-ARIN] 3660 CENTEL-OMAN [DP226-ARIN] 3661 CUHKNET [ZT42-ARIN] 3662 HARNET [NN27-ARIN] 3663 NETNET-NET [SB390-ARIN] 3664-3667 JWID-AS [AL37-ARIN] 3668 GNP-DCN [AMN-ARIN] 3669 IQUEST [RH159-ARIN] 3670 OPTIMUM-AS [OPT-NOC-ARIN] 3671 SLAC [JH40-ARIN] 3672 WINCOM-AS [GK11-ARIN] 3673 SYNERGYNET [SNI5-ARIN] 3674 RCN-AS6 [ZR40-ARIN] 3675 IS-NET [BC95-ARIN] 3676 UIOWA-AS [JF134-ARIN] 3677 UIOWA-EXTERNAL [JF134-ARIN] 3678 GLOBAL-ASN [TJ15-ARIN] 3679 SKYPOINT-NET [GK132-ARIN] 3680 NOVELL [MR46-ARIN] 3681 FIU [JEI2-ARIN] 3682 RACIN [OH6-ARIN] 3683 AMERICAN-NET [KC37-ARIN] 3684 DDI [JR14-ARIN] 3685 BUFFALO-ASN [CFD4-ARIN] 3686 BBSSYS-ASN [MM141-ARIN] 3687 GLOBALCOM-1 [EA26-ARIN] 3688 PING-INC [MWC2-ARIN] 3689-3693 HKIGS-BLCK [ZP69-ARIN] 3694 NOAA-SUITLAND [TS138-ARIN] 3696 OSD-CPMS [DF68-ARIN] 3697 FOXMEYER [TF108-ARIN] 3698 RJRNI-INTL1 [EDL4-ARIN] 3699 SENSE [JR640-ARIN] 3700 CLOUD9 [C9-NIC-ARIN] 3701 NERONET [DMM65-ARIN] 3702 ICSI-NET [PS87-ARIN] 3703 EARTHLINK [ELN-DA-ARIN] 3704 INTERMIND-ASN [JA2-ARIN] 3705 GPO-NET [RL96-ARIN] 3706 DIGEX-AS2 [MK826-ARIN] 3707 DIGEX3707 [MK826-ARIN] 3708 FF-ASN [RML3-ARIN] 3709 NET-CITY-SA [GM100-ARIN] 3710 REALM-AS [MV39-ARIN] 3711 ISIS-NZ-0 [BM21-ARIN] 3712 CHASE-US [TN43-ARIN] 3713 ICFKAISER [JC103-ARIN] 3714 KEC-NET [HF27-ARIN] 3715 ECS2 [MS245-ARIN] 3716 DATAWAVE [HM51-ARIN] 3717 BUCT-NET [HZ3-ARIN] 3718 TCD-CONNECT [SR66-ARIN] 3719 CT-JIS [DW121-ARIN] 3720 TIMS-AS [MK106-ARIN] 3721 ASN-MIKUNI [KE23-ARIN] 3722 SCSN [TW153-ARIN] 3723 ELECPRESS-AS [TH113-ARIN] 3724 ALASKA-ANET [MN19-ARIN] 3725 ASN-SONY [SR1947-ARIN] 3726 JCALS-NET [DE50-ARIN] 3727 SHRUBB [JH636-ARIN] 3728 ONR-ADDR [CK47-ARIN] 3729 CARE-AS [GL8-ARIN] 3732 CVCORP [WT78-ARIN] 3733 GULF-COAST [TC120-ARIN] 3734 SJEN [DH172-ARIN] 3735 CONNECTION [BS124-ARIN] 3736 RABBITNET [JP4736-ARIN] 3737 PTD-AS [JS318-ARIN] 3738 SSB-ASN [AG220-ARIN] 3739 SLPO [RG51-ARIN] 3740 CHICAGO-REN [JM264-ARIN] 3741 IS [TIS2-ORG-ARIN] 3742 SEMAPHORE-1 [GB31-ARIN] 3743 SIERRA-NET [BK20-ARIN] 3744 CAN-NET [TD44-ARIN] 3745 VWAG-AS [AP105-ARIN] 3746 IPAC-WORLD [BT59-ARIN] 3747 WANG-1 [AL45-ARIN] 3748 ETRINET [WD34-ARIN] 3749 TECNET [JW14-ARIN] 3750 NETPOINT1-NET [RC146-ARIN] 3751 SNET-AS [TND-ARIN] 3752 ELIZA-NETAXIS [LH-ARIN] 3753 NSCEE [BN25-ARIN] 3754-3756 NYSERNET3-AS [ZN56-ARIN] 3757 TRAN [LY11-ARIN] 3758 SINGNET [OD-ORG-ARIN] 3759 CALTEX-AS [ST73-ARIN] 3760 TX-DEPT-AGR [RM179-ARIN] 3762 INSTINET-AS [LY10-ARIN] 3764 NEONET [II14-ARIN] 3765 DNDCFNET1 [BW89-ARIN] 3766 DNDCFNET2 [BW89-ARIN] 3767 SOSCORP-AS [RS22-ARIN] 3768 DIALOG-AS [JM437-ARIN] 3769 HEARST-AS [CM114-ARIN] 3770 MONADNET [RDM2-ARIN] 3771 SPERRY-AS [BW42-ARIN] 3772 CETYS-AS [SR88-ARIN] 3773 TGE-1 [EM51-ARIN] 3774 SECARDNEON [PK79-ARIN] 3775 IBMAP-MPN [MM235-ARIN] 3776 ALOHANET [AL496-ARIN] 3777 HAVERFORD [PEF1-ARIN] 3778 TEMPLE [TES16-ARIN] 3779 CRISIS-WORLD [LL51-ARIN] 3780 ASN-ADVANTIS2 [JW368-ARIN] 3781 USBM-PGH [TMD28-ARIN] 3782 SWARTHMORE [MD83-ARIN] 3783 AIU-GATEWAY [BB14-ARIN] 3784 POSTECHNET [KK81-ARIN] 3785 TPOINT [MB243-ARIN] 3786 DACOMNET [YP15-ARIN] 3787 MOBILE-1 [CT61-ARIN] 3788 TEXAS-DOT [MK127-ARIN] 3789 INTERACCESS2 [SN9-ARIN] 3790 RACSANET [MC78-ARIN] 3792 CIS2 [CP68-ARIN] 3793 TIC [BA80-ARIN] 3794 TAMU [NG16-ORG-ARIN] 3795 BRYNMAWR [DB2896-ARIN] 3796 OUTERNET [OH27-ARIN] 3797 METASYS-VNET [RW36-ARIN] 3798 LAW-SERVICES [JJ16-ARIN] 3799 IDS [KG201-ARIN] 3800 NMC [SM180-ARIN] 3801 MISNET [LP167-ARIN] 3802 LGHS [AS140-ARIN] 3803 RCN-AS1 [ZR40-ARIN] 3804 WORLDLINX [DS243-ARIN] 3805 ASN-LAMB [JD14-ARIN] 3806 SCOOP [KM84-ARIN] 3807 UMTNET-ASN [MBB1-ARIN] 3808 CYBERGATE-AS [RSK4-ARIN] 3809 NWCORP1 [CI26-ORG-ARIN] 3810 VWMX-AS [AP105-ARIN] 3811 INTAC-AS [MJH2-ARIN] 3812 LTVIAS [ZL29-ARIN] 3813 SOGANGNET [FMV3-ARIN] 3814 IMS-INTERCOM [MB123-ARIN] 3815 AQUILA [SW332-ARIN] 3816 SAITEL-CO [LM145-ARIN] 3817 FREESIDE-NET [JP80-ARIN] 3818 STEP2-AS [SB112-ARIN] 3820 ACP [ZA132-ARIN] 3821 ABLECOM [HM57-ARIN] 3822 ITSNET [CP72-ARIN] 3823 CIMTG [DW158-ARIN] 3825 HANANET [JS206-ARIN] 3826 REDLION [NR8-ARIN] 3827 ELECTRICITI [CA5-ARIN] 3828 CIRRUS [TJT1-ARIN] 3829 METROBBS [BW98-ARIN] 3830 NET99 [AGIS-NOC-ARIN] 3831 FIBRNET-B1 [DH193-ARIN] 3832 CINE-NET [SI15-ARIN] 3833 WYOMING [WN-ARIN] 3834 PERFTECH [LD9-ARIN] 3835 STATIS-AS [AM109-ARIN] 3836 THAISARN [PP78-ARIN] 3837 ELK-MOUNTAIN [RB1905-ARIN] 3838 SVJAVA [EK9-ARIN] 3839 CHULANET [CL2744-ARIN] 3840 LABTAM [HOS13-ORG-ARIN] 3841 BIHS-NET [GHK-ARIN] 3843 INTEXO-MRS [PD65-ARIN] 3844 VRIO-3844 [VIA4-ORG-ARIN] 3845 STATE-NET [SC128-ARIN] 3846 NANDO [DL151-ARIN] 3847 GENUITY [AD4-ORG-ARIN] 3848 WORLDLINX-2 [DS243-ARIN] 3849 NET-HA [CM250-ARIN] 3850 LTECNET [BM247-ARIN] 3851 SCS-NV [WH49-ARIN] 3852 MAG-AS [JF212-ARIN] 3853 WHIDBEY [JW316-ARIN] 3854 DNACO-AS [DR103-ARIN] 3855 IBL-LYNX [NM7-ARIN] 3856 PCH-AS [CA5-ARIN] 3857 INC [AE19-ARIN] 3858 NPPDNET [JS678-ARIN] 3859-3897 AMEDD-EUR [MB262-ARIN] 3898 UCSF-HISD [MJ73-ARIN] 3899 CHICO-NET [ZC189-ARIN] 3900 YOKUBAITIS [HOS606-ORG-ARIN] 3901 ARRAKIS [MH94-ARIN] 3902 GLAXOCA-1 [DH79-ARIN] 3903 NAG-AS [BS155-ARIN] 3904 ASTHOUGHTPRT [OS11-ARIN] 3905 REDUNO [AS154-ARIN] 3906 ADS-1-AS [CS154-ARIN] 3907 CONNECT-1-NET [DBK2-ARIN] 3908-3910 SUPERNETASBLK [CLG2-ARIN] 3911 MIS-AS [IM72-ARIN] 3912 NMSU-AS [NG314-ARIN] 3913 UMMEDICAL [RR158-ARIN] 3914 DX-NET [RSL2-ARIN] 3916 OSIS-PACOM [JF154-ARIN] 3917 SCIS-NL [DS373-ARIN] 3918 SCIS-UK [DS373-ARIN] 3919 HARBORNET [KL68-ARIN] 3920 IMS-RTFM [CM225-ARIN] 3921 GEIS-OOCL [JCS3-ARIN] 3922 GEIS-YAM [JCS3-ARIN] 3923 FAA-MMAC [GS180-ARIN] 3924 TX-OAG [MB269-ARIN] 3925 ICO-SV [NO8-ORG-ARIN] 3926 FFX-CNTY [FN4-ARIN] 3927 RGNET-WAO [RB366-ARIN] 3928 VALLEY-TECH [JP221-ARIN] 3929 FINSYS-NET [TM142-ARIN] 3930 FERC-FED-US [AK53-ARIN] 3931 LOGICAL [DL160-ARIN] 3932 VOICENET [BSA3-ARIN] 3933 OPEN [GS1124-ARIN] 3934 VRIO-3934 [VIA4-ORG-ARIN] 3935 EASTWAUNIV [JSM1-ARIN] 3936-3942 VRIO-3936-3942 [VIA4-ORG-ARIN] 3943 DMM [DMM65-ARIN] 3944 PARTAN-LAB [AP25-ARIN] 3945 VRIO-3945 [VIA4-ORG-ARIN] 3946-3949 VRIO-3946-3949 [VIA4-ORG-ARIN] 3950 IXL-AS [CP82-ARIN] 3951 QWST [QN-ARIN] 3952 TELLABS-ASN [MB487-ARIN] 3953 PROFILE [JS405-ARIN] 3954 DFAS-PC-NET [DM240-ARIN] 3955 WANG-US-1 [RN676-ARIN] 3956 TX-METRO [SRL-ARIN] 3957 AIP [JW118-ARIN] 3958 AIRCANADA [BH1563-ARIN] 3959 ONEWORLD [TW93-ARIN] 3960 AASAMERITECH [GN34-ARIN] 3961 INDUSTRYNET [JS409-ARIN] 3963 INTERLINK-2 [RQ8-ARIN] 3964 INTERLINK-3 [RQ8-ARIN] 3965 INTERLINK-4 [RQ8-ARIN] 3966 INTERLINK-5 [RQ8-ARIN] 3967 CW-AS3967 [GIA-ARIN] 3968 COLMEX-AS [PV31-ARIN] 3969 STPHNET [JAC3-ARIN] 3970 RG-PART [RB366-ARIN] 3971 NETS-ABQ-VA [JS119-ARIN] 3972 AS-SPRINTLINK-NYSERN1 [SPRINT-NOC-ARIN] 3973 AS-SPRINTLINK-NYSERN2 [SPRINT-NOC-ARIN] 3974 REZONET [PG118-ARIN] 3975 AMSC [DU13-ARIN] 3976 NURI-ASN [SL1005-ARIN] 3977-3992 UTELFLA [BH216-ARIN] 3993 KW-NET [EH27-ARIN] 3994 INET-CORE-AS [AN48-ARIN] 3995 IWEB [CC144-ARIN] 3996 FIRN [ZF29-ARIN] 3997 ACM-AS [JS440-ARIN] 3998 CITY-NET [GDD3-ARIN] 3999 PENN-STATE [SJS11-ARIN] 4000-4005 GLOBAL-SPLK [DA74-ARIN] 4006 NETRAIL [NRAIL-NOC-ARIN] 4007 HKSUPER-1 [DC205-ARIN] 4008 UNIVERSAL [JM448-ARIN] 4009 INET [AN48-ARIN] 4010 USACE-WEST [AH66-ARIN] 4011 USACE-EAST [AH66-ARIN] 4012 DCM [JJR2-ARIN] 4013 ASN-GAN [MMS8-ARIN] 4014 WIS [TB89-ARIN] 4015 USWEST [JR141-ARIN] 4016 RIS [PW85-ARIN] 4017 BELLST [ZB26-ARIN] 4018 DIA-AS [TD77-ARIN] 4019 IIE-AS [JD196-ARIN] 4020-4038 TASDAC [WF30-ARIN] 4039 ALBANYNET [RL156-ARIN] 4040 KORNET-PS [JS206-ARIN] 4041 RGNET-SJ0 [TJ55-ARIN] 4042 DURANGONET [JD3018-ARIN] 4043 MIC-ASN [AU8-ARIN] 4044 AKSI-NET-AS [SW156-ARIN] 4045 AS-WINTERNET [MF41-ARIN] 4046 FAA [PD75-ARIN] 4047 CIRS-AS [MW131-ARIN] 4048 SPTEL [MC239-ARIN] 4049 OTP-1 [BG116-ARIN] 4050 OMNINET-PRI-AS [SB98-ARIN] 4051 PACAFINY-GW [BB248-ARIN] 4053 USRX-AS [TT100-ARIN] 4054 EZNETNY-AS [MZ20-ARIN] 4055 UDEL-1 [DJG2-ARIN] 4056 LASC-USAF [LW48-ARIN] 4057 I2020 [MW149-ARIN] 4058 LINKAGENET [ZP69-ARIN] 4059 WENG-AS [AW180-ARIN] 4060 KORNET-DJ [JS206-ARIN] 4061 GTTW-NET [JB98-ARIN] 4062 SIGNALDATA [FC33-ARIN] 4063 ELCSCI-ASN [CL162-ARIN] 4064 NET99-1 [AGIS-NOC-ARIN] 4065-4125 APPOC [LJ264-ARIN] 4126 SPTEL2 [MC239-ARIN] 4127 DUPONT-SCD [NMM-ARIN] 4128 RG-SPARE [RB366-ARIN] 4129 WIRED-NET [DG640-ARIN] 4130 UPITT-AS [EL117-ARIN] 4131 USIS-AS [MNB-ARIN] 4132 NET99-2 [AGIS-NOC-ARIN] 4133 BITWISE [JL237-ARIN] 4134 CHINALINK [JW221-ARIN] 4135 ENVISIONET [AH106-ARIN] 4136 GLOBIX-AS [GCH2-ARIN] 4137 DIRECTNET [MK134-ARIN] 4138 REACH [TS246-ARIN] 4139 INTERSRV [RG102-ARIN] 4140 INMIND [SS883-ARIN] 4141 ICA [JA177-ARIN] 4142 GIN-HK [CS195-ARIN] 4143 UNIBASE [LC64-ARIN] 4144 INTERGUIDE [OSM1-ARIN] 4145 FRITZNET [RS6112-ARIN] 4146 TACH-NET [IB5-ARIN] 4147 AFLOAT-MED [KW41-ARIN] 4148 ACTCOM [AP53-ARIN] 4149 UCCS-II [MM361-ARIN] 4150 SUPRANET-WIS [BC132-ARIN] 4151-4157 USDA-1 [ZU20-ARIN] 4158 CITYUHK [CYK4-ARIN] 4159 ONEWORLD-AS-1 [JC493-ARIN] 4160 SPECTRA [HS2-ORG-ARIN] 4161-4164 TIN-1 [JB381-ARIN] 4165 DISASD [TL50-ARIN] 4166 APPL-AS-4166 [NDA5-ARIN] 4167 CONNECTSOFT-COM [JM830-ARIN] 4168 GULFSTAR [EM78-ARIN] 4169 ECHNET [BJ38-ARIN] 4170 DIA-HOCNET [MJS5-ARIN] 4171 EUROGRAFIX [SJ64-ARIN] 4172 WAYNESBURG [KR63-ARIN] 4173 WATER [RA77-ARIN] 4174 CONNECT-COM [CC89-ARIN] 4175 CONNECT-NCM [CC89-ARIN] 4176 PGH-NET [ED13-ARIN] 4177 WORLTEK [AA45-ARIN] 4178 ASN-AZTEC [PI11-ARIN] 4179 CITY-OF-LA [DK184-ARIN] 4180 CHAPUB [FM50-ARIN] 4181 TDS-AS [KR181-ARIN] 4182 RE-INFOLINK [DA112-ARIN] 4183 UUNET-MCIWCOM [HC3-ORG-ARIN] 4184 STORTEK-WHQ [JW151-ARIN] 4185 AADS-INDY [MDS22-ARIN] 4186 AADS-SAGINAW [MDS22-ARIN] 4187 INFOBAHN [ES84-ARIN] 4188 GILBARCO-AS [BW137-ARIN] 4189 OSSHENET1 [PK104-ARIN] 4190 BINGHAMTON-U [RM129-ARIN] 4191 STORTEK-NAT [JW151-ARIN] 4192 STORTEK-INT [JW151-ARIN] 4193 WA-STATE-GOV [GE9-ARIN] 4194 SDINTERNET [TS236-ARIN] 4195 SHAW [KOS-ARIN] 4196 NMB-NETS [CJ42-ARIN] 4197 GLOBALONLINE [DA26-ORG-ARIN] 4198 RADIXNET [NOC48-ORG-ARIN] 4200 AGIS-NET [ADA2-ORG-ARIN] 4201 ORST-AS [BA26-ARIN] 4202 SAMSUNG-SEC2 [JK253-ARIN] 4203 TGF-TIS [JM532-ARIN] 4204 ALLWARE-AS [JD224-ARIN] 4206 INMS [AC145-ARIN] 4207 NET-INTRNET [DE90-ARIN] 4208 ISERV-AS [JH390-ARIN] 4209 PQVNET [HO5-ARIN] 4210 Y [KOS-ARIN] 4211 ASN-MARICOPA1 [JA117-ARIN] 4212 SPRINT-MAT [TP82-ARIN] 4214-4221 NAPLESCLIN [SS168-ARIN] 4222 LEN-NET [DMM65-ARIN] 4223 CONNIX [JH197-ARIN] 4224 CALYX-AS [NM60-ARIN] 4225 NAV-AS [ET28-ARIN] 4226 ASN-PERSIS [MG183-ARIN] 4227 TCCGI-AS [BW111-ARIN] 4228 CDFA-CA-GOV [PA72-ARIN] 4229 DIRECT-NET2 [WSC3-ARIN] 4230 EMBRATEL-BR [NA194-ARIN] 4231 FASTNET-ASN [FNO-ARIN] 4232 EDEN-AS [KT46-ARIN] 4233 DWRSCADA [LT16-ARIN] 4234 CT-WCC [RF151-ARIN] 4235 DGS-2 [JDW4-ARIN] 4236 CITIZENS-AS [BP96-ARIN] 4237 INTERLINK-S [BD107-ARIN] 4238 TX-TREASNET [GC116-ARIN] 4239 COAST-NET [CN3-ORG-ARIN] 4240 NJNET-AS [WC58-ARIN] 4241 FTB [SC213-ARIN] 4242 SOLAR-NET [NW893-ARIN] 4243 NC-FUNB-AS [FC39-ARIN] 4244 RTN-1 [AM158-ARIN] 4245 ECHO-AS [SH8-ARIN] 4246 NJIT-AS [BW174-ARIN] 4247 CAPCON-AS [JH255-ARIN] 4248 CYBERTRIBE [BB34-ARIN] 4249 LILLY-AS [AH366-ARIN] 4250 NUKE-NET [FS217-ARIN] 4251 TWICS [PAG4-ARIN] 4252 GMS-AS [JSS-ARIN] 4253 RWJNET [MZ32-ARIN] 4254 PICA-ISAN [TMC8-ARIN] 4255 BAIN [RN101-ARIN] 4256 INTERGATE-GW [JM773 -ARIN] 4257 CYBERCASH-AS [RO48-ARIN] 4258 WOLFENET [PM139-ARIN] 4259 IOCOM [IDK5-ARIN] 4260 DCCI-AS [JD194-ARIN] 4261 BLUEGRASSNET [TG41-ARIN] 4262-4269 CERNET-ASN-BLOCK [PM200-ARIN] 4270 RIU [JD75-ARIN] 4271 WORX [KH119-ARIN] 4272 MDN [JD71-ARIN] 4273 JSC-NET-ASN [EE27-ARIN] 4274 AU-NET [SC299-ARIN] 4275 CLIPPER [AC140-ARIN] 4276 INCH [HOS49-ORG-ARIN] 4277 KIVEX [SG167-ARIN] 4278 IADFW [II14-ARIN] 4279 INTERSOURCE [JN2-ORG-ARIN] 4281-4285 CWUSA-BLK [IA3-ORG-ARIN] 4286 MCI-WORLD [TB202-ARIN] 4287-4298 CWUSA-2BLK [IA3-ORG-ARIN] 4299-4301 JSC-NET-ASN2 [EE27-ARIN] 4302 BUPERSLAN [DG38-ARIN] 4303 DDN-S-AS [MIL-HSTMST-ARIN] 4304 YPN-NET [SN48-ARIN] 4305 PREMIER [BG141-ARIN] 4306 NOVIA [NO22-ARIN] 4307 SVINET-1 [RB148-ARIN] 4308 TEZCAT-ASN [JAK8-ARIN] 4309 FRMCO [ZF32-ARIN] 4311 WINC [TR85-ARIN] 4312 FYI [SL984-ARIN] 4313 DELTANET [MO42-ARIN] 4314 COMMNET-ASN [IA-ORG-ARIN] 4315 STACCS-A [MW224-ARIN] 4316 DSI-CUST-BLK [TH190-ARIN] 4318 FMI-NET-AS [DJM13-ARIN] 4319 CORTLAND [ML144-ARIN] 4320 TASA-GW [BN46-ARIN] 4321 INSINC2 [RR57-ARIN] 4322 EBTECH [JW254-ARIN] 4323 TW-COMM [IT65-ARIN] 4324 WHC-NET [FJW-ARIN] 4325 PWCYOKO [ECM5-ARIN] 4326 TNTONLINE [LC99-ARIN] 4327 SNA-NET [AW139-ARIN] 4328-4351 STACCS-A1-24 [MW224-ARIN] 4352 GLOBAL-LINK [ZP69-ARIN] 4353 WNET-AS [SN95-ARIN] 4355 ERMS-EARTHLNK [DAE4-ARIN] 4356 RICOCHET-4356 [CV243-ARIN] 4357 PHASE4-RO [SA49-ARIN] 4358 XNET [XDA-ORG-ARIN] 4359 DIGIPRESS-AS [AR107-ARIN] 4360 AGNES-SCOTT [SN49-ARIN] 4361 PCIX-AS [IOS-NOC-ARIN] 4362 DIGITOPIA-AS [MR247-ARIN] 4363 ALPHA-BETA [CN51-ARIN] 4364 IGLOU [DB516-ARIN] 4365 DIGITAL-CAFE-ASN [CT95-ARIN] 4366 GE-AMC [JCS3-ARIN] 4367 SECSTATE-CA-GOV [FD28-ARIN] 4368 CRCNET [GJY-ARIN] 4369 IQUEST-ASN [MM178-ARIN] 4370 TELERES-NET [EM52-ARIN] 4371 FEMA-GOV [DR193-ARIN] 4372 NET-LM [TD-ORG-ARIN] 4373 OCLC-AS [GO28 -ARIN] 4374 CONNECT [KM528-ARIN] 4375 KEY [CO27-ARIN] 4376 DSW-INET [PK68-ARIN] 4377 SSSI-NETS [AB5201-ARIN] 4378 EXPRESS-TECH-4378 [IE35-ARIN] 4379 SIPRNCC [BSL5-ARIN] 4380 USACAA-NET1 [DAH8-ARIN] 4381 CONNECT-COM2 [HI-ARIN] 4382 LINTASARTA [HY23-ARIN] 4383 NAIC [RN108-ARIN] 4384 MULTI-NET [DL76-ARIN] 4385 RIT-ASN [ZR58-ARIN] 4386 OSPASN [SJH2-ARIN] 4387 RECYT [ALG15-ARIN] 4388 NET99-3 [AGIS-NOC-ARIN] 4389 DATASERVE-AS [AM581-ARIN] 4390 BELLATLANTIC-COM [BM278-ARIN] 4391 BRI-NET [DC205-ARIN] 4392 CROWN-NET [DB443-ARIN] 4393 PATHFINDER [JW450-ARIN] 4394-4404 DSI-CUST-BLK2 [TH190-ARIN] 4405-4430 LINK3 [MS463-ARIN] 4431 LINGNAN [LP61-ARIN] 4432 CSTONE-NET [MD16-ARIN] 4433 ACCESS-ONE [HOS13-ORG-ARIN] 4434 RADNET1-AS [II19-ARIN] 4435 INCH-AS-1 [HE14-ARIN] 4436 AS-SCRUZ-NET [MK42-ARIN] 4437 WEBB [CW59-ARIN] 4438 NEPTUNE [BF96-ARIN] 4439 IMEFDJOSS [PR140-ARIN] 4440 IIIMEFDJOSS [PR140-ARIN] 4441 MARFORPACDJOSS [PR140-ARIN] 4442 TRACWS [JTB6-ARIN] 4444 CISNET-AS [TK169-ARIN] 4445 CWI-AS [IA3-ORG-ARIN] 4446 INFINET-ASN [MB445-ARIN] 4447 HOOKED-AS [YL43-ARIN] 4448 OPEN-ACCESS-AS [JH281-ARIN] 4449 ASN-GALSTAR [ML89-ARIN] 4450 WEBNET [NF14-ARIN] 4452 AMERICA [RS120-ARIN] 4453 TDS-TELECOM [KR181-ARIN] 4454 TNET-AS [IM-ORG-ARIN] 4455 RICOCHET-4455 [CV243-ARIN] 4456 GSNET-NETS [RDP-ARIN] 4457 NESTE-NET [JK316-ARIN] 4458 CCNET [TL140-ARIN] 4459 KDD-NET [MI295-ARIN] 4460 RVCC [CR549-ARIN] 4461 OPUSTEL-AS [PW119-ARIN] 4462 NDLINK [AH29-ARIN] 4463 ONET3-DOM [BD185-ARIN] 4464 TWNAO-AS [BF144-ARIN] 4465 EASYLINK1 [BA128-ARIN] 4466 EASYLINK2 [BA128-ARIN] 4467 EASYLINK3 [BA128-ARIN] 4468 EASYLINK4 [BA128-ARIN] 4469 SPHERENET-AS [SH793-ARIN] 4470 ASN-CITENET [RM329-ARIN] 4471 MICAE91-AS [NE4-ARIN] 4472 IONET [LEC2-ARIN] 4473 AADS-MI-UP [MDS22-ARIN] 4474 GVIL1 [JS370-ARIN] 4475 GVIL2 [JS370-ARIN] 4477 BBDATA [MB497-ARIN] 4478 PNET-STL [RR214-ARIN] 4479 JTM [TM262-ARIN] 4480 EMTF-RMAIN [DS524-ARIN] 4481 EMTF-SEM [DS524-ARIN] 4482 EMTF-GEIL [DS524-ARIN] 4483 EMTF-SPANG [DS524-ARIN] 4484 EMTF-BIT [DS524-ARIN] 4485 EMTF-RAMDEN [DS524-ARIN] 4486 EMTF-RAM [DS524-ARIN] 4487 EMTF-UPW [DS524-ARIN] 4488 EMTF-CRO [DS524-ARIN] 4489 EMTF-MOL [DS524-ARIN] 4490 EMTF-LAK [DS524-ARIN] 4491 MULTIPRO [JS704-ARIN] 4492 RTD [DC134-ARIN] 4493 UNI-SON [AV37-ARIN] 4494 INTERBYTES [TW73-ARIN] 4495 TERRAPORT [PT715-ARIN] 4496 UUCOM-AS [CCG10-ARIN] 4497 UPSTEL-NET [DG218-ARIN] 4498 GLOBALONE [JM655-ARIN] 4499 WEBNET-ASN [NF14-ARIN] 4500 NET-TIVOLI [IT24-ARIN] 4501 MICAE91-MICA [NE4-ARIN] 4502 CINCOM-MRS [MD303-ARIN] 4503 EGINTERLINK [CD159-ARIN] 4504 GSASNETXGW [SJC4-ARIN] 4506 SEW-AS [LA42-ARIN] 4507 ASN-SUDRCSS-NET [DR80-ARIN] 4508 NETSOUTH [MB1095-ARIN] 4509-4510 ONRAMP-CA1 [PP61-ARIN] 4511 MIAMI-EDU [SM393-ARIN] 4512 PCWNET [JW395-ARIN] 4513 TIG [MJ108-ARIN] 4515 STAR [LJ249-ARIN] 4516 TRENDLINE [AS335-ARIN] 4517 VOLANT [JA113-ARIN] 4518 TELECOM [ZK4-ARIN] 4519 MAAS [BB5114-ARIN] 4520 AQUA [JT278-ARIN] 4521 MIRACLE [MP1946-ARIN] 4522 COMPUCALL [RG239-ARIN] 4523 GEIS [ZG28-ARIN] 4524 TRU-MRS [PM269-ARIN] 4525 POPPE [LC82-ARIN] 4526 ARMY-FMO [EE27-ARIN] 4527 RCN-AS-1 [ZR40-ARIN] 4528 HKUNET [NN27-ARIN] 4529 RIS-NET [PW85-ARIN] 4530 RCN-AS5 [ZR40-ARIN] 4531 MEDWEB [PK33-ARIN] 4532 WARWICK [KS617-ARIN] 4533 GLOBESAT [BF139-ARIN] 4534 IXA-ASN [NM75-ARIN] 4535 TRUE [LM39-ARIN] 4536 PEARLY-GATE [MD68-ARIN] 4537 BAILEYS-GWS1 [DC163-ARIN] 4538 CERNET-BKB [JW422-ARIN] 4539 NETROPOLIS [SA878-ARIN] 4540 WELL [DH102-ARIN] 4541 IWORK [DC413-ARIN] 4542 RRNET-AS [CL54-ARIN] 4543 TIMESNET [ZT84-ARIN] 4544 CONXION-A [CO-ORG-ARIN] 4545 SONNET-ASN [BC221-ARIN] 4546 MCGRAW-AS [HM114-ARIN] 4547 BLS-AS [BI14-ARIN] 4548 AG [PL159-ARIN] 4549 ESPN-AS [DS1189-ARIN] 4550 AN-CMSPP [TC15-ARIN] 4551 EP0-BLK-ASNBLOCK [WM110-ARIN] 4552 EP0-BLK-ASNBLOCK-2 [WM110-ARIN] 4553 NAP-MAEWEST [ZM8-ARIN] 4554 EP0-BLK-ASNBLOCK-4 [WM110-ARIN] 4555 EP0-BLK-ASNBLOCK-5 [WM110-ARIN] 4556 EP0-BLK-ASNBLOCK-6 [WM110-ARIN] 4557 EP0-BLK-ASNBLOCK-7 [WM110-ARIN] 4558 EP0-BLK-ASNBLOCK-8 [WM110-ARIN] 4559 EP0-BLK-ASNBLOCK-9 [WM110-ARIN] 4560 EP0-BLK-ASNBLOCK-10 [WM110-ARIN] 4561 EP0-BLK-ASNBLOCK-11 [WM110-ARIN] 4562 INTEX [MW320-ARIN] 4564 NIPRNET [HS143-ARIN] 4565 EPOCH-INTERNET [ZE35-ARIN] 4566 3COMMW [ZG18-ARIN] 4567 DEC-ENET [FC68-ARIN] 4568 WALLACE-NET [MC457-ARIN] 4569 ASHTON-NET1 [RSA2-ARIN] 4570 IH2000 [JW891-ARIN] 4571 UUNET-SA [ZZ2573-ARIN] 4572 JAXINTER [SM413-ARIN] 4573 SEQUEL2 [JG451-ARIN] 4574 NETDOOR [MM757-ARIN] 4575 CYBERHOUSE [MT224-ARIN] 4578 NETCENTER [TT165-ARIN] 4580 CORSAIR [DCK2-ARIN] 4581 SOCKET [JD1522-ARIN] 4582 REALLINK [JF309-ARIN] 4583 WESTPUB-A [DN19-ARIN] 4584 PTI-NET [MP306-ARIN] 4585 NAVISOFT [JC158-ARIN] 4586 TX-TNRIS [RJ140-ARIN] 4587 ONEWORLD2 [OW-ORG-ARIN] 4588 FINNPAP-MRS [JN165-ARIN] 4589 TECHNOCOM [DRG5-ARIN] 4590 MARCAM-GW [WJL-ARIN] 4591 SYRANET-GW [WJL-ARIN] 4592 OPENMARKET-NET [MN60-ORG-ARIN] 4593 RELIANCE [RS598-ARIN] 4594 INOAC-HK [WN27-ARIN] 4595 ICNET [IU3-ARIN] 4596 MONGTOMERY [SM302-ARIN] 4597 MILLIPORE [PR198-ARIN] 4598 HRB [GSM1-ARIN] 4599 MINNNET-NET [JN99-ARIN] 4600 UO-TRANSIT [DMM65-ARIN] 4601 PAGESAT [NWR1-ARIN] 4602 NAVO [RY41-ARIN] 4603 SONETIS [MR343-ARIN] 4604 HOUSTON-ISD [BE95-ARIN] 4605 HKBUNET [PW27-ARIN] 4606 HCI [RWH4-ARIN] 4607 NORAD-SPACE [GC200-ARIN] 4608-4864 APNIC-AS-BLOCK [SA90-ARIN] 4908 XO-AS17 [DIA-ORG-ARIN] 4909 FCDNA [KBT2-ARIN] 4910 SPRINTNET-NC [TS402-ARIN] 4911 USW-INTERNET [PL84-ARIN] 4913 IWL [AS207-ARIN] 4914 HONDUNET [RE138-ARIN] 4915 TRANE-UPG [DNB5-ARIN] 4916 HQINSCOM [GG96-ARIN] 4917 AMDOCS-AS [RS590-ARIN] 4918 THEPOINT-NET [JAC4-ARIN] 4919 CONSOLIDATED [TDL-ARIN] 4920 CYBERPORTS [WM5-ARIN] 4921 EX-SV-GW5 [SON4-ARIN] 4922 GLOBALCOM [WP35-ARIN] 4923 MCIX [DH303-ARIN] 4924 NIIA-NET [SP193-ARIN] 4925 FIRSTDATA [LW78-ARIN] 4926 TELINTAR [ML58-ARIN] 4927 ASN-SBCNET [FD69-ARIN] 4928 VAIS [CR175-ARIN] 4929 BENCHMARK [GW170-ARIN] 4930 DMG1 [VD25-ARIN] 4931 INTERSRV2 [RY31-ARIN] 4932 I3 [LB187-ARIN] 4933 WPE [WP24-ARIN] 4934 LANIER-WW [KS95-ARIN] 4936 HC-LIB [JD402-ARIN] 4937 IAMERICA-NET [AF127-ARIN] 4938 SPRINTNET-SC [TS402-ARIN] 4939 ASN-SOLECT [HS3-ORG-ARIN] 4940 SOUTHWINDNET [JS344-ARIN] 4941 FDT [JL799-ARIN] 4942 B-NET [MSB7-ARIN] 4943 NOL-AS [ZN82-ARIN] 4944 PDVNET [RT200-ARIN] 4945 HARRIS-SEMICONDUCTOR [CC314-ARIN] 4947 NEONET-LA [II14-ARIN] 4948 AIX-NET [DW355-ARIN] 4949 UCINET-EIGRP [DM331-ARIN] 4950 ASN-SPRN-NYSERNET1 [SPRINT-NOC-ARIN] 4951 SPRINTLINK-NYSERNET2B [SPRINT-NOC-ARIN] 4952 CAPECOD [TS416-ARIN] 4953 BCPL [CO53-ARIN] 4954 CARR [SR245-ARIN] 4955 NDL [GB297-ARIN] 4956 LOGICSYS [DG348-ARIN] 4957 VCNET [JR453-ARIN] 4958 LDSNET [IA185-ORG-ARIN] 4959 CORPCOMM [DK62-ARIN] 4960 PERNET [MO356-ARIN] 4961 DHI-NET [CY34-ARIN] 4962 WINKCOMM [BB483-ARIN] 4963 TEXOMA [LV21-ARIN] 4964 4964 [DN158-ARIN] 4965 AMER [CK178-ARIN] 4966 TELEPATH [DT56-ARIN] 4967 STARTEL [MC338-ARIN] 4969 NETACCESS [AF39-ARIN] 4971 NWPROS [RS671-ARIN] 4972 FRITZNET2 [RS6112-ARIN] 4973 FRITZNET3 [RS6112-ARIN] 4974 GROVE-MRS [MC526-ARIN] 4975 LASER-NET-BLOCK [RB208-ARIN] 4976 SUNGLASSES [JCA5-ARIN] 4977 NET1 [CM373-ARIN] 4978 GDI-NET-AS [RN150-ARIN] 4979 GEIS-GENIE [BS3030-ARIN] 4981 TECLINK [JRA2-ARIN] 4982 JAZZIE [SS2177-ARIN] 4983 INTEL-SC-AS [SFJ1-ARIN] 4984 INGRESS [MH157-ARIN] 4986 SHASTA-NET [GF60-ARIN] 4987 ALOHANET2 [CK340-ARIN] 4988 ALOHANET1 [NA114-ARIN] 4989 CFT-NET [JH5712-ARIN] 4990 AADS-MILWAUKEE2 [MDS22-ARIN] 4991-4994 NET99-4-7-BLK [AGIS-NOC-ARIN] 4995 NETUP [LD1227-ARIN] 4996 SBI [JS314-ARIN] 4997 VELOCITUS [CJ283-ARIN] 4998 LANDE [JS1036-ARIN] 4999 SPRINTIPDIAL [TS445-ARIN] 5000 IOS-NET [GB1319-ARIN] 5001 SONIC [MW61-ARIN] 5002 BBSATLGA [GD124-ARIN] 5003 INSYNC-1 [NA102-ORG-ARIN] 5004 EAGLENET [FPW-ARIN] 5005 LAT [DR191-ARIN] 5006 MIXNET-NET [DF202-ARIN] 5007 COMPUTOPIA [AW143-ARIN] 5009 ADVTEL [AP130-ARIN] 5010 KISNET-1 [JG327-ARIN] 5011 EMTF-AVI [DS524-ARIN] 5012 EMTF-AZO [DS524-ARIN] 5013 EMTF-IZM [DS524-ARIN] 5014 EMTF-INC [DS524-ARIN] 5015 SHOUTING [MB504-ARIN] 5016 BRAGG-GCC [WGM2-ARIN] 5017-5018 HUGE-NET [ZP69-ARIN] 5019 DATACOM-GATE [BM196-ARIN] 5020 MEA [ES142-ARIN] 5021 PACAF-GCCS [JBE9-ARIN] 5022 FANEUIL [CK134 -ARIN] 5023 FIREBALL [BL187-ARIN] 5024 BRIDGE [DA570-ORG-ARIN] 5025 ASN-DATABANK [BO4-ARIN] 5026 LVVWD [BM2537-ARIN] 5027 ACSIL [DC373-ARIN] 5028 GATEWAYNORTH [FL48-ARIN] 5029 VEGAS-NET [KR55-ARIN] 5030 TAL [AJ60-ARIN] 5031 DOCCNET [RB429-ARIN] 5033 ISW [ISWEST-ADM-ARIN] 5034 AS-STARNET [KM218-ARIN] 5035 CYNET [DC369-ARIN] 5036 WCA [DML5-ARIN] 5037 NSTCPVAX [MD69-ARIN] 5038 NSAN-DOM [BE85-ARIN] 5039 TECNET2 [JS739-ARIN] 5040 MINT [PB246-ARIN] 5041 SUPERLINK-NET [JW219-ARIN] 5042 DISC2 [OO27-ARIN] 5043 PERRAUT [DS559-ARIN] 5044-5045 ASN-DATABANK1 [BO4-ARIN] 5046 RANDOMC [GM1152-ARIN] 5047 ARNET2 [DEH3-ARIN] 5048 FIBER [LL368-ARIN] 5049 MORGAN-ASN [QM4-ARIN] 5050 PSC-EXT [PN-ORG-ARIN] 5051 KOREAPC [YS38-ARIN] 5052 SETA-DMS [DJW5-ARIN] 5053 HTP [MM2414-ARIN] 5054 PROGNET [JB843-ARIN] 5055 WANET [JFL1-ARIN] 5056 INS-NET-2 [INS-NOC-ARIN] 5057 XENITEC [EH27-ARIN] 5058 NRL-EXP [HDD-ARIN] 5059 STARPAGING [KD142-ARIN] 5060-5069 APPLIEDTHEORY [NDA5-ARIN] 5070 COMED [PAM2-ARIN] 5071 WESTEL-1 [BL291-ARIN] 5072 INDYNET [LD23-ARIN] 5073 GM-EDS-1 [EH2-ORG-ARIN] 5074 ASN-ATTELS [MWM-ARIN] 5075 ASN-ATTGMS [MWM-ARIN] 5076 UNICOM [UCN4-ARIN] 5077 ASN-WSNET [AG83-ARIN] 5078 ONENET-AS-1 [ME115-ARIN] 5079 DIAL-CALL [DM1283-ARIN] 5080 ARAMCO-AS [MJ167-ARIN] 5081 WINTERLAN [HW2-ORG-ARIN] 5082 CLOVERLEAF [SD78-ARIN] 5083 DRAKE-NET [DH559-ARIN] 5084 GSL-HQ [ED67-ARIN] 5085 NETFUN [AK216-ARIN] 5086 IDNET [RS81-ARIN] 5087 LANKA-COM [MM750-ARIN] 5088 NIS-1 [MC96-ARIN] 5089 CABLETEL [PJ69-ARIN] 5090 CWI-NYD [CWI-NOC-ARIN] 5092 NNE [TS236-ARIN] 5093 OVID-AS [SRB2-ARIN] 5094 PARAGON-AS [SL296-ARIN] 5095 BOOKLINK-AS [DD409-ARIN] 5097 SOFTAWARE [SH47-ORG-ARIN] 5099 NWUC [TW1261-ARIN] 5100 ASN-TX-DDC [RPR-ARIN] 5101 SII [ZS34-ARIN] 5102 AADS-CHAMPAIGN [JT363-ARIN] 5103 AADS-INDY3 [MDS22-ARIN] 5104 AADS-CHAMPAIGN2 [MDS22-ARIN] 5105 AADS-COLUMBUS2 [MDS22-ARIN] 5106 AADS-COLUMBUS [MDS22-ARIN] 5107 AADS-CLEVELAND2 [MDS22-ARIN] 5108 AADS-CLEVELAND [MDS22-ARIN] 5109 AS-NTER-NET [EL43-ARIN] 5111 CABLE-ASN [JP458-ARIN] 5112 SIDLINGER [BS2119-ARIN] 5113 HGEA-AS [JC821-ARIN] 5114 KBI-NET-GW [DB384-ARIN] 5115 ONESTEP [MC539-ARIN] 5120-5376 DODNIC [MIL-HSTMST-ARIN] 5377-5631 RIPE-ASNBLOCK5 [RIPE-NCC-ARIN] 5633 ONLINE-SA [RC169-ARIN] 5634 MILESTONE [MR139-ARIN] 5635 SBVDN [MW429-ARIN] 5636 LISTING [AD167-ARIN] 5637 CAIDA-CACHE [DMM65-ARIN] 5638 GENUITY-AS5638 [CS15-ARIN] 5639 TSTT-NET [BL284-ARIN] 5640 NCSA-VBNS-EX [ND63-ORG-ARIN] 5641 ABS-NET [HL52-ARIN] 5642 KERSUR-TECH [DS71-ARIN] 5643 SILKROAD-US [TB7-ARIN] 5644 ASN-USA [UN10-ARIN] 5645 JUMP-NET [KS117-ARIN] 5646 NN-CNSM [NNO3-ARIN] 5647 ASN-KODAK [RSE1-ARIN] 5648 SATLINK [JC675-ARIN] 5649 KEVNET-ASN [KN45-ARIN] 5650 ELIX [IE27-ARIN] 5651 DESTEK [ME126-ARIN] 5652 IN-NET [RM432-ARIN] 5653 UCSF [TF6-ARIN] 5654 TISHNET [MM2154-ARIN] 5655 DECADE-DOM [ZD3-ARIN] 5656 ACCESSUS-DOM [RS301 -ARIN] 5657 NOVAIAC-ASN [JS348-ARIN] 5658 CCE-NET [DAT-ARIN] 5659 VIVANET [DW575-ARIN] 5660 JCI-NET [GG263-ARIN] 5661 USF [TL35-ARIN] 5662 ASN-TBS-1 [SG169-ARIN] 5663 EDCNET [SD299-ARIN] 5664 SHERIDAN-NET [JF474-ARIN] 5665 DELMARVA-ASN [JKS23-ARIN] 5666 OMNES-NET [ZS99-ARIN] 5667 FASTNET2-ASN [DKV5-ARIN] 5668 CENTURY [NA397-ORG-ARIN] 5669 VIA-NET [NOC47-ARIN] 5670 MONTEREY [SJH5-ARIN] 5671-5681 PBI-NET-BLK [PIA2-ORG-ARIN] 5682 NETONE [VR8-ORG-ARIN] 5683 CWI-CORE [IA3-ORG-ARIN] 5684 GANNETT-NET [JP74-ARIN] 5685 DRANET-NORTH [DRA7-ORG-ARIN] 5686 CSERVE-CIS [DC411-ARIN] 5687 AA-NET [ZA43-ARIN] 5688 PASSPORT [ZP52-ARIN] 5689 HOOSIERNET [DE67-ARIN] 5690 VIANET-NO [WG95-ARIN] 5691 MITRE-WASH [TR260-ARIN] 5692 UNLP [JD632-ARIN] 5693 INTELENET [ICI6-ARIN] 5694 UNIFIED-NET [JD462-ARIN] 5695 MAILROOM-NT [BH405-ARIN] 5696 WNST [ZW11-ARIN] 5697 SG-INTER [CB1088-ARIN] 5698 NETPUB-AS [RLF3-ARIN] 5700 IV-NET [CI16-ARIN] 5701 HEALTH-ONE [RS939-ARIN] 5702 GALAXY [BK17-ARIN] 5703 TIGERFUND [TD223-ARIN] 5704 CARIBE-NET [CM183-ARIN] 5705 VERADO-AS [IV35-ARIN] 5706 UUPCQUOTE [DS1059-ARIN] 5707 UTH-HSC [SF90-ARIN] 5708 UAGRO [GO63-ARIN] 5709 KMB-1 [HW98-ARIN] 5710 GIA-ASN-1 [JO235-ARIN] 5711 CYBER2 [CF186-ARIN] 5712 RCN-AS4 [ZR40-ARIN] 5713 SAIX-NET [PB455-ARIN] 5714 EDS-WEBS [EH2-ORG-ARIN] 5715 MIXNET2-NET [DF202-ARIN] 5716 CYBERCOM [PP136-ARIN] 5717 IWIN-NET [JT229-ARIN] 5718 MECNET [JB206-ARIN] 5719 SUNYSB [JS585-ARIN] 5720 ASTSOFT [JS563-ARIN] 5721 NDU-NET [DM94-ARIN] 5722 UNALCOL-NET [EP121-ARIN] 5723 JHU [GH122-ARIN] 5724 UMMCNET [SO28-ARIN] 5725 NEXTLAND [PB8-ARIN] 5726 INTERWORLD [RW239-ARIN] 5727 WORLDNET-0 [BA128-ARIN] 5728 WORLDNET1 [BA128-ARIN] 5729 WORLDNET2 [BA128-ARIN] 5730 WORLDNET3 [BA128-ARIN] 5731 5731 [BA128-ARIN] 5732 ACCESINDIANA [TS445-ARIN] 5733 TMC-RING [SF90-ARIN] 5734 TIENET [AM442-ARIN] 5735 GALT-TECHNO [RF55-ARIN] 5736 CLUBNET [DG251-ARIN] 5737 USW-INTERACT2 [PL84-ARIN] 5738 SOVER-ASN [NA22-ORG-ARIN] 5739 UCSC [JW315-ARIN] 5740 SALTMINE [ZS198-ARIN] 5741 TRIAD-LVK [MGG4-ARIN] 5742 CCINET [PS459-ARIN] 5743 NOAA-FSL [MAD6-ARIN] 5744 USPTO [DP2842-ARIN] 5745 SALUD-AR [HJ64-ARIN] 5746 CELESTAR-ASN [EP92-ARIN] 5747 ASN-RISQ-QIX [SC166-ORG-ARIN] 5748 BBNET [DBK2-ARIN] 5750 FLEXNET-HAWAII [DW403-ARIN] 5751 SYTEX [RC165-ARIN] 5752 GREATBASIN [GNO3-ORG-ARIN] 5753 EMPAC-DOM [TC695-ARIN] 5754 PIXINET1 [NOC43-ARIN] 5755 QNETIX-AS [DP202-ARIN] 5756 POINTCAST [JY84-ARIN] 5758 UMS-EDU [RR599-ARIN] 5759 RAINSTORM [SK367-ARIN] 5760 BIDDEFORD1 [FK20-ARIN] 5761 MSN-SEATTLE [MN495-ARIN] 5762 NETMAG [GS353-ARIN] 5763 TRI-DEV-GRP [TNO10-ORG-ARIN] 5764 CONVOKE [DL221-ARIN] 5765 TELUS-AS-5765 [PSINET-CA-ARIN] 5766 IHS-MD-AS [MP588-ARIN] 5767 INFINITY [IHR-ORG-ARIN] 5768 ICANECT [JA681-ARIN] 5769 VIDEOTRON [NAV1-ARIN] 5770 EMPLINK-AS [JD267-ARIN] 5771 INET-AK [IDD3-ORG-ARIN] 5772 UNINET-BR-RJ [MPS9-ARIN] 5773 SPEEDSITE [CT589-ARIN] 5774 USPS-001 [DH847-ARIN] 5776 WORLDWEB [RR217-ARIN] 5778 SMATNET-TAC [IG58-ARIN] 5779 Y-BR-SERV [TB501-ARIN] 5780 GIGASD3 [CJ76-ARIN] 5781 CSI-GATEWAY-2 [JH54-ARIN] 5782 EXTREMES [JMG5-ARIN] 5783 KCSOS-NET [TM319-ARIN] 5784 GETNET [GET-NOC-ARIN] 5785 DCPS-DC-AS [RH780-ARIN] 5786 UPRENET [BJ2-ARIN] 5788 WWWI [JW44-ARIN] 5789 EZNET [EDS8-ARIN] 5790 NETMARKET [CDA7-ORG-ARIN] 5791 CSI-GATEWAY-1 [JH54-ARIN] 5792 SIMPLE-NET [EH9-ARIN] 5793 PENTELEDATA-2 [ZP98-ARIN] 5794 NWREGION-ESD [GT205-ARIN] 5795 MVISION [MA29-ARIN] 5796 COMET [JMA7-ARIN] 5797 SECAPL-AS [MB1078-ARIN] 5798 TELEPORT [TLP-NOC-ARIN] 5799 IGCNET [MZ-ORG-ARIN] 5800-5927 DDN-ASNBLK [MIL-HSTMST-ARIN] 6056 COLBY [RBP-ARIN] 6057 ANTEL1 [ON9-ARIN] 6058 NWT-AS [SL158-ARIN] 6059 UMS2-ASN [RR599-ARIN] 6060 MAGI-NET-GW [DB1107 -ARIN] 6061 DLI-IBS [EM47-ARIN] 6062 NETPLEX [ASL2-ARIN] 6063 INETCORP-MEX-AS [FB157-ARIN] 6064 ASN-INTERVAN2 [IN2-ORG-ARIN] 6065 INFOSEL-MX [GG264-ARIN] 6066 WCOM-MAE [ZW49-ARIN] 6067 OCTACON-AS [AH423-ARIN] 6068 LG-AS [SC634-ARIN] 6069 IGC-AS [GS246-ARIN] 6070 FUTURIS [HB35-ARIN] 6071 UNISYS-AS-E [JS1325-ARIN] 6072 UNISYS-AS-C [JS1325-ARIN] 6073 CYBERENET [DNA5-ARIN] 6074 LIUNET [SP486-ARIN] 6075 LM-CORP [JBB2-ARIN] 6076 ERINET [HV-ORG-ARIN] 6078 JERSEY [BH369-ARIN] 6079 RCN-AS [ZR40-ARIN] 6080 LINKNET-LA [RG1019-ARIN] 6081 AISNET [BE-ORG-ARIN] 6082 HARVARDNET [GB433-ARIN] 6083 OLIVETTI-ZA [MJE-ARIN] 6084 INETCORP [FB157-ARIN] 6085 SITA-IPNET [SITA-NOC-ARIN] 6086 INFOMAGIC [JLG448-ARIN] 6087 IPRO-NET [KS403-ARIN] 6088 BOX [MKN-ARIN] 6089 INTERTECH-LTD [AS744-ARIN] 6090 TIA-AS [DS1008-ARIN] 6091 BOSS-TECH [MM1976-ARIN] 6092 HARFORDCC-AS [JMH9-ARIN] 6093 INFSYS-ASN [JN11-ARIN] 6094 GRAPEVINEINC [WW62-ARIN] 6095 APK-NET [ME67-ARIN] 6096 SYSNET-1 [GN96 -ARIN] 6097 ASN-CKS-CU [MH41-ARIN] 6098 WEBSPINNERS [TB466-ARIN] 6099 BAE-NET-ASN [JB390-ARIN] 6100 NAME [ZV36-ARIN] 6101 TAC-NET [RSJ-ARIN] 6102 CBSCORPORATE [PF48-ARIN] 6103 MIDWEST1 [SK864-ARIN] 6104 STARGATE [ZS34-ARIN] 6106 UCR-EDU [WS195-ARIN] 6107 GLOBENET [PR59 -ARIN] 6108 POND [BM414-ARIN] 6109 NDCORP-NET [GG121-ARIN] 6110 BOXTOP [CC127-ARIN] 6111 FHIS [DE55-ARIN] 6112 AUBURN [JS900-ARIN] 6113 GRIDNET [NET36-ORG-ARIN] 6114 VYZYNZ [VYZYNZ-NOC-ARIN] 6115 HTW [HH273-ARIN] 6116 WB-DUPLEX [TR276-ARIN] 6117 SJMERCURY [MD96-ARIN] 6118 KRI [BM200-ARIN] 6119 WWWPASS [DS559-ARIN] 6120 INTERGLOBE [IP-FIX-ARIN] 6121 RMJN-AS [JLO-ARIN] 6122 ICN-AS [ICN-NOC-ARIN] 6123 WEBPROS-ASN-1 [SD234-ARIN] 6124 MARIST [AHW-ARIN] 6125 RNP-POP-DF [RC809-ARIN] 6126 CA-INTL-AS [WG191-ARIN] 6127 IDSC-RITSEC [TK50-ARIN] 6128 CABLE-NET-1 [SO53-ARIN] 6129 RIDDLER [RH1091-ARIN] 6130 ADN-WEST [SW293-ARIN] 6131 HOSP-INFO-NET [PW321-ARIN] 6132 INGRESSNET [MH157-ARIN] 6133 MAYANET [MM1274-ARIN] 6134 EXABYTE [HB145-ARIN] 6135 INFOSEL-RF [GG264-ARIN] 6136 NWRAINET [NRN-ORG-ARIN] 6137 SISNA [JM945-ARIN] 6138 CIOE [FT10-ARIN] 6139 SAUDI [GP119-ARIN] 6140 IMPSAT-USA [TL191-ARIN] 6142 SUN-JAVA [HJ41-ARIN] 6144 SOUND-ADVICE-LTD [KD75-ARIN] 6147 UNIRED [JR2179-ARIN] 6148 EDITORA-ELSOL [GG264-ARIN] 6149 TERTIARY-2 [DM1581-ARIN] 6150 NCIFCRF [WLB5-ARIN] 6151 Q-AS [BA56-ARIN] 6152 NANDO-NET [WJS7-ARIN] 6153 ASN-SPRN-NYSERNET [SPRINT-NOC-ARIN] 6154 SPRINTLINK-NYSERNET5 [SPRINT-NOC-ARIN] 6155 SPRINTLINK-NYSERNET6 [SPRINT-NOC-ARIN] 6156 SPRINTLINK-NYSERNET7 [SPRINT-NOC-ARIN] 6157 SPRINTLINK-NYSERNET8 [SPRINT-NOC-ARIN] 6158 SPRINTLINK-NYSERNET9 [SPRINT-NOC-ARIN] 6159 TWAVE [LC284-ARIN] 6160 SMARTS-1 [YR5-ARIN] 6161 TCINC [DKB-ARIN] 6162 ISI-ISP [DB1250-ARIN] 6163 MOZCOM-NETWRK [WG21-ARIN] 6164 NET66UU [DT233-ARIN] 6165 SII-6165 [ZS34-ARIN] 6166 RADIOMAIL [DR806-ARIN] 6167 CELLCO-PART [AD600-ARIN] 6168 EK-GROUP-AS [GM334-ARIN] 6169-6170 PENTELEDATA-3 [ZP98-ARIN] 6171 WORLDGATE [KF57-ARIN] 6172 NEN-AS [ZN90-ARIN] 6173 SMARTLINK [JM610-ARIN] 6174 SPRINTLINK8 [SPRINT-NOC-ARIN] 6175 SPRINTLINK9 [SPRINT-NOC-ARIN] 6176 SPRINTLINK10 [SPRINT-NOC-ARIN] 6177 SPRINTLINK11 [SPRINT-NOC-ARIN] 6178 INLINK [SC208-ARIN] 6179 WESTWOOD [MB4025-ARIN] 6180 NIS-CT [AW352 -ARIN] 6181 FUSE-NET [RW855-ARIN] 6182 MSNMAIL-SEA [MN495-ARIN] 6183 FTN-INTERNET [BG115-ARIN] 6184 DATASTORM [TS188-ARIN] 6185 APPLE-AUSTIN [GP349-ARIN] 6186 GARCIA-ASN [ZG9-ARIN] 6187 SPRINT-ZA [GL297-ARIN] 6188 FSTW2 [ZF17-ARIN] 6189 EPFL-AS [MW118-ARIN] 6191 CECLFROC [DM1343-ARIN] 6192 UCDAVIS-CORE [RH100-ARIN] 6193 PRENSA [JC1565-ARIN] 6194 MSNMANGA1 [MN495-ARIN] 6195 GSCO [SP123-ARIN] 6196 INTERNET-SYSTEMS [JH219-ARIN] 6197 BATI-ATL [WD14-ARIN] 6198 BATI-MIA [WD14-ARIN] 6199 COOPERUNION [JH162-ARIN] 6200 UIC-AS [CN176-ARIN] 6201 ATEXT [ZE43-ARIN] 6202 NEXTRON [NO102-ARIN] 6203 ISDN-NET [JD148-ARIN] 6204 PARK-5 [CM225-ARIN] 6205 PARK-2 [CM225-ARIN] 6206 PARK-3 [CM225-ARIN] 6207 PARK-4 [CM225-ARIN] 6208 PARK-1 [CM225-ARIN] 6209 NFL2 [SG603-ARIN] 6210 NFL1 [MP1261-ARIN] 6211 SPRNTDATANET [MS1724-ARIN] 6212 IGC-DC-AS [GS246-ARIN] 6213 GETONTHENET [JB3093-ARIN] 6214 INSNET-CHI [DA190-ARIN] 6215 AS-ALTO-EXT1 [AL-ORG-ARIN] 6216 VORTEXINTSYS [OO27-ARIN] 6217 ANS-AXISNET [JR660-ARIN] 6218 MIBX [SC253-ARIN] 6219 NBIX3-AS [PJ90-ARIN] 6220 ILINK [NI28-ARIN] 6221 USCYBERSITES [EP75-ARIN] 6222 SPRINT-LTD [IG58-ARIN] 6223 USW-INTERACT3 [PL84-ARIN] 6224 USW-INTERACT8 [PL84-ARIN] 6225 USW-INTERACT6 [PL84-ARIN] 6226 USW-INTERACT5 [PL84-ARIN] 6227 USW-INTERACT4 [PL84-ARIN] 6228 BSDI-ASN [JP232-ARIN] 6229 NETVOYAGE [CV140-ARIN] 6230 GANET [BB211-ARIN] 6231 SCANA [BD570-ARIN] 6232 WINS [NW113-ARIN] 6233 NETRUS [PH291-ARIN] 6234 ETAK-NET2 [CRH2-ARIN] 6235 ICIX-AS [KL89-ARIN] 6236 BBCON [TB554-ARIN] 6237 WEBBED [JB74-ARIN] 6238 DPSC-AS [RK685-ARIN] 6239 RF-NETWORKS [JF297-ARIN] 6240 CHILENET [ER48-ARIN] 6241 IGS-GATE [FK14-ARIN] 6242 TELEMAIL [SMD-ORG-ARIN] 6243 INET-AMERICA [II14-ARIN] 6245 INTERNIC [MAK21-ARIN] 6247 SPANIT [SAM10-ARIN] 6248 WILTELUU [DO7-ARIN] 6249 RCN-AS3 [ZR40-ARIN] 6250 NORTEL-NET [IJ93-ARIN] 6251 PSNET [JAS29-ARIN] 6252 EVOLUTION [BF3-ARIN] 6253 PRUDENT [JG103-ARIN] 6254 EGGINC [JC806-ARIN] 6255 CHANNEL1 [BM82-ARIN] 6256 LTECNET2 [RM221-ARIN] 6257 NOVALINK-GW [RH499-ARIN] 6258 SUPERIOR-NET [RB153-ARIN] 6259 ASN-FIBERNET [IF29-ARIN] 6260 CROSSLINK [EP73-ARIN] 6261 VISINET [EF104-ARIN] 6262 CSIRO [JP1480-ARIN] 6263 NDIN [JF953-ARIN] 6264 AS-ALTO-EXT2 [AL-ORG-ARIN] 6265 SIVENSA [MG548-ARIN] 6266 ICONN-AS [PS503-ARIN] 6267 EPOCH-INTERNET2 [BCH3-ARIN] 6268 EXPRESS [MS57-ARIN] 6269 ATT-INTERNET2 [JB3310-ARIN] 6270-6277 NETRAIL-BLK8 [NRAIL-NOC-ARIN] 6278 NOC-BB [JM2458-ARIN] 6279 CAIS-TWO [CAIS-NOC-ARIN] 6280 SYNAPSE [EC31-ARIN] 6281 CMSA [GS228-ARIN] 6282 UNETY [SW439-ARIN] 6283 LYCEUM [JCH12-ARIN] 6284 METRONET [MG230-ARIN] 6285 EN-AS [MBK2-ARIN] 6287 SPACESTAR [DP331-ARIN] 6288 PERTECH-CA-01 [CP457-ARIN] 6289 AHM-CORP [JP220-ARIN] 6290 ALASCOM-DIAL [IH13-ARIN] 6291 MSNMAIL-TEST [MN495-ARIN] 6292 FCI [UN-ORG-ARIN] 6293 ESKIMO [RD160-ARIN] 6294 CTEKUSA [CM121-ARIN] 6295 WHIDBEY1 [MD135-ARIN] 6296 MIND [AF398-ARIN] 6297 NETBLK-ORGANIC-2 [NM43-ARIN] 6298 COX-PHX [JSW-ARIN] 6299 TELALINK [RMC6-ARIN] 6300 LCTC1 [MR144-ARIN] 6301 COMPAQ [GH47-ARIN] 6302 PHOENIX [MM278-ARIN] 6303 LEHMAN [ZL75-ARIN] 6304 IWAY-ASN1 [GB156-ARIN] 6305 AENT-AS [KW248-ARIN] 6306 T-NET-AS [IV1-ARIN] 6307 AMERICAN-EXPRESS [KE158-ARIN] 6308 ALASCOM-MIS [CH3045-ARIN] 6309 DLINC [RH43-ARIN] 6310 MAXPERTS-AS [CB231-ARIN] 6311 MEGALINK [MT523-ARIN] 6312 WESTWORLD-AS [NOC126-ORG-ARIN] 6313 PROMETHEUS [AB109-ARIN] 6314 CDC-AS [CNO2-ARIN] 6315 XMISSION [ZX9-ARIN] 6316 STARNETINC-IL [RI43-ARIN] 6317 MILLENNIANET [MH660-ARIN] 6318 CHECKFREE [KT127-ARIN] 6319 MARRIOT-ASN [RW3351-ARIN] 6320 VBC-WEST [] 6321 INTERSURF [GB89-ARIN] 6322 INFRONT [AM1151-ARIN] 6323 ENEWS [NO33-ORG-ARIN] 6324 MFS-EAST-AS [JH219-ARIN] 6325 ILLINOIS-CENTURY [ZI83-ARIN] 6326 LEBANET1 [SM147-ARIN] 6327 SHAWFIBER [SH2-ORG-ARIN] 6328 SYNAPSETOASN1 [SL328-ARIN] 6330 WORLDWIDE-AS [CF150-ARIN] 6331 AIT-NET [AA74-ARIN] 6332 TELNOR [SM932-ARIN] 6333 INFOCOM [AM262-ARIN] 6334 ASN-TSG [TS39-ARIN] 6335 NTRNET [WM41-ARIN] 6337 HIWAAY [HOS654-ORG-ARIN] 6338 MIX-COMMUNICATIONS [LW55-ARIN] 6339 I95-NET [CD34-ARIN] 6340 EMPIRE [DN86-ARIN] 6341 WIEC [CS92-ARIN] 6342 ITESM-AS2 [AS3919-ARIN] 6343 PICS [TR1111-ARIN] 6344 VALUENET [DA817-ORG-ARIN] 6345 ZIPNET-AS [JW109-ARIN] 6346 VUI [GA108-ARIN] 6347 DIAMOND [ZS36-ARIN] 6348 BETTYPLATFORMS [JD633-ARIN] 6349 TRCACCESS [RK296-ARIN] 6350 BAWAVEDC [CW408-ARIN] 6351 PIX-NET [SL401-ARIN] 6352 ETRADE-AS [MS248-ARIN] 6353 NETZONE [CJA-ARIN] 6354 LYCOS [NT24-ARIN] 6355 VALLEYNET [VNO3-ARIN] 6356 NERDCNET [DP173-ARIN] 6357 DBTECH [DB466-ARIN] 6358 MERC-AS [JF310-ARIN] 6359 INTREPID [ZS34-ARIN] 6360 UNIVHAWAII [JK978-ARIN] 6361 4GL-NET [FB7-ARIN] 6362 VAULTLINE-AS [NOC53-ARIN] 6363 CABLETRON-SYSTEMS-INC [DD1098-ARIN] 6364 ATLANTIC-NET [TJ2-ORG-ARIN] 6365 I1 [TF160-ARIN] 6366 PDXNET [AN2-ORG-ARIN] 6367 NWLINK [IG58-ARIN] 6368 NETNITCO-ASN [HO16-ORG-ARIN] 6369 NETRUNNER [MN37-ARIN] 6370 LUCENT-ASN [FNO-ARIN] 6371 AMERICATEL [IA63-ARIN] 6372 DCANET [AW99-ARIN] 6373 OPUS1 [JMS56-ARIN] 6374 MFS-WEST-AS [JH219-ARIN] 6375 XROADS [CC104-ARIN] 6376 BRODER207 [JC1630-ARIN] 6377 4JNET [MS582-ARIN] 6378 NWNT [PP402-ARIN] 6379 ALINK [ALINK-NOC-ARIN] 6380-6389 BELLSOUTH-NET-BLK [DR791-ARIN] 6390 KANSASCITY [BJ235-ARIN] 6392 MWCI-NET [MNO-ARIN] 6393 PRYSM-AS [AS38-ORG-ARIN] 6394 DATA-BROADCASTING [BH710-ARIN] 6395 BROADWING [ZB13-ARIN] 6396 COASTALNET-ASN [JJ322-ARIN] 6397 LIBBY [TP71-ARIN] 6398 TELEDESIC [PDS3-ARIN] 6399 NEREP-ASN [FNO-ARIN] 6400 ASN-CODETEL [REG9-ARIN] 6401 ATT-CA-6401 [ZA95-ARIN] 6402 ONECALL [RI69-ARIN] 6403 OPN [SD81-ARIN] 6404 FACTSET [JY123-ARIN] 6405 AIN [AI-ORG-ARIN] 6406 CEBAF [SCP10-ARIN] 6407 PRIMUSTCAN [ZP40-ARIN] 6408 PRADO [DM1084-ARIN] 6409 RESEARCHMAG [MR336-ARIN] 6410 ASICOM [NO14-ORG-ARIN] 6411 INSWEB [MM2-ORG-ARIN] 6412 KW [SKG2-ARIN] 6413 SOCOMM [TG357-ARIN] 6414 IPNET [LNQ-ARIN] 6415 SILICONREEF [JB958-ARIN] 6416 NOVELL-AS [LD386-ARIN] 6417 AGENTS-INC [MB144-ARIN] 6418 SATELNET-AS [YM12-ARIN] 6419 IDD [EB557-ARIN] 6420 INTERPLAY [NR323-ARIN] 6421 GLOBEINTERNET [RV338-ARIN] 6422 JUNCTION [IM31-ARIN] 6423 EASYSTREET-ONLINE [EH284-ARIN] 6424 NETROVER [WA19-ARIN] 6425 TEN [KS688-ARIN] 6426 NETCOAST [NM180-ARIN] 6427 HURRICANE-ELEC [ZH17-ARIN] 6428 CDM [CM553-ARIN] 6429 ATTLA-CL-AS [AL318-ARIN] 6430 DIGITALINK [BS801-ARIN] 6431 ATT-RESEARCH [SA643-ARIN] 6432 DOUBLECLICK [DM2027-ARIN] 6433 JLC [JL166-ARIN] 6434 OPNET [IN17-ARIN] 6435 LAVANET-ASN [LSS-ORG-ARIN] 6436 INTERACCESS-NET [MD347-ARIN] 6437 NETREX [NOC35-ARIN] 6438 OUTWEST [ER111-ARIN] 6439 WEBMATE [TI116-ARIN] 6440 EMF-AS [NA164-ARIN] 6441 BIGBOOK [JMP4-ARIN] 6442 GLOBALLINK-ASN [TR576-ARIN] 6443 EMANON [CMR9-ARIN] 6444 SBSIB [NO85-ORG-ARIN] 6445 SIEMENS-US [ADJH-ARIN] 6446 SIEMENS-IPO [ADJH-ARIN] 6447 UOREGON-IX [DMM65-ARIN] 6448 QAD [HO40-ORG-ARIN] 6449 SPRINT-ISP [SH1170-ARIN] 6450 PIXNET-AS [AP8-ARIN] 6451 ACCESSCOMNET [SW112-ARIN] 6452 WESTWORLD [AP1017-ARIN] 6453 TELEGLOBE-AS [INO1-ARIN] 6454 PIONET-NET [LS399-ARIN] 6455 TOMCO [NRAIL-NOC-ARIN] 6456 ALTOPIA [AH99-ORG-ARIN] 6457 KDCOL-ASN [DM1004-ARIN] 6458 GUATEL [AG684-ARIN] 6459 I-2000 [SB166-ARIN] 6460 INTERNEXT [DD158-ARIN] 6461 ABOVENET [NOC41-ORG-ARIN] 6462 NATGEOGRAPH-AS [MP580-ARIN] 6463 ATTCTSC-1 [ZA95-ARIN] 6464 FUTURELABS [MS142-ARIN] 6465 PACWEST [GJ29-ARIN] 6466 MULTIVERSE [JGR2-ARIN] 6467 ESPIRECOMM [VI11-ARIN] 6468 FAXSAV-AS [ZE40-ARIN] 6469 ARTEMIS [AD147-ARIN] 6470 WEB2000-ASN [MV142-ARIN] 6471 ENTELCHILE [LE89-ARIN] 6472 NETASSET [ZN22-ARIN] 6473 MINDPORT [GGS2-ARIN] 6474 FLASHNET-AS [FN-ORG-ARIN] 6475 KESMAI [SB259-ARIN] 6476 MIWORLD [WS551-ARIN] 6477 DIRECTMEDIA-AS [JP573-ARIN] 6478 ATT-INTERNET3 [YY36-ARIN] 6479 MCHENRY [DR726-ARIN] 6480 LITLE [FL193-ARIN] 6481 SWRI [EP201-ARIN] 6482 NYNEX-ITC [CP38-ARIN] 6483 DIGEX-AS3 [EK6-ARIN] 6484 PWCI-AS [PC-ORG-ARIN] 6485 TDC-AS [ML2331-ARIN] 6486 NEWREACH [DF890-ARIN] 6487 GUATEMALA-NET [AB129-ARIN] 6488 AMUG [DS99-ARIN] 6489 INOW-AS [WC73-ARIN] 6490 DESERTEYE [TB89-ARIN] 6491 TELEKACHINA [MG57-ARIN] 6492 PCCD [VM102-ARIN] 6493 CHESCO [TR246-ARIN] 6494 IDCI [HOS899-ORG-ARIN] 6495 BANCO-INTERNACIONAL [JG120-ARIN] 6496 ANET [DB3697-ARIN] 6497 ACQUION [JM1867-ARIN] 6498 INTERCALL [PN78-ARIN] 6500 NIELSEN [CN46-ARIN] 6501 SOUTHERNET [JB620-ARIN] 6502 FRONTIER-ASN [IA132-ARIN] 6503 AVANTEL [JS3397-ARIN] 6504 NOVAGATE [DRM2-ARIN] 6505 GLOBAL-ONE-BRASIL [CO214-ARIN] 6506 HOYT [DH303-ARIN] 6507 REDROSESUPERNET [KH357-ARIN] 6508 WARENETASN [LW7-ARIN] 6509 CANARIE-NTN [RH802-ARIN] 6510 BYU [RK19-ARIN] 6511 STRATANET [BG72-ARIN] 6512 GLOBAL2000 [AW55-ARIN] 6513 PROXIMUS [JR107-ARIN] 6514 SRMC [CC412-ARIN] 6515 INTERSTICE [RD370-ARIN] 6516 TRUENET [ZT20-ARIN] 6517 YIPESCOM [IY23-ARIN] 6518 CIX-GCCC [SSS18-ARIN] 6519 KETCHUM [CFW2-ARIN] 6520 NOLA-INXP-1 [EW206-ARIN] 6521 AROSNET [AR674-ARIN] 6522 LEHIGH [MM149-ARIN] 6523 NETLINK207 [CW177-ARIN] 6524 ASN-GE-IS-NAP [BS3030-ARIN] 6525 INFO-HIGHWAY [LH143-ARIN] 6526 MAVERICK-BBS [HK214-ARIN] 6527 MASSACHUSETTS [JW1963-ARIN] 6528 WORLD-LYNX [JC2401-ARIN] 6529 PLAN-B [RLD58-ARIN] 6530 XENSEI [JM28-ARIN] 6532 SGN [AN28-ARIN] 6533 VARNER [MP5-ARIN] 6534 OCEANIC-CABLE [CZ45-ARIN] 6535 CHILESATSER [AIV-ORG-ARIN] 6536 MOUNTAINNET [SA570-ARIN] 6537 ATTCLDS-PDA [RA262-ARIN] 6538 KINTEK-AS [DX9-ARIN] 6539 GROUPTLCOM [ZG41-ARIN] 6540 CALWEB [CS1240-ARIN] 6541 GTE-INS [JH305-ARIN] 6542 MICL-AS-MELBOURNE [JS1501-ARIN] 6543 ALTERNEX-AS [FSF3-ARIN] 6544 ADICON-ASN [JW1600-ARIN] 6545 TRUEVISION [RC2086-ARIN] 6546 AGAIN-NET-1 [TE214-ARIN] 6547 DCT-ASN [AS18-ARIN] 6548 GLOB [AW151-ARIN] 6549 VIEWPOINTDATALABSASN [AA134-ARIN] 6550 SBSERVICES-AS [CN268-ARIN] 6551 ENHANCEDTECH [NE8-ORG-ARIN] 6552 C2NET [CH1196-ARIN] 6553 DIGISLE [NR-ORG-ARIN] 6554 BDM [EC162-ARIN] 6555 RCN-AS6555 [ZR40-ARIN] 6557 CLINIC [CC1674-ARIN] 6558 SKYGATE [BS2053-ARIN] 6559 NCIH [NC-ORG-ARIN] 6560 GEM [RT753-ARIN] 6561 OPTIG [GS546-ARIN] 6562 WALLTECH [NO10-ORG-ARIN] 6563 NECANET [NNO2-ORG-ARIN] 6564 CONSTANT [SK291-ARIN] 6565 FREDNET-AS [NOC70-ORG-ARIN] 6566 TROWE-NET [CT526-ARIN] 6567 CIA [FG84-ARIN] 6568 BOLNET [CP174-ARIN] 6569 NATIONWIDEASN [CLW-ARIN] 6570 ISOANET [DS1430-ARIN] 6571 CU-ONLINE [DR43-ORG-ARIN] 6572 USVI-ASN [PJD6-ARIN] 6573 MPATH [BB853-ARIN] 6574 WVS-ASN [DWG6-ARIN] 6575 WISEASN [CS324-ARIN] 6576 SERVNET [SL95-ARIN] 6577 OSSINC [AH256-ARIN] 6578 AXXIS [AI87-ARIN] 6579 MEMORIALU [BP143-ARIN] 6580 RAPIDNET-ASN [GE48-ARIN] 6581 PATHLINK [KL219-ARIN] 6582 FRII [AWN-ARIN] 6583 WEBSECURE [BH569-ARIN] 6584 GPS-AS [PO184-ARIN] 6585 AIMTECH [BS1683-ARIN] 6586 WEBCENTRIC [MV282-ARIN] 6587 AMICUS-ASN [LK148-ARIN] 6588 IN-QUICK [BV57-ARIN] 6589 BTCPROD [DL724-ARIN] 6590 SUPERNET [AA25-ARIN] 6591 INGR-ASN [DRJ-ARIN] 6592 NETUS [AB823-ARIN] 6593 CITIZEN1 [MH1656-ARIN] 6594 MICROSERV-1 [KH315-ARIN] 6595 DODDSEUR [DLA3-ARIN] 6596 ASN-BUNGI [DR223-ARIN] 6597 COMSTAR [EL42-ARIN] 6598 CYBERZONE [SB1182-ARIN] 6599 ICCOM-ASN [NOC57-ORG-ARIN] 6600 GHGNETASN [DS6-ORG-ARIN] 6601 SOLTEC-AS [CF36-ARIN] 6602 LS-NET [BW95-ARIN] 6603 MTWEST208 [DJB20-ARIN] 6604 PTW [MP187-ARIN] 6605 ATSC-ASN [DW20-ARIN] 6606 WIZNET [HW812-ARIN] 6607 HOMENET [SB598-ARIN] 6608 NBTEL-AS1 [KM2276-ARIN] 6609 MIINT [BB521-ARIN] 6610 INTERSTATE [TH305-ARIN] 6611 MAGICCARPET [ARD2-ARIN] 6612 JAGUNET [JH-ARIN] 6613 DIGITAL-MEDIA [MK358-ARIN] 6614 USCC-ASN [ED42-ARIN] 6615 PCIS [DPK3-ARIN] 6616 DATASTAR [JR225-ARIN] 6617 PBB-MY [DMS3-ARIN] 6619 SIGMA-NET [SOP1-ARIN] 6620 ARNET3 [DEH3-ARIN] 6621 HNS-DIRECPC [BD248-ARIN] 6622 ZENOX [NG52-ARIN] 6623 CNET-BGP [CAD5-ARIN] 6624 GOWER [DG385-ARIN] 6625 UI [JM448-ARIN] 6626 MULTITASKING [ZW6-ARIN] 6627 GRAPEVINE [MC391-ARIN] 6628 PPS [GS1124-ARIN] 6629 NOAA-AS [JK464-ARIN] 6630 LOA [DP35-ARIN] 6631 NN-CAE [NNO3-ARIN] 6632 IMAGINATION [SW840-ARIN] 6633 CMGDI [IP21-ORG-ARIN] 6634 WTCI [IW6-ARIN] 6635 NARROWLINE207 [EST-ARIN] 6636 ARMIGERON [CW393-ARIN] 6637 INFOEX [SPRINT-NOC-ARIN] 6638 OANET [DP260-ARIN] 6639 CWCAYMAN [AM126-ARIN] 6640 LCI [AC755-ARIN] 6641 SPORTSLINE [ZS111-ARIN] 6642 DUNBRAD [DM3097-ARIN] 6643 EPRESENCE [ZP109-ARIN] 6644 PARSECWEB-AS [GS244-ARIN] 6645 DBS2-MIA-DOM [TR410-ARIN] 6646 AETNA [JD256-ARIN] 6647 VFI-ICD [MR323-ARIN] 6648 SKY-INTERNET [MD911-ARIN] 6649 SIRWEB-NET [HD71-ARIN] 6650 DTI-AS [HD7-ORG-ARIN] 6652 GLOBECOMM-ASN [ZE40-ARIN] 6653 PRIVATEI [JB1019-ARIN] 6654 PROTEON [HOS560-ORG-ARIN] 6655 GTE-IM [EWZ-ARIN] 6656-6911 RIPE-ASNBLOCK6 [RIPE-NCC-ARIN] 6912-6915 HCSNET-ASNBLK [MD205-ARIN] 6916 EXCO-NA [TC695-ARIN] 6917 MULTEXSYS [SF550-ARIN] 6918 PENNCOM [DL186-ARIN] 6920 TRADEMED-AS [SL1020-ARIN] 6921 ARACHNITEC [JN104-ARIN] 6922 TEXASAGENCYNET [JK118-ARIN] 6923 OKNET [JW2202-ARIN] 6924 STARTRIB [RJ413-ARIN] 6925 DIGADV-AS [RP1024-ARIN] 6926 SOLLUNA-AS [KL89-ARIN] 6927 GRUPOIMSA [JLG4-ARIN] 6928 RAINNET [JU103-ARIN] 6929 COSITE-ASN-1 [CS1340-ARIN] 6930 GOLD-AS [MK634-ARIN] 6931 RINGLING [DGG-ARIN] 6932 EPNET [DR1482-ARIN] 6933 HARBING-ASN [JM1378-ARIN] 6934 ATT-COLUMBUS-AS [JY149-ARIN] 6935 IDG-ISG [MH7-ARIN] 6936 NETGATE-SC1 [NNO-ARIN] 6937 WWWPROD-AS [CJ19-ARIN] 6938 GREENLAKE-IOC [AH840-ARIN] 6939 HURRICANE [ML158-ARIN] 6940 COMSTREAM [DD471-ARIN] 6941 HEALTHEON [KV163-ARIN] 6942 CLARINET [OC6-ARIN] 6943 INFOTECHSYS [HI2-ORG-ARIN] 6944 VRIO-6944 [VIA4-ORG-ARIN] 6945 SVNET [RI14-ARIN] 6946 MTELTECH [KJ17-ARIN] 6947 AMCITY [DK656-ARIN] 6948 INTERCOM [NOC228-ORG-ARIN] 6949 CHARLES-SCHWAB [RW1153-ARIN] 6950 LAMBDA [JD355-ARIN] 6951 SPAR-AERO [JJ363-ARIN] 6952 WMEX [FL157-ARIN] 6953 NETONLINE208 [TH499-ARIN] 6954 NACS [GB338-ARIN] 6956 INTERACT-ASN1 [MS1233-ARIN] 6957 SPIN-MEXICO [JK178-ARIN] 6958 DTS-WORLDWIDE [AH933-ARIN] 6959 DTS-AFRICA [AH933-ARIN] 6960 DTS-INTER-AMER [AH933-ARIN] 6961 DTS-EAST-ASIAN [AH933-ARIN] 6962 DTS-EUROPE [AH933-ARIN] 6963 DTS-CANADA [AH933-ARIN] 6964 DTS-NEAR-EAST [AH933-ARIN] 6965 DTS-SOUTH-ASIAN [AH933-ARIN] 6966 USDOS [KA508-ARIN] 6967 ORBIS-AS [MC437-ARIN] 6968 PEER-ZA [MJE-ARIN] 6969 N2K-ASN [WM194-ARIN] 6970 BSG-AIR-NET [GW635-ARIN] 6971 ATG-1 [ZA22-ARIN] 6972 INETWEST [MK42-ARIN] 6973 LOMBARD-AS [DD1560-ARIN] 6974 ROSS-ASN [HDR8-ARIN] 6975 LEX2 [DE539-ARIN] 6976 GTE-INS2 [JH305-ARIN] 6977 IAC-AS [ZI42-ARIN] 6978 SECURITIES-AS [KF470-ARIN] 6979 SAP [MB1563-ARIN] 6980 CAJUNNET-AS [CB492-ARIN] 6981 FDNCOM [BL551-ARIN] 6982 VECNET [RAM4-ARIN] 6983 ITCDELTA [ZI7-ARIN] 6984 NYNEX-AS [DW317-ARIN] 6985 DIXON [JD355-ARIN] 6986 ANGEL-NETWORKS [NW27-ARIN] 6987 AXIONINTERNET [CH356-ARIN] 6988 STREAM [EO16-ARIN] 6989 GTSI [TG795-ARIN] 6990 ONE-O [OS49-ARIN] 6991 USLD-ASN [MT380-ARIN] 6992 NETSCAPE-AS [DD3034-ARIN] 6993 INTERNAP-SEA [INO3-ARIN] 6994 ISPNET [JF122-ARIN] 6995 BAISNJ [CW408-ARIN] 6996 ATT-CANADA [ZA95-ARIN] 6997 ATTCTSC-2 [ZA87-ARIN] 6998 BRITEVOICE [JG539-ARIN] 6999 UU-ITNNET [IRG1-ARIN] 7000 DBEACH [NB235-ARIN] 7001 ECINS [EY85-ARIN] 7002 MEXICO-COMMUNICATES [VM168-ARIN] 7003 BRIGADOON [SA583-ARIN] 7004 CTCMUNDO [ZT37-ARIN] 7005 ISOL-AS [MJD3-ARIN] 7006 CYBERNEX [DA571-ARIN] 7007 FLIX [VB14-ARIN] 7008 TIBA-AS [RA374-ARIN] 7009 QDECK-MDR [BB685-ARIN] 7010 DRKNGS-ASN [DRK6-ARIN] 7011 CITLINK [RB2482-ARIN] 7012 PACIFICNET [TB412-ARIN] 7013 NETSELECT [ACS24-ARIN] 7014 ANAWAVE [SS2039-ARIN] 7015-7016 ATT-BBND-A [IA122-ARIN] 7017 SCRR-7015 [ZS30-ARIN] 7018 ATT-INTERNET4 [JB3310-ARIN] 7019 VRIO-7019 [VIA4-ORG-ARIN] 7020 QDATA-AS [CSN-NOC-ARIN] 7021 BAISPHIL [CW408-ARIN] 7022 SBTAS [JV292-ARIN] 7023 ICI [CW142-ARIN] 7024 FTEL [NOF3-ARIN] 7025 AMLIBS [DS3240-ARIN] 7026 IME-AS [BP206-ARIN] 7027 ENGAGE [ENO-ORG-ARIN] 7028 IBS [BK416-ARIN] 7029 ALLTELNET [ST1875-ARIN] 7030 FOOTHILL [RW274-ARIN] 7031 MOONLIGHT-AS [AL882-ARIN] 7032 NMB-AS [AGG-ARIN] 7033 FIREWALL [MP400-ARIN] 7034 IMEDIA [JW1730-ARIN] 7035 ECLIPSE [AW253-ARIN] 7036 WESLINK-GW1 [PT332-ARIN] 7037 GSTINTERNET-ASN [BA-ORG-ARIN] 7038 ITESM-CEGS [AS3919-ARIN] 7039 OAKNET [JMV6-ARIN] 7041 DALCOMP [DM2860-ARIN] 7042 OLYMPUSNET [NS44-ARIN] 7043 FASEB-AS [VXS-ARIN] 7044 CSACNETWORKS [KH556-ARIN] 7045 WEATHER [JP1346-ARIN] 7046 UUNET-CUSTOMER [OA12-ARIN] 7047 TDSYS [DW571-ARIN] 7048 FASTLANE-BR [DP1437-ARIN] 7049 SMINTER-ASN [MC90-ARIN] 7050 UW-MILWAUKEE-AS1 [JGO-ARIN] 7051 ASN-SNS [DJS2-ARIN] 7052 HTS-AS [DW1168-ARIN] 7053 AIMEDIA [KM1301-ARIN] 7054 MERCK [AS213-ARIN] 7055 QIS [KB337-ARIN] 7056 DATANET-AS [FL267-ARIN] 7057 MANAGEDNETWORK [CZ41-ARIN] 7059 HOTSITES [HRA19-ORG-ARIN] 7060 EA [EH3-ORG-ARIN] 7061 PLANET-GROUP [SM914-ARIN] 7062 NACCESS [TH2-ORG-ARIN] 7063 INSIDE-RJ-BR [CM82-ARIN] 7064 ACI-NET-AS [CK232-ARIN] 7065 SONOMA [SCD-ARIN] 7066 ACCESS-VIRGINIA [PB123-ARIN] 7067 TECHINTER [JS2829-ARIN] 7068 PFIZERNET [MA1169-ARIN] 7069 NORTH-AMERICAN-INT [WL90-ARIN] 7070 NSN-NET-AS [HR3-ORG-ARIN] 7071 PENET-ASN [DR441-ARIN] 7072-7077 NN-RS00-RS06 [NNO3-ARIN] 7078 MONMOUTH [CB440-ARIN] 7079 AYRIX [NE5-ORG-ARIN] 7080 ECSANET [EF339-ARIN] 7081-7085 CARIN-AS-BLOCK [WM110-ARIN] 7086 WOMBATNET [NOC19-ORG-ARIN] 7087 COLOMSAT [DFL5-ARIN] 7088 NEONSOFT [IN47-ARIN] 7089 REALITYON [CE364-ARIN] 7090 IDNET-AS2 [RS81-ARIN] 7091 VIANET-ASN [JM7712-ARIN] 7092 ICIGAMES [JM4259-ARIN] 7093 REM-AS [HK8-ARIN] 7094 WA-IXA [VC7-ARIN] 7095 NETUSA [DW113-ARIN] 7096 DSOURCE [CS86-ARIN] 7097 WEBVISION [JM667-ARIN] 7098 CORE1-WWISPNET [ZW42-ARIN] 7099 NORTELRCH [JD2076-ARIN] 7100 PTC-AS [JC1915-ARIN] 7101 SANDBOX [DH219-ARIN] 7102 APLATFORM-AS [MT70-ARIN] 7103 PTY [FT82-ARIN] 7104 APC-AS [SM1977-ARIN] 7105 DOWJONES-AS [RS854-ARIN] 7106 OHIOBRIGHTNET [RP539-ARIN] 7107 3DO [AS342-ARIN] 7108 BIZNEXUS [DG731-ARIN] 7109 DATEK [PS404-ARIN] 7110 QUEBEC-NET [MP247-ARIN] 7111 ASPEN-SYSTEMS [TP892-ARIN] 7112 MTSI-ASN [TB1119-ARIN] 7113 NFIC-AS [RR231-ARIN] 7114 USFG-AS [JRC3-ARIN] 7115 INDEPTH-DATA-AS [RS1465-ARIN] 7116 TOYOTA-EXT [DK101-ARIN] 7117 NETCAST [AMM14-ARIN] 7118 4DCOMM [NOC8-ORG-ARIN] 7119 FORSYTHCOUNTY [JAM2-ARIN] 7120 CITI-AS [JP139-ARIN] 7121 PALACEGROUP [RM2668-ARIN] 7122 MTS-AS [JP1488-ARIN] 7123 NILENET-T1-0 [MD461-ARIN] 7124 LJX [HW193-ARIN] 7125 NET-UDEM-AS [VG-ARIN] 7126 UNITEDMEDIA [PPM6-ARIN] 7127 SCE [EG512-ARIN] 7128 ITN [AW123-ARIN] 7129 ANC-AS [ND5-ORG-ARIN] 7130 THEMALL [MF1226-ARIN] 7131 ITE-AS [JAS57-ARIN] 7132 SBIS-AS [ZS44-ARIN] 7133 NYPP-AS [KJ13-ARIN] 7134 OTBB [HM568-ARIN] 7135 KOHALA [WRS28-ARIN] 7136 ONLY [DW19-ARIN] 7137 TELEMATIX [YM14-ARIN] 7138 CRAWFORD-ANS [JP114-ARIN] 7139 BIZTRAVELCAM [BE1092-ARIN] 7140 DIMCOM [DD306-ARIN] 7141 AUS-AS [AN48-ARIN] 7142 AZSTARNET [AN320-ARIN] 7143 CLEAR-DATA [AA327-ARIN] 7144 VOYAGERONLINE [VON-ARIN] 7145 MENO [JB3732-ARIN] 7146 GABN [GLC5-ARIN] 7147 NEWSALERT-NET [AL29-ARIN] 7148 GRAPHNET-NET [HL346-ARIN] 7149 TAMNET-MX-ASN [AD1010-ARIN] 7151 BAYAREA-AS [GN52-ARIN] 7152 REDCROSS-ASN [TN3-ARIN] 7153 ASN-NEPOOL [SH1886-ARIN] 7154 FDDNET-ASN [BT818-ARIN] 7156 AGATE2 [MF132-ARIN] 7157 AMERCOL [EMR-ARIN] 7158 NETFEED-AS [EJJ3-ARIN] 7159 NTTCNET [SPW1-ARIN] 7160 NETDYNAMICS [MS3800-ARIN] 7161 USW-INTERACT7 [TB1741-ARIN] 7162 ITANET-BR-AS [SGS6-ARIN] 7163 NYLI-AS [TS3262-ARIN] 7164 LIPS-AS [DW1168-ARIN] 7165 MONY-ASN [DK64-ARIN] 7166 C-ECOMM [ABC16-ARIN] 7167 ANTEL-AS [EG624-ARIN] 7168 NW-LINK [HNL-ORG-ARIN] 7169 WALRUS [WIH-ORG-ARIN] 7170 ATT-DISC [GN794-ARIN] 7171 TM-NET-AS [DS2483-ARIN] 7173 REDINAOE-PUE [SCC12-ARIN] 7174 ONWARD-ASN [OH-ORG-ARIN] 7175 AUSSIE [AK600-ARIN] 7176 GENUITY-AS7176 [CS15-ARIN] 7177 DFWNET [ID54-ARIN] 7178 CLR-AS [PDH5-ARIN] 7179 PCSERVICE [JG2503-ARIN] 7180 HILINESWHITESTAR [JAG13-ARIN] 7181 DGS-NET [DC149-ARIN] 7182 CMGDI-EAST [IP21-ORG-ARIN] 7183 SALLIEMAE [ZS31-ARIN] 7184 UNIVERACRUZANA [GL807-ARIN] 7185 QNIS-ASN [PJ271-ARIN] 7186 NETRICS-INC [JT1776-ARIN] 7187 RITE-AS [NJ4-ARIN] 7188 ETCNET-AS [TK41-ARIN] 7189 ATT-CA-7189 [ZA95-ARIN] 7190 CYBORGANIC [JD682-ARIN] 7191 CSWNET [JE33-ARIN] 7192 BAISNFK [CW408-ARIN] 7193 BAISPIT [CW408-ARIN] 7194 CORECOMM [LE67-ARIN] 7195 INTERRED [VJ2-ORG-ARIN] 7196 TRINET-AS [SC137-ARIN] 7197 SMS [DWD3-ARIN] 7198 SCR [DWD3-ARIN] 7199 INTERNETCO-AS [LG991-ARIN] 7200 G1ENGLAB [DA74-ARIN] 7201 TELESCAN [LN147-ARIN] 7202 FAMU [BG616-ARIN] 7203 SHORE [DJO2-ARIN] 7204 GIS [SB391-ARIN] 7205 POINTBREAK [MS463-ARIN] 7206 NETDIRECT [MW349-ARIN] 7207 INTREXNET [ID95-ORG-ARIN] 7208 MEGANET [SS276-ARIN] 7209 HOOKUP-NET-WIN-A [HCR2-ORG-ARIN] 7210 SPRINT-ISP2 [ML1209-ARIN] 7211 GBLNAPSBOSFEED [FG84-ARIN] 7212 VANDERBILT [DB161-ARIN] 7213 TEGRIS-CORP [MR1071-ARIN] 7214 CURSUS [ER111-ARIN] 7215 AHNET-AS [EL217-ARIN] 7216 RJL-AS [RJL3-ARIN] 7217 EARTHWEB [NO37-ORG-ARIN] 7218 DUNBAR [DWD3-ARIN] 7219 HOMECOM [DK1673-ARIN] 7220 DIAMONDMM [BS1240-ARIN] 7222 SBIS-KCSYMO [ZS44-ARIN] 7223 CSRLINK [DW585-ARIN] 7224 AMAZON-AS [AC6-ORG-ARIN] 7225 GLOBALNETCORP [GNA4-ARIN] 7226 VONOC [DP1021-ARIN] 7227 KPMGUS-AS [KN662-ARIN] 7228 MCLEOD [AE189-ARIN] 7229 GLOBAL-ONE-RESTON [GO-ORG-ARIN] 7230 ORBITEL [JK1715-ARIN] 7231 ISP-ZA [AM738-ARIN] 7232 USWEB [UNO2-ORG-ARIN] 7233 YAHOO-US [JPH17-ARIN] 7234 RUSSELL [DH2762-ARIN] 7235 LANMINDS [GM41-ARIN] 7236 UNIREGIO [GCT3-ARIN] 7237 LFCI [LL146-ARIN] 7238 UVSG [UV-ORG-ARIN] 7239 COMSOURCE-AS [TD1501-ARIN] 7240 URAEUS [JEM-ARIN] 7241 INFINEX-SF [GB888-ARIN] 7242 NORTEL-TECHNOLOGY [HN30-ORG-ARIN] 7243 HDSHQ-AS [CC46-ARIN] 7244 ALAMEDANET [NOC11-ORG-ARIN] 7245 TECLINK-AS [MLB20-ARIN] 7246 BMS-AS [RG92-ARIN] 7247 MOJO [DB144-ARIN] 7248 SURENET [DS1572-ARIN] 7249 SKYSCAPE [RS1767-ARIN] 7250 TEIR-INET1-ASN [DL1593-ARIN] 7251 TEIR-CORE1-ASN [DL1593-ARIN] 7252 LTINET [AS2049-ARIN] 7253 IPA-AS [DS1193-ARIN] 7254 SURFSOUTH [JP1213-ARIN] 7255 SAFCO [PS1737-ARIN] 7256 VIACOM-AS [SP362-ARIN] 7257 PREMIERECOM [MJW-ARIN] 7258 ETHOS-COMM [ZC113-ARIN] 7259 NETGEN [DC2748-ARIN] 7260 NORLIGHT [NA16-ORG-ARIN] 7261 JDEDWARDS [KG640-ARIN] 7262 CAIS-THREE [CAIS-NOC-ARIN] 7263 GOFASTNET [HA2-ORG-ARIN] 7264 SBCC [SB-ORG-ARIN] 7265 SNOWHILL [NM102-ARIN] 7266 INFOSEEK [SS1865-ARIN] 7267 GLOBALCOMMERCE [HOS203-ORG-ARIN] 7268 ATHENET [DP23-ORG-ARIN] 7269 ONESOURCE [BT900-ARIN] 7270 NET2PHONE [ER123-ARIN] 7271 LOOKAS [ZL29-ARIN] 7272 TCIMET [MK525-ARIN] 7273 TPLNET [RWN3-ARIN] 7274 TKI [MM1116-ARIN] 7275 WINGBERLIN [HM750-ARIN] 7276 UH-AS [APT-ARIN] 7277 NEWEASTWIRELESS [RL1867-ARIN] 7278 ACCRUE [BP33-ARIN] 7279 AMOSPRESS [DB3181-ARIN] 7280 INKTOMI [AB474-ARIN] 7281 BOOZ-AS [BG1375-ARIN] 7282 DXNET-AS [SS3635-ARIN] 7283 THERIVER [MN199-ARIN] 7284 CDSINTERNET [JM468-ARIN] 7285 SPACENET [SA222-ARIN] 7286-7288 PBI-NET-BLK2 [PIA2-ORG-ARIN] 7289 PLATINUM [JSF11-ARIN] 7290-7294 SBIS-BLK [ZS44-ARIN] 7295 NETWORKAMERICA [PK374-ARIN] 7296 ALCHEMYNET [JH334-ARIN] 7297 AP-AS [RP735-ARIN] 7298 TELERJ-BR-AS [JMB59-ARIN] 7299 PRONET [JX3-ARIN] 7300 GBLX-2AS [IA12-ORG-ARIN] 7301 NAS-AS [ME8-ARIN] 7302 ADVANCEDINTERNETCOMM [KS1460-ARIN] 7303 TASF [AI88-ARIN] 7304 THECIA [SL599-ARIN] 7305 INNERSET-AS [DW793-ARIN] 7306 ASIANDEVBANK [MM171-ARIN] 7307 HIPPOCAMPUS [MN37-ARIN] 7308 SPRINT-PCS [PM1803-ARIN] 7309 VMC-INTL [ZU60-ARIN] 7310 GARTNERGROUP [RF1399-ARIN] 7312 SSA-US [MN854-ARIN] 7313 CERTISIGN-AS [AIP5-ARIN] 7314 TIS-ASN [TIS-ORG-ARIN] 7315 GRM [EP235-ARIN] 7316 NETECH [CM1879-ARIN] 7317 CSPS-AS [RS148-ARIN] 7318 FOCALINK-AS [AC1686-ARIN] 7319 WEBSPAN [DL322-ARIN] 7320 LANCITY [BA14-ARIN] 7321 LNET-ASN [GB136-ARIN] 7322 MARSWEB [LS51-ARIN] 7323 ADVEST [MH982-ARIN] 7324 APPLIEDBUSINESS [JG619-ARIN] 7325 UAT-ASN [JP139-ARIN] 7326 NUNET [TW1261-ARIN] 7327 7THLEVEL [GO219-ARIN] 7328 CHOP [DRL36-ARIN] 7329 ATT-CMS [JM4663-ARIN] 7330 INTERNETLABS [RC60-ARIN] 7331 IARC [JS2477-ARIN] 7332 IQUEST-AS [RH159-ARIN] 7333 WINNET [JM868-ARIN] 7334 WALLSTREET [DS1287-ARIN] 7335 LOOP [KK1140-ARIN] 7336 COMPASS [TR143-ARIN] 7337 SNIP [AA205-ARIN] 7338 GLOBALENET [EWR2-ARIN] 7339 SIEMENS-CREDIT [DWD3-ARIN] 7340 TELETEL [CV227-ARIN] 7341 VELOCITY [CF56-ARIN] 7342 VERISIGN-AS [AV1-ARIN] 7343 VISA-INTERACTIVE [DFB-ARIN] 7344 VIVIDNET [BW433-ARIN] 7345 LUCENTTECH [WRC6-ARIN] 7346 ARACNET [AN44-ORG-ARIN] 7347 USXPRESS [CNO2-ARIN] 7348 CRYSTALBALL [GS500-ARIN] 7349 INTERLAN [ZS221-ARIN] 7350 METROCON [NO48-ORG-ARIN] 7351 BLARG [RML2-ARIN] 7353 PRIMUS [AH1000-ARIN] 7355 MEITCA-AS [EAP-ARIN] 7356 WESTNETCOMMS [JH764-ARIN] 7357 AMERICANDATANET [MH1956-ARIN] 7358 DNB-NBIC [WM21-ARIN] 7359 USWMEDIA [JD1763-ARIN] 7360 PUREATRIA [KB1605-ARIN] 7361 BCONNEX-ISP [DS580-ARIN] 7362 HST-CHRON [JCR4-ARIN] 7363 IFCI [UN-ORG-ARIN] 7364 GROOVE [JB74-ARIN] 7365 CENTROIN [RDM45-ARIN] 7366 FTN-OTTAWA [FTN-NOC-ARIN] 7367 SYSONE [TS2268-ARIN] 7368 MTEL-ATC-AS [JD2859-ARIN] 7369 IAS-HYPERMALL [JB511-ARIN] 7370 CDSINC [MW227-ARIN] 7371 COASTALCORPORATION [JC173-ARIN] 7372 IPEXCHANGE-NJ [NAA2-ORG-ARIN] 7373 GORGON-NJ [JC494-ARIN] 7374 VALUSERVE [MI70-ARIN] 7375 HULANET [KP84-ARIN] 7376 INFORONICS [TC6-ORG-ARIN] 7377 UCSD [BK29-ARIN] 7378 CONNETIX [JPB92-ARIN] 7379 VIEWCALL [MR720-ARIN] 7380 CAPUNET [WM200-ARIN] 7381 SUNGARDRS [VD103-ARIN] 7382 CAMALOTT [RJ71-ARIN] 7383 PWDL [ML172-ARIN] 7384 INTUIT [KY139-ARIN] 7385 LINKPORTCOMMUNICATION [JS1921-ARIN] 7386 ILLINOIS-STATE-UNIV [SG158-ARIN] 7387 TIOCOM [AE18-ARIN] 7388 DFXNET [AF892-ARIN] 7389 NETDOX [CGS8-ARIN] 7390 NLSLAN [PD1076-ARIN] 7391 NTCC-NET [HW232-ARIN] 7392 DELPHI-INTERNET-AS [PO183-ARIN] 7393 CYBERCON [JZC-ARIN] 7394 FLYINGPENGUIN [FPP-NOC-ARIN] 7395 ESCHELON [JM5649-ARIN] 7396 OREGON-IX [DMM65-ARIN] 7397 DIGILINK-AS-MDR [RA72-ARIN] 7398 PANGEA-AS [CC263-ARIN] 7399 CANCUN-AS [JB215-ARIN] 7400 WYOMING-UTAH [ML84-ARIN] 7401 FWINET [EB35-ARIN] 7402 MULTIACTIVE [JPM6-ARIN] 7403 COLBA [AL1308-ARIN] 7404 ACS [JG2702-ARIN] 7405 GENUITY-XATL [BW49-ARIN] 7406 NETGUIDE [CT469-ARIN] 7407 MCI-SGUM [MJ252-ARIN] 7408 COMIMSA [SC65-ARIN] 7409 CONFLUX-NET [JP1283-ARIN] 7410 BIGPLANET [BPI-ORG-ARIN] 7411 WINTERSTORM [XW3-ARIN] 7412 COMSEC-NET [DIGI-NOC-ARIN] 7413 DONNAKARAN [DC2723-ARIN] 7414 PONTOCOM [MM4496-ARIN] 7415 ACILINK [BP833-ARIN] 7416 UCM [JT2100-ARIN] 7417 MEYOSP [MC90-ARIN] 7418 PROVDESERV [CZ46-ARIN] 7420 ZAMNET-AS [NR27-ARIN] 7421 SPRINT-GSD-AS [RL2092-ARIN] 7422 JAYHAWK-ASN [DB4114-ARIN] 7423 PUTNAMFT [ZN26-ARIN] 7424 USANET [ZU11-ARIN] 7425 DAI [JB4886-ARIN] 7426 IPASS-AS [IB142-ARIN] 7427 MKTSYS [PV173-ARIN] 7428 INTERVAN [IN2-ORG-ARIN] 7429 CYBERMEDIA [GK415-ARIN] 7430 TANDEM [PM259-ARIN] 7431 PDNT-AS [CR177-ARIN] 7432 EGENIUS [JG196-ARIN] 7433 CYBERMAX [RD1282-ARIN] 7434 SEGASOFT [MD16-ARIN] 7435 ATM-CIN [DS6516-ARIN] 7436 IRON [JO160-ARIN] 7437 GSL-RND [RR2423-ARIN] 7438 OPTEL [AP1598-ARIN] 7439 VOYAGER-AS [HV-ORG-ARIN] 7440 TRIPOD [JB3179-ARIN] 7441 DRG [DK52-ARIN] 7442 WIZARD [DJ286-ARIN] 7443 PRIMUSCA [DK462-ARIN] 7444 SYSTEL-AS [JB1712-ARIN] 7445 TELUS-AS-7445 [PSINET-CA-ARIN] 7446 INTERNET-LOGIN [JL459-ARIN] 7447 ONLINEINTERACTIVE [SM461-ARIN] 7448 CHOICE-HOTELS [RP1613-ARIN] 7449 TIOGA-NET [TB2193-ARIN] 7450 ADVANCED-ASN [GTA-ARIN] 7451 SHOP-NET [NOC37-ARIN] 7452 NEIS-NET [DM2542-ARIN] 7453 GTINET [KT110-ARIN] 7454 CLICNET [MR158-ARIN] 7455 DSL-NET [FT221-ARIN] 7456 INTERHOP [JM2312-ARIN] 7457 THESPHERE-AS [DP111-ARIN] 7458 THIRD-COAST [TC162-ORG-ARIN] 7459 THRIFTYCALL [SH405-ARIN] 7460 LIA-NET [GM1799-ARIN] 7461 MCIA-AS [MH130-ARIN] 7462 SRVNET [MP515-ARIN] 7463 GOPROTO-AS [AD1265-ARIN] 7464 I-WAYNET [MY182-ARIN] 7465 PROCERGS-AS [FAF4-ARIN] 7466 FRB [NH498-ARIN] 7467-7722 APNIC-AS-2-BLOCK [SA90-ARIN] 7723 EMERGENCY24-AS [BL493-ARIN] 7724 IECBAL [SWR3-ARIN] 7725 MEDIA1-CAB [EP397-ARIN] 7726 FITC-AS [ZF6-ARIN] 7727 HONDUTEL [HJR3-ARIN] 7728 GRILLO [DG1895-ARIN] 7729 CHI-IX [KD124-ARIN] 7730 NETLAN [RPT8-ARIN] 7731 WEBSTOR [JCP31-ARIN] 7732 CDC-AS2 [CNO2-ARIN] 7733 FRZRMTN [SR465-ARIN] 7734 TDBANK [MH2846-ARIN] 7735 REDSHIFT [KVL-ARIN] 7736 MARKETGUIDE [CR188-ARIN] 7737 ASWELLNET [NM129-ARIN] 7738 TELEBAHIA [CP1408-ARIN] 7739 AUTOWEB [FZ8-ARIN] 7740 WJP [WP5-ARIN] 7741 OPCO-AS [GI19-ARIN] 7742 DOITNOWDOTCOM [NH229-ARIN] 7743 B1C-AS [KLB11-ARIN] 7744 WCD-AS [HF332-ARIN] 7745 BIGSKY-AS [HOS345-ORG-ARIN] 7746 APMTECH [GM666-ARIN] 7747 EXECUTRAIN [BJ418-ARIN] 7748 MYRIAD [JH534-ARIN] 7749 VR1 [VR8-ORG-ARIN] 7750 ONSALE [IS92-ARIN] 7751 DANCRIS [LB27-ARIN] 7752 2ALPHA-NET [SG58-ARIN] 7753 GOLDENGATE [MJ278-ARIN] 7754 MCAFEE [DW1343-ARIN] 7755 COMBASE [AK463-ARIN] 7756 SCRR-7756 [ZS30-ARIN] 7757 ATT-BBND-C [IA122-ARIN] 7758 GLOBAL-ONE-NMC [GO-ORG-ARIN] 7759 OSTER [ZF67-ARIN] 7760 STAC [YD32-ORG-ARIN] 7761 MORNINGSTAR [ODC6-ARIN] 7762 NETMAS [JG3431-ARIN] 7763 CYBERAMERICACORP [SL1427-ARIN] 7764 CENSUSBUREAU [GS221-ARIN] 7765 ISITE [NS5176-ARIN] 7766 GRINNET [WS187-ARIN] 7767 EB [BT1014-ARIN] 7768 TECHNICOLOR [ZT36-ARIN] 7769 INTERNETEXTRA [WC25-ARIN] 7770 TRITON [SH1448-ARIN] 7771 AMULET [MH3249-ARIN] 7772 MAGPAGE [TP101-ARIN] 7773 SD-NET [JL605-ARIN] 7774 ALASKA [JH306-ARIN] 7775 INVCOINS [RB690-ARIN] 7776 AMCINTERNET [IA-ORG-ARIN] 7777 VIX2 [PV15-ARIN] 7778 PARACEL [HL70-ARIN] 7779 LD [TG112-ARIN] 7780 CALL-NET [MN37-ARIN] 7781 NETCONNECT [RW400-ARIN] 7782 PTINET [DL219-ARIN] 7783 EARTHSTATION [JP2037-ARIN] 7784 ATLANTECH [EF105-ARIN] 7785 ALEXUS [SK1613-ARIN] 7786 NPAC [XL45-ARIN] 7787 FAN-NETWORK [JW59-ARIN] 7788 MAGMA-COMM [RB570-ARIN] 7789 FISHBONE [AF83-ARIN] 7790 PACIFIER [HNL-ORG-ARIN] 7791 EARLY [DN463-ARIN] 7792 3M-HDQ-AS [RB1949-ARIN] 7793 JMX-AS [DN51-ARIN] 7794 GOLDEN [TK96-ARIN] 7795 CFWNET [RP500-ARIN] 7796 ATMLINK [KH532-ARIN] 7797 YAB [DB323-ARIN] 7798 SYRLANG [DTK4-ARIN] 7799 OLYPENASN [PB121-ARIN] 7800 ALLINA [BA466-ARIN] 7801 BOSNET [WW381-ARIN] 7802 INTELLI [AK1383-ARIN] 7803 MINIPHONE [DU147-ARIN] 7804 SOFTWOOD [RF529-ARIN] 7805 ACRUX [BT373-ARIN] 7806 BINARY-NET [YS71-ARIN] 7807 RURALNET [AW334-ARIN] 7808 ECCOMPANY [DR736-ARIN] 7809 SYNOPSYS [LT51-ORG-ARIN] 7810 CMPC [DW2945-ARIN] 7811 ITOCHU [EA423-ARIN] 7812 AEGISSTAR-ASN1 [PB225-ARIN] 7813 NPL [JR215-ARIN] 7814 CNS-NETWORK [MO448-ARIN] 7815 MADENTECH [WW662-ARIN] 7816 NORTHWESTCTCNET [AB504-ARIN] 7817 SURFNET [KN103-ARIN] 7819 FREDNET-ASN [NO52-ARIN] 7820 CHORUS-COMM [HM383-ARIN] 7821 MEANS [BR74-ARIN] 7822 AVICENNA [DF604-ARIN] 7823 DUPONT-ASN [NR1-ARIN] 7824 GWIS-AS0 [YTC2-ARIN] 7825 IMAGINENET-AS1 [PB291-ARIN] 7826 CANUCK-AS1 [HP12-ARIN] 7827 ABII-AS [SC2746-ARIN] 7828 DRMSCPASN [MSD10-ARIN] 7829 GLOBALPACIFIC [RG979-ARIN] 7830 COMMWERKS [JM335-ARIN] 7831 WEBWARP [ES429-ARIN] 7832 PCISYS [DW1219-ARIN] 7833 EXTRA-AS [MH3351-ARIN] 7834 BTGCOM [PF3-ARIN] 7835 ABRAXIS [JE307-ARIN] 7836 XO-AS16 [DIA-ORG-ARIN] 7837 ZNET-AS [JB682-ARIN] 7838 USAA [DL146-ARIN] 7839 MARKTRAVEL [LE381-ARIN] 7840 TLN-AS [KS2414-ARIN] 7841 DEMINET [CP72-ARIN] 7842 WEBWORLD [MB1893-ARIN] 7843 ADELPHIA-AS [AH102-ARIN] 7844 OASIS [JF858-ARIN] 7845 IMAGINA [JP84-ARIN] 7846 RIGHTLINE [JH2298-ARIN] 7847 NASA-HPCC-ESS [WF3-ARIN] 7848 RCN-AS2 [ZR40-ARIN] 7849 CROCKERCOM [MC331-ARIN] 7850 IHIGHWAY [JMB7-ARIN] 7851 ASN-ADELPHIA2 [AH102-ARIN] 7852 CALIS [AP1295-ARIN] 7853 BLAZENET [DN6-ARIN] 7854 DSSVAUS [DP2366-ARIN] 7855 TELECOMPLUS [JL3696-ARIN] 7856 INREACH-ASN [NO57-ORG-ARIN] 7857 EMPIRE2-ASN [EK9-ARIN] 7858 EXECUTELE [BN562-ARIN] 7859 PAIR-NETWORKS [KM383-ARIN] 7860 UPEI-AS [DC307-ARIN] 7861 TELUS-7861 [IA86-ARIN] 7862 TEXACO-GROUP [LS2079-ARIN] 7863 ACADIAN [RK434-ARIN] 7864 ACLA [MD395-ARIN] 7865 SWITCHBOARD-MA [RWS34-ARIN] 7866 BTI [SL2147-ARIN] 7867 TECHDATA [JS9810-ARIN] 7868 DATA-LIFE [CHW5-ARIN] 7869 DATADEPOT-ASN [DD177-ARIN] 7870 WHY [SA48-ORG-ARIN] 7871 SEIDATA [RE137-ARIN] 7872 MCMURDO [NOC95-ORG-ARIN] 7873 MICROTEC-AS [YT110-ARIN] 7874 SHKOO [NM111-ARIN] 7875 ENTECH [MW362-ARIN] 7876 CNGNET-AS [JK303-ARIN] 7877 ONLINE-MAGIC [JV92-ARIN] 7878 TCEL-AS [OHN-ARIN] 7879 DIMENSION-NET-1 [JA219-ARIN] 7880 NEURAL-AS [IR15-ARIN] 7881 IMGIS [JL3764-ARIN] 7882 SPRINT-HAWAII [LW715-ARIN] 7883 CYBERTOURS [PF136-ARIN] 7884 ASN-NC-FUCAPMARK [MH1450-ARIN] 7885 YUKONCOLLEGE [RK995-ARIN] 7886 EMPIRICAL-AS [CK1293-ARIN] 7887 AS-CCPL [JD3445-ARIN] 7888 CSI-CORP [JA1274-ARIN] 7889 FULL-ECLIPSE [JCB69-ARIN] 7890 REDE-UNILINK [DV718-ARIN] 7891-7894 BELLSOUTH-NET-BLK2 [DR791-ARIN] 7895 FABRIK [RZ316-ARIN] 7896 UNL-AS [DF90-ARIN] 7897 XINGNET [JP2795-ARIN] 7898 DNA-ASN [KH114-ARIN] 7899 EXAMCO [WS1178-ARIN] 7900 HOOSIER [BH383-ARIN] 7901 CYPHERCOM [CW1267-ARIN] 7902 PINS [CNA4-ORG-ARIN] 7903 OASIS-AS [GB2044-ARIN] 7904 NISI [TS124-ARIN] 7905 GARDEN-NET [KS388-ARIN] 7906 VERA-NET [VM168-ARIN] 7907 NETWORLDTRON [RR1944-ARIN] 7908 COMSAT-AR [MM1049-ARIN] 7909 CITYNET-AS [HRA97-ORG-ARIN] 7910 ANDINET [ZA30-ARIN] 7911 WCG [MW972-ARIN] 7912 STATEFARMINSCO [JB663-ARIN] 7913 METROLINK [VD190-ARIN] 7914 CSI [CDA8-ORG-ARIN] 7915 LIGHTREALM [DA352-ORG-ARIN] 7916 ISDNET [SF199-ARIN] 7917 PHS [MH184-ARIN] 7918 LARKOM-AS [RL2203-ARIN] 7919 DIGITALDATA-AS [DH1151-ARIN] 7920 LEAPSPOURCE [ZL42-ARIN] 7921 THEGRID-AS [JH2355-ARIN] 7922 CCIBB [JL2167-ARIN] 7923 UPLANET-AS [DRM51-ARIN] 7924 ADVANCEDONLINE [RD628-ARIN] 7925 WVNET [GD633-ARIN] 7926 FAIRISAAC [RH220-ARIN] 7927 GIPVE [AE519-ARIN] 7928 AICOM-AS [TL1488-ARIN] 7929 WETWARE [AR1502-ARIN] 7930 TSCNET [MJ264-ARIN] 7931 ACVI [RN1002-ARIN] 7932 NUMERIX [GW712-ARIN] 7933 BORDERS-GROUP [JZ16-ARIN] 7934 DATAMARKETS [AG310-ARIN] 7935 PO-ASN [JL38-ARIN] 7936 NPDGROUP [DP308-ARIN] 7937 SOUTHTECH [MS2155-ARIN] 7938 CIRCLE [CNH-ORG-ARIN] 7939 UNIVCENTFLA [WTE4-ARIN] 7940 JCI-INC [RD111-ARIN] 7941 ARCHIVE [TP47-ARIN] 7942 GE-AS5 [DH3766-ARIN] 7943 TDS-SA-ISP [MC3741-ARIN] 7944 DMVOL-ASN [PF375-ARIN] 7945 CYBERG8T [KM1023-ARIN] 7946 MET-NET [RCN10-ARIN] 7947 RADIO [VJ8-ARIN] 7948 GEOPLEX [DW1999-ARIN] 7949 WMIS-AS [RAS37-ARIN] 7950 HC-AS [DF9-ARIN] 7951 PCEZ [HPM2-ORG-ARIN] 7952 PCMAGIC-GATEWAY [TC1946-ARIN] 7953 SUPERNET-MEDELLIN [JA406-ARIN] 7954 MAPS-3 [PV15-ARIN] 7955 SOURCENET [SC238-ORG-ARIN] 7956 NETRESOURCE [ZN35-ARIN] 7957 SHOPX [DH1239-ARIN] 7958 IDI [NOC169-ORG-ARIN] 7959 VICON [MW664-ARIN] 7960 GLOBAL-NAPS [VB14-ARIN] 7961 TSOFT [MSD21-ARIN] 7962 EXISNET [EH458-ARIN] 7963 STDIO [JR100-ARIN] 7964 ARCFOUR [HH26-ARIN] 7965 UCAB [SOD3-ORG-ARIN] 7966 HARBOR [BD540-ARIN] 7967 SECUREDOC [JF1997-ARIN] 7968 LOYOLA-UNIV-CHICAGO [DMW5-ARIN] 7969 CYB-VAN [HOC-ORG-ARIN] 7970 LEON-FL-SCHL [DJ592-ARIN] 7971 IWEBTT [CW1950-ARIN] 7972 GPG [CW1950-ARIN] 7973 MAYO [CR639-ARIN] 7974 ASNIMP [RF1111-ARIN] 7975 CONFERENCE-AMERICA [KR1179-ARIN] 7976 SEDONA-AS [AW100-ARIN] 7977 EMCCORP [TQA2-ARIN] 7978 PRISM [NOC116-ORG-ARIN] 7979 BARROWS [JSB15-ARIN] 7980 GIPAR [RS5350-ARIN] 7981 DIGIMARK [GG34-ARIN] 7982 COGENT-WAN [HOS3-ORG-ARIN] 7983 DOMAIN [WAYNE-ORG-ARIN] 7984 GIPCO [JC625-ARIN] 7985 CHRONICLE [TS263-ARIN] 7986 SAVVISCHI [ZS36-ARIN] 7987 SAVVISDAL [ZS36-ARIN] 7988 SAVVISLA [ZS36-ARIN] 7989 SAVVISNY [ZS36-ARIN] 7990 SAVVISSF [ZS36-ARIN] 7991 SAVVISSTL [ZS36-ARIN] 7992 COGECOWAVE [IS7-ORG-ARIN] 7993 GIPCL [CG1629-ARIN] 7994 GIP-PE [AS3391-ARIN] 7995 GIP-MX [FM904-ARIN] 7996 LIMITED [RMW21-ARIN] 7997 EMTELCO [ZE11-ARIN] 7998 CYTEC [CR1824-ARIN] 7999 GAMES-ONLINE [MP293-ARIN] 8000 DWX-AS [TH824-ARIN] 8001 NET-ACCESS-CORP [AR97-ARIN] 8002 STEALTH [SP112-ARIN] 8003 THENETDIGITAL [HTD-ORG-ARIN] 8004 DTG [MA961-ARIN] 8005 SUNLINK1 [SM147-ARIN] 8006 SYSCI [DA45-ORG-ARIN] 8007 VIA-MEXICO [ZVN1-ARIN] 8008 CICCORP [JK2088-ARIN] 8009 TRANSAMERICA [PL113-ARIN] 8010 PUBLICNET [PCI-ORG-ARIN] 8011 EXECPC [MWM2-ARIN] 8012 PCFN [SK630-ARIN] 8013 TELUS-AS-8013 [PSINET-CA-ARIN] 8014 BATELNET [HM618-ARIN] 8015 VISI-AS [MH130-ARIN] 8016 BAISBLT [CW408-ARIN] 8017 BAISRNK [CW408-ARIN] 8018 VEL-AS [VNN1-ARIN] 8019 ORCALINK [JS2781-ARIN] 8020 CAVECOMM-ASN [JBR2-ARIN] 8021 PCNET [RP53-ARIN] 8022 WTNET [AJD4-ARIN] 8023 CASTLES [MK41-ARIN] 8024 CIBNOR-LP [LM1008-ARIN] 8025 BRIGHTOK-AS [BE322-ARIN] 8026 ECOPETROL [CLG3-ARIN] 8027 GBLNAPSBOSMIX [FG84-ARIN] 8028 PROAXIS [RR630-ARIN] 8029 MSERVE-AS [HB101-ARIN] 8030-8035 WORLDNET5-10 [BA128-ARIN] 8036 UTULSA-AS [RK134-ARIN] 8038 QTI [AAH2-ARIN] 8039 WCS-1 [ZN38-ARIN] 8040 MMD [JF982-ARIN] 8041 ATW [JHD2-ARIN] 8042 WCS [EW37-ARIN] 8043 SMARTNAPASN [DA3664-ORG-ARIN] 8044 SELECT-AS [MH3421-ARIN] 8045 EMIMUSICPUB-NY [BS559-ARIN] 8046 NAPANET [DA755-ARIN] 8047 GCI [CE548-ARIN] 8048 CANTVNET [HW595-ARIN] 8049 POL-AS [TB299-ARIN] 8050 DNC-AS [HS8-ORG-ARIN] 8051 NXS [BH1237-ARIN] 8052 SCRR-8052 [ZS30-ARIN] 8053 ELDISH [RG86-ARIN] 8054 TICSA-MEDELLIN [HM1067-ARIN] 8055 WTCOL-R1 [EP758-ARIN] 8056 INTERNET-VENEZUELA [KL687-ARIN] 8057 VISIONNET [RW2783-ARIN] 8058 LEAPFROG [TM1404-ARIN] 8059 ASN-BWAY [HR2-ORG-ARIN] 8060-8063 BELLSOUTH-NET-BLK3 [DR791-ARIN] 8064 UABMC [DT1615-ARIN] 8065 EEPPM [BL1967-ARIN] 8066 INEA-INTSA [FV298-ARIN] 8067 WSCNET-AS [RE631-ARIN] 8068-8075 MICROSOFT-AS-BLOCK [ZM86-ARIN] 8076 HUD [GK1173-ARIN] 8077 OHIOONLINE [JA915-ARIN] 8078 I-2 [II8-ORG-ARIN] 8079 ONC-AS [ODR-ORG-ARIN] 8080 ZIP2 [TR576-ARIN] 8081 FTLNET [FLN5-ARIN] 8082 WORLDSITE [IW56-ARIN] 8083 CONGQTLY [DD2015-ARIN] 8084 CENDANT [ZC138-ARIN] 8085 AMERITRADE [DB491-ARIN] 8086 PBD-NET [EF-ARIN] 8087 NEUMEDIA [GW484-ARIN] 8088 SRTNET [DB1208-ARIN] 8089 ESPIRE-FLN [VI11-ARIN] 8090 ENRON [PC753-ARIN] 8091 ICOMS [CC2681-ARIN] 8092 BBNOW [AN63-ARIN] 8093 PROFOUND [TW859-ARIN] 8094 PUKNET [KP1133-ARIN] 8095 NETVALUE [AM2781-ARIN] 8096 INTERPLANET-MEDELLIN [MA2244-ARIN] 8098 IFN [KW1600-ARIN] 8099 ASN-280 [DG1895-ARIN] 8100 AYENET [EP153-ARIN] 8101 RTCI-AS [RNO1-ARIN] 8102 FALLON-MPLS [MJ31-ARIN] 8103 STATE-OF-FLA [DT119-ARIN] 8105 DAKOTACOM [GH593-ARIN] 8106-8110 SPRINT97 [SPRINT-NOC-ARIN] 8111 DALUNIV [DEM52-ARIN] 8112-8115 BAIS-ASBLK [CW408-ARIN] 8116 GUIDANT [JR4522-ARIN] 8117 DRF [MP1786-ARIN] 8118 MAAZ-AS [JDF2-ARIN] 8119 DTN-AS [BG1076-ARIN] 8120 BESTWEB [JAB28-ARIN] 8121 TCH [SR91-ARIN] 8122 DQNAS [JS8557-ARIN] 8123 POLYBASE [DRK6-ARIN] 8124 TUMBLEWEED [MH630-ARIN] 8125 CYBERPORTAL-ASN [RA890-ARIN] 8126 KENTROX [HK112-ARIN] 8127 CONNECTEXPRESS [EC1176-ARIN] 8128 UOL-AS [SC180-ARIN] 8129 CAIWIRELESS [TC2248-ARIN] 8130 INFICAD [RV104-ARIN] 8131 PEPBOYS [PD414-ARIN] 8132 ENTEX [AI27-ORG-ARIN] 8133 CYBERCOMCORP [MP330-ARIN] 8134 UP-NET [KY82-ARIN] 8135 TROYST [JH4212-ARIN] 8136 IFSI [MO497-ARIN] 8137 INFOSEEK2 [MTP2-ARIN] 8138 JADE [JDA3-ORG-ARIN] 8139 RACALDATAGROUP [WS284-ARIN] 8140 REDIFE-PREP [JHT3-ARIN] 8141 TBAINFORMATICA [RR3316-ARIN] 8142 EAGLEQUEST [NSS3-ARIN] 8143 4PUBLICOM-AS [JD47-ORG-ARIN] 8144 WORLDNOWONLINE [JM945-ARIN] 8145 GW [KOS-ARIN] 8146 GNAC [DR2223-ARIN] 8147 ASERICY [KM25-ARIN] 8148 TIES [TSG14-ARIN] 8149 UNICOMP [PR47-ARIN] 8150 MOBILEPS [PD630-ARIN] 8151 UNINET-MX [VT11-ARIN] 8152 BRODERBUND [ZT59-ARIN] 8153 NORTELRCH2 [GB2641-ARIN] 8154 GTC [BH1673-ARIN] 8155 THE-LINK-MGM [ETB8-ARIN] 8156 INTI [ZM94-ARIN] 8157 INTERNETCONNECTUSA [AO499-ARIN] 8158 LUCENT-WHATS [TR1891-ARIN] 8159 KANSASNET [JL460-ARIN] 8160 ROGERS-AS-8160 [AD30-ARIN] 8161 INSIGHT-AS [LC51-ARIN] 8162 IMPULSEGATEWAY [CK884-ARIN] 8163 METROTEL [MR2340-ARIN] 8164 JUNO [DS7-ORG-ARIN] 8165 DATABOSS [WC443-ARIN] 8166 PRISMNET [GS331-ARIN] 8167 TELESC [RS6149-ARIN] 8168 RAVENET-DE [GW223-ARIN] 8169 ACCESSINDY [JC914-ARIN] 8170 MICROAGE [PL46-ARIN] 8171 ENET [ZN55-ARIN] 8172 MTI [JL2877-ARIN] 8174 MHPCC-ASNET2 [ZM32-ARIN] 8175 CETLINK [CNO7-ORG-ARIN] 8176 NETSCAPE-ASN [DD3034-ARIN] 8177 QADAS [MB190-ARIN] 8178 OVERNET [GH840-ARIN] 8179 SFCU-1 [DPK5-ARIN] 8180 MDM-INET [LM770-ARIN] 8181 VCINET [DW659-ARIN] 8182 DIGITALRIVER [JP2245-ARIN] 8183 INTERNETSECURE-AS [GMJ-ARIN] 8184 LAFFITEMORGAN [OL121-ARIN] 8185 THAWEB [SA719-ARIN] 8186 HPI [HPD2-ORG-ARIN] 8187 NEWTEL-COMM [WC37-ARIN] 8188 BLOOMBERG [RI19-ORG-ARIN] 8189 STRATOS [DD1063-ARIN] 8190 VIATEL [MJM8-ARIN] 8191 WIDOMAKER [BL42-ARIN] 8192-9215 RIPE-ASNBLOCK7 [RIPE-NCC-ARIN] 9216-10239 APNIC-AS-3-BLOCK [SA90-ARIN] 10240 MOTLEYFOOL [MK3341-ARIN] 10241 OCI [DB919-ARIN] 10242 USINTERNET [KL200-ARIN] 10243 HERMESNET1 [HOS172-ORG-ARIN] 10244 EDIFY [MH154-ARIN] 10245 INNETIX [IH266-ARIN] 10246 AGT [RD89-ARIN] 10247 NETLINE [MH4590-ARIN] 10248 IPINC [BCO-ARIN] 10249 TIR-ASN [HM563-ARIN] 10250 INET-SOLUTIONS [NOC3-ARIN] 10251 DIALI [DN3-ORG-ARIN] 10252 DOTNETUNIFIEDNETWORK [DR1018-ARIN] 10253 IENG [TAE1-ARIN] 10254 WATSONWYATT [JS9356-ARIN] 10255 SINISTER [SH91-ORG-ARIN] 10256 AKULA [GS834-ARIN] 10257 TSTONRAMP [BB1182-ARIN] 10258 SHN-AS [BM1125-ARIN] 10259 BLUEMOON [HP102-ARIN] 10260 ACCESS-CHICAGO [BL221-ARIN] 10261 ACCESS [CW2387-ARIN] 10262 IMPROTECH [CB3756-ARIN] 10263 MATCHMAKER [PO17-ARIN] 10264 SCOTIACAPTIAL [ZS141-ARIN] 10265 DIGIWEB-NETWORK [AC467-ARIN] 10266 NETWAY-AS [DS1368-ARIN] 10267 GVI-AS [CD288-ARIN] 10268 ASN-USS [NOC86-ARIN] 10269 BTL-ASN [WA78-ARIN] 10270 IDEX [BR1979-ARIN] 10271 TCIX [TCI-ORG-ARIN] 10272 SSIS [JL2877-ARIN] 10273 FPL [TW2109-ARIN] 10274 EXCELNET [LW200-ARIN] 10275 AS-UNITEDNETWORK [AA1583-ARIN] 10276 GATEKEY [TM63-ARIN] 10277 ASN-MCYE [CGM8-ARIN] 10278 CARIBSURF [ER1095-ARIN] 10279 OT-AS [CC1315-ARIN] 10280 DIALIP-E-SW [GO-ORG-ARIN] 10281 DIALIP-E-NE [GO-ORG-ARIN] 10282 DIALIP-PR [GO-ORG-ARIN] 10283 DIALIP-AMERICAS [GO-ORG-ARIN] 10284 DIALIP-ASIA [GO-ORG-ARIN] 10285 IMAGEBBS-RJ [LL1693-ARIN] 10286 TIESOFT [DG346-ARIN] 10287 XTNNET [HOS74-ORG-ARIN] 10288 MIN-NET [CD34-ARIN] 10289 WEBNETWORKS [BS770-ARIN] 10290 RDANET [JD2394-ARIN] 10291 PLANETALL [SC3373-ARIN] 10292 TOJ [NJ17-ARIN] 10293 VENRED [EE441-ARIN] 10294 CCCD-AS [MDB21-ARIN] 10295 COMPUTERDOTNET [PK178-ARIN] 10296 GBNETMPNNETWORK [RV119-ARIN] 10297 COLUMBUSNAP [TAB33-ARIN] 10298 CACI [EM29-ARIN] 10299 EMCATEL [PGG7-ARIN] 10300 NETSPEAK [TH789-ARIN] 10301 NEXTGEN [SH37-ARIN] 10302 NEGIA-NET [NH262-ARIN] 10303 AS-PRIORI [JNEWTON-ARIN] 10304 NETCHANNEL [MR720-ARIN] 10305 VERINET [JM1140-ARIN] 10306 CNETECHNET [GD249-ARIN] 10307 GRENTEL [PH773-ARIN] 10308 NEIUNET [HH1128-ARIN] 10309 MARIN-MIDAS [JN1916-ARIN] 10310 YAHOO-1 [NA258-ARIN] 10311 SCRR-10311 [ZS30-ARIN] 10312 HEARTPORT [TW2206-ARIN] 10313 PEQUOT [SC462-ARIN] 10314 WORLDPATH-AS [KM581-ARIN] 10315 EZNETWORK [ST1067-ARIN] 10316 ABACUS-NET-AS [LD372-ARIN] 10317 CUCINT [DA2022-ARIN] 10318 CV-TCI [DN1372-ARIN] 10319 ADVANTANET [RS4689-ARIN] 10320 ISPN-TJ [SI2-ORG-ARIN] 10321 MERCOMUSA [SU75-ARIN] 10322 ERCOT-ISO [CK47-ARIN] 10323 PLANET [PSN-ORG-ARIN] 10324 WAZOO-AS [CF140-ARIN] 10325 INGRAMMICRO [JL434-ARIN] 10326 WPI [JB799-ARIN] 10327 CLAND [CW54-ARIN] 10328 IKONUN [MT601-ARIN] 10329 INFOSHARE [AW22-ARIN] 10330 VOYAGER [KC367-ARIN] 10331 BANKMED [JV108-ARIN] 10332 BROADBAND [KL313-ARIN] 10333 DIGITALINSIGHT [CS245-ARIN] 10334 NAVISITE-EAST [IP21-ORG-ARIN] 10335 RELAYTECH [MNS1-ARIN] 10336 PFN-AS [LC2080-ARIN] 10337 IBMAS400DIV [DK3157-ARIN] 10338 COBITE [AB830-ARIN] 10339 COMMTEL [CIH-ORG-ARIN] 10340 TELE-TECH [SM119-ARIN] 10341 IBC-AS [JC1915-ARIN] 10342 INETINFOSVCS-AS [NOC75-ORG-ARIN] 10343 NASA-AERONET-AS [DR405-ARIN] 10344 FOXBERRY-10344 [TF231-ARIN] 10345 INCONNECT [DK764-ARIN] 10346 MIDCOAST [JP498-ARIN] 10347 RANDMCNALLY [GL1511-ARIN] 10348 HTDC [TI10-ARIN] 10349 TULANE [TD138-ARIN] 10350 NETSCHOOLS [NN424-ARIN] 10351 COMPUAID [SM1130-ARIN] 10352 WCTC [TW209-ARIN] 10353 AWODCHS [HH543-ARIN] 10354 GLOBETROTTER [DS538-ARIN] 10355 DSCGA [BT152-ARIN] 10356 WINDYCITY [LD163-ARIN] 10357 JMUNET [GF277-ARIN] 10358 EQUINOX [HM309-ARIN] 10360 SOFTWARE-ALBERTA [TB187-ARIN] 10361 BLOOMBERG-NET [RI19-ORG-ARIN] 10362 NETHALL [MH5162-ARIN] 10363 PULITZER-TECH [ES322-ARIN] 10364 UAHNET [CA-ARIN] 10365 WEBEXPRESS [JC2570-ARIN] 10366 ASN-NKN1 [TS135-ORG-ARIN] 10367 METRO2000 [GC663-ARIN] 10368 RCN-AS10368 [ZR40-ARIN] 10369 CAMPBELLSOUP-AS [CA718-ARIN] 10370 NORTHWEST-AIRLINES [JK2867-ARIN] 10371 NASA-DARWIN-AS [JAG61-ARIN] 10372-10376 NORWEST [CI26-ORG-ARIN] 10377 SOUNDCHOICE [EO35-ARIN] 10378 NODEWARRIOR [CH659-ARIN] 10379 DELUXE [HK488-ARIN] 10380 NETXS [JR1907-ARIN] 10381 SWCP-AS [MC143-ARIN] 10382 NPTI [TD269-ARIN] 10383 USW-INTERACT9 [RJ1800-ARIN] 10384 TVA [REB42-ARIN] 10385 EIGER [CP373-ARIN] 10386 IC-ASN [EG348-ARIN] 10387 CHARIOTNET [TS1968-ARIN] 10388 NETINC [RH1138-ARIN] 10389 BEARCLEARNET [TT1804-ARIN] 10390 TELECHECK [BW73-ARIN] 10391 INTERED [FT82-ARIN] 10392 GLASSCITY-INTERNET [BK234-ARIN] 10393 MWEB [GM3202-ARIN] 10394 ALLWAYS [JH1261-ARIN] 10395 VUE-AS1 [MKS7-ARIN] 10396 COQUI-NET [GG1167-ARIN] 10397 ICX-AS [JI90-ARIN] 10398 GBI [DA517-ARIN] 10399 AMAP-AUSTIN-TX-WALLER [SS4080-ARIN] 10400 THETORONTOSTAR [ZT39-ARIN] 10401 SFAAOA [AS3078-ARIN] 10402 HSD2-AS [RK83-ARIN] 10403 DYNASTY [JDS30-ARIN] 10404 ICN-1 [NO56-ORG-ARIN] 10405 ASN-UP [BF34-ARIN] 10406 ASN-TEKTRONIX [DT167-ARIN] 10407 IAAVC [ADM56-ORG-ARIN] 10408 SPECTRUME [SJ314-ARIN] 10409 ALLEGRONET [ZE40-ARIN] 10410 AUTO-GRAPHICS [RN1456-ARIN] 10411 ESRI [AH699-ARIN] 10412 TECPAR-AS [LAM39-ARIN] 10413 GLOBALLY [TE678-ARIN] 10414 QUESTLINK [JL363-ARIN] 10415 VSCAPEII [GW100-ARIN] 10416 EVCOM-ASN [JSS11-ARIN] 10417 POP-MG [MM8110-ARIN] 10418 TEKNOS [VS102-ARIN] 10419 NORTHERNLIGHT [BA14-ARIN] 10420 BANCO-DE-MEXICO [HMS23-ARIN] 10421 TTUNET [JS450-ARIN] 10422 NETEXPLORER [BAK11-ARIN] 10423 MIAMINAP [LH766-ARIN] 10424 USW-INTERACT10 [RJ1800-ARIN] 10425 ASN-FIBERNAP [BS987-ARIN] 10426 AUTOBAHN [AA55-ORG-ARIN] 10427 RAMS-FIE-AS [KL97-ARIN] 10428 CWV-NETWORKS [DR1159-ARIN] 10429 TELESP [EZ228-ARIN] 10430 WA-K20 [UW-NOC-ARIN] 10431 BCNET-1 [TA371-ARIN] 10432 APC-AS-2 [HE6-ARIN] 10433 USA-NET [NO27-ORG-ARIN] 10434 SAT-TEL [MH1123-ARIN] 10435 IDCOMM [AM1826-ARIN] 10436 ITESM-RZS [MAG6-ARIN] 10437 UKY [RSL1-ARIN] 10438 BLUE-HWY [CL265-ARIN] 10439 CARI [IC63-ARIN] 10441 CH2M [DH5364-ARIN] 10442 ED-GOV [ZU69-ARIN] 10443 WOLFENET2 [PM139-ARIN] 10444 ZIONSBANCORP [KA402-ARIN] 10445 HTG [RB1859-ARIN] 10446 AMIGO-NET [MH412-ARIN] 10447 SKYLINKUS-AS1 [SNA7-ARIN] 10448 VILLANOVA-UNIV [ZV26-ARIN] 10449 DISCOVER [MR3802-ARIN] 10450 ADVANTECH [GW956-ARIN] 10451 WARPDRIVE [RHW-ARIN] 10452 ANICE [PF28-ARIN] 10453 CNIWEB [JA2999-ARIN] 10454 HORIZONTES [AC1985-ARIN] 10455 LUCENT-CIO [WRC6-ARIN] 10456 ATT-DISCNET [TB727-ARIN] 10457 ILX-ASN [DD226-ARIN] 10458 JUNIPER-TEST-AS [BAC9-ARIN] 10459 WANSASN [WAH-ARIN] 10460 SCOOP-AS [DAR6-ORG-ARIN] 10461 TOWNSENDANALYTICSLTD [ML410-ARIN] 10462 SHADOW [MA498-ARIN] 10463 ENLARED-PLM [JP2013-ARIN] 10464 TEAMTECH [SN721-ARIN] 10465 DOCKNET-1 [WH211-ARIN] 10466 MAGPI [MW274-ARIN] 10467 NEWMEDIA [JA256-ARIN] 10468 ASLAN [MH43-ARIN] 10469 FIRSTNET [ET216-ARIN] 10470 ASN-PCORDER [JH454-ARIN] 10471 TECHNIMETRICS-AS [RB5126-ARIN] 10472 CWNET [JS6040-ARIN] 10473 COMPUSA [NSA12-ORG-ARIN] 10474 NETACTIVE [SA447-ORG-ARIN] 10475 SNS [DA731-ORG-ARIN] 10476 SINFONET [JB1290-ARIN] 10477 CEPHAS [JS3144-ARIN] 10478 PTINETCORP [RSM8-ARIN] 10479 ITESM-RZN [JR5238-ARIN] 10480 NMNAP [JMB7-ARIN] 10481 PRIMA [MF127-ARIN] 10482 VIDEONCSAI [PK110-ARIN] 10483 AKPERMFUND [RSM8-ARIN] 10484 OLDE [DC5719-ARIN] 10485 UW-STOUT [BS3775-ARIN] 10486 FASTRANS [NN12-ORG-ARIN] 10487 SIMPLENET [JK861-ARIN] 10488 TFM-ASN [SD81-ARIN] 10489 FUTUREONE-AS [DW966-ARIN] 10490 GEORGIA-GIGA-POP [RH129-ARIN] 10491 DIAMONDLINK [HOS816-ORG-ARIN] 10492 CACMEDIANET [JG1377-ARIN] 10493 GCN-AS [SF509-ARIN] 10494 AAI [RWG25-ARIN] 10495 GCSNET-AS [LF1274-ARIN] 10496 LIVINGSTON [CR129-ARIN] 10497 WORLDBANK-AS [IP12-ARIN] 10498 IWAVE-ASN [AR143-ARIN] 10499 RGE [BMH2-ARIN] 10501 PACLINK [RL63-ARIN] 10502 IFX-CHILE [JPR2-ARIN] 10503 I-55 [BA929-ARIN] 10504 DHLAIRWAYS [GD1791-ARIN] 10505 DOCKSIDE [GF1080-ARIN] 10506 PROSPECT [JAW54-ARIN] 10507 SPCS [RR4328-ARIN] 10508 ARKNET-AS [MB546-ARIN] 10509 IEWAY [SJ347-ORG-ARIN] 10510 QNIKC [KL1992-ARIN] 10512 EFOREX-AS [DH5637-ARIN] 10513 RCN-AS7 [ZR40-ARIN] 10514 SPLITROCK [NA10-ORG-ARIN] 10515 CLT-NIC [KS630-ARIN] 10516 ORB-BIT [RJ581-ARIN] 10517 MELLONBANK [DS8031-ARIN] 10518 WALLNET-AS [CW1541-ARIN] 10519 ANS97 [AH-ORG-ARIN] 10520 EXECULINK [EZ22-ARIN] 10521 MARCOM [JM1162-ARIN] 10522 BLUESTAR [TP685-ARIN] 10523 ROADRUNNER-003-ALBANY [GD1255-ARIN] 10525 SIMON-SCHUSTER [LB385-ARIN] 10526 DRCORP [RHG3-ARIN] 10527 PULVER [JP291-ARIN] 10528 INTELISYS [DC3837-ARIN] 10529 AFSB [CRB23-ARIN] 10530 INTERPACKET [JM9962-ARIN] 10531 GLOBALSITE [RA2734-ARIN] 10532 CYMITAR [RY136-ARIN] 10533 HYPNOVISTA [SNV2-ARIN] 10534 GOAMERICACOMM [NO28-ORG-ARIN] 10535 USNETWAY [KK1740-ARIN] 10536 INDIVIDUAL [BH148-ARIN] 10537 INFONLINE [TL779-ARIN] 10538 ARCTICNET [SH262-ARIN] 10539 NETMORE [NI3-ORG-ARIN] 10540 INFODOOR [AG2578-ARIN] 10541 PREDICTIVE [TM3417-ARIN] 10542 MSDNSD [KC162-ARIN] 10543 UPTIMEWEB [UNM2-ORG-ARIN] 10544 DLPTECHNOLOGIES [CD543-ARIN] 10545 LCOL [RG4197-ARIN] 10546 MSSTATE [FP21-ARIN] 10548 LCGM-AS1 [LNO-ORG-ARIN] 10549 EMINET [CW393-ARIN] 10550 UTAUSTIN [JH155-ARIN] 10552 CATAPULTNET [JAA52-ARIN] 10553 SILVERPLATTER-AS [RR4286-ARIN] 10554 MIDPLAINSNET [ZC143-ARIN] 10555 SCLI [SON4-ARIN] 10556 ATN-AS [JV1335-ARIN] 10557 CNW [AF51-ARIN] 10558 WEBLINK [HW187-ARIN] 10559 WEBSTREETSECURITIES [WJM15-ARIN] 10560 ITESM-RZC [YC223-ARIN] 10561 BRANDEIS [BK138-ARIN] 10562 AIRNET [MW1105-ARIN] 10563 ROCHELLEUTILITIES [EG1398-ARIN] 10564 TCSI [NHC3-ARIN] 10565 MEER-AS [TW40-ARIN] 10566 VIAGENIE [MB841-ARIN] 10567 TNA [MP187-ARIN] 10568 PROXY-ASN [BB35-ARIN] 10569 AS-CUBA [JM554-ARIN] 10570 HYPNO-NTT [SNV2-ARIN] 10571 GEOACCESS-AS [SS446-ARIN] 10572 RESROCKET [TG1990-ARIN] 10573 WEBNEXUS [WH4-ORG-ARIN] 10574 BJKE [CB347-ARIN] 10575 CISP-AS [JD5716-ARIN] 10576 CDNOW [ZC168-ARIN] 10577 WIPC [EL1388-ARIN] 10578 GIGAPOP-NE [LD238-ARIN] 10579 HIGHWAY1-AS [DJ2181-ARIN] 10580 INTURNET-ASN [TX-ORG-ARIN] 10581 TM3 [PB3679-ARIN] 10582 MONDONET-USA-AS [AM2733-ARIN] 10583 CHIME [PR1925-ARIN] 10584 TRADEWEB [RH5415-ARIN] 10585 NETLIMITED [LE242-ARIN] 10586 OSI-GUATEMALA [ER100-ARIN] 10587 CYBERHIGHWAY [DR858-ARIN] 10588 ICSNET [PK129-ARIN] 10589 HALNET [SJH4-ARIN] 10590 BOOKSTACKS [DA129-ARIN] 10591 IONSNET [JM10628-ARIN] 10592 NET1PLUS [SL486-ARIN] 10593 AOL-DTC2 [ANO3-ORG-ARIN] 10594 CEC [RH267-ARIN] 10595 MAUSWERKS [BT43-ARIN] 10596 JETNET [DA1009-ARIN] 10597 CRUSOE-AS [MD651-ARIN] 10598 CIRR [ES158-ARIN] 10599 MCKESSON [MT424-ARIN] 10600 CD-GRAF-BR [ASC23-ARIN] 10601 ELNET [DG527-ARIN] 10602 TDL [DN-ARIN] 10603 TYPEHOUSE-GROUP [MS9244-ARIN] 10604 KINKO [JC102-ARIN] 10605 SERVICE-NET [GA1403-ARIN] 10606 TALNET [FF313-ARIN] 10607 GCIC [WD407-ARIN] 10608 ENS-INTERWEB [SL174-ARIN] 10609 TELEVAR [SA269-ORG-ARIN] 10610 APA [RC2371-ARIN] 10611 REOHR [JG420-ARIN] 10612 NORTHCOAST-INTERNET [JHW13-ARIN] 10613 MAUINET [DA273-ORG-ARIN] 10614 OLYWA [JS1241-ARIN] 10615 PAINEWEBBER-ASN [MW4767-ARIN] 10616 NTIS [TP2231-ARIN] 10617 SION [HA37-ARIN] 10618 NBNET [LH540-ARIN] 10619 PUBLICONLINE [TEC48-ORG-ARIN] 10620 CABLENET-AS [JDM106-ARIN] 10621 FIRSTNETHOU [JAF5-ARIN] 10622 NIEHS [CT1893-ARIN] 10623 ANNAPOLIS-INTERNET [JG1102-ARIN] 10624 NETPOINT-DE-VENEZUELA [AC2182-ARIN] 10625 SPCOMSTOCK [JN646-ARIN] 10626 INTRANET-INC [PL259-ARIN] 10627 CRITICALPATH [CH-ORG-ARIN] 10628 LVDI-NET [TS43-ORG-ARIN] 10629 INTERPAC [PA37-ARIN] 10630 PROVER [FF734-ARIN] 10631 GEORGIA-STATE [CH3982-ARIN] 10632 PSE-AS [BM4721-ARIN] 10633 PINNACLESYS [JG208-ARIN] 10634 CORNERSTONE [PC445-ARIN] 10635 THE-BASTILLE [BP2710-ARIN] 10636 ACADEMY-D20 [HR965-ARIN] 10637 TROYSAT [SB6063-ARIN] 10638 KANA [MG964-ARIN] 10639 ALPHABLOX [SM2456-ARIN] 10640 DATANETSA [RGF18-ARIN] 10641 TICKETMASTER-AS [CF367-ARIN] 10642 POWERNET [DH47-ARIN] 10643 SUBURBCABLE [DWW1-ARIN] 10644 ALLIEDSIGNAL-AA [AA2202-ARIN] 10645 APPLIEDINNOVATIONS [BA385-ARIN] 10646 TVCN-AS [HO88-ORG-ARIN] 10647 NACM [BT76-ORG-ARIN] 10648 PACIFICBROK [BR286-ARIN] 10649 TELEPAR-NET [PB138-ARIN] 10650 EXTREME-AS [EIN-ORG-ARIN] 10651 INCC [IC2-ORG-ARIN] 10652 NETSIDE [MLH3-ARIN] 10653 MVANET [DS4296-ARIN] 10654 CONXNETASN0 [PE416-ARIN] 10655 BUREAU-NAT-AFF [CNS4-ORG-ARIN] 10656 ECOL [SL3770-ARIN] 10657 GIANTSTEP [JH4086-ARIN] 10658 GEEKLAB [ZT4-ARIN] 10659 SEQUENT-CS2 [MF56-ARIN] 10660 SYSNET-AS [MM1590-ARIN] 10661 AUGLINK [DE165-ARIN] 10662 NORFOLK-SOUTHERN [GE107-ARIN] 10663 DISCOVERNET-ASN1 [BB411-ARIN] 10664 ISD [HC50-ARIN] 10665 SKYNET [MJ79-ARIN] 10666 ALLERGAN [ICI6-ARIN] 10667 FSIWEBS-NET1-AS [FG345-ARIN] 10668 LEE-ASN [JR849-ARIN] 10669 JOBTRAK-AS [KR44-ARIN] 10670 PRODEMGE-AS [GEF8-ARIN] 10671 CONAE [HM5-ARIN] 10672 REDSTORM [PD1758-ARIN] 10673 AFFINI [ZA94-ARIN] 10674 GRUCOM [RS2456-ARIN] 10675 VIET-MY [AN1146-ARIN] 10676 GLOBALEC [MH6320-ARIN] 10677 OMNCS [TG1069-ARIN] 10678 TRENDS-NET [AB713-ARIN] 10679 INET-SVCS-AS [WMS-ARIN] 10680 IUPUI [ON6-ORG-ARIN] 10681 AOL-DTC1 [ANO3-ORG-ARIN] 10682 VISION21ASN [VR42-ARIN] 10683 CRUZIO [JR1102-ARIN] 10684 EMPIRENET [MG343-ARIN] 10685 SSI [JDE-ARIN] 10686 MYXA-ASN [SSW5-ARIN] 10687 CYBERUS [HOS319-ORG-ARIN] 10688 ISMNET [HF722-ARIN] 10689 FVI-CHI [FVI2-ORG-ARIN] 10690 NETSCOUT [KP1750-ARIN] 10691 COLINTERNET [LG991-ARIN] 10692 DLS-LITH [SR914-ARIN] 10693 VSPN-ASN [PB1003-ARIN] 10694 TMPW-DATANET [AKB8-ARIN] 10695 WAL-MART [DR4731-ARIN] 10696 MICROPATENT [MB654-ARIN] 10697 CABLENET [ZI86-ARIN] 10698 WR-TECH [TL509-ARIN] 10699 TELSOFT-AS [AD238-ORG-ARIN] 10700 TECINFO [ST343-ARIN] 10701 FIBERPLUS [NOC87-ORG-ARIN] 10702 INEL-AS [KW513-ARIN] 10703 QUADR [CH75-ARIN] 10704 LNCC [ALG21-ARIN] 10705 NU01-WS-NC [FM384-ARIN] 10706 GEMTEL [GY3-ARIN] 10707 MAGIBOXINC [KM81-ARIN] 10708 SELECTNET-AS [RT353-ARIN] 10709 NETUSA-AS [KP1182-ARIN] 10710 USCATL [FS331-ARIN] 10711 RCONNECT [MK530-ARIN] 10712 ISTRADA [MB1069-ARIN] 10713 HCNAP [NA102-ORG-ARIN] 10714 RIGROUP [BT164-ARIN] 10715 RCT-SC [ETLM-ARIN] 10716 OIS [RT68-ARIN] 10717 SCHOLASTIC [PP1859-ARIN] 10718 CONSECO [SM644-ARIN] 10719-10720 BAIS12 [CW408-ARIN] 10721 EMINETDOMAIN [NO36-ORG-ARIN] 10722 ALCOA [DG146-ARIN] 10724 HECENTER [HS1867-ARIN] 10725 GENENTECH [SM96-ARIN] 10726 INAV-NET [TL266-ARIN] 10727 NETACCESS-1 [JW855-ARIN] 10728 VOICESTREAM [BS995-ARIN] 10729 BUSINESSPRODUCTS [JB5610-ARIN] 10730 TBCNET [DH262-ARIN] 10731 DAEDAL-AS [NM301-ARIN] 10732 TIERRANET [TH33-ORG-ARIN] 10733 MATRIX [LE36-ORG-ARIN] 10734 SVWIRELESS [RB2873-ARIN] 10735 DATACOURSE [NL699-ARIN] 10736 ITLTD [DEB14-ARIN] 10737 BACTC [CC664-ARIN] 10738 MASTERLINK [MH106-ORG-ARIN] 10739 CYBERNET [JH3088-ARIN] 10740 OWO-AS [MR155-ARIN] 10741 WAMNET [AM646-ARIN] 10742 DENIZ [CA1556-ARIN] 10743 GLOBALFEED [ADM113-ORG-ARIN] 10744 IBT [ADJH-ARIN] 10745 ARIN [IP-FIX-ARIN] 10746 TAIS [GF1653-ARIN] 10748 QRC [GG986-ARIN] 10749 AFFINET [EL217-ARIN] 10750 COHESIVE [HH51-ARIN] 10751 GTS-ASN [HOS336-ORG-ARIN] 10752 SUPERHIGHWAY [IC-ORG-ARIN] 10753 XCOM [LC-ORG-ARIN] 10754 GOV-FRB-BOG [RS514-ARIN] 10755 DARTMOUTH-AS [ZD56-ARIN] 10756 VVM-AS [AH197-ARIN] 10757 SSDNET [JCF47-ARIN] 10758 INWAVE-AS [BM5-ORG-ARIN] 10760 THEBEAM [SS1099-ARIN] 10761 TRICETEL [NS509-ARIN] 10762 TESTDRIVE [RL3010-ARIN] 10763 WEBSIDESTORY [HO42-ORG-ARIN] 10764 STARTAP [JJ702-ARIN] 10765 CLOUDNET-AS [HM316-ARIN] 10766 ASN-TAIS-CSE [PW399-ARIN] 10767 HIPERNET-AS [RK18-ARIN] 10768 INFORAMP [JR470-ARIN] 10769 TIDALWAVE [BDB20-ARIN] 10770-10774 SBIS-ASN-BLK-2 [ZS44-ARIN] 10775 CAREERMOSAIC-00 [OC11-ARIN] 10776 NETSCAN [ST111-ARIN] 10777 ZEONET [RL440-ARIN] 10778 MCL [LD1227-ARIN] 10779 CHARTERMEDIA [MD388-ARIN] 10780 USXCHANGE [RD4229-ARIN] 10781 VINEYARD [SG76-ARIN] 10782 DIGITALIMCANDOVER [JB1046-ARIN] 10783 IWSC-AS1 [GB18-ARIN] 10784 TOTALITY [ZT100-ARIN] 10785 ISSANET [ADD-ARIN] 10786 OTTAWAGIGAPOP [ONET-NOC-ARIN] 10787 MOTHER-ASN [SW232-ARIN] 10788 CDW [WS2183-ARIN] 10789 BIGNET-AS [DA561-ORG-ARIN] 10790 INREACH-2 [NO57-ORG-ARIN] 10791 PDQNETINC [GC405-ARIN] 10792 WEBNETWORLWIDE [SQ59-ARIN] 10793 IDSOFT [BA2305-ARIN] 10794 BANKAMERICA [AV411-ARIN] 10795 ASN-DESARROLLOS [AB3934-ARIN] 10796 SCRR-10796 [ZS30-ARIN] 10797 MICH-COM [NO50-ARIN] 10798 SBICSA [SP3802-ARIN] 10799 PITTENCRIEF [CH4418-ARIN] 10800 INTERNETARENA-GW [DN1297-ARIN] 10801 AMSOUTH [AA578-ARIN] 10802 KOPPELNET [NM129-ARIN] 10803 EASTCOASTACCESS [AG3148-ARIN] 10804 RSCS-AS-1 [DB761-ARIN] 10805 9NETAVENUE [AB212-ARIN] 10806 AFP-NET [CM2833-ARIN] 10807 HOLE-IN-ONE [DL4390-ARIN] 10808 THE-GLOBE-AND-MAIL [DM175-ARIN] 10809 NCIA [EP371-ARIN] 10810 HARVESTCOMM01 [WW247-ARIN] 10811 IENET [INH-ARIN] 10812 THENET-HOUSTON-1 [RW9-ARIN] 10813 DELTATHREE [DG4828-ARIN] 10814 XSBANDWIDTH [RG1019-ARIN] 10815 KCNET [KN50-ORG-ARIN] 10816 DESKTALK-AS [MSD13-ARIN] 10817 GACONNECT [KB3662-ARIN] 10818 FULLNETOK [RL824-ARIN] 10819 ICC [SM713-ARIN] 10820 MECKLERMEDIA [PH535-ARIN] 10821 PIONEERINTERNET [KJ52-ARIN] 10822 UNISTAR [DCS7-ORG-ARIN] 10823 NETCARRIER [CP9-ARIN] 10824 BRHNET [WP647-ARIN] 10825-10833 USW-INTERACT11-19 [RJ1800-ARIN] 10834 ADVANCE-AS [AN83-ORG-ARIN] 10835 VISIONARY [JM810-ARIN] 10836 ASN-NJCC [BK52-ARIN] 10837 WELLSFARGO [MC6212-ARIN] 10838 OCEANIC-INTERNET-RR [CZ45-ARIN] 10839 CIN [AK309-ARIN] 10840 CAHWNET [JM12867-ARIN] 10841 SOLBR [JP7250-ARIN] 10842 ESCA-AS [TO852-ARIN] 10843 AITNET [CV673-ARIN] 10844 VASTNET [JF426-ARIN] 10845 HITCOMASN [TB1119-ARIN] 10846 DEERE [RM139-ARIN] 10847 PODERNET [ED876-ARIN] 10848 TELLURIAN-AS [RB590-ARIN] 10849 DCCCD [SG180-ARIN] 10850 MARC-GROUP [BJ1539-ARIN] 10851 NREP [ON2-ARIN] 10852 PREMIER-INTERNET [KS302-ARIN] 10853 ANDERSENCORP [JW1245-ARIN] 10854 AIRMEDIA [AF704-ARIN] 10855 AUTO-BY-TEL [JB12499-ARIN] 10856 LINKDATA [NO52-ORG-ARIN] 10857 JCPENNEY-AS [IJ30-ARIN] 10858 EUREKA-NET [MP441-ARIN] 10859 DYNCORP [BB105-ARIN] 10860 TOWERRECORDS-AS [CP135-ARIN] 10861 E-Z-NET [SJF2-ARIN] 10862 CURTISMATHES [CP3195-ARIN] 10863 WAVEFRONT [CSW2-ARIN] 10864 ELOGIC [BN85-ARIN] 10865 ABACOM-ASN [HOS177-ORG-ARIN] 10866 REDSAT-HOUSTON [MP5197-ARIN] 10867 FHDA-AS [AG32-ARIN] 10868 DOWNCITY [RS495-ARIN] 10869 ANX [RP317-ARIN] 10870 LINK-1 [JF2680-ARIN] 10871 NOAANWSERH [FV336-ARIN] 10872 DV-ASN [GC319-ARIN] 10873 SIEMENS-SMI [GR341-ARIN] 10874 SUNSET-DIRECT [EC187-ARIN] 10875 POP-RS [FK725-ARIN] 10876 MAOZ-ASN [DMM65-ARIN] 10877 CHAMBERS [BM563-ARIN] 10878 IBS-AS [ES561-ARIN] 10879 UHC [TW3051-ARIN] 10880 OTI [SW784-ARIN] 10881 POP-PR [WZ33-ARIN] 10882 CLARITYCONNECT [JL583-ARIN] 10883 WIZZARDS-MAGICK [HW80-ORG-ARIN] 10884 FRYMULTI-AS [TN1407-ARIN] 10885 ASAMINI [SSA12-ARIN] 10886 BWI-GIGA-POP [GS307-ARIN] 10887 BPSI-AS [DD293-ARIN] 10888 EI-AIX [LT1521-ARIN] 10889 TRENSEN [WTC21-ARIN] 10890 PNI [AC212-ARIN] 10891 UTSWEB [AD963-ARIN] 10892 ISSI [DG1792-ARIN] 10893 ILLINETWORKS [ZI27-ARIN] 10894 U11912 [MS1993-ARIN] 10895 DNS [ML2913-ARIN] 10896 VERIFONE [DMR59-ARIN] 10897 CAMARA-DEPUTADOS [MH7000-ARIN] 10898 BI-NET-SA [PD1076-ARIN] 10899 TANDYAS [CDS3-ARIN] 10900 EDUC-NET-PROV [FG84-ARIN] 10901 TERABIT [MA570-ARIN] 10902 BISYS-ATL-AS [MG2062-ARIN] 10903 DHC [MW206-ARIN] 10904 EQUISTAR-AS [SRC25-ARIN] 10905 CYBERTOONS [JA3245-ARIN] 10906 TELEMIG-ASN [GF1816-ARIN] 10907 XENERGY [RC2138-ARIN] 10908 UWORLD-NET [PT424-ARIN] 10909 STOCKMARKETPHOTO [JS7580-ARIN] 10910-10913 INTERNAP-BLK [INO3-ARIN] 10914 BRIN [RJ525-ARIN] 10915 CQL-AS [KA27-ARIN] 10916 TCTC [KC242-ARIN] 10917 IPNAV [RP4890-ARIN] 10918 CTAZ-AS [MK668-ARIN] 10919 BITS [DT54-ARIN] 10920 ILI [VB110-ARIN] 10921 KIHNETWORK [GMH26-ARIN] 10922 ACENET [ZA39-ARIN] 10923 THIRDPOINT [RP2181-ARIN] 10924 USCSNET [KM878-ARIN] 10925 HARR [RH6688-ARIN] 10926 DIGITALGREENHOST [JH8217-ARIN] 10927 PCH-SD-NAP [BW1324-ARIN] 10928 CTI-NETRAX [REG-ORG-ARIN] 10929 DATAART-AS [KA304-ARIN] 10930 NOVA-INTERNET [AW443-ARIN] 10931 AS-EXARIO [ZE30-ARIN] 10932 RAEX [PP224-ARIN] 10933 ATXNET-AS [ZA32-ARIN] 10934 BROWNCO [PY168-ARIN] 10935 RLC-INTERNET [BF1344-ARIN] 10936 CX-TO [DTC13-ORG-ARIN] 10937 IIS [HC643-ARIN] 10938 POP-PE [SB7511-ARIN] 10939 NETREX-DNVR [AH3587-ARIN] 10940 LAS-VEGASNET [MB2747-ARIN] 10941 MNNING-NPR-INFO-SERV [JP1426-ARIN] 10942 DSNET-AS [MED4-ARIN] 10943 SIRIUS-SYSTEMS [JJ52-ORG-ARIN] 10944 CBOOKS-AS [CC139-ARIN] 10945 WEBCC-AS1 [RJS14-ARIN] 10946 FUTURESOUTH-COM [TT35-ORG-ARIN] 10947 1WYO-NET [LA19-ARIN] 10948 APPLIEDMANAGEMENT [RK221-ARIN] 10949 ATHENSISP [EL42-ARIN] 10950 DNSCENTRAL [BG291-ARIN] 10951 TFSNET [DJ451-ARIN] 10952 NETRUNNERS-1 [IO16-ARIN] 10953 PECO [EM37-ARIN] 10954 SERPRO [TFS13-ARIN] 10955 WILPATERSON [FT64-ARIN] 10956 VALUEAMERICA [DL213-ARIN] 10957 REALMED [PJS7-ARIN] 10958 METRONETWORKS [PP2599-ARIN] 10959 NPCCORP [MJ548-ARIN] 10960 USW-INTERACT20 [BB17-ARIN] 10961 BGP-AS [VLC-ORG-ARIN] 10962 SMS-CORP-ASN [SH1983-ARIN] 10963 TRIBUNE-TV [GE84-ARIN] 10964 ASN-RCC [PR13-ARIN] 10965 MRNET [DE4-ARIN] 10966 ALASKA-AIR [DD448-ARIN] 10967 HOMEDEPOTNET [JC728-ARIN] 10968 CARGILL-NET [JHS2-ARIN] 10969 JPSNET [PT460-ARIN] 10970 LH [BM2003-ARIN] 10971 APEX [JC1328-ARIN] 10972 NF-CANET2 [RC266-ARIN] 10973 KALAMA [JH636-ARIN] 10974 Q-TEK [DM1741-ARIN] 10975 NET-AIG [SE192-ARIN] 10976 DURHAMNET [DF446-ARIN] 10977 IWBC [DT179-ARIN] 10978 RONCONET [RW13-ARIN] 10979 DAVE-WORLD [DL470-ARIN] 10980 VIFI [MP13-ARIN] 10981 CON-OK [MW421-ARIN] 10982 INTERNET-GATEWAY-NET [MMC-ARIN] 10983 TS [ZT122-ARIN] 10984 BAYOU-INTERNET-INC [JS279-ARIN] 10985 PCSLINK [RM723-ARIN] 10986 INTERMEDIA [TH683-ARIN] 10987 PLUMCREEK-AS [SR12-ARIN] 10988 METRONTECH-AS [MTH-ARIN] 10989 COBWEB [MS3877-ARIN] 10990 WINSTAR-TELEBASE [CT8-ARIN] 10991 DISCLOSURE-BETHESDA [GB10-ARIN] 10992 GIGA [LEB-ARIN] 10993 IDIOM-AS [DMS5-ARIN] 10994 TAMPA2-TWC-5 [JD6-ARIN] 10995 PNCBANK [NH1266-ARIN] 10996 CONCORDE [TA179-ARIN] 10997 INTDATA-AS [DL162-ARIN] 10998-11002 MLAMRS [VP33-ARIN] 11003 PANDG [PGR-ORG-ARIN] 11004 KNOWLEDGESOFT [JV22-ARIN] 11005 CHX-AS [DDC27-ARIN] 11006 MBCO-AS [PF126-ARIN] 11007 INCREDIBYTE [INO-ARIN] 11008 NETVERK-1 [SP168-ARIN] 11009 BIGCHALK [DA876-ARIN] 11010 PRC [MN2150-ARIN] 11011 UPR [GG281-ARIN] 11012 DDC-AS [RPR-ARIN] 11013 USMO-ASN [FB128-ARIN] 11014 CPS [AG24-ARIN] 11015 NET-YBP-ASN [NR9-ARIN] 11016 DV2U [GK352-ARIN] 11017 GREATLAND [AD58-ARIN] 11018 GLOBALACCESS [ADM113-ORG-ARIN] 11019 BERNSTEIN-AS [NSC2-ARIN] 11020 QNET-ASN [CL38-ARIN] 11021 INETONE-CORP [KC362-ARIN] 11022 ALABANZA-BALT [TC12-ARIN] 11023 SYSSRC [BR97-ARIN] 11024 FORWARDNET [ZF31-ARIN] 11025 IMS-NET [JR7096-ARIN] 11026 AADS-ANX [AM25-ARIN] 11027 KEMPER-INSURANCE [RD25-ARIN] 11028 TLDPANAMERICANA [GF15-ARIN] 11029 ASN-LATINEX-NET [RB38-ARIN] 11030 QUALCOMM [ZQ3-ARIN] 11031 NETAMERICA-INC [JP1013-ARIN] 11032 PYRAMIDNELSONS [AC22-ARIN] 11033 GVCINC [JA318-ARIN] 11034 RRD-FINANCIAL-HUDSON [JT3258-ARIN] 11035 TICNET [NO34-ORG-ARIN] 11036 SISCOM [RJ818-ARIN] 11037 MCI-AIAG [JS42-ARIN] 11038 DIVERSIFIED-COMM [NC300-ARIN] 11039 GWU [AG26-ARIN] 11040 FMR-AS1 [MB30-ARIN] 11041 INTERNET-CONNECT-FL [TJ2-ORG-ARIN] 11042 ONSI-NET1 [FD96-ARIN] 11043 USIWAY [DJ17-ARIN] 11044 HPLD [JK28-ARIN] 11045 STERLING [CK9-ARIN] 11046 CHROMATIC [SR18-ARIN] 11047 IAG [IAH2-ARIN] 11048 ZAPCOM [DR98-ORG-ARIN] 11049 ILINK-2 [AW2340-ARIN] 11050 KENT-STATE [RY5-ARIN] 11051 CYBERVERSE [COH3-ORG-ARIN] 11052 IHC-NET [MM67-ARIN] 11053 SISTECOL [DV6-ARIN] 11054 ETHERNETIX [RD50-ARIN] 11055 COMCAST [TL18-ARIN] 11056 NEWNORTH-NET [SW315-ARIN] 11057 WTHOMPSONCO [TH36-ARIN] 11058 NAP-CABASE-AR [MM1049-ARIN] 11059 NEODYME [MN18-ARIN] 11060 NEO-RR-COM [AB58-ARIN] 11061 HUGHES-EC [MH540-ARIN] 11062 MTCO [AW871-ARIN] 11063 AS-MICROSTAR [PHA-ARIN] 11064 STB-ASN [MM71-ARIN] 11065 NCI [TP25-ARIN] 11066 CNFNET [RW28-ARIN] 11067 PTSINET [CW1642-ARIN] 11068 IMAGEWORKS-COMPUTING [MB897-ARIN] 11069 IEI-NET-ASN [IA7-ORG-ARIN] 11070 LINC [NOC110-ORG-ARIN] 11071 INFOWEST [AG44-ARIN] 11072 AUTO-WEB [AH43-ARIN] 11073 LEXITECH-BRANFORD [TT28-ARIN] 11074 INTER-POL-1 [TH42-ARIN] 11075 TEL-NETCOM-NET-01 [DA40-ARIN] 11076 NETUSER-AS [GM210-ARIN] 11077 MOSSADAMS [DF364-ARIN] 11078 BROWN [DW565-ARIN] 11079 ATT-CA-11079 [ZA95-ARIN] 11080 LINKMAX [HC18-ARIN] 11081 ANTELNET [JF22-ARIN] 11082 BRAINLINK-INTL-INC [RG60-ARIN] 11083 SEXCOM [SMC4-ARIN] 11084 HURONTEL [GG35-ARIN] 11085 PLAYGROUND-NORTEL [AB5431-ARIN] 11086 PITNEYBOWES-AS-1 [DR1044-ARIN] 11087 CFE-NET [AA18-ARIN] 11088 UTW-AVTEL [AA19-ARIN] 11089 WEBTASN [JB103-ARIN] 11090 MTAONLINE-AS [DL219-ARIN] 11091 ORONET [SJ38-ARIN] 11092 HEVANET [CS59-ARIN] 11093 DATAWAY [NO56-ORG-ARIN] 11094 ASN-UMDNJ [SE16-ARIN] 11095-11096 FLORIDANET [CB35-ARIN] 11097 EMBRAPA [EA15-ARIN] 11098-11099 SBC-NET [JN409-ARIN] 11100 TOADNET [TDA-ARIN] 11101 CHARTER-COMM [MC978-ARIN] 11102 CLIPPERNET [TS34-ARIN] 11103 EXECULINK-ASN [JAT-ARIN] 11104 USW-INTERACT21 [BB17-ARIN] 11105 OCSLINK [JVS10-ARIN] 11106 WOLFRAM-AS [MTS-ARIN] 11107 ICS-MONTANA [LS51-ARIN] 11108 WIIG [SCW-ARIN] 11109 STATE-OF-ALABAMA-ISD [KJ15-ARIN] 11110 FASTINET-AS [JN480-ARIN] 11111 MEDICAL-ECONOMICS [TH46-ARIN] 11112 STOCKPOINT-NAC [IR15-ARIN] 11113 ANASERVE [SS2039-ARIN] 11114 WINTEK-CORP [SB64-ARIN] 11115 BIZSERVE [ZO25-ARIN] 11116 EUROPA [EA268-ARIN] 11117 TEKCONNECT-AS [MA728-ARIN] 11118 COMTECK [KC242-ARIN] 11119 CA-WMMERCER-11119 [ZW37-ARIN] 11120 NETREACH [DG100-ARIN] 11121 FIRSTDATACORP-DB [CZ-ARIN] 11122 CACI-NET [EM29-ARIN] 11123 UIA [WZ2-ARIN] 11124 WAVO [HL70-ARIN] 11125 EBIZ [HV9-ARIN] 11126 CARLE-ASN [DB96-ARIN] 11127 NETSAT-AS [JC91-ARIN] 11128 DONBEST [KB25-ARIN] 11129 COMPATIBLESYSTEMS [JG75-ARIN] 11130 TC3NET-AS [JM90-ARIN] 11131 UMBC-AS [MC712-ARIN] 11132 DSS-ONLINE [ML65-ARIN] 11133 REITERASSOC1 [CR29-ARIN] 11134 WEBFIRE-MILTEL [MF1742-ARIN] 11135 COMNET-COMMUNICATIONS [KH31-ARIN] 11136 ITESM-RZP [CA565-ARIN] 11137 ACCESSINTERNET [JFA7-ARIN] 11139 CWDOM [AA27-ARIN] 11140 GTE-WIRELESS-DATA [JB44-ARIN] 11141 FOREX-MG [AR31-ARIN] 11142 FLC-ASN [FNA2-ORG-ARIN] 11143 NORFOLK-COUNTY [TM59-ARIN] 11144 ADVENT-SOFTWARE [NOA1-ARIN] 11145-11149 BAIS14 [NSS2-ORG-ARIN] 11150 ALTINET-AS1 [RL1772-ARIN] 11151 INTERLIANT-AS [RK521-ARIN] 11152 WAVEPHORE [DF2-ARIN] 11153 NOMURA-AS [MN23-ARIN] 11154 SWS [ZS167-ARIN] 11155 QUADCITIESONLINE [GB54-ARIN] 11156 POP-CE [RNP-ARIN] 11157 ELAB-AS [SS98-ARIN] 11158 NETDEPON [KF139-ARIN] 11159 LAPL-LAPUBLICLIBRARY [JV28-ARIN] 11160 COMPS-AS [MH95-ARIN] 11161 800-FLOWERS [JM131-ARIN] 11162 MXNET [RC97-ARIN] 11163 THEINTERNETSHOP [KC245-ARIN] 11164 WILLINET [MT247-ARIN] 11165 DPI [TM264-ARIN] 11166 JFAX [QT2-ARIN] 11167 BORG [JH1916-ARIN] 11168 ASN-DPC [LA115-ARIN] 11169 NET-WEIRNET-US-01 [DS1780-ARIN] 11170 BEWELLNET [MPM49-ARIN] 11171 REPIND [DC38-ARIN] 11172 ALESTRA-NET-BACKBONE [IA21-ARIN] 11173 NMIX [HOS159-ORG-ARIN] 11174 ONESOFT-ASN [AT568-ARIN] 11175 CYBERSURF [SA309-ARIN] 11176 ASTRAMERCK [JW1334-ARIN] 11177 QUESTAR [LS39-ARIN] 11178 AUGUST-ASN [GF26-ARIN] 11179 SPECDATA [AT54-ARIN] 11180 UFMS-POP-MS [PB41-ARIN] 11182 RIMES01 [CF23-ARIN] 11183 MHTC-NET [SW315-ARIN] 11184 INTERGRAM [JB70-ARIN] 11185 CORE [SS169-ARIN] 11186 DMCI-NET [RT27-ARIN] 11187 ANXO [RP317-ARIN] 11188 LACOUNTY-ISD [MH325-ARIN] 11189 GRIC [SN122-ARIN] 11190 SILCON [MD348-ARIN] 11191 ELITE-NET [JM4421-ARIN] 11192 AT-FINANCIAL [TP1918-ARIN] 11193 COMNET [NP93-ARIN] 11194 NUNETPA [JK744-ARIN] 11195 COHO-ASN [EF24-ARIN] 11196 NESTLE-USA [MC102-ARIN] 11197 DART-HITCH [RCD13-ARIN] 11198 APC [AL33-ARIN] 11199 VMT [SA756-ARIN] 11200 UACT [JP107-ARIN] 11201 BFA-NET-AS [PG45-ARIN] 11202 DBNA [VP5-ARIN] 11203 SEITZ-TECH [JRS-ARIN] 11204 IAI-NET-AS [JS165-ARIN] 11205 CITY-OF-PHILADELPHIA [CF27-ARIN] 11206 EAZENET [CS3652-ARIN] 11207 BOSTONGLOBENET [KL27-ARIN] 11208 NET-BOWNE-GS [NM3-ORG-ARIN] 11209 ONLINE2000 [PM76-ARIN] 11210 EVERENSEC [BV10-ARIN] 11211 HEARTNET [LT270-ARIN] 11212 REALTIMEQUOTES-1 [BO18-ARIN] 11213 LVLT [LC-ORG-ARIN] 11214 ADGRAFIX [RB1043-ARIN] 11215 LOGIXCOMM-AS [ZL88-ARIN] 11216 HOSTCENTRIC [TS1424-ARIN] 11217 CABLEVISION-LOUDOUN [MRM-ARIN] 11218 WARPONE [CL69-ARIN] 11219 INXPRESS [BG56-ARIN] 11220 THIRD-COAST-2 [TC162-ORG-ARIN] 11221 WHRONET [JK2066-ARIN] 11222 LOGICAL-ASN [AH3547-ARIN] 11223 UTAHINTERNETSERVICES [DD92-ARIN] 11224 SIR [BP41-ARIN] 11225 USW-INTERACT22 [DW83-ARIN] 11226 USW-INTERACT23 [DW83-ARIN] 11227 N-LINK [RG1116-ARIN] 11228 ARINC [PJ10-ARIN] 11229 BRANDYWINENET [AL555-ARIN] 11230 INT-OF-GREENVILLE [JP1013-ARIN] 11231 GETTYSBURG-DOM [EY-ARIN] 11232 MIDCO-NET [HOS422-ORG-ARIN] 11233 GORGE-NETWORKS [ZG45-ARIN] 11234 NTCN [LN9-ARIN] 11235 BHCIHC [GA28-ARIN] 11236 UNIFI [MK262-ARIN] 11237 EAFIT [OG6-ARIN] 11238 NWOL-AS [AJ464-ARIN] 11239 KENNETT [BS95-ARIN] 11240 ACCESSATC [NL10-ARIN] 11241 DLRYANPARTNERSHIP [SF3154-ARIN] 11242 POP-SC [ETLM-ARIN] 11243 YNINET [DH120-ARIN] 11244 COMPBANK [JB182-ARIN] 11245 GOODYEAR-US-AKRONHQ01 [KS122-ARIN] 11246 WATERHOUSE [WK14-ARIN] 11247 IBSINC [BH83-ARIN] 11248 MULTISERVICE-NET [TW293-ARIN] 11249 CONTROLNET [SE26-ARIN] 11250 TRI-STATE-G-AND-T [RJ178-ARIN] 11251 TECHWAVE [HO13-ORG-ARIN] 11252 ISU-NET-AS [BH167-ARIN] 11253 SPECTRACOM-INC [TA19-ARIN] 11254 POP-RN [PSM3-ARIN] 11255 SBT-NET [JO214-ARIN] 11256 ABACONET [EJ148-ARIN] 11257 UNIVERSITY-LETHBRIDGE [JO851-ARIN] 11258 EDOC [AW787-ARIN] 11259 ANGOLATELECOM [AC67-ARIN] 11260 ANDARA-HSI [ADA-ARIN] 11261 ADVSYS-AS [GA87-ARIN] 11262 CWAIPNETWORK [BA449-ARIN] 11263 INTERNOVA [JB205-ARIN] 11264 IDIR [MS338-ARIN] 11265 RAPID [ITM-ARIN] 11266 VALLEYBUSEQ [MS40-ARIN] 11267 DYNALINKTEL [AB57-ARIN] 11268 WNM-ORG [BB118-ARIN] 11269 CWBDA [DD105-ARIN] 11270 NETWRIGHT [ML84-ARIN] 11271 COMSAT-BR [FC31-ARIN] 11272 TELAPEX [RR5188-ARIN] 11273 FDCSGNET [AH1291-ARIN] 11274 ADHOST [RS141-ARIN] 11275 ART-SEA-1 [KH80-ARIN] 11276 DATAHUB [DF889-ARIN] 11277 NIPSCO [TS393-ARIN] 11278 NINTENDO [BO71-ARIN] 11279 GEORGE-MASON-UNIV [JH2084-ARIN] 11280 US-OFFICE-PRODUCTS [BJ29-ARIN] 11281 COFFEE [JR124-ARIN] 11282 INDUSTRIAL-STRENGTH [SB106-ARIN] 11283 COSTCO [ZC167-ARIN] 11284 TELEBRASILIA [NS15-ARIN] 11285 FLYCAST-OPEN-NETWORK [RN74-ARIN] 11286 KEYBANK [JM187-ARIN] 11287 NETRESPONSE [NB21-ARIN] 11288 PREFERRED-INTERNET [RS154-ARIN] 11289 CYBERWORKS [BM109-ARIN] 11290 RAPIDUS [SP3087-ARIN] 11291 USDIAL [BP49-ARIN] 11292 QNET [RN65-ARIN] 11293 UCOP-ASN [UD14-ORG-ARIN] 11294 MHSC-NET [RM993-ARIN] 11295 BRHS [FM23-ARIN] 11296 INTERPATH2 [II22-ARIN] 11298 GREENNET-ASN [WL489-ARIN] 11299 DIALISDN [AC852-ARIN] 11300 LYMANBROS [TH360-ARIN] 11301 CMN-AS [MA60-ARIN] 11302 GTECH [DC129-ARIN] 11303 DATARETURN [JL4836-ARIN] 11304 SPLUS [MO36-ARIN] 11305 INTERLAND-NET1 [ZI82-ARIN] 11306 IOWNC-IOA [SL1539-ARIN] 11307 6750REI [KM157-ARIN] 11308 PDXINTEGRITY-1 [SR3136-ARIN] 11309 IMF [IUS2-ORG-ARIN] 11310 BOSTONPUB [JM205-ARIN] 11311 SINECTIS [PC2022-ARIN] 11312 NETWORKTWO [DH358-ARIN] 11313 FANNIEMAE [SP83-ARIN] 11314 SRCFINDER-NET [HA680-ARIN] 11315 CRM-AR [GC522-ARIN] 11316 NERC [TH97-ARIN] 11317 GPN [RRS31-ARIN] 11318 GU [CW69-ARIN] 11319 DATARECALL [TB98-ARIN] 11320 INTERNET-EXPRESS-INC [KH67-ARIN] 11321 EXPANSION-PROGRAMS [JT235-ARIN] 11322 EFORTRESS [DG1599-ARIN] 11323 GETTYIMAGES [JB239-ARIN] 11324 ARTNET [EJ631-ARIN] 11325 LIGHTSTREAM [DA515-ORG-ARIN] 11326 ASN-EASTMAN-CHEMICAL [DE157-ARIN] 11327 ETHERGATE [NS16-ARIN] 11328 BIO-RAD-ASN [GD389-ARIN] 11329 ASN-USI [UH-ARIN] 11330 IMALL [SWF-ARIN] 11331 DETESAT-AS [FK8-ARIN] 11332 MAINSTREAM-COM-1 [CP38-ARIN] 11333 CYBERTRAILS [DL45-ARIN] 11334 MIDAMERICAN [ZM58-ARIN] 11335 APISNET [AJI-ORG] 11336 BGLOBAL [JW142-ARIN] 11337 APLNYC-ASN [MTW-ARIN] 11338 LINKEXPRESS [VFS-ARIN] 11339 AS-BONZI [MS239-ARIN] 11340 REUNA-1 [OE-ARIN] 11341 EASYNET-US [EH34-ARIN] 11342 PATHWAY [ZZ32-ARIN] 11343 ICOM-NET [ML125-ARIN] 11344 MAXWELL-NET1 [TS122-ARIN] 11345 ASN-ONEIPNET [OH10-ARIN] 11346 MDCONSULT [DP4953-ARIN] 11347 ORC-F2 [DF82-ARIN] 11348 BENCHMARKONLINE-ASN0 [PE416-ARIN] 11349 ACCUCOMM [RG35-ARIN] 11350 PGC [PA37-ARIN] 11351 RR-NYSREGION-ASN-01 [SH117-ARIN] 11352 POLLAK [CR59-ARIN] 11353 RAE575 [CB129-ARIN] 11354 DBN [ZD61-ARIN] 11355 SHELL [RD109-ARIN] 11356 TELECOM-AR [RG97-ARIN] 11357 INFO-IQTINC [LM67-ARIN] 11358 RECOM [EW38-ARIN] 11359 RMCNEVADA [CC144-ARIN] 11360 ELECFORIMAG [BAJ-ARIN] 11361 IVTWPCO-BB1 [DB194-ARIN] 11362 IBE300 [RB6235-ARIN] 11363 FUJITSU-USA [AG74-ARIN] 11364 ACTEL-USA-AS [BB40-ARIN] 11365 STENTOR-ISN [ZS74-ARIN] 11366 MINERVA-NETWORK-SYS [VM124-ARIN] 11367 ICENET [BC1251-ARIN] 11368 T3TECH [BP870-ARIN] 11369 CDSASN [BJ261-ARIN] 11370 UNEED [JM259-ARIN] 11371 UUNET-AS-11371 [RNH2-ARIN] 11373 PEOPLES-NETWORK [PS112-ARIN] 11374 META-AS1 [CS118-ARIN] 11375 JANUS-NET [CY18-ARIN] 11376 JWSC [JZ24-ARIN] 11377 LATINET [CS120-ARIN] 11378 DVN [DO54-ARIN] 11379 EAGLENETCTI [ML106-ARIN] 11380 INTERNETOFFICEPARKS [RK74-ARIN] 11381 NFIS [CW77-ARIN] 11382 WRF-NET [VB17-ARIN] 11383 XAND [ZX8-ARIN] 11384 ASN-MORGAN2 [QM4-ARIN] 11385 MADOFFNY1 [GM113-ARIN] 11386 WWNET-AS [SG82-ARIN] 11387 HOBONET [SM160-ARIN] 11388 MAXIM [GM114-ARIN] 11389 CYBERPORT-AS [KR119-ARIN] 11390 UNIEMP-AS [MA221-ARIN] 11391 MICROGRAFX0001 [WDH-ARIN] 11392 NOSIS [PSJ2-ARIN] 11393 METROPOL [AB142-ARIN] 11394 DAMEDIA [AD138-ARIN] 11395 NETWORKWORLD [RB193-ARIN] 11396 TWC-ASN [DB285-ARIN] 11397 EMJ-INTERNET [SRE2-ARIN] 11398 SPWR [IG58-ARIN] 11399 WILLIAMSCOLLEGE [PC120-ARIN] 11400 TELCOM [AK1224-ARIN] 11401 CPINTERNET-1 [DO99-ARIN] 11402 ADVHEALTH-ASN [NO21-ARIN] 11403 NYINTERNET [EK121-ARIN] 11404 POINTSHARE-SEA [BL76-ARIN] 11405 EIC [BS164-ARIN] 11406 CZINET [MP400-ARIN] 11407 WARP9-TECH [JL151-ARIN] 11408 KWE-AS [BS166-ARIN] 11409 EFXSECURE [DG108-ARIN] 11410 REGIONALNETWORK [JC278-ARIN] 11411 TOURNET [EGR-ARIN] 11412 USW-INTERACT25 [DW83-ARIN] 11413 BXCOM [PJL4-ARIN] 11414 NVIDIA-NET [DW1203-ARIN] 11415 IMPSAT-BR [SS987-ARIN] 11416 METAWIRE [BW84-ARIN] 11417 NIU [HLK1-ARIN] 11418 AVALON [DL260-ARIN] 11419 CTBCAMPO [AL69-ARIN] 11420 TRIBUNE-COMPANY [AA3-ORG-ARIN] 11421 ACMENET [MPC3-ARIN] 11422-11423 CALREN-2 [DLW31-ARIN] 11424 FCCC-EDU [RG114-ARIN] 11425 VARCOINTERNATIONAL [JL157-ARIN] 11426 SCRR-11426 [ZS30-ARIN] 11427 SCRR-11427 [ZS30-ARIN] 11428 1-MICRONPC [RD116-ARIN] 11429 VSTREAMINC [JT4925-ARIN] 11430 BESTNAP [RV45-ARIN] 11431 PLANETARIUM-ASN [EL36-ARIN] 11432 BRASILNET [JF124-ARIN] 11433 PORTALS [WS45-ARIN] 11434 ASN-PEAKTOP [VL19-ARIN] 11435 INTONLINE [CS1991-ARIN] 11436 CRC-GIGAPOP [WFM-ARIN] 11437 DATAONAIR [HH1447-ARIN] 11438 BIGDOG-CISA [TB127-ARIN] 11439 INTERNETREVEALED [WR115-ARIN] 11440 NETSVILLE [NA123-ARIN] 11441 WEBBLAZERS-TFS [DPH4-ARIN] 11442 MIEN1 [AN36-ARIN] 11443 OLM [DA16-ARIN] 11444 PRIMUSDSLINC [IP86-ARIN] 11446 XYLANMASS-AS [LF20-ARIN] 11447 IWM [AL1941-ARIN] 11448 VGT [AP69-ARIN] 11449 INTERACTIVEBROKERS [EM61-ARIN] 11450 XLNET [PG70-ARIN] 11451 ASN-INTERLINK-NETWORK [TH683-ARIN] 11452 MOUNT-SINAI [AP412-ARIN] 11453 ASN-SWITCHVIEW [EL32-ARIN] 11454 VERACITI [CC1054-ARIN] 11455 WORLD-NET [RC1387-ARIN] 11456 CAROLINA-ONLINE [NS21-ARIN] 11457 TAYLOR [RM1266-ARIN] 11458 IMBRIS [RM830-ARIN] 11459 BURGOYNE-DOM [ZB98-ARIN] 11460 PNBD-AS [RM219-ARIN] 11461 SPRINTBWG [ZS170-ARIN] 11462 PARACOM [CB2179-ARIN] 11463 CDB-INFOTEK [DK98-ARIN] 11464 SKYWAVES-NEWSOURCE-1 [DD155-ARIN] 11465 AISI-NET [JL156-ARIN] 11466 INTERNET-ALLEGIANCE [GO219-ARIN] 11467 UNET-TW-ST [SH155-ARIN] 11468 NSDATA [NNA3-ARIN] 11469 WAVECOM [JK89-ARIN] 11470 RSNA-ASN [DP116-ARIN] 11471 EASTLAND-INTERNET [RV217-ARIN] 11472 COM-LINK-AS [GS122-ARIN] 11473 WCOILASN [WN40-ORG-ARIN] 11474 BMC [IB12-ARIN] 11475 WARPONE-2 [CL69-ARIN] 11476 CORPEXP [CF172-ARIN] 11477 GOC-AS [DO62-ARIN] 11478 OPENFACE [HM157-ARIN] 11479 BRM-SUN-AS [FL37-ARIN] 11480 MDXNET [DS1030-ARIN] 11481 LABRATS [PF42-ARIN] 11482 ANSON [ML138-ARIN] 11483 WCNET [RW1331-ARIN] 11484 NET-LINK [JP1440-ARIN] 11485 ARC2 [CB202-ARIN] 11486 WAN [WN-ORG-ARIN] 11487 GREY-NY [AH115-ARIN] 11488 REDSTONECOM [KM125-ARIN] 11489 BACI [TS167-ARIN] 11490 MASH-COM [SM187-ARIN] 11491 TRIVALENT [RR147-ARIN] 11492 CABLEONE [EB12-ARIN] 11493 ICENET-2 [TH81-ARIN] 11494 NET-TTC-ASN [KY13-ARIN] 11495 HRL-WINS [YZ5-ARIN] 11496 PAYMENTECH [TM5899-ARIN] 11497 BESC [ETLM-ARIN] 11498 DIBI [ODA-ARIN] 11499 WHOI-WOODSHOLE [ARM5-ARIN] 11500 PEAKPEAK [DA110-ARIN] 11501 BTSR-ASN [BM3951-ARIN] 11502 IJNT [JW662-ARIN] 11503 DATACOOP [BC133-ARIN] 11504 WHITE-CASE-1155 [KL57-ARIN] 11505 FIBERDIRECT [CC143-ARIN] 11507 TOUCHAMERICA [GMK2-ARIN] 11508 FISERV-DENVER [LP44-ARIN] 11509 PAJO [ZP48-ARIN] 11510 CLOVERNET [PS796-ARIN] 11511 U1-NET [MJS6-ARIN] 11512 SAILNET [DB827-ARIN] 11513 GETUS [TLF3-ARIN] 11514 TOWERNET [GS151-ARIN] 11515 QUESTNET-ASN [IC148-ARIN] 11516 PENCOM [DC648-ARIN] 11517 SKYCACHE [JEK2-ARIN] 11518 ASN-SKYE [SDA-ORG-ARIN] 11519 GFNORTE-AS [JG200-ARIN] 11520 ALLSTATE-INSURANCE-CO [JH241-ARIN] 11521 MMI [SP117-ARIN] 11522 SUD-WIREDAS [ZG82-ARIN] 11523 RAYVA [PR90-ARIN] 11524 SEGNET [SEG2-ARIN] 11525 HRTC [KM128-ARIN] 11526 USHOST-AS [ZF31-ARIN] 11527 CYBERCENTER [CNO1-ARIN] 11528 PHOTRONICS [CN44-ARIN] 11529 NIMO-AS [ZN70-ARIN] 11530 SPUN [IG58-ARIN] 11531 INTRAWORLD-NET [AB129-ARIN] 11532 IMCONLINE [CW652-ARIN] 11533 VERITY-AS [CR2586-ARIN] 11534 PHILA-SCHOOL-DISTRICT [RW1410-ARIN] 11535 NET-UALNET-AS [WS49-ARIN] 11536 FORE-AS [MM325-ARIN] 11537 ABILENE [GTA-ARIN] 11538 USW-INTERACT24 [DW83-ARIN] 11539 REPRAHDUCE-LA [BH130-ARIN] 11540 WANS-LACA1 [HO-ORG-ARIN] 11541 GREATLAKES [CM128-ARIN] 11542 ZEBRANET-MOB [MK17-ORG-ARIN] 11543 COLLECTIVE [AP79-ARIN] 11544 DAIN-ASN1 [DM267-ARIN] 11545 IXL-TOC [TO-ORG-ARIN] 11546 UNOMAHA-AS [SL136-ARIN] 11547 TRILOBYTE [NL12-ARIN] 11548 DRAGONNET [AR75-ARIN] 11549 ACCELERNET [JL191-ARIN] 11550 BMISBLM-AS [NOA3-ORG-ARIN] 11551 PRESSROOM [GG88-ARIN] 11552 PHL [RB251-ARIN] 11553 CALICO [JL194-ARIN] 11554 ACADIANET [JK152-ARIN] 11555 ASCENTRIX-AS [CF184-ARIN] 11556 CW-PANAMA [RM276-ARIN] 11557 HOLLISTER-INTERNET [DC2108-ARIN] 11558 DOMAINGR [CG98-ARIN] 11559 PERFEKT [WK29-ARIN] 11560 WEST [BR219-ARIN] 11561 PARTES-CORPORATION [LB103-ARIN] 11562 NET1-VENEZUELA [GM773-ARIN] 11563 NETENTERPRISE [CZ45-ARIN] 11564 BINDCO [DS1598-ARIN] 11565 COMETSYSTEM [KP81-ARIN] 11566 ESCAPE-AS [PL247-ARIN] 11567 GANNETT3-NET [PR542-ARIN] 11568 SHOPPING-COM [CG99-ARIN] 11569 SATDATA [MI41-ARIN] 11570 MSLO-1 [JT5355-ARIN] 11571 LANACION [RB264-ARIN] 11572 MEDIACOM [JW4395-ARIN] 11573 BUCKEYEWEB [RD137-ARIN] 11574 AVALONSYS [FDR4-ARIN] 11575 SIRS-ASN [BM204-ARIN] 11576 THUNDERBIRD-AGSIM [TDH-ARIN] 11577 GOVNET-ASN [RZ12-ARIN] 11578 GANNETT2-NET [REW14-ARIN] 11579 LANLINE [TL515-ARIN] 11580 POWERTEL-INC [JP249-ARIN] 11581 TRANSTEL-SA [JM402-ARIN] 11582 ATCALL [NP17-ARIN] 11583 NET4PROFIT [PB99-ARIN] 11584 INTERGATE-E [YK18-ARIN] 11585 ZUPERNET [BR78-ARIN] 11586 NETVITALITY [BRW-ARIN] 11587 EWOL-COM [GW88-ARIN] 11588 AS-ELDOSALES [NO118-ARIN] 11589 DATAWAVE-TECH [RS305-ARIN] 11590 CUMBERLAND-TECH [DA28-ORG-ARIN] 11591 KLONDYKE [BW1195-ARIN] 11592 NET-ALAGOAS [RS306-ARIN] 11593 IBS-INTERNATIONAL [DN42-ARIN] 11594 COLLEGEEDGE [PJ98-ARIN] 11595 NETSONIC [AS159-ARIN] 11596 BESTBUY [WA25-ARIN] 11597 SW19NET [DA1380-ORG-ARIN] 11598 RECOL-CT [JE284-ARIN] 11599 NETV-AR [AB3934-ARIN] 11600 TUTTLE-ASN [NA36-ARIN] 11601 VERTONET [TM165-ARIN] 11602 SDSMT-AS [SB164-ARIN] 11603 THE-SPA [AC118-ARIN] 11604 HIS-NOC [HIS-NOC-ARIN] 11605 ASN-XEDIA [DR173-ARIN] 11606 WOL-AS [KS617-ARIN] 11607 SD-STATE-UNIVERSITY [PH122-ARIN] 11608 ACTTG [IA102-ARIN] 11609 NOVA [ZN75-ARIN] 11610 INETNEBR-1 [DA1906-ARIN] 11611 WNONLINE [JK1423-ARIN] 11612 CW-NC [AL378-ARIN] 11613 WPNET-AS [AET6-ARIN] 11614 VIP-CONNECT [TA60-ARIN] 11615 WEBEXNET [PC107-ARIN] 11616 PEAPOD [JS462-ARIN] 11617 COMSATMEX-ARIN [AA69-ARIN] 11618 REXALL-SUNDOWN [LK41-ARIN] 11619 INTRACO-ARIN [SA122-ARIN] 11620 SUCCEED-NET [MK197-ARIN] 11621 ASN-TOWNHALL [JG247-ARIN] 11622 INFOSPACE [BS230-ARIN] 11623 CTCN [BS231-ARIN] 11624 INTEREALTYNET [NO30-ARIN] 11625 VP63-ORG-ASN [SS289-ARIN] 11626 ULSTERNET [DS237-ARIN] 11627 LEXITRANS [HS69-ARIN] 11628 MPLANET-ASN1 [KH99-ARIN] 11629 DOTSTAR-INTERNET [MC214-ARIN] 11630 AOL-RTC2 [AOL-NOC-ARIN] 11631 AOL-DTC [AOL-NOC-ARIN] 11632 COMDISCO [BM218-ARIN] 11633 WALLDATA [TN67-ARIN] 11634 PROMUS-HOTEL-CORP [KS176-ARIN] 11635 ADPESNET-ASN [DH307-ARIN] 11636 ISIS2000 [CH151-ARIN] 11637 SHADOWLINK [LJ27-ARIN] 11638 MATCHLOGIC [JMB162-ARIN] 11639 FSCNET [CW113-ARIN] 11640 GROUP-ONE-TRADING [KJ65-ARIN] 11641 INTUIT-SD [NO32-ARIN] 11642 SICOAR-AR [HS70-ARIN] 11643 EBAY [AG634-ARIN] 11644 ACESSONET [LM115-ARIN] 11645 NASPERS [HT30-ARIN] 11646 NETWORKS-PLUS [BF89-ARIN] 11647 SENTEX-NET [MT1960-ARIN] 11648 TCE-AS [RO60-ARIN] 11649 TECH-EDGE [DL198-ARIN] 11650 PLDI [SC157-ARIN] 11651 FREEIASN [GB130-ARIN] 11652 DATATONE [HB52-ARIN] 11653 ESS-PR-WEBMASTERS [JA166-ARIN] 11654 RR-BINGHAMTON-ASN-01 [ZS30-ARIN] 11655 RELIANCE-INSURANCE-GP [CK58-ARIN] 11656 CITICOM-AS [DA205-ARIN] 11657 LEGG-MASON-CORP-NET [SLS-ARIN] 11658 NCITECH [DB1208-ARIN] 11659 KUMC [BH4305-ARIN] 11660 BANKGATE [SR124-ARIN] 11661 AVHOSPITAL [AS185-ARIN] 11662 LASVEGAS-COM [MC221-ARIN] 11663 SERVERCOM-INC [MH284-ARIN] 11664 KEYTECH-LD [DT84-ARIN] 11665 IMG-AS [AR312-ARIN] 11666 NEXICOM-CA [TA72-ARIN] 11667 INTEGRITYONLINE7 [MD211-ARIN] 11668 WCI-NET [PQ21-ARIN] 11669 ASN-REALSELECT-HQ [JS511-ARIN] 11670 XPRESSTRADE [AJS-ARIN] 11671 BIGCHARTS [JM439-ARIN] 11672 GV-NET-AS-1 [JK183-ARIN] 11673 LATIN1 [NM61-ARIN] 11674 RADIAN-AUSTIN-001 [CA431-ARIN] 11675 ZEBECDATA [BF98-ARIN] 11676 ACSBPS [AA88-ARIN] 11677 ITESM-RUV [AM178-ARIN] 11678 DOE-NTS-AS [BC487-ARIN] 11679 WGIS-ASN [AH137-ARIN] 11680 CPQ-ALF-IOMC [GW395-ARIN] 11682 NET2-CTCNET-ASN [DH6-ORG-ARIN] 11683 ELNK-CHARTER-CONN [ELN-DA-ARIN] 11684 VLAN [KD75-ARIN] 11685 HNBCOL-AS [RD158-ARIN] 11686 ENA [ZE33-ARIN] 11687 CITY-OF-HOPE [RZ4-ARIN] 11688 WFRMLS [DG155-ARIN] 11689 NN-JORSM-CHI01 [JL669-ARIN] 11690 PLANETCABLE [ZP37-ARIN] 11691 EVOCATIVE [PR605-ARIN] 11692 NMSMN [KJ70-ARIN] 11693 WEST-GA-NET [SD893-ARIN] 11694 USB-NET [PO22-ARIN] 11695 THESTREET-DOT-COM [GB141-ARIN] 11696 SIMLABCEDARGROVE [JB432-ARIN] 11697 NET-SUPERNEWS [ZC140-ARIN] 11698 ATT-PWSS [WHH19-ARIN] 11699 BMI-NET [NO113-ARIN] 11700 CA-WEDNET [AT73-ARIN] 11701 LITESPEED [ZL30-ARIN] 11702 CONVERGENT [MS4860-ARIN] 11703 AVENUEA-ASN [JV104-ARIN] 11704 ROBERTSON [HR152-ARIN] 11705 MOSQUITONET [NS37-ARIN] 11706 BHNET [JEQ-ARIN] 11707 SCRR-11707 [ZS30-ARIN] 11708 FIRSTUSA [MG192-ARIN] 11709 VIC [GS3313-ARIN] 11710 IPLUS [IDM-ARIN] 11711 NETMDC [JG279-ARIN] 11712 BELLSOUTH [JB469-ARIN] 11713 TRUSTEDNET [IP-FIX-ARIN] 11714 ASN-UNEB [RG122-ARIN] 11716 WON-AS [WN11-ARIN] 11717 T-NET [JH1132-ARIN] 11718 GREENAPPLE [HO43-ORG-ARIN] 11719 EATON-CORPORATION [JM481-ARIN] 11720 PCSHS-COM [KH112-ARIN] 11721 NTRNET-NC [JW1296-ARIN] 11722 GISCO-ASN [IW64-ARIN] 11723 TP-NET [CZ98-ARIN] 11724 AMARILLO [DL1160-ARIN] 11725 JGROUP-AS [JS7244-ARIN] 11726 GUIWARE1 [MM2101-ARIN] 11727 BMTS [WE12-ARIN] 11728 EGLNETWORKS-NET [DS348-ARIN] 11729 SMART [SWN2-ARIN] 11730 PEPSI [GW71-ARIN] 11731 RFWAS [JP281-ARIN] 11732 IEI-LVGN-INET [NSR3-ARIN] 11733 TBI-LTD [TA476-ARIN] 11734 CATALYST-SOLUTIONS [DB348-ARIN] 11735 NAS [SA1191-ARIN] 11736 USD [CG126-ARIN] 11737 THEBOOK [JM467-ARIN] 11738 EPPG-DBQ [DB357-ARIN] 11739 DIGITAL-FOREST-NW [CK36-ARIN] 11740 PROGRESSIVE-AS [TC437-ARIN] 11741 BENTONREA [BE72-ARIN] 11742 MPACT-IMMEDIA [HO37-ORG-ARIN] 11743 EBSCO [JK242-ARIN] 11744 INVESTEC [RC535-ARIN] 11745 USNH [DG194-ARIN] 11746 WAGGENER-EDSTROM [PP91-ARIN] 11747 KAGI [BW1324-ARIN] 11748 TYLERNET [JS38-ARIN] 11749 ITHINK [IL8-ARIN] 11750 ARGENTINA-ON-LINE-SA [JG286-ARIN] 11751 REDEPINHASRTE [GG90-ARIN] 11752 SOFTONE [MM756-ARIN] 11753 PA-ONLINE [GP11-ARIN] 11754 GUS [JW3065-ARIN] 11755 WAYMARKCOMM [DS2413-ARIN] 11756 BITSTORM-INC [JR1271-ARIN] 11757 WHIRLPOOL-ASN [AG77-ARIN] 11758 APPNET-FALLSCHURCH1 [CC538-ARIN] 11759 WHISTLE-AS [DM359-ARIN] 11760 INETONE-BLUE [KC362-ARIN] 11761 3RD-MILLENNIUM [JM488-ARIN] 11762 NET-CONNECTION [ACP-ARIN] 11763 SAFECONNECT-INC-ASN [AC138-ARIN] 11764 PANAMSAT-NET [LV109-ARIN] 11765 OTMP [AC316-ARIN] 11766 AIS-AS [BR2121-ARIN] 11767 IMC-ASSOCIATES [IAC-ARIN] 11768 M1CR0WAREH0USE [RH3043-ARIN] 11769 MOBILENETICS-LA-GW1 [BT307-ARIN] 11770 NET56 [RS1108-ARIN] 11771 AMES-DEPT-STORES [RS1108-ARIN] 11772 US-TELECOM [FT31-ARIN] 11773 UTMDACC [DS2872-ARIN] 11774 CYPRESSCOMM [AS188-ARIN] 11775 CRV-INC [JP1603-ARIN] 11776 CONEN [RD157-ARIN] 11777 AUTOFUSION [WK32-ARIN] 11778 FRONTLINE-ASN [NF39-ARIN] 11779 MCC-GROUPZ [MC-ORG-ARIN] 11780 CORPLINK [NE19-ARIN] 11781 AUTO-ICMI-100 [JB364-ARIN] 11782 AS-BIZNESSWEB [MB9177-ARIN] 11783 SDRDC [GL124-ARIN] 11784 ASN-AV8 [DA31-ARIN] 11785 BROADWAY-BANDWIDTH [LB139-ARIN] 11786 SOLINFO-AS-01 [RES2-ARIN] 11787 PACOURTS-AS [WC94-ARIN] 11788 FRANKLINDAVIS-ASN1 [DB372-ARIN] 11789 BALLISTIC [AB209-ARIN] 11790 RANDOMHOUSE [AD3-ORG-ARIN] 11791 DIGSIGTRUST [ZD9-ARIN] 11792 BRIDGESTONE-FIRESTONE [JP294-ARIN] 11793 NEXTREND-COM [RW4931-ARIN] 11794 NCWEB-AS [DS1066-ARIN] 11795 989STUDIOS [RC3321-ARIN] 11796 WINBRIGHT-NET [SW315-ARIN] 11797 VNU-MIS [JC399-ARIN] 11798 ERILAB [RE76-ARIN] 11799 FULLWAVE [HM128-ARIN] 11800 DOMAIN-ASN [NP33-ARIN] 11801 OGRL [JS600-ARIN] 11802 CIASC [FR37-ARIN] 11803 QUOTECOM [QO2-ARIN] 11804 THIRD-RAIL [IT57-ARIN] 11805 FORTNOCS [BP113-ARIN] 11806 LEEPFROG [LB134-ARIN] 11807 ABMINTERNET [ES119-ARIN] 11808 UIDAHO [HL16-ARIN] 11809 NET-ERAU-PRC [AN3-ORG-ARIN] 11810 DELIAS-AS [KFC8-ARIN] 11811 BOONE-NET [DS410-ARIN] 11812 ELIANCE [PF72-ARIN] 11813 CDC-NORTH-AMERICA [HY14-ARIN] 11814 IGS-GTA [RK513-ARIN] 11815 COOPVGG-COM-AR [EB109-ARIN] 11816 SETAR [EG82-ARIN] 11817 STAFFORDNET [HH62-ARIN] 11819 SMITH-ASSOC [BC500-ARIN] 11820 ZOOMNET [DR817-ARIN] 11821 BLAUTECHNOLOGYGROUP [AM215-ARIN] 11822 SOWESTWEB [SM172-ARIN] 11823 LORDABBETTCO [DH155-ARIN] 11824 CAREERBUILDER [AS232-ARIN] 11825 JDFI-AS [RF133-ARIN] 11826 RISS2 [RB3090-ARIN] 11827 WSU-AS [RW211-ARIN] 11828 SOINET [EW2-ARIN] 11829 CADENCE [DM329-ARIN] 11830 ICENETCR [PP99-ARIN] 11831 CLAIMCARD [DAB3-ARIN] 11832 EBI-COMM [GI7-ARIN] 11833 KA-NET-INTERNET-SVCS [MN87-ARIN] 11834 DREXEL-ASN [DREXEL-U-ARIN] 11835 SULBBS [JT240-ARIN] 11836 ICNET-ASN [RH731-ARIN] 11837 SAWNET [AB815-ARIN] 11838 IOWA-LEGISLATURE [SM293-ARIN] 11839 LOGICAREINC [BA105-ARIN] 11840 NSI-REGISTRY-AS [KS630-ARIN] 11841 LINKLINE [DU24-ARIN] 11842 AS-REGAL [CW148-ARIN] 11843 EXPRESS-NEWS [HB61-ARIN] 11844 NEWSITE-BRASIL [HA890-ARIN] 11845 DPBOL [CL120-ARIN] 11846 INFOHOUSE [IN36-ARIN] 11847 MIDMAINE [JG7515-ARIN] 11848 MMIND-NET [RC308-ARIN] 11849 DATACOMNET [CC218-ARIN] 11850 MAGSNETLLC [ML217-ARIN] 11851 PICTUREVISION-ASN [MB458-ARIN] 11852 ALANET [PW66-ARIN] 11853-11855 ASN-INTERNAP-BLK [INO3-ARIN] 11856 ASN-ECI [RJ680-ARIN] 11857 AEGONUSA [TP1-ARIN] 11858 CM2COM [NO54-ORG-ARIN] 11859 AIR2LAN [IA80-ARIN] 11860 IMAGINEX [BP99-ARIN] 11861 INTELLIGENT [JR910-ARIN] 11862 NORTHPOINT [SB269-ARIN] 11863 PLU [SH230-ARIN] 11864 VISTO1937 [MI51-ARIN] 11865 PC-PROS1 [MP225-ARIN] 11866 SCTCORP [MS486-ARIN] 11867 PRIMUSTEL [IP86-ARIN] 11869 INRNET [NO153-ORG-ARIN] 11870 AMWAY-CORPORATION [LH91-ARIN] 11871 CINERGY-ASN [RL277-ARIN] 11872 SYRACUSE-UNIVERSITY [PM192-ARIN] 11873 MC2-AS [DZ-ORG-ARIN] 11874 BOWMANCAPITAL [AH1798-ARIN] 11875 IANA-VLUSA [HF20-ARIN] 11876 ARCC868 [BT32-ARIN] 11877 FROGNET [CF93-ARIN] 11878 LFGLLC [DH395-ARIN] 11879 MEDSCAPE [AL128-ARIN] 11880 LEASE-PROPHET [MH340-ARIN] 11881 SHREVENET [BF304-ARIN] 11882 ERIENET [IS41-ARIN] 11883 ASN-SOFTDISK [MH678-ARIN] 11884 JPSOS-ARIN [JS696-ARIN] 11885 COMMMED [RM5-ARIN] 11886 BEYOND [DS486-ARIN] 11887 PIONEER-HI-BRED-INTL [DA194-ARIN] 11888 INTERCABLE-NET-CORE [UR5-ARIN] 11889 IVANET-NYC [SA159-ARIN] 11890 IVANET-LA [SA159-ARIN] 11891 MEGAVISION [PS187-ARIN] 11892 NATCOMPSYS [JJ272-ARIN] 11893 LOLIGO-ASN [JHT-ARIN] 11894 GUESSINC [BC220-ARIN] 11895 EZNET-ASN1 [ZE48-ARIN] 11896 MCAINFO [SM319-ARIN] 11897 RELTEC [DF170-ARIN] 11898 ESSEXCOMP [MW776-ARIN] 11899 SYMET [TK454-ARIN] 11900 DATACRUZ [DNO4-ORG-ARIN] 11901 TRADINGEDGE-SM [CK82-ARIN] 11902 WORLD-LINK [AS366-ARIN] 11903 ACTIONWEB [DW185-ARIN] 11904 ALLENTEL [MP1183-ARIN] 11905 BIDSPLUS-ABCADVISORS [JC4605-ARIN] 11906 WISPLB1 [ZW87-ARIN] 11907 MSXI-INET [AD5-ORG-ARIN] 11908 VERESTAR [IZ27-ARIN] 11909 BRWNET [GH144-ARIN] 11910 DIRECTLINK [SO46-ARIN] 11911 BANKOFNEWYORK-AS [FF29-ARIN] 11912 TAMUSIBT-NET [WP34-ARIN] 11913 STARSTREAM [WS84-ARIN] 11914 HUMONGOUS [ZH105-ARIN] 11915 VOICE-NET-SOLUTIONS [NC56-ARIN] 11916 UNDP [SD32-ARIN] 11917 I-SITES-AS [EK899-ARIN] 11918 INTERTEX-1 [JB1504-ARIN] 11919 ONSI-NET2 [PA-ARIN] 11920 UNK-AS [DH408-ARIN] 11921 SECREL [LB167-ARIN] 11922 RBN [BT139-ARIN] 11923 GNOFN-LFN [KGH-ARIN] 11924 ISG-LC [JT258-ARIN] 11925 SIGNALCORE [GY16-ARIN] 11926 YMP [RC340-ARIN] 11927 ADVANCE-GW [DM3630-ARIN] 11928 TW-TRADEPUBLISHING [PS192-ARIN] 11929 K2-DESIGN [DB439-ARIN] 11930 FUSION-FISERV [WEB424-ORG-ARIN] 11931 DELGROUP-AS [DH425-ARIN] 11932 PACKETENGINES [DS8543-ARIN] 11933 ILI-NET [DF174-ARIN] 11934 IPERFORM [HIP-ORG-ARIN] 11935 ASN-XSTREAM [HO45-ORG-ARIN] 11936 LIFECYCLESYSTEMS [JD283-ARIN] 11937 TRX-ARIN [JA748-ARIN] 11938 NET-SENTRY [SG186-ARIN] 11939 MATHWORKS [IT22-ARIN] 11940 DIRECTSCOM [BL140-ARIN] 11941 ZI-NET [GT64-ARIN] 11942 LCONN [JB484-ARIN] 11943 GLOBE [DW188-ARIN] 11944 WEBTRENDS-CORP [WGB2-ARIN] 11945 IGSI [GH148-ARIN] 11946 MANCHESTER-EQUIPMENT [DR238-ARIN] 11947 TRININET [GL67-ARIN] 11948 JOURNEYCOM [MB336-ARIN] 11949 CYBERBEACH [AF277-ARIN] 11950 AIRSWITCH [MP233-ARIN] 11951 MCSP [PW-ARIN] 11952 NASDINC [NTC1-ARIN] 11953 DSN-MO-IL [BWC3-ARIN] 11954 VIRTUALIS [RK164-ARIN] 11955 SCRR-11955 [ZS30-ARIN] 11956 NOAA-NWN [MK13-ARIN] 11957 CACHEFLOW-AS [IR22-ARIN] 11958 WIR-INT-RES [BT795-ARIN] 11959 OMNETTECH [CP116-ARIN] 11960 INFOCOM-ETECSA [MR136-ARIN] 11961 MIDRIVERS [BQ108-ARIN] 11962 GLOBESET-ASN [RB158-ARIN] 11963 ASN-PENNWELL [BB336-ARIN] 11964 OREGRADNET [DW306-ARIN] 11965 PANDACOMM-AS [HL142-ARIN] 11966 GLOBALREACH-ASN [PM203-ARIN] 11967 ESPER-SYSTEMS [EB127-ARIN] 11968 DBT-SOUTH-FLORIDA-01 [ST154-ARIN] 11969 PYTH-COMM [TA99-ARIN] 11970 VCI-MDVL [SR164-ARIN] 11971 PFIZERNET-GROTON [MA1169-ARIN] 11972 HELUS [SV61-ARIN] 11973 INTRACORP [MD269-ARIN] 11974 CALLTECH [RM344-ARIN] 11975 WM [SF34-ARIN] 11976 FIDN [MD872-ARIN] 11977 NORTHLINK-NET-LLC [BR146-ARIN] 11978 VEGAS [JO83-ARIN] 11979 BLUENET [NA175-ARIN] 11980 BDO-SEIDMAN [BH233-ARIN] 11981 SPECIALSYSTEMS [MS565-ARIN] 11982 SCOTTANDSTRING [DB6151-ARIN] 11983 ACCESSHUBNET [HP30-ARIN] 11984 NETWALK [TN5-ORG-ARIN] 11985 ASN-SSA [RT130-ARIN] 11986 RIO-COMM [DM85-ARIN] 11987 INDYWEB [DN622-ARIN] 11988 SURFSIDEINTERNET [VN23-ORG-ARIN] 11989 SOUTHNET [CR138-ARIN] 11990 IMPULSE [IIS8-ORG-ARIN] 11991 IGRCORP [DM437-ARIN] 11992 INTEGRATED-SYSTEMS [NF123-ARIN] 11993 BBINTERNET [ED61-ARIN] 11994 DELANET-COM [MB425-ARIN] 11995 OHSU [BK250-ARIN] 11996 LOBOIS [CM1464-ARIN] 11997 DASM [DC360-ARIN] 11998 PNB [JM620-ARIN] 11999 HSACORP-NET [WL54-ARIN] 12000 FMR-AS4 [DG148-ARIN] 12001 INTERNET-TRADELINE [LK63-ARIN] 12002 MCC8900MCHENRY [JF232-ARIN] 12003 INTEGRATELECOM [CP125-ARIN] 12004 ASN-SUD-EDU [ZG84-ARIN] 12005 SC-AS [BM504-ARIN] 12006 ELNK [ZL62-ARIN] 12007 RAYASN [ZR46-ARIN] 12008 ULTRADNS [RJ48-ARIN] 12009 EONI [JC819-ARIN] 12010 API-NETWORKSERVICES1 [HC67-ARIN] 12011 ACG [DL282-ARIN] 12012 CYBERREALM [DC320-ARIN] 12013 FAUNET [WB92-ARIN] 12014 INDIGONETWORKS01 [DH440-ARIN] 12015 SUNFLOWER-CABLEVISION [MH381-ARIN] 12016 HEART-COMM-AS [CL163-ARIN] 12017 SERVICEMETRICSASN [NA18-ORG-ARIN] 12018 OOCL-SJC [SZ187-ARIN] 12019 ARSNET-LJ-1999 [LJ17-ARIN] 12020 ASCINET [JO89-ARIN] 12021 HHES [JM635-ARIN] 12022 HANOVERDIRECT [BG179-ARIN] 12023 PENSAT-NET1 [JS707-ARIN] 12024 ASN-ACN [AH65-ARIN] 12025 WHITEPINESOFTWAREEAST [JJ103-ARIN] 12026 SIGECOM [CA112-ARIN] 12027 IKON-TS [RM396-ARIN] 12028 MMINTERNET [DS537-ARIN] 12029 COWTOWNNETDFW [JS709-ARIN] 12030 PACIFIC-ONLINE-PON [MB444-ARIN] 12031 LORD-CORP [TS1-ARIN] 12032 APLDIGITAL [WE13-ARIN] 12033 ASN-ANW [ET333-ARIN] 12034 MIDINET-MEX01 [GA158-ARIN] 12035 DIALACCESS-ISP [CG159-ARIN] 12036 DIXIE-NET [KB942-ARIN] 12037 FDIC-GOV [MD297-ARIN] 12038 CSI-7206 [REB14-ARIN] 12039 TIMEINC [HH30-ARIN] 12040 OGDEN [BD206-ARIN] 12041 CONNECTIONSUSA [BW176-ARIN] 12042 MPTELECOM [KJ4-ARIN] 12043 CANDLE [SB852-ARIN] 12044 WVINET [SN66-ARIN] 12045 PACIFIC-TELEKEY [KW126-ARIN] 12046 CSC-UOM [DM452-ARIN] 12047 AUDIOVOX [IC15-ARIN] 12048 GDEXONLINE [MT219-ARIN] 12049 ONLINETODAY [JS287-ARIN] 12050 TELOCITY [ZT26-ARIN] 12051 ESCONDIDO-CA [BH551-ARIN] 12052 VFC [AS316-ARIN] 12053 DISCOVERY-NET [KM3187-ARIN] 12054 BNYCS [LB709-ARIN] 12055 CASTLEONLINE [ES159-ARIN] 12056 IBLP [MH388-ARIN] 12057 SUMTERNET [TB1786-ARIN] 12058 TRAVELSCAPE [JW371-ARIN] 12059 ILAP [BD213-ARIN] 12060 ASCENTNETWORKING [MM114-ARIN] 12061 24HOURFITNESS [JR350-ARIN] 12062 DECISIONONE [JM37-ARIN] 12063 FLYNT-DIGITAL [TQ8-ARIN] 12064 COXFIBERNET-HR [JW1115-ARIN] 12065 AMERISTAR [JW372-ARIN] 12066 TRICOM [WP39-ARIN] 12067 SHAWNEELINK [JB1300-ARIN] 12068 MOORE-BCS-EXTRANET [PS193-ARIN] 12069 REV-NET-TECHNOLOGIES [JC533-ARIN] 12070 EZYNET [RH731-ARIN] 12071 ASN-KU-AS [MM1044-ARIN] 12072 SNI [SNO-ARIN] 12073 CCSINET-1 [TE25-ARIN] 12074 ISERVE-INC [RH340-ARIN] 12075 JACOBS [CT72-ARIN] 12076 HOTMAIL-AS [MM520-ARIN] 12077 COMMUNITECH-NET [IC117-ARIN] 12078 THE-ICEHOUSE [FG45-ARIN] 12079 AIRTOUCH-CELLULAR [MC305-ARIN] 12080 DCCI-NOC [JD194-ARIN] 12081 GREENHECK [RS305-ARIN] 12082 BNS-AS [BM626-ARIN] 12083 KNOLOGY-NET [BF2084-ARIN] 12084 T3-LINK [JM3183-ARIN] 12085 ENCOREMUSICCOMPANY [RA174-ARIN] 12086 UNREAL-AS [GK79-ARIN] 12087 SALSGIVER [LS439-ARIN] 12088 MCDONALDCOMPUTERCORP [JCM6-ARIN] 12089 MIDWESTACCESS [TL266-ARIN] 12090 NET-AAA [SB488-ARIN] 12091 MTNNS-1 [ZC164-ARIN] 12092 LODGENET [JS731-ARIN] 12093 UWATERLOO [DP237-ARIN] 12094 WALKABOUT [WR31-ARIN] 12095 NACK [EL69-ARIN] 12096 AMPNET-ASN [SB340-ARIN] 12097 MASSCOM [MR234-ARIN] 12098 UNIONBANKOFCAL [CAJ2-ARIN] 12099 HITTER-NET-1 [JW1146-ARIN] 12100 RIFKIN-VA-BEDFORD-ASN [JF465-ARIN] 12101 EMS [AL141-ARIN] 12102 OPSS [AOL3-ARIN] 12103 KEYNOTE [LT33-ARIN] 12104 WLCI-1 [BS334-ARIN] 12105 ISAT [ES154-ARIN] 12106 CORBIS [BH255-ARIN] 12107 UNEX-AS [JK346-ARIN] 12108 AS-SCREAMINGMEDIA [IG14-ARIN] 12109 CALGATE [NOC133-ORG-ARIN] 12110 SOUNDSCAN [SD174-ARIN] 12111 AVISTA [CS86-ARIN] 12112 MCTCNET-NET [SW315-ARIN] 12113 SKYLYNX-FRESNO [GL133-ARIN] 12114 BARNESANDNOBLE-COM [KB202-ARIN] 12115 D2000 [LB186-ARIN] 12116 FHLB [VD29-ARIN] 12117 GEEKTECH [JD346-ARIN] 12118 WVU [JBV3-ARIN] 12119 BITWISESYSTEMS [MS30-ARIN] 12120 IDEAL [DK266-ARIN] 12121 IASERVICE [JC224-ARIN] 12122 CYBERSOUTH10-18-93NET [DB508-ARIN] 12123 1972IVANCAMETOEXIST [SB351-ARIN] 12124 THORN [DA157-ARIN] 12125 N2H2 [KTM-ARIN] 12126 PWI-NET [DM480-ARIN] 12127 TELEFONICA-SAL [SD176-ARIN] 12128 TFSMD-RV-001 [TM3978-ARIN] 12129 123NET [RD1464-ARIN] 12130 ENOREO [ZE31-ARIN] 12131 IJ-NET [EF233-ARIN] 12132 MEDIASTREAM-ASNBLK1 [BD1683-ARIN] 12133 LISCO [LY14-ARIN] 12134 FMB-BANK [ES171-ARIN] 12135 PROINTERNET-DO-BRASIL [LH517-ARIN] 12136 E-NET-BR [RC368-ARIN] 12137 BABYCENTER [SF123-ARIN] 12138 VICOR [JH491-ARIN] 12139 AMNET [CS257-ARIN] 12140 CNI [PRC-ARIN] 12141 EPOCHWIDE-01 [JH103-ARIN] 12142 SULLIVAN-CROMWELL [JJ122-ARIN] 12143 STARTEL-AS [LB1520-ARIN] 12144 NET-TEL [MP288-ARIN] 12145 COLORADOSTATEUNIV [SB357-ARIN] 12146 MVS-NET [MCT-ARIN] 12147 AMERICANBACKHAULERS [GW258-ARIN] 12148 CLEMSONU [CCR-ARIN] 12149 CHI-STAFFORD1-NET [DP254-ARIN] 12150 COTELNET [CG172-ARIN] 12151 ESAT-ORG [JM696-ARIN] 12152 ASN-BISYS-BPS [RO74-ARIN] 12153 SLSS-ASN1 [PP128-ARIN] 12154 INFOUSA [DS172-ARIN] 12155 RR-ORLANDOFLORIDA-01 [ZS30-ARIN] 12156 STSN-SLC-UT-US [JH500-ARIN] 12157 TRADINGEDGE-NJ [CK82-ARIN] 12158 NAL-GO-LAS-ASN [MK314-ARIN] 12159 SECURITIESAMERICA [JD364-ARIN] 12160 IMAGINET [MA230-ARIN] 12161 HUALNOR-AS [RH329-ARIN] 12162 COMTEX-GW-SEATTLE [ZC38-ARIN] 12163 BNSI [CE311-ARIN] 12164 JBX-COM [JB518-ARIN] 12165 XACTWARE [TB301-ARIN] 12166 OWC-NET [MF257-ARIN] 12167 OMEGA [DM1662-ARIN] 12168 MII-XPC [LF295-ARIN] 12169 IBM-BRS-SERVICE [SH1363-ARIN] 12170 GALILEO [NS57-ARIN] 12171 AREA-BANCHSHARES-CORP [DH78-ARIN] 12173 UA [JW337-ARIN] 12174 FUSIVE-COM [RE102-ARIN] 12175 YELMNET [SN66-ARIN] 12176 GOVPX-ASN [RS524-ARIN] 12177 CMSIJAX-01 [JJ1868-ARIN] 12178-12182 INTERNAP-2BLK [INO3-ARIN] 12183 RTC-ASN [SMW2-ARIN] 12184 FORRESTER-RESEARCH [RR4286-ARIN] 12185 AS-INOW [NOC23-ARIN] 12186 US-NET-SOLUTIONS [MI58-ARIN] 12187 MTAHQ1 [PB130-ARIN] 12188 Q9-AS [ZQ8-ARIN] 12189 SHOWNET-HSTF-AS [AL155-ARIN] 12190 OOCL-NET [JJ150-ARIN] 12191 IN-MOTION [CB830-ARIN] 12192 ASN-AMERITRADE-2 [DB491-ARIN] 12193 BANXQUOTE [CA123-ARIN] 12194 NEXTLECNET [NM150-ARIN] 12195 FAME-AN [FN3-ORG-ARIN] 12196 PRISM-CSI [IP21-ARIN] 12197 DRUGSTORE-COM [MC384-ARIN] 12198 THE-NETWORK-GROUP [BD383-ARIN] 12199 UUNET-RD-AS [NO37-ARIN] 12200 PEACHTREESOFT [TJ86-ARIN] 12201 SCIENT-AS [CAN-ARIN] 12202 INTERLNK-NETWORK [JE1898-ARIN] 12203 ASTORIA-FEDERAL-SL [WD53-ARIN] 12204 SCN-NET [SN66-ARIN] 12205-12216 ARC-NY [CB202-ARIN] 12217 UPS [ZU12-ARIN] 12218 USAGLOBALLINK [GO48-ARIN] 12219 GMSNET-ASN [DK291-ARIN] 12220 NET-CREATIONS [RS545-ARIN] 12221 SCOTTSAVE-COM [SG222-ARIN] 12222 AKAMAI [RS547-ARIN] 12223 PRCO [KM233-ARIN] 12224 CROSSROADS-ACCESS [FR47-ARIN] 12225 SDCYBER [RB2873-ARIN] 12226 INTRIA-HP [PP139-ARIN] 12227 ASN-PROBOOST [CM273-ARIN] 12228 NCD-AS [MM27-ARIN] 12229 SAS-WHQ [MM1433-ARIN] 12230 OKBRIDGE [MC75-ARIN] 12231 CONWAYCORP [SC72-ARIN] 12232 XPR [BB401-ARIN] 12233 TOTATEL-AS [AR167-ARIN] 12234 ASN-UUNET-INT [UIA2-ARIN] 12235 COVE-AS-01 [MS1417-ARIN] 12236 GOMEZNET [NG82-ARIN] 12237 WMA-NET [MP289-ARIN] 12238 AECOM-CCSI [MB511-ARIN] 12239 GLINX1 [LB717-ARIN] 12240 ACCUWEATHER [RC1139-ARIN] 12241 GRIP [JB674-ARIN] 12242 OCELOT [RK858-ARIN] 12243 WEBSERVE-AS [DR297-ARIN] 12244 ECOM [PM234-ARIN] 12245 ADAPTIVEBROADBAND [JD392-ARIN] 12246 JTC [RR316-ARIN] 12247 ASN-MICROHOUSE [NO37-ORG-ARIN] 12248 CCO-PLATINO [OC25-ARIN] 12249 YUBACITY [DB559-ARIN] 12250 UNITEDBANK [SB375-ARIN] 12251 INVISION [MM2414-ARIN] 12252 ATT-PERU [CI62-ARIN] 12253 LAMBESIS [JW321-ARIN] 12254 THINKLINK [NO88-ARIN] 12255 IMMUNEX [HS104-ARIN] 12256 CITYLINQ [ST195-ARIN] 12257 DGC [RG11-ARIN] 12258 YEBO-AS [RV327-ARIN] 12259 FGINET [TH380-ARIN] 12260 KRAMER-CEILLEY [JK378-ARIN] 12261 DEKALB [RG77-ARIN] 12262 RR-CINCINNATI-ASN-01 [ZS30-ARIN] 12263 TBTEL-AS [ZZ2123-ARIN] 12264 NETIZEN-ISP [FB73-ARIN] 12265 SDSNY-1 [KG128-ARIN] 12266 STORERUNNER-AS [VO10-ARIN] 12267 HORWATH [AL171-ARIN] 12268 DEXSTA [GW223-ARIN] 12269 HWWILSON-UUNET-ATT [JG244-ARIN] 12270 RR-TEXAS-ELPASO-ASN [ZS30-ARIN] 12271 SCRR-12271 [ZS30-ARIN] 12272 BELLSOUTHONLINE [TC244-ARIN] 12273 TRUELINK [WO235-ARIN] 12274 FENICS [JK386-ARIN] 12275 INTERNET-CONNECT [PM238-ARIN] 12276 TRISTAN [TH129-ARIN] 12277 TRACON [DW422-ARIN] 12278 SX [RMC6-ARIN] 12279 LAYER-EIGHT [MF843-ARIN] 12280 NTCOR-NET [ZN69-ARIN] 12281 APAC-AS [JG434-ARIN] 12282 SELECTRONICS [WP18-ARIN] 12283 RITSYS001 [RT156-ARIN] 12284 CSOLUTIONS [SC1033-ARIN] 12285 ONE-ELEVEN [DT738-ARIN] 12286 VISIONONE [NT42-ARIN] 12287 CYBER-QUEST [HH391-ARIN] 13312 GBGM [BO67-ARIN] 13313 ABCS-COM [MC376-ARIN] 13314 DIALPOINTNC [PF162-ARIN] 13315 HBSNET [RS531-ARIN] 13316 SESNET-BUE [ME116-ARIN] 13317 RA-PS-NET-21 [CE288-ARIN] 13318 JUJUYTEL [MB500-ARIN] 13319 S-I-S [AG888-ARIN] 13320 MEDIALAB-LTDA [AR166-ARIN] 13321 BROADWAY-BANDWIDTH2 [HL45-ARIN] 13322 FMR-AS3 [MB30-ARIN] 13323 FMR-AS2 [MB30-ARIN] 13324 EPC-INC [CR141-ARIN] 13325 STOMI [JH520-ARIN] 13326 TUFTS-UNIVERSITY [RG253-ARIN] 13327 EKU [KW147-ARIN] 13328 VALCORECOMMUNICATIONS [TR175-ARIN] 13329 ISC [BD361-ARIN] 13331 IBROADCAST [AM661-ARIN] 13332 SYSTEMIP-DALLAS [TB308-ARIN] 13333 NAUTICOM-NET [JY58-ARIN] 13334 MCG-IX-1 [EW77-ARIN] 13335 AGENCYWORKS [LY18-ARIN] 13336 ASN-WR-COM [GM269-ARIN] 13337 WI-INET [GH189-ARIN] 13338 HARBORNET2 [KL137-ARIN] 13339 FUSION [JL378-ARIN] 13340 TIMESYNC-001 [DT169-ARIN] 13341 TRANQUILITY [PS1879-ARIN] 13342 VISTAINFO [CA237-ARIN] 13343 SCRR-13343 [ZS30-ARIN] 13344 MUNINET [BF173-ARIN] 13345 ROCKYNET-COM [PM1893-ARIN] 13346 WIZARDCO [JW1557-ARIN] 13347 INTELLISWITCH [RIW-ARIN] 13348 IBT-R [SM346-ARIN] 13349 SPEEDEX-ASN [BG233-ARIN] 13350 WEB-SERVICES-GROUP [MG330-ARIN] 13351 B-U-C [SB1738-ARIN] 13352 C-S-S-C [RF188-ARIN] 13353 NETSTREAM [EB626-ARIN] 13354 INTERTEK [RD1984-ARIN] 13355 TEXASRRIASN [DP278-ARIN] 13356 INNERX [CJ87-ARIN] 13357 CONVOY [MAO3-ARIN] 13358 CITIPAGE [EB135-ARIN] 13359 ISPCHANNEL [RC400-ARIN] 13360 TBSHC [SA210-ARIN] 13361 ACPG [AP8-ARIN] 13362 PCWASN1 [AB353-ARIN] 13363 LANDMARK-SYSTEMS-CORP [CS361-ARIN] 13364 COX-SD [IC146-ARIN] 13365 AAC [AD163-ARIN] 13366 CHGNET [MW317-ARIN] 13367 ATT-BBND-B [IA122-ARIN] 13368 JCP [CM290-ARIN] 13369 EFAX-AS [MH466-ARIN] 13370 NORTHWEST-INTERNET [KM252-ARIN] 13371 COMMERCEONE [LQ-ARIN] 13372 FEDERATEDINV [JS10820-ARIN] 13373 MERCK-MEDCO [JD79-ARIN] 13374 IAP [SD209-ARIN] 13375 PAYLESS-ASN [RW273-ARIN] 13376 MERRILL-CORPORATION [DCM1-ARIN] 13377 CLAIRCOM-AS [GRS332-ARIN] 13378 TCTTECH [AD164-ARIN] 13379 BVIG-ORLANDO-FACILITY [JM1073-ARIN] 13380 ASN-CUST [TF140-ARIN] 13381 CMETNET [PV51-ARIN] 13382 EVOLV-ADAPTIVE [JGF-ARIN] 13383 SPEEDGATE-NET [GK99-ARIN] 13384 DCRNET [MA12-ARIN] 13385 COMCAST-TELECOMM [JP433-ARIN] 13386 TNS-NET [GV39-ARIN] 13387 MEDIAGENERAL [DF218-ARIN] 13388 EGYPTIAN-TELEPHONE [KC242-ARIN] 13389 HHSI [TN350-ARIN] 13390 RADIKS-AS [GF156-ARIN] 13391 UNOS [AP175-ARIN] 13392 EMSCORP1 [WL78-ARIN] 13393 AGAPE [PA98-ARIN] 13394 CTGINC [WM103-ARIN] 13395 TFP-WEB [PM254-ARIN] 13396 HRD-INFOSY [SY53-ARIN] 13397 ITLNET [DT411-ARIN] 13398 K12LINK [JK2066-ARIN] 13399 MICROSOFT-SMD [MN495-ARIN] 13400 CHERNOFFDIAMOND [KS305-ARIN] 13401 STARWOOD-HOTELS [PE77-ARIN] 13402 PURPLE [LJ54-ARIN] 13403 ALAWEB-INTERNET [PS4087-ARIN] 13404 GESTALT-ASN [ZG11-ARIN] 13405 AS-OCNET [RH1225-ARIN] 13406 VALUENET-CORP [JY62-ARIN] 13407 CTC-BGP2 [DH6-ORG-ARIN] 13408 SIERRALAKES [BK20-ARIN] 13409 PDX [DG244-ARIN] 13410 MSTRARIN-1 [TG167-ARIN] 13411 AFSIP [SM447-ARIN] 13412 VULCAN-NORTHWEST [JL75-ARIN] 13413 NEARPOINT [JS10059-ARIN] 13414 FIRSTNET-NETWORK [CP159-ARIN] 13415 LUMIX [LL485-ARIN] 13416 R-GREENBERG-ASSOC [AA153-ARIN] 13417 SFX-ENTERTAINMENT [MF271-ARIN] 13418 MAXLINKCOM [ZM103-ARIN] 13419 2ACCESS-NET [MM663-ARIN] 13420 SBCIS-LUBKTX [ZS44-ARIN] 13421 SBCIS-ABLNTX [DB599-ARIN] 13422 SBCIS-BUMTTX [SZ44-ARIN] 13423 WORLDINTERNET [CP160-ARIN] 13424 INTERCITY [CS375-ARIN] 13425 JUNO-DC-1 [DS7-ORG-ARIN] 13426 JUNO-DC-2 [DS7-ORG-ARIN] 13427 SOFTCOM-RANCHO [BM374-ARIN] 13428 CSI-INTERNET-ACCESS [JW455-ARIN] 13429 MUSC [SB228-ARIN] 13430 AVC-ASN [CW192-ARIN] 13431 MILLENNIUM-AS [JB737-ARIN] 13432 COXCOMM-LAS-VEGAS [JF4071-ARIN] 13433 COXNET [TY56-ARIN] 13434 CORVELCORP [PT103-ARIN] 13435 MORELLI [CE73-ARIN] 13437 BRAVE [JH889-ARIN] 13438 WCO-NET [SP255-ARIN] 13439 OVIS-INC [AL1812-ARIN] 13440 SAT [FP51-ARIN] 13441 SCOTIABANK [TM399-ARIN] 13442 SHAMAN-AS [CS378-ARIN] 13443 VIPTX-NET [KS136-ARIN] 13444 ATTAIN-DIRECT [JK400-ARIN] 13445 ACTIVE-TOUCH [SB415-ARIN] 13446 AS-NETZERO [JWN-ARIN] 13447 NEXTCARD-SC [JG464-ARIN] 13448 IOWN [TT194-ARIN] 13449 FRICK [BS413-ARIN] 13450 AAFC [CJ95-ARIN] 13451 CHECKOUTAS1 [SB1713-ARIN] 13452 DTPI-HANCOCK [CP167-ARIN] 13453 ASN-PCH-PAIX-AS [MD16-ARIN] 13454 RIGHTSXCHANGE [BT191-ARIN] 13455 NETMONGER [NC43-ORG-ARIN] 13456 TRANSARC-AS [PDB5-ARIN] 13457 CPSC [MC396-ARIN] 13458 TOTALSPORTS [KL284-ARIN] 13459 PCSOLUTION [MF283-ARIN] 13460 EARTHCAM [BC58-ARIN] 13461 THEOCC [JJ169-ARIN] 13462 IEEE [DD389-ARIN] 13463 CHASE [PT105-ARIN] 13464 QXRZRICANET6669 [WK52-ARIN] 13465 OUTLOOK-NET [NOC28-ARIN] 13466 CHANNELPOINT [JC8810-ARIN] 13467 POWERSCOURT [MD371-ARIN] 13468 CUSTOMREVOLUTIONS [MH476-ARIN] 13469 ARCSYSTEMS [CD171-ARIN] 13470 USAONLINE-1 [GZ22-ARIN] 13471 DAISYTEK [DB614-ARIN] 13472 TRADEWEB-ASN [BH565-ARIN] 13473 INTOP-NET [CW475-ARIN] 13474 BGBA-AR [DR335-ARIN] 13475 UTI-SYSTEMS [BW250-ARIN] 13476 MONTANA-STATE-UNIV [MMB1-ARIN] 13477 FAYETTEVILLE [DL1160-ARIN] 13478 LAFAYETTE [SW714-ARIN] 13479 ANET-ACCESSUS [RS1401-ARIN] 13480 ASN-GUELPHHYDRO [JM635-ARIN] 13481 DRFASN [JM580-ARIN] 13482 ZWEIG-DIMENNA [KM264-ARIN] 13483 SYMIX-NET1 [KC170-ARIN] 13484 NAME-SPACE [IA26-ARIN] 13488 CIBERLYNX-DB-FL [ZC87-ARIN] 13489 ORBITEL-01 [JG477-ARIN] 13490 ACCESSTOLEDO [ZA107-ARIN] 13491 MCSI [SM458-ARIN] 13492 OBJECTSPACE [DM601-ARIN] 13493 ASN-COX-OC [JZ152-ARIN] 13494 MORNINGSTAR-COM [GY19-ARIN] 13495 NTTB [FO19-ARIN] 13496 1TRAVEL [JR439-ARIN] 13497 SHERWOOD-ASN [BH341-ARIN] 13498 COLDSPRINGHARBORLAB [JU28-ARIN] 13499 GSI-ONLINE [FJ16-ARIN] 13500 ATLANCOMP [KD15-ARIN] 13501 OARNET-AS-2 [GS1050-ARIN] 13502 RELIASTAR-FINANCIAL [ZR36-ARIN] 13503 VBW [AB299-ARIN] 13504 ASN-LANET-GP1 [JP52-ARIN] 13505 SANDATA-INC [BL74-ARIN] 13506 USDEPTOFTHETREASURY [MR354-ARIN] 13507 KMARTCORPORATION [JRM2-ARIN] 13508 EOTEK [ST211-ARIN] 13509 TLPEAST-ASN1 [KG143-ARIN] 13510 OMSDAL-ASN1 [KG143-ARIN] 13511 ITXC [JM866-ARIN] 13512 REALNAMES-AS [PP419-ARIN] 13513 INET-SYSTEMS-ATL [GW429-ARIN] 13514 ISP-CANOPUS-SA [PM278-ARIN] 13515 PBAC-TNT [VC18-ARIN] 13516 PCNLP [DRL-ARIN] 13517 BAKER-MCKENZIE [PP143-ARIN] 13518 GR8 [MTW2-ARIN] 13519 MEDIAPOSTJINKS [JM871-ARIN] 13520 UEIC-BGP [TY34-ARIN] 13521 INFONETISP-BO [MAC3-ARIN] 13522 PUC-PR [RAB1-ARIN] 13523 SARAIDE [TS436-ARIN] 13524 ARW-MEL [NW32-ARIN] 13525 TCSN-NET [PK132-ARIN] 13526 FACETIME [BP162-ARIN] 13527 99MAIN [MS10153-ARIN] 13528 IXPRES-US [BD598-ARIN] 13529 INTEGRITYONL32 [MH493-ARIN] 13530 DANA-CORPORATION [KW173-ARIN] 13531 EQUINIX-RS-VA [JR82-ARIN] 13532 MVX-COM [AB301-ARIN] 13533 HJ-NET [JA256-ARIN] 13534 ADVANCE-PARADIGM [OA12-ARIN] 13535 ZEPANET [NZ5-ARIN] 13536 MHCOMMUNICATIONS [BK178-ARIN] 13537 ITXC-2 [JM866-ARIN] 13538 TELEHOUSE [AS92-ARIN] 13539 ASAP-BGP-60089 [TK178-ARIN] 13540 SAFECO [KL172-ARIN] 13541 MENTORGRAPHICS [KS365-ARIN] 13542 ACEP-AS [SA259-ARIN] 13543 CPCNET-NET [BR255-ARIN] 13544 PSIMEX [FL267-ARIN] 13545 POWERHOSTING [JC800-ARIN] 13546 VT-RICHMOND-AS [PB123-ARIN] 13547 UPRAMP [JW463-ARIN] 13548 TELECT-LL [RL330-ARIN] 13549 MERCURY [DS775-ARIN] 13550 GOON-LINE [MH496-ARIN] 13551 AVENEW [SO143-ARIN] 13552 SMN-COPORATE [LR96-ARIN] 13553 CNET-BGP2 [CAD5-ARIN] 13554 TRADESHARP [PS331-ARIN] 13555 CENTENNIALBOCES [MS813-ARIN] 13556 IVANET-MIAMI [SA261-ARIN] 13557 NETIN [RF234-ARIN] 13558 ZIMMERMAN [BZ27-ARIN] 13559 COPLEYPRESS-AS [RC35-ARIN] 13560 SCRR-13560 [ZS30-ARIN] 13561 IOLT [MS698-ARIN] 13562 GTENS [CS74-ARIN] 13563 VIN [CJ184-ARIN] 13564 BELLSOUTHINTERNATIONL [JL467-ARIN] 13565 ORVIS [SW333-ARIN] 13566 SIEBERT [VB218-ARIN] 13567 KMB1 [RB1562-ARIN] 13568 MEDIAWIRE [JV314-ARIN] 13569 UTRADE [MF289-ARIN] 13570 AGCO-ASN [JL413-ARIN] 13571 VIDEOTRON-LTEE [PR163-ARIN] 13572 PLANETRX [SA229-ARIN] 13573 SFX-NETWORK-GROUP [MF271-ARIN] 13574 EASTKYNET [LP83-ARIN] 13575 GEOCAST [SC336-ARIN] 13576 SDNET [CF98-ARIN] 13577 IBEAM [SL895-ARIN] 13578 BUTLERMFG [JH651-ARIN] 13579 C-N-D-C-Y-T [EC1018-ARIN] 13580 TPI-NET [JW394-ARIN] 13581 SOFTWAREHOUSE [CA142-ARIN] 13582 NETLINK [NH81-ARIN] 13583 ACCESS-TECH [CH731-ARIN] 13584 ASN-MAXITEL-BR [CAD-ARIN] 13585 POWERNET-ASN [DRA-ARIN] 13586 MONTANA-COMM-NETWORK [MH246-ORG-ARIN] 13587 CITIDIRECT-GCS [DC497-ARIN] 13588 PAYCHEX [MN142-ARIN] 13589 PANAMSAT-1 [LV109-ARIN] 13590 AAC-TEC [BB461-ARIN] 13591 METRORED [MM900-ARIN] 13592 ADVERTISNET [JT374-ARIN] 13593 MEDIA3 [JH654-ARIN] 13594 MTC [DP260-ARIN] 13595 XPLORIUM [VK100-ARIN] 13596 TOKAIBANKOFCA [ME42-ARIN] 13597 OLE-990608 [BS1185-ARIN] 13598 FREIGHTLINER-CORP [MS-ORG-ARIN] 13599 APPNET [PW159-ARIN] 13600 GUSTA [JS2211-ARIN] 13601 ASN-INNERHOST [JG1600-ARIN] 13602 CYBERZONE-INC [PP157-ARIN] 13603 SERVETHEWEB [DW460-ARIN] 13604 ENGRAM [CU11-ARIN] 13605 EDC [RG284-ARIN] 13606 1-WEB [JB794-ARIN] 13607 WEBZONE-ASN [KM273-ARIN] 13608 DC-IS-EVV1 [BM80-ARIN] 13609 CHOICEONECOM [ZC141-ARIN] 13610 NWP-NET [CS402-ARIN] 13611 CDC [MC58-ARIN] 13612 PG-E-GT-NW [CL240-ARIN] 13613 TRANSPARENT [JB795-ARIN] 13614 ALLWEST [MW358-ARIN] 13615 CTII [DJM13-ARIN] 13616 DXSTORM-AS [NO50-ORG-ARIN] 13617 REGENCY-VOICE-SYSTEMS [BK199-ARIN] 13618 CARONET-ASN [MAM17-ARIN] 13619 BASELINEFINANCIALWTC [JT376-ARIN] 13620 BIZNET [ZE29-ARIN] 13621 REINSURANCE [CDM-ARIN] 13622 UREACH [MS714-ARIN] 13623 ACCESSCOM-COM [RS621-ARIN] 13624 MORTGAGE [AS348-ARIN] 13625 PHENIXCABLE-NET [RG77-ARIN] 13626 WALGREESN [TA143-ARIN] 13627 DIALTONE-INTERNET [AA2677-ARIN] 13628 CSINET-AS1 [RWD2-ARIN] 13629 TELERGYNET [BHM-ARIN] 13630 CSXT-AS-1 [JK420-ARIN] 13631 THEBIGSTORE [CG217-ARIN] 13632 VWRSP [WF46-ARIN] 13633 OOCL-CHS [SZ187-ARIN] 13634 OOCL-CHI [SZ187-ARIN] 13635 SYNTELLECT [CL242-ARIN] 13636 NEC-RESEARCH-INST [EH131-ARIN] 13637 NETSTAR [JD455-ARIN] 13638 METALINK [EM474-ARIN] 13639 WAVENETINC [TB350-ARIN] 13640 NORTH-EAST-VAULT [IU11-ARIN] 13641 PDMNET [PM295-ARIN] 13642 FORUM-FINANCIAL [BS450-ARIN] 13643 CANAL13 [RCC2-ARIN] 13644 IDSWEB [GT122-ARIN] 13645 USDATA [DZ129-ARIN] 13646 CIGNAL [AL491-ARIN] 13647 WORLD-DATA-INC [NOC29-ARIN] 13648 VIRGINIA-LOTTERY [BV47-ARIN] 13649 ASN-RNB [SP270-ARIN] 13650 HUMMINGBIRD-1 [PW70-ARIN] 13651 EMPNET [CC80-ARIN] 13652 SPDCC [SD1-ARIN] 13653 EMPLOYEASE-ASN [JM875-ARIN] 13654 T3MEDIA [GE59-ARIN] 13655 WORLDACCESS [BM456-ARIN] 13656 OPTIMAWEB [RR2713-ARIN] 13657 E-GATE-COMMUNICATIONS [PA137-ARIN] 13658 CNM-NETWORK [CY41-ARIN] 13659 INTERTECH [LL130-ARIN] 13661-13675 BAGNI-ASBLK [NSS2-ORG-ARIN] 13676 ILAND-AS [CN101-ARIN] 13677 A-C-S [KM280-ARIN] 13678 PAETEC [BM470-ARIN] 13679 UP-GDL [REC2-ARIN] 13680 CITY-GUIDE-INTERNET [CC2190-ARIN] 13681 AS-AESTUS [MH154-ARIN] 13682 INFOVIA-GT [PS304-ARIN] 13683 ACCESS-TECHNOLGIES [JW514-ARIN] 13684 ASN-MEDTRONIC-1 [PC189-ARIN] 13685 NETPATH-NPAC01 [CL245-ARIN] 13686 WTELENET [WG42-ARIN] 13687 TELEHUBINTER-NET [QA7-ARIN] 13688 PSEG [MKG2-ARIN] 13689 NETO [PS1029-ARIN] 13690 TEAM401K-AS [DS716-ARIN] 13691 800-COM-AS [DW452-ARIN] 13692 3KWORLD-GATEWAY [TV55-ARIN] 13693 NTS-ONLINE [ZN41-ARIN] 13694 XECUNET [AD195-ARIN] 13695 AEP [JT386-ARIN] 13696 NETROM [JV298-ARIN] 13697 DSIS [JM4522-ARIN] 13698 SHAWINDUSTRIES [DD371-ARIN] 13699 KIHONLINE-AS [BS2775-ARIN] 13700 CAPITAL-NETWORKS [CH323-ARIN] 13701 BENCHMARK-ELECTRONICS [KO464-ARIN] 13702 INGRAM-BOOK-GROUP [CM346-ARIN] 13703 NETSYSTECHINC [MO1691-ARIN] 13704 FASTSERVE-NETWORK [GG205-ARIN] 13705 IDIRECT-MTL [SBJ3-ARIN] 13706 COMPLETEWEBNET [GA96-ARIN] 13707 NETWORK5 [FC97-ARIN] 13708 ONR [MS748-ARIN] 13709 CMLSIS [ZC1-ARIN] 13710 SYSTEMS-METHODS [BS446-ARIN] 13711 GEORGIA-PACIFIC [JHK1-ARIN] 13712 SMUMN [FS86-ARIN] 13713 ACTN-ASN [JW367-ARIN] 13714 ASN-NVST [FB85-ARIN] 13715 NETADVANT [DH593-ARIN] 13716 HEWITT-ASSOCIATES [SM175-ARIN] 13717 EBC-ASN [MF303-ARIN] 13718 DIAGEO-NA-MPLS [DH580-ARIN] 13719 GOSPELCOM [ZG35-ARIN] 13720 SONYONLINE [SO35-ORG-ARIN] 13721 INTERNETPICTURES [JD1515-ARIN] 13722 INCOM [JL1964-ARIN] 13723 TGCNET-NY [JL38-ARIN] 13724 SPARKSCOM [DT207-ARIN] 13725 EVANS-SUTHERLAND [RK664-ARIN] 13726 VISION-I-SYSTEMS-ASN [LJ1148-ARIN] 13727 SAW [BH372-ARIN] 13728 ICGSS [AH266-ARIN] 13729 DANCKER-AS [AM1240-ARIN] 13730 LEWIS-COMP-SOLUTIONS [RL1022-ARIN] 13731 BCHARRIS [BW273-ARIN] 13732 AXISPOINT-INC [MN146-ARIN] 13733 COL-NC-705A [GC350-ARIN] 13734 BEESKY [DM654-ARIN] 13735 SMARTWEB [AP34-ARIN] 13736 FACTUAL-DATA [DV93-ARIN] 13737 HP-LIS [KM284-ARIN] 13738 MRSTOCK-DOWNERS [KJ65-ARIN] 13739 EQUITABLE [BA166-ARIN] 13740 HYPERNET-AS [DB352-ARIN] 13741 AMTECH [JP501-ARIN] 13742 DVNCINTERNET [AR212-ARIN] 13743 HEALTHSTREET [ZH36-ARIN] 13744 SITESPECIFIC [EP49-ARIN] 13745 DAWSON [TS469-ARIN] 13746 THEMONEYSTORE [MR404-ARIN] 13747 MAAGNUM-AS [JB746-ARIN] 13748 SMN-WAGON [TF155-ARIN] 13749 EVERYONES-INTERNET [RW277-ARIN] 13750 TNSI-AS [MW375-ARIN] 13751 SUMMIT [CG227-ARIN] 13752 VICLINK [RR1057-ARIN] 13753 BLACK-HOLE [DP911-ARIN] 13754 INFOCOM-CORP [BE112-ARIN] 13755 SPJC [DC524-ARIN] 13756 INFLOW-NET [GT125-ARIN] 13757 ING-NO-AMERICA [KL164-ARIN] 13758 AMERIX-ASN [HSP-ARIN] 13759 ASN-MIADORA [MH533-ARIN] 13760 CFN [SS20-ARIN] 13761 BSI [MM756-ARIN] 13762 HUNTERDOUGLAS [NOT-ARIN] 13763 CARDSERVICE [AS410-ARIN] 13764 NET-DAMARK [WW41-ARIN] 13765 NEDELCO [WH153-ARIN] 13766 NTWO-COM [SM522-ARIN] 13767 NW2-AA [DH358-ARIN] 13768 PEER1 [ZP55-ARIN] 13769 SAVINGS-BANK-LIFE [MP349-ARIN] 13770 NEON-1 [GJ73-ARIN] 13771 BOOMERANG [DK253-ARIN] 13772 AMERITRADE-3 [DB491-ARIN] 13773 INTERLINKS [WS1366-ARIN] 13774 CORPBANCA [FB86-ARIN] 13775 MATHBOX [MT409-ARIN] 13776 QX-NET-ASN-1 [JB13105-ARIN] 13777 QTM-BENTONHARBOR [DG376-ARIN] 13778 JOHNSON-AND-JOHNSON [JS1025-ARIN] 13779 BASISTECH [IC35-ARIN] 13780 NTNCOMMUNICATIONS [ZN97-ARIN] 13781 HOPKINSVILLE [RS653-ARIN] 13782 FAFCO [MB617-ARIN] 13783 RADFORD-UNIV-AS [TJ112-ARIN] 13784 AFOTEC [JB634-ARIN] 13785 TCCISP [JG866-ARIN] 13786 ARIN-LRBCG-5770 [LB243-ARIN] 13787 CAPTECH [GB300-ARIN] 13788 USCOURTS [MH543-ARIN] 13789-13792 INTERNAP-BLK3 [INO3-ARIN] 13793 MATTEL-HIA [DP335-ARIN] 13794 QCS [BG353-ARIN] 13795 SACHS-GROUP [SK283-ARIN] 13796 UCONN-ARIN [GK127-ARIN] 13797 BIZTRANS-TECHNOLOGY [LD115-ARIN] 13798 NETJAVA-NET [TP226-ARIN] 13799 POWERQUEST [CP298-ARIN] 13800 MOBILEDATA [ZD30-ARIN] 13801 ASN-PROFESSO-NYC [PG205-ARIN] 13802 NRCASN [SW365-ARIN] 13803 E-SYNCNET [MG402-ARIN] 13804 MARKETDAY [JL511-ARIN] 13805 WORLD-COMMUNICATIONS [VH49-ARIN] 13806 NCRCORP [SH398-ARIN] 13807 IKON-TECHNOLOGY [JM1000-ARIN] 13808 WEBPERFECT [CG205-ARIN] 13809 UAMS-ASN [TN115-ARIN] 13810 OAO [SL50-ARIN] 13811 MSLI [MD427-ARIN] 13812 1999FISHERSYS [JG568-ARIN] 13813 DITECH-COM [JK486-ARIN] 13814 ART-SJ-1 [JJ115-ARIN] 13815 11THENETCONNECTION720 [RO103-ARIN] 13816 BLUEBONNET [MH564-ARIN] 13817 RWAY-NET1-SYRNY [JA382-ARIN] 13818 PHX-INTL-TELEPORT [DA625-ARIN] 13819 FWIN-NET [KC242-ARIN] 13820 BALLOU [JC768-ARIN] 13821 ACML [TU18-ARIN] 13822 UCASYS [BM500-ARIN] 13823 CALYX-USA [NM60-ARIN] 13824 VIGORIS-AS1 [JW1488-ARIN] 13825 FASTWEB [SPW1-ARIN] 13826 E-OFFERING [GD158-ARIN] 13827 ASN-STEADFAST [DJB2-ARIN] 13828 I2K [RV378-ARIN] 13829 HYPERION-SOLUTIONS [GC232-ARIN] 13830 PROPERTYFIRST [CH348-ARIN] 13831 NAS-COM [RF18-ARIN] 13832 ATG-COM [RC447-ARIN] 13833 ASN-NOS [NB341-ARIN] 13834 AGLRSC [HA47-ARIN] 13835 IMPSAT-ARG [OC198-ARIN] 13836 ISLAND [RN172-ARIN] 13837 P-ECOM [CC372-ARIN] 13838 LIVING [FS95-ARIN] 13839 HANDSPRING [JB884-ARIN] 13840 SHERIDAN-HEALTHCORP [SM540-ARIN] 13841 IHSENERGY-DENVER [CS4644-ARIN] 13842 TXK-NET [GS3404-ARIN] 13843 PHOENIX-AMERICAN [RE346-ARIN] 13844 LL-NET [DS764-ARIN] 13845 WEBACCESS [IW65-ARIN] 13846 INTERACTIVEMARKETING [ZI91-ARIN] 13847 ARINET [PH222-ARIN] 13848 ARIBA [SC191-ARIN] 13849 BRAZORIA-NET [RT203-ARIN] 13850 ENRONONLINE [PC753-ARIN] 13851 LIND [JT290-ARIN] 13852 UTILICORP [RR389-ARIN] 13853 NW-NETWORK [MH548-ARIN] 13854 JSE [NW41-ARIN] 13855 CFU-NET [ZC55-ARIN] 13856 INFINETWORX [LK222-ARIN] 13857 ONLINEMAC [PF135-ARIN] 13858 COLUMBIAENERGYGROUP [EF100-ARIN] 13859 CERNER [DC544-ARIN] 13860 LFG [GG242-ARIN] 13861 ASN-NETAL [JH21-ARIN] 13862 RECOM-SYS [MG408-ARIN] 13863 ALVAKA [RF230-ARIN] 13864 UNIONPARTNERS [JS1068-ARIN] 13865 HLPUSD-NET [MD171-ARIN] 13866 CCOUNTRY [MH359-ARIN] 13867 MYSIMON-CORPORATE [DY49-ARIN] 13868 PEAK [NO43-ARIN] 13869 IXC-TELECOM [KB273-ARIN] 13870 MINDFRAME [JD1021-ARIN] 13871 TELEBYTE-NW [AW194-ARIN] 13872 TAMARACK [JG549-ARIN] 13873 KAPLAN [RE136-ARIN] 13874 OPENLINK [AC1985-ARIN] 13875 PGEX [CI16-ARIN] 13876 DIGITALMATRIX [GH214-ARIN] 13877 WENDYS-DUBLIN [PN77-ARIN] 13878 DIGINET [DG390-ARIN] 13879 SITA-EQUANT-MPLSNET [SITA-NOC-ARIN] 13880 ACI-AS [GB308-ARIN] 13881 PARADOX [JP824-ARIN] 13882 HLIC [BM67-ARIN] 13883 BB-FAX-SERVER [CL259-ARIN] 13884 ASN-THEPLANET [PP46-ARIN] 13885 DUNDEE [RGR-ARIN] 13886 C-GATE2000 [JTD2-ARIN] 13887 CALLWAVE [NO46-ARIN] 13888 BEARCREEK-AS [GW177-ARIN] 13889 INTEX-SOLUTIONS [DM693-ARIN] 13890 SITESTREAM-01 [SS619-ARIN] 13891 INTLINE-COM-INC [BS489-ARIN] 13892 BIPERFORMANCE-ASN [BN77-ARIN] 13893 ERAC-CORP [RH421-ARIN] 13894 SECUREWEBS [HM184-ARIN] 13895 WMG [TC290-ARIN] 13896 COBALTNETWORKS-AS [GO64-ARIN] 13897 CDC1 [CC380-ARIN] 13898 LIBERTYENTERPRISES [HM185-ARIN] 13899 KRICKET [ST42-ARIN] 13900 WWW-SCIENCES [LM224-ARIN] 13901 WIZNET-ASN [JM4510-ARIN] 13902 DKGINTERNET [DG397-ARIN] 13903 KCINET [GH278-ARIN] 13904 COSLINK [DH175-ARIN] 13905 MAJIQ [RS700-ARIN] 13906 AVTC [RM437-ARIN] 13907 JTC-SOUTH-AMERICA [RR316-ARIN] 13908 BLOOMBERG-700 [RI19-ORG-ARIN] 13909 MESSAGEMEDIA-BLK1 [PB207-ARIN] 13910 REGISTER [JB910-ARIN] 13911 TERA-BYTE [NO58-ORG-ARIN] 13912 COMMTOUCH-INC [SZ29-ARIN] 13913 GIFTCERTIFICATES [PM323-ARIN] 13914 ASN-CDLBH-BR [FS99-ARIN] 13915 INNOLOG-ATC [ES257-ARIN] 13916 COSUSA-AS1 [GC236-ARIN] 13917 NETMAGIC [MK572-ARIN] 13918 CITYOFTUCSON [CFO-ARIN] 13919 ALLDATA-NET01 [MH565-ARIN] 13920 ASN-TGNT [IT75-ARIN] 13921 I-T-E [DL420-ARIN] 13922 CHIPSHOT [LL155-ARIN] 13923 CONVERGENCE [JK493-ARIN] 13924 IDS-UCI01 [ZI36-ARIN] 13925 CHEMICALDESK [JM1050-ARIN] 13926 EMPIREONE [DL160-ARIN] 13927 ISI-IMT-E-TROOP [SC398-ARIN] 13928 DIGITALMATRIX2 [GH214-ARIN] 13929 TECHNISYS [AA177-ARIN] 13930 UGO-NOC-ARIN [BS510-ARIN] 13931 UNIVANCE [SE323-ARIN] 13932 FIX-NET [JR539-ARIN] 13933 SHAWPITTMAN [CA170-ARIN] 13934 APUNET [ND62-ARIN] 13935 AMCHAMNET-BR [TF169-ARIN] 13936 SINTESOFT [MP377-ARIN] 13937 PACCOAST [AB397-ARIN] 13938 SSNC-AS [RL322-ARIN] 13939 IPEXPRESS [ZI59-ARIN] 13940 SJCOE [TK164-ARIN] 13941 VISP [NM57-ARIN] 13942 CREDITCARDS [MB594-ARIN] 13943 YK-COMMUNICATIONS [BR259-ARIN] 13944 ASN-ENTERZONE [JF1998-ARIN] 13945 TTSG [SE48-ARIN] 13946 WOLSI [JE154-ARIN] 13947 SILVERLINK-NET1 [RB599-ARIN] 13948 PIXELON [KER2-ARIN] 13949 GAMESPY [JG573-ARIN] 13950 FSINET-AS [ML3-ARIN] 13951 CENTER-SEVEN [RP373-ARIN] 13952 BD-08-99 [TM470-ARIN] 13953 NASDSL-AS [CS628-ARIN] 13954 CORPORATEEXPRESS [CF172-ARIN] 13955 VANKAMPEN [ML163-ARIN] 13956 FUTUREDONTICS [DVJ-ARIN] 13957 ASN-NETSET [DF290-ARIN] 13958 LONGABERGER [JH759-ARIN] 13959 NETSCORP [TS116-ARIN] 13960 AOTECH [JM1067-ARIN] 13961 ELI-COLO [ME176-ARIN] 13962 AS-HISPEED-1 [JB770-ARIN] 13963 VALLEYNET-ISP [BT216-ARIN] 13964 SBCIS-TPKAKS [SZ44-ARIN] 13965 SBCIS-FYTVAR [ZS44-ARIN] 13966 RAZORFISH-NEW-YORK [HS136-ARIN] 13967 YESMAIL-ASN [TL246-ARIN] 13968 CAISO-NET-BLK [TP522-ARIN] 13969 NTOWN [JP545-ARIN] 13970 INSATEL-LATAM [RF251-ARIN] 13971 INDIVIDUALINVESTOR [MV144-ARIN] 13972 WADSWORTH-CENTER [DR404-ARIN] 13973 ASN-REACTION97 [CT453-ARIN] 13974 R2KLLC [RY52-ARIN] 13975 HAVENSSTEEL [NP64-ARIN] 13976 STARCD [HC108-ARIN] 13977 SMARTHOMEBUY [MM749-ARIN] 13978 ITOOLCOM [BF214-ARIN] 13979 ATT-IPFR [ET83-ARIN] 13980 MAINECOAST [CM393-ARIN] 13981 MPIAS-COM [BM542-ARIN] 13982 INSYNQ-NET [CT173-ARIN] 13983 EPRIME [MS850-ARIN] 13984 BIT-NET [JF1537-ARIN] 13985 SINEWAVE1 [OE9-ARIN] 13986 ECSIS-HST [SL546-ARIN] 13987 IVANET-LONDON [SA261-ARIN] 13988 IVANET-FRANKFURT [SA261-ARIN] 13990 COUNTYOFORANGE [SS572-ARIN] 13991 CURINFO [AM22-ARIN] 13992 AMHEART [JM1120-ARIN] 13993 MOTIVE-COMM [JM1045-ARIN] 13994 OMU-1 [ZO6-ARIN] 13995 MBCC [PG214-ARIN] 13996 ECHOSTAR [BK221-ARIN] 13997 FLASHLINE [RB228-ARIN] 13998 SWMED [EA20-ARIN] 13999 MEGACABLE [GR75-ARIN] 14000 AXTELNET [FF48-ARIN] 14001 VISION-NET [AW205-ARIN] 14002 RAILINC [MS855-ARIN] 14003 SMS800-PRODUCTION-STL [TF170-ARIN] 14004 FORCE3 [PF137-ARIN] 14005 Y2K-ICC [RM579-ARIN] 14006 BRANTHYDRO [JM635-ARIN] 14007 SOHOSKYWAY1 [RG371-ARIN] 14008 OPTIKAINC-ORG [NA84-ARIN] 14009 INTERACTIONCOMM [AWM-ARIN] 14010 JACKHENRY [TB274-ARIN] 14011 DESIGNDATA [DR380-ARIN] 14012 PSGHS [DAH7-ARIN] 14013 HEALTHAXIS-ASN [WM194-ARIN] 14014 CNRAIL-AS [MC541-ARIN] 14015 RWBECK-AS [DWB-ARIN] 14016 FAX2NET [BA179-ARIN] 14017 BNSF-AS [MS4024-ARIN] 14018 EZLINK [AW58-ARIN] 14019 MORTICEKERNSYSTEMSINC [RR195-ARIN] 14020 FICOMNETWORK [JH776-ARIN] 14021 PSECU [PR113-ARIN] 14022 BBCOM [AN308-ARIN] 14023 AICS-NET [JS1136-ARIN] 14024 DDCI [BS520-ARIN] 14025 EZL-DOT-COM [BH292-ARIN] 14026 DIALDATA [RM6875-ARIN] 14027 ICS-INC [EP72-ARIN] 14028 FULBRIGHT-JAWORSKI [REB57-ARIN] 14029 DC-ECONET-ZW [SN154-ARIN] 14030 FINEP-AS [NCA2-ARIN] 14031 SCXY [KMH8-ARIN] 14032 IMATION [TA73-ARIN] 14033 LYNK [JF376-ARIN] 14034 MLMEDIA-AS [JA397-ARIN] 14035 PAYERPATH-ASN [TB884-ARIN] 14036 AMERISERVE [ZA29-ARIN] 14037 NESCROW [DD458-ARIN] 14038 SAVANTNET [BL290-ARIN] 14039 V-SPAN [ZV29-ARIN] 14040 XO-ASN1 [DIA-ORG-ARIN] 14041 FRGP [PS24-ARIN] 14042 UNIVERSAL-INTERNET [MA870-ARIN] 14043 SCANSOURCE [JE218-ARIN] 14044 LEGION-WI [DJ178-ARIN] 14045 ENVOY [SM586-ARIN] 14046 KCOL [MA232-ARIN] 14047 AMERIMARKETTECH1 [JM3076-ARIN] 14048 MEMPHIS-EDU [TB209-ARIN] 14049 GOLDEN-GATE-UNIV [SE108-ARIN] 14050 EVENSTREET [] 14051 RCSIS [TB424-ARIN] 14052 SPACEAGE [RV465-ARIN] 14053 DORSEYWRIGHT-ONE [TL604-ARIN] 14054 CYBERSTATION [CS436-ARIN] 14055 GRS-SAU [PJT1-ARIN] 14056 SEI [CD185-ARIN] 14057 CODSL-ASN [] 14058 TROPITONE [] 14059 WEBLICATIONS [] 14060 NNCGATEWAY [] 14061 LIQUID-AUDIO [] 14062 MIDAMERICA-NET [] 14063 PAYNET-NETWORK [] 14064 IISG [] 14065 GSCOM [] 14066 DISPATCH [] 14067 1800DAYTRADE [] 14068 PLAYBOY-BLK-1 [] 14069 TCSA [] 14070 PTN2 [AY24-ARIN] 14071 COMMUNIQUE [] 14072 WASH-DC-CITY-GOVT [] 14073 CLICK-INTERCONNECT [] 14074 COLGATE [] 14075 VCRT [] 14076 REDHERRING [] 14077 ARSC [JH306-ARIN] 14078 CANNECT [CH293-ARIN] 14079 EZGOV [AM5-ARIN] 14080 FIRSTCOM-COLOMBIA [ACD1-ARIN] 14081 COOLSAVINGS-2 [] 14082 GLOBAL-ONLINE [] 14083 CITRIX-AS [] 14084 MULTIPHONE-NET1 [] 14085 WIRED-ENTERPRISES [] 14086 LENDERS-SERVICE [] 14087 LOL [] 14088 WIU7 [] 14089 CANNET [BMH3-ARIN] 14090 NDTELCO [] 14091 DSM [ID87-ARIN] 14092 NJACCESS [] 14093 ITRIBE [MD363-ARIN] 14094 MASTERFINANCIAL [] 14095 WEBEXGC [SB415-ARIN] 14096 INDEXSTOCK [] 14097 TELUSA-AS [] 14098 L-I-T [] 14099 LIPSTREAM-ASN-001 [GG258-ARIN] 14100 UCIX [] 14101 NTON-NGI [GP2-ARIN] 14102 JONCTION [AR125-ARIN] 14103 ACDNET-ASN1 [KS550-ARIN] 14104 THENET-I2 [JH155-ARIN] 14105 PEARLNET [] 14106 RAREMEDIUM1 [SH650-ARIN] 14107 PCIWEST-PN001 [MG755-ARIN] 14108 MAMAMEDIA [] 14109 SIAL [] 14110 GENESYS-ASN [SVA5-ARIN] 14111 SALTEL [] 14112 NET-SECURENET-MTL [JMV4-ARIN] 14113 EXPRESS-TECHNOLOGIES [] 14114 EMAGINATION [] 14115 AMALGAMATED-BSA [] 14116 INFB-AS [ZI51-ARIN] 14117 TELSUR [ARH1-ARIN] 14118 INTERTAINER [] 14119 UTMCK [] 14120 FINGERHUT [] 14121 CIBC-WORLD-MARKETS [] 14122 ASN-VECTOR [] 14123 SFSNET [] 14124 IPCC [] 14125 VIRTUALSELLERS [DT190-ARIN] 14126 WITNET [] 14127 ILAND [] 14128 BEDFORDNET [] 14129 NMIA [IN28-ARIN] 14130 ASN-SOUTHNET-AL [TW151-ARIN] 14131 DONET [] 14132 INTERNETGATEWAY [] 14133 ELIXISCORP [] 14134 NAVISITE-WEST-2 [DY496-ARIN] 14135 NAVISITE-EAST-2 [ZN103-ARIN] 14136 PCCC [] 14137 MIDMICH [VS79-ARIN] 14138 REES [LD138-ARIN] 14139 PANDESIC-ONLINE [TVP3-ARIN] 14140 INTERCHANGE [DA2188-ORG-ARIN] 14141 AMX [AM67-ARIN] 14142 KEWILL-US [SM474-ARIN] 14143 GERALDSTEVENSINC [RT217-ARIN] 14144 ASN-CI [NO1-ARIN] 14145 SPECTRUM [MW113-ARIN] 14146 LEVENGER [JD559-ARIN] 14147 CNCI-NET1 [CCC7-ARIN] 14148 ENDINFOSYS [QY11-ARIN] 14149 ICONFITNESS-MAIN [TC5-ARIN] 14150 AMERICANISP [BB557-ARIN] 14151 ASN-ICI-ORG [AC1047-ARIN] 14152 INTTEL-ASN [HR23-ARIN] 14153 SYNCOMMASN01 [ZS27-ARIN] 14154 HUDSONET [KL184-ARIN] 14155 RURAL-TELEPHONE-SVCCO [JM290-ARIN] 14156 SAN-MARCOS-INTERNET [MT213-ARIN] 14157 INTUIT-CANADA-EAST [NO32-ARIN] 14158 MBUSA-LTINET [BC391-ARIN] 14159 ROCKRIVERINTERNET [ZR11-ARIN] 14160 WINFIRE [AS453-ARIN] 14161 LANDOLAKES [MK420-ARIN] 14162 PCENERGY [PD221-ARIN] 14163 SHEARMAN [RR431-ARIN] 14164 THEBIGLOAN [CC426-ARIN] 14165 COSMOZASN [MB692-ARIN] 14166 SOFTCOMCA [TY12-ARIN] 14167 MULTI-AD [TM493-ARIN] 14168 POTOMACNET-ASN [NOC1-ARIN] 14169 MEAD [JB747-ARIN] 14170 CANONCITYSCHOOLS [JH804-ARIN] 14171 REEDTECH-GW01 [EPJ-ARIN] 14172 ADVANCED-PROJECTS [GH248-ARIN] 14173 ENTREVISION [PC270-ARIN] 14174 NCKCN [TKT3-ARIN] 14175 HAWORTH [BH430-ARIN] 14176 SEACOVE [DD126-ARIN] 14177 PACKETXPRESS-NORTEL [AB5431-ARIN] 14178 MCM-TELECOM-MEX [IA32-ARIN] 14179 ITSS-1 [BB568-ARIN] 14180 INTERNETPRO-GAD [TN133-ARIN] 14181 MAUIGATEWAY [NA7-ARIN] 14182 EDATA [ER114-ARIN] 14183 UALR-ASN [RD328-ARIN] 14184 DATAGLYPHICS [HC82-ARIN] 14185 GC3 [ZG8-ARIN] 14186 NETCOM-S-A [LLJ2-ARIN] 14187 COMSATCOL [OL39-ARIN] 14188 ASHLANDFIBERNETWORK [RH200-ARIN] 14189 FIREDROP-SJ [AH93-ARIN] 14190 FUTURESHOP [GS373-ARIN] 14191 HSL [DS816-ARIN] 14192 RPII2122086500 [NP927-ARIN] 14193 MCC-SYSTEMS [TM315-ARIN] 14194 VISTRANET11600SUNRISE [CS327-ARIN] 14195 LOFTNET [CW259-ARIN] 14196 CARDCOM-AS [OK1-ARIN] 14197 BEAR-COM [DG433-ARIN] 14198 ASN-NEVIS [RT242-ARIN] 14199 HARCOURT-SD [NB63-ARIN] 14200 AKOO [SN161-ARIN] 14201 TELETECH [IM73-ARIN] 14202 GEONET-MDE [DT842-ARIN] 14203 JUNIPER-NETWORKS [TP261-ARIN] 14204 TKSTELE [RL355-ARIN] 14205 WANC [RR442-ARIN] 14206 DPTI [GD185-ARIN] 14207 REDBACK [DNA-ARIN] 14208 KPCORP [DA174-ARIN] 14209 UT-CHATTANOOGA [DT200-ARIN] 14210 WNCLINK [GH1208-ARIN] 14211 HUBSERV [MT333-ARIN] 14212 SANTA-CRUZ-EDNET [DB766-ARIN] 14213 MONTEREY-BAY-K12 [DS845-ARIN] 14214 VALINUX [LNZ-ARIN] 14215 REFLEX [AR248-ARIN] 14216 ISHIP [CF503-ARIN] 14217 DATAFRAMELO [SH68-ARIN] 14218 ASN-ECIS [JM2104-ARIN] 14219 TRIBUTEINTL [DT246-ARIN] 14220 NWAISP [JG614-ARIN] 14221 ICSS [DS329-ARIN] 14222 MAVER [MM498-ARIN] 14223 NYSDOH [WRM35-ARIN] 14224 PYGMY [HPN2-ARIN] 14225 DELAWARE-ONLINE [EV39-ARIN] 14226 TWP-TAILWIND [SM611-ARIN] 14227 FORBIN-COM [JF56-ARIN] 14228 CVM-TROY [BF205-ARIN] 14229 WMS-CHICAGO [PC331-ARIN] 14230 CSW [PS343-ARIN] 14231 BDV-AS [IRC2-ARIN] 14232 TELPINET [JS1220-ARIN] 14233 ANCESTRY-INC [RT246-ARIN] 14234 ZFM-ANTEL-PANAMSAT [FC94-ARIN] 14235 STATE-NM-US [VK40-ARIN] 14236 NETPLIANCE [JR575-ARIN] 14237 PROPOINT [RA273-ARIN] 14238 ASR-ISP-01 [EL120-ARIN] 14239 WIRELESSKNOWLEDGE [TG8-ARIN] 14240 PMC-AS-1 [PH205-ARIN] 14241 NUTEL [CR262-ARIN] 14242 LOGICALSOLUTIONS [JS1223-ARIN] 14243 SIGHTPATH [EH164-ARIN] 14244 T-ONE-INTERNET [LR1148-ARIN] 14245 SEGAOADC [GB842-ARIN] 14246 CHEMDEX-AS [BV49-ARIN] 14247 SBIS-WACOTX [ZS44-ARIN] 14248 PANJA-01 [SE109-ARIN] 14249 MPSNET [IA119-ARIN] 14250 DATASYS [MB153-ARIN] 14251 MLSLI [JD568-ARIN] 14252 SCHOOLSPECIALTY [SW398-ARIN] 14253 TSSL [DD919-ARIN] 14254 AUNET-US [SA224-ARIN] 14255 CINNETIC [JR578-ARIN] 14256 GO-EASY-ACCESS [TG210-ARIN] 14257 EZ-NET [DH667-ARIN] 14258 ANYLOAN-CORP [EC159-ARIN] 14259 GTD-INTERNET [OJ1-ARIN] 14260 USROYALINS [DB778-ARIN] 14261 USNETWORK-ASN [AK222-ARIN] 14262 P-MAN [PE1-ARIN] 14263 DAKOTA-DIGITAL [JL605-ARIN] 14264 CONCOURSE-C [LN76-ARIN] 14265 US-TELEPACIFIC [ZT119-ARIN] 14266 IPAG [MW901-ARIN] 14267 PTC [GR200-ARIN] 14268 BROOKMAYSMUSIC [RE126-ARIN] 14269 VA-DMV [DK390-ARIN] 14270 RADIOWAVE-COM [RF267-ARIN] 14271 LAMC-NET [HF27-ARIN] 14272 ACSNET [CJ69-ARIN] 14273 ONLINE-RESOURCES [BA151-ARIN] 14274 NETEASE [DC607-ARIN] 14275 WEATHERNET [HAF-ARIN] 14276 CONNEXT-SEATTLE-WA [CI33-ARIN] 14277 NOKIAIPNET [RH6-ARIN] 14278 NORSTAN [GE754-ARIN] 14279 WEBCOMBO [EH165-ARIN] 14280 NETNATION [IN8-ARIN] 14281 MISSIONCRITICALLINUX [SO87-ARIN] 14282 NET21 [CR268-ARIN] 14283 INHERENT-COM [HZ1-ARIN] 14284 ROCKHURST [CD208-ARIN] 14285 ASNBANCOMERCANTIL-1 [AA197-ARIN] 14286 TECNET-SA [HC112-ARIN] 14287 USAESOLUTIONS [MM862-ARIN] 14288 DURO-MPINET [JC918-ARIN] 14289 1SOURCE-TECHNOLOGIES [PC134-ARIN] 14290 ORGANIZER-SYSTEMS-INC [IO28-ARIN] 14291 ANTIETAM [GH692-ARIN] 14292 DISCNET [GC548-ARIN] 14293 WPGINVEST [SK322-ARIN] 14294 LIBERTYTEL [NO26-ARIN] 14295 CWIA [LE10-ARIN] 14296 NETALLIANCE [JN3-ARIN] 14297 S1-PROD-DATA-CENTER [LW148-ARIN] 14298 EPA-NET [BA52-ARIN] 14299 ADP1 [LE101-ARIN] 14300 BALT-VOIP [ME186-ARIN] 14301 BOS-VOIP [ME186-ARIN] 14302 NNJ-BELLATLANTIC-VOIP [ME186-ARIN] 14303 NYC-BELLATLANTIC-VOIP [ME186-ARIN] 14304 PHIL-VOIP [ME186-ARIN] 14305 WASH-VOIP [ME186-ARIN] 14306 GLAXO-WELLCOME [RS788-ARIN] 14307 WEBTANK [DP393-ARIN] 14308 OAG-WORLDWIDE [HZ16-ARIN] 14309 G2ANET [AM379-ARIN] 14310 WAMNET-AS [DA83-ARIN] 14311 XO-ASN2 [DIA-ORG-ARIN] 14312 1-800CONTACTS [BR283-ARIN] 14313 BOSTONNETWORKS [PK189-ARIN] 14314 GW-SUPERIORTECHNICAL [PW38-ARIN] 14315 HDMPEARSON [GS381-ARIN] 14316 TWINNEYVILLE [RR448-ARIN] 14317 ACCNETWORKS [MC1256-ARIN] 14318 PSINET-CL-ASN [LD1227-ARIN] 14319 BDXP [EM201-ARIN] 14320 GENEX [WS382-ARIN] 14321 SERVICIO-UNITELLER [MS923-ARIN] 14322 ARLINGTON-CG [TK233-ARIN] 14323 AXIENT [ANO1-ARIN] 14324 TAFG [JO175-ARIN] 14325 OSHEAN [DW565-ARIN] 14326 CONCEPT-NET [BH451-ARIN] 14327 PGE-ONLINE [PC753-ARIN] 14328 RRD [RL367-ARIN] 14329 OPEN-ACCESS-TECH [PH213-ARIN] 14330 DIGITAL-INSIGHT [JT470-ARIN] 14331 TCM-NETWORKS-0098 [MH600-ARIN] 14332 MIDDLE-NET [MB728-ARIN] 14333 ON-RAMP-INDIANA [SL324-ARIN] 14334 LEARNINGSTATION [KG188-ARIN] 14335 CONTERRA-COMM [DC811-ARIN] 14336 ESUHSD [FR78-ARIN] 14337 FWHT-FL1 [TG216-ARIN] 14338 PROSOLUTIONS-ASNUM [JC1634-ARIN] 14339 SADESA [ZS154-ARIN] 14340 SALESFORCE [JC930-ARIN] 14341 MAILBITS [MK403-ARIN] 14342 ADN-INTERNET [DV121-ARIN] 14343 I2-TECHNOLOGIES [FD62-ARIN] 14344 MSDW-CLIENTSERV [DW568-ARIN] 14345 CRESCENT-TECH [PK192-ARIN] 14346 OESPNET [ELP1-ARIN] 14347 POWER-NET [DB634-ARIN] 14348 URI-AS [JD587-ARIN] 14349 KCPLASN-1 [RP395-ARIN] 14350 BLASTNET-ISP [DN139-ARIN] 14351 SOUTHWESTERN-EDU [TW229-ARIN] 14352 AS-ONEM-CORP [SA279-ARIN] 14353 IGO [MF341-ARIN] 14354 XPLAIN [NA91-ARIN] 14355 GETRELEVANT [MRJ1-ARIN] 14356 MAPICS-INC [DC616-ARIN] 14357 VETCENTRICASN1 [KS399-ARIN] 14358 MACKENZIEFINANCIAL-AS [MH609-ARIN] 14359 ITS-USNET [TR249-ARIN] 14360 OBSIDIAN [AW211-ARIN] 14361 HOPONE-DCA1 [HJ48-ARIN] 14362 CCIS [MR461-ARIN] 14363 OUTFITTERS [JC587-ARIN] 14364 HARDING-LAWSON [MP428-ARIN] 14365 BIZNET-2 [MZ23-ARIN] 14366 MTNCABLE [SA281-ARIN] 14367 USLINK-PEQUOT [CC1189-ARIN] 14368 INTERWEB-NETWORKS [HM103-ARIN] 14369 NMAX [MHH1-ARIN] 14370 EUREKA-BROADBAND [LH3-ORG-ARIN] 14371 PBNET [PBH1-ARIN] 14372 RPAWIRELESS [HS101-ARIN] 14373 UTMB [BC426-ARIN] 14374 AGRI-VALLEY [DG449-ARIN] 14375 ALTRA-ENERGY [RK315-ARIN] 14376 SIS-EAST [RJ58-ARIN] 14377 PSI-PANAMA [JB1290-ARIN] 14378 INTERLINK-1 [RL52-ARIN] 14379 N-T-C [TB439-ARIN] 14380 OPUS-CREATIVE-GROUP [EH166-ARIN] 14381 CATERPILLAR-INC [TJ71-ARIN] 14382 OIB [JS2703-ARIN] 14383-14388 OPTICNET-AS [CB202-ARIN] 14389 COMPSOL-NET [AF165-ARIN] 14390 CORENET [BM601-ARIN] 14391 PROBIZ [KA130-ARIN] 14392 ABQ2-DOM [SF169-ARIN] 14393 SILVERBACKTECH [SJ182-ARIN] 14394 KBCFP-NYC [CK184-ARIN] 14395 FHLBATL [TD244-ARIN] 14396 IVANET-BURLINGTON [SA261-ARIN] 14397 IDG-WEB [CM431-ARIN] 14398 AUTODESK [ZZ370-ARIN] 14399 FLASHNET-AS3 [FN-ORG-ARIN] 14400 IWIDGETSNETWORKS [CD212-ARIN] 14401 ROLLINS-LEASING-CORP [DLR8-ARIN] 14402 VWPT-AS [JB355-ARIN] 14403 TUCKER-USA [KT718-ARIN] 14404 DIRECT-ALLIANCE [GV67-ARIN] 14405 XO-ASN4 [DIA-ORG-ARIN] 14406 XO-ASN3 [DIA-ORG-ARIN] 14407 XO-ASN5 [DIA-ORG-ARIN] 14408 AIAC [MG305-ARIN] 14409 TRIP-COM-AS [DD481-ARIN] 14410 DALTON [RM967-ARIN] 14411 WWCDLR-ASN [YD1-ARIN] 14412 VIRTUALBANK [JS1260-ARIN] 14413 AVT-MEDIALINQ [EA83-ARIN] 14414 AMERICAN-MOBILE [LM187-ARIN] 14415 DOWNTOWN-XCEED [DB805-ARIN] 14416 BRAVO-NET [ER462-ARIN] 14417 LANDSTAR [IL73-ARIN] 14418 DTCC-AS1 [SW743-ARIN] 14419 CREATIONSNET [ZC82-ARIN] 14420 ANDINATEL-AS [PH259-ARIN] 14421 ADVANCED-MEDICINE [CP143-ARIN] 14422 SIMPLIX [GC251-ARIN] 14423 MEDIAPASSAGE [JC938-ARIN] 14424 ASN-ADERO [RP375-ARIN] 14425 MENDO-COMMUNITY-NET [DM212-ARIN] 14426 NET1-INC [GS390-ARIN] 14427 INFOTECSOLUTIONS [IH12-ARIN] 14428 EXTENDEDCARE [SK328-ARIN] 14429 SONOROUS-NETWORKS [LE14-ARIN] 14430 NCT-BACKBONE [SR336-ARIN] 14431 LOGICALCONSULTING [IB8-ARIN] 14432 CMEDIAINCNET [KR268-ARIN] 14433 SUNY-OSWEGO-ASN [EFB1-ARIN] 14434 VITELCOM [RW397-ARIN] 14435 INTERNETWEBS3201 [CM441-ARIN] 14436 INTUIT-MV [KA135-ARIN] 14437 FLEMING [TR628-ARIN] 14438 USA-CHOICE-OIL-CITY [MP433-ARIN] 14439 ROGERS-CORP [RD349-ARIN] 14440 CYTECH [SH1060-ARIN] 14441 WEBHOSTING [MS928-ARIN] 14442 LIBERATE [MW298-ARIN] 14443 OTS-YOURACCOUNTS [KM349-ARIN] 14444 MAM207 [HL73-ARIN] 14445 AOSYS-ABQ [DF66-ARIN] 14446 CNT-ASN [BT248-ARIN] 14447 IHIGH [HH128-ARIN] 14448 DERIVION-CORP [KS412-ARIN] 14449 IDIGI-NET [JB1050-ARIN] 14450 GEICO01 [EAS1-ARIN] 14451 GEICO02 [EAS1-ARIN] 14452 IOS-ASN [ZI93-ARIN] 14453 NETSURF [KA83-ARIN] 14454 CYBERGNOSTIC [TS525-ARIN] 14455 COMDISCO-1 [JC260-ARIN] 14456 PUC-CA [WD49-ARIN] 14457 TELEMIGCELULAR-BR [DT259-ARIN] 14458 CCPC-ASN-1A [DM470-ARIN] 14459 TELECOMP [RE108-ARIN] 14460 RADISYS-HILLSBORO [JM1200-ARIN] 14461 NTSL [JO1432-ARIN] 14462 CYSHOP-COMMERCE [MB745-ARIN] 14463 TDKOM [CAA1-ARIN] 14464 RINET [JC955-ARIN] 14465 BURLEE [BD219-ARIN] 14466 FREEMARKETS [KG1-ARIN] 14467 KUA-NET [KDA1-ARIN] 14468 ACENETX [CS568-ARIN] 14469 DSLDESIGNS [RN197-ARIN] 14470 ATT-PWSS-2 [CH394-ARIN] 14471 ENCODING [TD179-ARIN] 14472 FIBRETECH-TEL [FR163-ARIN] 14473 KNET [AG112-ARIN] 14474 CONCENTREX [MD410-ARIN] 14475 PREV-TRAV [MO154-ARIN] 14476 PANDANET [BT249-ARIN] 14477 SOLBRIGHTASN [JM1214-ARIN] 14478 BAYTSP [MI70-ARIN] 14479 TBTOR155 [RS828-ARIN] 14480 CTTEL-2 [ZC135-ARIN] 14481 SERVICEMERCHANDISE [DA31-ORG-ARIN] 14482 BENECO [KP200-ARIN] 14483 INLAND [JW660-ARIN] 14484 EOS-AS [DS906-ARIN] 14485 KEWILLERP-JOBBOSS [KR270-ARIN] 14486 OXY-AS [PH73-ARIN] 14487 VIDEONETWORKS [MS971-ARIN] 14488 CAPITALTHINKING [PL226-ARIN] 14489 DENDRITE [MT343-ARIN] 14490 EXTRNET [CS524-ARIN] 14491 FGLIFE [GB381-ARIN] 14492 HI-SPEED [AF171-ARIN] 14493 INTERACTIVE-SEARCH [JS1741-ARIN] 14494 EPINIONS [JW664-ARIN] 14495 NASDAQTRM [NTC1-ARIN] 14496 AGILENT-AS [AI27-ARIN] 14497 EID-1 [SO86-ARIN] 14498 EQUITY-PLUS-FINANCIAL [GS352-ARIN] 14499 HUSSMANN-CDC [SP351-ARIN] 14500 INTERDESIGNS [NL29-ARIN] 14501 CIHOST [NC61-ARIN] 14502 TRAVEL-NET [JJ257-ARIN] 14503 HOOVERS [OH27-ARIN] 14504 EUREKA-BROADBAND-2 [LH3-ORG-ARIN] 14505 ISLC [WNG2-ARIN] 14506 JAFFCOMM-NET01 [JNA1-ARIN] 14507 ALTAIRE [JS446-ARIN] 14509 OPTICNET [CB202-ARIN] 14510 COREEXPRESS [JR621-ARIN] 14511 POLAR-COMMUNICATIONS [KB346-ARIN] 14512 EDDIEBAUER-1 [RW265-ARIN] 14513 OPTICNET-2 [CB202-ARIN] 14514 PHJW [DB801-ARIN] 14515 STATENET [DK396-ARIN] 14516 INVESTEC-2 [WJR1-ARIN] 14517 REACHONE [ZR63-ARIN] 14518 FLEISHMAN-HILLARD [RB732-ARIN] 14519 EBONDTRADE [TAB150-ARIN] 14520 NEWINET [JM1137-ARIN] 14521 PACIFIC-LIFE [DL452-ARIN] 14522 SATNET-SA [XM3-ARIN] 14523 LEWISIG-ASN-R01 [JB3082-ARIN] 14524 ICELEBRATE [JD612-ARIN] 14525 EPIDEMIC [CM458-ARIN] 14526 AGILLION-ASN1 [KJ127-ARIN] 14527 CABELAS [RC595-ARIN] 14528-14531 OPTICNET-ASN-BLOCK [CB202-ARIN] 14532 CBOSS [DW589-ARIN] 14533 CSC-FSG [SW424-ARIN] 14534 CYBERAGENCY-FTL [HLG2-ARIN] 14535 DIPER [DP414-ARIN] 14536 ASN-SOL [SNH-ARIN] 14537 MOHAWK-INTERNET-AS [JQ31-ARIN] 14538 INTELLISWITCH-NY [RIW-ARIN] 14539 COTELLIGENT [DP416-ARIN] 14540 CERTICOM [RK3017-ARIN] 14541 GE-AIRCRAFT-ENGINES [DM832-ARIN] 14542 HOLLYWOOD-INTERACTIVE [RO162-ARIN] 14543 SRT-ASN [IH23-ARIN] 14544 RETEK [JW672-ARIN] 14545 MACI [VM158-ARIN] 14546 MIDWESTINTER [NP73-ARIN] 14547 RPTK [JO185-ARIN] 14548 LISTEN-SF-1 [LP122-ARIN] 14549 CYBRTOWN [ES269-ARIN] 14550 MIDDLEBURY-COLLEGE [HM101-ARIN] 14551 ALTERNET-SA-AS [OA12-ARIN] 14552 SKILLLEARNING [WC134-ARIN] 14553 PUC-RIO [JO186-ARIN] 14554 NY-INTERNET-CENTER [EV83-ARIN] 14555 KENDARA [NW51-ARIN] 14556 INBUILDING [JH876-ARIN] 14557 ACCESS-ORLANDO [NOC65-ARIN] 14558 DANDY [SA301-ARIN] 14559 GLOBUSANDCOSMOS [RM698-ARIN] 14560 IHOLDING [MR500-ARIN] 14562 VIDEON-AS [RD184-ARIN] 14563 MICROCAST [SM647-ARIN] 14564 ELECTROLUX [DA341-ARIN] 14565 TEKNET [JD629-ARIN] 14566 ACS-INTERNET [GS405-ARIN] 14567 CLIPSCOM [KC273-ARIN] 14568 NAVL [BM840-ARIN] 14569 MP3-COM [AH313-ARIN] 14570 CYBERCONNECTICS [LF80-ARIN] 14571 IGB [SD303-ARIN] 14572 GLOBAL-ROUTE [RG439-ARIN] 14573 KEYSPANENERGY-NE1 [DC645-ARIN] 14574 RTCCOM [TH369-ARIN] 14575 RIVALS-COM [KB350-ARIN] 14576 VIPIS-NET [RS679-ARIN] 14577 PTNC [BP271-ARIN] 14578 WMJBGABL99 [JC1003-ARIN] 14579 EDWARDJONES [SJ178-ARIN] 14580 PTELCORP [FL93-ARIN] 14581 UAI [NO28-ARIN] 14582 BUSINESSONLINE [JKD7-ARIN] 14583 COLONY1 [AC310-ARIN] 14584 BAKER-AND-TAYLOR [SO97-ARIN] 14585 CIFNET [BK252-ARIN] 14586 FITCHIBCA-NEWYORK [DD513-ARIN] 14587 GIANT-CR [SS124-ARIN] 14588 COMSAT-INTERNATIONAL [CH405-ARIN] 14589 DIGITALWEST-NET1 [JR539-ARIN] 14590 DESERTSCHOOLS-ASN-1 [GL136-ARIN] 14591 SWPNET [ZG64-ARIN] 14592 NORTHGATE-ASN [TM428-ARIN] 14593 BRAND-INSTITUTE [MA286-ARIN] 14594 INNET [JW686-ARIN] 14595 ECONEX [MG466-ARIN] 14596 COMPUTERCONCEPTS [TJ1308-ARIN] 14597 DETM10777 [BE145-ARIN] 14598 FCS-AS [RC384-ARIN] 14599 DNC-INTERNET-SERVICES [GP197-ARIN] 14600 SNG-NET [NA97-ARIN] 14601 INTRACOMCORP [EG164-ARIN] 14602 GENEVACO-1 [DH723-ARIN] 14603 INTERNET-PR [ZP111-ARIN] 14604 NFRONT-ATL [DP1935-ARIN] 14605 DETTER-DESIGN [CD154-ARIN] 14606 TRENDWEST [DU36-ARIN] 14607 OTA-LTD [SA560-ORG-ARIN] 14608 AFS-1 [ZA63-ARIN] 14609 EQUINIX-CORP-AS [JR82-ARIN] 14610 FUSAFS [CC460-ARIN] 14611 VANGUARD [BH337-ARIN] 14612 2656MAINSTREET [AQ10-ARIN] 14613 TELECOMRG [RW423-ARIN] 14614 FUZION [CF440-ARIN] 14615 FUTURESTEP-CA [YH14-ARIN] 14616 IVANET-AMSTERDAM [SA261-ARIN] 14617 MICROTECH-TEL [SA305-ARIN] 14618 TSICABLENY [EK115-ARIN] 14619 RANGENET [JD511-ARIN] 14620 INTRACONNECT-1 [CB2696-ARIN] 14621 NPSNET [GF129-ARIN] 14622 CORP-BUYANDHOLD [AR267-ARIN] 14623 QUADNETCOMM [CT188-ARIN] 14624 PSINET-BRAZIL [AC1985-ARIN] 14625 RISCO [OJ10-ARIN] 14626 COLUMBIA-HCA [KW256-ARIN] 14627 PARKCITYNET [ES1104-ARIN] 14628 SMUD-ELECTRIC [DL492-ARIN] 14629 SOLUCIAN [HT420-ARIN] 14630 AIM-MANAGEMENT [TW130-ARIN] 14631 CALIFORNIA-GOV-PR [DB599-ARIN] 14632 MAGSNOW [PA121-ARIN] 14633 TRANSTEL [JZ135-ARIN] 14634 SPINNNET [MG520-ARIN] 14635 GASONICS [SC498-ARIN] 14636 INTERNAP-BLK4 [INO3-ARIN] 14637 PRESTIGE-CABLE [MI443-ARIN] 14638 IMARK-COM [MD484-ARIN] 14639 ALLEGIANCE-AS1 [MZ99-ARIN] 14640 COMPGEEKS [TM347-ARIN] 14641 HANNAFORD [ET98-ARIN] 14642 WORLDSTREAM [CP175-ARIN] 14643 PULSITY [CL261-ARIN] 14644 IONCOMPUTER [PK313-ARIN] 14645 ACTIVEWEBSERVICES [BA207-ARIN] 14646 LOGANREC [MC1172-ARIN] 14647 NETOS-ASN1 [BL176-ARIN] 14648 RANDFINANCIAL [IR73-ARIN] 14649 NEBS [ZZ522-ARIN] 14650 VANT [DB856-ARIN] 14651 RSLCOMCA-1 [BL291-ARIN] 14652 COSTARGROUPASN [TC346-ARIN] 14653 C1-INET [KF286-ARIN] 14654 WAYPORT [WN25-ARIN] 14655 INTERNET-WISCONSIN [CK203-ARIN] 14656 VIVIANCE [RR425-ARIN] 14657 WEBSERVEPRO [JR622-ARIN] 14658 SPACEY-NET [AG298-ARIN] 14659 LIVEPERSON [KS439-ARIN] 14660 INTERSURVEY-217691 [JL683-ARIN] 14661 LAURENTIANU [ML538-ARIN] 14662 EPSONAR [MP482-ARIN] 14663 CLEARNET [AW185-ARIN] 14664 IFXNW-AS [ZI48-ARIN] 14665 REWARDSPLUS [EH38-ARIN] 14666 MENDELSON-ASSOCIATES [ZN15-ARIN] 14667 MYLINUXISP-01 [BW360-ARIN] 14668 G-BONE-NET [AZ116-ARIN] 14669 RINC-NET [ZA40-ARIN] 14670 SMARTNET [SS695-ARIN] 14671 TACONIC [MB783-ARIN] 14672 CARROLL-NET [JC342-ARIN] 14673 SITESMITH [SS768-ARIN] 14674 DILHARD [FMK1-ARIN] 14675 PARABLEGROUP [MM960-ARIN] 14676 DEVELOPMENTDIMENSIONS [JH915-ARIN] 14677 CLICK-NETWORK [CH869-ARIN] 14678 BROKERSYS [JMG91-ARIN] 14679 WEBMASTER [DS949-ARIN] 14680 TELERA-AS [AJ107-ARIN] 14681 ROOTSWEB [NL55-ARIN] 14682 GGS [JN232-ARIN] 14683 INTRAWARE-ORINDA [JA429-ARIN] 14684 LOUISVILLENOC [NS132-ARIN] 14685 COUNTRYWIDE-CREDIT1 [SR1620-ARIN] 14686 YISI [DH736-ARIN] 14687 NATIONALLIFE [ZN33-ARIN] 14688 GVSI [EF121-ARIN] 14689 AGEDWARDS [VT43-ARIN] 14690 PEORIAUSD11 [DF344-ARIN] 14691 AEACU-ROUTEDOMAIN [PT162-ARIN] 14692 PSINETSTI [AC1985-ARIN] 14693 WESTCON-1 [RG54-ARIN] 14694 LOGICTIER [PB344-ARIN] 14695 HOMESEEKERS [JH7806-ARIN] 14696 E-ASSIST [TH364-ARIN] 14697 VDOTNET [MR1164-ARIN] 14698 CLEARSOURCE [ZC96-ARIN] 14699 BTCBCI [PM377-ARIN] 14700 GAZOOBA [ZO9-ARIN] 14701 COLLECTIVETECH [BH511-ARIN] 14702 ARGONNE-WEST-AS [RS875-ARIN] 14703 MAQSNET [JK639-ARIN] 14704 COMSCAPE-TELECOM [KL221-ARIN] 14705 INTER-TAINMENT [TH362-ARIN] 14706 LB1 [ZR63-ARIN] 14707 AS-MADGEUS [PM757-ARIN] 14708 WEBHOST-ASN [EK20-ARIN] 14709 BELLSOUTHPANAMA [AA221-ARIN] 14710 COX-OMAHA [DM647-ARIN] 14711 NETWORK-TRAINING [GA146-ARIN] 14712 WHITNEY [LS307-ARIN] 14713 ICI-HSNP [JB869-ARIN] 14714 CONCERT-ASN [NR82-ARIN] 14715 NICORINC [BL199-ARIN] 14716 LIGHTHOUSE [MM969-ARIN] 14717 ECINET [WT27-ARIN] 14718 GSIT220E42 [VB63-ARIN] 14719 BCENTRAL-AS [DA365-ARIN] 14720 WARPSPEED [PP212-ARIN] 14721 IPING [DA367-ARIN] 14722 WEBCONNECTRIXINC [NG106-ARIN] 14723 BMS-BR [SV99-ARIN] 14724 PROCARERX [MO1691-ARIN] 14725 KEMPER-TECHSERVICES [RD25-ARIN] 14726 BLUE-MOUNTAIN-ARTS [JK649-ARIN] 14727 TECHLINE [SS778-ARIN] 14728 PCRDATACOM [JS1379-ARIN] 14729 TIER1NET [MC665-ARIN] 14730 CAVTEL01 [NOC11-ARIN] 14731 NETWAY [MG528-ARIN] 14732 THESTREET-COM-AS2 [RB762-ARIN] 14733 BARCAP-NORTH-AMERICA [JW719-ARIN] 14734 LASERLINK-NET [FR89-ARIN] 14735 CREATIVE-CHANGE [CB555-ARIN] 14736 VELOCITYENTERPRISES [BS630-ARIN] 14737 CCCOES [MW492-ARIN] 14738 DIGIKEY [KK347-ARIN] 14739 WCFU-UTAH [DK163-ARIN] 14740 ETBYTE-NET [PM380-ARIN] 14741 NETWORKS-WEB-HOSTING [TH248-ARIN] 14742-14745 INTERNAP-BLOCK-4 [INO3-ARIN] 14746 SUMMIT-SOLUTIONS [RJ199-ARIN] 14747 SHOPNOW [SA316-ARIN] 14748 DAYCO [ZZ448-ARIN] 14749 AVGO [SA317-ARIN] 14750 SIERRA-TEL-INTERNET [JB1150-ARIN] 14751 CONVERSENT [RC630-ARIN] 14752 FREEDOM-NET [SA318-ARIN] 14753 SMARTMONEY [IP-FIX-ARIN] 14754 TELGUA [CF18-ARIN] 14755 MHO [TC857-ARIN] 14756 PROGNOSTICS [EM386-ARIN] 14757 DSW-NET [BB532-ARIN] 14758 CAJUNNET-ASN [TM575-ARIN] 14759 EICISA [JM1312-ARIN] 14760 CCMCOMPUTER [MM2414-ARIN] 14761 MOCC [TG257-ARIN] 14762 AMGEN [JN541-ARIN] 14763 CJI [BP99-ARIN] 14764 SUNGARD [JD665-ARIN] 14765 TECHE [CW319-ARIN] 14766 ABCIMAGING [VS101-ARIN] 14767 THEAIMSGROUP [DS507-ARIN] 14768 STOCKSCOPE-AS1 [TR281-ARIN] 14769 I-SOLUTIO [CF224-ARIN] 14770 APPLIEDCARD [KM389-ARIN] 14771 STONEAGE [ZS81-ARIN] 14772 SOURCEALLIANCE [ME210-ARIN] 14773 ZAPME-30 [MO172-ARIN] 14774 CCMNET [DM1275-ARIN] 14775 C-COR [ZC34-ARIN] 14776-14781 INKTOMI-LAWSON [AB474-ARIN] 14782 EVELOCITY-NETWORK [RS895-ARIN] 14783 SCANSOFT [IS112-ARIN] 14784 CPR [MV177-ARIN] 14785 POGO [DMK2-ARIN] 14786 NETCHIEF-NET [SL1197-ARIN] 14787 ASN1GUARD23ATTWINSTAR [MF290-ARIN] 14788 LALLY-MCFARLAND [BG337-ARIN] 14789 DONORNETWORK [DP290-ARIN] 14790 CENTRILNET-CMI [TC276-ARIN] 14791 ASN-CENTRAMEDIA-ISP [JS1372-ARIN] 14792 DST-ASN [BD356-ARIN] 14793 INTEGRITYONLINE12 [DW1503-ARIN] 14794 AIRLIANCE [EK73-ARIN] 14795 BCI [AS528-ARIN] 14796 CVC-INTERNET [JW730-ARIN] 14797 OUTPURCHASE [MS1039-ARIN] 14798 WESTARTECH [SO89-ARIN] 14799 EXP-EC2000 [CK192-ARIN] 14800 METRATECH [NK80-ARIN] 14801 HPU [ZH68-ARIN] 14802 AVEO-INC [NL14-ARIN] 14803 SEGACOM [EK122-ARIN] 14804 DYNAMEX [KD193-ARIN] 14805 WAVO-CORP [HL70-ARIN] 14806 BUY-COM [RB771-ARIN] 14807 TRADING-EDGE [CK82-ARIN] 14808 PONCACITY-NET [TM451-ARIN] 14809 CCI-INTERNET [RK748-ARIN] 14810 ADCOM [DZ34-ARIN] 14811 HELLMANN-US [NV85-ARIN] 14812 CIBOLAES [LQ4-ARIN] 14813 GRAYBARON [JS1393-ARIN] 14814 TRVNET [MS1135-ARIN] 14815 MYCFO-ASN [DA374-ARIN] 14816 AMDAHL-CORP [JD669-ARIN] 14817 SCL-SHAW [RP444-ARIN] 14818 CYBERMESA-ASN [GR48-ARIN] 14819 AMER-COLLEGE-OF-CARD [TW38-ARIN] 14820 HOMESTORE [SM1766-ARIN] 14821 SOFTBOOK [PI25-ARIN] 14822 MSKCC [AC353-ARIN] 14823 FLARE [KM372-ARIN] 14824 NEWSOUTH [RH613-ARIN] 14825 CONSONUS [AK239-ARIN] 14826 AVANA-ASN1 [SP365-ARIN] 14827 WSDOT-ASN [JM911-ARIN] 14828 HBCI-1999TA [TS589-ARIN] 14829 ASN-IWON [MH666-ARIN] 14830 NOTXWEBSERINC [MAK83-ARIN] 14831 ANSRTHINK [ZO10-ARIN] 14832 VAIX-NET [WD70-ARIN] 14834 PAIRODOXX [NM101-ARIN] 14835 RENTECH [KN110-ARIN] 14836 CITY-OF-TORONTO [PC154-ARIN] 14837 ART-LA-1 [KH80-ARIN] 14838 ELDORADOBGP4-1 [ALG1-ARIN] 14839 SARCOM [MC679-ARIN] 14840 CONEX-BR [FS111-ARIN] 14841 ANDALE-COM [SS1154-ARIN] 14842 ZCOM-LA [GC292-ARIN] 14843 SCREENHOUSE [RB5444-ARIN] 14844 I-100 [CP282-ARIN] 14845 UNS-RED-TCP-IP [FC126-ARIN] 14846 NBCI [KA152-ARIN] 14847 RCG-INFO-TECH [AH309-ARIN] 14848 INTERVU-NET [EV4-ARIN] 14849 CLEARWORKS [CN139-ARIN] 14850 KLEINTECH-INTERNET-AS [SK376-ARIN] 14851 SYSTEM-INTEGRATORS [ML552-ARIN] 14852 DCX [MC685-ARIN] 14853 AOL-MTC3 [AOL-NOC-ARIN] 14854 AOL-MTC2 [AOL-NOC-ARIN] 14855 AOL-MTC1 [AOL-NOC-ARIN] 14856 PINKDOT-AS1 [DL505-ARIN] 14857 MOTOROLA-ICSD [DG511-ARIN] 14858 HISNET [RM762-ARIN] 14859 CLASSIC [BD354-ARIN] 14860 SC2000AS [SM707-ARIN] 14861 ISC-GROUP [DL506-ARIN] 14862 OCEANEERING [TP245-ARIN] 14863 VISITALK [RC640-ARIN] 14864 GREENWICH [TM588-ARIN] 14865 LIBERTY-ENTERPRISES [HM185-ARIN] 14866 TELIC [CA40-ARIN] 14867 DIVEO-COLOMBIA [JCC54-ARIN] 14868 COPEL [MM999-ARIN] 14869 ADAM-COM [CN141-ARIN] 14870 INTRAWARE-SC4 [JA429-ARIN] 14871 YOUNG-AMERICA [SH196-ARIN] 14872 PROCURE-NET [RL420-ARIN] 14873 C3-COMMUNICATIONS [DH754-ARIN] 14874 OSBORNGROUP-HQ01 [GG321-ARIN] 14875 COMPFIRSTONLINE [BJ171-ARIN] 14876 QUOKKASPORTS-CORP [PP222-ARIN] 14877 VIRTUALINC [CP288-ARIN] 14878 FLINTHILLS [RRS31-ARIN] 14879 SWBT [PE93-ARIN] 14880 HOOKUP-JOPLIN [RM619-ARIN] 14881 MICROJURIS [MM1019-ARIN] 14882 QUAD-GRAPHICS [DG619-ARIN] 14883 TRACI [DG1628-ARIN] 14884 ADVANCEDACCESS [SJ213-ARIN] 14885 SATSOP [NOC19-ARIN] 14886 ORIGINBR [DS1749-ARIN] 14887 RETAIL-TECHNOLOGIES [LW177-ARIN] 14888 FNBOMAHA-AS [JS173-ARIN] 14889 DNRG-DAL1 [RK375-ARIN] 14890 HAYBOONET [KG121-ARIN] 14891 EACOM [RC646-ARIN] 14892 STOCKPOINTSF [RL425-ARIN] 14893 BOTTOMLINE-TECH [RG468-ARIN] 14894 BANK-UNITED [RO139-ARIN] 14895 LAWSON-SOFTWARE [TR286-ARIN] 14896 CSNOC [MS8620-ARIN] 14897 E-ACCESS [MM216-ARIN] 14898 ODINTERNET [FM167-ARIN] 14899 SYLLOGISTICS-REDMOND [GW230-ARIN] 14900 USLEC-CORP-1 [WW116-ARIN] 14901 TAOSNET-NEWMEX [JDB14-ARIN] 14902 VISTAVDI [LH208-ARIN] 14903 BLCLINKS-FLINT-MI-POP [TG226-ARIN] 14904 IBMUSF-RTP [DSB2-ARIN] 14905 CAMPUSPIPELINE [DS961-ARIN] 14906 NETSITE [PS699-ARIN] 14907 HONESTY [SP135-ARIN] 14908 TNT-NM [SH663-ARIN] 14909 PNG-TELECOM [NO49-ARIN] 14910 CAREERPATH [DC710-ARIN] 14911 MOMENTUM-ONLINE [PP226-ARIN] 14912 IBMUSF-SBY [DSB2-ARIN] 14913 MEDIA-NEWS-GROUP [KLH10-ARIN] 14914 CONNECTSOUTH [CH615-ARIN] 14915 HYPERION-SOLUTIONS-SV [GC232-ARIN] 14916 JUNROO [JP702-ARIN] 14917 FBS-NET [KW193-ARIN] 14918 TECHNOVISION [TS214-ARIN] 14919 NETLEDGER [DD551-ARIN] 14920 BPOP [LM852-ARIN] 14921 CATALYST-CAPITAL-COM [EV94-ARIN] 14922 NOWDOCS [CT209-ARIN] 14923 CM-TEL [AG320-ARIN] 14924 NAP-PAIX-VA1 [ZM8-ARIN] 14925 DELTA [PH296-ARIN] 14926 IBMUSF-BLD [DSB2-ARIN] 14927 CREATIVELABS [RE163-ARIN] 14928 GEOSERVE [WM151-ARIN] 14929 CECOMET [MB783-ARIN] 14930 ALLANT-GROUP [DN198-ARIN] 14931 STPAUL-W-AS [IA35-ARIN] 14932 CELERA-GENOMICS [TE122-ARIN] 14933 LONDONCONNECT [SJ216-ARIN] 14934 VSTECHNOLOGY [MB837-ARIN] 14935 MONTICELLO [JP3039-ARIN] 14936 SVG [CM242-ARIN] 14937 DOCUMENT-SYSTEMS [RA331-ARIN] 14938 BET-AS [BTN1-ARIN] 14939 NAVINET-CANADA [DC205-ARIN] 14940-14949 OPTICNET-3 [CB202-ARIN] 14950 NFOR [AU108-ARIN] 14951 REL-625 [AL299-ARIN] 14952 ACCENTURE [JK1096-ARIN] 14953 SWS-AS [JAL1-ARIN] 14954 FHCRC [SK913-ARIN] 14955 N-V-C [ZN66-ARIN] 14956 BROADVISION-ASN [JD667-ARIN] 14957 HOALE [JG728-ARIN] 14958 NATIONS-KS [DF368-ARIN] 14959 MODISPRO [DY77-ARIN] 14960 DATA-PRO-ACCT-SOFTWAR [RS937-ARIN] 14961 RBMG [TD290-ARIN] 14962 NCR-252 [MB843-ARIN] 14963 TMCS [MB844-ARIN] 14964 GOINVEST [YK37-ARIN] 14965 FBR [AD219-ARIN] 14966 LARRAIN-VIAL [CS583-ARIN] 14967 IOS-INT-SOL [KB381-ARIN] 14968 LESEA-01 [SR96-ARIN] 14969 IOL1263 [ER47-ARIN] 14970 NAP-COLOMBIA [CQ9-ARIN] 14971 RAF [BY50-ARIN] 14972 AWWWSOME-NET-SERVICES [DW295-ARIN] 14973 SUMMIT-COMPUTERS [DR413-ARIN] 14974 VIRTUAL-INC [ZV39-ARIN] 14975 ABN-AMRO-NA [NOC22-ARIN] 14976 AZLINK [LS534-ARIN] 14977 CORNERSTONE-ALLIANCE [ENO2-ORG-ARIN] 14978 COMPUTER-CLEARING [MK510-ARIN] 14979 SSA [MR349-ARIN] 14980 RTCOL [DJ133-ARIN] 14981 KIRKLAND-ELLIS [BW385-ARIN] 14982 TURBOWAVE-ASN [JW755-ARIN] 14983 XUMA [NA118-ARIN] 14984 GLGT [RH628-ARIN] 14985 VEROXITY [IV44-ARIN] 14986 WPEDUC [TR291-ARIN] 14987 NII [CR294-ARIN] 14988 BTC-GATE1 [RS945-ARIN] 14989 BROADVIEWNET [GJ55-ARIN] 14990 AVNET-NA [KL236-ARIN] 14991 ELKNET [TH406-ARIN] 14992 CRYSTALTECH [TU22-ARIN] 14993 BRICKROAD [BB706-ARIN] 14994 I3INC-ASN [PC382-ARIN] 14995 MASERGY-AS [ZM130-ARIN] 14996 NYSEG-AS [DG2293-ARIN] 14997-14998 NORTHPOINT-COMM [JA502-ARIN] 14999 SKYNETWORKSAS01 [KK363-ARIN] 15000 TERABEAM [ZT90-ARIN] 15001 ALLEGRIX [JW1756-ARIN] 15002 DRUGSTORE [PP131-ARIN] 15003 TEGRIS-CORP-ASN2 [KM1681-ARIN] 15004 ROWECOMNA1 [RC573-ARIN] 15005 NATIONAL-CITY-CORP [RK71-ARIN] 15006 IBMUSF-STL [DSB2-ARIN] 15007-15008 NPC-REGIONS-4-MW-5-SE [JA502-ARIN] 15009 UNISYS-OUTSOURCING [BS674-ARIN] 15010 IT-DIMENSIONS [GK164-ARIN] 15011 DESKMEDIA-1 [CH221-ARIN] 15012 IINC [MB853-ARIN] 15013 LINMOR-TECH-INC [DS790-ARIN] 15014 EDPWW-EXECOMM [SB681-ARIN] 15015 GLOBALINK [SS847-ARIN] 15016 NORANDEX-REYNOLDS [MW518-ARIN] 15017 CONTACT-EAST [RA336-ARIN] 15018 DATAPEX-ASN [JP1733-ARIN] 15019 TVTAXI [MC980-ARIN] 15020 WSOL [JG2532-ARIN] 15021 NOOSH [JL747-ARIN] 15022 ADEPT-ZA [GL216-ARIN] 15023 QUIK-US [ZQ5-ARIN] 15024 PACKET-WORKS [JF2598-ARIN] 15025 CTF [SE123-ARIN] 15026 ACXIOM [GV30-ARIN] 15027 ACTEL-COMM-MOBL [CW198-ARIN] 15028 QVTECH [STS3-ARIN] 15029 GEORGE-COM [PM409-ARIN] 15030 CORREIONET [AC1985-ARIN] 15031 VELOCET [DG532-ARIN] 15032 AAAIS [GB417-ARIN] 15033 GENERATION-21 [CF238-ARIN] 15034 TIBA-SA [DF373-ARIN] 15035 SILICON-VALLEY-N [SN176-ARIN] 15036 AXISTEL [NA313-ARIN] 15037 KEMET-ELECTRONICS [BB452-ARIN] 15038 CAMBINC-1 [NO51-ARIN] 15039 MSCDIRECT-1 [DS1019-ARIN] 15040 CYBERSURFERS [JD172-ARIN] 15041 BILLPOINT-AS [AA245-ARIN] 15042 WHAC [LW162-ARIN] 15043 GWIS [DR503-ARIN] 15044 ECHO-GROUP-AS [VD31-ARIN] 15045 KITTELSON [TS615-ARIN] 15046 DVIC [DM934-ARIN] 15047 NONSTOP [JK701-ARIN] 15048 METLIFE-ASN [VM77-ARIN] 15049 NETSECURITYTECH [ZN101-ARIN] 15050 VPNET [RW359-ARIN] 15051 DVIN [CK498-ARIN] 15052 NETPLUS-ASN [SC310-ARIN] 15053 NETBYTEL [FH79-ARIN] 15054 TELNEXT-UK [CG325-ARIN] 15055 TELNEXT-NA [CG325-ARIN] 15056 XO-ASN9 [DIA-ORG-ARIN] 15057 XO-ASN6 [DIA-ORG-ARIN] 15058 XO-ASN8 [DIA-ORG-ARIN] 15059 BLOODSTOCK-RESEARCH [BA223-ARIN] 15060 XO-ASN7 [DIA-ORG-ARIN] 15061 ICBC-INET [HS21-ARIN] 15062 LOSCH [NO53-ARIN] 15063 PWEH-ASN [AKT-ARIN] 15064 INTERNET-ARGENTINA-1 [MD20-ARIN] 15065 SLIC-COM-INTERNET [SO68-ARIN] 15066 SKYNET-COLOMBIA-1999 [SAG1-ARIN] 15067 BURR-BROWN [JB894-ARIN] 15068 CLICKSHIPDIRECT [PZ47-ARIN] 15069 SBA [NO54-ARIN] 15070 HNV-AS [SA133-ARIN] 15071 BAX-BGP [MC1213-ARIN] 15072 DYNAMICS [AJ113-ARIN] 15073 APPNETNYC [JB74-ARIN] 15074 VIEWSONIC [SK393-ARIN] 15075 WIRELESSCOMMPAN [NC105-ARIN] 15076 LERWO34OS [LD448-ARIN] 15077 MAG-TEK [DJ229-ARIN] 15078 ASN-TELELATINA-AR [RLB34-ARIN] 15079 CARCLUB-COM [EG179-ARIN] 15080 EDESTINY [DG540-ARIN] 15081 ASN-CROS-1 [MC1605-ARIN] 15082 PRIMEINTER [RV31-ARIN] 15083 INFOLINK-MIA-US [ZL15-ARIN] 15084 CONVERGYS [KW194-ARIN] 15085 REALITY-ONLINE-NOR [MK524-ARIN] 15086 QVC [TM611-ARIN] 15087 MEAGTELECOM [WL112-ARIN] 15088 FNG-NET [JK639-ARIN] 15089 MASSMUTUAL [HC127-ARIN] 15090 STARKINVESTMENTS [TV80-ARIN] 15091 XPEDE [RA339-ARIN] 15092 NETQUICK [JR725-ARIN] 15093 SYNIMAX [SS869-ARIN] 15094 CPWM [JC1120-ARIN] 15095 COAIR2000 [AG290-ARIN] 15096 SONN [SN253-ARIN] 15097 WALLSTREETACCESS [JM1385-ARIN] 15098 VML-COM [SS870-ARIN] 15099 ELCOM [TW248-ARIN] 15100 BEVCOMM-AS1 [JA507-ARIN] 15101 RRM-COM [ZZ31-ARIN] 15102 ASN-WIBAND-1 [ZW59-ARIN] 15103 NEWAGECITIES [WO23-ARIN] 15104 MBNA-NET-AS1 [ZM90-ARIN] 15105 NETWORKTELEPHONE [SM750-ARIN] 15106 SIU-BACKBONE [TH60-ARIN] 15107 GFB-BANCOMER [MAE1-ARIN] 15108 932411002351 [SR390-ARIN] 15109 ALTER-EGO-NET [CL335-ARIN] 15110 BLUEMOUNTAINARTS [JK649-ARIN] 15111 HERMANMILLER [CY88-ARIN] 15112 GATX-CORP [PS321-ARIN] 15113 DATASOFT-DEVELOPMENT [WW274-ARIN] 15114 HOSTDEPOT-ASN [ME103-ARIN] 15115 MEDIABASE [GG355-ARIN] 15116 WEBKORNER [RK391-ARIN] 15117 ANHEUSER-BUSCH [RO143-ARIN] 15118-15120 SIU-BB-2 [TH60-ARIN] 15121 CALTEL-COM [SA335-ARIN] 15122 KVN [TT62-ARIN] 15123 LATINNODE [JG497-ARIN] 15124 CHICAGONET-NET [RN227-ARIN] 15125 COMSAT-PERU [FT97-ARIN] 15126 LATINFUSION [OV13-ARIN] 15127 REALITY-ONLINE-2NOR [MK524-ARIN] 15128 PETOPIA [KK374-ARIN] 15129 TRICOM-IL [RH642-ARIN] 15130 USDOJ-GOV [DM396-ARIN] 15131 MEGNET-SPOKANE-NETWRK [LR179-ARIN] 15132 CITYNATIONALBANK [KG236-ARIN] 15133 NEXUS-ISP-NJFL-LASZLO [LV71-ARIN] 15134 IMPRESSE-COM [GL224-ARIN] 15135 IBUYLINE [RL3010-ARIN] 15136 AS-GNC2000 [HN17-ARIN] 15137 VECTRIX-DALLAS [MC719-ARIN] 15138 GLOBALTRON [BJ212-ARIN] 15139 PANASONIC [SM752-ARIN] 15140 AZURIX [KJ139-ARIN] 15141 ASN-BAUSCH-LOMB [DM951-ARIN] 15142 ADSNET-COM [WR163-ARIN] 15143 HYPERBANNER [OT22-ARIN] 15144 TEKINTERACTIVE [TN173-ARIN] 15145 GLOBALSCAPE [JR727-ARIN] 15146 CABLEBAHAMAS [AF67-ARIN] 15147 E-VEND [SC520-ARIN] 15148 BLACKBAUD-ASN [CH359-ARIN] 15149 EZZI-101-BGP [AD125-ARIN] 15150 BELLTECH-AS [GP227-ARIN] 15151 CIGB [JL720-ARIN] 15152 SPEEDFACTORY [DF380-ARIN] 15153 INTERSTARCOMM [AWJ1-ARIN] 15154 SBBSNET [JH1025-ARIN] 15155 INTELLIMARK [JM1396-ARIN] 15156 CARGOLARGO-1 [BR242-ARIN] 15157 NORWORLD [GG357-ARIN] 15158 TOTAL-INFO-SERVICES [PO80-ARIN] 15159 PEER-POINT [WL95-ARIN] 15160 BMO-SCARB [AU155-ARIN] 15161 STRADLEY [KS488-ARIN] 15162 CRICKETCOMM [DG553-ARIN] 15163 MTD [MN217-ARIN] 15164 REPLYNET [NO186-ARIN] 15165 HELLONETWORK [FR18-ARIN] 15166 TCNJ [SS2183-ARIN] 15167 SECTORBASE-COM [JC1131-ARIN] 15168 LOANTRADERINC [TT283-ARIN] 15169 GOOGLE [ZG39-ARIN] 15170 MATCHNET [OS42-ARIN] 15171 BLUEGRAVITY [TK266-ARIN] 15172 NETDOTCOM [MK534-ARIN] 15173 WAHOOCOMMUNICATIONS [BS564-ARIN] 15174 NETSALES [SS826-ARIN] 15175 ACC-1 [JH287-ARIN] 15176 AS-INOC [NO84-ARIN] 15177 ENVISIONET-US1 [TK268-ARIN] 15179 ALLOUTDOORS [TG223-ARIN] 15180 DIVEO-BRASIL [MP708-ARIN] 15181 ECHOWEB-LLC [SN66-ARIN] 15182 ALCATELIND [DH808-ARIN] 15183 POWERWAVETECH [ED128-ARIN] 15184 NRTC-ISP [LG8-ARIN] 15185 HIBBERT-EAST [DN207-ARIN] 15186 SUPERUSER [DG555-ARIN] 15187 OHIOHILLS-COM [MS9-ARIN] 15188 DIALI-INTERNETWORK-01 [BL374-ARIN] 15189 LSFI-INTERNET-AS [JH1035-ARIN] 15190 GATXCAP [SN184-ARIN] 15191 WAN-TECHNOLOGIES [MG568-ARIN] 15192 TELENISUS-0001 [GS463-ARIN] 15193 APPLIX-WAN-ROUTER [RS985-ARIN] 15194 CONSORTIO [MS779-ARIN] 15195 BANK-2UNITED [RO139-ARIN] 15196 TJMC [GG175-ARIN] 15197 RAETEK-NET [AN143-ARIN] 15198 EAZNET [EF978-ARIN] 15199 IMSURENETWORK [RJ228-ARIN] 15200 FOODTRADER [JH967-ARIN] 15201 UOL-BR [DA416-ARIN] 15202 APDI-151-200-110-0 [DM957-ARIN] 15203 INTERNET-COLORADO [JS1531-ARIN] 15204 MIMECOM [MH723-ARIN] 15205 OVEN [AR305-ARIN] 15206 MDSG-PACWEST [ZP86-ARIN] 15207 TBC [AA251-ARIN] 15208 S-D-I-I [QS1-ARIN] 15209 LEAPNET [PK234-ARIN] 15210 NNEX-ASN [TB78-ARIN] 15211 COMMSCAN [HL92-ARIN] 15212 BSIS [BH557-ARIN] 15213 THIGNET [JM1384-ARIN] 15214 MERCURY-INTERACTIVE [JB2362-ARIN] 15215 FARMERS-NETWORK [FIA1-ARIN] 15216 HOSTWAY [AN94-ARIN] 15217 LOUDCLOUD00 [VM82-ARIN] 15218 COX-OKC [BF149-ARIN] 15219 TELTRUST-TELESERVICES [LM339-ARIN] 15220 BLINK [CZ38-ARIN] 15221 VANION [ON19-ARIN] 15222 ITCA [PC137-ARIN] 15223 TXWES [SS844-ARIN] 15224 MYCOMPUTER [AA19-ARIN] 15225 PERSECO [ZP19-ARIN] 15226 SV-BLK-1 [JB1276-ARIN] 15227 WVFIBERNET [JB1277-ARIN] 15228 NEVADAHOSTING [MC751-ARIN] 15229 JPC [DLS8-ARIN] 15230 HOMESTEAD [ZH72-ARIN] 15231 VIEWNETHQ [RK1241-ARIN] 15232 EBASEONE [TL323-ARIN] 15233 WEBSITEPROS [JC427-ARIN] 15234 BERTMEDIASYS [CE16-ARIN] 15235 TIME-CUSTOMER-SERVICE [PB387-ARIN] 15236 UNIV-DE-COLIMA-MX [AL323-ARIN] 15237 ISTARTVENTURES [JL788-ARIN] 15238 GATESFOUNDATION [JG776-ARIN] 15239 KOZMO [AC390-ARIN] 15240 PARTICIPATE-COM [GK179-ARIN] 15241 UNETEPANAMA [NM142-ARIN] 15242 ICAST-IBEAM-NET [JC1156-ARIN] 15243 WIDENER [TCE2-ARIN] 15244 JAJONES [MN220-ARIN] 15245 HHI [DS1067-ARIN] 15246 TELESATSA [PR258-ARIN] 15247 RADIANT-VANCOUVER [JM1432-ARIN] 15248 K2NET [LM342-ARIN] 15249 P-S-B [CJ86-ARIN] 15250 CONCEPT-SHOPPING [JK732-ARIN] 15251 GRAND-CENTRAL-STATION [MC736-ARIN] 15252 ESCAPE-AR [IG42-ARIN] 15253 CIERRASOL [SU24-ARIN] 15254 CCP-ASN1 [JC1166-ARIN] 15255 BISK [CW345-ARIN] 15256 BANESTADO [EKM1-ARIN] 15257 CERIOUS [PC405-ARIN] 15258 PALM-NET1 [OP20-ARIN] 15259 ATT-ITSNCS-1 [JW203-ARIN] 15260 BVIG [JM1073-ARIN] 15261 CENTRA [MF441-ARIN] 15262 HELLER-FINANCIAL [RW510-ARIN] 15263 GALLUP1 [PW210-ARIN] 15264 DAEDALUS-TECHNOLOGY [CE116-ARIN] 15265 ISPOT-SC [BM700-ARIN] 15266 CSGI [SB731-ARIN] 15267 702COM [MH739-ARIN] 15268 MDARCHIVES [WY20-ARIN] 15269 PAI-AS [BD451-ARIN] 15270 AS-PAETEC-NET [SH9-ARIN] 15271 FHS-INC-ENT-NET [ZF8-ARIN] 15272 ONLYLINK [KT187-ARIN] 15273 WEBSCOPE [CS198-ARIN] 15274 HOUSE-INTERNET [NG77-ARIN] 15275 GREENFIELDNET-WLT-CT [AG622-ARIN] 15276 MAX-LV [VB71-ARIN] 15277 I-NET [DC761-ARIN] 15278 SAVVY-NET [TB547-ARIN] 15279 CENDANT-08054 [WJ50-ARIN] 15280 EPICCENTRAL-DALLAS [RB858-ARIN] 15281 OFFICE-COM [GL228-ARIN] 15282 SAKON-NET [RW514-ARIN] 15283 VIAGENIE-IPV6 [MB841-ARIN] 15284 THGNET [HT79-ARIN] 15285 IIS-ADMGR1 [ZH21-ARIN] 15286 IIS-AUTOBENE1 [ZH21-ARIN] 15287 O-H-C [TH435-ARIN] 15288 ALCATEL-NA [JCW12-ARIN] 15289 VNI [SS383-ARIN] 15290 ATTCA-IES-AS [RA262-ARIN] 15291 POLAROID [GD241-ARIN] 15292 FORINDIA-NET-SERVICES [RP488-ARIN] 15293 ASN-ISS-ATL [IA39-ARIN] 15294 JATO [SY75-ARIN] 15295 AS-BROADBASE [AL309-ARIN] 15296 NETERA [GF167-ARIN] 15297 EPLUS-ASN [TO120-ARIN] 15298 INDIAINFO-NJ-01 [BC474-ARIN] 15299 COLUMBIA-MANAGEMENT [MR589-ARIN] 15300 4IMPRINT [RP515-ARIN] 15301 STREAMSEARCH [ART1-ARIN] 15302 WRQ-NET [WP67-ARIN] 15303 NIKE-SECURITIES [PN6-ARIN] 15304 EXTERNET-WORLD [PL182-ARIN] 15305 LINKTEL-NETWORKS [RP65-ARIN] 15306 SELLS [RH47-ARIN] 15307 CHILDRENS-SEATTLE [NE39-ARIN] 15308 B-A-C-S [DD594-ARIN] 15309 SUBMITORDER-COM [JF530-ARIN] 15310 PHARMASMARKET-COM [MG598-ARIN] 15311 TIE [OM40-ARIN] 15312 CYBERNETENTERTAINMENT [PA39-ARIN] 15313 PACKETEER [AB474-ARIN] 15314 JENZABAR-ASN1 [JG793-ARIN] 15315 IVANET-CAMBRIDGE-1 [SA261-ARIN] 15316 IVANET-VANCOUVER [SA261-ARIN] 15317 ENCRYPTIX [MP552-ARIN] 15318 WINE-AS [DS1719-ARIN] 15319 BSWD1 [FS72-ARIN] 15320 PRIMELINK [SR415-ARIN] 15321 CPSHIPS-AS [DC1512-ARIN] 15322 FIRSTCOMINC [SW405-ARIN] 15323 MDLI [EH203-ARIN] 15324 ECIRCLES [IS39-ARIN] 15325 TPK-NET [LK105-ARIN] 15326 NETTHEORY [RS1025-ARIN] 15327 PRINTCAFE [RH656-ARIN] 15328 QROUTE [AS608-ARIN] 15329 CUSTOMEDGE [BJ176-ARIN] 15330 CORPORATE-INTERLAND [PD139-ARIN] 15331 JTEL [JP752-ARIN] 15332 IPB [EJ79-ARIN] 15333 TRWASP [GK183-ARIN] 15334 RESPONSYS [JF534-ARIN] 15335 KAPLAN-TELEPHONE [RG35-ARIN] 15336 SAMEDAY-COM [LN93-ARIN] 15337 WRHARPER [SN190-ARIN] 15338 BOSTON [TS653-ARIN] 15339 3HT [JS1573-ARIN] 15340 CVI-BORDER-1 [DB994-ARIN] 15341 ALLEGHENYINTEL [LC266-ARIN] 15342 DDPMI-1 [BF285-ARIN] 15343 AM-EX [TL330-ARIN] 15344 BRANDERS [DP494-ARIN] 15345 NET-BALL [FRJ1-ARIN] 15347 TELESPECTRUM [HS32-ARIN] 15348 TUCOWS [ZT25-ARIN] 15349 SPEEDUS [NE40-ARIN] 15350 WHN [ZA38-ARIN] 15351 KADCAPNET [WT27-ARIN] 15353 GNAC-PA [HM20-ORG-ARIN] 15354 LIBERTY-MUTUAL [WI3-ARIN] 15355 BNP-COOPERNEFF [PB353-ARIN] 15356 THEBANCORP [CP330-ARIN] 15357 AISMEDIA [CJ163-ARIN] 15358 JONESINTERACTIVE [JZ127-ARIN] 15359 AS-ARTISANNETWORK-ATL [KC334-ARIN] 16384 NET-PORT [BG389-ARIN] 16385 BNYESI-AND-CO [RS1031-ARIN] 16386-16389 OPTICNET-4 [CB202-ARIN] 16390 FT-ASN [JL1383-ARIN] 16391 CELITO-1 [SN192-ARIN] 16392 PIONEER-STANDARD [BP339-ARIN] 16393 HOLT [ST313-ARIN] 16394 KPENY-AS [DW686-ARIN] 16395 GLOBALMUSIC [AS615-ARIN] 16396 AETHER-SYSTEMS [GS479-ARIN] 16397 COMDOMINIO [FR94-ARIN] 16398 EPSON-AMERICA [CR2080-ARIN] 16399 NETWORKGCI [PP248-ARIN] 16400 INTERFOLD [JM3271-ARIN] 16401 NETASN-SAINTVS [CRR1-ARIN] 16402 UNIVERSAL-TELECOM [RR572-ARIN] 16403 BOISE-CASCADE [MB929-ARIN] 16404 ALBRIGHT-COLLEGE [GG378-ARIN] 16405 MNC [GS152-ARIN] 16406 AS-INTERMEDIA [MK564-ARIN] 16407 NOTARA-AS-1 [RS963-ARIN] 16409 AMERICANSTERLING [KT164-ARIN] 16410 REYREY [DKM3-ARIN] 16411 EMCOR-GROUP [PB400-ARIN] 16412 NETWORK-SERVICES [CB2696-ARIN] 16413 TELEBERMUDA [YC19-ARIN] 16414 RIPNET [JO206-ARIN] 16415 PRCNET-DOM [JK404-ARIN] 16416 MYCOMAX [TK288-ARIN] 16417 E247 [DN213-ARIN] 16418 NOANET [MA366-ARIN] 16419 FIDELITYLEASING [MB870-ARIN] 16420 IDEAMAX-CORPORATION [CC543-ARIN] 16421 HARDNOC [BB761-ARIN] 16422 NEWSKIES-NETWORKS [ZN39-ARIN] 16423 NETTOGO-BLK [RM453-ARIN] 16424 MVN-NET [KS509-ARIN] 16425 QUESTCOMP-AS [MS98-ARIN] 16426 CYBEAR [DH854-ARIN] 16427 PALM-HQ [MA664-ARIN] 16428 CNI-AREA-1 [CW1085-ARIN] 16429 CATAPULSE [DL575-ARIN] 16430 USM [ZU66-ARIN] 16431 CLARK-CONSTRUCTION [PF737-ARIN] 16432 EZ-PRINTS [DP502-ARIN] 16433 ATROAD [JV235-ARIN] 16434 ACSSPORTS-01 [EM264-ARIN] 16435 FLUKE-ELECTRONICS [CK250-ARIN] 16436 NANC1 [RCE10-ARIN] 16437 ONESECURE [ON22-ARIN] 16438 MILINX [BS740-ARIN] 16439 AMTRAK-IB [TK290-ARIN] 16440-16460 ISPACE [IA43-ARIN] 16461 ASN-UTEP [HG93-ARIN] 16462 SAFEHARBOR [BC551-ARIN] 16463 DPSINET [AR319-ARIN] 16464 CT-CORPORATION-SYSTEM [ML616-ARIN] 16465 CENTEX-TECH [SR419-ARIN] 16466 LYNXUS [JE218-ARIN] 16467 ASN-NEXTWEB [IN45-ARIN] 16468 EMERON-00 [AS619-ARIN] 16469 BANKOFAMERICAGCIB [CB628-ARIN] 16470 WINGNET-AS1 [JG798-ARIN] 16471 ADEXUS-IDC-CL-1 [EK141-ARIN] 16472 WEBEXQWST [SB415-ARIN] 16473 TNII [DO195-ARIN] 16474 RESPONSYS-1 [SB756-ARIN] 16475 AVV [CL186-ARIN] 16476 MKG [SH584-ARIN] 16477 ACNIELSEN-AS [JM6030-ARIN] 16478 COLLEGECLUB [AL332-ARIN] 16479 MERITANORDBANKEN [MB941-ARIN] 16480 AMERICANHORIZON [AM518-ARIN] 16481 BABSON-GNET [LG183-ARIN] 16482 XODIAX [XN1-ARIN] 16483 KOLA [JO241-ARIN] 16484 ELINK-COMMUNICATIONS [ZL63-ARIN] 16485 NEW-CHANNEL-TECH [MR602-ARIN] 16486 AUTHORIZE-NET [CO110-ARIN] 16487 FREEPORT [MM1036-ARIN] 16488 RJTHOMPSON-SECURITIES [CN169-ARIN] 16489 WEBSTER [BH204-ARIN] 16490 KEYFIN [BR390-ARIN] 16491 ACCESSPORT [DA243-ARIN] 16492 DECHERT [CG358-ARIN] 16493 ABERCROMBIE-FITCH [SG363-ARIN] 16494 EQUALFOOTING [JN283-ARIN] 16495 MAXCESS [SN194-ARIN] 16496 PCONLINE [DH70-ARIN] 16497 TIMBERLINE-SOFTWARE [ZT117-ARIN] 16498 LASALLE [RR4-ARIN] 16499 ZEPHYRTELE [ZZ831-ARIN] 16500 APCI [WA66-ARIN] 16501 EVANTAGES [RB887-ARIN] 16502 PHXGOV [DP1317-ARIN] 16503 N-W-TELEPHONE [KM252-ARIN] 16504 AS-LABORREADY [BF292-ARIN] 16505 INTERCOMM-RENO-ASN [RB790-ARIN] 16506 AYAYAI [HJ67-ARIN] 16507 DELWEBBCORP [DW699-ARIN] 16508 AIRPOWER-NET [RO128-ARIN] 16509 AMAZON-02 [AC6-ORG-ARIN] 16510 IHSENERGY-FIELDDIRECT [CS4644-ARIN] 16511 NSICORE [JB3079-ARIN] 16512 VISITUS [HZ20-ARIN] 16513 COXNEWS [LBM9-ARIN] 16514 TRIPOS-INC [JW473-ARIN] 16515 ALTAVISTA [OA36-ARIN] 16516 FTLINFO [JS1648-ARIN] 16517 MULTICASTTECH [AA274-ARIN] 16518 FIBERCLOUD-BHAM [MM1162-ARIN] 16519 CUDENVER [RH677-ARIN] 16520 SBS-CAN [KR320-ARIN] 16521 SHELTON [BE157-ARIN] 16522 CHELLO [LHG5-ARIN] 16523 CONNECT-COMM [JM1520-ARIN] 16524 METTEL [JP804-ARIN] 16525 NATIONALSYSTEM [DK508-ARIN] 16526 BIRCH-TELECOM [CM67-ARIN] 16527 GVTCINTERNET [GS494-ARIN] 16528 IMPSAT-COLOMBIA [ZN27-ARIN] 16529 CYBERBURY [AP277-ARIN] 16530 POWERSHIFT [JA67-ARIN] 16531 PROTEL [AP301-ARIN] 16532 CIDCMTL [SC42-ARIN] 16533 LIVETRADE [MI90-ARIN] 16534 SEPHORA-COM [TT304-ARIN] 16535 CEBRA [DR549-ARIN] 16536 JPMORGAN [DP516-ARIN] 16537 MIDAS [GN93-ARIN] 16538 PDC [SA376-ARIN] 16539 ENVISION-DEVELOPMENT [ZA41-ARIN] 16540 TELCOPOINT [DR554-ARIN] 16541 PHOTOPOINT [GD418-ARIN] 16542 MGIC [AI4-ORG-ARIN] 16543 GATEWEST-AS [RO65-ARIN] 16544 CHANNING-BETE [RE192-ARIN] 16545 CFTECHNOLOGYSERVICES [JC1256-ARIN] 16546 VNU-USA [JC399-ARIN] 16547 CONSYS [RPL8-ARIN] 16548 MERCURY-COMPUTER-SYS [BL373-ARIN] 16549 AMI1 [MC802-ARIN] 16550 KONNECTIONS [KR327-ARIN] 16551 LIQUIDPRINT [HOME-NOC-ARIN] 16552 FLEET-SECURITIES [TB580-ARIN] 16553 VBNET [SN205-ARIN] 16554 ANP [DM956-ARIN] 16555 MEDSHOPPE-KAS1 [SS1697-ARIN] 16556 IKI [JN222-ARIN] 16557 RE-STAFFORD [EN72-ARIN] 16558 TOWERGROUP [SM844-ARIN] 16559 REALCONNECT-01 [DO86-ARIN] 16560 LIB-NET [AW576-ARIN] 16561 ARIBANETWORK [JW1509-ARIN] 16562 RESPOND-COM [JM1583-ARIN] 16563 BBDO-SOUTH [DNS25-ORG-ARIN] 16564 ADAMS-WELLS-INTERNET [KC222-ARIN] 16565 ZIGGY-KY-01 [RS1093-ARIN] 16566 DESERTSKY [SP432-ARIN] 16567 OSINET [JW892-ARIN] 16568 ANYTIMEACCESS [AA212-ARIN] 16569 NELSONCOMM [EBL-ARIN] 16570 EXECUSTAY [RM233-ARIN] 16571 COSAWEB [LH249-ARIN] 16572 CELLULARONE-INTERNET [BO9-ARIN] 16573 THEBEAST [GS509-ARIN] 16574 QVTRADING [GD259-ARIN] 16575 EDGIX [BK325-ARIN] 16576 YORK-COUNTY [JBS1-ARIN] 16577 TELSEON-AS [NA136-ARIN] 16578 EAA-AS [JE316-ARIN] 16579 RADIANZ [ZR81-ARIN] 16580 WOODCO [PE102-ARIN] 16581 TITAN [WM57-ARIN] 16582 NEXTLEVELINTERNET [JM1589-ARIN] 16583 HEADHUNTER [CM610-ARIN] 16584 MARKETINGCONCEPTS [JB903-ARIN] 16585 STREAMAUDIO [DH898-ARIN] 16586 NETSERV-ASN-1 [GC357-ARIN] 16587 CYRUNNER [FL174-ARIN] 16588 SPIDER [AC433-ARIN] 16589 E-QUILL-SJ-ABOVE-001 [GS510-ARIN] 16590 CCSI-ASN [CT217-ARIN] 16591 POP-COM [AH392-ARIN] 16592 CYBERNET-SV [JV296-ARIN] 16593 ADFORCE-CU [ZZ1151-ARIN] 16594 COMPUGRAF [AS647-ARIN] 16595 TORO [HO12-ORG-ARIN] 16596 UABC-AS [VP43-ARIN] 16597 SPC [TW288-ARIN] 16598 DIGIDYNE [CL158-ARIN] 16599 BENTLEY-SYSTEMS [SW2098-ARIN] 16600 UTHEALTHCENTER-TYLER [DN230-ARIN] 16601 GNEWSASN1 [TW233-ARIN] 16602 EBANK-COM [SA386-ARIN] 16603 BELLAMIA [JK552-ARIN] 16604 HUNTEL-NET [MS1215-ARIN] 16605 ABWC [DB1077-ARIN] 16606 IB2B [RF377-ARIN] 16607 UNE-AS [JA4522-ARIN] 16608 KENTEC [JN237-ARIN] 16609 AIS-1 [TH184-ARIN] 16610 EYAK-BOS01 [MM1210-ARIN] 16611 KISCOMPUTERS-NET [JW735-ARIN] 16612 DEXMANET [CE128-ARIN] 16613 SPECIALIZEDSOFTWARE [RC761-ARIN] 16614 WESTFIELD-AMERICA [SR447-ARIN] 16615 HOMEGROCER-COM [DP534-ARIN] 16616 MEDPOOL [RD455-ARIN] 16617 COMMUNITYISP [NF51-ARIN] 16618 CAVION [SM847-ARIN] 16619 BITMO [BW461-ARIN] 16620 BREAKWATER [CP3-ARIN] 16621 OWDS-GP [SS964-ARIN] 16622 COMPUBASIX [DR482-ARIN] 16623 CLICKTHINGS [DG500-ARIN] 16624 HYDRO-QUEBEC [PB431-ARIN] 16625 SPEEDERA [ZM34-ARIN] 16626 DV2-NET [JH2120-ARIN] 16627 TRITONPCS [IS93-ARIN] 16628 WATTERS [AP313-ARIN] 16629 TELEFONICA-EMPRESAS [AS660-ARIN] 16630 ACCGRP [CL120-ARIN] 16631 COGENT-ASN [ZC86-ARIN] 16632 ARPRO-01 [AH396-ARIN] 16633 I-3 [ES697-ARIN] 16634 GOAMERICA [ORR1-ARIN] 16635 OTHERWORLDNET [RJ189-ARIN] 16636 KANA-COMM [JT663-ARIN] 16637 JOHNNIC-E-VENTURES [ZC164-ARIN] 16638 CORNINGINC01 [PS477-ARIN] 16639 COMMERX [DT636-ARIN] 16640 SILICON-VALLEY-BANK [TB591-ARIN] 16641 E-OFFERING-SF [RV202-ARIN] 16642 OGILVYGROUP [YA20-ARIN] 16643 VCU-ASN1 [VW50-ARIN] 16644 SUNGARDBI-TECH [JB1426-ARIN] 16645 EPIQSYSTEMS [DA458-ARIN] 16646 DIGISTAR [BK327-ARIN] 16647 IMAGINE-AS [WS215-ARIN] 16648 PCSIA-NET [KG260-ARIN] 16649 ARISTASOFT [KT191-ARIN] 16650 WEBANGO [DM135-ARIN] 16651 SOCKET-2 [GP75-ARIN] 16652 CELPAGE-NET [EB295-ARIN] 16653 INETMAX [MP590-ARIN] 16654 QUACK-COM [CS656-ARIN] 16655 CENTERPOINT [RK432-ARIN] 16656 IVANET-HAWAII [SA261-ARIN] 16657 CYRSH-TECH [AA338-ARIN] 16658 TALK2-ASN [JG838-ARIN] 16659 CROWN-AS-1 [BF298-ARIN] 16660 APPTUS-DC [RR614-ARIN] 16661 ELARKIN [TA233-ARIN] 16662 AZUS01 [MM3906-ARIN] 16663 UOLCOLOMBIA [AHC1-ARIN] 16664 CC-COMMUNICATIONS [GP51-ARIN] 16665 PLANET-ID [RM897-ARIN] 16666 LSAC-ASN [JF566-ARIN] 16667 MIRAGERESORTS [CS455-ARIN] 16668 GBPSW-AS [GP152-ARIN] 16669 APPLIED-MATERIALS [BE-ORG-ARIN] 16670 AERO-VISION [GS327-ARIN] 16671 ESCROW [AG361-ARIN] 16672 INTERCERVE [CE126-ARIN] 16673 BAYER-US-ASN [KB444-ARIN] 16674 COMPASS-GROUP-NAD [JS1694-ARIN] 16675 WINMILL [ZZ1126-ARIN] 16676 BARCHARTCOM [EP152-ARIN] 16677 AZO [MG643-ARIN] 16678 NANO-AS [GB489-ARIN] 16679 JBOXFORD-ASN1 [LG113-ARIN] 16680 EULER2000 [DK1171-ARIN] 16681 ETS [JF569-ARIN] 16682 EPIGRAPHX-AS [ML652-ARIN] 16683 CFI [TM2414-ARIN] 16684 PORTONE [NOC34-ARIN] 16685 AS-OPTIGLOBE [HP38-ARIN] 16686 IDIAL-DALLAS [SU31-ARIN] 16687 KTC-INET [CS37-ARIN] 16688 PEOPLENET-COMM-AS [CL380-ARIN] 16689 AZTECANETMX [NG17-ARIN] 16690 ANADARKO [DB245-ARIN] 16691 KFORCE [JA316-ARIN] 16692 HHMI [PC434-ARIN] 16693 HOCH-247 [ED140-ARIN] 16694 ICSI [DJ110-ARIN] 16695 ECX [JK590-ARIN] 16696 NONSTOPNET-AS [WW136-ARIN] 16697 RIEDEL-ENT [DR557-ARIN] 16698 BRIGHTNET [KC222-ARIN] 16699 ENTER-ASN [LC118-ARIN] 16700 ROSENET-1 [JD675-ARIN] 16701 AFIP-ASN [TI39-ARIN] 16702 SPECTRUM-HOUSTON [GP236-ARIN] 16703 ASN-CHUBBCORP [IAT1-ARIN] 16704 DATAEX-CAM1 [RH699-ARIN] 16705 STORAGEAPPS [DP508-ARIN] 16706 COMPUNLTD [GC347-ARIN] 16707 UNIFI-INC [KW2870-ARIN] 16708 THOMSONFINANCIAL [MA397-ARIN] 16709 IPOP [BC589-ARIN] 16710 PBS [DJ255-ARIN] 16711 ANC [PD300-ARIN] 16712 I2SOFT [JB11576-ARIN] 16713 NOANET-WA [WK81-ARIN] 16714 SPACEWORKS-INC [TD340-ARIN] 16715 ARISTOTLE-ASN [CS638-ARIN] 16716 ZIONSBANK [MJ265-ARIN] 16717 CRAWKANINTERNET [BS1438-ARIN] 16718 BROWNWOODLAW [JC1136-ARIN] 16719 NASD [PL300-ARIN] 16720-16722 OPTICNET-5 [CB202-ARIN] 16723 QUIOSNET [JB1429-ARIN] 16724 APERIAN [JC1291-ARIN] 16725 ONLINERETAILPARTNERS [KB434-ARIN] 16726 ROCHE-NUTLEY [LL252-ARIN] 16727 PRIVATE-CABLE [MW367-ARIN] 16728 MATTEL [IM112-ARIN] 16729 ROYALBANKFINGROUP [TV92-ARIN] 16730 ROYALBANKGROUP-2 [TV92-ARIN] 16731 ROYALBANKGROUP-3 [TV92-ARIN] 16732 VELOCOM-AR [HRG1-ARIN] 16733 AXENTTECH [DB2396-ARIN] 16734 SMARTBASKET [MC822-ARIN] 16735 CTBC-TELECOM [HB166-ARIN] 16736 JAVALI-01 [AF1807-ARIN] 16737 GO2CALL-1 [TU26-ARIN] 16738 LMI [KM240-ARIN] 16739 HOMEPAGECORP [AS667-ARIN] 16740 ASN-DYNAMIC [KK409-ARIN] 16741 ISATPLATFORM [DD664-ARIN] 16742 UCV-CHILE [FH97-ARIN] 16743 EYT-ASP [IH1-ARIN] 16744 WORLDWIDEONLINE [JA585-ARIN] 16745 STERLINGTESTING [JR516-ARIN] 16746 RELIANTENERGY [WG81-ARIN] 16747 REAL-TIME [HM170-ARIN] 16748 ONE-SOURCE [JW914-ARIN] 16749 AUTOLIVASP1 [TC477-ARIN] 16750 ECPI [TP370-ARIN] 16751 OPEN-TEXT-1 [DA463-ARIN] 16752 BBOX-NET [PD314-ARIN] 16753 BELO [EI16-ARIN] 16754 HOTCITYNETWORKING [RN130-ARIN] 16755 TOPICA [SN211-ARIN] 16756 ABC-VIRTUAL [JH1098-ARIN] 16757 CPI-CORP [JH1177-ARIN] 16758 IKON [MG663-ARIN] 16759 SWA-MKT-INET [GJ111-ARIN] 16760 CBOE [ML673-ARIN] 16761 FEDMOG-ASN-01 [TGC1-ARIN] 16762 GRUPO-BIMBO [AO58-ARIN] 16763 TIDEWORKS [GS525-ARIN] 16764 TASC [BW468-ARIN] 16765 ENRONCORP [PC753-ARIN] 16766 SPRINGBOARD [SH642-ARIN] 16767 TOL [KB416-ARIN] 16768 NETWHISTLE [JH837-ARIN] 16769 SOTHEBYS-INC [KW323-ARIN] 16770 BROADSLATE-AS [KY101-ARIN] 16771 KPCB [RP558-ARIN] 16772 TDU01 [RK446-ARIN] 16773 IPH99SCH [KR337-ARIN] 16774 MERCURYINS [GK211-ARIN] 16775 EXOTROPE [JR825-ARIN] 16776 HOMESTORE-IBS [TN181-ARIN] 16777 NET-PROVPHP [TN182-ARIN] 16778 ACT01-ASN [ST336-ARIN] 16779 TELSTRA-USA [DW187-ARIN] 16780 BSANTANDERCL [AM567-ARIN] 16781 POCKETSCRIPT-1 [RE184-ARIN] 16782 CORELAB-AS [TC480-ARIN] 16783 DAVNETINC [MM1236-ARIN] 16784 INETZ [KH391-ARIN] 16785 USANA-INC [RR641-ARIN] 16786 MESSAGEBAY-NET [PF207-ARIN] 16787 HSACORPORATION [JC1048-ARIN] 16788 PURCHASEPRO [ES394-ARIN] 16789 RENTGROW [WC67-ARIN] 16790 DSNYCGW01 [VK59-ARIN] 16791 DIGITAL-AGENT [PT108-ARIN] 16792 JETTIS [MM1241-ARIN] 16793 DATA-TRONICS [KT195-ARIN] 16794 INT-SOL-PR [HD429-ARIN] 16795 COMP-COMF [JT584-ARIN] 16796 REALTYIQ-COM [DR575-ARIN] 16797 2C2-ASN-1 [WG57-ARIN] 16798 WORLDXCHANGE [CS35-ARIN] 16799 PAYMASTER [JB1451-ARIN] 16800 NBS90 [ES4-ARIN] 16801 ENRONCORP2 [PC753-ARIN] 16802 IMO [MW579-ARIN] 16803 COMPVDC [BC600-ARIN] 16804 SEI-ISS [DJ263-ARIN] 16805 DIGITAL [DR577-ARIN] 16806 FUTURESIGHTS [PB442-ARIN] 16807 IBM-EI [JC1320-ARIN] 16808 FRESHWATER [JM1311-ARIN] 16809 DOLLARBANK [DD672-ARIN] 16810 NET2000 [JC1322-ARIN] 16811 SPACENET-GTH [SA222-ARIN] 16812 SPACENET-ENT [SA222-ARIN] 16813 AMNH [MB993-ARIN] 16814 IPLAN-NETWORKS [MC882-ARIN] 16815 EXPERTCITY [SF293-ARIN] 16816 AVENUEA [KL279-ARIN] 16818 CORESYS [MR649-ARIN] 16819 HAWAII-DENTAL [RA389-ARIN] 16820 FREEBORN [BL411-ARIN] 16821 DUQUESNELIGHT [AL351-ARIN] 16822 CREATIVE-EXODUS [JWL1-ARIN] 16823 NORTEXNET [GF188-ARIN] 16824 INTERNETSEER [MM1249-ARIN] 16825 LIVELINE [MP543-ARIN] 16826 JCCC [RT351-ARIN] 16827 MULTIPHONE-LA [HI25-ARIN] 16828 ASYMMERTICAL [EB161-ARIN] 16829 TESSCO-MD [HK62-ARIN] 16830 PORTERASYSTEMS [NC94-ARIN] 16831 FUJITSU [AC76-ARIN] 16832 CLICVU [JG868-ARIN] 16833 PREBONYAMANEUSA [HJ259-ARIN] 16834 WEBSTER-BANK [RT322-ARIN] 16835 MADISONRIVER [DR666-ARIN] 16836 UDATA [TU17-ARIN] 16837 MILLSCORP [MIA1-ARIN] 16838 VERISIGN-CORP [GP260-ARIN] 16839 ENKIDO-NET [JB1492-ARIN] 16840 I-ESCROW [AI53-ARIN] 16841 ATOMCORP [AM581-ARIN] 16842 CHRISTAL-GROUP [HU9-ARIN] 16843 NORTHEAST-COMNET [JB1493-ARIN] 16844 FIRMBUY [DT363-ARIN] 16845 PF [RR655-ARIN] 16846 FASTPOINT [IF25-ARIN] 16847 ELMERCURIO [LJ107-ARIN] 16848 TELECOM-EDNA [FC153-ARIN] 16849 SOUTHERNPLANET [AM582-ARIN] 16850 ITI [CJ180-ARIN] 16851 HOSTTECH-NET [MH840-ARIN] 16852 FOCAL-CHICAGO [ZZ3327-ARIN] 16853 GALAXY-PORT [CS693-ARIN] 16854 GENLABS [MG678-ARIN] 16855 CHORDIANT [ML688-ARIN] 16856 ONENETWORK [SG501-ARIN] 16857 CENTEX [CK300-ARIN] 16858 WEBVAN [KA187-ARIN] 16859 WYATT-SD [MM1268-ARIN] 16860 ACCELENET [GT152-ARIN] 16861 REVELEX [BM802-ARIN] 16862 MEDITECH [DA470-ARIN] 16863 NET-EXCHANGE-INC [OS45-ARIN] 16864 E-FATO [JS600-ARIN] 16865 PERSONTEL [SH3568-ARIN] 16866 HUT-WHL-DIT [HC145-ARIN] 16867 DCT-CA-ASN [PE416-ARIN] 16868 PRAXAIR-INC [RBM1-ARIN] 16869 MIRAPOINT-RDOM [JH2240-ARIN] 16870 ZOHO [JY137-ARIN] 16871 MCDONAGHBROTHERS [JM1655-ARIN] 16872 COMCASTOAKRIDGE [RC400-ARIN] 16873 ACR [VI8-ARIN] 16874 SONDA [JQ65-ARIN] 16875 AON-BGP [AM585-ARIN] 16876 IASNET [MP631-ARIN] 16877 VITAL [TB615-ARIN] 16878 ISERVE [TZ41-ARIN] 16879 SUSQ-CTALK [DT342-ARIN] 16880 ALPHARMAUSPD [SM851-ARIN] 16881 BADPUPPY [FA64-ARIN] 16882 INTERWISE [MA424-ARIN] 16883 CIBERLYNX-ORL [NC80-ARIN] 16884 MJI [MK640-ARIN] 16885 GLOBALTELECOM [APW1-ARIN] 16886 LVMH-SDG [GO89-ARIN] 16887 INFOSERVE [AC459-ARIN] 16888 ECYBERCONST [DT365-ARIN] 16889 STEVENS-TECH [CH290-ARIN] 16891 SMC-BR [LK169-ARIN] 16892 UCS-NETWORKS [PK260-ARIN] 16893 WILD-NET [LB406-ARIN] 16894 ECGLOBAL-COM [RC802-ARIN] 16895 IREADYWORLD-CLT2 [JA614-ARIN] 16896 XENERGYENT [TH485-ARIN] 16898 LOG-NET [EI19-ARIN] 16899 F-SECURE [DS1226-ARIN] 16900 SEDGWICK-CMS [PH353-ARIN] 16901 MUTUAL [GF193-ARIN] 16902 TXU2 [BB355-ARIN] 16903 WACSEC [KH408-ARIN] 16904 ARVIG [BP380-ARIN] 16905 ALL-GIGAPOP [FW84-ARIN] 16906 SALNET [PV93-ARIN] 16907 ISPKENYA [BL410-ARIN] 16908 KOTA-ASN-1 [BM740-ARIN] 16909 ROIDIRECTW01 [HM223-ARIN] 16910 FARM-CREDIT [JM508-ARIN] 16911 TCO [JP903-ARIN] 16912 4-LESS-NETWORK [EH239-ARIN] 16913 SFTI [CL387-ARIN] 16914 UNAMAX [KW337-ARIN] 16915 EESIS [MW590-ARIN] 16917 FTCI-COM [SL485-ARIN] 16918 TECNICO-DBNLINK [LT203-ARIN] 16919 CBNY [RY78-ARIN] 16920 A1COM-NET [BJ246-ARIN] 16921 PNV-FL-ASN-01 [JW971-ARIN] 16922 IVMG [JD847-ARIN] 16923 PRECISION [JN315-ARIN] 16924 IISIDC [WE31-ARIN] 16925 BROADDAYLIGHT [DM135-ARIN] 16926 INTERSTATE-BRANDS [BG395-ARIN] 16927 USCO [VV36-ARIN] 16928 UTCNET [RHM1-ARIN] 16929 MINDSYNC [JP779-ARIN] 16930 UPSHOT [JL972-ARIN] 16931 GLOBAL-PAYMENTS-1 [IFG1-ARIN] 16932 LEVEL4 [CA307-ARIN] 16933 BROADBAND-AVE [DL659-ARIN] 16934 LEACO-INTERNET [GL267-ARIN] 16935 KSC-NETWORKS [SH661-ARIN] 16936 LOGICSTREAM-PA [AKH2-ARIN] 16937 MASTERFILES [CH474-ARIN] 16938 COMPETITRACK [JS1744-ARIN] 16939 TRX-DALLAS [BP387-ARIN] 16940 VOXEO [LDK1-ARIN] 16941 ROUNDHEAVEN [BM782-ARIN] 16942 CITIZENS [DR611-ARIN] 16943 SOURCE [ET7-ARIN] 16944 XYSTOS-PROD [CM679-ARIN] 16945 NOVACON-LLC [JC2844-ARIN] 16946 SASSC [DC819-ARIN] 16947 QUIXI-INC [CS679-ARIN] 16948 STRATUSWAVE [TR322-ARIN] 16949 EDAP [RM176-ARIN] 16950 COLUMBIA [DW789-ARIN] 16951 IVANET-LIMA [SA261-ARIN] 16952 LIGHTSPEED [WB212-ARIN] 16953 LIGHTNET [ST358-ARIN] 16954 DODOTS [BB843-ARIN] 16955 XPRESSNET [RH749-ARIN] 16956 TREASURY [MK659-ARIN] 16957 IDACORP-NETWORK [PF218-ARIN] 16958 LUCRE [SH1448-ARIN] 16959 SBIS-AMRLTX [ZS44-ARIN] 16960 VISION-RED [NC276-ARIN] 16961 SBIS-ODMDTX [ZS44-ARIN] 16962 SBIS-LNGVTX [ZS44-ARIN] 16963 SBIS-WCFLTX [ZS44-ARIN] 16964 SBIS-HRLNTX [ZS44-ARIN] 16965 SBIS-SPFDMO [ZS44-ARIN] 16966 SBCIDC-LSAN03 [DB3293-ARIN] 16967 SBCIDC-DLLSTX [DB3293-ARIN] 16968 ISTRATEGY [JD859-ARIN] 16970 CHATPER2-IDC-SA [CH557-ARIN] 16971 VIACCESS [VN51-ARIN] 16972 AANDMTECH01 [LL6-ARIN] 16973 HOSTARICA [FH85-ARIN] 16974 SHOCKWAVE [LL221-ARIN] 16975 ALTOCITY [FB148-ARIN] 16976 FIVEK [DS1254-ARIN] 16977 SUNFIRE [AF159-ARIN] 16978 WEBPG [KS1346-ARIN] 16979 VCV [CD378-ARIN] 16980 UNITEDGUARANTY [RD492-ARIN] 16981 EMMIS-1 [RL539-ARIN] 16982 UNION-SQUARE [CA280-ARIN] 16983 ACSEAST [BT75-ARIN] 16984 CFHOSTINGATL [GH366-ARIN] 16985 LTYR-NET [SD493-ARIN] 16986 INSTALL [RS1183-ARIN] 16987 POPMAIL [AS704-ARIN] 16988 IPAPER [JBB4-ARIN] 16989 UTMEM [JEB3-ARIN] 16990 TRANSBANK [AV123-ARIN] 16991 ACHEX-INC [CB702-ARIN] 16992 DOL [JN-ARIN] 16993 XCEED-ATL [KW345-ARIN] 16994 EDGECONN [IE26-ARIN] 16995 ASPONE [ANO2-ARIN] 16996 VCITIES [DD706-ARIN] 16997 PROPHET21 [AS705-ARIN] 16998 ISG [JP1031-ARIN] 16999 WFSCORP [JB1497-ARIN] 17000 12OAKSWC [AW297-ARIN] 17001 ATMOSPHERE [TC505-ARIN] 17002 JESTER [BU19-ARIN] 17003 AHP [JO272-ARIN] 17004 NVSMEDIA [MS1145-ARIN] 17005 OUTBOUND [ZZ1310-ARIN] 17006 STRATEGIC [BG444-ARIN] 17007 ORBITAL-GRTN [CB650-ARIN] 17008 CARPENTER [BZ60-ARIN] 17009 CAYENTA [IP-FIX-ARIN] 17010 IMANDI-01 [PS476-ARIN] 17011 PPG-INDUSTRIES [LS59-ARIN] 17012 X-COM [XH1-ARIN] 17013 INFOAGE [TC578-ARIN] 17014 NAIILLC [NN75-ARIN] 17015 NMTINET [DH564-ARIN] 17016 ASCOLTA [ZW23-ARIN] 17017 CRISP [PH97-ARIN] 17018 HERAKLES [GB897-ARIN] 17019 JTAN [CN187-ARIN] 17020 COMP-SCIENCE [JJ390-ARIN] 17021 UNXCOM1 [RS1191-ARIN] 17022 PRENET [JR543-ARIN] 17023 MASSHYSTERIA [MA436-ARIN] 17024 VISTAIT [DW775-ARIN] 17025 MFNX-CUSTOMER [NOC41-ORG-ARIN] 17026 ARBELLA [JE184-ARIN] 17027 PEAK10JAX [ZP63-ARIN] 17028 PRIZ [AL364-ARIN] 17029 EMAILCHANNEL [KL297-ARIN] 17030 PRIMERICA [CW405-ARIN] 17031 PREDICTIVE-NET [DO222-ARIN] 17032 QUALCOMM-QWBS-SD [BJ221-ARIN] 17033 AVENTISBEHRING [AJ144-ARIN] 17034 SOLIDTECHCTR [CJ197-ARIN] 17035 OXYGEN [NN81-ARIN] 17036 AURIGIN-SYS [TS1376-ARIN] 17037 GOINET [JCA17-ARIN] 17038 EFORCE [DD719-ARIN] 17039 SUPPLYPRO [BB901-ARIN] 17040 SEATTLE-TIMES [PD350-ARIN] 17041 PALUCH [MK650-ARIN] 17042 AS-NICHEWW [JM1712-ARIN] 17043 AERIS-SJC-BGPNET [AS715-ARIN] 17044 TRUENORTHCOMM [CT123-ARIN] 17045 SCAIS-ASN-RMG-01 [JB1188-ARIN] 17046 ACTION-COMM [JN237-ARIN] 17047 CENTURYTELECOMM [JF638-ARIN] 17048 MIMEO [AA321-ARIN] 17049 MBO-NET [MB1077-ARIN] 17050 PMB1 [DD720-ARIN] 17051 PURDUEPHARMA [SH683-ARIN] 17052 TARGET [ST366-ARIN] 17053 TRADING [CK82-ARIN] 17054 SLC-EXPEDIENT [TG347-ARIN] 17055 UTAH [JP424-ARIN] 17056 ABILIZER [JC1434-ARIN] 17057 CASPIAN [JM1716-ARIN] 17058 TEMS-1 [BD657-ARIN] 17059 VIAIRNET [SS1063-ARIN] 17060 E-NETWORKS [JM1717-ARIN] 17061 MARITIMEDIRECTNY [TL383-ARIN] 17062-17063 INTERNAP-052600 [DP516-ARIN] 17064 TISD-VIC [PZ60-ARIN] 17065 REALMED-PROD [AW271-ARIN] 17067 IP-CLEARING [RI31-ARIN] 17068 NOBELL [PM497-ARIN] 17069 COTEL [AEG1-ARIN] 17070 UBSW-CHICAGO [AK202-ARIN] 17071 UBSW-STAMFORD [AK202-ARIN] 17072 GRUPO-IUS [JAT3-ARIN] 17073 ALLEGISGROUP7312 [SL500-ARIN] 17074 WAKUL [MS1398-ARIN] 17075 GILSBAR [CD345-ARIN] 17076 PIXELPUSHERS [JB1581-ARIN] 17077 NETSTEP [RK487-ARIN] 17078 ALLENCO [WW149-ARIN] 17079 TELEMOVIL [RCN1-ARIN] 17080 MORE-COM [DB1177-ARIN] 17081 NETEGRITY [PB250-ARIN] 17082 MOORE-CORP [JJ377-ARIN] 17083 SKYAUCTION [MR690-ARIN] 17084 LCCAS-RACK01 [SS1074-ARIN] 17085 APOGEENETWORKS [HD89-ARIN] 17086 AMERICATEL-CA [AH777-ARIN] 17087 NYSA [WW156-ARIN] 17088 CURRENEX [KY91-ARIN] 17089 CINCCHILDRENS [JD899-ARIN] 17090 ONLINE-NET [LS748-ARIN] 17091 HOLLCORP [JZ145-ARIN] 17092 E-GREETINGS [AI58-ARIN] 17093 FAIRPOINT [BB891-ARIN] 17094 MUTOMAHA-I [KZ35-ARIN] 17095 BELENOSINC [JD668-ARIN] 17096 SUMMITRACING [DL672-ARIN] 17097 PRICEINTER [MS1257-ARIN] 17098 NBIBX1 [SK513-ARIN] 17099 THEGTX [IA51-ARIN] 17100 ISDI [JA575-ARIN] 17101 CENTRECOM [DF650-ARIN] 17102 BARTERTRUST [TA189-ARIN] 17103 CAMPSIX [JT652-ARIN] 17104 PGE-NEG [JF649-ARIN] 17105 MEDIAPLAN-HQ [JM146-ARIN] 17106 MIDWESTWIRELESS [JH1289-ARIN] 17107 HALEANDDORR [TC159-ARIN] 17108 TELENOVA [PKM1-ARIN] 17109 WEBINESS [DS805-ARIN] 17110 YAHOO-US2 [JPH17-ARIN] 17111 PICKLE-TECH [ZU81-ARIN] 17112 BBDO-NY [ZB32-ARIN] 17113 COMMRAIL [EK166-ARIN] 17114 BANKLINK [CR412-ARIN] 17115 THEWIREINT [SM949-ARIN] 17116 BHPHOTO [MB1022-ARIN] 17117 NEXTERANYO1 [MF633-ARIN] 17118 VIMS [GFA1-ARIN] 17119 KAMPUNG [KL314-ARIN] 17120 NBDOE [RH778-ARIN] 17121 WORLDMULT1 [IAS1-ARIN] 17122 JUILLIARD [JP950-ARIN] 17123 REELPLAYINCSM [JM1741-ARIN] 17124 ATLANTIS [LN108-ARIN] 17125 SOFTBANKINT [ZT35-ARIN] 17126 E-MONEY [WC224-ARIN] 17127 ALLIANCE-INFO-SYSTEMS [RM1008-ARIN] 17128 IBIZ [NOC36-ARIN] 17129 FIDALGO-NET-1 [DF455-ARIN] 17130 JONESDAY [DK158-ARIN] 17131 HOBBICO [LJ134-ARIN] 17132 MPOOLJXN1 [RW157-ARIN] 17133 NEXTEL-DEV [SR508-ARIN] 17134 WESTLAKEGROUP-1 [VW45-ARIN] 17135 OHIOU [KB493-ARIN] 17136 GULFNET-DESTIN [BD452-ARIN] 17137 EZ-GAME-CR [JF3551-ARIN] 17138 EBG [DNK1-ARIN] 17139 CIS-AS17139 [CC1311-ARIN] 17140 PAYMAP [TA270-ARIN] 17141 ACCESSINGNET-MIA [HO48-ARIN] 17142 WIRELESS-FIR [DB1198-ARIN] 17143 DRIVEWAY [CK311-ARIN] 17144 P18004BVOCAL [MP677-ARIN] 17145 TEAJAX [IP-FIX-ARIN] 17146 CILLNET [ED157-ARIN] 17147 GOBIERNOCHILE [CPA1-ARIN] 17148 FIRST-NATIONAL [LS428-ARIN] 17149 JAVELINSOLUTIONS [TC858-ARIN] 17150 AFCU [TP405-ARIN] 17152 BATES [RS348-ARIN] 17153 ALLGOOD [AB568-ARIN] 17154 BOAW-AS [ZB46-ARIN] 17155 THE-SUPPLY [AW307-ARIN] 17156 ZIXI [TF276-ARIN] 17157 CLEAR-CHANNEL [HRA2-ARIN] 17158 ABDINSURANCE-HQ [DD734-ARIN] 17159 SPEEDTRAK [JV295-ARIN] 17160 YELLOWSHIRT [CB731-ARIN] 17161 MARSH [EW17-ARIN] 17162 DONALDSON [TS763-ARIN] 17163 INTRANOLOGY [GC387-ARIN] 17164 CALDWELL [JH1301-ARIN] 17165 ACCESS-SYSTEMS [GG423-ARIN] 17166 TRAVELERSPCAS [JS3891-ARIN] 17167 HBAFRAG [JZ55-ARIN] 17168 TFO-BOSTON [IT29-ARIN] 17169 TJBA [TB400-ARIN] 17170 DOWNEY-SAVINGS [EJ93-ARIN] 17171 SEAGULL [PC124-ARIN] 17172 VANTAGEPOINT [JW1021-ARIN] 17173 NETLINK-SERV [NCA-ARIN] 17174 LIPSTREAM-002 [GG258-ARIN] 17175 NSS-UK [ZN39-ARIN] 17176 NETAPPSERV [INN1-ARIN] 17177 TIDEPOINT [BG458-ARIN] 17178 MOTIONINDUSTRIES [JS1923-ARIN] 17179 INTESNET [MM1357-ARIN] 17180 ACCELICA27 [SW614-ARIN] 17181 EVARE [RS1211-ARIN] 17182 PROVEED [LC362-ARIN] 17183 VIDEOTECHNOLOGIES [CC669-ARIN] 17184 ATL-CBEYOND [AI93-ARIN] 17185 EXATT-1 [MM1314-ARIN] 17186 DOTTV [JR909-ARIN] 17187 LEGATO [IL50-ARIN] 17188 TEETIMES [SS942-ARIN] 17189 DIGITALINGENUITY [IB35-ARIN] 17190 GISNET-ISP-000001 [MM3493-ARIN] 17191 JOPLIN-209 [OL28-ARIN] 17192 LEK [JG941-ARIN] 17193 NETLINC-SERVICES [JC885-ARIN] 17194 ALGOR [RY18-ARIN] 17195 JAMES-TOWER [IP-FIX-ARIN] 17196 COD-GE-IL [MD690-ARIN] 17197 DAEDELUS [JM1174-ARIN] 17198 INNOVATIONSLAB [JRM1-ARIN] 17199 SWAGELOK [JH1304-ARIN] 17200 SEATTLECOLL [JB1620-ARIN] 17201 ZANG-NET [JE190-ARIN] 17202 HOTELWORKS [MC945-ARIN] 17203 FUNDSXPRESS [TW421-ARIN] 17204 NOMINUM-GLOBAL [CY101-ARIN] 17205 CORPBANCA-VEN [CTC2-ARIN] 17206 MOUNTAIN-AMERICA [RC842-ARIN] 17207 COLOR-COLL [AD104-ARIN] 17208 PROJESOM [OP26-ARIN] 17209 BIGFOOTINTER [AC484-ARIN] 17210 RLM-SOFT [JS1935-ARIN] 17211 GTEC-ORG-ARIN [KH430-ARIN] 17212 UHC1700 [RG578-ARIN] 17213 NDB-COM [EL211-ARIN] 17214 IEEE-COMSOC [JT718-ARIN] 17215 EMCONSULTING [EK162-ARIN] 17216 VERITECT-EAST [MF526-ARIN] 17217 ADMWORLD [SR473-ARIN] 17218 VIACOREHQ [FS158-ARIN] 17219 GEACCESS [JN208-ARIN] 17220 GDS-LOAN00 [ZZ1425-ARIN] 17221 GRAUBARD [SH639-ARIN] 17222 MUNDIVOX [MV219-ARIN] 17223 SAPE01 [DT267-ARIN] 17224-17233 ATT-CERFNET-BLOCK [CERF-HM-ARIN] 17234 DEERFIELD-COM [MC887-ARIN] 17235 COMTIME [ZZ1366-ARIN] 17236 TULSAL-74103 [AT228-ARIN] 17237 CHICAGOREADER [DF385-ARIN] 17238 MSPNI [JB1635-ARIN] 17239 GENESIS2NET [NA128-ARIN] 17240 CLASSMATES-1 [JC1004-ARIN] 17241 JKGROUP [RK501-ARIN] 17242 UNIPAC [GC394-ARIN] 17243 STAX-NET [LK173-ARIN] 17244 SYSTEMSFUSION [PD1076-ARIN] 17245 QUIXI-1 [CS679-ARIN] 17246 QUIXI-2 [CS679-ARIN] 17247 QUIXI-3 [CS679-ARIN] 17248 AVT-MEDIALINQ-2 [EA83-ARIN] 17249 CENTRO-BURSATIL [IB74-ARIN] 17250 ADETEL [DC1455-ARIN] 17251 TMPW-MKE [MM40-ARIN] 17252 VDI [WJ446-ARIN] 17253 COMMUNIGROUP [BA302-ARIN] 17254 WEB2YOUFLA [SP498-ARIN] 17255 DIVEO-URUG [AD327-ARIN] 17256 GLOBAL-MESSA [BB925-ARIN] 17257 COLLECT [JO292-ARIN] 17258 DOBSON-COMM [KL257-ARIN] 17259 EAGLE-GLOB [ZE41-ARIN] 17260 ARMSCOR [WL95-ARIN] 17261 KEELING [SK528-ARIN] 17262 CIC-CSOC [SA437-ARIN] 17263 ZIANET [AS452-ARIN] 17264 CERNER-COM [ER185-ARIN] 17265 VISIONCOM [DH655-ARIN] 17266 CAVENET [BB139-ARIN] 17267 AAAINET [KB368-ARIN] 17268 COSMOCOM [DP604-ARIN] 17269 SBF [WW157-ARIN] 17270 DCDIRECTOR [RD522-ARIN] 17271 NETCENTREX [ED166-ARIN] 17272 CLARION-GLOB [RK503-ARIN] 17273 CTX-MORTGAGE [JH1324-ARIN] 17274 RWBAIRD [DS1357-ARIN] 17275 FMAC-I-BILLING [JW1043-ARIN] 17276 SEIC-CORP-1 [JS504-ARIN] 17277 SEREN [SC715-ARIN] 17278 OAKASN [SE157-ARIN] 17279 WOLFGROUP [LW362-ARIN] 17280 FAMILYCONNECT [SP180-ARIN] 17281 DOVEBID [MC846-ARIN] 17282 HSNI-LLC [KR364-ARIN] 17283 MARKET-FACTS [BT347-ARIN] 17284 NSF [TC547-ARIN] 17285 PREMIO [KW372-ARIN] 17286 CYBER-001 [SAT11-ARIN] 17287 VZ-UC [ZA57-ARIN] 17288 SENTIRE [EJ100-ARIN] 17289 EMBARCADERO [VL70-ARIN] 17290 BLUE-MOUNTAIN [JK649-ARIN] 17291 MMA599320 [HW116-ARIN] 17292 BROOKSOFT [DR211-ARIN] 17293 VALTEL [RF340-ARIN] 17294 CARL [TS789-ARIN] 17295 EHI-CALLCENTER [SM986-ARIN] 17296 PENTAWAVE [MK296-ARIN] 17297 INDIGO [CE121-ARIN] 17298 VERTAFORM [JM1803-ARIN] 17299 SYNTELEOS [DP627-ARIN] 17300 PROCARD [BE201-ARIN] 17301 FASTENAL [DB1252-ARIN] 17302 HARTE-HANKS [SS1123-ARIN] 17303 GLS3C-SYSTEMS [GB523-ARIN] 17304 STERLING-GRP [KO107-ARIN] 17305 WORLDPOST-AS-01 [RS4311-ARIN] 17306 NETCONX [TS2701-ARIN] 17307 VIRTELA-1 [VN33-ARIN] 17308 I2I-ASN [SL533-ARIN] 17309 TECNET-INC [KC410-ARIN] 17310 BVUB [GB548-ARIN] 17311 TERABEAM-NET [ZT90-ARIN] 17312 TERNETCONNEC [EV121-ARIN] 17313 GATEWAY-NET [VM109-ARIN] 17314 NOCPULSE [JM437-ARIN] 17315 E0PS-4-C0NCUR [AD392-ARIN] 17316 PRG [SB95-ARIN] 17317 XSNET [NM185-ARIN] 17318 FUTURELINK-SNA-1 [SK538-ARIN] 17319 HIGHSPEED-WA [RM830-ARIN] 17320 SCOUR [SN236-ARIN] 17321 OMNISKY [KP297-ARIN] 17322 CHARTERONE [JM1808-ARIN] 17323 ARA-SWD [KI3-ARIN] 17324 ALNET [RNB5-ARIN] 17325 CLEARWAY [MR726-ARIN] 17326 PRIMEMED [CG422-ARIN] 17327 TSTC-AS [LF171-ARIN] 17328 MANULIFE [CS767-ARIN] 17329 ELOGICA [AC1985-ARIN] 17330 NEXTELPARTNERS [AR378-ARIN] 17331 ENTER-PART [JD941-ARIN] 17332 SCIENTECH [JJ64-ORG-ARIN] 17333 C2CELECOM [JS1979-ARIN] 17334 SMC-DIST01 [ZH58-ARIN] 17335 TWN [RG637-ARIN] 17336 VECTRIS [BB860-ARIN] 17337 WA-CENTURASOFT [SR531-ARIN] 17338 NIS [GC412-ARIN] 17339 SAFELITE [JO299-ARIN] 17340 SSTAR [JS557-ARIN] 17341 MONTEREYBAY [GS595-ARIN] 17342 COMTEXNEWS [JR951-ARIN] 17343 SFWMD [PL359-ARIN] 17344 AMPLESPACE [NB174-ARIN] 17345 XCERT [TB678-ARIN] 17346 SENDOUTMAIL [JM1815-ARIN] 17347 PEPCO [JHS3-ARIN] 17348 CAA [AS761-ARIN] 17349 SUNGARD-AMS-DOM [BM904-ARIN] 17350 KMV-LLC [WH191-ARIN] 17351 GC-NJ-EQUX [PM323-ARIN] 17352 GC-NJ-CARL [PM323-ARIN] 17353 CODEXA-CORP [LA161-ARIN] 17354 GCI-NET [KR356-ARIN] 17355 WAYZATA-ISD-284 [EK85-ARIN] 17356 VERMONT-TELE [JR953-ARIN] 17357 GUIDANCE [DL698-ARIN] 17358 ETOLL1 [PH337-ARIN] 17359 TELEGIS [AL802-ARIN] 17360 GLOHO [MV221-ARIN] 17361 BRASS [SY49-ARIN] 17362 NESTEGG [DR70-ARIN] 17363 WAGNER [DC953-ARIN] 17364 AUTO-SOFT-COM [KR347-ARIN] 17365 CITY-OF-FRESNO [KD25-ARIN] 17366 ARINCASN [SP295-ARIN] 17367 MARKTECH-GRO [TS793-ARIN] 17368 FANTASTIC [MS1486-ARIN] 17369 CHAPNET [MF28-ARIN] 17370 MCAFEE-COM [DW1343-ARIN] 17371 BMO-TOR1 [AU155-ARIN] 17372 BMO-TOR2 [AU155-ARIN] 17373 MCI-COV [JC1437-ARIN] 17374 WALMART [ZW91-ARIN] 17375 ESC-TPA-CW-AP [AH461-ARIN] 17376 LFC-NET [JG971-ARIN] 17377 PWI-DFW [MW677-ARIN] 17378 DBSINTL1 [WB233-ARIN] 17379 INTELIG-TEL [TR388-ARIN] 17380 PROJ-MUT-TEL [MW678-ARIN] 17381 ELOCAL [RK520-ARIN] 17382 4SURE-COM [IS124-ARIN] 17383 INTERNET-UNLIM [BM775-ARIN] 17384 USBX-COM [RS1287-ARIN] 17385 ALPHANETSOL [GS604-ARIN] 17386 GRAINGER [RC868-ARIN] 17387 EXPRESSACT [IE20-ARIN] 17388 KEEN-US1 [IK36-ARIN] 17389 IHS-GROUP [DA35-ARIN] 17390 EXPERTPRACTICE [CT311-ARIN] 17391 KS-2520 [MS1516-ARIN] 17392 STOCKGROUP [AA345-ARIN] 17393 TRIPNET-HOU [JM998-ARIN] 17394 NETAPP-AS [IP-FIX-ARIN] 17395 SAGHILL007 [MT509-ARIN] 17396 TL5-1 [CF277-ARIN] 17397 SFCOMMERCE [SH753-ARIN] 17398 IPASS-COM [JS1987-ARIN] 17399 COMSATVEN-VE [VS218-ARIN] 17400 EBONET [SCA1-ARIN] 17401 MILLICOM-AR [LU8-ARIN] 17402 BYEBYENOW [SC732-ARIN] 17403 BJT-NET [BT824-ARIN] 17404 AIRLINK [AS768-ARIN] 17405 NDB-GROUP [JF680-ARIN] 17406 EPSCU [MH944-ARIN] 17407 SENECA-COMM [DP638-ARIN] 18432 NORTHPOINTCORP [EG225-ARIN] 18433 BLUEBAND-NET [TD409-ARIN] 18434 METAVANTE [RE231-ARIN] 18435 THEJUNCTION [ES57-ARIN] 18436 SERVON [RP627-ARIN] 18437 PVI [CM748-ARIN] 18438 BROWNB [HT105-ARIN] 18439 SALINAS-GROUP [MS1493-ARIN] 18440 NCCI [MD711-ARIN] 18441 INFOCURE [JB1688-ARIN] 18442 JFKASN [SE157-ARIN] 18443 DAX [AD394-ARIN] 18444 MCGETTIGAN [GA208-ARIN] 18445 LUXLOOK [DR671-ARIN] 18446 NETRASPECT [NG86-ARIN] 18447 AFFINITY-INTER [ZA94-ARIN] 18448 GIANTEAGLE [MP706-ARIN] 18449 MVS-TELECOM-MEX [AR382-ARIN] 18450 VISHAYNA [AW312-ARIN] 18451 ROCKETBGP [RK522-ARIN] 18452 ALORICA [GH405-ARIN] 18453 ENGIN-ANIM [SM999-ARIN] 18454 AUGSBURG [PS533-ARIN] 18455 NETDATA [RG596-ARIN] 18456 SIGNALCORP [SF348-ARIN] 18457 BOURNS [LP202-ARIN] 18458 VIRT-STOCK [JE376-ARIN] 18459 IMAGEMASTER-HQ [AR384-ARIN] 18460 OSAGEDIGITAL [DC961-ARIN] 18461 BELL-ATL [SC5338-ARIN] 18462 TILTED [GV107-ARIN] 18463 RULESPACE [JD765-ARIN] 18464 BBIS-COMM [JY108-ARIN] 18465 SHORTCYCLES [SP518-ARIN] 18466 GEMINICOM [HC170-ARIN] 18467 PACIBELWIRE [PA195-ARIN] 18468 POOR-DOUGLAS [RH804-ARIN] 18469 LOGIKA [MF538-ARIN] 18470 FUTURE-NET [MH873-ARIN] 18471 GIMNET [EA66-ARIN] 18472 WEBEMP-1 [DP749-ARIN] 18473 NBGISP-ARIN [JH775-ARIN] 18474 AENEAS-CWUS [JW330-ARIN] 18475 M-I5 [DR674-ARIN] 18476 QUISIC [SA450-ARIN] 18477 ESATEL [BF352-ARIN] 18478 NATAL-MED [IE8-ARIN] 18479 PLUGIN-VANET [AR386-ARIN] 18480 ATS-SERVICES [BW8-ARIN] 18481 MP-DC-1 [NS211-ARIN] 18482 SIERRACITIES [TM458-ARIN] 18483 INNUITY [JJ502-ARIN] 18484-18491 VTLA [VN33-ARIN] 18492 ALPAR [JT745-ARIN] 18493 RRD-FIN-LANCASTER [JT3258-ARIN] 18494 CATTECH [AB474-ARIN] 18495 FORT-BEND [JD957-ARIN] 18496 GLOBAL-NET-AR [DC975-ARIN] 18497 UTSI-AS [PC516-ARIN] 18498 INTEGRATED [RB271-ARIN] 18499 SJCASN [SE157-ARIN] 18500 PACCAR [CI57-ARIN] 18501 MB-ASN [AK282-ARIN] 18502 WESTCORP [EL52-ARIN] 18503 LOGICSOUTH [GF56-ARIN] 18504 BLUEBARNINT [SC616-ARIN] 18505 B2PORT [AL410-ARIN] 18506 NETSWORK [LR2079-ARIN] 18507 DICARTA [RL591-ARIN] 18508 FORCE10-NET [BR444-ARIN] 18509 CORILLIAN [RR735-ARIN] 18510 COR-THERAPEUTICS [BW1324-ARIN] 18511 FOCAL-SANFR [MT445-ARIN] 18512 IKANO-OHIO [KN140-ARIN] 18513 KNOWX [IP-FIX-ARIN] 18514 INSURE2000 [FK71-ARIN] 18515 UTARLINGTON [WC59-ARIN] 18516 MOLALLACOM [SN66-ARIN] 18517 CASCONET [SN66-ARIN] 18518 ZEBUINC [GY40-ARIN] 18519 DSLWISCONSIN [CH606-ARIN] 18520 ESCALATE [KL557-ARIN] 18521 IMX [JA688-ARIN] 18522 TITAN-HOST [CC2190-ARIN] 18523 CHEP-AS1 [GB538-ARIN] 18524 MICRONEIL [PM236-ARIN] 18525 THRU [SM1015-ARIN] 18526 GOTO-AS [CM750-ARIN] 18527 PARTSBASE [DDE1-ARIN] 18528 DOMINION [MD3293-ARIN] 18529 PLEXUSSYSTEMS [AF152-ARIN] 18530 ISOMEDIA-1 [SM362-ARIN] 18531 JWT-NY [CM751-ARIN] 18532 SECRETA [GNR1-ARIN] 18533 SYMBOLTECH [JJ1643-ARIN] 18534 ARBINET [RD541-ARIN] 18535 ROCHEDIAG [TZ11-ARIN] 18536 BLUESPRING [MH956-ARIN] 18537 PERKS [ZH43-ARIN] 18538 CTBS [JC1572-ARIN] 18539 WCN [ML774-ARIN] 18540 FFEDERAL [MO165-ARIN] 18541 EDIRECT [ML775-ARIN] 18542 EJASENT [JW1079-ARIN] 18543 LIQUID-THINKING [BW1324-ARIN] 18544 CYBERPUNK [SR204-ARIN] 18545 OSMNET [CP409-ARIN] 18546 CINCINNATI [TS395-ARIN] 18547 TELNET-BR [IS111-ARIN] 18548 18VO [ZV29-ARIN] 18549 01004-3962253177 [WP103-ARIN] 18550 INSERV-E-CUST [HT108-ARIN] 18551 ROTHINC [EBL-ARIN] 18552 SPATACOMM [WD130-ARIN] 18553 OPTICNET-RIS [CB202-ARIN] 18554 SOFTCOIN [IP-FIX-ARIN] 18555 THE-ART-INST [ZA34-ARIN] 18556 SCIF [PA200-ARIN] 18557 HAWKCOMM [JE302-ARIN] 18558 NETBLK-RCOEK [RD543-ARIN] 18559 WORLDCHAIN [HS220-ARIN] 18560 CYBERSHORE [AK400-ARIN] 18561 ONTIMEONLINE [PV43-ARIN] 18562 EMERGING-SYSTEM-1 [MB1165-ARIN] 18563 CGINET-01 [LL304-ARIN] 18564 SYSCOMDUALROUTE [AB609-ARIN] 18565 FORTIX-01 [AR388-ARIN] 18566 COVAD [VH69-ARIN] 18567 EARNWARE [JW1081-ARIN] 18568 ZEKES [JZ177-ARIN] 18569 CANBOX [PM519-ARIN] 18570 LOCKWOOD [DL455-ARIN] 18571 INTELESIS [RC35-ARIN] 18572 PCGLOBAL-PROM [TS810-ARIN] 18573 WCOM-TSENGR-AS [FD109-ARIN] 18574 EECAD [HD110-ARIN] 18575 BITSTREAM-NET [JR425-ARIN] 18576 EDUCAR [JD75-ARIN] 18577 IDSAS001 [CC719-ARIN] 18578 ONCALDERA [MM1276-ARIN] 18579 DALINCO [RF402-ARIN] 18580 GREEN-BRIDGE [PM541-ARIN] 18581 ALLIANZLIFE [MB1172-ARIN] 18582 CONSUMERINFO [GP301-ARIN] 18583 IBSI-KCMO-NET [AC507-ARIN] 18584 ABC-CNLX [JY164-ARIN] 18585 COMMERCEHUB [ZZ1499-ARIN] 18586 TEXRAMP [LA237-ARIN] 18587 AGUTL [RG651-ARIN] 18588 VANTRA-GROUP [JA649-ARIN] 18589 OZCAP-NYC [PV104-ARIN] 18590 BENEFITPOINT [BG484-ARIN] 18591 OPNIX [JK928-ARIN] 18592 RED-CUDI [GM591-ARIN] 18593 HTC [EH297-ARIN] 18594 VOM [RT417-ARIN] 18595 PGA-INC [ZB39-ARIN] 18596 MADISONTELCO [JB1300-ARIN] 18597 LISTEN-SF-2 [LH333-ARIN] 18598 APERIAN-ATLANTA [JC1291-ARIN] 18599 APERIAN-DALLAS [DA531-ARIN] 18600 WPIA-NET [RF246-ARIN] 18601 B2EMARKETS [LB466-ARIN] 18602 PWRWG [FB176-ARIN] 18603 CMSPPLC [ZZ1191-ARIN] 18604 INCOR [NOC5-ARIN] 18605 DIGIBLAZE [TV111-ARIN] 18606 WHERETOLIVE [JG1003-ARIN] 18607 WEBUSENET [DP652-ARIN] 18608 SIERRA [JN99-ARIN] 18609 SOLUNET [VMC-ARIN] 18610 WALKERINFO [PS569-ARIN] 18611 ATRION [DW845-ARIN] 18612 PALL-CORP [GB573-ARIN] 18613 TODAYLINK [MZ61-ARIN] 18614 SOFAST [NO104-ARIN] 18615 UNITEDMESSAGING [JD968-ARIN] 18616 AS-2103 [BW564-ARIN] 18617 ONPLAN [DW848-ARIN] 18618 WCENTRALN [BW500-ARIN] 18619 BRIT-NUMBER-1 [GS619-ARIN] 18620 IBDINCASN [JM1811-ARIN] 18621 CONESTOGA-COL [KM104-ARIN] 18622 IVANET-YTO [SA261-ARIN] 18623 TWC-MISP-1 [CW446-ARIN] 18624 BB2W-BOS [ZZ1509-ARIN] 18625 SCIONASP [MAB7-ARIN] 18626 NET-IDEO [GW628-ARIN] 18627 IBILL [ME306-ARIN] 18628 ENYMEX [AM671-ARIN] 18629 LTF-001 [JF711-ARIN] 18630 DCSS [JM1877-ARIN] 18631 MARSNYC [JD963-ARIN] 18632 VOLCANO-NET [CS786-ARIN] 18633 GIANTWEB [MW566-ARIN] 18634 RENTWAY [MD720-ARIN] 18635 EXPEDI [JP1019-ARIN] 18636 AGEX [SH776-ARIN] 18637 VDS [PM532-ARIN] 18638 ZOOLINK-COM [YC20-ARIN] 18639 DIGITAL-COMM [SV146-ARIN] 18640 IDEALAB [IH46-ORG-ARIN] 18641 KENNETH-COLE [RW657-ARIN] 18642 SPACENET-ENT2 [FM173-ARIN] 18643 SMARTCITY [WWD1-ARIN] 18644 IDC-DIVEO-BR [AF248-ARIN] 18645 MITEC [SA465-ARIN] 18646 SENTAI [DB1703-ARIN] 18647 NEXTJET [JB1535-ARIN] 18648 BROADCASTAMER [ML1721-ARIN] 18649 M5-NETWORKS [SA466-ARIN] 18650 KORAX [HOS768-ORG-ARIN] 18651 EJASENT2 [YY23-ARIN] 18652-18654 TOTALITY-2 [ZT100-ARIN] 18655 THOUGHTWARE [MD721-ARIN] 18656 FIRST-FRANKLIN [JG1007-ARIN] 18657 LEAD-TECH [BS940-ARIN] 18658 CLBN [VS151-ARIN] 18659 HORMELFOODS [JS1519-ARIN] 18660 AMERICANIC [MV97-ARIN] 18661 ASERA-CUSTOMER-NET [RM933-ARIN] 18662 AFLAC [JE250-ARIN] 18663 UOP-AS [MH974-ARIN] 18664 EMPIRE-HEAL [FJ38-ARIN] 18665 CKC-HM-92100-3215-1 [HM259-ARIN] 18666 NOKIA-AMER [SE189-ARIN] 18667 WEB2MIL [DU27-ARIN] 18668 MFM [MD360-ARIN] 18669 EZ2GET [JB1739-ARIN] 18670 MESAINTERNET [CK222-ARIN] 18671 FLASHCOM [DF298-ARIN] 18672 TSTAR-NET [BK11-ARIN] 18673 CFP-ASN [BW572-ARIN] 18674 FROST-NAT-BANK [KM588-ARIN] 18675 CADENCENETWORK [JK935-ARIN] 18676 AVAYA [TZ49-ARIN] 18677 HISYNERGY [AZ82-ARIN] 18678 ISA-INTERNEXA [JC1601-ARIN] 18679 WORKNET [RC724-ARIN] 18680 DATALINK [DB435-ARIN] 18681 CPS-ASN [DH1059-ARIN] 18682 TRILUTIONS [MJ320-ARIN] 18683 OPTIVO [BD491-ARIN] 18684 UBTANET [GS625-ARIN] 18685 TECKMAN [AP392-ARIN] 18686 MAD-MACS [CD304-ARIN] 18687 MPOWER-2 [ZM147-ARIN] 18688 TGIX [CR451-ARIN] 18689 GENESISINTER [RA458-ARIN] 18690 MEDIDATA [DA540-ARIN] 18691 LUMINET [ML149-ARIN] 18692 EAGLEDIRECT-COM [KG302-ARIN] 18693 GOLDPOCKET [RN300-ARIN] 18694 SDWARREN [JTF2-ARIN] 18695 BANDX-US-1 [GP294-ARIN] 18696 AXIOM-NET-PTP-01 [JR388-ARIN] 18697 NISHANSYSTEMS [MIB-ARIN] 18698 TSNC [GC420-ARIN] 18699 SMIG-001 [CJ67-ARIN] 18700 PRG-ASN01 [JS2049-ARIN] 18701 PPCO-US [BE207-ARIN] 18702 SEALED-MED [ZS97-ARIN] 18703 IBMCCH-ASH [DSB2-ARIN] 18704 T-SYSTEM [GZ30-ARIN] 18705 RIMBLACKBERRY [PR328-ARIN] 18706 LISTEN-SF-3 [LH333-ARIN] 18707 PREMIERLINK [NO108-ARIN] 18708 RLUSA-ATLANTA1 [WS255-ARIN] 18709 SANWABANK [CO135-ARIN] 18710 GKG-NET [WM213-ARIN] 18711 RICHARD-STOCK [HM32-ARIN] 18712 UTILICORP2 [STK15-ARIN] 18713 IBMCCH-SJO [DSB2-ARIN] 18714 IP-COMMUNICATIONS [RU32-ARIN] 18715 ANNUNCIO [YW10-ARIN] 18716 BUZZSAW [CH618-ARIN] 18717 ASDELRAYTECH [NK126-ARIN] 18718 MARVELL [BT395-ARIN] 18719 TSRSOLUTIONS [CK345-ARIN] 18720 PACSUN [KP310-ARIN] 18721 DENNIS-PUBLISHING [RS1103-ARIN] 18722 SUPERVALU [DL1029-ARIN] 18723 SEAGATE-USA-MN-1 [DT35-ARIN] 18724 TEK-GYCB [KS647-ARIN] 18725 ICOTECH [NOC38-ARIN] 18726 DEFENDNET-RI [JB1546-ARIN] 18727 DNPS [RT428-ARIN] 18728 ISINJ [MP697-ARIN] 18729 SHAWMUT [CR448-ARIN] 18730 CYBERSOURCE-SC4 [DB1307-ARIN] 18731 NAINO [MM1496-ARIN] 18732 QOSNETWORKS [RB1376-ARIN] 18733 XYMED [FB183-ARIN] 18734 BESTEL [LR439-ARIN] 18735 M4FINANCIAL [DC1022-ARIN] 18736 XAP-CORP [SL566-ARIN] 18737 NYC-ZENTROPY [CS551-ARIN] 18738 MPOWER [TR661-ARIN] 18739 AGENCIA-MOD [CV132-ARIN] 18740 YELLOWBRIX [AAH2-ARIN] 18741 PROMISANT [NO109-ARIN] 18742 PPOP [BG497-ARIN] 18743 MMA-ONLINE [MF563-ARIN] 18744 LAKESNET [KM597-ARIN] 18745 HTCOMP [LA217-ARIN] 18746 BUILDPOINT-PRODA [CC735-ARIN] 18747 IFX-NW [PK86-ARIN] 18748 AT-WAN [DR694-ARIN] 18749 PREMINC-INTER [HL141-ARIN] 18750 LEXICOM [LH339-ARIN] 18752 NETENGINES-INC [EJ111-ARIN] 18753 SKYDESK [LB326-ARIN] 18754 LOOKSMART [JM1911-ARIN] 18755 VOXEO-SERVICE [LA169-ARIN] 18756 PATEAM [AZ87-ARIN] 18757 ADT-SECURADT [GH411-ARIN] 18758 SUNGARD-PHASE3 [AC379-ARIN] 18759 VIRAGE [DN275-ARIN] 18760 RANCHO-CUCA [RB1151-ARIN] 18761 BLM-WAN [KW144-ARIN] 18762 DOMDOMINICK [IP-FIX-ARIN] 18763-18770 PHJW-LLP [DB801-ARIN] 18771 ACDI [ZC69-ARIN] 18772 MARCUSABGP4 [RT433-ARIN] 18773 DISAPPEARING-INC [BW1324-ARIN] 18774 TIMESPUBLISHING [SG589-ARIN] 18775 ENGEN-PET [HR116-ARIN] 18776 VALASSIS [FP132-ARIN] 18777 CTN-MAIN [CH632-ARIN] 18778 GOULSTON [PW315-ARIN] 18779 TEAMGURU [MS1575-ARIN] 18780 ME-NET [RB1159-ARIN] 18781 BITSHOP [JC1623-ARIN] 18782 UNINCOR [JB1778-ARIN] 18783 BIG-VALLEY [KQ11-ARIN] 18784 MCD-US-ASN [RS1353-ARIN] 18785 MIDWAVE [CD439-ARIN] 18786 GEMNETS [TC565-ARIN] 18787 DANAHER [JC1628-ARIN] 18788 TLCINC-AS-01 [GF238-ARIN] 18789 SOLNTECNA [SG593-ARIN] 18790 ALPHANET [SD516-ARIN] 18791 TCU [JM711-ARIN] 18792 EXTANT [KF213-ARIN] 18793 BIZFINITY [KG308-ARIN] 18794 RAMAPO-COLLEGE [MNH1-ARIN] 18795 ULV-AS [CR464-ARIN] 18796 HOME-INTER [DP932-ARIN] 18797 1-800-DATA [AF255-ARIN] 18798 IPTEL [PD338-ARIN] 18799 1INCUBATOR [JR1019-ARIN] 18800 ASPRING [RD557-ARIN] 18801 ZDTV [PH417-ARIN] 18802 MUT-AMER [ES462-ARIN] 18803 MUNIS-ASP [JM1665-ARIN] 18804 EASTLINK-SYDNEY [ADA-ARIN] 18805 FOCAL-PENNSYLVANIA [MT445-ARIN] 18806 ENSYNCH [SH1039-ARIN] 18807 OCTOPUS [TM841-ARIN] 18808 BEANNET-INT [AN196-ARIN] 18809 CABLE-ONDA [JD995-ARIN] 18810 EHI-PRODUCTION [SM986-ARIN] 18811 ESILICON [SV156-ARIN] 18812 NWMLS [JB1795-ARIN] 18813 DEERFIELD [MC887-ARIN] 18814 TELSOUTH [KK505-ARIN] 18815 VULCANSYS [BN408-ARIN] 18816 ANDREWCORP-AOP [CR433-ARIN] 18817 AMERICOM [CI50-ARIN] 18818 LSUHSCS-NET2 [JC1571-ARIN] 18819 ENTERGY-CORP-US [AT130-ARIN] 18820 PFS-ASN-001 [TK262-ARIN] 18821 AVISTA-2 [BW600-ARIN] 18822 MANQUEHUE-CL [GM765-ARIN] 18823 MEDICALERT [SH805-ARIN] 18824 WWW-THESEAM [TN207-ARIN] 18825 INFOPOWER [TM192-ARIN] 18826 CITADEL [BD513-ARIN] 18827 SPECTRUM-RETAIL [RT439-ARIN] 18828 VIANT [AT184-ARIN] 18829 VERIDIAN [GP311-ARIN] 18830 ERNST-YOUNG [JM1939-ARIN] 18831 XPRESSWEB [CB814-ARIN] 18832 INFLOW [AC545-ARIN] 18833 ASHP-NETWORK [TH564-ARIN] 18834 NETWORKIP [PS494-ARIN] 18835 FIDUCIAL [EM365-ARIN] 18836 PROCEDA [SL580-ARIN] 18837 INFOLINE-LA [GW354-ARIN] 18838 ECTONE [NOC39-ARIN] 18839 2000FISHERISSS [FD119-ARIN] 18840 EQUIPOS [OS44-ARIN] 18841 SCHEDUL-DOT [RR776-ARIN] 18842 VERTICAL-SCR [SC455-ARIN] 18843 CROSSMARK [JR325-ARIN] 18844 SHERWIN-AS [JJ173-ARIN] 18845 NAVAHONETWORKS [FP135-ARIN] 18846 PEMEX [VHP1-ARIN] 18847 NETFIRE [NN135-ARIN] 18848 ALTEC-IND-DOM [MS1591-ARIN] 18849 VEHIX [KM623-ARIN] 18850 TOOLWIRE [VV64-ARIN] 18851 VAYUSPHERE [AS818-ARIN] 18852 ATP [RN309-ARIN] 18853 WDUQ-FM [CL994-ARIN] 18854 NETCOMPUTING-COM [AN7-ARIN] 18855 SACASN [SE157-ARIN] 18856 SCCA [SK913-ARIN] 18857 AMERICO [MO257-ARIN] 18858 ISVS-216169032000-19 [BA70-ARIN] 18859 GVEC-NET [CM792-ARIN] 18860 ITNNETMEDIA [AW332-ARIN] 18861 IVANET-BUE [SA261-ARIN] 18862 NCS-HEALTHCARE [CM794-ARIN] 18863 BROADRIVER [HG127-ARIN] 18864 STARTEC [RR780-ARIN] 18865 IMARK101 [WL172-ARIN] 18866 ATJEU [BV137-ARIN] 18867 VERIZONWIRELESS-MSG [JJ452-ARIN] 18868 1STUP [DL752-ARIN] 18869 MANI-VIRTUAL [JA667-ARIN] 18870 CLICKCOM [JS1583-ARIN] 18871 YOURINTERNET [EK189-ARIN] 18872 VERITAS [TR222-ARIN] 18873 REDROCK-COMM [RH878-ARIN] 18874 EWI-ASN-1 [BM358-ARIN] 18875 ANGSTROM-INTERNET [MT541-ARIN] 18876 ARRIVAL-COMM [JG1192-ARIN] 18877 CGTC-Q1 [GW355-ARIN] 18878 HDVEST001 [HE55-ARIN] 18879 MUSKOGEENET [RS1375-ARIN] 18880 LAMRC [SL381-ARIN] 18881 GVT-NET [PB138-ARIN] 18882 SLRASN1 [JI33-ARIN] 18883 SEMTRIBE-NET [JA570-ARIN] 18884 RCLS [AC555-ARIN] 18885 WAVE2WAVE [ZH35-ARIN] 18886 INLINE-NET [EP51-ARIN] 18887 ROAMTEST [OV22-ARIN] 18888 CONNECTDELSOL [JL1156-ARIN] 18889 MERCANTIL [EM370-ARIN] 18890 LUCY-COM [JS2146-ARIN] 18891 CONFLUENCE [BB475-ARIN] 18892 RESTAURANTTRADE [MP765-ARIN] 18893 DYCOM-NET [CE164-ARIN] 18894 NEXTPAGE [ER193-ARIN] 18895 NUSTREAM [PM577-ARIN] 18896 RSVL-ONLINE [DB411-ARIN] 18897 FEDERALNET [JM1341-ARIN] 18898 TETRATECH [HL121-ARIN] 18899 ITSOLUTIONS-INC [RS1389-ARIN] 18900 CQG-INC [GK258-ARIN] 18901 PERCEPTIONTECH [SO171-ARIN] 18902 MOTORCARGO [CS822-ARIN] 18903 LENDINGTREE [EC287-ARIN] 18904 EBALANCE [JN386-ARIN] 18905 LECSTAR-GA-1 [BR505-ARIN] 18906 MOBILELOGIC [IP-FIX-ARIN] 18907 BITSTREAM [TG402-ARIN] 18908 FACTORY23 [DS1493-ARIN] 18909 TELEIAS [DL381-ARIN] 18910 YORK-INTL-CORP [GD1474-ARIN] 18911 CHANNEL-OF-CHOICE [LW238-ARIN] 18912 INNOMEDIA-LA [AK154-ARIN] 18913 ROFNET [CL135-ARIN] 18914 PARAGONSOL [RI58-ARIN] 18915 ICCINET-US [AP1295-ARIN] 18916 PSFT-ECENTER [ET158-ARIN] 18917 KSLAW-001 [SG615-ARIN] 18918 FIRSTVIRTUAL [NI18-ARIN] 18919 FEEDROOM [CT335-ARIN] 18920 HEI [PM18-ARIN] 18921 PLURIS [ER217-ARIN] 18922 AFRICA-ZIMBABWE [JN252-ARIN] 18923 SPEEDERA-2 [ZM34-ARIN] 18924 RPTK2 [JO185-ARIN] 18925 APERIAN-PHOENIX [JC1291-ARIN] 18926 MEALS-SEA [RG694-ARIN] 18927 CHIPDATA [TH581-ARIN] 18928 LINEO-INC [JK982-ARIN] 18929 ELLIANCE-COM [AN5-ARIN] 18930 DOWCORNING151-163 [CT337-ARIN] 18931 SAINTERNET1 [WO35-ARIN] 18932 CCHA-BGP [KL238-ARIN] 18933 IPEER-NETWORKS [DT447-ARIN] 18934 BROOKTINC250 [JM1436-ARIN] 18935 ROIDIRECT-SFHQ [HM223-ARIN] 18936 GLENCOM [GF275-ARIN] 18937 IPIN-SJ [SX5-ARIN] 18938 PRESSGANEY [MS1620-ARIN] 18939 DBC-SALT-LAKE [BH710-ARIN] 18940 SHPS-INC [AS828-ARIN] 18941 EL-MERCURIO [AF176-ARIN] 18942 3WCORP [IW58-ARIN] 18943 YELCOT [JA735-ARIN] 18944 LPB-2000 [BL504-ARIN] 18945 BUILDINGCOLO [SP565-ARIN] 18946 FANNIEMAE-2 [BM984-ARIN] 18947 LMA [AM765-ARIN] 18948 NYMC2000-ARIN [DD831-ARIN] 18949 IMNISP [CV141-ARIN] 18950 SYLVAN-LEARN [ZS228-ARIN] 18951 WEBHELP [PF215-ARIN] 18952 ILUMIN [RP683-ARIN] 18953 ETOYS [IA12-ORG-ARIN] 18954 LITTLEFEET [NP117-ARIN] 18955 YZK1 [MD591-ARIN] 18956 NYK [AJ743-ARIN] 18957 TRIRIGA [ZT95-ARIN] 18958 CRRESEARCH [PP1078-ARIN] 18959 NETSTREAM-COMM [ZN47-ARIN] 18960 CISGI [BO160-ARIN] 18961 MCLANECO [PH935-ARIN] 18962 MEDITECH-1 [SA436-ARIN] 18963 OFDA [RW705-ARIN] 18964 AHSSSCI [JR906-ARIN] 18965 STRATASOURCE [SH823-ARIN] 18966 MEDIACENTERSINC [SP569-ARIN] 18967 USAWPG [SG623-ARIN] 18968 QUADRANT [QNA1-ARIN] 18969 EYADA [FK72-ARIN] 18970 XNPD [IP-FIX-ARIN] 18971 JUNIPER-FIN [RA485-ARIN] 18972 PROMENET [MC746-ARIN] 18973 TAG-ONLINE [AG18-ARIN] 18974 EDOCS [SP570-ARIN] 18975 EVITE-COM [PT233-ARIN] 18976 FREIGHTQUOTE [BS992-ARIN] 18977 GEOTEC-NOC [JD2400-ARIN] 18978 CJDS1999 [SS1236-ARIN] 18979 UPBNA-BGP4AS [BM988-ARIN] 18980 PEACEHEALTH [RT458-ARIN] 18981 WCANMILLER [LIH1-ARIN] 18982 VIRTUAL-ESI [SL593-ARIN] 18983 SATOTRAVEL [HE54-ARIN] 18984 FOCAL-NEWJERSEY [MT445-ARIN] 18985 GAPINC-NET [CT345-ARIN] 18986 PACIFICONLINE [MS1632-ARIN] 18987 EDIAL [BR515-ARIN] 18988 MONARCH-CABLELTD [JK654-ARIN] 18989 GABRIELCOMM [JM2006-ARIN] 18990 AIRBAND-COMM [KG320-ARIN] 18991 PWCG-COM [BP99-ARIN] 18992 GCTR-ANAHEIM [IA12-ORG-ARIN] 18993 GCTR-BOSTON [IA12-ORG-ARIN] 18994 GCTR-CHICAGO [IA12-ORG-ARIN] 18995 GCTR-NEWYORK [IA12-ORG-ARIN] 18996 GCTR-HERNDON [IA12-ORG-ARIN] 18997 GCTR-SUNNYVALE [IA12-ORG-ARIN] 18998 CREDOMATIC [EC295-ARIN] 18999 POPLAR-BLUFF [BB1038-ARIN] 19000 TECHREPUBLIC [LH335-ARIN] 19001 POWERNET-INC [TC-ARIN] 19002 FDBS-AS [WW108-ARIN] 19003 IHSENERGY-CALGARY [CS4644-ARIN] 19004 SCHWABPLAN [DF496-ARIN] 19005 7-ELEVEN [SW699-ARIN] 19006 CLICK1 [AN203-ARIN] 19007 QUESTIA [BK435-ARIN] 19008 PSCI [GJ141-ARIN] 19009 NOTLTD [PG219-ARIN] 19010 ENSERA-PROD-01 [LH365-ARIN] 19011 ODETICS [OH31-ARIN] 19012 AIG [VP61-ARIN] 19013 PERF-FOOD [KT236-ARIN] 19014 EPSILON-HHONORS1 [IB82-ARIN] 19015 HCSTNET [BDH-ARIN] 19016 WCG-AS [JM6313-ARIN] 19017 QUALCOMM-QWBS-LV [BJ221-ARIN] 19018 NETIFICE [MWS5-ARIN] 19019 IPREVOLUTION-NET-1 [PM584-ARIN] 19020 SOLTECH [MS1637-ARIN] 19021 ECONIUM-TOTOWA [MJ344-ARIN] 19022 TIAI [JS2187-ARIN] 19023 SERVICEMASTER [NSM1-ARIN] 19024 INTERNAP-BLK5 [INO3-ARIN] 19025 XO-ASN12 [DIA-ORG-ARIN] 19026 XO-ASN14 [DIA-ORG-ARIN] 19027 XO-ASN11 [DIA-ORG-ARIN] 19028 XO-ASN10 [DIA-ORG-ARIN] 19029 NEWEDGENETS [CM824-ARIN] 19030 HARCOURT-ENT [RJ208-ARIN] 19031 WESCO [JB1857-ARIN] 19032 GESI-KCBSC [BR504-ARIN] 19033 WTFE [JC1706-ARIN] 19034 NORCOMNETWORKS-CORP [IP-FIX-ARIN] 19035 HIX [JK978-ARIN] 19036 INTELLICOM-1 [BG218-ARIN] 19037 CTI [CS849-ARIN] 19038 GF-INVERLAT [AR421-ARIN] 19039 PROMPTU [RM1182-ARIN] 19040 FIRSTMERIT [EK198-ARIN] 19041 ATOMZ [AP420-ARIN] 19042 VISUALNY-01 [ZP41-ARIN] 19043 SHOCKING [TD122-ARIN] 19044 INNER [INNER-NOC-ARIN] 19045 OLLIANCE [ML962-ARIN] 19046 NEWFOCUS [KK504-ARIN] 19047 LUNDWALL-1 [IP-FIX-ARIN] 19048 CORIO [DPZ-ARIN] 19049 REDENVELOPE-US-1 [SK607-ARIN] 19050 AKC [AKC5-ARIN] 19051 CADRE-FINANC [AL450-ARIN] 19052 CYRAS1 [PKV1-ARIN] 19053 NUPNA [JB1828-ARIN] 19054 PENFORD-CORP [DG772-ARIN] 19055 CAC-EAST [EM376-ARIN] 19056 IETF-49 [IP-FIX-ARIN] 19057 IBMCCH-CHI [DSB2-ARIN] 19058 ACSTORONTO [TC639-ARIN] 19059 ERASJV [SS1263-ARIN] 19060 PINNACLE-COM [NA181-ARIN] 19061 WEBLINK-WIR [IW60-ARIN] 19062 W3MEDIA [BK445-ARIN] 19063 JOHN-HEALTH [MR1064-ARIN] 19064 NET-EXPRESS [GR306-ARIN] 19065 KORKSOFT [JK1005-ARIN] 19066 NAMETREE [BK559-ARIN] 19067 VAILSYS [HS243-ARIN] 19068 INYC1 [CB832-ARIN] 19069 THE-ISLAND [RN319-ARIN] 19070 TRANSCORE [BS1022-ARIN] 19071 LFG-CT [RD604-ARIN] 19072 OFFICEMAX [CH460-ARIN] 19073 DIGITRADE [CB1160-ARIN] 19074 EDGECONN-NYC [IE26-ARIN] 19075 MONARCH-CANMORE [JK654-ARIN] 19076 IT-DEVELOPMENT [JK1008-ARIN] 19077 CYBERCENTER-NAP [MW479-ARIN] 19078 S8 [KA241-ARIN] 19079 LOCL-NET [AM2-ARIN] 19080 MITRUST [IC98-ARIN] 19081 GFSI-INC [NF77-ARIN] 19082 EVERESTBROADBAND [BC506-ARIN] 19083 FLEETSECURITIES [DZ116-ARIN] 19084 COURTLINK-MAIN [SC816-ARIN] 19085 INVADO-BLK1 [DS1545-ARIN] 19086 COGNICASE [DL732-ARIN] 19087 MAILBOXES-ECT [KR397-ARIN] 19088 ECG [TO150-ARIN] 19089 DEDALUS-BR [CP452-ARIN] 19090 CANBRASNET [PL401-ARIN] 19091 WORLD-VPN-NET [DS1546-ARIN] 19092 TA-DAY1 [GMK2-ARIN] 19093 IBMUSF-SCH [DSB2-ARIN] 19094 ABS-AS [AH102-ARIN] 19095-19097 OPTICNET-ARC [CB202-ARIN] 19098 CHI-SOLTEC-AS-ACCT [NC190-ARIN] 19099 RAMBUS [NS95-ARIN] 19100 ASSETTRADE-COM [JD1053-ARIN] 19101 HOSTIT [GW272-ARIN] 19102 DENTISTRY [TM897-ARIN] 19103 NEPCO [SR611-ARIN] 19104 NEXTMDCLINITEC [NA182-ARIN] 19105 FIRST-DATA-CORP [JN399-ARIN] 19106 ANDREWS [DRB16-ARIN] 19107 CENTERPOST-CORP [AP432-ARIN] 19108 RUSTON [SW714-ARIN] 19109 NETBLK-CETELEM [AC575-ARIN] 19110 CARIBBEAN-ONLINE [MW767-ARIN] 19111 NATURES-BOUN [BW637-ARIN] 19112 JIVENETWORK [JP1127-ARIN] 19113 DUKE-ENERGY [TS4417-ARIN] 19114 CYBERWEB [JC1730-ARIN] 19115 CHARTER-LEBANON [TP478-ARIN] 19116 AIRBAND-COMM1 [KG320-ARIN] 19117 ALLCONNECT-CORP [MS1667-ARIN] 19118 AS-SIT [SC817-ARIN] 19119 ULTRAK [SQ21-ARIN] 19120 ARGIA [BC770-ARIN] 19121 KAVI [JK1012-ARIN] 19122 VVL-ASSOCIAT [VL40-ARIN] 19123 USW-INTERACT27 [DW83-ARIN] 19124 USW-INTERACT26 [DW83-ARIN] 19125 ROCK-NET [CD476-ARIN] 19126 RAIL-EUROPE-GROUP [FG124-ARIN] 19127 SEI-MER [DJ263-ARIN] 19128 UTTCORP [JP1193-ARIN] 19129 PLAINS-NET [RO242-ARIN] 19130 DOCKNET [WH211-ARIN] 19131 EOHIONET [MR234-ARIN] 19132 BAIRES-NET-ASN [FL26-ARIN] 19133 CAL-ASSOC [CT343-ARIN] 19134 FTBONLINE [GN119-ARIN] 19135 PLEXIS-1 [MB219-ARIN] 19136 NNET [HV70-ARIN] 19137 STREAMPIPE [DH1133-ARIN] 19138 SWEET-BRIAR-COLLEGE [AM131-ARIN] 19139 MARINERSYSTEMS [DR81-ARIN] 19140 MENTOR-TECHNOLOGIES [KS504-ARIN] 19141 CSC-ENYU [GJY1-ARIN] 19142 AAFES [TH599-ARIN] 19143 FWS-NET [SM1122-ARIN] 19144 DEALTIME [SH854-ARIN] 19145 NEUTRON [NDS1-ARIN] 19146 ILGYUW19L [LD448-ARIN] 19147 JALSYS [RI67-ARIN] 19148 OPTICNET-1 [ZA11-ARIN] 19149 MOTLABS [JE352-ARIN] 19150 GFORCE [RP511-ARIN] 19151 WEBUSENET-1 [DP652-ARIN] 19152 IBMCCH-TOR [DSB2-ARIN] 19153 UTMARTIN [MM1608-ARIN] 19154 SOLUTIONARY [JG1042-ARIN] 19155 JAXNFCU [RD510-ARIN] 19156 SIEMENS-SEA [DG786-ARIN] 19157 CHARTER-TN [JM115-ARIN] 19158 USCARRIER [JR1083-ARIN] 19159 STING [RM1035-ARIN] 19160 REDWOODPARTNERS [RW723-ARIN] 19161 INNOCOM-TELECOM [BB376-ARIN] 19162 SUPERIORBROADBAND [ZS235-ARIN] 19163 FRONTCOM-SD-01 [CH70-ARIN] 19164-19168 OPTICNET-BLK [ZA11-ARIN] 19169 TELCONET-MIAMI [JL1204-ARIN] 19170 MISN [BBC2-ARIN] 19171 STARGATE-VAN [CM849-ARIN] 19172 XROADS-NET [BN183-ARIN] 19173 ASAP-INC [DEJ4-ARIN] 19174 SEARCH-GROUP [JAJ1-ARIN] 19175 NETSTAR-ASN [JM1114-ARIN] 19176 PAISP [SM147-ARIN] 19177 GO-NET-NETWORK [AH529-ARIN] 19178 ESPEED-LONDON [KB591-ARIN] 19179 BUYMEDIA [WW186-ARIN] 19180 DIVEOPERU-ISP-1 [ON23-ARIN] 19181 CWIE [PM2848-ARIN] 19182 AJATO [FS184-ARIN] 19183 CDI-CORPORATION [SH860-ARIN] 19184 UWECNET [TP481-ARIN] 19185 TRACENT-TECH [TS891-ARIN] 19186 CEUTAS [KL377-ARIN] 19187 IFOXNETLE [BM1022-ARIN] 19188 EMSINC [ENO1-ARIN] 19189 NORTHSHOREMKTG [ZW71-ARIN] 19190 FASTWIRE-COM [GW370-ARIN] 19191 SPRINGNET1-EOS [IE31-ARIN] 19192 UCV [GL326-ARIN] 19193 MEDI-COM [SS1286-ARIN] 19194 JOVITA [SL622-ARIN] 19195 ASCHWEBHOSTING1104 [IP-FIX-ARIN] 19196 BELLSOUTH-CHILE [PS562-ARIN] 19197 NATIONAL-TECH [SP586-ARIN] 19198 GREENLYNK-NET [SV172-ARIN] 19199 PANAMSAT-ATL [LV109-ARIN] 19200 UFDRGDS [LR285-ARIN] 19201 ETC [BS2119-ARIN] 19202 TX3 [TG1023-ARIN] 19203 IPINETBGP01 [EM374-ARIN] 19204 CMSONG [LL346-ARIN] 19205 MONEYLINE2 [KA246-ARIN] 19206 FCS-001 [RD375-ARIN] 19207 ACOMSOLUTIONS [EL248-ARIN] 19208 ENETIS [JE588-ARIN] 19209 GMO-BOSTON [JC1763-ARIN] 19210 SYNCHRONOSS [DP741-ARIN] 19211 BACKROADS-LAURENS [MH2155-ARIN] 19212 BACKROADS-NEWBERRY [MH2155-ARIN] 19213 SABRE-DFW [TS39-ARIN] 19214 ADX-COM [HM289-ARIN] 19215 SCHWABCANADA00 [GJ240-ARIN] 19216 ACKERMAN-MCQUEEN [MD753-ARIN] 19217 IVYTECHSC [JW1199-ARIN] 19218 VIZIONAL-LA01 [MC530-ARIN] 19219 VIZIONAL-LA02 [MC530-ARIN] 19220 SORRENTO-NETWORKS [JK1028-ARIN] 19221 1AZTECH [KK503-ARIN] 19222 SCALESERVERS-1 [CW443-ARIN] 19223 TAYLORGIFTS [CC825-ARIN] 19224 SUNAMERICA [HT124-ARIN] 19226 AURA-SOUTH [RL668-ARIN] 19227 TERRAWORLD-316 [DS1958-ARIN] 19228 NAP-ENTEL [LR288-ARIN] 19229 I-STRUCTURE [TW489-ARIN] 19230 UPROMISE [MB1317-ARIN] 19231 ASPEHQ [DC1135-ARIN] 19232 MONASH-ZA [JM493-ARIN] 19233 PRIORITY [ME330-ARIN] 19234 CCB [ZT64-ARIN] 19235 MACATAWA [SD575-ARIN] 19236 STEELCASEINET [BC272-ARIN] 19237 OMNIS [JF621-ARIN] 19238 ALLAIRE01 [NM223-ARIN] 19239 KLA-TENCOR [RI66-ARIN] 19240 SPORTSTICKER [MT571-ARIN] 19241 LOCAL-ISP-NJ-2000 [TG422-ARIN] 19242 CRANK-TECHNOLOGIES [MK766-ARIN] 19243 SEVENSPACE [MG861-ARIN] 19244 ATT-LATIN-AMERICA [ML870-ARIN] 19245 MONEYLINE [KA246-ARIN] 19246 ACT2000 [SD579-ARIN] 19247 AAOMS-NATIONAL [WB263-ARIN] 19248 ACSC1000 [MS1690-ARIN] 19249 COREEXPRESS-STLCORP [PH318-ARIN] 19250 WILEYNET [MH1082-ARIN] 19251 DIVEO-DE-PANAMA [AJ186-ARIN] 19252 KITE-NET [SR631-ARIN] 19253 SBAINC-AS [LW91-ARIN] 19254 KOCH-INDUSTRIES [JH1580-ARIN] 19255 TRILOGYWIRELESS [JF807-ARIN] 19256 SITECONNECT [DW932-ARIN] 19257 GLTG [GS678-ARIN] 19258 DEVRY-INC [DR762-ARIN] 19259 TODITO [JC1775-ARIN] 19260 INETACON [GK268-ARIN] 19261 ASPSTATION [ED200-ARIN] 19262 VZGNI-TRANSIT [NSS2-ORG-ARIN] 19263 NETIGY [MB1210-ARIN] 19264 NETIGY-CORP [MB1210-ARIN] 19265 FOCAL-WASHINGTON-DC [MT445-ARIN] 19266 CLEARFUSION-ASN01 [JK1042-ARIN] 19267 FUSIONSTORM-COM [ML864-ARIN] 19268 POWERADZ [DS1176-ARIN] 19269 AERZONE [GF253-ARIN] 19270 PAYMENTECH-INC [LT165-ARIN] 19271 PEAKCLT [ZP63-ARIN] 19272 CENTERBEAM [DM1273-ARIN] 19273 LGEENERGY [DL824-ARIN] 19274 LIVETECHNOLOGY [WF101-ARIN] 19275 INTERVAL [KC466-ARIN] 19276 CTI-EARTH [CB885-ARIN] 19277 RELERA [JT1092-ARIN] 19278 ALO-MEX [HH239-ARIN] 19279 VISTAAR [EJ128-ARIN] 19280 AKER-MARITIME [AB684-ARIN] 19281 FOXINTERNET [JC1173-ARIN] 19282 DIGI-NET [RP720-ARIN] 19283 PHOENIXNET [DM1448-ARIN] 19284 AIRBAND-COMMU1 [KG320-ARIN] 19285 WRH64 [HL231-ARIN] 19286 ALPHASTAR [MG871-ARIN] 19287 INFLOW1 [RK468-ARIN] 19288 INFLOW2 [RW563-ARIN] 19289 INFLOW3 [JD1068-ARIN] 19290 INFLOW4 [MS1703-ARIN] 19291 INFLOW5 [RW720-ARIN] 19292 INFLOW6 [CB889-ARIN] 19293 INFLOW7 [CW513-ARIN] 19294 INFLOW8 [AP336-ARIN] 19295 INFLOW9 [AP336-ARIN] 19296 INFLOW10 [JD1068-ARIN] 19297 BIOPOP [CB890-ARIN] 19298 NET-NETPOINT [CH747-ARIN] 19299 IMAGEDATA-TRUEID [TG345-ARIN] 19300 PC-PLUS-ONLINE [RJA33-ARIN] 19301 CERIDIAN-TAX [PT216-ARIN] 19302 WEBSITEBILLING1 [RN194-ARIN] 19303 CRAWFORD123-COMPANY45 [JM2094-ARIN] 19304 GEORGETOWN-COLLEGE [JH1558-ARIN] 19305 USWIRELESSDATA [JH1588-ARIN] 19306 CNI-HMB-001 [RG725-ARIN] 19307 WORLDQUEST [RP722-ARIN] 19308 INTEL-ONLINE-SERV [LM492-ARIN] 19309 INTEL-ONLINE-SERV1 [LM492-ARIN] 19310 INTEL-ONLINE-SERV2 [LM492-ARIN] 19311 STEWART-1 [WB264-ARIN] 19312 ASIP-VISTAIT-COM [DA603-ARIN] 19313 DATACOR [RBB1-ARIN] 19314 ESYLVAN [RB1245-ARIN] 19315 BANELCO [OC49-ARIN] 19316 SPECTRUMACCESS [GM582-ARIN] 19317 TARANET [BM1035-ARIN] 19318 ALBINT-AS1 [AJ51-ARIN] 19319 CCN-DMZ [AS782-ARIN] 19320 NETINFRASTRUCTURE [JM726-ARIN] 19321 WEDBUSHMORGAN [EL251-ARIN] 19322 GCIJOBS [KF240-ARIN] 19323 HGE-NET [AVC1-ARIN] 19324 KENNEDYKRIEGER [MM1640-ARIN] 19325 DVI-MISHAWAKA [AA400-ARIN] 19326 IP2GO [ZI73-ARIN] 19327 WEBUSENE-CORP [DP652-ARIN] 19328 SOFTREKWEB2 [DO262-ARIN] 19329 MCNET [GFM1-ARIN] 19330 JONES1-WEB [IP-FIX-ARIN] 19331 BIMCORP [NA183-ARIN] 19332 MARCATEL-MEX [HG140-ARIN] 19333 ACML-2 [TU18-ARIN] 19334 SPORTLINE-DBC [ZS111-ARIN] 19335 APRIA-HEALTHCARE [PE718-ARIN] 19336 UNIQUEVACATIONS [AB689-ARIN] 19337 COSERV-COMM-10001 [SS1309-ARIN] 19338 ATTLACHILE-PIT [TE183-ARIN] 19339 DIDATA-NE [EW38-ARIN] 19340 ECSASN [MG856-ARIN] 19341 ZOIDIAL [ET156-ARIN] 19342 NETLEVER [LO78-ARIN] 19343 WNYCS [PC581-ARIN] 19344 MULTI-HOMED [JB1946-ARIN] 19345 SERVICEREPS-MTL [SBJ3-ARIN] 19346 NCTIMES-NET [BP759-ARIN] 19347 INDYMACBANK [TK421-ARIN] 19348 CARD-EXPRESS [DB1442-ARIN] 19349 OLTRONICS [DK609-ARIN] 19350 CENTENNIALCOLLEGE [KK538-ARIN] 19351 MODELN [JM13198-ARIN] 19352 SINTAKS-COMPANY [TB777-ARIN] 19353 WEB-ELITE [KD315-ARIN] 19354 FOCAL-SEATTLE [MT445-ARIN] 19355 SMRN-NET [DJ153-ARIN] 19356 TOUA-NOC [SH867-ARIN] 19357 RESOURCING [AG480-ARIN] 19358 NVT-LANTHANUM [ED194-ARIN] 19359 SYMMETRY-COMM [PP335-ARIN] 19360 XOUTDOORS [JS1193-ARIN] 19361 ATRIUMTELECOM [SO186-ARIN] 19362 RDA-CUSTOMSOFTWARE [TW497-ARIN] 19363 ASIMOV [PK18-ARIN] 19364 ECHOPASS-UT1 [ZZ1648-ARIN] 19365 NETWURX-01 [ND135-ARIN] 19366 MNS [RS1479-ARIN] 19367 DAKOTA [MB1339-ARIN] 19368 SANRISE [DN266-ARIN] 19369 DISCOUNTLABELS [JS2296-ARIN] 19370 WRENCHEADAS01 [SD590-ARIN] 19371 MI8-CORP-63-240-6 [MP831-ARIN] 19372 NCOGROUP-FTW [JB1976-ARIN] 19373 TRIARA [XD4-ARIN] 19374 NEXISCO-COM [MG890-ARIN] 19375 NUMERICINVESTORS [JK1070-ARIN] 19376 JUSTNET [TW490-ARIN] 19377 CONNECTIVA [JH633-ARIN] 19378 TRANSAMERICA-COMM [RP734-ARIN] 19379 IFOXNETNX [BM1022-ARIN] 19380 CHROBINSON [ZC25-ARIN] 19381 BROADBAND-LAB [CW531-ARIN] 19382 FAULTLESS-STARCH [JW880-ARIN] 19383 WORLD-WEB-USA [JB2170-ARIN] 19384 GRAMTEL001 [WS299-ARIN] 19385 SG-DR-SNTC [ZS34-ARIN] 19386 HEXAGONNET [AM621-ARIN] 19387 DANTIS-AS [LH391-ARIN] 19388 IPASS-COMM [JG1154-ARIN] 19389 GOLUB [DW938-ARIN] 19390 MICROSERV-JACKSON [TJ247-ARIN] 19391 MICRO-VIS [MB1349-ARIN] 19392 JCOM [EH310-ARIN] 19393 REON-BROADBAND-01 [BF505-ARIN] 19394 CSO [KR435-ARIN] 19395 RESCLUB [NO116-ARIN] 19396 C-GROUP [NSS1-ARIN] 19397 CLICKARRAY [SC865-ARIN] 19398 INDENET [JF830-ARIN] 19399 SLLNET [PA202-ARIN] 19400 SPX-CORP-AS [FF116-ARIN] 19401 SENECACAPITAL [AB701-ARIN] 19402 CACTUS [RNC2-ARIN] 19403 TECHALLIANCEGROUP [MM710-ARIN] 19404 QUEST [SB1095-ARIN] 19405 WORLDWITHOUTWIRE [PK289-ARIN] 19406 TOWERSTREAM [DB1426-ARIN] 19407 FUNTODO [RF538-ARIN] 19408 PANTELLOS [MA579-ARIN] 19409 VWCREDIT-COM [CA119-ARIN] 19410 BENTONREA2 [BE72-ARIN] 19411 NAP-CHILE [CV781-ARIN] 19412 CLARITASPRODUCTS [RV226-ARIN] 19413 LUMBERMENS-COM [SH887-ARIN] 19414 MMCWEB [KB613-ARIN] 19415 SIAC-CAP [ML696-ARIN] 19416 IDACORPENERGY [JA791-ARIN] 19417 DEVISE-COM [BG566-ARIN] 19418 WPPUSA [CS919-ARIN] 19419 GLOBALSTREAMS [SB1626-ARIN] 19420 THINCNET [TH632-ARIN] 19421 1GLOBALCITY-PEER1 [MF623-ARIN] 19422 MOVINET [AM759-ARIN] 19423 LCC-AB-CA [BI7-ARIN] 19424 MIGHTYNET [DH1195-ARIN] 19425 CITYSCAPE-COMM [SH205-ARIN] 19426 BANDWIDTHCENTER [MR858-ARIN] 19427 BREMER-FINANCIAL [CT370-ARIN] 19428 TOSCO [JA388-ARIN] 19429 007MUNDO [FO60-ARIN] 19430 ACXIOM-CORP [DR793-ARIN] 19431 INTELLICLAIM [RV258-ARIN] 19432 HOMERELAY [MM1689-ARIN] 19433 MISO-AS [GP577-ARIN] 19434 FUTURE-DESIGNS [FN55-ARIN] 19435 WBEB-WEB [PB599-ARIN] 19436 RELERA-1 [JT1092-ARIN] 19437 RELERA-2 [JT1092-ARIN] 19438 PRIME-BROKERAGE [ECB1-ARIN] 19439 NEBOSBOY [MG1115-ARIN] 19440 AICENT-NET [DZ123-ARIN] 19441 NCUBE [DS1662-ARIN] 19442 NELSONJOBS [TP509-ARIN] 19443 STAPLES [JD192-ARIN] 19444 CHARTER-STL [DS1664-ARIN] 19445 HEWM [GP355-ARIN] 19446 E3C-INTERBUILD [JP53-ARIN] 19447 ALFANUMERIC [JI120-ARIN] 19448 TVINTERACTIVE [JM2171-ARIN] 19449 CONCURRENT [MS1751-ARIN] 19450 INVESTIN [CH741-ARIN] 19451 CANINVEST [AB707-ARIN] 19452 OAKTREECAP-COM [OG5-ARIN] 19453 INFINT [TS927-ARIN] 19454 PRAIRIESYSTEMSINC [MN335-ARIN] 19455 SYNERTECH-SYSTEMS [MN336-ARIN] 19456 WATERS-CORPORATION [RD413-ARIN] 19457 RUDIN [RB1289-ARIN] 19458 NETZEE-BIRMY [BC456-ARIN] 19459 DADE-BEHRING-01 [MD594-ARIN] 19460 SUTH [JB198-ARIN] 19461 QSI [QSN1-ARIN] 19462 UNITED-STAT [AD51-ARIN] 19463 SOPS-NET [DK552-ARIN] 19464 WASHINGTON-AND-LEE [RBW22-ARIN] 19465 THINKCENTRIC-PYRAMID [RC1011-ARIN] 19466 INFOCHI [DA615-ARIN] 19467 NEXTERABOS1 [MF633-ARIN] 19468 CONOCONET [AM762-ARIN] 19469 CENTERLYNX1 [JD770-ARIN] 19470 PAGOOCORP [ME347-ARIN] 19471 ITGSI [CR518-ARIN] 19472 CAROLLO-ENGINEERS [HD129-ARIN] 19473 ISOT-001 [YY38-ARIN] 19474 MFTI [MT297-ARIN] 19475 CREDITRISK [MC1185-ARIN] 19476 ITOL [JK1079-ARIN] 19477 FLYINGJ [QE2-ARIN] 19478 ICMARC [MB1363-ARIN] 19479 CERVALIS [HCW-ARIN] 19480 ATFS [DG851-ARIN] 19481 PANAX [BM4137-ARIN] 19482 SCOUTCOM-1 [BP372-ARIN] 19483-19498 SBCASI-AKRON-OH [LT178-ARIN] 19499-19502 OPTICNET-BLK1 [ZA11-ARIN] 19503 MEDIBUY [AS907-ARIN] 19504 WTCC [JJ442-ARIN] 19505 RESCON [VI12-ARIN] 19506 LOCKSTREAM [TD474-ARIN] 19507 NYC-TRANSIT [GO112-ARIN] 19508 DEL-VAL-FINANCIAL-SRV [SD615-ARIN] 19509 OLLUSA [DL864-ARIN] 19510 HUMANAASN1 [JS43-ARIN] 19511 ELECTROLUX-NA [MD845-ARIN] 19512 LYONDELL [SRC25-ARIN] 19513 IBTCO [IBN1-ARIN] 19514 USCENTRAL [PP304-ARIN] 19515 ORICOM-QUEBEC1 [AB716-ARIN] 19516 SMITH [RH824-ARIN] 19517 VISUAL-LINK-INOC [SM1201-ARIN] 19518 ROCKISLAND [MG42-ARIN] 19519 ACRON [GA244-ARIN] 19520 FDINET [TR211-ARIN] 19521 AKIBIA [AA415-ARIN] 19522 XYLO [DH1212-ARIN] 19523 AZTECSYSTEMS [JC55-ARIN] 19524 COMERICA-INC [GD236-ARIN] 19525 3E-COMPANY [JC1863-ARIN] 19526 SUMNER [PB534-ARIN] 19527 PETROCOSM-CORP [BC826-ARIN] 19528 GEORGE-CONS [SH905-ARIN] 19529 E-HUB-NETWORKS [RL711-ARIN] 19530 NDIN-STATE [GR17-ARIN] 19531 VDL2-MONTREAL [IL55-ARIN] 19532 VISILINX-DAL-1 [CM905-ARIN] 19533 WEARGUARD [MB1371-ARIN] 19534 MLXML [FS194-ARIN] 19535 JETBLUE-AIRWAYS-01 [CH682-ARIN] 19536 DIRECTV-DENVER [QK1-ARIN] 19537 EMPLANET [FB199-ARIN] 19538 ADVANTAGECOM [AK355-ARIN] 19539 IPONLY-US-AS [FR127-ARIN] 19540 CINGULAR-WIRELESS [JK713-ARIN] 19541 COMARK [AG495-ARIN] 19542 CERIDIAN-PERF [SB1111-ARIN] 19543 OAKSWINT [HP90-ARIN] 19544 CNATRUST [BS1104-ARIN] 19545 BANG [CR180-ARIN] 19546 NOWIRE [BH825-ARIN] 19547 DMCSTRATEX [KA258-ARIN] 19548 ABS [AH102-ARIN] 19549 IDIGLOBAL [JB1211-ARIN] 19550 SIHOPE-AS [MD320-ARIN] 19551 COCSD-1 [RS1805-ARIN] 19552 BLS [NP129-ARIN] 19553 PSINET-AR [CH69-ARIN] 19554 RELERA4 [JT1092-ARIN] 19555 RELERA5 [JT1092-ARIN] 19556 RELERA6 [JT1092-ARIN] 19557 RELERA7 [JT1092-ARIN] 19558 RELERA8 [JT1092-ARIN] 19559 WWC-CLEC [LN133-ARIN] 19560 GWHA [RG752-ARIN] 19561 BIGPIPE [DR813-ARIN] 19562 FAMILYNETINC [JC1836-ARIN] 19563 IDX-SYSTEMS-CORP [CM885-ARIN] 19564 LATECH [DS653-ARIN] 19565 WATKINSIT [AB722-ARIN] 19566 INDIGOB2B-EWR [CJH1-ARIN] 19567 NEOVI-NET-SYS [RC1024-ARIN] 19568 ISUPPLI [CM907-ARIN] 19569 PHOENIX-TEC [MD851-ARIN] 19570 MAPLETRONICSCOMP [JW943-ARIN] 19571 HAX-IRVING [CJ268-ARIN] 19572 BEACON-TW-COLO [SW767-ARIN] 19573 PACIFIC-NATIONAL [JT885-ARIN] 19574 COOLCALL-COM [CH756-ARIN] 19575 2001-NEWCENTURY-CORP [MG911-ARIN] 19576 OTEC-COM [DK689-ARIN] 19577 DATABURST [TG447-ARIN] 19578 TRUENET-INC [DH233-ARIN] 19579 MANAGEDSTORAGE [SE361-ARIN] 19580 CSTN [CS942-ARIN] 19581 DALLAS-COUNTY [JH1658-ARIN] 19582 BRAVCO [EA179-ARIN] 19583 IMPSAT-CL [NO112-ARIN] 19584 ADVANCED-NET [TS934-ARIN] 19585 BCSLLC [RB1303-ARIN] 19586 CREATIVE-DATA-PNS [JN296-ARIN] 19587 ACTS-TESTING [MD834-ARIN] 19588 AEA5-K12-IA-US [SF70-ARIN] 19589 TELENISUS-DOWN [GS463-ARIN] 19590 TELENISUS-ASH [GS463-ARIN] 19591 FOCAL-SAN-JOSE [MT445-ARIN] 19592 TELEPHONY [RT595-ARIN] 19593 NCISP [CJ271-ARIN] 19594 KEY3 [DL776-ARIN] 19595 NETMORF-CORP [EB402-ARIN] 19596 CCNY [MM1727-ARIN] 19597 SENETS [JM1177-ARIN] 19598 AIRFONE-001 [ML856-ARIN] 19599 BLUEMARK [DC1012-ARIN] 19600 MUSICVISION [DRM2-ARIN] 19601 FOOTHOLDTECHNOLOGY [DM586-ARIN] 19602 ESPEED-NY [GL23-ARIN] 19603 IBMCCH-STV [DSB2-ARIN] 19604 IBMCCH-GPV [DSB2-ARIN] 19605 RELERA9 [JT1092-ARIN] 19606 RELERA10 [JT1092-ARIN] 19607 CHIARO-NETWORKS [TG79-ARIN] 19608 WVMCCD [BM497-ARIN] 19609 MANDA-VEEDIX-NET [VO14-ARIN] 19610 AURORA-CENTRETECH [GA247-ARIN] 19611 UNISINOS-BR [RM1259-ARIN] 19612 VASTERA [DW989-ARIN] 19613 MICRO-GENERAL [MP1172-ARIN] 19614 EXARIO-1 [ENO2-ARIN] 19615 FSCV-AS [DB1502-ARIN] 19616 ACCESS-OHIO [LS539-ARIN] 19617 SAA [MP867-ARIN] 19618 GLOBEOP-2000 [MP837-ARIN] 19619 8498500 [RY110-ARIN] 19620 STATCAN [JB2038-ARIN] 19621 VIRTUAL-GIANT [BP518-ARIN] 19622 4ANYTHING [BL563-ARIN] 19623 KCI-EPAY [TK390-ARIN] 19624 HAMPSHIRE [SV186-ARIN] 19625 KEYSTONE-CONNECT-1 [KM717-ARIN] 19626 EVC-AS [DW1458-ARIN] 19627 SOCANTEL-001 [KS769-ARIN] 19628 WOODARDCURRAN [CH167-ARIN] 19629 ZAFFIRE [BZ83-ARIN] 19630 SOUNDADVANTAGE [MB1386-ARIN] 19631 WORLDSPAN-LP [SCF1-ARIN] 19632 MTROPOLIS-INTER [AI73-ARIN] 19633 DIGITAL-MED-CAMP [EL261-ARIN] 19634 ARENET [JC1892-ARIN] 19635 MARK-ASSET [JW1284-ARIN] 19636 EHEALTHDIRECT [RR882-ARIN] 19637 AGERESYSTEMS [DB1510-ARIN] 19638 GEOUTILITIES [GT228-ARIN] 19639 LOGICAL2 [HOS301-ORG-ARIN] 19640 OUT-TI [ZH60-ARIN] 19641 DRAPERS [SG3740-ARIN] 19642 TAPNET [NOC45-ARIN] 19643 NETSYN [DG409-ARIN] 19644 MAGNIFI-1 [DS1704-ARIN] 19645 MAGNIFI-2 [DS1704-ARIN] 19646 MAGNIFI-HQ [DS1704-ARIN] 19647 HPOD20001 [DC1222-ARIN] 19648 LDSCHURCH1 [NT107-ARIN] 19649 NEW-WORLD-APPS [GLH1-ARIN] 19650 BUNZLUSA [AZ104-ARIN] 19651 BLUEMARTINI [TD487-ARIN] 19652 MARCUSCORP [JD1073-ARIN] 19653 CTSTELECOM [RB1290-ARIN] 19654 HOSTING-NETWORK [TJ254-ARIN] 19655 FOCAL-LOS-ANGELES [MT445-ARIN] 19656 ICGCOMMERCE-COM [AM780-ARIN] 19657 JP-MORGAN [PF269-ARIN] 19658 BROWARD-HOSPTL [CW552-ARIN] 19659 METSTREAM [KA261-ARIN] 19660 NASSAU-LIB [NN97-ARIN] 19661 SUSQ-BALA [DT342-ARIN] 19662 UNISERVE-ONLINE [TS214-ARIN] 19663 CASS-STL [SM1227-ARIN] 19664 VITALCHEK [JC1826-ARIN] 19665 RAMPANT [RA295-ARIN] 19666 DIGITALLIGHTHOUSE [TJD1-ARIN] 19667 LEETECH-ATLANTA [JO363-ARIN] 19668 KPMG-ADMI [TK390-ARIN] 19669 NAPSTER [JM3208-ARIN] 19670 CYCHILDS [CC886-ARIN] 19671-19672 EVERESTBROADBAND1 [BC506-ARIN] 19673 SUPPLYSTREAM [JR792-ARIN] 19674 NAVPOINT [JH1678-ARIN] 19675 EMINDBIZ [NS256-ARIN] 19676 SWIFT-GLOBAL [DDD2-ARIN] 19677 NJTRANSIT [ZN12-ARIN] 19678 UOP [GH482-ARIN] 19679 EFFECTNET [DJ371-ARIN] 19680 MONDERA [JH1680-ARIN] 19681 CSI-TTA [CSN1-ARIN] 19682 ADVANTICOM-AS01 [JH1659-ARIN] 19683 DOVER-CORP [MK856-ARIN] 19684 MHMB [CM913-ARIN] 19685 HCIS-1 [TH219-ARIN] 19686 PACAMTEL-COM [RD776-ARIN] 19687 FIBERSTREET [TM969-ARIN] 19688 SANTANDER-MEXICANO [ROF1-ARIN] 19689 BPI [PM670-ARIN] 19690 HYATT-INTERNET1 [PGS1-ARIN] 19691 SG-DR-STNG [ZS34-ARIN] 19692 BLUELIGHT [BH847-ARIN] 19693 SYNERGYX [RT512-ARIN] 19694 TERABEAM12 [ZT90-ARIN] 19695 SUNTRAVELSYSTEMS [DG260-ARIN] 19696 NUCACHE [SG423-ARIN] 19697 BELZBERG [BS1131-ARIN] 19698-19699 XO-19698-19699 [DIA-ORG-ARIN] 19700 DIALPAD [JH1070-ARIN] 19701 YODLEE [NO141-ARIN] 19702 LATIS [HL162-ARIN] 19703 VALUELINE [GM701-ARIN] 19704 ACCUQUOTE [GC499-ARIN] 19705 NEXTED-USA [SA543-ARIN] 19706 SOS116W23 [SK660-ARIN] 19707 THARPE-COMPANY-INC [JJ513-ARIN] 19708 NEED2KNOW [JZ176-ARIN] 19709 TERABEAM1 [ZT90-ARIN] 19710 S4R [SNE1-ARIN] 19711 SWAZI-NET [PR78-ARIN] 19713 STATE-OF-NH-USA [JS2410-ARIN] 19714 IPIN-BEL [MD869-ARIN] 19715 YOUBET [BR409-ARIN] 19716 ITERICOM [JF865-ARIN] 19717 CIDERA-MAINSTREAM [BS1134-ARIN] 19718 NCNI [NH158-ARIN] 19719 TRADESCAPE-COM [KS641-ARIN] 19720 CABLEVISION-CORP [ZN76-ARIN] 19721 MHN [DB1528-ARIN] 19722 CNXASN001 [SL671-ARIN] 19723 CELEPAR [MAB9-ARIN] 19724 CAPITOL1-AUTO-FINANCE [RH991-ARIN] 19725 CARRERA-MAXIMUS [LG300-ARIN] 19726 WEBPUBLISHINGCOM [DV238-ARIN] 19727 TOWERGROUP1 [HH257-ARIN] 19728 CORADIANT [MB1419-ARIN] 19729 ATINAV2001 [BS1139-ARIN] 19730 DIMTEK-COM [RW782-ARIN] 19731 CODENSA [FO49-ARIN] 19732 PROTIER01 [CC901-ARIN] 19733 SEVEN [NRA1-ARIN] 19734 HALO [MG933-ARIN] 19735 SEISMICINTERNET [DT504-ARIN] 19736 ORDERFUSION-COM [TU37-ARIN] 19737 RMC [RC1047-ARIN] 19738 FORTIS [EH297-ARIN] 19739 COUNTY-SANBERNARDINO [JC1928-ARIN] 19740 SKILLGAMES [EL267-ARIN] 19741 NEXTELINTERNATIONAL [ME356-ARIN] 19742 MARLIN [MB1807-ARIN] 19743 EVERDREAM-CORP [MB1422-ARIN] 19744 SPARTAN-INT [RV281-ARIN] 19745 BIRKMANINT [TL494-ARIN] 19746 TELEPHIA [TH906-ARIN] 19747 RPA [INA1-ARIN] 19748 SECTORLINK [JE468-ARIN] 19749 GNC-LIVE-WELL [DAG1-ARIN] 19750 C2C-FIBER [JW1306-ARIN] 19751 CCRTC [BB1148-ARIN] 19752 HYDROONETELECOM [WL197-ARIN] 19753 BSC-NET [JT901-ARIN] 19754 NETPOINT-COM [TH2865-ARIN] 19755 KIMBANET [JFW13-ARIN] 19756 DNS-ONLINE [TA334-ARIN] 19757 COASISBETHELASN [KG355-ARIN] 19758 STERLINGFINANCIALNET [FA92-ARIN] 19759 VIRTUAL-TRAINING [NV53-ARIN] 19760 CALPINE [NT112-ARIN] 19761 SLEDGE [RG77-ARIN] 19762 PENTAMARKWORLDWIDE [LZ58-ARIN] 19763 UNIVALI [GL352-ARIN] 19764 EVOLVE01 [CJ278-ARIN] 19765 IMCWV [JD1165-ARIN] 19766 QUIK-HOUSTON [BL429-ARIN] 19767 G1-GUATEMALA [FQ5-ARIN] 19768 EMT-BOSTON [NK138-ARIN] 19769 CAPITALONE [TJ259-ARIN] 19770 SATURATED [MS1789-ARIN] 19771 USADATAINC01 [FM216-ARIN] 19772 CORPORATE-WEB [AD481-ARIN] 19773 MOTOROLA [DD927-ARIN] 19774 AVISTA-CORP [BC848-ARIN] 19775 INTRASYSTEMS [JH4931-ARIN] 19776 HOBSONS-US [MM1767-ARIN] 19777 ACCENTURE-CIO-HOSTING [ST501-ARIN] 19778 CTSBGP [BB1153-ARIN] 19779 KVINET [MJ9-ARIN] 19780 SANDSTREAM-NW [JM2246-ARIN] 19781 NATSOURCE140 [TM272-ARIN] 19782 INDIANAGIGAPOP [BS69-ARIN] 19783 APPRISS [KB647-ARIN] 19784 NEWSGRADESRC [MG939-ARIN] 19785 SOLUTIONPRO-NET [ZS144-ARIN] 19786 FTI-FGN-A001 [MF655-ARIN] 19787 BLEICHROEDER1 [RJC19-ARIN] 19788 GETRONICS [MW850-ARIN] 19789 PARKSTONE [FY21-ARIN] 19790 SNAACASN [VR69-ARIN] 19791 ULTRAPRISE [BD610-ARIN] 19792 EVENTSDIGITAL-NYC [DT510-ARIN] 19793 IMPULSEMG [KG178-ARIN] 19794 HILTON [ZA61-ARIN] 19795 SONO-NODE-LA1 [TJ261-ARIN] 19796 SHUBERT [DY137-ARIN] 19797 DEXAGON-NET [RS1549-ARIN] 19798 TBOL [SV192-ARIN] 19799 INFINITE [KS435-ARIN] 19800 GCPUD-ORG [SB1149-ARIN] 19801 GENZYME [PC46-ARIN] 19802 DILIGENZ [JL1315-ARIN] 19803-19810 ASNBLK-VTLA2 [VN33-ARIN] 19811 TOTALACCESS-NET [JP1251-ARIN] 19812 RADIANZ-NUTLEY [KM737-ARIN] 19813 EXCALIBUR [JK1132-ARIN] 19814 GEO-HOU-WESTHIEMER1 [BS1279-ARIN] 19815 QOSI-NET [CJ280-ARIN] 19816 NCSDATACOM [JM611-ARIN] 19817 DSLEXTREME [JM2150-ARIN] 19818 MBFX [PT234-ARIN] 19819 NTTC [WDC1-ARIN] 19820 REXAM-ASN01 [CT385-ARIN] 19821 MERALLIS [CC911-ARIN] 19822 TPAC-SD-01 [ZT119-ARIN] 19823 TPAC-SJ-01 [ZT119-ARIN] 19824 TPAC-LV-01 [ZT119-ARIN] 19825 LABONE [WB282-ARIN] 19826 FIBERCITYNETWORKS [JM63-ARIN] 19827 SAIC-RAPIDAPPS [LT190-ARIN] 19828 IST-NET [TN249-ARIN] 19829 1STFIDELITY [SME1-ARIN] 19830 RTC-RINGGOLD-GA [TH476-ARIN] 19831 STAMPIN [CM952-ARIN] 19832 20TWENTY [GS730-ARIN] 19833 EDURUS [KD189-ARIN] 19834 FYI-NETWORKS [GT18-ARIN] 19835 FUTWAY [ZF51-ARIN] 19836 VERISIGNGRS [KS630-ARIN] 19837 CAROLINAHOLDINGS [SA554-ARIN] 19838 PARCOM [DP815-ARIN] 19839 EONBUSINESS [BC859-ARIN] 19840 OAKTREECAP [OG5-ARIN] 19841 THESEAM-COM [DB1554-ARIN] 19842 COLOSSEUM-ONL [JC939-ARIN] 19843 CHIPSHOT-INC [CA353-ARIN] 19844 SYNAPTA [CW574-ARIN] 19845 ADAYTUM [JB2108-ARIN] 19846 PLANETCOMM-HAR [EF245-ARIN] 19847 NHA [JV108-ARIN] 19848 BCEEMERGIS-THL [SR636-ARIN] 19849 BTC-ONLINE [MH1175-ARIN] 19850 RYLAND-GROUP [BM1047-ARIN] 19851 BRE-PROPERTIES [LD280-ARIN] 19852 GATOR [GB679-ARIN] 19853 RUSHTRADE-01 [SS1134-ARIN] 19854 ERUCES [ST509-ARIN] 19855 MASERGY [ZM130-ARIN] 19856 BRAZOSPORT-COLLEGE [IP-FIX-ARIN] 19857 PETROCOSM-COM [BC826-ARIN] 19858 GENSLER [MM1780-ARIN] 19859 FLAIR-DATA-SYSTEMS [SS1426-ARIN] 19860 EHE-NET [AV155-ARIN] 19861 FACILITY-GROUP [JK435-ARIN] 19862 BECNET [RB34-ARIN] 19863 GUYANA-TELEPHONE [JP1265-ARIN] 19864 O1COMM [ML951-ARIN] 19865 ICARZ [AG520-ARIN] 19866 OCI-CHEMICAL-CORP [DH1264-ARIN] 19867 TOTALINK-BGP4 [DB6788-ARIN] 19868 EMIGRE [WH230-ARIN] 19869 AECNET [IM114-ARIN] 19870 IN-TOUCH [BR579-ARIN] 19871 NUPNY [JB1828-ARIN] 19872 CONNECTLIVE [TT425-ARIN] 19873 INFOLINK [ACP17-ARIN] 19874 DMIND [PB630-ARIN] 19875 IPWORLDNET [LH410-ARIN] 19876 HYPERSURF [DC1101-ARIN] 19877 LORE-NET [CM933-ARIN] 19878 MEDIMPACT [BV161-ARIN] 19879 BESTNETPC [AG522-ARIN] 19880 REALCOMPII [KF266-ARIN] 19881 VTCNET [KL400-ARIN] 19882 AS-LL [TT259-ARIN] 19883 BUEHNER-FRY [TO188-ARIN] 19884 UNITED-DEVICES-COM [GW404-ARIN] 19885 ISOCENTRIC [FB211-ARIN] 19886 BOFABROKERDEALERSVCS [JC1866-ARIN] 19887 KIASN [SV129-ARIN] 19888 ATECHNO [TA274-ARIN] 19889 COOPDELVISO [LR314-ARIN] 19890 CSCI-VA-COM [RH1008-ARIN] 19891 VELO-PHX [CJ283-ARIN] 19892 VELO-PORT [CJ283-ARIN] 19893 RWT [DT503-ARIN] 19894 INTRAWORLD [SM1258-ARIN] 19895 WEBUSENETCOR [DP652-ARIN] 19896 TELEPLACE-US-TAMPA [HM305-ARIN] 19897 NEXBELL [SG729-ARIN] 19898 FIBERLINK [DC1266-ARIN] 19899 MDCC-EDU [BD163-ARIN] 19900 OOMCASN [FL152-ARIN] 19901 ALLEGRO [AI77-ARIN] 19902 NET-STATE-OHIO [DC4235-ARIN] 19903 DYDACOMP [RB1334-ARIN] 19904 TERRASPRING [BR584-ARIN] 19905 XD-SM-01 [JT910-ARIN] 19906 CHARLES-RIVER [NT67-ARIN] 19907 PIONEER-TEC [JS2299-ARIN] 19908 HOENIGRYENY9149359000 [DV244-ARIN] 19909 DAYLIGHT [DP818-ARIN] 19910 ONLIGHTINC [RG796-ARIN] 19911 SKYVAUS [DG900-ARIN] 19912 ESP-GROUP [GJ169-ARIN] 19913 ULTRAEX [JP1277-ARIN] 19914 INTELISPAN [MFG1-ARIN] 19915 AHAZA1 [MH264-ARIN] 19916 ASTRUM-0001 [GD400-ARIN] 19917 MOHEGANSUN [SM1262-ARIN] 19918 LUCASFILM [LH415-ARIN] 19919 INFORMUS [KL319-ARIN] 19920 AKINBGP [IP-FIX-ARIN] 19921 ACCESSPENNSYLVANIA [ACS24-ARIN] 19922 ARDSLEY-PARTNERS [JP1278-ARIN] 19923 SHENANDOAH-UNIV [IC3-ORG-ARIN] 19924 PROVIDENET [JA2498-ARIN] 19925 SWCHSC [DE357-ARIN] 19926 GNRCHTX-AS001 [JA848-ARIN] 19927 NHMCCD [ZS108-ARIN] 19928 ITRACKS [CC929-ARIN] 19929 VERBINDASNFORBGPROUTE [BW729-ARIN] 19930 TSPLLC [DV246-ARIN] 19931 NETGENESIS [JG1247-ARIN] 19932 FREELIANT [SS1394-ARIN] 19933 WATER-VALLEY [HS278-ARIN] 19934 TRANSPLACE [WR142-ARIN] 19935 FIRSTONLINEAUTO [MH1187-ARIN] 19936 GORDONFOODS [RH1012-ARIN] 19937 MENLO-EDU [PO141-ARIN] 19938 INTEQ-BOS [SB1135-ARIN] 19939 BCTELCO [GW384-ARIN] 19940 ACECAPE-INC [DK962-ARIN] 19941 CORPAYSOLUTIONS [MB1461-ARIN] 19942 AREALTECH-01 [AC647-ARIN] 19943 IRMI [MW880-ARIN] 19944 ITG26632 [GR354-ARIN] 19945 FRIESENS [JH1752-ARIN] 19946 FOCAL-BOSTON [MT445-ARIN] 19947 DEVRY-PHX [DR762-ARIN] 19948 IAS [AP510-ARIN] 19949 INFOTECH-NJ [GB197-ARIN] 19950 NEW-YORK-PARADE [RB1373-ARIN] 19951 DCTI-SLC-ASN-BGP4 [CY82-ARIN] 19952-19953 NSPAN-BOSTON [MV273-ARIN] 19954 ITXC-BEAVERTON [JS2485-ARIN] 19955 PINELAND-TELEPHONE [RG77-ARIN] 19956-19957 TENNESSEE-NET [SS1452-ARIN] 19958 USICA-NET [UH-ARIN] 19959 DELANOTECH [SK539-ARIN] 19960 NETSITE-INFOR [FD143-ARIN] 19961 DYNAMIC-PIPE [ON30-ARIN] 19962 EPIK [ZE46-ARIN] 19963 DOSUB-1 [RK658-ARIN] 19964 INVACARE [KH576-ARIN] 19965 AEVIA-NET [DP825-ARIN] 19966-19970 CTR1-WSTR [ZW11-ARIN] 19971 COREFACTORY [SJ367-ARIN] 19972 DIGEO-BROADBAND [JW1344-ARIN] 19973 WBS-JAN-1 [JY211-ARIN] 19974 NETCONEX [MP250-ARIN] 19975 PIL [JS2418-ARIN] 19976 EXELUS [MR921-ARIN] 19977 MBPCHICAGO [EG269-ARIN] 19978 IMPSAT-VEN [SC313-ARIN] 19979 CIBER-NET [SM1275-ARIN] 19980 TECHTRAIN-RTR [IP-FIX-ARIN] 19981 HELLER-INT [RW510-ARIN] 19982 TOWERSTREAM-PROV [DB1426-ARIN] 19983 ONVIA-SEA [SA562-ARIN] 19984 WINENT-NET [RD696-ARIN] 19985 OPTICNET-ALL [ZA11-ARIN] 19986 BUC-INTL [IS137-ARIN] 19987 CECOMM [LH423-ARIN] 19988 ROUSE-208-210-186 [BH890-ARIN] 19989 DIAMONDCONSULTING01 [MT632-ARIN] 19990 PEGASUS-TELE [SL700-ARIN] 19991 FIRSTENERGYCORP [RR956-ARIN] 19992 CALOP-63-66-184-224 [TK437-ARIN] 19993 RJOBRIEN [SK692-ARIN] 19994 REDMON-GROUP [JF898-ARIN] 19995 VSECORP [TN255-ARIN] 19996 LEBANON-MOBILE [SY112-ARIN] 19997 PENNNATIONALINSURANCE [KF9-ARIN] 19998 RELEASENOW [RO229-ARIN] 19999 JETNET-INT [LB568-ARIN] 20000 HNR-COM [DS1716-ARIN] 20001 ROADRUNNER-WEST [ZS30-ARIN] 20002 TECHTEL-UY [RB1325-ARIN] 20003 PARAGON-FCU [RS1594-ARIN] 20004 MISO [SB1176-ARIN] 20005 SANDHILLS-SA [MD520-ARIN] 20006 CORTELNET [LL392-ARIN] 20007 POND-AND-CO [JL1566-ARIN] 20008 DIRECT-FOCUS-INC [CJ291-ARIN] 20009 WADSNET [KV89-ARIN] 20010 PUTNAMLOVELL-SF [KK584-ARIN] 20011 INTERNET-SOLUTIONS [NN106-ARIN] 20012 INTERWRX-NETWORK [AW2296-ARIN] 20013 CYRUSONE [SG739-ARIN] 20014 GEARWORKS-INC [AS777-ARIN] 20015 INFOPYME-SA [JO381-ARIN] 20016 B3CORP [CB971-ARIN] 20017 DAT-CORP [CC484-ARIN] 20018 ATWORK-NORCROSS [JL1355-ARIN] 20019 CURTIS-MALLET-PREVOST [DL1204-ARIN] 20020 VITCOM-AS-1 [AJ207-ARIN] 20021 LNH-INC [LH398-ARIN] 20022-20026 EVERESTBROADBAND-NET [BC506-ARIN] 20027 LTOA [TJ332-ARIN] 20028 ENHTECH [JB2175-ARIN] 20029 QUANTITUDE [JD1212-ARIN] 20030 OSDL [AB752-ARIN] 20031 ZOOGA [ZIR1-ARIN] 20032 VITRO [RC864-ARIN] 20033 NCDC-NCREN [DS944-ARIN] 20034 AXIOM-INT [RS1600-ARIN] 20035 CONCUR-NET [DW1037-ARIN] 20036 MICRO-R-D [GG105-ARIN] 20037 SEBL [GH500-ARIN] 20038 WENDOTNET [DW555-ARIN] 20039 COMKT1 [JS2408-ARIN] 20040 SPARKLIST [BMS-ARIN] 20041 NY-DATARETURN [JR1236-ARIN] 20042 GCEC-TECHNOLOGIES [MM1838-ARIN] 20043 DKA-1 [CMD1-ARIN] 20044 UAI-ESTADO-DE-MINAS [KU30-ARIN] 20045 ABSFAX-COM [KC517-ARIN] 20046 PLACEWARE [NE53-ARIN] 20047 CITYOFVABEACH [MV281-ARIN] 20048 AMECCMI01 [WT127-ARIN] 20049 USATELEPORT [OR13-ARIN] 20050 SPPINTERNET01 [RT537-ARIN] 20051 RENTRAK [DW709-ARIN] 20052 ARBOR [AA452-ARIN] 20053 AIRCLIC [OK35-ARIN] 20054 ATG-WEST [RC447-ARIN] 20055 SURGIENT-NET [WC259-ARIN] 20056 DOTCOM [JS2515-ARIN] 20057 ATTWIRELESS-GPRS [DE362-ARIN] 20058 CCTC-LINK1 [RJ231-ARIN] 20059 CAR-PART [JS618-ARIN] 20060 PMSC-B [DW635-ARIN] 20061 INTELLIGROUP [PD465-ARIN] 20062 WASTE-MAN [JP1312-ARIN] 20063 COFFEECREEKNET [WD62-ARIN] 20064 INPHACT [RE260-ARIN] 20065 CNA [DA663-ARIN] 20066 LIVCONSULT-COM [RG821-ARIN] 20067 FORSYTHE01 [SS1473-ARIN] 20068 MAXNETWORK [AG544-ARIN] 20069 RBCDSI [NG133-ARIN] 20070 ZIPREALTY [JC2015-ARIN] 20071 ALH [DT73-ARIN] 20072 I2EYENET-COM [MC918-ARIN] 20073 KOMATSU-AMERICA-INT [CW585-ARIN] 20074 KNOWLEDGENET [ZN99-ARIN] 20075 RFERL-ORG [RL764-ARIN] 20076 ADVANIS [NA202-ARIN] 20077 HYDRAWEB [RS2012-ARIN] 20078 OFFICEGENIE [JN454-ARIN] 20079 ADSW [MW893-ARIN] 20080 AMPATH-AS [JEI2-ARIN] 20081 NET2ATLANTA [MLA-ARIN] 20082 TAGDS1 [BW690-ARIN] 20083 EDGARFILINGS-0001 [NN105-ARIN] 20084 WHITEHORSE [KB667-ARIN] 20085 UAKRON [MD924-ARIN] 20086 UHIS [DD964-ARIN] 20087 TCW-SC [MS1880-ARIN] 20088 2GEEKSANDAPIPE [SM1290-ARIN] 20089 SEVENSPACE-INC [MG982-ARIN] 20090 THESPIEGELGROUP-1 [CF465-ARIN] 20091 EFRAME-BGP-01 [TK302-ARIN] 20092 OWENS-MINOR [JS2528-ARIN] 20093 VINY [DN275-ARIN] 20094 MIDWEST-TEL [IA55-ARIN] 20095 UNIHOLD [DD964-ARIN] 20096 ESS00-ASN00 [RJ387-ARIN] 20097 VIRTUAL-IMAGE-TECH [DS1793-ARIN] 20098 BCBS-AL [GM739-ARIN] 20099 E-MARKETS [PC631-ARIN] 20100 SALIENCE [VS155-ARIN] 20101 ERIELINK-INC [EH334-ARIN] 20102 A-LA-MODE [JS2532-ARIN] 20103 VALMONT-INDUSTRIES [GL370-ARIN] 20104 SOLIDDATA [TS1021-ARIN] 20105 URICHMOND [HC215-ARIN] 20106 INTERBANKING [GQ12-ARIN] 20107 ROHMHAAS-ASN [DR877-ARIN] 20108 PIVOTTECH [AT306-ARIN] 20109 HORIZONS [DA660-ARIN] 20110 NTT [KF139-ARIN] 20111 DEVRY-KC [DR762-ARIN] 20112 DHRNETWORKS [BM1174-ARIN] 20113 AFBIS-AS [KH586-ARIN] 20114 KEATING [MF682-ARIN] 20115 CHARTER-NET-HKY-NC [MW699-ARIN] 20116 CEF-GOV-BR [RM1350-ARIN] 20117 HSBC-AR [IV32-ARIN] 20118 AFFINITAS [GG558-ARIN] 20119 KTBNET [IP-FIX-ARIN] 20120 VAWEBPROP-DC-FBURG [RW827-ARIN] 20121 BAND-X-BR [AB782-ARIN] 20122 SFNB-CORP [DA670-ARIN] 20123 TTA [LV118-ARIN] 20124 DE-TELECOMM [DL953-ARIN] 20125 VOLERA [LD291-ARIN] 20126 UC-DOM [JL1372-ARIN] 20127 KLEINSCHMIDT [ML963-ARIN] 20128 ASPWARE-01A [NA204-ARIN] 20129 MIZUHO-SC [JM2359-ARIN] 20130 DEPAUL [ZD12-ARIN] 20131 QUIKCAT [OO33-ARIN] 20132 DSC-AS [DC1282-ARIN] 20133 CASS-COL [SM1227-ARIN] 20134 NEURO [CF408-ARIN] 20135 MILLENIUM [BIS1-ARIN] 20136 MCGASN1 [KS818-ARIN] 20137 USIBB [NCG1-ARIN] 20138 SELECT-COMFORT [CW601-ARIN] 20139 PUBLIC-SYSTEMS1 [IP-FIX-ARIN] 20140 MWG-1920 [JD1231-ARIN] 20141 EDELTACOM-SUW-300 [MW1291-ARIN] 20142 SIMPLEWEB [TV150-ARIN] 20143 SUNET-1 [FY20-ARIN] 20144 L-ROOT [JC2032-ARIN] 20145 UDCOMM [UIS1-ARIN] 20146 INKTELDIRECT [DA392-ARIN] 20147 CONTINENTALBROADBAND [MD933-ARIN] 20148 PRAECIS-ASN01 [KD348-ARIN] 20149 NHLICE [SK702-ARIN] 20150 ENTEGRITY-1 [JT959-ARIN] 20151 MEDTECHINC [ML84-ARIN] 20152 NETBEYOND [KG376-ARIN] 20153 ARGUSHEALTH [CH823-ARIN] 20154 AMEX-TAX [KN49-ARIN] 20155 OCO-1 [EM211-ARIN] 20156 EMICAP [JR1252-ARIN] 20157 AHL [JB2303-ARIN] 20158 BOKU-00 [PE10-ARIN] 20159 REALESTATEFEDERATION [PM713-ARIN] 20160 DATACONVSPEC [ID60-ARIN] 20161 TRGO [TIN1-ARIN] 20162 UTDALLAS [SH973-ARIN] 20163 SUNMED [MH1202-ARIN] 20164 GO-GRAPHICS [DMS4-ARIN] 20165 BOREALIS [SE245-ARIN] 20167 281 [TM1017-ARIN] 20168 NETWORLDNOC-SLC [SP870-ARIN] 20169 GOTHAM-1 [MB1284-ARIN] 20170 MARITZFENTONMO [CG428-ARIN] 20171 VANECK [MA638-ARIN] 20172 WINFIRST-SAC [HEL1-ARIN] 20173 TELEVISA [JCH2-ARIN] 20174 PARTNERS-INTL [AL354-ARIN] 20175 LXTNKYSETEL [SA575-ARIN] 20176 MERCHANTWIRED [MAP2-ARIN] 20177 FOCAL-DALLAS [MT445-ARIN] 20178 INTERNETEMC [LD293-ARIN] 20179 BONDS-AS [JN460-ARIN] 20180 MERCANTRADE [EB433-ARIN] 20181 SORCERON [PP1859-ARIN] 20182 XTIME-ASN [XH3-ARIN] 20183 VERICENTER [IP-FIX-ARIN] 20184 STUDENT-FINANCE [RC1113-ARIN] 20185 GEUS-CABLE-INTERNET [JT918-ARIN] 20186 BASELINEFINANCIALPHI [JT376-ARIN] 20187 PASSPORTHEALTH [MH1227-ARIN] 20188 GTESS [RM1356-ARIN] 20189 TRIENEASN01 [AL460-ARIN] 20190 ZONZORP-NET [DS580-ARIN] 20191 PUC [EB273-ARIN] 20192 MATRIXTI [BD607-ARIN] 20193 NCWSINC-BLK [DK745-ARIN] 20194 BEARTECH [YY59-ARIN] 20195 RELERA-CO [JT1092-ARIN] 20196 OGDEN-N [MM1869-ARIN] 20197 MSS-ECL [MH1291-ARIN] 20198 ALIBRIS [TW575-ARIN] 20199 FLACCESS [BC910-ARIN] 20200 AMBAC-FINANCIAL-GROUP [AL450-ARIN] 20201 SPACECOM [WV3-ARIN] 20202 HAIR-CLUB-FOR-MEN [SN309-ARIN] 20203 RCGINET [KT274-ARIN] 20204 NOVOLINK-HOUSTON [GM747-ARIN] 20205 AMPLEX [MR735-ARIN] 20206 SUNDT-SDG [DV251-ARIN] 20207 GIGARED [GF280-ARIN] 20208 WEBJOGGER [AG177-ARIN] 20209 GLATFELTERS-INTERNET1 [SN310-ARIN] 20210 NOWONLINE [JL1389-ARIN] 20211 HWI-ASN00 [TJ272-ARIN] 20212 MOTION-INTERNET [CL613-ARIN] 20213 DSLBROADBAND [BSI2-ARIN] 20214 ATT-BROADBAND [MD938-ARIN] 20215 SEFL [ZZ1558-ARIN] 20216 PCCVAL [DW880-ARIN] 20217 PERCEPTA-GW1-AS [PU20-ARIN] 20218 BLACKSUN [JT967-ARIN] 20219 INTERACTIVE-INK [PW379-ARIN] 20220 INDIAN-WELLS [DW1059-ARIN] 20221 IATA [ES567-ARIN] 20222 PLTE [RL2354-ARIN] 20223 AS-RJSON [RS8084-ARIN] 20224 SYNERGYINVESTMENTS [BW754-ARIN] 20225 TELJET [DS1854-ARIN] 20226 ROADWAY-EXPRESS [BG656-ARIN] 20227 MOUNTAINNET-SWV [SA570-ARIN] 20228 PACNET-MX [MM1338-ARIN] 20229 MERRICK [MF703-ARIN] 20230 IQWORKS [CP545-ARIN] 20231 ROADRUNNER-CENTRAL [ZS30-ARIN] 20232 AS1-ORBITALL [EN115-ARIN] 20234 HNTB [JG191-ARIN] 20235 EFFORTS [DS1856-ARIN] 20236 PERACON-NY [WDG1-ARIN] 20237 XPORTA [JF932-ARIN] 20238 TELENISUS-CHARLOTTE [JTS1-ARIN] 20239 ALL-IN-1 [CN278-ARIN] 20240 VENTURAFOODS [WM258-ARIN] 20241 TAEC [WL159-ARIN] 20242 NETLIBRARY-1 [RD719-ARIN] 20243 OPTIUS [FK725-ARIN] 20244 DIAN [JC625-ARIN] 20245 OZ-TELEGLOBE [KP412-ARIN] 20246 AS-IMS [JJ576-ARIN] 20247 IC531954 [IC116-ARIN] 20248 AS-IVMG [JT956-ARIN] 20249 JEFFERIES [EH297-ARIN] 20250 RMWC-NET [TB778-ARIN] 20251 RCG-PSD [SC1006-ARIN] 20252 JSIWMC [VIV3-ARIN] 20253 VISA-DPS [SC1007-ARIN] 20254 ALLTEL-WIRELESS-DATA [DR916-ARIN] 20255 TECNOWIND [EC520-ARIN] 20256 ULTRAMAR [JC1969-ARIN] 20257 FTC-INET [AE169-ARIN] 20258 ANALOG-DEVICES [ZA85-ARIN] 20259 VELO-RENO [CJ283-ARIN] 20260 TRAFFIC01 [PM734-ARIN] 20261 REDSQ-NET [JS2625-ARIN] 20262 SCHOLARONE [SA798-ARIN] 20263 SAFEWEB [MI151-ARIN] 20264 JONESBORO [SW714-ARIN] 20265 UMR [MB1533-ARIN] 20266 VESPER-BR [JG1326-ARIN] 20267 INTERNETSERVER [HB138-ARIN] 20268 MNNS [BG602-ARIN] 20269 DANTIS-AS-LOOP [TW592-ARIN] 20270 ENTERPRISE [MRJ1-ARIN] 20271 DOGEAR [BK5-ARIN] 20272 TALKINGNETS [PS755-ARIN] 20273 TELXAR [TNO1-ARIN] 20274 GENESYS-SOFT [MB1540-ARIN] 20275 SIERRA-ATLANTIC-FREMT [SK721-ARIN] 20276 TECHSPACE-AUSTIN [SE253-ARIN] 20277 TECHSPACE-SF [SE253-ARIN] 20278 TECHSPACE-TORONTO [SE253-ARIN] 20279 MEDIAONDEMAND [SD647-ARIN] 20280 WORLDQUEST-1 [RP722-ARIN] 20281 GOLIN-HARRIS [NH130-ARIN] 20282 NYFX-RTR [WG130-ARIN] 20283 CTC-INTERNET-MN [JF752-ARIN] 20284 INETUASN1 [MR963-ARIN] 20285 SUTRA-NETWORKS [KT291-ARIN] 20286 3DAYBLINDS [FA110-ARIN] 20287 DODORA-1 [RG835-ARIN] 20288 UBARRY-NET [FM237-ARIN] 20289 BENTLEYCOM [RG77-ARIN] 20290 LYNCHINC [DL992-ARIN] 20291 INFYNET [MJ17-ARIN] 20292 EXECUTIVE-CON [JM2433-ARIN] 20293 LOCALASN1 [RC2099-ARIN] 20294 MTN-UGA [MS14-ARIN] 20295 FILERTELEPHONE [JG1335-ARIN] 20296 VIANETA [SO185-ARIN] 20297 CCDV [JA892-ARIN] 20298 TIBBANK [BU26-ARIN] 20299 NEWCOM-AMERICAS [JS2405-ARIN] 20300 GAP-INSTRUMENT-CORP [JE79-ARIN] 20301 NASA-PROTO-NET [KW503-ARIN] 20302 SARES [LF231-ARIN] 20303 PRONET-CHEN [RJW2-ARIN] 20304 JVLNET [JK1220-ARIN] 20305 BSCH-ARGENTINA [AEK1-ARIN] 20306 ADELPHI [LC493-ARIN] 20307 CTOLO [JB2300-ARIN] 20308 STARTEKUSA [JB461-ARIN] 20309 NASDAQFINSYS [NTC1-ARIN] 20310 ITW-CORPORATE [JI131-ARIN] 20311 VALERO [JS2646-ARIN] 20312 CNTI-REACCIUN [DRS1-ARIN] 20313 SMSI [DO306-ARIN] 20314 CONAGRAFOODS [JT989-ARIN] 20315 STELLCOM [ID64-ARIN] 20316 SECTOR-NET1 [AS1020-ARIN] 20317 TDECU [DY40-ARIN] 20318 MOONGLOBAL [PC41-ARIN] 20319 DALTON-U [JC1831-ARIN] 20320 EVENLINK [SM147-ARIN] 20321 ALTGSA [CDF1-ARIN] 20322 WOWEMPLOYERS [TF389-ARIN] 20323 SEEBEYOND [DM1615-ARIN] 20324 BLOUNTSVILLE-TEL-CO [WM260-ARIN] 20325 PATELCOCU [JS2649-ARIN] 20326 GLOBESPAN [CH862-ARIN] 20327 FORBES-COM [NO134-ARIN] 20328 MURATA-ELECTRONICS [SH1007-ARIN] 20329 EFRUIT [AG438-ARIN] 20330 NYS-UNIFIED-COURTS [DD1008-ARIN] 20331 GMACMR [BA422-ARIN] 20332 SFSLTD [GE143-ARIN] 20333 EXANIUM [DM1684-ARIN] 20334 DDSCONNECT01 [HM332-ARIN] 20335 ADVERTISING-AS [CY93-ARIN] 20336 CARESCIENCE [BS1503-ARIN] 20337 SQUARE1 [SH1014-ARIN] 20338 AXCL [DF298-ARIN] 20339 MAREXATLANTA [SM1359-ARIN] 20340 ISPHONE-NET [RC1101-ARIN] 20341 MARCONI-MEDICAL [LV125-ARIN] 20342 PSKNET [TS1067-ARIN] 20343 PROVALUE-1 [BP574-ARIN] 20344 MAGNOLIA-NET [EO13-ARIN] 20345 GEONET [GC552-ARIN] 20346 SOC-OF-ACTUARIES1 [MD972-ARIN] 20347 WEBCOUNTRY [SL746-ARIN] 20348 PMCO-AS [AS909-ARIN] 20349 ESTOREFIXTURE [JA899-ARIN] 20350 MCT-TELECOM-INTERNET [IO19-ARIN] 20351 PARTS123 [MM212-ARIN] 20352 LHS [CH147-ARIN] 20353 IRGCORP [RV302-ARIN] 20354 AVICI-SYSTEMS [DE65-ARIN] 20355 SOLID-BRTECH [CJ197-ARIN] 20356 BACAVALLEY-COM [KA288-ARIN] 20357 LIVEVAULT [MD974-ARIN] 20358 MBPSANTAFE [EG269-ARIN] 20359 NANOCORE [MH1152-ARIN] 20360 MOBSHOP [MNO2-ARIN] 20361 NET-GLOBALNET-SA [JK1229-ARIN] 20362 THOMSON-THOMSON [RH1104-ARIN] 20363 IMPSAT-PERU [DP789-ARIN] 20364 LMS-NA [TA374-ARIN] 20365 EW-SCRIPPS [JN485-ARIN] 20366 GTRIADUSA [BM1247-ARIN] 20367 COMMERCEQUESTTPAFLA [PS762-ARIN] 20368 ALPHABLOX-1 [KC433-ARIN] 20369 PALMER-CAY [LT200-ARIN] 20370 USAT [TF395-ARIN] 20371 LIBGO [EH342-ARIN] 20372 GOBIERNOPR-AS [AA475-ARIN] 20373 PARAGONSMARTTECH [GM770-ARIN] 20374 FOX-INC [GC553-ARIN] 20375 IBM-CORPORATE [GM772-ARIN] 20376 HUBRIS [CO70-ARIN] 20377 MLODE-COM [DM377-ARIN] 20378 FUSIONONE [KW508-ARIN] 20379 NET-BAKER [MK164-ARIN] 20380 TRICOMPICTURES [SU29-ARIN] 20381 CABLELABS [DC377-ARIN] 20382 CLIFTONGUNDERSON [PB644-ARIN] 20383 GREENBAYNET [EC384-ARIN] 20384 NWLRBD [ZN62-ARIN] 20385 ACCESSLINE-COM-1000 [JC2139-ARIN] 20386 IONEX [JF945-ARIN] 20387 PANAMSAT [ZP65-ARIN] 20388 KEYLIME [IY19-ARIN] 20389 AS-SAVINGS [KO153-ARIN] 20390 FSS [JLW44-ARIN] 20391 011AV8ER810QUALITY223 [EW284-ARIN] 20392 WESTPANET [SH1020-ARIN] 20393 BEANSTALK [JR671-ARIN] 20394 LOCAL-ACCESS [JW1423-ARIN] 20395 DECORATETODAY [TP581-ARIN] 20396 FIDMXV15 [AAC1-ARIN] 20397 BOXLAKE [KP420-ARIN] 20398 NETISUN [RJ384-ARIN] 20399 ASN-NET [CT196-ARIN] 20400 CUDIRECTCORPORATION [RM1362-ARIN] 20401 HOSTWAY-1 [AN94-ARIN] 20402 OSRAM-SYLVANIA [RM5926-ARIN] 20403 DSL-ONLY-PDX [BT360-ARIN] 20404 RRIHOUSTON [EE126-ARIN] 20406 BRASLINK [FC173-ARIN] 20407 CALPRTECH-CAUSA [BB1274-ARIN] 20408 NTTA [SB1252-ARIN] 20409 AUTONATION-ASP2 [NO139-ARIN] 20410 AIRBAND-COMMUN1 [KG320-ARIN] 20411 SPEAR-LEADS-KELLOGG [HP149-ARIN] 20412 BHFC-NET [RF99-ARIN] 20413 CCIU-1 [KV12-ARIN] 20414 ELBO [BG669-ARIN] 20415 VP-MSN [JZ122-ARIN] 20416 GCC-01 [BB1279-ARIN] 20417 WHEELHOUSE [RS1711-ARIN] 20418 DACAS-NET [AM1313-ARIN] 20419 AXILAR [BK547-ARIN] 20420 ANGARA-AS1 [DB1712-ARIN] 20421 1STTECHCU [PJ227-ARIN] 20422 WEKZ-NET [CS506-ARIN] 20423 MULTICAST-MEDIA [JM2482-ARIN] 20424 ZOOMLOT [RN370-ARIN] 20425 VIRAGELOGIC [AB821-ARIN] 20426 PWC-AS [AR401-ARIN] 20427 AAAE [SL756-ARIN] 20428 WIREONE-AS [CF382-ARIN] 20429 GUITAR-CENTER-AS2 [JT470-ARIN] 20430 EQUISERVE-LP [RT568-ARIN] 20431 WINFIRST-DAL [HEL1-ARIN] 20432 PEOPLES-COMMUNICATION [RG521-ARIN] 20433 TL-MABOS [TT329-ARIN] 20434 ALLIANCE-NETWORKS [DV258-ARIN] 20435 GEMPLEX [JM2488-ARIN] 20436 PGTC-COM [ZP100-ARIN] 20437 PROVIDENT-MUTUAL [DT569-ARIN] 20438 LAQUINTA [MB68-ARIN] 20439 LACERTE [AH108-ARIN] 20440 COMMSOUTH [JD1298-ARIN] 20441 HEALTHALLIES [ML1036-ARIN] 20442 IFLOOR [CS1089-ARIN] 20443 ONE-BUCKHEAD [MLA-ARIN] 20444 INSTILL-CORP-AS1 [CR605-ARIN] 20445 METROFIBERLINK [HNA-ORG-ARIN] 20446 VITCOM-AS-2 [AJ207-ARIN] 20447 CADMUSCOMMNET [EE128-ARIN] 20448 VPNTRANET-LLC [SS1568-ARIN] 20449 EDUPOP [RUH-ORG-ARIN] 20450 SANITORS05022001 [JH1327-ARIN] 20451 CPCNET [BM1035-ARIN] 20452 BSU [VD45-ARIN] 20453 ROGERS-WIRELESS [AS1037-ARIN] 20454 HIGHHOSTING-COM [JWM1-ARIN] 20455 NRTC-ORG [RG242-ARIN] 20456 BINDLEY [MZ193-ARIN] 20457 INACOM-MADISON-WI-USA [BV179-ARIN] 20458 CATSKILL-ON-LINE [PC681-ARIN] 20459 TELECOM-NAMIBIA-AS [TNI1-ARIN] 20460 TFBNET [JL1457-ARIN] 20461 MYPT-SCH [MO335-ARIN] 20462 COMPUGEN [AS958-ARIN] 20463 TRSYSTEMS7704489008 [TR541-ARIN] 20464 POLYCOM [SK737-ARIN] 20465 PARADYM [JC2157-ARIN] 20466 BEEFNET [DH1373-ARIN] 20467 SW-ORG-AS [ET198-ARIN] 20468 VALORTELECOM [KB716-ARIN] 20469 TRIMETNET [RJ417-ARIN] 20470 CYGNIFI-AS [NSC2-ARIN] 20471 MONCUR [DM1713-ARIN] 20472 SYNN [CP573-ARIN] 20473 NETTRANS [DA899-ARIN] 20474 NCI-VERISTAR-1 [JL1459-ARIN] 20475 GLOOP [TM1441-ARIN] 20476 TELVERSE [PP417-ARIN] 20477 RANDOLPHTELEPHONE [FC253-ARIN] 20478 GENMILLS [SL723-ARIN] 20479 TCF-ASN-TCF [SG809-ARIN] 21504 AMERICATAB [BA223-ARIN] 21505 EXENET-AS [JS2716-ARIN] 21506 FUB [MHC3-ARIN] 21507 HASTINGS [TM388-ARIN] 21508 ATT-BROADBAND-1 [BW785-ARIN] 21509 APOLLONYC [BB548-ARIN] 21510 TRISTAR [DF847-ARIN] 21511 NCSBN [CM1062-ARIN] 21512 ETELECARE [BB1293-ARIN] 21513 PIKE-ONLINE [JH1906-ARIN] 21514 PROXYMED [EG202-ARIN] 21515 NET-SISQTEL-NET1 [DM1726-ARIN] 21516 TECHSPACE-BOSTON-MASS [SE253-ARIN] 21517 TECHSPACE-95-MORTON [SE253-ARIN] 21518 INTEGRIS-HEALTH [DW1102-ARIN] 21519 FISHERCOMM [ZF50-ARIN] 21520 AS-ITAM [UF5-ARIN] 21521 BANCTEC [JM2515-ARIN] 21522 ROADRUNNER-MNPLS [ZS30-ARIN] 21523 LEASENET [RM1451-ARIN] 21524 REDIFFVALUCOMONLINE [VR89-ARIN] 21525 AS-SPL [BM107-ARIN] 21526 NETGATEWAY-1 [CP580-ARIN] 21527 COVENANT-EYES [CR637-ARIN] 21528 ALASCONNECTINC [SC1060-ARIN] 21529 CDC-AMN [JG1367-ARIN] 21530 EPSIIA-HEPSIIAN [MC1378-ARIN] 21531 CTUSA-NET [DK62-ARIN] 21532 IHE [RL830-ARIN] 21533 TERREMARK [VS121-ARIN] 21534 FREEBAIRN [JF972-ARIN] 21535 BALSER-COMPANIES [JD1036-ARIN] 21536 DPI-MERCHANT-SERVICES [DF691-ARIN] 21537 MBPPALOALTO [EG269-ARIN] 21538 GENELOGIC-BGP [JO421-ARIN] 21539 VONAGE [MD1003-ARIN] 21540 LEWIS-ROCALLP [SS1580-ARIN] 21541 CCORB [CS1096-ARIN] 21542 ENERGYSERVICESGROUP [LC505-ARIN] 21543 RITEAID [ZR50-ARIN] 21544 RIVERSTONE [AG645-ARIN] 21545 KCOENET [JW1053-ARIN] 21546 WWCLLC [RT563-ARIN] 21547 REVNETS [JB2363-ARIN] 21548 VDN [CM892-ARIN] 21549 IRON-MOUNTAIN [MR1004-ARIN] 21550 JUNTOS [MM2002-ARIN] 21551 HIGHBRIDGENY [AC732-ARIN] 21552 ALLAMERICANSEMI [CA409-ARIN] 21553 HENEGAN [MN398-ARIN] 21554 CYBERLYNK [MH579-ARIN] 21555 LHTC [JS2755-ARIN] 21556 RELOACTION [FA115-ARIN] 21557 ERS [MS2064-ARIN] 21558 SC-JOHNSON [JM10608-ARIN] 21559 MICROFINANCIAL [CH891-ARIN] 21560 CAPITAL-TECHNOLOGY [CF146-ARIN] 21561 LESSCHWABMO [JW1333-ARIN] 21562 THEINNET [BP557-ARIN] 21563 COVISINT [JS2756-ARIN] 21564 NS-PROVINCIAL [BM1289-ARIN] 21565 HTCC [HS283-ARIN] 21566 OSIRISCOMM [WH230-ARIN] 21567 BSI-NCP-00A-00001 [BCV2-ARIN] 21568 NYTD [DR977-ARIN] 21569 SHAWGRP [JT1016-ARIN] 21570 ACI-1 [MBG1-ARIN] 21571 MLS-WIRELESS [RP869-ARIN] 21572 HOLAI [JB2001-ARIN] 21573 HEALTHPARTNERS [TW22-ARIN] 21574 BIS-BR [MRH1-ARIN] 21575 MILLICOM-PERU [ET200-ARIN] 21576 TELENTENTEUS [IT78-ARIN] 21577 TOLEDOTELNET [RR1024-ARIN] 21578 UNAB [JM2555-ARIN] 21579 ALLC [MR1014-ARIN] 21580 ARBROS [TJ285-ARIN] 21581 MMCC-AS [CV188-ARIN] 21582 NAU-AS [CVM-ARIN] 21583 WORLD-INTERNET-ONLINE [CW663-ARIN] 21584 ECHOPLEX [JS2194-ARIN] 21585 WAVEOPIA [PT294-ARIN] 21586 SWKO [DB147-ARIN] 21587 SAI-AS [SS1598-ARIN] 21588 USH [JT871-ARIN] 21589 1800CON-TECHCENTRE [PP427-ARIN] 21590 OPTIGLOBE-ARGENTINA [FK725-ARIN] 21591 NSINOC-KC1 [GJ190-ARIN] 21592 MGRENCODING [TN274-ARIN] 21593 ZANTAZ-US [RN380-ARIN] 21594 IBSA [CY99-ARIN] 21595 BAXTER [IP-FIX-ARIN] 21596 SECURE-LINK [SR778-ARIN] 21597 KORE [ZW57-ARIN] 21598 PROGRESS-ENERGY [NM287-ARIN] 21599 NETDIRECT-1 [LO98-ARIN] 21600 LMR [CB1086-ARIN] 21601 WEBSOFT-NET [CC2816-ARIN] 21602 WEBBASIS [RP875-ARIN] 21603 ULSAMEX001 [AN186-ARIN] 21604 CHEMONICS-USA [PS803-ARIN] 21605 INCURRENTCORP [RA623-ARIN] 21606 ECASHMGT-COM [CL657-ARIN] 21607 ALP1 [NO38-ARIN] 21608 MATERIALNET [ND157-ARIN] 21609 CSI-01 [WB260-ARIN] 21610 CRYSTAL [AK549-ARIN] 21611 NET-WSGWIN [SW30-ARIN] 21612 FIOCRUZ-RJ [FT140-ARIN] 21613 LIGHTNINGX [AF171-ARIN] 21614 LATLINK-NET [JG1204-ARIN] 21615 SHAWUS [RS1472-ARIN] 21616 NECA [BO19-ARIN] 21617 NARA [HU6-ARIN] 21619 VELOCITEL [DS1957-ARIN] 21620 VESTANET [JK1273-ARIN] 21621 RESPONSYS-2 [JF534-ARIN] 21622 PR-NEWSWIRE-USA-1 [GR60-ARIN] 21623 SPACELINK [JF983-ARIN] 21624 GLOBALBUSINESSCOMM-TC [TW573-ARIN] 21625 VODAFONEGROUP-GLOBAL [KG405-ARIN] 21626 DMPAYROLL [WD181-ARIN] 21627 RICHMOND-CONNECTIONS [RG77-ARIN] 21628 ELOGEX [IU8-ARIN] 21629 AMCC-NET [TM1096-ARIN] 21630 PDS-NEWROADS [GG114-ARIN] 21631 MTREX-NET [CO200-ARIN] 21632 MUDDLEWORKS [DM1759-ARIN] 21633 DOI-NBC-NET [BM1297-ARIN] 21634 EUCLIDNETWORK [ER292-ARIN] 21635 PCCWBTN-AS [BR474-ARIN] 21636 PROMETRIC [MR1017-ARIN] 21637 BROADBANDIP [SG833-ARIN] 21638 PRINCESS-COM [CG211-ARIN] 21639 MH2 [RB1467-ARIN] 21640 CDY [CDY1-ARIN] 21641 MBPHOUSTON [EG269-ARIN] 21642 MBPWASHDC [EG269-ARIN] 21643 MBPNY [EG269-ARIN] 21644 MBPLA [EG269-ARIN] 21645 MBPCHARLOTTE [EG269-ARIN] 21646 FISHER [BB1330-ARIN] 21647 AS-NETWORKS [KQ17-ARIN] 21648 GRAVITON [CE209-ARIN] 21649 DCAS [SW873-ARIN] 21650 WESTTELCORP [ZZ626-ARIN] 21651 AAL [PN83-ARIN] 21652 PWC [ADL8-ARIN] 21653 NET-KENOKOZIE-01 [ES426-ARIN] 21654 GJ-USA [EH297-ARIN] 21655 ENCODA-ECOMMERCE-NET [BD70-ARIN] 21656 FIRST-ANALYSIS [EH297-ARIN] 21657 INTERNETAVENUES [GP417-ARIN] 21658 TENASN1 [GD446-ARIN] 21659 CAMBRIDGE-CO-OP [DH423-ARIN] 21670 AUDIBLE [MS1973-ARIN] 21671 MBHYDRO [BH154-ARIN] 21672 EDGE2NET [CR635-ARIN] 21673 MEDIFAX [BJ396-ARIN] 21674 WORLDCONNECTION [CHM2-ARIN] 21675 INTER-TEL-NET [TB891-ARIN] 21676 NETWORKS-ONLINE [GG608-ARIN] 21677 DISTRIBUTEL-QC [PK410-ARIN] 21678 NEW-BREED [JC1554-ARIN] 21679 IWT-01 [SO232-ARIN] 21680 GWLNET [JD919-ARIN] 21681 ANDOVER-TRADING [PC690-ARIN] 21682 PFHQ-ASN1 [CC1045-ARIN] 21683 INVESTEC-EC [PS557-ARIN] 21684 CYBERINETBGP [JT1034-ARIN] 21685 GRSGROUP [TG536-ARIN] 21686 SYSTEMMETRICS-1 [EF228-ARIN] 21687 HVDN-ROUTING [PC697-ARIN] 21688 CTWISP [RR782-ARIN] 21689 ANVICOM-AS [MW985-ARIN] 21690 ACYBERLINK-NET1 [VL123-ARIN] 21691 NETZOA [DI102-ARIN] 21692 SECODAM [EE118-ARIN] 21693 XCEL-ENERGY [DH234-ARIN] 21694 FRESNOCOE [SH1081-ARIN] 21695 MAUIBUILT [RP214-ARIN] 21696 PER-SE [JC2238-ARIN] 21697 JMXI [MO297-ARIN] 21698 NEBRIX-CA [GC373-ARIN] 21699 SVSKYLAN [NG149-ARIN] 21700 V-N-HERMES [JH1139-ARIN] 21701 SOLUCIENT [ZS122-ARIN] 21702 HADDAD [GG612-ARIN] 21703 NETWORKS-AND-MORE [JP1469-ARIN] 21704 NYCBOE-BGPNET [LP275-ARIN] 21705 COLOGIX-COMMUNICATION [RM1500-ARIN] 21706 KHHTE [RB5584-ARIN] 21707 LASD [LP316-ARIN] 21708 SDCOE [JC2246-ARIN] 21709 IMPLEX-NET [ES605-ARIN] 21710 AN-PVL-AS [PV154-ARIN] 21711 WEB-IDEALS [SH1074-ARIN] 21712 MOTE-MARINE-LAB [DH1414-ARIN] 21713 BULLOCH [AM903-ARIN] 21714 LFBGPAS01 [CB1104-ARIN] 21715 NSPNET [JS2820-ARIN] 21716 TRADOS-ASN01 [JMH1-ARIN] 21717 MCCANN-ERICKSON [RI87-ARIN] 21718 NW-NATURAL-GAS [RS1770-ARIN] 21719 CHL [JM2612-ARIN] 21720 SUNGARD-PENTAMATION [GRS6-ARIN] 21721 LEMI [TL4-ARIN] 21722 UNITEL-AMERICA [SMO-ARIN] 21723 RADIANT-VAN2 [JM1432-ARIN] 21724 RADIANT-TORONTO [JM1432-ARIN] 21725 BIGRIVER [JK478-ARIN] 21726 RGT-48W [IA22-ARIN] 21727 HAMLINE-EDU [ZH75-ARIN] 21728 OCSNY [TS198-ARIN] 21729 CROWN-EQUIPMENT [KK636-ARIN] 21730 RRV-NET [TM948-ARIN] 21731 SHARED-IP [JC2249-ARIN] 21732 NETGURU [SM1429-ARIN] 21733 INCUOFFICE [TH744-ARIN] 21734 TRADINGTECH-TTNET [NO142-ARIN] 21735 GANNETT5-NET [REW14-ARIN] 21736 GANNETT4-NET [REW14-ARIN] 21737 SPRINGNET [TC810-ARIN] 21738 WORLDSITES [DH1423-ARIN] 21739 TSOL [RN362-ARIN] 21740 ENOMAS1 [BB1753-ARIN] 21741 VISUALBYTE [AS1075-ARIN] 21742 SAVITECH [AB870-ARIN] 21743 VIAFONE-BLK1 [JR1775-ARIN] 21744 SST-US [PIA2-ORG-ARIN] 21745 FSAFOOD [NR162-ARIN] 21746 IDTTVTV-REMOTEFARMS [PB722-ARIN] 21747 SHERBTEL-NET [PS334-ARIN] 21748 MPAA [PE150-ARIN] 21749 MOLAM [WK130-ARIN] 21750 CPOINT-NET-1 [PH2349-ARIN] 21751 TELECORP-PCS [JM2323-ARIN] 21752 SAINT-ROSE [MH1234-ARIN] 21753 CONSORCIOCHILE [AL608-ARIN] 21754 MARKEL-CORPORATION [RB1536-ARIN] 21755 HSLNET [RP895-ARIN] 21756 OT-DST [OB55-ARIN] 21757 HTC-COMM [AW432-ARIN] 21758 MODINE-MANUFACTURING [CH910-ARIN] 21759 NRUCFC [PA269-ARIN] 21760 XEROX-OPB [MAM11-ARIN] 21761 EVOLVEONE [VB129-ARIN] 21762 QUALITY-DISTRIBUTION [EH377-ARIN] 21763 SEMPRA-ENERGY-TRADING [CM1116-ARIN] 21764 ESOFTINC-NET [JKB1-ARIN] 21765 MAGENTA [CL672-ARIN] 21766 BEN-LOMAND-TEL [JH1969-ARIN] 21767 WASHINGTON-COLLEGE [CEC1-ARIN] 21768 PROMOCION [OI12-ARIN] 21769 HERE [SG191-ARIN] 21770 GLOBALCO-43771 [JA2244-ARIN] 21771 NUCOR [DS2017-ARIN] 21772 SKY-WEB [DA526-ARIN] 21773 EXODUSPERFORMANCELABS [RB1546-ARIN] 21774 IDYIANET [BS1327-ARIN] 21775 1HAYES-LEMMERZ [MJ392-ARIN] 21776 CLSAIKMN [KE194-ARIN] 21777 EGCS [DO197-ARIN] 21778 NET-DIDATA-NY [MF706-ARIN] 21779 VIGILINXIPDUB [ES612-ARIN] 21780 GRIFFITH-LABORATORIES [TK532-ARIN] 21781 WCASD-NET [CR648-ARIN] 21782 PLATEAU [GL408-ARIN] 21783 SILVERNET [DM1801-ARIN] 21784 ARCHCORP [JB2282-ARIN] 21785 DWHOMES [RM1517-ARIN] 21786 SAN-MATEO [ZS133-ARIN] 21787 CERIDIAN [JP1491-ARIN] 21788 HOSTNOC [JNK1-ARIN] 21789 168-244 [RM452-ARIN] 21790 LIKEWHOA [BU31-ARIN] 21791 TOOLCASE [JL2877-ARIN] 21792 WORKGROUPVIDEO [DS2010-ARIN] 21793 TENINOTELEPHONE [SN66-ARIN] 21794 ILLINOISPOWER [DR1014-ARIN] 21795 DALTILE-DALCORP [LV137-ARIN] 21796 SPE [GT286-ARIN] 21797 WCCS [JP737-ARIN] 21798 INTERNATIONALDELIVERS [BL668-ARIN] 21799 MWDSC [JM2640-ARIN] 21800 KHINET [ME419-ARIN] 21801 EXCALNET [RH318-ARIN] 21802 GLOBALIS1 [GO95-ARIN] 21803 MYDURANGO-NET [VB131-ARIN] 21804 ACCESS-SK [IA103-ARIN] 21805 RICOH-SILICON-VALLEY [AG74-ARIN] 21806 NATIONAL-FUEL [JH1959-ARIN] 21807 DOLE-PACKAGED-FOODS [RS1704-ARIN] 21808 STUDIO-216-240-102 [JL2426-ARIN] 21809 LAVANTURE-DOM [BW808-ARIN] 21810 TEMPESCHOOLS [JS507-ARIN] 21811 POPULATION-SERVICES [JG1423-ARIN] 21812 IMAGROUP [JH1944-ARIN] 21813 SCHEFFEL-COMPUTERS [BR615-ARIN] 21814 PARSONS [HO35-ORG-ARIN] 21815 INFICORP [RH1192-ARIN] 21816 TITANTELECOM [DR1021-ARIN] 21817 COLOCO [CB1120-ARIN] 21818 BWTELCOM [WH153-ARIN] 21819 WTN [HO68-ARIN] 21820 AXISPOINT-60HUDSON [MN146-ARIN] 21821 MONTEFIORE [MN398-ARIN] 21822 JDBS [RS1787-ARIN] 21823 CMIT-1 [ST168-ARIN] 21824 EASYCO [GAB2-ARIN] 21825 BTS-XNET [KE494-ARIN] 21826 ICNET-1 [RV256-ARIN] 21827 OCCAMNETWORKS [NO143-ARIN] 21828 TCOE [KM114-ARIN] 21829 JADETECH-NET [DF665-ARIN] 21830 CSTEL-NET [TB951-ARIN] 21831 DFSAS-3500 [JD1366-ARIN] 21832 ICODE [AJ220-ARIN] 21833 SBS-TECH [PB732-ARIN] 21834 INTERLINK1 [ML1088-ARIN] 21835 KEIL-GATEWAY [JW1497-ARIN] 21836 CWI-PACKETEXPRESS [BWC3-ARIN] 21837 CYBERMILL [RM2060-ARIN] 21838 IMPSAT-PIT [NO112-ARIN] 21839 CLASSMATES-2 [JC1004-ARIN] 21840 SAGONET-TPA [JM2544-ARIN] 21841 ETRIEVENET [PB735-ARIN] 21842 PJM [CLC1-ARIN] 21843 TERAWAVE-GW [JW1504-ARIN] 21844 INFLOW-CO [TC520-ARIN] 21845 INFLOW-PH [JD1068-ARIN] 21846 INFLOW-IRVINE [LC541-ARIN] 21847 INFLOW-MN [MJ334-ARIN] 21848 INFLOW-PRTLND [AB740-ARIN] 21849 PENTON [JT1058-ARIN] 21850 OPAY-SR [SC924-ARIN] 21851 POSITIONTECH [JS2874-ARIN] 21852 DISNW1 [RM1529-ARIN] 21853 KRASDALE-FOODS [JA984-ARIN] 21854 DP-IS [CB999-ARIN] 21855 GOODTECH-SC5 [TC842-ARIN] 21856 NOKIA-SALO [SE189-ARIN] 21857 PROHEALTH [WJB4-ARIN] 21858 ACCESS-DATA-CORP [SR561-ARIN] 21859 DASH-1 [JP1515-ARIN] 21860 FL-GRIP [ZF34-ARIN] 21861 FOSSIL [AE196-ARIN] 21862 ISIS [MVL1-ARIN] 21863 DMVNOC [GC601-ARIN] 21864 BEND-BROADBAND [BC17-ARIN] 21865 ARA-AS-1 [AR567-ARIN] 21867 CDSINET-NET [JN532-ARIN] 21868 NESL [NR168-ARIN] 21869 IWAY-NET1 [CB1132-ARIN] 21870 JUNIPER-HERNDON [MN425-ARIN] 21871 UCICOM [JM2671-ARIN] 21872 TOWERS-PERRIN [SD2638-ARIN] 21873 NEWMN [LM636-ARIN] 21874 MERCER [TC847-ARIN] 21875 SANDSRIVER-WIRELESS [DS2034-ARIN] 21876 GLOBALI [RL871-ARIN] 21877 CSC-USA [MH1367-ARIN] 21878 ACTIVE-COMM [MTA10-ARIN] 21879 TIDALSOFT [GB467-ARIN] 21880 BERKLEY-PUREFISHING [CH115-ARIN] 21881 INSIGHT-HEALTH [DN386-ARIN] 21882 PRIORITYNETWORKS [BT332-ARIN] 21883 C-COM-PMA [RM1537-ARIN] 21884 LIGHTSPAN [ER291-ARIN] 21885 GEO-PERCEPTION [LH236-ARIN] 21886 MINDSHIFT [KC601-ARIN] 21887 FICFIG [LK263-ARIN] 21888 SITEC-MX [JLM7-ARIN] 21889 RAPIDSYSTEMS [DJ909-ARIN] 21890 DURACOM-OK1 [GB781-ARIN] 21891 BUGGS-NET [RG77-ARIN] 21892 MACROVISION [PC713-ARIN] 21893 TRENWICK62901 [TAT1-ARIN] 21894 BROCADE-COM [SS1188-ARIN] 21895 EMIS-INTL [SS1547-ARIN] 21896 ABN-AMRO [NA199-ARIN] 21897 VIRTUA-HEALTH [TH767-ARIN] 21898 KROLL [NK171-ARIN] 21899 ABBOTT [DH1563-ARIN] 21900 LBPC [DR987-ARIN] 21901 GLOBALSERVE-1 [SB1345-ARIN] 21902 WCTA [HD144-ARIN] 21903 AESREDFISH [MG1115-ARIN] 21904 INTIRA [AB527-ARIN] 21905 NEWRIVER [BC1022-ARIN] 21906 US-UNWIRED [EP276-ARIN] 21907 EMOTION-VA01 [BW818-ARIN] 21908 FAMILY-VIDEO-INTERNET [AB367-ARIN] 21909 LONGFIBRE [AM2967-ARIN] 21910 INTIRA-1 [AB527-ARIN] 21911 HEXXA-NETWORKS [RM1541-ARIN] 21912 MAGICINETSERVINC [PO67-ARIN] 21913 ELN-MERRIMACK [DA748-ARIN] 21914 MCCLIER [AA520-ARIN] 21915 MCOEORG95340 [VA108-ARIN] 21916 WEST-LINK65NETWORK [EW311-ARIN] 21917 BBVA-BANCO-BHIF [JR1397-ARIN] 21918 ELECTRONET [GC486-ARIN] 21919 SUITE500 [MH1392-ARIN] 21920 BCE-PROCURON [SR636-ARIN] 21921 MMAERO [DL2518-ARIN] 21922 MREP-1 [PT218-ARIN] 21923 SCIMAGE [LM643-ARIN] 21924 HARDROCK-CAFE [RC1272-ARIN] 21925 HKS [JWL44-ARIN] 21926 HTSOLUTIONS [MS2156-ARIN] 21927 MARKETLINX [PH243-ARIN] 21928 VOICESTREAMAS21928 [BS995-ARIN] 21929 FEMA [GD390-ARIN] 21930 INFORMATICA [AD498-ARIN] 21931 KATELECOM [DB1916-ARIN] 21932 ADITECH [EW307-ARIN] 21933 MSC-SOFTWARE [DA754-ARIN] 21934 REFCO [EO79-ARIN] 21935 EPSILONDATA50 [SA610-ARIN] 21936 DONCASTER [RD457-ARIN] 21937 HOTSPOTFXASN1 [RE314-ARIN] 21938 YAMAHA-DEALERS [EZ74-ARIN] 21939 LENDINGSPACE [CK477-ARIN] 21940 SHAKERADVERTISING [MP1074-ARIN] 21941 SYNCSORT-INC [DM1841-ARIN] 21942 ON-SEMICONDUCTOR-INC [SP663-ARIN] 21943 ACC-HSD-AS-1 [KH646-ARIN] 21944 DTSI-1 [DL693-ARIN] 21945 ONESOURCEDATA [SP443-ARIN] 21946 EONSTREAMS-US1 [KW547-ARIN] 21947 PANGUICH-10 [VA79-ARIN] 21948 MCDATA [CM1135-ARIN] 21949 BEANFIELD [DA118-ARIN] 21950 AUTOTEC [SS1455-ARIN] 21951 STOLAF [CR127-ARIN] 21952 NEILL-CORPORATION [BC1028-ARIN] 21953 AASAGECORP [CH906-ARIN] 21954 RTG [EW313-ARIN] 21955 SAPPHIRECOMM537947122 [IP-FIX-ARIN] 21956 TENASKAMARKETING [AF373-ARIN] 21957 RADIANT [GK354-ARIN] 21958 STERLINGHAGER [BF296-ARIN] 21959 RMI-NETWORK-ATLANTA [DJ452-ARIN] 21960 EDSS [JT721-ARIN] 21961 NASDAQ-TOOLS [WB335-ARIN] 21962 REMOTEPIPES [HM350-ARIN] 21963 EVERTEK [JB2518-ARIN] 21964 THE-SCOTTS-COMPANY [SG10-ARIN] 21965 BLUECROSS-BLUESHIELD [CB1144-ARIN] 21966 OLRCORP [PL519-ARIN] 21967 HINES-2800-POST-OAK [JM822-ARIN] 21968 OAKVILLE [JL1573-ARIN] 21969 ASG [BP634-ARIN] 21970 CALMCO-NET [JW1525-ARIN] 21971 VELOCITA-US [RL880-ARIN] 21972 PPI [JZ144-ARIN] 21973 CAPITAL-INTERNET [BB1390-ARIN] 21974 ALTER-NET [JO449-ARIN] 21975 THREE-PILLARS [LD336-ARIN] 21976 NJEDGE-NET [GL422-ARIN] 21977 PEGASUS-BROADBAND01 [FJ64-ARIN] 21978 NCWYOGOV [WN-ARIN] 21979 ETRADE-CANADA [DB1767-ARIN] 21980 DAYCOHOST [OI13-ARIN] 21981 GOEASTON [TB973-ARIN] 21982 PICKETFENCE [MH727-ARIN] 21983 DOUBLE-G-COMM-WFTX [LG384-ARIN] 21984 FCPS [DE410-ARIN] 21985 ARCHSTONE [JG1445-ARIN] 21986 YRIRV [FS207-ARIN] 21987 4151EXECFDCISP [BH615-ARIN] 21988 HENDRICK-AUTO-GROUP [SA658-ARIN] 21989 GREENPOINT [CS1170-ARIN] 21990 CREDIT-ONLINE [JL1580-ARIN] 21991 LATITUDE [KL513-ARIN] 21992 MTGINFO [SC1069-ARIN] 21993 NH-HARTFORD [MG1126-ARIN] 21994 ABNAMROPBDNJEX [AK568-ARIN] 21995 MSC-NETWORK [TC861-ARIN] 21996 GUAMCELL [JAG1-ARIN] 21997 PROLIANCE-ENERGY [AP648-ARIN] 21998 SETA [RD788-ARIN] 21999 NBN [MS2156-ARIN] 22000 PATERRA [EKA2-ARIN] 22001 INVITROGEN [MF681-ARIN] 22002 SSI-NET [TF428-ARIN] 22003 SR-FUNDS-ASN001 [SW937-ARIN] 22004 ABOUT-BLK [RB1598-ARIN] 22005 VWR [CJ336-ARIN] 22006 ASG-1 [KW551-ARIN] 22007 ARADIGM [DM135-ARIN] 22008 LIBRARYVIDEO [DW1166-ARIN] 22009 IDM [DA761-ARIN] 22010 BANISTMO [JC2332-ARIN] 22011 XERTIX [MR914-ARIN] 22012 GEMINIVOICE [VY12-ARIN] 22013 LIBERATE-CALO [KJ252-ARIN] 22014 LIBERATE-USHSHM [KJ252-ARIN] 22015 LIBERATE-USSLC [KJ252-ARIN] 22016 PHS-OR [CP625-ARIN] 22017 ADP-EDC [RW934-ARIN] 22018 TAUNTON-MUNICIPAL [DM1859-ARIN] 22019 GETE-CCS [DNA2-ARIN] 22020 PLANETMAGPIE [RD797-ARIN] 22021 ONTV-PITTSBURGH [DA3430-ORG-ARIN] 22022 HUB-GROUP [MJ288-ARIN] 22023 BCBSMO [JH2039-ARIN] 22024 PARTNERRE-GREENWICH [CB1154-ARIN] 22025 DEMOCRACYDATA [JX15-ARIN] 22026 TWTC-HI [IT65-ARIN] 22027 WORKNET-1 [BM1379-ARIN] 22028 EOSBIOTECH [DK866-ARIN] 22029 SKJERVEN [MIR1-ARIN] 22030 ZIPCON-AS-1 [DP186-ARIN] 22031 WYNNCOM-WYNNNET [SW480-ARIN] 22032 FLIGHTLINE [MF784-ARIN] 22033 CYBERSHIFT-INC [DB1329-ARIN] 22034 MCMNET [RZ454-ARIN] 22035 STCASN [RW915-ARIN] 22036 TRIVIN-AS0001 [MS2184-ARIN] 22037 IKNOWMED [TB981-ARIN] 22038 OZONA-NET [RA662-ARIN] 22039 CICADACORP [TM1162-ARIN] 22040 SOLUTECH-INC [DW1182-ARIN] 22041 ATSI-DAL [GW468-ARIN] 22042 TELETRACK [RC598-ARIN] 22043 STERIS [SH1115-ARIN] 22044 SMARTFORCE01 [JY235-ARIN] 22045 GUINNESSUDV-NA [JM2731-ARIN] 22046 COFFMAN [MF982-ARIN] 22047 VTRNET [IS163-ARIN] 22048 WHOLE-FOODS [DK870-ARIN] 22049 INTERNETNAMES [ZI51-ARIN] 22050 LOUISDREYFUS [JV463-ARIN] 22051 BROADBAND-HIGHWAY-AS [DP990-ARIN] 22052 MARINAR [JB2483-ARIN] 22053 RIF [BT630-ARIN] 22054 HOOD-CANAL [NJ95-ARIN] 22055 RSFN [MJC5-ARIN] 22056 SITEL-1 [JW387-ARIN] 22057 SSGNET-1 [RJ91-ARIN] 22058 VOYANTTECH [LH446-ARIN] 22059 AW-CHESTERTON [TD594-ARIN] 22060 NETWORK-DOMAIN [RK441-ARIN] 22061 FOXCABLENET [ZW63-ARIN] 22062 PIXELGATE [WK144-ARIN] 22063 JPGETTYTRUST [RR1067-ARIN] 22064 FXALL-FXALLIANCE [DB1827-ARIN] 22065 LPL [BM1383-ARIN] 22066 ENTERPRISE-SRV [DP959-ARIN] 22067 ZULUNET [KB787-ARIN] 22068 TJC-62001 [CS46-ARIN] 22069 FOOTSTAR [SS1715-ARIN] 22070 CVILLEHOSTING [BF1344-ARIN] 22071 ACCESS-COVERAGE [CW703-ARIN] 22072 DEFINITYHEALTH [ZI79-ARIN] 22073 GLENDALEAZ1 [JW1539-ARIN] 22074 EMSANET-NET [SA651-ARIN] 22075 DEVRY-DALLAS [DR1058-ARIN] 22076 NEWSBANK [TP629-ARIN] 22077 RENAISSANCE-TECH [SY48-ARIN] 22078 ANALYSTS-INT [RH1244-ARIN] 22079 APTNET-AS-01 [JC2361-ARIN] 22080 BROADBANDTECH [LC564-ARIN] 22081 CITILAB [RR1107-ARIN] 22082 DSS-QUADRELISERVICE [RR603-ARIN] 22083 MEMORIAL-HEALTH-CARE [ZM120-ARIN] 22084 RAPATTONI-ASN1 [CS1183-ARIN] 22085 TELET [IT56-ARIN] 22086 AMERICAN-CENTRAL-GAS [CN308-ARIN] 22087 CHAPEL [LM114-ARIN] 22088 STRATEGIC-STAFFING [AC768-ARIN] 22089 HALLMARK [IH37-ARIN] 22090 AMERIVAULT [BT480-ARIN] 22091 INSYNCMEDIA [SB1378-ARIN] 22092 CONVEXX-BRASIL [GS870-ARIN] 22093 CCF-NETWORK [IA108-ARIN] 22094 CAHNERS [PE157-ARIN] 22095 IRELL [SS1725-ARIN] 22096 BOOTHCREEKSKIHOLDINGS [SV226-ARIN] 22097 PRESTONGATES [ED260-ARIN] 22098 TRANSCEND-ATLANTA [SW931-ARIN] 22099 NET-UFO [JM2759-ARIN] 22100 CRITICAL-PATH [FA115-ARIN] 22101 SRJC [SW932-ARIN] 22102 EASTERN-NET [PG1351-ARIN] 22103 CYBERSCOPE-NET [MM390-ARIN] 22104 ATRICA [GH591-ARIN] 22105 ONCORP [AS1116-ARIN] 22106 FRONTEX [SD32-ARIN] 22107 COLLABNET [CAN-ARIN] 22108 RESEARCH-INT [SM1512-ARIN] 22109 UNIVERSAL-INSURANCE [PL509-ARIN] 22110 LIGTEL-COMMUNICATIONS [SM1513-ARIN] 22111 NYBOT [DP997-ARIN] 22112 ALLIED-WORLDWIDE [TO215-ARIN] 22113 THE-DATA-CORPORATION [LL468-ARIN] 22114 DARIENTEL [RG967-ARIN] 22115 BNCHMRK1 [SA665-ARIN] 22116 NYCEDC-AS [CP632-ARIN] 22117 CSATLANTA [MW1029-ARIN] 22118 HIDDENMIND [SK647-ARIN] 22119 DMXAEI-LAX-01 [JPJ1-ARIN] 22120 DMXAEI-SEA-01 [JPJ1-ARIN] 22121 DMXAEI-DEN-01 [JPJ1-ARIN] 22122 UADY-MX [JH749-ARIN] 22123 LEONETTI [MB1733-ARIN] 22124 FINNEGANBGP [JMK3-ARIN] 22125 PFPCASN [DN408-ARIN] 22126 EBIPSPNET [WP153-ARIN] 22127 PHENOMINET [DM1889-ARIN] 22128 SINOSNET [EB487-ARIN] 22129 TASK [MP1104-ARIN] 22130 MCKENNA-GROUP [RB1633-ARIN] 22131 USDCO-2001 [JB2321-ARIN] 22132 SOCKEYE [NO149-ARIN] 22133 OCTETBRASIL [AS647-ARIN] 22134 ONECOM [TM1474-ARIN] 22135 SKECHERS-USA [CI75-ARIN] 22136 NYCT [PS498-ARIN] 22137 VIRGINIAN-PILOT [CM1166-ARIN] 22138 POCATLANTA [KB796-ARIN] 22139 DKBTPDASN [MP1031-ARIN] 22140 VOICE-WIRE [SW938-ARIN] 22141 CSG-COMM-NETWORK [TT344-ARIN] 22142 BWI-OPER-CORP [BH1046-ARIN] 22143 NETMAR [CA445-ARIN] 22144 CHAPMAN [TN289-ARIN] 22145 RDSI [JB2580-ARIN] 22146 INFO1 [TM1176-ARIN] 22147 SPANET [RR1119-ARIN] 22148 MPS [PRA1-ARIN] 22149 PSC-AS [MJ491-ARIN] 22150 UNITEDSERVICESOURCE [JB2522-ARIN] 22151 BREAN-MURRAY [RA661-ARIN] 22152 OCHS-AS [LL453-ARIN] 22153 CCI-NET01-HAWAII [TC878-ARIN] 22154 NUTECH [RW945-ARIN] 22155 MSAPP [BO209-ARIN] 22156 MUSICNET [ME128-ARIN] 22157 AS1-A2W [JM2776-ARIN] 22158 HOSTREMOTE [MB1566-ARIN] 22159 OTSUKA-USA [IP-FIX-ARIN] 22160 SIMPATA [FA115-ARIN] 22161 DASS-SYSUS [CM1169-ARIN] 22162 ECPCLS-AS [JB2585-ARIN] 22163 WASATCHCREST [KP361-ARIN] 22164 LLAMACOM [LNO1-ARIN] 22165 BGP-DUCKS-CA [DB7778-ARIN] 22166 DOTNET-INT [MG1148-ARIN] 22167 FINTECH-INTERNET [WA126-ARIN] 22168 INSORS [JS2985-ARIN] 22169 FLORIST-TRANSWORLD94 [DR1069-ARIN] 22170 NEFMLS-JAX [BC354-ARIN] 22171 IPSV-ASN1 [CG628-ARIN] 22172 BAYCENGERCAR [WH276-ARIN] 22173 AUDITS-SURVEYS650 [DN351-ARIN] 22174 NET-SUC-TECH-ALF [DB1579-ARIN] 22175 TWOSIGMA [DT652-ARIN] 22176 PCI-ASN [RB1651-ARIN] 22177 BUSINESSNET1808 [ACS1-ARIN] 22178 PA-SENATE [DKA1-ARIN] 22179 ADREM [LD346-ARIN] 22180 CONPOINT [DS7413-ARIN] 22181 IVNET [RB1509-ARIN] 22182 LSGSKYCHEFS [IL67-ARIN] 22183 NETSOLVEOPS [MH841-ARIN] 22184 IRIDIUM-SATELLITE [BB1428-ARIN] 22185 TELEFONICA-ULD [HT150-ARIN] 22186 PWG-BOCA [LG349-ARIN] 22187 VINTACOM [TS1216-ARIN] 22188 MOBILELOGIC-INC [AI85-ARIN] 22189 EYESHAKE1 [FB250-ARIN] 22190 KNIGHT [MM2181-ARIN] 22191 THEVILLAGES [KC616-ARIN] 22192 SSHENET [TP76-ARIN] 22193 THOMSONCORP [PC735-ARIN] 22194 MOTISLLC [RW945-ARIN] 22195 ALL-INCLUSIVE [IP-FIX-ARIN] 22196 SUMC [SN356-ARIN] 22197 APPS [NB274-ARIN] 22198 GLOBALIPX [JB2697-ARIN] 22199 GOBEAM [DK237-ARIN] 22200 P5EHS [DR965-ARIN] 22201 MASTEC [RF650-ARIN] 22202 IMAGINE-SOFTWARE [GR440-ARIN] 22203 NAVITAIRE [AW463-ARIN] 22204 ACETO [TS881-ARIN] 22205 DATAPIPE-SEA [AF171-ARIN] 22206 GOOD-SAM [KL523-ARIN] 22207 ETRADEMORTGAGE [DN411-ARIN] 22208-22213 NETVMG [AS1074-ARIN] 22214 EQUICO [DK839-ARIN] 22215 BHSU [TK557-ARIN] 22216 UGS [RB1654-ARIN] 22217 SALU [IS191-ARIN] 22218 PETROCOM [JD1449-ARIN] 22219 NEXL [FK103-ARIN] 22220 EACOMARTS [JR575-ARIN] 22221 GMACI-COMM [WG147-ARIN] 22222 OMAHASTEAKS [JC387-ARIN] 22223 IGNITE-SPORTS [JB2620-ARIN] 22224 KNORR [JS3016-ARIN] 22225 SPICNSPAN [ML84-ARIN] 22226 SFUSD [JL1628-ARIN] 22227 BACBANK [JM2808-ARIN] 22228 UPR-MAYAGUEZ [MM2183-ARIN] 22229 BILLSERV [MT750-ARIN] 22230 NETBLK-STREAM [ZS202-ARIN] 22231 ITC [AA539-ARIN] 22232 IVERSON [KI51-ARIN] 22233 INFORMATION-RES [MG1161-ARIN] 22234 WEBWORKZ [MB1763-ARIN] 22235 MI-SERVICES-WAYNE [KG299-ARIN] 22236 UNITEDBANCORP [ML1150-ARIN] 22237 TMG [GP451-ARIN] 22238 DARPA [SJ395-ARIN] 22239 TRADINGTECH-CORP [NO142-ARIN] 22240 CCS [MZ218-ARIN] 22241 ICCEPTS [TV178-ARIN] 22242 NOVASTAR [TB1008-ARIN] 22243 CENTRACOMM [PF305-ARIN] 22244 MOTOROLA-PHX [DD927-ARIN] 22245 WICHITA-STATE-U [JM2810-ARIN] 22246 NASDAQMRKTST [NTC1-ARIN] 22247 LETOURNEAUUNIVERSITY [KJ280-ARIN] 22248 STORAGE-ACCESS [MT752-ARIN] 22249 BISSELL [NQ4-ARIN] 22250 NAP-ABRANET [LM115-ARIN] 22251 REMC [MR1115-ARIN] 22252 NYC-GOV [DLS1-ARIN] 22253 CHADBOURNE [DC1543-ARIN] 22254 MTGINFOSERV [SC1069-ARIN] 22255 WPAHS [PK81-ARIN] 22256 FIRST-SOUTHWEST [ME443-ARIN] 22257 NETLINE-HL-1 [FP201-ARIN] 22258 ATT-BROADBAND-CO [SY136-ARIN] 22259 VITAMIX-001 [EY48-ARIN] 22260 PD-DLJ [CP543-ARIN] 22261 SDCWA-ORG [ADC1-ARIN] 22262 ELEC [GS884-ARIN] 22263 DIAMOND-DATA-SYSTEMS [JC2300-ARIN] 22264 NYCPORTNET [JK1378-ARIN] 22265 GENESIS-OMAHA-NE [BW900-ARIN] 22266 KNIGHT-INC [JR1362-ARIN] 22267 COMPUTRON [WB310-ARIN] 22268 NETLINKIP [EC424-ARIN] 22269 CHTR-WV-MID-ATLANTIC [SL719-ARIN] 22270 PEAKXVNET [BF526-ARIN] 22271 CALLSCIENCES [JN567-ARIN] 22272 BIG-DOG-TECH [SO252-ARIN] 22273 GWCCNET-ASN [JJ662-ARIN] 22274 BRIO-ASN [FC278-ARIN] 22275 WEBSTREAM [KV104-ARIN] 22276 WYNDCOMM [EE140-ARIN] 22277 FASTCLICK [DA45-ORG-ARIN] 22278 LINUXLABS [ST118-ARIN] 22279 ALCI2001 [RN418-ARIN] 22280 FIRSTHEALTHBGP [CM1191-ARIN] 22281 PRIVATEBUSINESSINC [IH75-ARIN] 22282 CATAVO [JS3032-ARIN] 22283 SIDLEY [MEV1-ARIN] 22284 DIOS [GS887-ARIN] 22285 ELEADS2 [JR1398-ARIN] 22286 INTERSPOTS [GH613-ARIN] 22287 HMV [MS2255-ARIN] 22288 FRBKONLINE [RM1584-ARIN] 22289 POWERWEB [GBL7-ARIN] 22290 STLONL [MS2156-ARIN] 22291 CHARTER-LA [SL719-ARIN] 22292 PHASE2SOLUTIONS [JB2450-ARIN] 22293 REALM-CORP [PN203-ARIN] 22294 NAVIGANT [JS3039-ARIN] 22295 AWT [EN135-ARIN] 22296 CONN-NET [DU46-ARIN] 22297 PLANETGUIDE-1 [BB1448-ARIN] 22298 SECURED-PRIVATE [WCT1-ARIN] 22299 GCRONLINE [GR1295-ARIN] 22300 NETCONNECT-RICHMOND [DC1552-ARIN] 22301 EARTHSAT [CP707-ARIN] 22302 INOC [RB153-ARIN] 22303 VISIONTEK [KB812-ARIN] 22304 BLUE-RIDGE-NOC [RG993-ARIN] 22305 GAMACOM [EG343-ARIN] 22306 FISC-JM [JAC1-ARIN] 22307 COLOCATEAMERICA [ZI96-ARIN] 22308 PULVERTECH-1 [DP1026-ARIN] 22309 TRANSPLATINUM [BH1067-ARIN] 22310 LOI [DS2500-ARIN] 22311 FAIRNET-LLC [DR1083-ARIN] 22312 TECO-ENERGY [AJ263-ARIN] 22313 SUPERCAB-VE [GP457-ARIN] 22314 INTERNETEK [RC1340-ARIN] 22315 SBCSS [ZS80-ARIN] 22316 MPGSITE [CN321-ARIN] 22317 F5-NETWORKS [PD564-ARIN] 22318 COX-NCF [SH1150-ARIN] 22319 AMERIQUEST-MORTGAGE [TS1237-ARIN] 22320 SCITX [AB938-ARIN] 22321 SURGE [HW167-ARIN] 22322 QIPNET [IP-FIX-ARIN] 22323 UC-MERCED [CV194-ARIN] 22324 XTEL [AG660-ARIN] 22325 COLOCENTRAL [SD796-ARIN] 22326 SAMLINK [RG77-ARIN] 22327 GXCNET [EM406-ARIN] 22328 CSHS [SS1752-ARIN] 22329 BAYMOUNTAIN [DE425-ARIN] 22330 CATALINAMKT [JY245-ARIN] 22331 HANMIDOMAIN [PK435-ARIN] 22332 WDC-US [KP478-ARIN] 22333 DATACONSTRUCTS [JP1379-ARIN] 22334 FERGUSON [JD1390-ARIN] 22335 MREN [TW1261-ARIN] 22336 PELLA [JP1607-ARIN] 22337 MCFA-NET [SA666-ARIN] 22338 MBTRADING1 [BB939-ARIN] 22339 CARRERACOMMUNICATIONS [IP-FIX-ARIN] 22340 ACTIONTEC [JC2441-ARIN] 22341 RTM-BR [CT475-ARIN] 22342 ADEXPEDIA [JS3071-ARIN] 22343 CLEARSKY [DL936-ARIN] 22344 BRADCO-SUPPLY [GF275-ARIN] 22345 JARAM [JF1091-ARIN] 22346 NRZ-NETWORK [RD838-ARIN] 22347 DORSEY-WHITNEY [CJA2-ARIN] 22348 GSB-COM [DG1105-ARIN] 22349 ANTIOCH [SL858-ARIN] 22350 MLIBGP4 [BL712-ARIN] 22351 INTELSAT-1 [HE83-ARIN] 22352 APPLIED-TECHNOLOGY [CR716-ARIN] 22353 TAYLOR-LINK1 [JC2442-ARIN] 22354 UNIV-DAR [JM2690-ARIN] 22355 FROGFOOT [JB2673-ARIN] 22356 DURAND [EP758-ARIN] 22357 NETWORK-PHYSICS [LM682-ARIN] 22358 KRAMER-WILSON [WM295-ARIN] 22359 QNITY-NETWORKS [PA285-ARIN] 22360 MOBILESYS [HM385-ARIN] 22361 SNTI [PD238-ARIN] 22362 MIDMO [SA680-ARIN] 22363 CONTINET-BLK-1 [ZA43-ARIN] 22364 TDUS-AS [TE264-ARIN] 22365 MINDVISION [SK826-ARIN] 22366 ORIGIX-D [NO163-ARIN] 22367 TMISERVICES [DM1960-ARIN] 22368 TB [YG34-ARIN] 22369 ACE-CASH [ST640-ARIN] 22370 FG1 [AF402-ARIN] 22371 ICONET-BR [FE49-ARIN] 22372 EMAT-INET-1 [KD430-ARIN] 22373 PEGS [GN162-ARIN] 22374 TOMAX [DR1092-ARIN] 22375 CREDCO [MB1798-ARIN] 22376 GOOD [CB1206-ARIN] 22377 TRANSATLANTIC [LX6-ARIN] 22378 MATRIXCONSULTINGCOLA [NNL1-ARIN] 22379 TRADETREK [JG1045-ARIN] 22380 INCOVA [DK52-ARIN] 22381 MEGATELECOM [GB830-ARIN] 22382 MOSSFON [LM684-ARIN] 22383 BBA [FS283-ARIN] 22384 NATIONALNET-1 [BV172-ARIN] 22385 VZ-AVENUE [AK589-ARIN] 22386 SARB [CS1156-ARIN] 22387 SONOPRESS-ASH [TL629-ARIN] 22388 TRANSPAC [CR721-ARIN] 22389 ONTONOGANTELEPHONECO [RG77-ARIN] 22390 XEROX-WB [XH4-ARIN] 22391 TERABEAM-1 [ZT90-ARIN] 22392 REDINET [BO18-ARIN] 22393 US-OPERON-ALAMEDA [AB681-ARIN] 22394 SPEEDLINK [DH1464-ARIN] 22395 TRANSACTPLUS [BT563-ARIN] 22396 VIVIDON [CT397-ARIN] 22397 MENTOR-COMM [GB837-ARIN] 22398 ESSEXCORP001 [RM1630-ARIN] 22399 DRKW-NYC-1 [SF549-ARIN] 22400 SYLANTRO [JS2081-ARIN] 22401 GBS [RE335-ARIN] 22402 HAMILTON-PARTNERS [AJ269-ARIN] 22403 TRINICOM [KC647-ARIN] 22404 YIPES-WEB-SERVICES [GZ65-ARIN] 22405 ENGCC [TE248-ARIN] 22406 HARTEHANKSDIRECT [KW588-ARIN] 22407 TAHO [CT485-ARIN] 22408 WKNET [DC716-ARIN] 22409 LACKAWAXEN [GD500-ARIN] 22410 AURUM-NET [SJY2-ARIN] 22411 DIGITALWAY [JC2476-ARIN] 22412 EIS-SC-1 [ZH85-ARIN] 22413 SCOTT-HEALTH [RP981-ARIN] 22414 SCORPIONS [AB953-ARIN] 22415 KASNET [CE111-ARIN] 22416 SOCCCD-CC-CA-US-NET1 [RV12-ARIN] 22417 AF-COMM [MS2325-ARIN] 22418 DIGIMARC-1 [BC537-ARIN] 22419 ACNINC-01 [AW486-ARIN] 22420 INCURRENTCORP1 [MS2326-ARIN] 22421 BIO2ARIZONA [JM2890-ARIN] 22422 G-TRADE [IP-FIX-ARIN] 22423 GLOBALE [NT102-ARIN] 22424 ARRASGROUP [RK805-ARIN] 22425 LEASEPLAN-USA [CS1210-ARIN] 22426 ILINKADV [KR560-ARIN] 22427 ECI-EXC-01 [RL939-ARIN] 22428 XCITENET [MC1604-ARIN] 22429 RED-RIVER [ZR73-ARIN] 22430 OPENREACH [JH2194-ARIN] 22431 ABASE [AG679-ARIN] 22432 WORLDSTREET [SB1440-ARIN] 22433 HRMC [JS3112-ARIN] 22434 INTRIEVE [ITP1-ARIN] 22435 PSFT-INC [AL585-ARIN] 22436 NET-CI-1 [DG1075-ARIN] 22437 TRANSWAN-00 [JS3113-ARIN] 22438 ONETTA [DR783-ARIN] 22439 CAT-CATWORKS-NET [LF255-ARIN] 22440 LOU-TELECOM-NET [CG338-ARIN] 22441 WHITWORTH-NET [WS375-ARIN] 22442 HOU-PHONOSCOPE [RJ490-ARIN] 22443 VIRTICAL [GK348-ARIN] 22444 UDR-TENANT-SCREENING [HS107-ARIN] 22445 HARWARDINVESTMENTS [JH2154-ARIN] 22446 MEDLINE [BD709-ARIN] 22447 MICRO-MAINFRAME [TB1034-ARIN] 22448 MICRO-SPEC [MF78-ARIN] 22449 AES-IRONWOOD [RR1172-ARIN] 22450 SOMERSET-NET [DB1982-ARIN] 22451 MAITLAND-AS1-GOCO-OP [TD631-ARIN] 22452 NOMINUMII-GLOBAL-NET [CY101-ARIN] 22453 ITASBGP01 [HO1-ARIN] 22454 PINNACLE-ACCESS [BA509-ARIN] 22455 ESL-FCU [DP267-ARIN] 22456 INTEGRAIPS [CO240-ARIN] 22457 CSJSC [JN567-ARIN] 22458 SC-ITRU [WB352-ARIN] 22459 MCKESSON-HEALTH-SVCS [GM74-ARIN] 22460 QUAKEROATS-REDUNDANT [BC1094-ARIN] 22461 ARCUS-DIGITAL [JT1090-ARIN] 22462 DEFS [EF249-ARIN] 22463 PIONEER-INET [JB2716-ARIN] 22464 NORTHEAST-TEL [RG77-ARIN] 22465 INFINITY-INSURANCE [GW511-ARIN] 22466 OSA-CA [HC249-ARIN] 22467 MIRRORPLUS [AA559-ARIN] 22468 GAMMA-ROUTERS [JM2903-ARIN] 22469 WISENUT [PM877-ARIN] 22470 NBME [LC579-ARIN] 22471 TFE [RJ491-ARIN] 22472 FLCOURTS [RR1174-ARIN] 22473 SALT-LAKE-CITY [AP704-ARIN] 22474 DYN-HOU-01 [KJ287-ARIN] 22475 MVP [GS918-ARIN] 22476 WAI-NY [ZZ1582-ARIN] 22477 VYVXMXN-CDN [SO260-ARIN] 22478 COASTDENTAL [JP1642-ARIN] 22479 GRAND-CENTRAL [PT343-ARIN] 22480 CPMC [GD504-ARIN] 22481 CYSIVE [SR866-ARIN] 22482 THEBANKERSBANK [DG480-ARIN] 22483 FOCUS24 [VJD1-ARIN] 22484 GKNET [TC934-ARIN] 22485 BRIDGEBAND [AC847-ARIN] 22486 TUMI [MB1825-ARIN] 22487 VALENCIA [MR1166-ARIN] 22488 TL-NYALB [TG580-ARIN] 22489 CASTLE-ACCESS [LB642-ARIN] 22490 ZLINK-SYSTEM [CP682-ARIN] 22491 EPIX-NETWORK [ZT27-ARIN] 22492 OASYS-BGP-4 [TC833-ARIN] 22493 RVAPC [VL139-ARIN] 22494 PIXELWORKS [PA292-ARIN] 22495 SIMON-208-0 [IP-FIX-ARIN] 22496 NETCOM-SYS [JH2177-ARIN] 22497 SEAINTERNET [BC958-ARIN] 22498 DEVELOPONLINE [ZDN1-ARIN] 22499 FIRST-FEDERAL [GM878-ARIN] 22500 SKYCOMM-ASN [SLW1-ARIN] 22501 COPETEL [GOB1-ARIN] 22502 COVANCE-IPAS [BC1091-ARIN] 22503 TRIGO-66-77-109-24 [RL943-ARIN] 22504 MANDELL-KATZ [DS2220-ARIN] 22506 PDCRP-1 [EA242-ARIN] 22507 IPSHADOW [PZ133-ARIN] 22508 MILENIO [AV207-ARIN] 22509 BANFIELD [LC605-ARIN] 22510 CELERA-DIAGNOSTICS [BW1324-ARIN] 22511 CTINET [ZC137-ARIN] 22512 OPENBSD [ZO28-ARIN] 22513 MAGNET [BR763-ARIN] 22514 NOVUS [DW1224-ARIN] 22515 DPFNET [LP364-ARIN] 22516 INTER-RESPONSE [MP1156-ARIN] 22517 HOIKENETWORKS [KA345-ARIN] 22518 CYBORG [EF86-ARIN] 22519 GULFCOMP [IG50-ARIN] 22520 COX-NO [MY136-ARIN] 22521 CHTR-VA-WEST [SL719-ARIN] 22522 NTCH [ML1214-ARIN] 22523 IMS-WEST-AS [AZ144-ARIN] 22524 NOVANTHEALTH [HP174-ARIN] 22525 AEGM [SD785-ARIN] 22526 PACKETDESIGN [KD329-ARIN] 22527 SAFEWAY-INC [PEB4-ARIN] 22528 DMSP [JE593-ARIN] 22529 RED-SEIT [MVC1-ARIN] 22530 PATLQ-0000 [RG1017-ARIN] 22531 STEELCITY [MS2357-ARIN] 22532 ANCURO [MS2358-ARIN] 22533 IMS [AQ34-ARIN] 22534 PROFICIENT [IP90-ARIN] 22535 EPLINC [LL501-ARIN] 22536 VNU-LOSANGELES [JC2523-ARIN] 22537 ALBEMARLE-CORP [BB156-ARIN] 22538 KIV-CORP1 [MS2187-ARIN] 22539 BORSCHOW [GF340-ARIN] 22540 GLOBALATMOSPHERICS [AM149-ARIN] 22541 MEGALINK-AS [JG560-ARIN] 22542 BNET [BH1090-ARIN] 22543 PIXELWEB [LC607-ARIN] 22544 DWCINET [TS1304-ARIN] 22545 COPPERSTRIKE [DW4678-ARIN] 22546 ZIANET-YWBA [JO275-ARIN] 22547 WINFIRST-CORP [DR1129-ARIN] 22548 COMITE-GESTOR [NF-ORG-ARIN] 22549 TBDSL-01 [RY138-ARIN] 22550 PUBLICANS [ZH89-ARIN] 22551 ANOBI [DK928-ARIN] 22552 SUNDT-TUC [DV251-ARIN] 22553 ECONOMIST-GROUP-NY [BC1111-ARIN] 22554 MERCEDNET [JW1423-ARIN] 22555 UTC [JS3166-ARIN] 22556 BLACKBOARD [JY253-ARIN] 22557 METRON [KC626-ARIN] 22558 DICKCORPORATION [LC45-ARIN] 22559 GNF-ORG [KS1008-ARIN] 22560 LEAPFROG-1 [CV218-ARIN] 22561 DIGITAL-TELEPORT [BI66-ARIN] 22562 CSC-IGN-EMEA [BM1480-ARIN] 22563 COZEN-PHL [TK568-ARIN] 22564 TRABON-SOLUTIONS [PV175-ARIN] 22565 CHECK-PRINTERSINC [JH2199-ARIN] 22566 MAXCOM [RL954-ARIN] 22567 BROADCASTMEDIA [BA498-ARIN] 22568 BELL-HOWELL [CS696-ARIN] 22569 ADPALLIANCE-BHAM [PD588-ARIN] 22570 AUTODESK-1 [AB971-ARIN] 22571 ARSALON [BP712-ARIN] 22572 INFOSAT-IP [AR632-ARIN] 22573 NWTEL [BM1481-ARIN] 22574 COCONET [BE297-ARIN] 22575 MASSMUTUAL2 [NT155-ARIN] 22576 VIRTUAL-PURCHASE [OG47-ARIN] 22578 PBI-CUSTNET-4528 [GW516-ARIN] 22579 CONFUSION [MKS3-ARIN] 22580 GUARD [AF352-ARIN] 22581 INTEGRAMED [JT1156-ARIN] 22582 UPROD [JY255-ARIN] 22583 MFX-INTERNET [MH736-ARIN] 22584 ARCLIGHT [TT534-ARIN] 22585 ELUXURY-COM [JS3175-ARIN] 22586 GULFAERO [BF564-ARIN] 22587 DOTSCONNECT-1 [NB291-ARIN] 22588 TRADERPUBLISHINGCO [TS1310-ARIN] 22589 AMERICAN-RELAY [DA920-ARIN] 22590 IGW1 [DC1373-ARIN] 22591 SNDV [AB973-ARIN] 22592 HBP [LG414-ARIN] 22593 BCBSNC-AS [RV345-ARIN] 22594 UNI-NET-ASN [KC152-ARIN] 22595 MIRANT-AS [KD168-ARIN] 22596 MARKETING-SOFTWARE [DC1612-ARIN] 22597 SYNYGYASN [MD1150-ARIN] 22598 ELECTRACASH-LB1 [TF472-ARIN] 22599 UC-TELECOM [ED244-ARIN] 22600 AS-IOCENTER [TS1311-ARIN] 22601 BONNPOWERNET [HH327-ARIN] 22602 EXPOEXCHANGE [CG660-ARIN] 22603 AIRFLASH [FB264-ARIN] 22604 KB-TOYS [DO361-ARIN] 22605 BYTEHEAD [GBL7-ARIN] 22606 NET2TG-ASN [NZ36-ARIN] 22607 DES-MOINES-EDU [GD382-ARIN] 22608 BENEFITPORT [CD707-ARIN] 22609 HOTJOBS-MIAMI [JA1079-ARIN] 22610 CVH-NETBLK-1 [KL254-ARIN] 22611 FUSIONTECH [BB1532-ARIN] 22612 KIDZONLINE [CM1272-ARIN] 22613 NDCHEALTH-PHX [JC876-ARIN] 22614 CRPUD [JN599-ARIN] 22615 MONROECOUNTYCOMMSCH [KP502-ARIN] 22616 VERTISINC-IRVING [GS934-ARIN] 22617 PENDERGAST-SCHOOLS [MP1198-ARIN] 22618 GOARMY-REC-KNOX [DC1614-ARIN] 22619 TICON-NET-1 [SN175-ARIN] 22620 WIRELESS-RETAIL-INC [GN176-ARIN] 22621 UNIGROUP [PM1639-ARIN] 22622 MIPPS-INC [SP851-ARIN] 22623 UTILICORP3 [TR356-ARIN] 22624 FREMONTBANK [AC869-ARIN] 22625 LIGHTSPEED-1 [JM2946-ARIN] 22626 LADYLYNN [SL896-ARIN] 22627 UBQTMEDIA [PH618-ARIN] 22628 ALTEC1 [GP482-ARIN] 22629 MONTANA-POWER [SC1244-ARIN] 22630 MKK-CONSULTING-ENG [IP-FIX-ARIN] 22631 DIGITAL-GLASS-NETWORK [KH718-ARIN] 22632 ULTRASW [DW1266-ARIN] 22633 FISHERBROTHERS [MN146-ARIN] 22634 UBISOFT-COM [AT404-ARIN] 22635 DEGT [BK661-ARIN] 22636 NOVA-SCOTIA-POWER [ZN59-ARIN] 22637 C-R-T [JS2024-ARIN] 22638 ENTIRETY [JR1541-ARIN] 22639 CAM-NET-1 [ZC83-ARIN] 22640 DBM-1 [MM1033-ARIN] 22641 NNPI [BM1497-ARIN] 22642 CROSSCURRENT [KK700-ARIN] 22643 ALLPOSTERS [JK1446-ARIN] 22644 TJUH [JM2336-ARIN] 22645 DNS-00000000000000001 [LB752-ARIN] 22646 HARCOM1 [TS1314-ARIN] 22647 ELLTEL [CG675-ARIN] 22648 SWG [AL604-ARIN] 22649 ATCIS [ML401-ARIN] 22650 KNIGHT-FINANCIAL [BO220-ARIN] 22651 SITELITE-A [JN601-ARIN] 22652 NXHOP [MT776-ARIN] 22653 GLOBALCOMPASS [RS1977-ARIN] 22654 NOV-NET-01 [RL961-ARIN] 22655 THOMCOMP [BK220-ARIN] 22656 VWAINC-6317575100 [RD859-ARIN] 22657 KERNDIRECT [OP54-ARIN] 22658 EARTHNET [DE450-ARIN] 22659 LIQUIDIX [EK281-ARIN] 22660 ODYSSEYHEALTHCARE [GB853-ARIN] 22661 TELEXCLSA [AIZ2-ARIN] 22662 NATEL [SG940-ARIN] 22663 PROMINIC-NET-INC [JK39-ARIN] 22664 CUSTOM-NETWORK [PR463-ARIN] 22665 CHTR-CBN-NCR [SL719-ARIN] 22666 MAN-FIN-CHICAGO [VK109-ARIN] 22667 VISTA [CW778-ARIN] 22668 CAC-LIFE [JK675-ARIN] 22669 TELEGLOBE-IDC [ZZ3041-ARIN] 22670 AS4VIPSASP [PA297-ARIN] 22671 AAAS [ZH91-ARIN] 22672 COMPUTERHORIZONS-CORP [DC959-ARIN] 22673 ADVANTAGEPLAZA [JW1658-ARIN] 22674 SOUTHERNWINE [DC1549-ARIN] 22675 HOPS [NZ5-ARIN] 22676 THEWEBUNWIRED [ML1174-ARIN] 22677 SENSIENT [RR1213-ARIN] 22678 OSDE [ED275-ARIN] 22679 INTEGRATED-TEL [GH639-ARIN] 22680 ALIGNTECH [JH2088-ARIN] 22681 BLUENILE-NETBLK-1 [NA278-ARIN] 22682 OCREGISTER [AV210-ARIN] 22683 PNA-WEB-HOSTING [ZK54-ARIN] 22684 SSIMICRO [IAS3-ARIN] 22685 PLUSWEB [JK1210-ARIN] 22686 THECOMPUTERKING [AP746-ARIN] 22687 MDSPHARMA [RS1980-ARIN] 22688 DOLGENCORP [BM1508-ARIN] 22689 IBYS [LJP1-ARIN] 22690 SYBAWEBCTN [PS929-ARIN] 22691 ISPNET-1 [RPT8-ARIN] 22692 NYF-CORP [ZK52-ARIN] 22693 NERIC [SY145-ARIN] 22694 JEWISH-HOSPITAL [PS930-ARIN] 22695 AELERA-01 [RB1765-ARIN] 22696 HOLYOKE-MUTUAL [JT1081-ARIN] 22697 FOXGAL [MH1519-ARIN] 22698 AVANTEL-1 [MR1208-ARIN] 22699 ACSA-1 [CS1291-ARIN] 22700 TOWERSDATA [JH2237-ARIN] 22701 ULTRADNS-1 [DA829-ARIN] 22702 X5SOLUTIONS [BF568-ARIN] 22703 ANTHEM [GI47-ARIN] 22704 AAXICO [PH291-ARIN] 22705 MBI [AW475-ARIN] 22706 WDA-MEGANET [HM399-ARIN] 22707 TELSTAR [GR467-ARIN] 22708 CITY-OF-ELBERTON [RG77-ARIN] 22709 NSTELCO [DR761-ARIN] 22710 BRENCOURT [FL211-ARIN] 22711 GEFA-GENUITY [DA834-ARIN] 22712 LIBCOM-1 [BP723-ARIN] 22713 CAC-EAST2 [EM376-ARIN] 22714 LIBCOM-4AVE [BP723-ARIN] 22715 HART-INTL [RD887-ARIN] 22716 NETARX [SK866-ARIN] 22717 HALLIBURTON [JN611-ARIN] 22718 INTERIM-HEALTHCARE [SM540-ARIN] 22719 FLOODCITY [AH552-ARIN] 22720 LEXENT-INC-3NYP-301 [AV208-ARIN] 22721 SPC-1 [BZ132-ARIN] 22722 CITADEL-1 [DM1482-ARIN] 22723 ADSNETCURVE [KD459-ARIN] 22724 PUNTONET-UIO [RWF2-ARIN] 22725 NEWNET-1 [SA713-ARIN] 22726 VENCEMOSNET [PIR1-ARIN] 22727 USADATANET [EM573-ARIN] 22728 TAYLORBEANWHITAKER [RC1421-ARIN] 22729 SPRINGCOMM [SR308-ARIN] 22730 MATRIXSEMI [TI67-ARIN] 22731 NETVOLUTION [WR102-ARIN] 22732 LINKNET [AW811-ARIN] 22733 ABN-AMRO-2 [LP377-ARIN] 22734 DEVRY-CHICAGO [DR762-ARIN] 22735 NAMIBIA-OPM [EA252-ARIN] 22736 CPS-BGP [ZH92-ARIN] 22737 SCHENKERUSA [PA300-ARIN] 22738 LANLOGIC [DR70-ARIN] 22739 BYU-H [BC1142-ARIN] 22740 CAUNET-1 [HWC1-ARIN] 22741 WESTLBNY1 [JL1750-ARIN] 22742 CT-ED-NET [RV350-ARIN] 22743 FIRST-AMERICAN-REIS [MP1221-ARIN] 22744 WRIGHT-EXPRESS [MT808-ARIN] 22745 BRTURBO [AC882-ARIN] 22746 FIRST-AMERICAN-FLOOD [KL787-ARIN] 22747 TCIS [ISA2-ARIN] 22748 CROP-DATA [NDA5-ARIN] 22749 MNL [BK673-ARIN] 22750 BCSNET [PV179-ARIN] 22751 JATERRANSON [AT392-ARIN] 22752 CW-OPTICAL-XO [IP-FIX-ARIN] 22753 REDHAT-0 [JM3008-ARIN] 22754 GAPARTNERS-CT [RG4165-ARIN] 22755 DAVISVISION [MC1670-ARIN] 22756 ISLC-BLUFFTON [WNG2-ARIN] 22757 DAVIDGROUP [BP727-ARIN] 22758 SMG-MIA [PM905-ARIN] 22759 SEREN-CALIFORNIA [SS394-ARIN] 22760 ADVANCED-FINANCIAL-S [AD637-ARIN] 22761 CENTER-RURAL [SC1137-ARIN] 22762 OFIDEN [DH1630-ARIN] 22763 EJASENT-ESJ [YY42-ARIN] 22764 FD-MFG [SD512-ARIN] 22765 EJASENT-ESJ2 [YY42-ARIN] 22766 EDMS-NET [PD97-ARIN] 22767 NASA-ESDIS-NET [JS3246-ARIN] 22768 NOPLACE [JS1346-ARIN] 22769 FONES-WEST-ISP [SB1136-ARIN] 22770 WHEELS-COM [CT514-ARIN] 22771 THE-COMMON-FUND [DH199-ARIN] 22772 LOGIN [EG76-ARIN] 22773 CCINET-2 [IC146-ARIN] 22774 AGNS-CANADA [LR7-ARIN] 22775 MOORECAP [NL172-ARIN] 22776 CONRES01730 [MB1707-ARIN] 22777 XOR [KE186-ARIN] 22778 LOEAHI [LNA1-ARIN] 22779 ASGAARD [CL784-ARIN] 22780 ABOUT-CORP-BLK [RB1598-ARIN] 22781 RBLHST [PB209-ARIN] 22782 DSGI [FM297-ARIN] 22783 WEBPOWER [WH296-ARIN] 22784 PORTMORGAN [RM1721-ARIN] 22785 LABVELOCITY [JF1165-ARIN] 22786 EHELP [MJ545-ARIN] 22787 ARRIS [LT2-ARIN] 22788 ACSIS [MP1154-ARIN] 22789 VALUELINX [SM1666-ARIN] 22790 ACTWORLDNET [JB2841-ARIN] 22791 PENGUINPUTNAMINC [RT662-ARIN] 22792 MNET [BH502-ARIN] 22793 CASSOCORP [RH682-ARIN] 22794 AQR [KL560-ARIN] 22795 ABOUT-COM-BLK2 [RB1598-ARIN] 22796 CCC-HART [KK373-ARIN] 22797 GDFS [JD1544-ARIN] 22798 REDLINK [RPM1-ARIN] 22799 DCC [AT118-ARIN] 22800 NPLHUBNET [FC245-ARIN] 22801 INTAP-1 [CM1299-ARIN] 22802 NIVIS [AL685-ARIN] 22803 ENCOMPASS-2 [MP1232-ARIN] 22804 LIFETIME-TV [FR178-ARIN] 22805 WORLDWIDE-WEB [DG1336-ARIN] 22806 TENCO-INC [EV193-ARIN] 22807 CINEMARK-US [SR604-ARIN] 22808 DMB-B [RS2017-ARIN] 22809 AMFAM-INS [JL4717-ARIN] 22810 BROOKS-AUTOMATION [SH777-ARIN] 22811 WSGR [BZ134-ARIN] 22812 ADP-CA [WJA1-ARIN] 22813 EPOLICY [CK539-ARIN] 22814 ATCF-NETBLK-1 [JC2610-ARIN] 22815 KELLY-INSURANCE-GROUP [TC975-ARIN] 22816 VIT [LC635-ARIN] 22817 VIC-USEXPRESS [VDA2-ARIN] 22818 DIRECTNET-BR [RS2019-ARIN] 22819 UCS-NPDU [CV233-ARIN] 22820 CYBERA [NE66-ARIN] 22821 AIPSO-COM [TF482-ARIN] 22822 LLNW [WP5-ARIN] 22823 HEARTLANDAMERICA [TB1042-ARIN] 22824 ACP-ASIM [DH1633-ARIN] 22825 OMTOOL-BLOCK1 [ED10-ARIN] 22826 CALIPER [RF110-ARIN] 22827 SMARTCITY2 [DL571-ARIN] 22828 CCBN [JV545-ARIN] 22829 RNKTEL [FW135-ARIN] 22830 SIMFLEX [CB1272-ARIN] 22831 WOODFRUITTICHER [JM3041-ARIN] 22832 CCHCANADA [JM3042-ARIN] 22833 SVCTEANTL-FRTLCOM-NAV [EG386-ARIN] 22834 BOSTONCOLLEGE [MB1904-ARIN] 22835 BDLAWBGP [MS2437-ARIN] 22836 CGI-1 [GE174-ARIN] 22837 SWIFTCOMM-NET [AA583-ARIN] 22838 GIONA-US [PB844-ARIN] 22839 STANDARDAERO [CW804-ARIN] 22840 RMI-NETWORKSERVICES [HB114-ARIN] 22841 ENERMETRIX [AS950-ARIN] 22842 MERCHANTS [DB2126-ARIN] 22843 MIIS [MG1260-ARIN] 22844 RETRIEVER [SR884-ARIN] 22845 MICHIGAN-CONNECT [BJ461-ARIN] 22846 DTVLA [MA830-ARIN] 22847 BOWDOIN [NOC52-ARIN] 22848 XL-CAPITAL [AS1151-ARIN] 22849 ATT-WIRELESS-NDVN [KK367-ARIN] 22850 EPANA [MH1546-ARIN] 22851 NSU-SD [JG28-ARIN] 22852 FMCTEL [CD584-ARIN] 22853 EMULEX-1 [DL937-ARIN] 22854 CATAWBA-COLLEGE [RR1265-ARIN] 22855 CARDINALHEALTH1 [TS1355-ARIN] 22856 DORADO [NB298-ARIN] 22857 NATIONAL-ADVISORS [MK1118-ARIN] 22858 TOGETHERSOFT [RS2031-ARIN] 22859 ON2-TECH-DUCK [AE226-ARIN] 22860 TECNOERA [JPA5-ARIN] 22861 ASYMTEKPRIMARY [MS1895-ARIN] 22862 EXTROVERSIVE [TR666-ARIN] 22863 MIST [JS3286-ARIN] 22864 UTPA [KS1049-ARIN] 22865 ITXC-HQ [WD184-ARIN] 22866 MAGLIA [NR199-ARIN] 22867 IHN [JP1734-ARIN] 22868 BDPINTERNATIONAL [MS1129-ARIN] 22869 ASN-SULANET [JA847-ARIN] 22870 TSI-GRX [DS1415-ARIN] 22871 ASN-HOTBAR-COM [EK292-ARIN] 22872 HAPPEWARE-AZ-1 [JBH2-ARIN] 22873 ORIENTAL-FINANCIAL [FC116-ARIN] 22874 WESTERN-ILLINOIS-NET [RH1373-ARIN] 22875 HETCO-GW [KK724-ARIN] 22876 JNJBRAZIL [GC705-ARIN] 22877 UMUC [IS183-ARIN] 22878 NET-KN [JJ745-ARIN] 22879 MICRONET [ZZ1962-ARIN] 22880 PRIMED-HPMG [KS1051-ARIN] 22881 USBANCORP-2 [IP-FIX-ARIN] 22882 CEMEX-MEXICO [CCZ1-ARIN] 22883 CONDENAST [LK317-ARIN] 22884 TELECOSMO01 [ZT109-ARIN] 22885 ASI [SK897-ARIN] 22886 OGI [GR300-ARIN] 22887 CHARTER-NET-NW [SL719-ARIN] 22888 SUAGM [EJL1-ARIN] 22889 TRANSTELCO [ML1267-ARIN] 22890 ASERA-INC [RM933-ARIN] 22891 STANDARDINSURANCE [BM1549-ARIN] 22892 WIKIDATANET [WJ129-ARIN] 22893 CYBERWORLD-INT [AS1239-ARIN] 22894 NIC-MEXICO [AIM4-ARIN] 22895 UNER [CGM1-ARIN] 22896 INTERNET-ACCESS [KH740-ARIN] 22897 PUBLISHER-INQUIRY [VR107-ARIN] 22898 DEBTMANAGEMENT [DM2226-ARIN] 22899 NBO-INC [DP1133-ARIN] 22900 ITRON [RZ180-ARIN] 22901 INCIPIO-001 [DR1175-ARIN] 22902 INSC-SSCSD [SM1706-ARIN] 22903 EDGEWEBHOSTING [VF8-ARIN] 22904 BBDO-MINN [ZB32-ARIN] 22905 WCOX [CS1338-ARIN] 22906 FRB-TWAI [RG509-ARIN] 22907 ACSSLS [SF538-ARIN] 22908 KIONETWORKS [IA120-ARIN] 22909 DNEO-OSP1 [GZ64-ARIN] 22910 LOBLAW-COMPANIES [JR16-ARIN] 22911 NY2-EXT1-PNAP [MN488-ARIN] 22912 CITGO-PETROLEUM [RL4230-ARIN] 22913 CSSTRIPARISH [LT175-ARIN] 22914 CLASNET [YG40-ARIN] 22915 FUTUREQUEST-INC [AG721-ARIN] 22916 ONFS-BGP1 [DL1234-ARIN] 22917 INFOCHANNEL [RW1045-ARIN] 22918 REGENERON [MC1707-ARIN] 22919 PCCNET [JV462-ARIN] 22920 BIAEDNET-INTERNET [SK900-ARIN] 22921 CURIOUSPICTURES [RS2046-ARIN] 22922 SHGREENPOINTS [BG800-ARIN] 22923 NIKONET [JT1207-ARIN] 22924 BDD-01 [LC617-ARIN] 22925 ALLIED-TELECOM [KW637-ARIN] 22926 11EZEEWEB-24WIRELESS [BR945-ARIN] 22927 TELEFONICA-ARGENTINA [TDA1-ARIN] 22928 CMR1385 [TL368-ARIN] 22929 VC3 [DC1386-ARIN] 22930 MARY-BALDWIN-COLLEGE [PS963-ARIN] 22931 ONEBEACON [AB1013-ARIN] 22932 MOMINC [WB373-ARIN] 22933 TCIGATEWAY [TR670-ARIN] 22934 EBROADBANDNOW [SG970-ARIN] 22935 WAYNE-BOCES [JG454-ARIN] 22936 ONEEIGHTY [CS86-ARIN] 22937 SIMON-WEBB-NET [CW818-ARIN] 22938 BIGCITY-NET [JM224-ARIN] 22939 IQBUS [CL120-ARIN] 22940 DPR-CONSTRUCTION [SC927-ARIN] 22941 MARYVILLE-DATA-SYS [BA198-ARIN] 22942 DRKW-NYC-2 [SF549-ARIN] 22943 ISO-BLK [RA751-ARIN] 22945 CONGRESS-FINANCIAL [JV227-ARIN] 22946 BRIGHTMAIL [WW259-ARIN] 22947 ACS-NM [DC1650-ARIN] 22948 SONICISP [CB1289-ARIN] 22949 CHEMCONNECT [BK689-ARIN] 22950 USASK [GH655-ARIN] 22951 WTIS-NET [RM1517-ARIN] 22952 ALKINET-1 [JL1796-ARIN] 22953 MEDSOLVE [RS2057-ARIN] 22954 SEECOMM-1 [JN640-ARIN] 22955 UNOCAL [PH45-ARIN] 22956 DATARECOVERY-INC [DK975-ARIN] 22957 MONEYLINE-LENDING [JM3006-ARIN] 22958 FIDELITY-001 [RM1764-ARIN] 22959 PHI-EXT1-PNAP [MN488-ARIN] 22960 RIGAKU-MSC [JN642-ARIN] 22961 DEEPSKYTECH [SW1038-ARIN] 22962 KENNEDY-NW-DC-US [DB2136-ARIN] 22963 VOSN [FF176-ARIN] 22964 ISPT [AM1074-ARIN] 22965 ALLDATA-NETWORKS [ZZ2660-ARIN] 22966 GOSHEN-COLLEGE [DH1660-ARIN] 22967 CIMATELECOM1 [PC798-ARIN] 22968 MIAMI-UNIVERSITY [JS3324-ARIN] 22969 MARIETTA-FIBERNET [HN103-ARIN] 22970 MAINETECHCOLLEGESYS [DH1661-ARIN] 22971 CEIVA-GEN-WC [BC970-ARIN] 22972 NWHSEA [EB26-ARIN] 22973 NORWEST-VENTURE [RLB2-ARIN] 22974 STMI-COM [MP1202-ARIN] 22975 BANCOCHILE [GG701-ARIN] 22976 FIRST-CITIZENS-01 [JV575-ARIN] 22977 ALPHAGRAPHICS [JT1218-ARIN] 22978 GSU [JG701-ARIN] 22979 DUPACO-COM-BGP [SE324-ARIN] 22980 APOGEE-TELECOM [CB1295-ARIN] 22981 HYGRADEBUSINESS [JM3073-ARIN] 22982 LIVE365 [NA293-ARIN] 22983 MADDEN-BGP [DE460-ARIN] 22984 M4LT1BAND [JF1039-ARIN] 22985 UL-LAFAYETTE-1 [SJM9-ARIN] 22986 SONICFOUNDRY [DR1184-ARIN] 22987 USCABLE [CP727-ARIN] 22988 CAMBARASN1 [CP627-ARIN] 22989 CHPT [JC5660-ARIN] 22990 ALBANYEDU [DG1357-ARIN] 22991 TRENDMLS [BW945-ARIN] 22992 SECUREWORKS [NE68-ARIN] 22993 FETTERLOGIC [KL377-ARIN] 22994 FN [ST710-ARIN] 22995 SENSORMED [JV576-ARIN] 22996 DFNOW [MH1568-ARIN] 22997 PREM [ML1282-ARIN] 22998 TAXSIMPLE [JV577-ARIN] 22999 RAMALLO-BROTHERS [RO293-ARIN] 23000 WESCOM [SS1993-ARIN] 23001 WEBWIZARDS [SB1593-ARIN] 23002 PRIMESYS [FM305-ARIN] 23003 MWAA [RT675-ARIN] 23004 VIEWTRADE [KC389-ARIN] 23005 POWER-PULSE [RR1277-ARIN] 23006 VIALTA [SS1994-ARIN] 23007 UNIVERSIDAD-LOS-ANDES [RM1774-ARIN] 23008 NORC-1 [FB280-ARIN] 23009 NORC-2 [FB280-ARIN] 23010 FFHSJ [GC445-ARIN] 23011 ADI [JC2659-ARIN] 23012 MICROCORE-MAIN [ON37-ARIN] 23013 NET-COM [AH759-ARIN] 23014 COCENTRAL-DSL [DM1579-ARIN] 23015 INFOBLVD [FS309-ARIN] 23016 WAPROTOCOL [AM963-ARIN] 23017 TRANSIP [MZ254-ARIN] 23018 VALICERT [RL1004-ARIN] 23019 BGP1-BOH [BK692-ARIN] 23020 IMPSAT-MEXICO [JC608-ARIN] 23021 SECUR-ASSOCIATES [JC2638-ARIN] 23022 CFC-CHIC-1 [KL590-ARIN] 23023 INTUITIVE [DR70-ARIN] 23024 OCDE [JS3352-ARIN] 23025 BONDDESK [BP751-ARIN] 23026 WHIZ [PB857-ARIN] 23027 BOINGO [NJ4-ARIN] 23028 SAUNET [NR201-ARIN] 23029 US-FACTION-BGP [PB858-ARIN] 23030 SBLK [DS91-ARIN] 23031 QUIK-EC-AS [FW138-ARIN] 23032 FCS-INDUSTRIES-01 [JM3134-ARIN] 23033 WOW [EO104-ARIN] 23034 DESCARTES-SVC1 [NE69-ARIN] 23035 VOLOGIC-NET [SP885-ARIN] 23036 N2-THE-NET [RR1278-ARIN] 23037 IMC-BGP [WL21-ARIN] 23038 BRDBND-USER-GRP [GM904-ARIN] 23039 BURLINGTON-RES [SY151-ARIN] 23040 WEBRASKA [FB264-ARIN] 23041 THT [MA848-ARIN] 23042 JALAN [MM1241-ARIN] 23043 ROVER-WIRELESS [DS2359-ARIN] 23044 VMOBILE-CORP [EG395-ARIN] 23045 WEBCLIENTS [AG731-ARIN] 23046 STANDARD [WE3-ORG-ARIN] 23047 MCKINSEY-US [MM2435-ARIN] 23048 IPSWITCH-INC [DM6510-ARIN] 23049 ECOLAB [MS2503-ARIN] 23050 IBCWIRELESS [NV69-ARIN] 23051 AEDORG [RCG-ARIN] 23052 IHOST-SOLUTIONS-1 [ME486-ARIN] 23053 EXPRESS-MEDIA-GROUP [SW1044-ARIN] 23054 NETSCOPE [JO142-ARIN] 23055 AMERICAN-DATAMED [RF755-ARIN] 23056 NRT-BOSTON [JD1007-ARIN] 23057 MONEYPIT [AA565-ARIN] 23058 DHN-BGP-AS2002 [JM3146-ARIN] 23059 LLNW-LAX [WP5-ARIN] 23060 VDGC-HOU [DC1695-ARIN] 23061 HSH [JG1701-ARIN] 23062 JWPEPPER [RM1775-ARIN] 23063 GOVITAL [CD748-ARIN] 23064 FULLAUDIO [MH1576-ARIN] 23065 SBCEO [KT345-ARIN] 23066 SSQI-1 [PN232-ARIN] 23067 OCBCC [ZZ3330-ARIN] 23068 MEIJERNET [MP1276-ARIN] 23069 STAMATS-COMM-CR [JS3379-ARIN] 23070 RESERVEFUNDS-1 [MR1261-ARIN] 23071 HUNTING-INTL [JM224-ARIN] 23072 SEM [GS837-ARIN] 23073 BIGZOO-001 [DK963-ARIN] 23074 PETROBRAS [ACF2-ARIN] 23075 SKOTOS-AS [SNO1-ARIN] 23076 QUARRY-WATERLOO [QH11-ARIN] 23077 SUNCOM [JN651-ARIN] 23078 LOUDOUN-CNTY-VA-GOVT [BS1578-ARIN] 23079 ARVEST-AS1 [SH1256-ARIN] 23080 NETCOM [ZT104-ARIN] 23081 VENTURE-NOC [RD934-ARIN] 23082 QUANGO-INTERACTIVE [JH2302-ARIN] 23083 FRAGOMEN [GL443-ARIN] 23084 CNA-INSURANCE [JC2714-ARIN] 23085 WATSONPHARM [HK127-ARIN] 23086 PROVWASH [DP1168-ARIN] 23087 CDG [PB855-ARIN] 23088 TBG [JP1015-ARIN] 23089 CARMEUSENORTHAMERICA [ZA121-ARIN] 23090 PETCO [JL1826-ARIN] 23091 CHAPINGO-MX [GEJ1-ARIN] 23092 ISUNET [TP168-ARIN] 23093 UICIMKTG [JL1055-ARIN] 23094 YELLOWBOOK [JF1183-ARIN] 23095 SHARP [JY270-ARIN] 23096 PARADIGM [DS2384-ARIN] 23097 COHEN-STEERS [NB308-ARIN] 23098 PHOENIX-PLANO-EDS [ZW72-ARIN] 23099 VANS-AS-NUMBER [JP1747-ARIN] 23100 EASTERN-CABLE [OH46-ARIN] 23101 PERCEPTA-GW2-AS [MF902-ARIN] 23102 HGO-NET [DC1709-ARIN] 23103 CITADONCORP [LY54-ARIN] 23104 HEAFNER-TIRE [BR959-ARIN] 23105 COASTALWAY [PW688-ARIN] 23106 EMPRESA-DE-INFOVIAS [RB1843-ARIN] 23107 CYBERPORT-MONTANA [GB1011-ARIN] 23108 CORSOLUTIONS [JL2036-ARIN] 23109 MONEYLINE-TELERATE [CT534-ARIN] 23110 GENESIS-ASN [JL533-ARIN] 23111 IANA-VENALI [HF20-ARIN] 23112 SINGLEPOINT-RESOURCES [BW526-ARIN] 23113 MULTITEL-UY [PA314-ARIN] 23114 CRITICALHUBNET [HL244-ARIN] 23115 HEALTHBRIDGE [RC1499-ARIN] 23116 MPA-ASN1 [SP93-ARIN] 23117 ICOE-NETWORK [LFW1-ARIN] 23118 SKYBEST [RF623-ARIN] 23119 SITESNOW [GS993-ARIN] 23120 E-BUILDER [JC2728-ARIN] 23121 XSPEDIUS [ZX7-ARIN] 23122 DSU [DV169-ARIN] 23123 CBCMEDIA [TC1021-ARIN] 23124 MILLER-TABAK [RL1021-ARIN] 23125 WORLDWIDE [JL1805-ARIN] 23126 KMCTELCOM-DIA [ZK60-ARIN] 23127 SOFNETINC [KW426-ARIN] 23128 HSBC-BRAZIL [CKW1-ARIN] 23129 SUTTERHEALTH [SW943-ARIN] 23130 BURNADISC [JS3398-ARIN] 23131 STARLAN [KC607-ARIN] 23132 GENERICMEDIA [BR962-ARIN] 23133 HOTELREVMAX [JM3168-ARIN] 23134 METROLIST-SERVICES [RT689-ARIN] 23135 LLNW-SJC [WP5-ARIN] 23136 ONX [SHL1-ARIN] 23137 TRI-VALLEY [ZZ3384-ARIN] 23138 FIRST-STEP [MH81-ARIN] 23139 LEEHEC01 [JJ748-ARIN] 23140 UNIVERSIDAD-CHILE [RJ548-ARIN] 23141 DTCNET [JK639-ARIN] 23142 FULCRUM [RS2108-ARIN] 23143 ADMC-ONLINE [JS3408-ARIN] 23144 ROADRUNNER-COM-CENT [ZS30-ARIN] 23145 DAKEMPA1970 [JM3182-ARIN] 23146 BOD [SR607-ARIN] 23147 COOK-INLET [MA863-ARIN] 23148 TERRENAP [BW963-ARIN] 23149 AFASYSTEMS [GA533-ARIN] 23150 VMSINFO1 [CW840-ARIN] 23151 TERC-1 [CA524-ARIN] 23152 INTERNETCONCOURSE [MF910-ARIN] 23153 KENNAMETAL [JZ345-ARIN] 23154 SANMINA-SCI [LB796-ARIN] 23155 HTC-NET [EJO1-ARIN] 23156 EEMERGE44010001 [WK156-ARIN] 23157 INFORMATICS [SR973-ARIN] 23158 MEDUNITE [AU41-ARIN] 23159 BLUEWAVE [GR488-ARIN] 23160 HEILIND [DL4414-ARIN] 23161 GAB-ROBINS [TB1181-ARIN] 23162 KCI-BSC2 [TK390-ARIN] 23163 N9E7X5E3N1I2N4C [ZC79-ARIN] 23164 LLNW-SFO [WP5-ARIN] 23165 THE-NAT-RESCRH-GRP [JB2999-ARIN] 23166 EXPRESS-NETWORKS [ENO4-ARIN] 23167 FARPOINTER [SB1625-ARIN] 23168 PC-ETAILER [MY146-ARIN] 23169 ARNEILL-PY [MP454-ARIN] 23170 US-ICAP-001 [RD598-ARIN] 23171 MANHATTAN-EDU [JH2332-ARIN] 23172 PENTAGONFEDERALCU [LH583-ARIN] 23173 CSRSD [JB3002-ARIN] 23174 ESPED-BLOCK [DK1000-ARIN] 23175 SWANK [KD454-ARIN] 23176 SERCO [SK866-ARIN] 23177 TNB-NET [JB2508-ARIN] 23178 MMI-NET [MJ570-ARIN] 23179 EMJMETALS-COM-BREA [TR688-ARIN] 23180 BARRA-CO [CC310-ARIN] 23181 BIS-NET [JS3417-ARIN] 23182 ELOCAL-TRADING [SC1006-ARIN] 23183 SWIFTSYSTEMS [VT114-ARIN] 23184 PERSONA [DR80-ARIN] 23185 GHXUS [SB1596-ARIN] 23186 CYBERLOGTECH [DS2405-ARIN] 23187 ICEPTS [DB2230-ARIN] 23188 WIN [CH1108-ARIN] 23189 SKY-ACCESS [SD894-ARIN] 23190 AES [MG1115-ARIN] 23191 LEMOYNE [ZL52-ARIN] 23192 VERIZON [AM1098-ARIN] 23193 CCAC [IG15-ARIN] 23194 CGXCOIN [JM3199-ARIN] 23195 REDWOOD-TELEPHONE [RG77-ARIN] 23196 SYSTEMS-APPL-ENG [GM956-ARIN] 23197 HAWTHORNE [BD746-ARIN] 23198 NCI-AS1 [KB903-ARIN] 23199 COMDATA-NETWORK [TA400-ARIN] 23200 KCI-BSC3 [TK390-ARIN] 23201 MIC-PY [RP1044-ARIN] 23202 MLS-WIRE-LESS [DO391-ARIN] 23203 PITCOMM [RL1029-ARIN] 23204 HMSA-ASNID [DN452-ARIN] 23205 BBSC-NET-SLCUT [BS1607-ARIN] 23206 DATAVOX-TECHNOLOGIES [JO526-ARIN] 23207 NORTHWESTERN-STATE [TB1130-ARIN] 23208 ACIESNET1 [MT856-ARIN] 23209 VHDA20011260123220 [BM1629-ARIN] 23210 EIDETIK [AR690-ARIN] 23211 JCOM-2 [EH310-ARIN] 23212 ELIZABETH [CL821-ARIN] 23213 ASAMXP [DL1285-ARIN] 23214 EAUTOCLAIMS [DM2196-ARIN] 23215 MEGAPATH-US [SC388-ARIN] 23216 RAMTELECOM [AC956-ARIN] 23217 EY-CANADA [RF155-ARIN] 23218 GARTNER [RF1399-ARIN] 23219 MICROCERV [BD771-ARIN] 23220 NASHFINCH [JK1527-ARIN] 23221 ROUTING [NAH1-ARIN] 23222 CBS-INC [IS194-ARIN] 23223 HHLC-1 [JP1807-ARIN] 23224 HHLC-2 [JP1807-ARIN] 23225 HHLC-3 [JP1807-ARIN] 23226 ASI-INTERNET1 [HC280-ARIN] 23227 NIKON [RK890-ARIN] 23228 ACSE [KL601-ARIN] 23229 TRANSCANADA [RGT12-ARIN] 23230 FARMERS-BRANCH [HS390-ARIN] 23231 IGETSMART-COM23502 [TH932-ARIN] 23232 IREN-PGH [EFH4-ARIN] 23233 FENWICK [KM559-ARIN] 23234 FUJIFUTURES [MC1777-ARIN] 23235 BOSMED-88-ENEWTON [ZD65-ARIN] 23236 NETV [MT748-ARIN] 23237 MCMASTER [CW641-ARIN] 23238 VANYON-INET-SVCS [WM343-ARIN] 23239 MERCHANT [MC746-ARIN] 23240 LCA-EXTRANET [JK1571-ARIN] 23241 DELAWARENET [NM353-ARIN] 23242 E-CONNEXUS [JK1600-ARIN] 23243 AMIGONET-ASN01 [JJ665-ARIN] 23244 CALPOP2 [RH1217-ARIN] 23245 TAK [PH671-ARIN] 23246 GIGAIPNET [SI119-ARIN] 23247 HFMUS [RB1869-ARIN] 23248 SMARTCONNECT [DB1930-ARIN] 23249 AVECTRA [GB910-ARIN] 23250 DIGICON [RH1423-ARIN] 23251 BFRC [PZ48-ARIN] 23252 IK [ZI85-ARIN] 23253 DNEO-OSP2 [GZ64-ARIN] 23254 CARR-INTERNET [MF78-ARIN] 23255 PACIFICORP [PM963-ARIN] 23256 BLUETELEGRAPH [IE33-ARIN] 23257 IBMCCH-BOS [DSB2-ARIN] 23258 PARAMOUNTPICTURES [AY116-ARIN] 23259 PLANES-INCORPORATED [JM3234-ARIN] 23260 DATA-FORTRESS-GROUP [JK1576-ARIN] 23261 JOHN-MORRELL-1 [NM355-ARIN] 23262 LINCOLN-UNIVERSITY [SC449-ARIN] 23263 UCGI [CT556-ARIN] 23264 INTERCERVE-CLT-COLO [SB1641-ARIN] 23265 POCKETINET [SH1297-ARIN] 23266 COMCAST-CABLE [KD493-ARIN] 23267 TRIDENT [WO50-ARIN] 23268 TRADEWINDNET [WFL1-ARIN] 23269 ICONS-RKE-VA-01 [BP486-ARIN] 23270 CBAY-ANNAPOLIS [JT1261-ARIN] 23271 PLUG-PAY [DP1191-ARIN] 23272 CCSI2572274 [MH1065-ARIN] 23273 SBWH [DS2436-ARIN] 23274 PRICELINE-COM-AS-01 [GW553-ARIN] 23275 UICIINSCTR [DS1190-ARIN] 23276 MVM01 [DB1620-ARIN] 23277 SMARTCITY-SDCC [DL571-ARIN] 23278 SMARTCITY-ANACC [DL571-ARIN] 23279 SMARTCITY-LACC [DL571-ARIN] 23280 CETROM [CS1348-ARIN] 23281 CITY-OF-SACRAMENTO [JW1800-ARIN] 23282 COUNTYOFSB [IH93-ARIN] 23283 AMEREN [MS2156-ARIN] 23284 LCSYS [KH280-ARIN] 23285 GES-NATIONAL-LV [ZT107-ARIN] 23286 THRIFTY-CAR5310 [RC1518-ARIN] 23287 SCRIPPS [GS1014-ARIN] 23288 RWE-AMERICAS [JO528-ARIN] 23289 CONNECTION-ISP-BR [ZL90-ARIN] 23290 ALVION [DP1197-ARIN] 23291 FLAGSTAR-BANK-US [MM2503-ARIN] 23292 MILLENIUM-DIGITAL [ZM166-ARIN] 23293 JAMECO-ELECTRONICS [PD632-ARIN] 23294 ULM-1 [CE65-ARIN] 23295 INET-HDC [FS322-ARIN] 23296 LINCARE [MSM10-ARIN] 23297 EMASON-CLRWTR-01 [NM359-ARIN] 23298 TVSCOMMUNICATIONS [TC1020-ARIN] 23299 MRM-BERMUDA [JP1823-ARIN] 23300 MDCONNECT [WA141-ARIN] 23301 WISC-INVESTMENT-BOARD [DP1201-ARIN] 23302 SMTUSA [JC2814-ARIN] 23303 NEXTEL-IT [DM1283-ARIN] 23304 DIGITAL-FOUNTAIN [PP547-ARIN] 23305 WORTHINGTONINDUSTRIES [TG651-ARIN] 23306 PLASTIPAK-PACKAGING [JL4441-ARIN] 23307 IENTRY-NETWORK [JF1315-ARIN] 23308 SWEETWATER [RG77-ARIN] 23309 CCCOE-NET [MH122-ARIN] 23310 TASTYLIME [JR82-ARIN] 23311 HINDANET-01 [VP129-ARIN] 23312 MARIANNA-TELEPHONE [SD911-ARIN] 23313 GCS-USA [DH1723-ARIN] 23314 ORLANDOTELCO [HB331-ARIN] 23315 HALLDICKLER [MAO4-ARIN] 23316 ATM-CDN-MTL-AS-001 [JS3483-ARIN] 23317 WHITMANCOLLEGE [KK93-ARIN] 23318 PDL [JR1671-ARIN] 23319 MEDIASPACE [JP1827-ARIN] 23320 DID-IT [CW857-ARIN] 23321 MEDIACHRON [MA865-ARIN] 23322 AMERICAN-AUTO [DU80-ARIN] 23323 NET-DVC [BS1632-ARIN] 23324 MFEDS01 [RL1050-ARIN] 23325 US1NET [HB335-ARIN] 23326 BROADCOM-CORP [BC1212-ARIN] 23327 ITINET [JJ320-ARIN] 23328 ZURICH-GLOBAL-ASSETS [RB1895-ARIN] 23329 FRSI [AT454-ARIN] 23330 OMEGA-ADVISORS [MC746-ARIN] 23331 EQT [GS689-ARIN] 23332 MANUHQ [CB650-ARIN] 23333 AGIS306 [CG603-ARIN] 23334 COMM-OF-BASEBALL [CH1139-ARIN] 23335 SEVIN [RF597-ARIN] 23336 DATATWIST-NETWORK [PH498-ARIN] 23337 PATRIOT [AA611-ARIN] 23338 NTERA [JP1843-ARIN] 23339 TACHYON-INC [SD925-ARIN] 23340 AFFMANAGERSGRP [JT1276-ARIN] 23341 PPSINCLITTLEROCK [DW682-ARIN] 23342 UNITEDLAYER [AK282-ARIN] 23343 TRNS [MS2595-ARIN] 23344 DUPONTDISPLAYS [DS2456-ARIN] 23345 WEBCORE [JB1802-ARIN] 23346 JLTSERVICES [FC324-ARIN] 23347 DCC-US [PG575-ARIN] 23348 ARCHWIRELESS [DN435-ARIN] 23349 FARMERS-NETWORK-WEST [FIA1-ARIN] 23350 EQUIVA [EWF1-ARIN] 23351 FLUENTNH [EEZ2-ARIN] 23352 SERVER-CENTRAL-CHI [JL1890-ARIN] 23353 DIVEOMX [VM182-ARIN] 23354 MEDIARING [ZZ3541-ARIN] 23355 DICTAPHONE-ICHART [PL607-ARIN] 23356 WOW-PAGES [JT1090-ARIN] 23357 CXP [DKS7-ARIN] 23358 MIDFL-NSOURCE [DF315-ARIN] 23359 INDIVISUAL-LEARNING [VS256-ARIN] 23360 MORIMOR [JD1682-ARIN] 23361 CARADASLABS [JS3049-ARIN] 23362 DATATXT [DE482-ARIN] 23363 RHINO-NET [RS2152-ARIN] 23364 ACI-NA [MW632-ARIN] 23365 SPIRIAN-455-23-60611 [MP1257-ARIN] 23366 LSUHEALTHSCIENCESCTR [BP185-ARIN] 23367 SWANK-ELMHURST [KD454-ARIN] 23368 PCSCONNECT [RS2153-ARIN] 23369 SCOE [MS2598-ARIN] 23370 NET-TY [CJ412-ARIN] 23371 REFLECTONE [JS9810-ARIN] 23372 IDCGLOBAL [EH453-ARIN] 23373 CYENCE-01 [CP761-ARIN] 23374 FORT-PEARCE-UTILITY [RG77-ARIN] 23375 GTA-COM [DR1203-ARIN] 23376 SPROCKETDATA [GB922-ARIN] 23377 CARLSON [SS2090-ARIN] 23378 FRANKLINMINT [AS1312-ARIN] 23379 CHECKAGAIN [SS2098-ARIN] 23380 COBBEMC [JG1775-ARIN] 23381 TRAVELERS [LD419-ARIN] 23382 USERVERS [AG769-ARIN] 23383 METROREDHN [UM21-ARIN] 23384 STORAGE [SL995-ARIN] 23385 ITCONVERGENCE [EC492-ARIN] 23386 CRYE-LEIKE-REALTORS [GF575-ARIN] 23387 SENECA [KN266-ARIN] 23388 DUANE-MORRIS-CHICAGO [HB338-ARIN] 23389 VIDNET [MA2294-ARIN] 23390 OPMR-1 [JK1616-ARIN] 23391 OASIS-SALUDA [RW1011-ARIN] 23392 VWFS [AV233-ARIN] 23393 ISPRIME [PR516-ARIN] 23394 PSPINC-BDC [TR686-ARIN] 23395 ELIASSPORTSBUREAU [CT566-ARIN] 23396 NUTRISYSTEM [BP788-ARIN] 23397 CBOT [CV248-ARIN] 23398 ZHONE [MC351-ARIN] 23399 ISP-MANAGEMENT [CC1350-ARIN] 23400 IAPC [IH96-ARIN] 23401 NAC-TRANSIT [AR97-ARIN] 23402 OMNIPLEX [BP783-ARIN] 23403 DESIGNRITE-NET [GW498-ARIN] 23404 RITTERNET [RNA1-ARIN] 23405 COMMERZBANKUSA [DA926-ARIN] 23406 VERISITY-DESIGN [SB1642-ARIN] 23407 ALT-N [BE152-ARIN] 23408 TBI-001 [BT625-ARIN] 23409 HERALD-ASN1 [PM983-ARIN] 23410 NET-NASSAU-BOCES [CR825-ARIN] 23411 PRISTINE [CB1370-ARIN] 23412 NET-CI-2 [DG1075-ARIN] 23413 SEEDRG [FG134-ARIN] 23414 AUTORIDAD [RG1118-ARIN] 23415 MD1NET-1 [DG1417-ARIN] 23416 NURIA-CHILE [JA1187-ARIN] 23417 PACKAGING-CORP [TG666-ARIN] 23418 GMP1701 [EP316-ARIN] 23419 TIARA [RP1083-ARIN] 23420 NASHVILLEWRAPS [BB1708-ARIN] 23421 CTS-MNS [EBL-ARIN] 23422 SECDOG-NET01 [MJ587-ARIN] 23423 SATELLITE-NY [PE177-ARIN] 23424 STATSINC [JS3537-ARIN] 23425 SVTINC [SW1086-ARIN] 23426 BKD-LLP [ZZ3349-ARIN] 23427 CMISERVICES [WT173-ARIN] 23428 CVC [KL591-ARIN] 23429 LUCEFORWARDHS-SD-1 [DNN1-ARIN] 23430 HCCTEL [MS1164-ARIN] 23431 BROKERAGE-SYSTEMS [NR218-ARIN] 23432 TUSCO-NET-1 [NT178-ARIN] 23433 STAMPS-COM [JH28-ARIN] 23434 LANDMARKEDUCATION [CW867-ARIN] 23435 VANDERWEIL-ENGINEERS1 [DFR1-ARIN] 23436 US-WAMU-NET [RC1602-ARIN] 23437 WEBMETHODS [BK611-ARIN] 23438 ADCNAP-MIA-01 [RC1545-ARIN] 23439 AMADAAMERICA [NL184-ARIN] 23440 V1SF1-NET [PU28-ARIN] 23441 OPTIDYNAMIC [JB3126-ARIN] 23442 LLW [JT1291-ARIN] 23443 JDCAPITAL-BGPASN-001 [NS395-ARIN] 23444 SEVERN-TRENT-LABS [PT91-ARIN] 23445 NETFIDO [RL1065-ARIN] 23446 NSAI [DD1309-ARIN] 23447 PLAYERSCOMPUTER [SP938-ARIN] 23448 EPCOR [BJ495-ARIN] 23449 UNEXT-DEERFIELD [BH1225-ARIN] 23450 SEEUTHERE [JB3127-ARIN] 23451 WIRELESSFACILITIES [AB1074-ARIN] 23452 NTS-INTERNET [AW563-ARIN] 23453 NPBI-NOC [FS328-ARIN] 23454 CDI-ASP [DA857-ARIN] 23455 ORCO-CORP1 [BA577-ARIN] 23456 IANA-ASTRANS [IANA-ARIN] 23457 SUREBRIDGE [HA71-ARIN] 23458 DHH-AUTHORITY [DF882-ARIN] 23459 MORINDA [AA134-ARIN] 23460 CISCO-PHOENIX-DNET [TW728-ARIN] 23461 DDMS-ECI2 [DK1008-ARIN] 23462 SAUNSTAR-PARKPLAZA [RG1127-ARIN] 23463 LONEPINECAPITAL [TK656-ARIN] 23464 ILCSNET [PC352-ARIN] 23465 NUTELECOM [DF883-ARIN] 23466 COURIERPOSTNEWSPAPER [ZG50-ARIN] 23467 ADVANTECH-SOLUTIONS [KP558-ARIN] 23468 XBOX-ONLINE [RR1346-ARIN] 23469 HIGHWOODS [GB605-ARIN] 23470 RQSI [JH2423-ARIN] 23471 ATHERSYS-MAIN [RR522-ARIN] 23472 SONICWALL-BGP [JS3546-ARIN] 23473 EMB-FLL [JC2856-ARIN] 23474 SNL-FINANCIAL [DP1222-ARIN] 23475 COMB-SPEC [EH459-ARIN] 23476 OAKASSOCIATES [SH234-ARIN] 23477 AIRLINE-AUTOMATION [JF1283-ARIN] 23478 INTERNET-SECURITIES [BAV1-ARIN] 23479 TSPEC [DB1042-ARIN] 23480 AIRBORNE [PH654-ARIN] 23481 HCTC-LINK1 [BG849-ARIN] 23482 IMAPDATA [SP873-ARIN] 23483 SHASTACOE [DL1315-ARIN] 23484 PACENET [MM2574-ARIN] 23485 LE-MERIDIAN [SK953-ARIN] 23486 NETSPAN [LH289-ARIN] 23487 CONECEL1 [DA620-ARIN] 23488 INDEXA-CL [AA659-ARIN] 23490 SERANOA-NETWORKS [SL1006-ARIN] 23491 DECIBELPRODUCTS [LH607-ARIN] 23492 NEZPERCETRIBE [JM2745-ARIN] 23493 COOP-RES-SERVICES [AK665-ARIN] 23494 HSC [IA12-ORG-ARIN] 23495 EDSMXINTASN-01 [LL571-ARIN] 23496 REGENCE [MC1822-ARIN] 23497 PHATPIPE-NOCAL [LS826-ARIN] 23498 THTI [IF63-ARIN] 23499 45700ZMBL [NM371-ARIN] 23500 GREYWOLF-TECHNOLOGIES [BM1672-ARIN] 23501 TMX [MP884-ARIN] 23502 MORAGA [SB897-ARIN] 23503 BGE-INTERNET1 [RS1856-ARIN] 23504 SPEAKEASY [DP1227-ARIN] 23505 ECG-CHARLOTTE [DW1386-ARIN] 23506 NUBRIDGES [PK490-ARIN] 23507 NET3G [BC1233-ARIN] 23508 GECMF [RL1075-ARIN] 23509 INVLOCSVC [AR720-ARIN] 23510 BRUT [JV609-ARIN] 23511 CONGOLEUM [BM1673-ARIN] 23512 RGTS-SJ [IA22-ARIN] 23513 WHALEY [AW557-ARIN] 23514 ACCELACOM-BWI [PXF1-ARIN] 23515 ONLINESERVICESUSAINC [CK216-ARIN] 23516 ALLOY-INC [EM643-ARIN] 23517 IGNW [TMW1-ARIN] 23518 ING [RES70-ARIN] 23519 XNETCORV [SM1839-ARIN] 23520 NEW-WORLD-NETWORK [JH2154-ARIN] 23521 SHOREWEST [KN267-ARIN] 23522 CIT-FOONET [PA432-ARIN] 23523 RAINYDAYSOFTWARECORP [ST757-ARIN] 23524 MAGNUM [RD975-ARIN] 23525 SCI [KB941-ARIN] 23526 CARLSONCAPITAL [JJ310-ARIN] 23527 COTELLIGENCE [JM5649-ARIN] 23528 BASELL [RF792-ARIN] 23529 BONAPPETIT [MU60-ARIN] 23530 CASECENTRAL [CS1440-ARIN] 23531 TTLC-INTERNET [JD1707-ARIN] 23532 YADA [NE73-ARIN] 23533 KBTOYS [DO361-ARIN] 23534 HANLEY-WOOD [ES784-ARIN] 23535 HOSTROCKET [JR1716-ARIN] 23536 FANIZZI [LC672-ARIN] 23537 MICROSOURCEASN [RC294-ARIN] 23538 IPI [JG1686-ARIN] 23540 DNX-NET-01 [JP2028-ARIN] 23541 ANMCUR01 [RW1126-ARIN] 23542 TOTALSPEED [SC1388-ARIN] 23543 IDX-SYSTEMS-CORP-ISD [RN469-ARIN] 23544 SKYPILOT [DE474-ARIN] 23545 LCA-VISION [MG1368-ARIN] 23546 LEVINCO-NY [DS2517-ARIN] 23547 WINSTON-STRAWN [TS1478-ARIN] 23548 THEDACARE [RR552-ARIN] 23549 DATA-IXP [GLO1-ARIN] 23550 ULTRACOM [EO114-ARIN] 23551 1-INGWILDE [CT259-ARIN] 24489 MARINK12 [DL1326-ARIN] 25539 ARISTOTLE [JLW6-ARIN] 25600 MATRIKON-1 [MR978-ARIN] 25601 TMANAGE-64-218-169 [WH326-ARIN] 25602 TRAVELERSPCAS2 [LD419-ARIN] 25603 SCOTTSDALE-INSURANCE [RL1073-ARIN] 25604 3NT3RGY-K0CH [LK352-ARIN] 25605 RGB-INTERNET-SYSTEMS [RB1952-ARIN] 25606 CPVCOM [HS356-ARIN] 25607 IBW-BGP [JW1141-ARIN] 25608 WISUSA [SS2157-ARIN] 25609 DMC [JG999-ARIN] 25610 FLAGLERTITLECOMPANY01 [DC1794-ARIN] 25611 NSLIJHS [JV616-ARIN] 25612 DSL-EXPRESS [JB2996-ARIN] 25613 PMECOMPANIES-DOM [MO453-ARIN] 25614 UBIQUITEL [JL1940-ARIN] 25615 BBV [BVH1-ARIN] 25616 AR-GROUP-HOUSTON [JB3166-ARIN] 25617 SMITHNEPHEW [DG1440-ARIN] 25618 PCESYSTEMS-INTERNET1 [LM630-ARIN] 25619 VECTOR-CAPITAL [RO316-ARIN] 25620 COTAS [GFC-ARIN] 25621 ONEVOICE [JH2455-ARIN] 25622 DEGNAN [BD810-ARIN] 25623 MSDCAPITAL-ASN01 [JG1817-ARIN] 25624 QUESTERRA [JH2456-ARIN] 25625 IPAI [MZ275-ARIN] 25626 POTEN [TG682-ARIN] 25627 BTS-USA [LB858-ARIN] 25628 FCFCU-AS [GS1055-ARIN] 25629 695ONLINE [GN191-ARIN] 25630 CARROTWEST [MS2535-ARIN] 25631 GALLAUDET [LB836-ARIN] 25632 SPDE [KW690-ARIN] 25633 DATAMATX-ATL [MS2033-ARIN] 25634 KIODEX [NO193-ARIN] 25635 SAIT-CA [JR1727-ARIN] 25636 ONTL-2002 [MM169-ARIN] 25637 PRMTC [BT438-ARIN] 25638 4GUYS [DN478-ARIN] 25639 CASELOGIC [JB995-ARIN] 25640 HAWAII-DEPT-OF-EDUC [GF588-ARIN] 25641 ABC-SCH-SUPP [CB1391-ARIN] 25642 SPIDERHOST [SNO2-ARIN] 25643 TYKHE [HT193-ARIN] 25644 LOGICLINK [PB923-ARIN] 25645 OPENREACH-2 [JH2194-ARIN] 25646 NCCN [SM1863-ARIN] 25647 TIPG [LS843-ARIN] 25648 PARALLAXSYSTEMS [RU58-ARIN] 25649 MONTGOMERYCOUNTY200PR [AG689-ARIN] 25650 PAXCOM [PN251-ARIN] 25651 SDIATTMCI [AS1243-ARIN] 25652 BRAND-X-INTERNET [JP1394-ARIN] 25653 PEGASUS [JS3618-ARIN] 25654 LPCAPWILTON [TK656-ARIN] 25655 OSTK-COM [SP958-ARIN] 25656 OLEMISSS [MM163-ARIN] 25657 DSL-SERVICES [MR112-ARIN] 25658 EQUINIX-RS-SJO [JR82-ARIN] 25659 MERIDIANTELESIS [HT195-ARIN] 25660 ALTERITYNET [DM2311-ARIN] 25661 SUNESIS-PHARM [MC463-ARIN] 25662 DDPSC [RT727-ARIN] 25663 PRIDEMOBILITY [JH2479-ARIN] 25664 SOLANOCOE [PC871-ARIN] 25665 LIVEOFFICE [JR1749-ARIN] 25666 BAREWEB [BR682-ARIN] 25667 HOME-SHOPPING-NETWORK [ZH24-ARIN] 25668 MERIDIANTELESIS2 [HT195-ARIN] 25669 MERIDIANTELESIS3 [HT195-ARIN] 25670 TWISTEDPAIRCA [DD1337-ARIN] 25671 VALEXIA [AL742-ARIN] 25672 GRIZZARD229 [JJ821-ARIN] 25673 RMSSLB [DW1439-ARIN] 25674 GDC [EG256-ARIN] 25675 PICTUREPEOPLE [MG1378-ARIN] 25676 FEDEX-FREIGHT [MC181-ARIN] 25677 ONFS-BGP2 [DL1234-ARIN] 25678 SCHIFFHARDIN [DS2529-ARIN] 25679 TDC-DATA3 [SY167-ARIN] 25680 EMUNET-HBGVA [DM2299-ARIN] 25681 SWNM [DJ53-ARIN] 25682 CONTRACTDATASCAN [JM3362-ARIN] 25683 WBSSC [JE383-ARIN] 25684 WEBERSHANDWICK [RF780-ARIN] 25685 E-VILLAGE [IE37-ARIN] 25686 UNGARETTI-HARRIS [HG223-ARIN] 25687 KVH02842 [MA616-ARIN] 25688 AMERITIF [TR239-ARIN] 25690 MAMSI [KK776-ARIN] 25691 CTSTATEU [RM400-ARIN] 25692 AEGISINFOSYS [HY15-ARIN] 25693 CLEARPATH-NETWORKS [RS892-ARIN] 25694 ATOMIC [AH824-ARIN] 25695 LEO [BM1647-ARIN] 25696 NABNY [VM201-ARIN] 25697 WAITSFIELD-NETWORK [MM2453-ARIN] 25698 SMART-CITY [DC1808-ARIN] 25699 WILSONART-INTL [DM81-ARIN] 25700 SWIFTDESK [HG227-ARIN] 25701 AMERICATEL-PERU [VH321-ARIN] 25702 RELIASERVE [KM1005-ARIN] 25703 ONEWORKPLACE [RA799-ARIN] 25704 MULTIVISION-INC [MT906-ARIN] 25705 AMERICATEL-PERU2 [VH321-ARIN] 25706 INTERLINKCI-AS1 [AS2249-ARIN] 25707 ITECH [JB3189-ARIN] 25708 GOODAD-1 [DC1818-ARIN] 25709 LAMARUNIV [FO74-ARIN] 25710 FULL-CHANNEL [RG77-ARIN] 25711 SNYDERSDRUGSTORES [DR1273-ARIN] 25712 CSIPADKY [LR62-ARIN] 25713 FDS [TR718-ARIN] 25714 ACTIVAR [EM650-ARIN] 25715 UREACH-C [MS714-ARIN] 25716 OCEANWIDE-PRODNET-01 [DC1819-ARIN] 25717 RAVENSFIELD [AR709-ARIN] 25718 COCHA [PM1014-ARIN] 25719 MERIDIANTELESIS4 [HT195-ARIN] 25720 HONEYCOMB [KS1160-ARIN] 25721 DATA-CONTROL-CORP [JR1750-ARIN] 25722 IMARKCOMMUNICATIONS [SC1406-ARIN] 25723 AOLTW-WMG-DE [AOL-NOC-ARIN] 25724 MANGROVE [RC1599-ARIN] 25725 TE [RS2227-ARIN] 25726 AVES-WAN [FR192-ARIN] 25727 UBSW-ENERGY [JW1868-ARIN] 25728 ASO [RC526-ARIN] 25729 CITY-OF-IRVING [SEB2-ARIN] 25730 USENIX [SL1022-ARIN] 25731 TEKSOLVERS [TS1507-ARIN] 25732 BLUEPUMPKIN [KF383-ARIN] 25733 WAVETEL [DR297-ARIN] 25734 AMERICANET [JT1268-ARIN] 25735 ANYSITE-TECHNOLGIES [MT761-ARIN] 25736 TRADEONEMKTG [DH1794-ARIN] 25737 ENFRA-AV [EA284-ARIN] 25738 CONNACTIVITY [RB1978-ARIN] 25739 ADTRAN [SC1409-ARIN] 25740 SAC [CC1402-ARIN] 25741 MESA [BF589-ARIN] 25742 DONERUS [DA953-ARIN] 25743 EEA-EPSON [SG1003-ARIN] 25744 ONYX-ACCEPTANCE [BV242-ARIN] 25745 ALENTUS [DM2322-ARIN] 25746 UNISYS-SLC [WG184-ARIN] 25747 VSC-SATELLITE-CO [RL879-ARIN] 25748 CQGNET-CHICAGO [JW1879-ARIN] 25749 ISLANDINT [HRA70-ORG-ARIN] 25750 COMMERSEL [CK607-ARIN] 25751 VALUECLICK [KG548-ARIN] 25752 NEO [MS2690-ARIN] 25753 CALPERS [HK210-ARIN] 25754 INSFL [MS2691-ARIN] 25755 NOC1-INSIDECREW [RW1157-ARIN] 25756 MS-SOC [MM2627-ARIN] 25757 VAILNET [JU24-ARIN] 25758 CADRE-04012002 [BN309-ARIN] 25759 MOTIVATION-EXCELLENCE [AF381-ARIN] 25760 BROOKFIELD-HOMES-WASH [RN472-ARIN] 25761 STAMINUS-COMM [MM2426-ARIN] 25762 BOCUSA [BL853-ARIN] 25763 DDSRC-NET [MH1507-ARIN] 25764 TELCO-NETWORK [RC1615-ARIN] 25765 CQGNET-NEWYORK [JW1879-ARIN] 25766 MAXUPTIME [BG837-ARIN] 25767 WAVEFORM [NM380-ARIN] 25768 AQ-1 [KD296-ARIN] 25769 GVTEL [GF159-ARIN] 25770 RESGEN [NA321-ARIN] 25771 HUBERLAW [JP1926-ARIN] 25772 TRATEXAS [EC468-ARIN] 25773 EJOURNEY [JS424-ARIN] 25774 CHAPMORTCORP [DBG1-ARIN] 25775 LABFS [RR1382-ARIN] 25776 UNIV-OF-OKLAHOMA [MS2700-ARIN] 25777 SNE [HE60-ARIN] 25778 URBAN-INSTITUTE [JB1487-ARIN] 25779 HAMAMATSU-CORPORATION [JH2500-ARIN] 25780 NFA-INTERNET1 [SN16-ARIN] 25781 GREENHILL [JS3672-ARIN] 25782 EDGE-1-AIRLOGIC [EK323-ARIN] 25783 HBK-NEW-YORK [SP976-ARIN] 25784 CSC-IGN-AMER-HOU [BM1480-ARIN] 25785 COMUNITY01 [BH1277-ARIN] 25786 ABSCORP [AC1031-ARIN] 25787 CSF-NM [MC1863-ARIN] 25788 EXCELON [TM1399-ARIN] 25789 LMU [ZL77-ARIN] 25790 GAMMANETWORKING [NAG1-ARIN] 25791 BILLMATRIX-CORP [PA121-ARIN] 25792 TMC-HEALTHCARE [JW1897-ARIN] 25793 EDSZA-WAN [NT183-ARIN] 25794 DPCLAX [TA512-ARIN] 25795 ARPNET [GD444-ARIN] 25796 ADVIZEX-TECHNOLOGIES [CB1231-ARIN] 25797 TERANET [CM1477-ARIN] 25798 MINDSTECH [MNO4-ARIN] 25799 HOLMAN [DA663-ARIN] 25800 ASPEN-TECHNOLOGY [DH837-ARIN] 25801 AUTOMATED-FINANCIAL [MD1147-ARIN] 25802 HBO [CN387-ARIN] 25803 KYUS [JD1744-ARIN] 25804 LLNW-LGA [WP5-ARIN] 25805 STIKEMAN [PB944-ARIN] 25806 RALEYNET [TR727-ARIN] 25807 INFUTURO [GB707-ARIN] 25808 HMTF [WW296-ARIN] 25809 HBK-NY [SP976-ARIN] 25810 ADEC [PS1041-ARIN] 25811 WORLDLINKTELECOM [SK982-ARIN] 25812 ESTAFETA [FJV3-ARIN] 25813 LASON [CH1192-ARIN] 25814 NEBRASKA-ON-RAMP-INC [DB2386-ARIN] 25815 PRIMEOFFICECENTER [JR1602-ARIN] 25816 TOURO [RK947-ARIN] 25817 SMARTECHCORP [JA1232-ARIN] 25818 CMCNETWORKS [GW580-ARIN] 25819 SATSEC [WB405-ARIN] 25820 HMC [JS3691-ARIN] 25821 NET-SCNB [LM812-ARIN] 25822 ACUMENSOL [MD1314-ARIN] 25823 REHABCARE-NET [JS3045-ARIN] 25824 CONAGRA-FOODS [DJ594-ARIN] 25825 DATAWARE [JK1667-ARIN] 25826 UOTTAWA [PH180-ARIN] 25827 NLM [BD750-ARIN] 25828 STATE-OF-IDAHO [MM2642-ARIN] 25829 SMITHSONIAN [BT630-ARIN] 25830 BLUE-VALLEY [NOC59-ARIN] 25831 NETBLK-HOU-EXP-1 [TL438-ARIN] 25832 PRODEB [MP1385-ARIN] 25833 TOCT [PM1007-ARIN] 25834 OMD [WC352-ARIN] 25835 RBH-CLT-NET1 [GR318-ARIN] 25836 STERLING-JEWELERS [RG1169-ARIN] 25837 EXTRADEV [TT631-ARIN] 25838 OMANET [MO462-ARIN] 25839 INTERWEB [MS2716-ARIN] 25840 PROVIDENCE-EDU [DM2348-ARIN] 25841 BADGERIX [GBL7-ARIN] 25842 BURR-WOLFF [RT737-ARIN] 25843 IESFORVAL [JS3083-ARIN] 25844 SKADDEN1 [AL760-ARIN] 25845 VIRGINIA-MASON [SS1737-ARIN] 25846 CIPHERGEN [JF504-ARIN] 25847 SERVINT [VV77-ARIN] 25848 LTGC [BK758-ARIN] 25849 FILOGIX [BB1778-ARIN] 25850 DCBB [TN342-ARIN] 25851 ENTRANCERAMP0 [JW26-ARIN] 25852 HUTCHTEL [KS1181-ARIN] 25853 ELJY30540 [MP1228-ARIN] 25854 WEBALG-COM [JL1897-ARIN] 25855 DNS-NY [FS350-ARIN] 25856 LEADMASTER [RM1942-ARIN] 25857 ACS-DC-NET [JM3439-ARIN] 25858 PCNET-WICHITA [RC1628-ARIN] 25859 CFS [DJ61-ARIN] 25860 CHICAGO-20-MHZ [CS1494-ARIN] 25861 AUSTIN-BANK [JS3707-ARIN] 25862 EROS [TG701-ARIN] 25863 HUNTERENG [MS2156-ARIN] 25864 APPERETO [AH841-ARIN] 25866 ND-K12-I2 [GR17-ARIN] 25867 INTRIA-HP-CORP [VV78-ARIN] 25868 TELVISTA-COMPANY [BC1273-ARIN] 25869 HSBC-US [DJ596-ARIN] 25870 PCFCOM [NA329-ARIN] 25871 WFG [YT52-ARIN] 25872 ARQULE [RA819-ARIN] 25873 MERCY [TA516-ARIN] 25874 DAVENPORT [ME529-ARIN] 25875 FRIENDFINDER [ZO37-ARIN] 25876 LADWP-INTERNET [WL281-ARIN] 25877 EURORSCG-HQ [EM660-ARIN] 25878 EMACHINES [JHW2-ARIN] 25879 MGHS [KV130-ARIN] 25880 UNIPXNET [TB1202-ARIN] 25881 AUCTIONWATCH [ZH114-ARIN] 25882 SENIOR-META-NTWK [DT828-ARIN] 25883 CITIGROUP [RC1630-ARIN] 25884 WIZARDS [DA641-ARIN] 25885 NPG-NY-GR [AH666-ARIN] 25886 EDS-2 [NNA4-ARIN] 25887 SLIAC [SW1124-ARIN] 25888 CPQ-CXO-IOMC [GW395-ARIN] 25889 QTMEDICAL-1 [FJ82-ARIN] 25890 ADEMCONET [SL948-ARIN] 25891 SBSF [TR735-ARIN] 25892 VERTEX [JZ403-ARIN] 25893 CCU [NOM1-ARIN] 25894 WIRECOM [CS1496-ARIN] 25895 IIA-HFX-NET [TM1419-ARIN] 25896 VELO-FRESNO [CJ283-ARIN] 25897 SERVERBEACH [ZZ4092-ARIN] 25898 FULL-SAIL-INC [MG1416-ARIN] 25899 NOANET-OR [MS779-ARIN] 25900 HEMETUSD [AH846-ARIN] 25901 CP-MEDIA [KJH1-ARIN] 25902 GLBLINK-01 [ZJ29-ARIN] 25903 DOWNLOADTECH [DG1465-ARIN] 25904 GULFCOAST [IC146-ARIN] 25905 PPI-DC1 [SP984-ARIN] 25906 IVGNCB [DL250-ARIN] 25907 BRINKER-INT [DG2799-ARIN] 25908 UNITEL-GUATEMALA [CF615-ARIN] 25909 AXILAX01 [JP1960-ARIN] 25910 LEGION-INS [RS2218-ARIN] 25911 CUTCO [MY160-ARIN] 25912 GETCO1 [FN96-ARIN] 25913 BRENNTAG [BF641-ARIN] 25914 SUNCOM-GPRS [JN651-ARIN] 25915 DIALNIL [TB1202-ARIN] 25916 FREEMAN-COMPANIES [MB2165-ARIN] 25917 SYDA [GL518-ARIN] 25918 AACES440 [HT199-ARIN] 25919 RBI [JO574-ARIN] 25920 EVERYNETWORK [JV556-ARIN] 25921 LAF-CONSOLIDATED-GOV [MB2167-ARIN] 25922 EQUITY-MARKETING [RS2253-ARIN] 25923 CHOICEPOINT [ZN102-ARIN] 25924 PURECONNECTION [PM1038-ARIN] 25925 CITYOFLETH [BB1788-ARIN] 25926 SUPPLYGUYS [DG1470-ARIN] 25927 TELECAM-NET [DM2364-ARIN] 25928 AWC1867 [CH1199-ARIN] 25929 MERCURY-MARIN [JB3262-ARIN] 25930 HOU-HYPD [LR511-ARIN] 25931 SDXBF-DC-1 [PM925-ARIN] 25932 DWSI [JM3462-ARIN] 25933 SOUTHTECH-TI [CEV1-ARIN] 25934 TSI-MAIN [DS1415-ARIN] 25935 WNYRIC-NET [MD31-ARIN] 25936 MJH-SYSTEM [SN401-ARIN] 25937 TRANS-VIDEO [RB2019-ARIN] 25938 SOROS-FUND-MAN [RS2265-ARIN] 25939 DKW [FC301-ARIN] 25940 TIBCO [PW736-ARIN] 25941 SUPERCLUBS [DE508-ARIN] 25942 CRITICALTECH [MH1097-ARIN] 25943 WISPAIR [NR227-ARIN] 25944 WITTSEND [MHW9-ARIN] 25945 UR-ONRAMP-INC [CCM1-ARIN] 25946 NETACCESS-SYSTEMS [GB480-ARIN] 25947 CBCM [NOC60-ARIN] 25948 EMSCOM [NO191-ARIN] 25949 ESCOUT [JR915-ARIN] 25950 BEGGSTELEPHONE [SM1917-ARIN] 25951 EDS-TROY [NNA4-ARIN] 25952 AEAINVESTORS [NL195-ARIN] 25953 WHAFHNY-1 [BR1045-ARIN] 25954 STERNE [MH1729-ARIN] 25955 PROSKAUER-1 [EF293-ARIN] 25956 ASPEN [RS1479-ARIN] 25957 ACETECHUSA [MF976-ARIN] 25958 MSGCORP-01 [DB1474-ARIN] 25959 SUNTRUST [DL1380-ARIN] 25960 SDI [MM2683-ARIN] 25961 WEBTONE [HB360-ARIN] 25962 ALC [GM1041-ARIN] 25963 TCCD-1 [JB2692-ARIN] 25964 LHMM [GC785-ARIN] 25965 BRAMCO [BB1683-ARIN] 25967 OATI-2300 [NS424-ARIN] 25968 SELUNET [RD1005-ARIN] 25969 SLU [AW798-ARIN] 25970 IAC [NOC61-ARIN] 25971 MILWAUKEE-PS [ST559-ARIN] 25972 SAPLABS [AC1066-ARIN] 25973 MZIMA [GK411-ARIN] 25974 HOTWIRE [BT652-ARIN] 25975 GREATACCESS [ML433-ARIN] 25976 UNIVERSCO1-CA [DB2426-ARIN] 25977 HCCS [MM2687-ARIN] 25978 USG-CORP01 [JC2689-ARIN] 25979 COMDC-WI [WN29-ORG-ARIN] 25980 NTRA-BCWAN [BP824-ARIN] 25981 SNWMD-US [PB961-ARIN] 25982 NORTH-DALLAS-BANK [RW1180-ARIN] 25983 ENMAX [SH1394-ARIN] 25984 MEDSTARHEALTH [JK1698-ARIN] 25985 SAMNET-WMA [RPM2-ARIN] 25986 CENTURY-HQ [TR740-ARIN] 25987 WESTCHESTER-LIBRARY [JM3483-ARIN] 25988 CCL [DM2378-ARIN] 25989 STONEEAGLE [JS3746-ARIN] 25990 INTERMARKMEDIA [DT835-ARIN] 25991 BENDIXCVS [MD1092-ARIN] 25992 VERSATECH [PB800-ARIN] 25993 TRI-SBC [JW1925-ARIN] 25994 NPG-001 [MH1095-ARIN] 25995 BRDGR-SYS1 [BV251-ARIN] 25996 FBICJIS [BM1728-ARIN] 25997 OMMLA-1 [RN483-ARIN] 25998 UNDP-ARGENTINA [MB2187-ARIN] 25999 DARGAL [IM31-ARIN] 26000 COHN-WOLFE [NO192-ARIN] 26001 VITRIA [ZZ3042-ARIN] 26002 SU-NOC [TC1124-ARIN] 26003 DEVRY-FREMONT [DR762-ARIN] 26004 LAWTON-CABLE [MG1438-ARIN] 26005 CALLAWAYGOLF [JR1822-ARIN] 26006 QUANTIVA [GB976-ARIN] 26007 BHRS [JO513-ARIN] 26008 QUESTIONMARK [SD952-ARIN] 26009 NIFCU [DC1874-ARIN] 26010 QL-ASN-AV [TK692-ARIN] 26011 LMCSC [PA357-ARIN] 26012 NET-OHIO-BWC [ZO34-ARIN] 26013 NASTECHWA [MJ622-ARIN] 26014 TRIZEC-CHICAGO [FZ62-ARIN] 26015 THINKORSWIM [LM834-ARIN] 26016 FNYS [EP288-ARIN] 26017 BETTENDORF-LIBRARY [FM343-ARIN] 26018 TENG [RC1483-ARIN] 26019 MONSTERCABLE [PW741-ARIN] 26020 1-AQUILA [TR356-ARIN] 26021 QL-ASN-EP [TK692-ARIN] 26022 FIRST-NORTHERN-BANK [BS1753-ARIN] 26023 ABCGROUP [RK968-ARIN] 26024 MISYS-FAST-SERVICES [CC1439-ARIN] 26025 COC [VB190-ARIN] 26026 DIGITALTHINK-IS [AN240-ARIN] 26027 MVMC [MC746-ARIN] 26028 PANDUIT [JM3504-ARIN] 26029 ALFG [WS449-ARIN] 26030 GHSINC [BS1755-ARIN] 26031 MONMOUTH-COUNTY [AJ305-ARIN] 26032 FDMS [KL643-ARIN] 26033 EDGETRADE [KM1101-ARIN] 26034 ASN-DELTA-OUT [JD1796-ARIN] 26035 SKYLINE3355 [MT946-ARIN] 26036 COMPULOGIC-SYSTEMS [FM344-ARIN] 26037 CID-EEI [AC1079-ARIN] 26038 USPA [AM1204-ARIN] 26039 WPC [CM1261-ARIN] 26040 EPEOPLE [KB984-ARIN] 26041 MINDSHARE [IA144-ARIN] 26042 LEISUREIND6779 [RS2291-ARIN] 26043 NATL-EDU [SD1580-ARIN] 26044 SCM-CANADA [MW1348-ARIN] 26045 NETLI [JT1367-ARIN] 26046 USU-EDU [KM1115-ARIN] 26047 MGMEAD [MM342-ARIN] 26048 CHILENA-CL [VM207-ARIN] 26049 SES-AMERICOM-WBES [BD842-ARIN] 26050 SMC-TPA [JG1916-ARIN] 26051 KNOWLES-ELECTRONICS [MS2784-ARIN] 26052 FORTIS-US [JF1351-ARIN] 26053 DREAMNET-C-S-I [JB3290-ARIN] 26054 ARCHIVENTURE [BC1293-ARIN] 26055 EUROLOG-USA [TD745-ARIN] 26056 PCMALL [VL169-ARIN] 26057 DONOVANDATA [WC359-ARIN] 26058 WEST-TX [IC146-ARIN] 26059 XNET-GW [RO338-ARIN] 26060 EMERGING-132 [MJ623-ARIN] 26061 COBOGGO [JC625-ARIN] 26062 IBMCCH-LAX [DSB2-ARIN] 26063 ALCONLABS-11975 [SW1136-ARIN] 26064 LTI-NJ [CR862-ARIN] 26065 ABA-1375 [MR1384-ARIN] 26066 NVUSD [JC3033-ARIN] 26067 DREAMTANK [KD541-ARIN] 26068 ONSH-NET-CHGO-BLK01 [SK692-ARIN] 26069 SENTO-CORP [ZZ2311-ARIN] 26070 TOURICO-HOLIDAYS [LB901-ARIN] 26071 LAKEHEAD [AB136-ARIN] 26072 ALLEGHENYENERGY [SG1102-ARIN] 26073 NETBLK-CI-01 [TS956-ARIN] 26074 FRESHDIRECTINC [MP1388-ARIN] 26075 MCUNY-01 [BG893-ARIN] 26076 PROCKET [SH1377-ARIN] 26077 SHARPSSG [WV74-ARIN] 26078 PROVIDICOM-NMU-BLK [JW1949-ARIN] 26079 VCENTRIX [TA60-ARIN] 26080 TCCO [DG1493-ARIN] 26081 ALL-01 [DR576-ARIN] 26082 POWERSHIFTBVT [JA67-ARIN] 26083 FFM [AG836-ARIN] 26084 PCI [RB1651-ARIN] 26085 YAHOO-2 [NA258-ARIN] 26086 BESTBUY-2 [WA25-ARIN] 26087 FIELDSTONE-MORTGAGE [JC739-ARIN] 26088 INLANDTELEPHONE [JS3636-ARIN] 26089 KERTEL [MW1356-ARIN] 26090 ASN-ITE-CONSULTORIA [GU35-ARIN] 26091 FWDATA [CM1518-ARIN] 26092 LANCOPE-HQ [RK972-ARIN] 26093 HAR [SD981-ARIN] 26094 TXPETROCHEM [PK192-ARIN] 26095 FINDSVP-625 [RK976-ARIN] 26096 LODDEN [JRL56-ARIN] 26097 DOCUMENTUM-HQ [SW1140-ARIN] 26098 CHAPDELAINEANDCO-9150 [RP1179-ARIN] 26099 IAS-1 [ZI106-ARIN] 26100 UDRTAS [TX6-ARIN] 26101 YAHOO-3 [NA258-ARIN] 26589 WIMBERLEY [RG1146-ARIN] 32768-64511 IANA-RSVD [IANA-ARIN] 64512-65535 IANA-RSVD2 [IANA-ARIN] End of file flow-tools-0.68/configs/filter-acl0000644000076600007660000000246407643062405012662 ! ! permit anything ! ip access-list standard all permit any ip access-list extended ext1 permit ip any any ! ! ! !ip access-list extended bedbugs_out deny tcp host 128.146.222.2 host 128.146.1.7 ip access-list extended bedbugs_out permit tcp host 128.146.222.2 any ip access-list extended bedbugs_icmp permit icmp host 128.146.222.2 any ip access-list standard bb_out permit host 128.146.222.2 ! ! permit OSU ! ip access-list standard osu permit 128.146.0.0 0.0.255.255 ip access-list standard osu permit 140.254.0.0 0.0.255.255 ip access-list standard osu permit 164.107.0.0 0.0.255.255 ip access-list standard osu permit 131.167.0.0 0.0.255.255 ip access-list standard osu deny any ! ! permit anything other than OSU ! ip access-list standard notosu deny 128.146.0.0 0.0.255.255 ip access-list standard notosu deny 140.254.0.0 0.0.255.255 ip access-list standard notosu deny 164.107.0.0 0.0.255.255 ip access-list standard notosu deny 131.167.0.0 0.0.255.255 ip access-list standard notosu permit any ! ! permit OSU homenet ! ip access-list standard homenet permit 140.254.112.0 0.0.0.255 ip access-list standard homenet permit 140.254.113.0 0.0.0.255 ip access-list standard homenet permit 140.254.114.0 0.0.0.255 ip access-list standard homenet permit 140.254.115.0 0.0.0.255 ip access-list standard homenet deny any flow-tools-0.68/configs/filter.cfg0000644000076600007660000000210410240162237012641 filter-primitive UDPTCP type ip-protocol permit tcp permit udp filter-primitive UDP type ip-protocol permit udp filter-primitive TCP type ip-protocol permit tcp filter-primitive ICMP type ip-protocol permit icmp filter-primitive MCAST type ip-address-mask permit 224.0.0.0 240.0.0.0 filter-primitive VAR_ADDR type ip-address permit @{ADDR:-0.0.0.0} filter-primitive VAR_PORT type ip-port permit @{PORT:-0} filter-primitive VAR_PROT type ip-protocol permit @{PROT:-0} filter-definition udptcp match ip-protocol UDPTCP filter-definition tcp match ip-protocol TCP filter-definition udp match ip-protocol UDP filter-definition icmp match ip-protocol ICMP filter-definition mcast match ip-destination-address MCAST filter-definition ip-src-addr match ip-source-address VAR_ADDR filter-definition ip-dst-addr match ip-destination-address VAR_ADDR filter-definition ip-prot match ip-protocol VAR_PROT filter-definition ip-src-port match ip-source-port VAR_PORT filter-definition ip-dst-port match ip-destination-port VAR_PORT flow-tools-0.68/configs/flow.acl0000644000076600007660000000246507643062405012346 ! ! permit anything ! ip access-list standard all permit any ip access-list extended ext1 permit ip any any ! ! ! !ip access-list extended bedbugs_out deny tcp host 128.146.222.2 host 128.146.1.7 ip access-list extended bedbugs_out permit tcp host 128.146.222.2 any ip access-list extended bedbugs_icmp permit icmp host 128.146.222.2 any ip access-list standard bb_out permit host 128.146.222.2 ! ! permit OSU ! ip access-list standard osu permit 128.146.0.0 0.0.255.255 ip access-list standard osu permit 140.254.0.0 0.0.255.255 ip access-list standard osu permit 164.107.0.0 0.0.255.255 ip access-list standard osu permit 131.167.0.0 0.0.255.255 ip access-list standard osu deny any ! ! permit anything other than OSU ! ip access-list standard notosu deny 128.146.0.0 0.0.255.255 ip access-list standard notosu deny 140.254.0.0 0.0.255.255 ip access-list standard notosu deny 164.107.0.0 0.0.255.255 ip access-list standard notosu deny 131.167.0.0 0.0.255.255 ip access-list standard notosu permit any ! ! permit OSU homenet ! ip access-list standard homenet permit 140.254.112.0 0.0.0.255 ip access-list standard homenet permit 140.254.113.0 0.0.0.255 ip access-list standard homenet permit 140.254.114.0 0.0.0.255 ip access-list standard homenet permit 140.254.115.0 0.0.0.255 ip access-list standard homenet deny any flow-tools-0.68/configs/ip-prot.sym0000644000076600007660000000204007643062405013027 0 ip 1 icmp 2 igmp 3 ggp 4 ipencap 5 st2 6 tcp 7 cbt 8 egp 9 igp 10 bbn-rcc 11 nvp 12 pup 13 argus 14 emcon 15 xnet 16 chaos 17 udp 18 mux 19 dcn 20 hmp 21 prm 22 xns-idp 23 trunk-1 24 trunk-2 25 leaf-1 26 leaf-2 27 rdp 28 irtp 29 iso-tp4 30 netblt 31 mfe-nsp 32 merit-inp 33 sep 34 3pc 35 idpr 36 xtp 37 ddp 38 idpr-cmtp 39 tp++ 40 il 41 ipv6 42 sdrp 43 ipv6-route 44 ipv6-frag 45 idrp 46 rsvp 47 gre 48 mhrp 49 bna 50 esp 51 ah 52 i-nlsp 53 swipe 54 narp 55 mobile 56 tlsp 57 skip 58 ipv6-icmp 59 ipv6-nonxt 60 ipv6-opts 62 cftp 64 sat-expak 65 kryptolan 66 rvd 67 ippc 69 sat-mon 70 visa 71 ipcv 72 cpnx 73 cphb 74 wsn 75 pvp 76 br-sat-mon 77 sun-nd 78 wb-mon 79 wb-expak 80 iso-ip 81 vmtp 82 secure-vmtp 83 vines 84 ttp 85 nsfnet-igp 86 dgp 87 tcf 88 eigrp 89 ospf 90 sprite-rpc 91 larp 92 mtp 93 ax.25 94 ipip 95 micp 96 scc-sp 97 etherip 98 encap 100 gmtp 101 ifmp 102 pnni 103 pim 104 aris 105 scps 106 qnx 107 a/n 108 ipcomp 109 snp 110 compaq-peer 111 ipx-in-ip 112 vrrp 113 pgm 115 l2tp 116 ddx 117 iatp 118 st 119 srp 120 uti 121 smp 254 divert flow-tools-0.68/configs/ip-type.sym0000644000076600007660000000017107643062405013027 0 Class A Unicast 1 Class B Unicast 2 Class C Unicast 3 Class D Multicast-ASM 4 Class D Multicast-SSM 5 Class E Reserved flow-tools-0.68/configs/Makefile0000644000076600007660000001632210240412241012333 # Makefile.in generated by automake 1.6.3 from Makefile.am. # configs/Makefile. Generated from Makefile.in by configure. # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local/netflow exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = /usr/local/netflow/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include pkgdatadir = $(datadir)/flow-tools pkglibdir = $(libdir)/flow-tools pkgincludedir = $(includedir)/flow-tools top_builddir = .. ACLOCAL = ${SHELL} /Users/maf/projects/flow-tools/missing --run aclocal-1.6 AUTOCONF = ${SHELL} /Users/maf/projects/flow-tools/missing --run autoconf AUTOMAKE = ${SHELL} /Users/maf/projects/flow-tools/missing --run automake-1.6 AUTOHEADER = ${SHELL} /Users/maf/projects/flow-tools/missing --run autoheader am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} INSTALL_DATA = ${INSTALL} -m 644 install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = ${INSTALL} INSTALL_HEADER = $(INSTALL_DATA) transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = OBJEXT = o PATH_SEPARATOR = : AMTAR = ${SHELL} /Users/maf/projects/flow-tools/missing --run tar AWK = awk CC = gcc CRYPTOLIB = DEPDIR = .deps INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s LEX = flex LEXLIB = -lfl LEX_OUTPUT_ROOT = lex.yy MYSQLCFLAGS = MYSQLINCLUDE = MYSQLLIB = OPENSSLINCLUDE = PACKAGE = flow-tools PGSQLCFLAGS = PGSQLINCLUDE = PGSQLLIB = RANLIB = ranlib STRIP = VERSION = 0.68 YACC = bison -y -d YLIB = -ly am__include = include am__quote = install_sh = /Users/maf/projects/flow-tools/install-sh ftsymdir = $(localstatedir)/sym ftsym_DATA = ip-prot.sym ip-type.sym tcp-port.sym asn.sym tag.sym ftcfgdir = $(localstatedir)/cfg ftcfg_DATA = map.cfg tag.cfg filter.cfg stat.cfg mask.cfg xlate.cfg subdir = configs mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/ftconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(ftcfg_DATA) $(ftsym_DATA) DIST_COMMON = Makefile.am Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu configs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) uninstall-info-am: ftcfgDATA_INSTALL = $(INSTALL_DATA) install-ftcfgDATA: $(ftcfg_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(ftcfgdir) @list='$(ftcfg_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(ftcfgDATA_INSTALL) $$d$$p $(DESTDIR)$(ftcfgdir)/$$f"; \ $(ftcfgDATA_INSTALL) $$d$$p $(DESTDIR)$(ftcfgdir)/$$f; \ done uninstall-ftcfgDATA: @$(NORMAL_UNINSTALL) @list='$(ftcfg_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(ftcfgdir)/$$f"; \ rm -f $(DESTDIR)$(ftcfgdir)/$$f; \ done ftsymDATA_INSTALL = $(INSTALL_DATA) install-ftsymDATA: $(ftsym_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(ftsymdir) @list='$(ftsym_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(ftsymDATA_INSTALL) $$d$$p $(DESTDIR)$(ftsymdir)/$$f"; \ $(ftsymDATA_INSTALL) $$d$$p $(DESTDIR)$(ftsymdir)/$$f; \ done uninstall-ftsymDATA: @$(NORMAL_UNINSTALL) @list='$(ftsym_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(ftsymdir)/$$f"; \ rm -f $(DESTDIR)$(ftsymdir)/$$f; \ done tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(ftcfgdir) $(DESTDIR)$(ftsymdir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-ftcfgDATA install-ftsymDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-ftcfgDATA uninstall-ftsymDATA uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-ftcfgDATA install-ftsymDATA \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ uninstall uninstall-am uninstall-ftcfgDATA uninstall-ftsymDATA \ uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/configs/Makefile.am0000644000076600007660000000030407760577121012746 ftsymdir=$(localstatedir)/sym ftsym_DATA = ip-prot.sym ip-type.sym tcp-port.sym asn.sym tag.sym ftcfgdir=$(localstatedir)/cfg ftcfg_DATA = map.cfg tag.cfg filter.cfg stat.cfg mask.cfg xlate.cfg flow-tools-0.68/configs/Makefile.in0000644000076600007660000001604210240412240012736 # Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CRYPTOLIB = @CRYPTOLIB@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ MYSQLCFLAGS = @MYSQLCFLAGS@ MYSQLINCLUDE = @MYSQLINCLUDE@ MYSQLLIB = @MYSQLLIB@ OPENSSLINCLUDE = @OPENSSLINCLUDE@ PACKAGE = @PACKAGE@ PGSQLCFLAGS = @PGSQLCFLAGS@ PGSQLINCLUDE = @PGSQLINCLUDE@ PGSQLLIB = @PGSQLLIB@ RANLIB = @RANLIB@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YLIB = @YLIB@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ ftsymdir = $(localstatedir)/sym ftsym_DATA = ip-prot.sym ip-type.sym tcp-port.sym asn.sym tag.sym ftcfgdir = $(localstatedir)/cfg ftcfg_DATA = map.cfg tag.cfg filter.cfg stat.cfg mask.cfg xlate.cfg subdir = configs mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/ftconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(ftcfg_DATA) $(ftsym_DATA) DIST_COMMON = Makefile.am Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu configs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) uninstall-info-am: ftcfgDATA_INSTALL = $(INSTALL_DATA) install-ftcfgDATA: $(ftcfg_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(ftcfgdir) @list='$(ftcfg_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(ftcfgDATA_INSTALL) $$d$$p $(DESTDIR)$(ftcfgdir)/$$f"; \ $(ftcfgDATA_INSTALL) $$d$$p $(DESTDIR)$(ftcfgdir)/$$f; \ done uninstall-ftcfgDATA: @$(NORMAL_UNINSTALL) @list='$(ftcfg_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(ftcfgdir)/$$f"; \ rm -f $(DESTDIR)$(ftcfgdir)/$$f; \ done ftsymDATA_INSTALL = $(INSTALL_DATA) install-ftsymDATA: $(ftsym_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(ftsymdir) @list='$(ftsym_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(ftsymDATA_INSTALL) $$d$$p $(DESTDIR)$(ftsymdir)/$$f"; \ $(ftsymDATA_INSTALL) $$d$$p $(DESTDIR)$(ftsymdir)/$$f; \ done uninstall-ftsymDATA: @$(NORMAL_UNINSTALL) @list='$(ftsym_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(ftsymdir)/$$f"; \ rm -f $(DESTDIR)$(ftsymdir)/$$f; \ done tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(ftcfgdir) $(DESTDIR)$(ftsymdir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-ftcfgDATA install-ftsymDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-ftcfgDATA uninstall-ftsymDATA uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-ftcfgDATA install-ftsymDATA \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ uninstall uninstall-am uninstall-ftcfgDATA uninstall-ftsymDATA \ uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/configs/map.cfg0000644000076600007660000000024107643062405012142 # ifalias 1.2.3.4 99,98,97 outside ifname 1.2.3.4 99 fastether0/0 # # ifname 1.2.3.4 100 atm0/0/0 ifname 1.2.3.5 999 atm ifname 1.2.3.6 99 foobar flow-tools-0.68/configs/mask.cfg0000644000076600007660000000013607643062405012323 mask-definition test prefix 128.146/16 24 prefix 128.146.1/24 32 prefix 128.146.214/24 32 flow-tools-0.68/configs/stat.cfg0000644000076600007660000000037710240165234012341 stat-report default type @{TYPE:-summary-detail} output format ascii sort @{SORT:-+} fields @{FIELDS:-+} options @{OPTIONS:-+header,+xheader,+totals} path |flow-rptfmt @{RPTOPT:--f ascii} stat-definition default report default flow-tools-0.68/configs/tag.cfg0000644000076600007660000001515007643062405012145 # # tag format # # 0 7 15 23 31 # 0000 0000 0000 0000 0000 0000 0000 0000 (32 bits) # RRRRRRRRRRRRRR TTTT NNNNNNNNNNNNNNNNNNN # | | | Site name # | | Site type # | Reserved # # BGP community 65000:X is site name (X -> N) # BGP community 65001:Y is site type (Y -> T) # # SITE_NAME_MASK = 0x0000FFFF # SITE_TYPE_MASK = 0x00FF0000 # # ID Name #--------------------------------- # 0x0001 OSU # 0x0002 CWRU # 0x0003 BGSU # 0x0004 UC # 0x0005 UAKRON # 0x0006 WRIGHT # 0x0007 KENT # 0x0008 DAYTON # 0x0009 OBERLIN # 0x000A OHIOU # 0x000B MIAMI # 0x000C MCO # 0x000D CSU # 0x000E DENISON # 0x000F JCU # 0x0010 HIRAM # 0x0011 OHIO-GIGAPOP # 0x0012 OHIO-ITEC # 0x0013 OSC # 0x0014 CHMCC # 0x0015 BWC # 0x0016 FINDLAY # 0x0017 XAVIER # 0x0018 RIO-GRANDE # 0x0019 MULTICAST # ID Type #------------------------ # 0x01 Participant # 0x02 SEGP # 0x03 Sponsored-Participant # 0x04 Gigapop # 0x05 MULTICAST tag-action OHIO-GIGAPOP_DST type dst-prefix # OSU match 128.146/16 set-dst 0x010001 match 164.107/16 set-dst 0x010001 match 140.254/16 set-dst 0x010001 match 192.153.26/24 set-dst 0x010001 # CWRU match 129.22/16 set-dst 0x010002 match 192.5.110/24 set-dst 0x010002 # BGSU match 129.1/16 set-dst 0x010003 # UC match 129.137/16 set-dst 0x010004 # UAKRON match 130.101/16 set-dst 0x010005 # WRIGHT match 130.108/16 set-dst 0x010006 # KENT match 131.123/16 set-dst 0x010007 # DAYTON match 131.238/16 set-dst 0x020008 # OBERLIN match 132.162/16 set-dst 0x020009 # OHIOU match 132.235/16 set-dst 0x01000A # MIAMI match 134.53/16 set-dst 0x02000B # MCO match 136.247/16 set-dst 0x02000C # CSU match 137.148/16 set-dst 0x01000D # DENISON match 140.141/16 set-dst 0x02000E # JCU match 143.105/16 set-dst 0x02000F # HIRAM match 143.206/16 set-dst 0x020010 # OHIO-GIGAPOP match 192.88.191/24 set-dst 0x040011 match 192.88.192/24 set-dst 0x040011 match 192.88.194/24 set-dst 0x040011 match 192.148.244/24 set-dst 0x040011 match 192.153.36/24 set-dst 0x040011 # OHIO-ITEC match 192.148.251/24 set-dst 0x040012 # OSC match 192.138.88/24 set-dst 0x040013 match 192.157.5/24 set-dst 0x040013 match 192.153.41/24 set-dst 0x040013 match 192.153.40/24 set-dst 0x040013 match 192.148.246/24 set-dst 0x040013 match 192.148.240/24 set-dst 0x040013 match 192.148.248/24 set-dst 0x040013 match 192.148.249/24 set-dst 0x040013 match 192.148.250/24 set-dst 0x040013 match 192.153.37/24 set-dst 0x040013 # CHMCC match 204.152.48/24 set-dst 0x030014 match 204.152.49/24 set-dst 0x030014 match 205.142.196/24 set-dst 0x030014 match 205.142.197/24 set-dst 0x030014 match 205.142.198/24 set-dst 0x030014 match 205.142.199/24 set-dst 0x030014 # BWC match 198.30.10/24 set-dst 0x020015 match 192.150.115/24 set-dst 0x020015 match 206.244.152/22 set-dst 0x020015 # FINDLAY match 192.153.32/24 set-dst 0x020016 match 206.244.84/22 set-dst 0x020016 match 206.244.104/21 set-dst 0x020016 # XAVIER match 205.133.157/24 set-dst 0x020017 match 205.133.158/24 set-dst 0x020017 match 205.133.159/24 set-dst 0x020017 match 205.133.160/21 set-dst 0x020017 match 206.21.160/21 set-dst 0x020017 match 206.21.168/22 set-dst 0x020017 # RIO-GRANDE match 199.218.101/24 set-dst 0x020018 match 206.21.56/21 set-dst 0x020018 match 206.244.164/22 set-dst 0x020018 # MULTICAST match 224/4 set-dst 0x050019 tag-action OHIO-GIGAPOP_SRC type src-prefix # OSU match 128.146/16 set-src 0x010001 match 164.107/16 set-src 0x010001 match 140.254/16 set-src 0x010001 match 192.153.26/24 set-src 0x010001 # CWRU match 129.22/16 set-src 0x010002 match 192.5.110/24 set-src 0x010002 # BGSU match 129.1/16 set-src 0x010003 # UC match 129.137/16 set-src 0x010004 # UAKRON match 130.101/16 set-src 0x010005 # WRIGHT match 130.108/16 set-src 0x010006 # KENT match 131.123/16 set-src 0x010007 # DAYTON match 131.238/16 set-src 0x020008 # OBERLIN match 132.162/16 set-src 0x020009 # OHIOU match 132.235/16 set-src 0x01000A # MIAMI match 134.53/16 set-src 0x02000B # MCO match 136.247/16 set-src 0x02000C # CSU match 137.148/16 set-src 0x01000D # DENISON match 140.141/16 set-src 0x02000E # JCU match 143.105/16 set-src 0x02000F # HIRAM match 143.206/16 set-src 0x020010 # OHIO-GIGAPOP match 192.88.191/24 set-src 0x040011 match 192.88.192/24 set-src 0x040011 match 192.88.194/24 set-src 0x040011 match 192.148.244/24 set-src 0x040011 match 192.153.36/24 set-src 0x040011 # OHIO-ITEC match 192.148.251/24 set-src 0x040012 # OSC match 192.138.88/24 set-src 0x040013 match 192.157.5/24 set-src 0x040013 match 192.153.41/24 set-src 0x040013 match 192.153.40/24 set-src 0x040013 match 192.148.246/24 set-src 0x040013 match 192.148.240/24 set-src 0x040013 match 192.148.248/24 set-src 0x040013 match 192.148.249/24 set-src 0x040013 match 192.148.250/24 set-src 0x040013 match 192.153.37/24 set-src 0x040013 # CHMCC match 204.152.48/24 set-src 0x030014 match 204.152.49/24 set-src 0x030014 match 205.142.196/24 set-src 0x030014 match 205.142.197/24 set-src 0x030014 match 205.142.198/24 set-src 0x030014 match 205.142.199/24 set-src 0x030014 # BWC match 198.30.10/24 set-src 0x020015 match 192.150.115/24 set-src 0x020015 match 206.244.152/22 set-src 0x020015 # FINDLAY match 192.153.32/24 set-src 0x020016 match 206.244.84/22 set-src 0x020016 match 206.244.104/21 set-src 0x020016 # XAVIER match 205.133.157/24 set-src 0x020017 match 205.133.158/24 set-src 0x020017 match 205.133.159/24 set-src 0x020017 match 205.133.160/21 set-src 0x020017 match 206.21.160/21 set-src 0x020017 match 206.21.168/22 set-src 0x020017 # RIO-GRANDE match 199.218.101/24 set-src 0x020018 match 206.21.56/21 set-src 0x020018 match 206.244.164/22 set-src 0x020018 tag-action OTHER_DST type src-prefix match 0/0 set-dst 0x0 tag-action OTHER_SRC type src-prefix match 0/0 set-src 0x0 tag-action WEB_SERVERS type tcp-dst-port match 80 set-src 80 match 8080 set-src 80 match 443 set-src 80 tag-action ANY type any match any set-src 99 match any set-dst 99 tag-definition OHIO-GIGAPOP term input-filter 25 action OTHER_DST action OHIO-GIGAPOP_DST term output-filter 25 action OTHER_SRC action OHIO-GIGAPOP_SRC tag-definition TEST term action ANY action WEB_SERVERS flow-tools-0.68/configs/tag.sym0000644000076600007660000000064107643062405012215 0x0001 OSU 0x0002 CWRU 0x0003 BGSU 0x0004 UC 0x0005 UAKRON 0x0006 WRIGHT 0x0007 KENT 0x0008 DAYTON 0x0009 OBERLIN 0x000A OHIOU 0x000B MIAMI 0x000C MCO 0x000D CSU 0x000E DENISON 0x000F JCU 0x0010 HIRAM 0x0011 OHIO-GIGAPOP 0x0012 OHIO-ITEC 0x0013 OSC 0x0014 CHMCC 0x0015 BWC 0x0016 FINDLAY 0x0017 XAVIER 0x0018 RIO-GRANDE 0x0019 MULTICAST 0x010000 PART 0x020000 SEGP 0x030000 SPART 0x040000 GIGAPOP 0x050000 MULTICAST flow-tools-0.68/configs/tcp-port.sym0000644000076600007660000003057107643062405013217 1 tcpmux 2 compressnet 3 compressnet 4 echo 5 rje 6 zip 7 echo 9 discard 11 systat 13 daytime 17 qotd 18 msp 19 chargen 20 ftp-data 21 ftp 22 ssh 23 telnet 25 smtp 27 nsw-fe 29 msg-icp 31 msg-auth 33 dsp 37 time 38 rap 39 rlp 41 graphics 42 nameserver 43 nicname 44 mpm-flags 45 mpm 46 mpm-snd 47 ni-ftp 48 auditd 49 tacacs 50 re-mail-ck 51 la-maint 52 xns-time 53 domain 54 xns-ch 55 isi-gl 56 xns-auth 57 mtp 58 xns-mail 61 ni-mail 62 acas 63 whois++ 64 covia 65 tacacs-ds 66 sql*net 67 bootps 68 bootpc 69 tftp 70 gopher 71 netrjs-1 72 netrjs-2 73 netrjs-3 74 netrjs-4 76 deos 77 netrjs 78 vettcp 79 finger 80 http 81 hosts2-ns 82 xfer 83 mit-ml-dev 84 ctf 85 mit-ml-dev 86 mfcobol 87 ttylink 88 kerberos-sec 89 su-mit-tg 90 dnsix 91 mit-dov 92 npp 93 dcp 94 objcall 95 supdup 96 dixie 97 swift-rvf 98 tacnews 99 metagram 100 newacct 101 hostname 102 iso-tsap 103 gppitnp 104 acr-nema 105 csnet-ns 106 3com-tsmux 107 rtelnet 108 snagas 109 pop2 110 pop3 111 sunrpc 112 mcidas 113 auth 114 audionews 115 sftp 116 ansanotify 117 uucp-path 118 sqlserv 119 nntp 120 cfdptkt 121 erpc 122 smakynet 123 ntp 124 ansatrader 125 locus-map 126 unitary 127 locus-con 128 gss-xlicen 129 pwdgen 130 cisco-fna 131 cisco-tna 132 cisco-sys 133 statsrv 134 ingres-net 135 loc-srv 136 profile 137 netbios-ns 138 netbios-dgm 139 netbios-ssn 140 emfis-data 141 emfis-cntl 142 bl-idm 143 imap 144 NeWS 145 uaac 146 iso-tp0 147 iso-ip 148 cronus 149 aed-512 150 sql-net 151 hems 152 bftp 153 sgmp 154 netsc-prod 155 netsc-dev 156 sqlsrv 157 knet-cmp 158 pcmail-srv 159 nss-routing 160 sgmp-traps 161 snmp 162 snmptrap 163 cmip-man 164 smip-agent 165 xns-courier 166 s-net 167 namp 168 rsvd 169 send 170 print-srv 171 multiplex 172 cl/1 173 xyplex-mux 174 mailq 175 vmnet 176 genrad-mux 177 xdmcp 178 NextStep 179 bgp 180 ris 181 unify 182 audit 183 ocbinder 184 ocserver 185 remote-kis 186 kis 187 aci 188 mumps 189 qft 190 gacp 191 prospero 192 osu-nms 193 srmp 194 irc 195 dn6-nlm-aud 196 dn6-smm-red 197 dls 198 dls-mon 199 smux 200 src 201 at-rtmp 202 at-nbp 203 at-3 204 at-echo 205 at-5 206 at-zis 207 at-7 208 at-8 209 qmtp 210 z39.50 211 914c/g 212 anet 213 ipx 214 vmpwscs 215 softpc 216 CAIlic 217 dbase 218 mpp 219 uarps 220 imap3 221 fln-spx 222 rsh-spx 223 cdc 242 direct 243 sur-meas 244 dayna 245 link 246 dsp3270 247 subntbcst_tftp 248 bhfhs 256 rap 257 set 258 yak-chat 259 esro-gen 260 openport 261 nsiiops 262 arcisdms 263 hdap 264 bgmp 280 http-mgmt 281 personal-link 282 cableport-ax 308 novastorbakcup 309 entrusttime 310 bhmds 311 asip-webadmin 312 vslmp 313 magenta-logic 314 opalis-robot 315 dpsi 316 decauth 317 zannet 321 pip 344 pdap 345 pawserv 346 zserv 347 fatserv 348 csi-sgwp 349 mftp 350 matip-type-a 351 bhoetty 352 bhoedap4 353 ndsauth 354 bh611 355 datex-asn 356 cloanto-net-1 357 bhevent 358 shrinkwrap 359 tenebris_nts 360 scoi2odialog 361 semantix 362 srssend 363 rsvp_tunnel 364 aurora-cmgr 365 dtk 366 odmr 367 mortgageware 368 qbikgdp 369 rpc2portmap 370 codaauth2 371 clearcase 372 ulistserv 373 legent-1 374 legent-2 375 hassle 376 nip 377 tnETOS 378 dsETOS 379 is99c 380 is99s 381 hp-collector 382 hp-managed-node 383 hp-alarm-mgr 384 arns 385 ibm-app 386 asa 387 aurp 388 unidata-ldm 389 ldap 390 uis 391 synotics-relay 392 synotics-broker 393 dis 394 embl-ndt 395 netcp 396 netware-ip 397 mptn 398 kryptolan 399 iso-tsap-c2 400 work-sol 401 ups 402 genie 403 decap 404 nced 405 ncld 406 imsp 407 timbuktu 408 prm-sm 409 prm-nm 410 decladebug 411 rmt 412 Neomodus-Direct-Connect 413 smsp 414 infoseek 415 bnet 416 silverplatter 417 onmux 418 hyper-g 419 ariel1 420 smpte 421 ariel2 422 ariel3 423 opc-job-start 424 opc-job-track 425 icad-el 426 smartsdp 427 svrloc 428 ocs_cmu 429 ocs_amu 430 utmpsd 431 utmpcd 432 iasd 433 nnsp 434 mobileip-agent 435 mobilip-mn 436 dna-cml 437 comscm 438 dsfgw 439 dasp 440 sgcp 441 decvms-sysmgt 442 cvc_hostd 443 https 444 snpp 445 microsoft-ds 446 ddm-rdb 447 ddm-dfm 448 ddm-ssl 449 as-servermap 450 tserver 451 sfs-smp-net 452 sfs-config 453 creativeserver 454 contentserver 455 creativepartnr 456 macon-udp 457 scohelp 458 appleqtc 459 ampr-rcmd 460 skronk 461 datasurfsrv 462 datasurfsrvsec 463 alpes 464 kpasswd5 465 smtps 466 digital-vrc 467 mylex-mapd 468 photuris 469 rcp 470 scx-proxy 471 mondex 472 ljk-login 473 hybrid-pop 474 tn-tl-w2 475 tcpnethaspsrv 476 tn-tl-fd1 477 ss7ns 478 spsc 479 iafserver 480 iafdbase 481 ph 482 bgs-nsi 483 ulpnet 484 integra-sme 485 powerburst 486 avian 487 saft 488 gss-http 489 nest-protocol 490 micom-pfs 491 go-login 492 ticf-1 493 ticf-2 494 pov-ray 495 intecourier 496 pim-rp-disc 497 dantz 498 siam 499 iso-ill 500 isakmp 501 stmf 502 asa-appl-proto 503 intrinsa 504 citadel 505 mailbox-lm 506 ohimsrv 507 crs 508 xvttp 509 snare 510 fcp 511 passgo 512 biff 513 who 514 syslog 515 printer 516 videotex 517 talk 518 ntalk 519 utime 520 router 521 ripng 522 ulp 523 ibm-db2 524 ncp 525 timed 526 tempo 527 stx 528 custix 529 irc-serv 530 courier 531 conference 532 netnews 533 netwall 534 mm-admin 535 iiop 536 opalis-rdv 537 nmsp 538 gdomap 539 apertus-ldp 540 uucp 541 uucp-rlogin 542 commerce 543 klogin 544 kshell 545 appleqtcsrvr 546 dhcpv6-client 547 dhcpv6-server 548 afpovertcp 549 idfp 550 new-rwho 551 cybercash 552 deviceshare 553 pirp 554 rtsp 555 dsf 556 remotefs 557 openvms-sysipc 558 sdnskmp 559 teedtap 560 rmonitor 561 monitor 562 chshell 563 nntps 564 9pfs 565 whoami 566 streettalk 567 banyan-rpc 568 ms-shuttle 569 ms-rome 570 meter 571 umeter 572 sonar 573 banyan-vip 574 ftp-agent 575 vemmi 576 ipcd 577 vnas 578 ipdd 579 decbsrv 580 sntp-heartbeat 581 bdp 582 scc-security 583 philips-vc 584 keyserver 585 imap4-ssl 586 password-chg 587 submission 588 cal 589 eyelink 590 tns-cml 591 http-alt 592 eudora-set 593 http-rpc-epmap 594 tpip 595 cab-protocol 596 smsd 597 ptcnameservice 598 sco-websrvrmg3 599 acp 600 ipcserver 606 urm 607 nqs 608 sift-uft 609 npmp-trap 610 npmp-local 611 npmp-gui 634 ginad 666 doom 704 elcsd 709 entrustmanager 729 netviewdm1 730 netviewdm2 731 netviewdm3 741 netgw 742 netrcs 744 flexlm 747 fujitsu-dev 748 ris-cm 750 kerberos-iv 751 pump 752 qrh 753 rrh 754 tell 758 nlogin 759 con 760 ns 761 rxe 762 quotad 763 cycleserv 764 omserv 765 webster 767 phonebook 769 vid 770 cadlock 771 rtip 772 cycleserv2 773 notify 774 acmaint_dbd 775 acmaint_transd 776 wpages 780 wpgs 786 concert 800 mdbs_daemon 801 device 871 supfilesrv 873 rsync 888 accessbuilder 992 telnets 993 imaps 995 pop3s 996 vsinet 997 maitrd 998 puparp 999 puprouter 1000 ock 1025 blackjack 1030 iad1 1031 iad2 1032 iad3 1058 nim 1059 nimreg 1067 instl_boots 1068 instl_bootc 1080 socks 1083 ansoft-lm-1 1084 ansoft-lm-2 1110 nfsd-keepalive 1127 supfiledbg 1155 nfa 1167 phone 1178 skkserv 1212 lupa 1214 FastTrack 1222 nerv 1248 hermes 1346 alta-ana-lm 1347 bbn-mmc 1348 bbn-mmx 1349 sbook 1350 editbench 1351 equationbuilder 1352 lotusnote 1353 relief 1354 rightbrain 1355 intuitive-edge 1356 cuillamartin 1357 pegboard 1358 connlcli 1359 ftsrv 1360 mimer 1361 linx 1362 timeflies 1363 ndm-requester 1364 ndm-server 1365 adapt-sna 1366 netware-csp 1367 dcs 1368 screencast 1369 gv-us 1370 us-gv 1371 fc-cli 1372 fc-ser 1373 chromagrafx 1374 molly 1375 bytex 1376 ibm-pps 1377 cichlid 1378 elan 1379 dbreporter 1380 telesis-licman 1381 apple-licman 1383 gwha 1384 os-licman 1385 atex_elmd 1386 checksum 1387 cadsi-lm 1388 objective-dbc 1389 iclpv-dm 1390 iclpv-sc 1391 iclpv-sas 1392 iclpv-pm 1393 iclpv-nls 1394 iclpv-nlc 1395 iclpv-wsm 1396 dvl-activemail 1397 audio-activmail 1398 video-activmail 1399 cadkey-licman 1400 cadkey-tablet 1401 goldleaf-licman 1402 prm-sm-np 1403 prm-nm-np 1404 igi-lm 1405 ibm-res 1406 netlabs-lm 1407 dbsa-lm 1408 sophia-lm 1409 here-lm 1410 hiq 1411 af 1412 innosys 1413 innosys-acl 1414 ibm-mqseries 1415 dbstar 1416 novell-lu6.2 1417 timbuktu-srv1 1418 timbuktu-srv2 1419 timbuktu-srv3 1420 timbuktu-srv4 1421 gandalf-lm 1422 autodesk-lm 1423 essbase 1424 hybrid 1425 zion-lm 1426 sas-1 1427 mloadd 1428 informatik-lm 1429 nms 1430 tpdu 1431 rgtp 1432 blueberry-lm 1433 ms-sql-s 1434 ms-sql-m 1435 ibm-cics 1436 sas-2 1437 tabula 1438 eicon-server 1439 eicon-x25 1440 eicon-slp 1441 cadis-1 1442 cadis-2 1443 ies-lm 1444 marcam-lm 1445 proxima-lm 1446 ora-lm 1447 apri-lm 1448 oc-lm 1449 peport 1450 dwf 1451 infoman 1452 gtegsc-lm 1453 genie-lm 1454 interhdl_elmd 1455 esl-lm 1456 dca 1457 valisys-lm 1458 nrcabq-lm 1459 proshare1 1460 proshare2 1461 ibm_wrless_lan 1462 world-lm 1463 nucleus 1464 msl_lmd 1465 pipes 1466 oceansoft-lm 1467 csdmbase 1468 csdm 1469 aal-lm 1470 uaiact 1471 csdmbase 1472 csdm 1473 openmath 1474 telefinder 1475 taligent-lm 1476 clvm-cfg 1477 ms-sna-server 1478 ms-sna-base 1479 dberegister 1480 pacerforum 1481 airs 1482 miteksys-lm 1483 afs 1484 confluent 1485 lansource 1486 nms_topo_serv 1487 localinfosrvr 1488 docstor 1489 dmdocbroker 1490 insitu-conf 1491 anynetgateway 1492 stone-design-1 1493 netmap_lm 1494 ica 1495 cvc 1496 liberty-lm 1497 rfx-lm 1498 watcom-sql 1499 fhc 1500 vlsi-lm 1501 sas-3 1502 shivadiscovery 1503 imtc-mcs 1504 evb-elm 1505 funkproxy 1506 utcd 1507 symplex 1508 diagmond 1509 robcad-lm 1510 mvx-lm 1511 3l-l1 1512 wins 1513 fujitsu-dtc 1514 fujitsu-dtcns 1515 ifor-protocol 1516 vpad 1517 vpac 1518 vpvd 1519 vpvc 1520 atm-zip-office 1521 ncube-lm 1522 rna-lm 1523 cichild-lm 1524 ingreslock 1525 orasrv 1526 pdap-np 1527 tlisrv 1528 mciautoreg 1529 coauthor 1530 rap-service 1531 rap-listen 1532 miroconnect 1533 virtual-places 1534 micromuse-lm 1535 ampr-info 1536 ampr-inter 1537 sdsc-lm 1538 3ds-lm 1539 intellistor-lm 1540 rds 1541 rds2 1542 gridgen-elmd 1543 simba-cs 1544 aspeclmd 1545 vistium-share 1546 abbaccuray 1547 laplink 1548 axon-lm 1549 shivasound 1550 3m-image-lm 1551 hecmtl-db 1552 pciarray 1600 issd 1650 nkd 1651 shiva_confsrvr 1652 xnmp 1661 netview-aix-1 1662 netview-aix-2 1663 netview-aix-3 1664 netview-aix-4 1665 netview-aix-5 1666 netview-aix-6 1667 netview-aix-7 1668 netview-aix-8 1669 netview-aix-9 1670 netview-aix-10 1671 netview-aix-11 1672 netview-aix-12 1723 pptp 1812 radius 1813 radacct 1986 licensedaemon 1987 tr-rsrb-p1 1988 tr-rsrb-p2 1989 mshnet 1990 stun-p1 1991 stun-p2 1992 ipsendmsg 1993 snmp-tcp-port 1994 stun-port 1995 perf-port 1996 tr-rsrb-port 1997 gdp-port 1998 x25-svc-port 1999 hamx10 2000 callbook 2001 wizard 2002 globe 2003 cfingerd 2004 emce 2005 oracle 2006 raid-cc 2007 raid-am 2008 terminaldb 2009 whosockami 2010 pipe_server 2011 servserv 2012 raid-ac 2013 raid-cd 2014 raid-sf 2015 raid-cs 2016 bootserver 2017 bootclient 2018 rellpack 2019 about 2020 xinupageserver 2021 xinuexpansion1 2022 xinuexpansion2 2023 xinuexpansion3 2024 xinuexpansion4 2025 xribs 2026 scrabble 2027 shadowserver 2028 submitserver 2030 device2 2032 blackboard 2033 glogger 2034 scoremgr 2035 imsldoc 2038 objectmanager 2040 lam 2041 interbase 2042 isis 2043 isis-bcast 2044 rimsl 2045 cdfunc 2046 sdfunc 2048 dls-monitor 2049 nfsd 2065 dlsrpn 2067 dlswpn 2103 zephyr-clt 2104 zephyr-hm 2105 eklogin 2106 ekshell 2108 rkinit 2201 ats 2232 ivs-video 2241 ivsd 2307 pehelp 2401 cvspserver 2430 venus 2431 venus-se 2432 codasrv 2433 codasrv-se 2500 rtsserv 2501 rtsclient 2564 hp-3000-telnet 2600 zebrasrv 2601 zebra 2602 ripd 2603 ripngd 2604 ospfd 2605 bgpd 2766 listen 2784 www-dev 3049 NSWS 3086 sj3 3141 vmodem 3264 ccmail 3333 dec-notes 3421 bmap 3455 prsvp 3456 vat 3457 vat-control 3900 udt_os 3984 mapper-nodemgr 3985 mapper-mapethd 3986 mapper-ws_ethd 4008 netcheque 4045 lockd 4132 nuts_dem 4133 nuts_bootp 4321 rwhois 4343 unicall 4444 nv-video 4500 sae-urn 4557 fax 4559 hylafax 4662 eDonkey-2000 4672 rfa 5000 commplex-main 5001 commplex-link 5002 rfe 5010 telelpathstart 5011 telelpathattack 5050 mmcc 5145 rmonitor_secure 5190 aol 5191 aol-1 5192 aol-2 5193 aol-3 5236 padl2sim 5300 hacl-hb 5301 hacl-gs 5302 hacl-cfg 5303 hacl-probe 5304 hacl-local 5305 hacl-test 5308 cfengine 5501 Hotline 5555 rplay 5680 canna 5713 proshareaudio 5714 prosharevideo 5715 prosharedata 5716 prosharerequest 5717 prosharenotify 5999 cvsup 6110 softcm 6111 spc 6141 meta-corp 6142 aspentec-lm 6143 watershed-lm 6144 statsci1-lm 6145 statsci2-lm 6146 lonewolf-lm 6147 montage-lm 6148 ricardo-lm 6346 Gnutella 6347 Gnutella 6558 xdsxdm 6699 Napster 6969 acmsoda 7000 afs3-fileserver 7001 afs3-callback 7002 afs3-prserver 7003 afs3-vlserver 7004 afs3-kaserver 7005 afs3-volser 7006 afs3-errors 7007 afs3-bos 7008 afs3-update 7009 afs3-rmtsys 7010 ups-onlinet 7100 font-service 7200 fodms 7201 dlip 8668 natd 9100 jetdirect 9535 man 9876 sd 10080 amanda 10082 amandaidx 10083 amidxtape 17007 isode-dua 18000 biimenu 22273 wnn6 22289 wnn6_Cn 22305 wnn6_Kr 22321 wnn6_Tw 26208 wnn6_DS 47557 dbbrowse flow-tools-0.68/configs/xlate.cfg0000644000076600007660000000165407760577071012525 include-filter filter xlate-action F1 type ip-source-address-to-network xlate-action F2 type ip-destination-address-to-network xlate-action F3 type ip-source-address-to-class-network xlate-action F4 type ip-destination-address-to-class-network xlate-action F5 type ip-address-privacy-mask mask 255.255.255.0 255.255.255.0 xlate-action F6 type scale scale 100 xlate-action F7 type replace-source-as0 as 999 xlate-action F8 type replace-destination-as0 as 888 xlate-action F9 type tag-mask mask 0xFFFFFF00 0xFFFFFFFF xlate-action MULTICAST-PRIVACY type ip-address-privacy-mask mask 0xFFFFFFFF 0xFFFFFFFF xlate-action UNICAST-PRIVACY type ip-address-privacy-mask mask 0xFFFFFF00 0xFFFFF800 xlate-definition abilene_privacy term filter mcast action MULTICAST-PRIVACY stop term filter ucast action UNICAST-PRIVACY xlate-definition test term action F7 action F8 flow-tools-0.68/configure0000755000076600007660000070513210240411633011162 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.57. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # 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 Bourne compatible 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH 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 -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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'` # PATH needs CR, and LINENO needs CR and PATH. # 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 as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') 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=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # 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 before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, 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 # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi 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$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # 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` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="lib/bit1024.c" ac_default_prefix=/usr/local/netflow # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if 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 datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE YACC RANLIB ac_ct_RANLIB LEX LEXLIB LEX_OUTPUT_ROOT YLIB MYSQLLIB MYSQLCFLAGS MYSQLINCLUDE PGSQLLIB PGSQLCFLAGS PGSQLINCLUDE CRYPTOLIB OPENSSLINCLUDE CPP EGREP ALLOCA LIBOBJS LTLIBOBJS' ac_subst_files='' # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$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" ;; -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'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac 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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac 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; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` 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 paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # 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 this package 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors --enable-lfs Enable Large File Support. (default=no) --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-mysql=PATH Compile in MySQL support. (default=no) --with-pgsql=PATH Compile in PostgreSQL support. (default=no) --with-openssl=PATH Compile in OpenSSL support. (default=no) 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 CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP 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 fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 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 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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 } >&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_sep= 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_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. 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, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort 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 && rm -rf 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 -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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 am__api_version="1.6" 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 ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # 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" # ./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/* | \ /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 $as_executable_p "$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 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. 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 build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi for ac_prog in gawk mawk nawk awk 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_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # Define the identity of the package. PACKAGE=flow-tools VERSION=0.68 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then 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 $as_executable_p "$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 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 $as_executable_p "$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 test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" 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 STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Add the stamp file to the list of files AC keeps track of, # along with our hook. ac_config_headers="$ac_config_headers lib/ftconfig.h:lib/ftconfig.h.in" CFLAGS="-g -Wall" 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 $as_executable_p "$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 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 $as_executable_p "$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 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 CC=$ac_ct_CC 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 $as_executable_p "$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 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 "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_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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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 CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 $as_executable_p "$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 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 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 $as_executable_p "$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 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 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 $as_executable_p "$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 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 CC=$ac_ct_CC 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` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&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 #line $LINENO "configure" /* 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" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else 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 echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check 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' { (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); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext 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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) 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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 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 CFLAGS="-g" 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 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext 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 ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* 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; } 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext 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 rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_CC_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type # 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" # ./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/* | \ /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 $as_executable_p "$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 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. 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 ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi for ac_prog in 'bison -y' byacc 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_YACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then echo "$as_me:$LINENO: result: $YACC" >&5 echo "${ECHO_T}$YACC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" YACC="$YACC -d" 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 $as_executable_p "$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 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 $as_executable_p "$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 test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" 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 RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi for ac_prog in flex lex 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_LEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then echo "$as_me:$LINENO: result: $LEX" >&5 echo "${ECHO_T}$LEX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test -z "$LEXLIB" then echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 if test "${ac_cv_lib_fl_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yywrap (); int main () { yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_fl_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fl_yywrap=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 if test $ac_cv_lib_fl_yywrap = yes; then LEXLIB="-lfl" else echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 if test "${ac_cv_lib_l_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ll $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yywrap (); int main () { yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_l_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_l_yywrap=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 if test $ac_cv_lib_l_yywrap = yes; then LEXLIB="-ll" fi fi fi if test "x$LEX" != "x:"; then echo "$as_me:$LINENO: checking lex output file root" >&5 echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 if test "${ac_cv_prog_lex_root+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # The minimal lex program is just a single line: %%. But some broken lexes # (Solaris, I think it was) want two %% lines, so accommodate them. cat >conftest.l <<_ACEOF %% %% _ACEOF { (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 (eval $LEX conftest.l) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} { (exit 1); exit 1; }; } fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 rm -f conftest.l LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS=$LIBS LIBS="$LIBS $LEXLIB" cat >conftest.$ac_ext <<_ACEOF `cat $LEX_OUTPUT_ROOT.c` _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_prog_lex_yytext_pointer=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS rm -f "${LEX_OUTPUT_ROOT}.c" fi echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 if test $ac_cv_prog_lex_yytext_pointer = yes; then cat >>confdefs.h <<\_ACEOF #define YYTEXT_POINTER 1 _ACEOF fi fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi WITH_MYSQL= # Check whether --with-mysql or --without-mysql was given. if test "${with_mysql+set}" = set; then withval="$with_mysql" if test -x "$withval"; then WHERE_MYSQL=$withval else WHERE_MYSQL="/usr" fi fi; WITH_PGSQL= # Check whether --with-pgsql or --without-pgsql was given. if test "${with_pgsql+set}" = set; then withval="$with_pgsql" if test -x "$withval"; then WHERE_PGSQL=$withval else WHERE_PGSQL="/usr" fi fi; WITH_OPENSSL= # Check whether --with-openssl or --without-openssl was given. if test "${with_openssl+set}" = set; then withval="$with_openssl" if test -x "$withval"; then WHERE_OPENSSL=$withval else WHERE_OPENSSL="/usr" fi fi; if test "x$WHERE_MYSQL" != "x"; then LIBS="-L$WHERE_MYSQL/lib/mysql" echo "$as_me:$LINENO: checking for my_init in -lmysqlclient" >&5 echo $ECHO_N "checking for my_init in -lmysqlclient... $ECHO_C" >&6 if test "${ac_cv_lib_mysqlclient_my_init+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmysqlclient $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char my_init (); int main () { my_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_mysqlclient_my_init=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mysqlclient_my_init=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_mysqlclient_my_init" >&5 echo "${ECHO_T}$ac_cv_lib_mysqlclient_my_init" >&6 if test $ac_cv_lib_mysqlclient_my_init = yes; then MYSQLCFLAGS="-L$WHERE_MYSQL/lib/mysql -I$WHERE_MYSQL/include/mysql" MYSQLLIB="-lmysqlclient" cat >>confdefs.h <<\_ACEOF #define HAVE_MYSQL 1 _ACEOF fi fi if test "x$WHERE_OPENSSL" != "x"; then LIBS="-L$WHERE_OPENSSL/lib" echo "$as_me:$LINENO: checking for EVP_EncryptUpdate in -lcrypto" >&5 echo $ECHO_N "checking for EVP_EncryptUpdate in -lcrypto... $ECHO_C" >&6 if test "${ac_cv_lib_crypto_EVP_EncryptUpdate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char EVP_EncryptUpdate (); int main () { EVP_EncryptUpdate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_crypto_EVP_EncryptUpdate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_crypto_EVP_EncryptUpdate=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_EVP_EncryptUpdate" >&5 echo "${ECHO_T}$ac_cv_lib_crypto_EVP_EncryptUpdate" >&6 if test $ac_cv_lib_crypto_EVP_EncryptUpdate = yes; then OPENSSLCFLAGS="-L$WHERE_OPENSSL/lib -I$WHERE_OPENSSL/include" CRYPTOLIB="-lcrypto" cat >>confdefs.h <<\_ACEOF #define HAVE_OPENSSL 1 _ACEOF fi fi if test "x$WHERE_PGSQL" != "x"; then LIBS="-L$WHERE_PGSQL/lib/pgsql" echo "$as_me:$LINENO: checking for PQsetdbLogin in -lpq" >&5 echo $ECHO_N "checking for PQsetdbLogin in -lpq... $ECHO_C" >&6 if test "${ac_cv_lib_pq_PQsetdbLogin+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpq $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char PQsetdbLogin (); int main () { PQsetdbLogin (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_pq_PQsetdbLogin=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pq_PQsetdbLogin=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pq_PQsetdbLogin" >&5 echo "${ECHO_T}$ac_cv_lib_pq_PQsetdbLogin" >&6 if test $ac_cv_lib_pq_PQsetdbLogin = yes; then PGSQLCFLAGS="-L$WHERE_PGSQL/lib -I$WHERE_PGSQL/include/pgsql" PGSQLLIB="-lpq" cat >>confdefs.h <<\_ACEOF #define HAVE_PGSQL 1 _ACEOF fi fi echo "$as_me:$LINENO: checking for main in -ly" >&5 echo $ECHO_N "checking for main in -ly... $ECHO_C" >&6 if test "${ac_cv_lib_y_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ly $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_y_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_y_main=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_y_main" >&5 echo "${ECHO_T}$ac_cv_lib_y_main" >&6 if test $ac_cv_lib_y_main = yes; then YLIB="$YLIB -ly" fi echo "$as_me:$LINENO: checking for zlibVersion in -lz" >&5 echo $ECHO_N "checking for zlibVersion in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_zlibVersion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char zlibVersion (); int main () { zlibVersion (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_z_zlibVersion=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_zlibVersion=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_zlibVersion" >&5 echo "${ECHO_T}$ac_cv_lib_z_zlibVersion" >&6 if test $ac_cv_lib_z_zlibVersion = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi case "X$LIBS" in *-lz*) ;; *) { { echo "$as_me:$LINENO: error: Link with \"-lz\" (zlib >= 1.0.2) failed!" >&5 echo "$as_me: error: Link with \"-lz\" (zlib >= 1.0.2) failed!" >&2;} { (exit 1); exit 1; }; } ;; esac echo "$as_me:$LINENO: checking for allow_severity in -lwrap" >&5 echo $ECHO_N "checking for allow_severity in -lwrap... $ECHO_C" >&6 if test "${ac_cv_lib_wrap_allow_severity+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lwrap $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char allow_severity (); int main () { allow_severity (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_wrap_allow_severity=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_wrap_allow_severity=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_wrap_allow_severity" >&5 echo "${ECHO_T}$ac_cv_lib_wrap_allow_severity" >&6 if test $ac_cv_lib_wrap_allow_severity = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBWRAP 1 _ACEOF LIBS="-lwrap $LIBS" fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_opendir" = no; then for ac_lib in dir; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_search_opendir="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6 if test "$ac_cv_search_opendir" != no; then test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" fi else echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_opendir" = no; then for ac_lib in x; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_search_opendir="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6 if test "$ac_cv_search_opendir" != no; then test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" 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 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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_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_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 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 #line $LINENO "configure" /* 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 #line $LINENO "configure" /* 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 #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (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); }; }; 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 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 eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 for ac_header in fcntl.h features.h limits.h malloc.h string.h strings.h sys/time.h syslog.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 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 #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 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 preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; 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: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 # from cvs echo $ac_n "checking for sin_len in sockaddr_in ... $ac_c" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then echo yes;cat >>confdefs.h <<\_ACEOF #define HAVE_SOCK_SIN_LEN 1 _ACEOF else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo no fi rm -f conftest.$ac_objext conftest.$ac_ext cat >>confdefs.h <<\_ACEOF #define _BSD_SOURCE 1 _ACEOF echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _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 #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((off_t *) 0) return 0; if (sizeof (off_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 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 if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long _ACEOF fi echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((pid_t *) 0) return 0; if (sizeof (pid_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_pid_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6 if test $ac_cv_type_pid_t = yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi echo "$as_me:$LINENO: checking for struct stat.st_rdev" >&5 echo $ECHO_N "checking for struct stat.st_rdev... $ECHO_C" >&6 if test "${ac_cv_member_struct_stat_st_rdev+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static struct stat ac_aggr; if (ac_aggr.st_rdev) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_member_struct_stat_st_rdev=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static struct stat ac_aggr; if (sizeof ac_aggr.st_rdev) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_member_struct_stat_st_rdev=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct_stat_st_rdev=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_rdev" >&5 echo "${ECHO_T}$ac_cv_member_struct_stat_st_rdev" >&6 if test $ac_cv_member_struct_stat_st_rdev = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_RDEV 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_ST_RDEV 1 _ACEOF fi echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 if test "${ac_cv_struct_tm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { struct tm *tp; tp->tm_sec; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_struct_tm=time.h else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_struct_tm=sys/time.h fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 echo "${ECHO_T}$ac_cv_struct_tm" >&6 if test $ac_cv_struct_tm = sys/time.h; then cat >>confdefs.h <<\_ACEOF #define TM_IN_SYS_TIME 1 _ACEOF fi for ac_header in stdlib.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 #line $LINENO "configure" /* 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; 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 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 #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 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 preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; 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: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* 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 /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ 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 #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; 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 conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 #line $LINENO "configure" /* 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 !STDC_HEADERS && !HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #if !HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ # if !HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # if 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) exit (1); for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) exit (1); if (write (fd, data, pagesize) != pagesize) exit (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) exit (1); data2 = (char *) malloc (2 * pagesize); if (!data2) exit (1); data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) exit (1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) exit (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) exit (1); if (read (fd, data3, pagesize) != pagesize) exit (1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) exit (1); close (fd); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (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); }; }; 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 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 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo "$as_me:$LINENO: checking for working alloca.h" >&5 echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 if test "${ac_cv_working_alloca_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_working_alloca_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_working_alloca_h=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 if test $ac_cv_working_alloca_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA_H 1 _ACEOF fi echo "$as_me:$LINENO: checking for alloca" >&5 echo $ECHO_N "checking for alloca... $ECHO_C" >&6 if test "${ac_cv_func_alloca_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_func_alloca_works=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_alloca_works=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 if test $ac_cv_func_alloca_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA 1 _ACEOF else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.$ac_objext cat >>confdefs.h <<\_ACEOF #define C_ALLOCA 1 _ACEOF echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 if test "${ac_cv_os_cray+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined(CRAY) && ! defined(CRAY2) webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 echo "${ECHO_T}$ac_cv_os_cray" >&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; 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 eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* 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 /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ 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 #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; 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 conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 if test "${ac_cv_c_stack_direction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { exit (find_stack_direction () < 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (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); }; }; then ac_cv_c_stack_direction=1 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_c_stack_direction=-1 fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifdef signal # undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=int fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBNSL 1 _ACEOF LIBS="-lnsl $LIBS" fi echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_socket+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; then ac_cv_lib_socket_socket=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_socket=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 if test $ac_cv_lib_socket_socket = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi for ac_func in gethostname gettimeofday select socket strdup strtoul 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 eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* 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 /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ 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 #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; 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 conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 timelocal 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 eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* 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 /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ 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 #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; 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 conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 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 eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* 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 /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ 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 #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; 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 conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 strsep strerror strtoull 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 eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* 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 /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ 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 #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (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); }; }; 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 conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 LIBOBJS="$LIBOBJS $ac_func.$ac_objext" fi done test "x$prefix" = xNONE && prefix=$ac_default_prefix eval localstatedir=`echo $localstatedir` echo "$as_me:$LINENO: checking strtoul returns 64 bits" >&5 echo $ECHO_N "checking strtoul returns 64 bits... $ECHO_C" >&6 if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { unsigned long long ll; ll = strtoul("0x1010101010101010", (char**)0L, 0); return (ll != 0x1010101010101010LL); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (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); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define HAVE_LL_STRTOUL 1 _ACEOF 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 ) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi # Check whether --enable-lfs or --disable-lfs was given. if test "${enable_lfs+set}" = set; then enableval="$enable_lfs" if test "x$enable_lfs" = xyes; then { echo "$as_me:$LINENO: Large File Support Enabled." >&5 echo "$as_me: Large File Support Enabled." >&6;} # Check whether --enable-largefile or --disable-largefile was given. if test "${enable_largefile+set}" = set; then enableval="$enable_largefile" fi; if test "$enable_largefile" != no; then echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext CC="$CC -n32" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_file_offset_bits=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 if test "$ac_cv_sys_file_offset_bits" != no; then cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF fi rm -f conftest* echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_large_files=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (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); }; }; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6 if test "$ac_cv_sys_large_files" != no; then cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF fi rm -f conftest* fi fi fi; ac_config_files="$ac_config_files lib/Makefile src/Makefile bin/Makefile Makefile docs/Makefile lib/ftpaths.h configs/Makefile docs/flow-capture.1 docs/flow-capture.html docs/flow-nfilter.1 docs/flow-nfilter.html docs/flow-print.1 docs/flow-print.html docs/flow-report.1 docs/flow-report.html docs/flow-receive.1 docs/flow-receive.html docs/flow-tag.1 docs/flow-tag.html docs/flow-mask.1 docs/flow-mask.html docs/flow-fanout.1 docs/flow-fanout.html docs/flow-xlate.1 docs/flow-xlate.html docs/flow-rpt2rrd.1 docs/flow-rpt2rrd.html docs/flow-rptfmt.1 docs/flow-rptfmt.html docs/flow-log2rrd.1 docs/flow-log2rrd.html" 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!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 "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # 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 DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${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 Bourne compatible 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH 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 -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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'` # PATH needs CR, and LINENO needs CR and PATH. # 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 as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') 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=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # 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 before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, 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 # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi 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$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi 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, 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="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." 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 ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 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 0 ;; --debug | --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;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 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" ;; 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 $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "bin/Makefile" ) CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;; "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "lib/ftpaths.h" ) CONFIG_FILES="$CONFIG_FILES lib/ftpaths.h" ;; "configs/Makefile" ) CONFIG_FILES="$CONFIG_FILES configs/Makefile" ;; "docs/flow-capture.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-capture.1" ;; "docs/flow-capture.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-capture.html" ;; "docs/flow-nfilter.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-nfilter.1" ;; "docs/flow-nfilter.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-nfilter.html" ;; "docs/flow-print.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-print.1" ;; "docs/flow-print.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-print.html" ;; "docs/flow-report.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-report.1" ;; "docs/flow-report.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-report.html" ;; "docs/flow-receive.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-receive.1" ;; "docs/flow-receive.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-receive.html" ;; "docs/flow-tag.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-tag.1" ;; "docs/flow-tag.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-tag.html" ;; "docs/flow-mask.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-mask.1" ;; "docs/flow-mask.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-mask.html" ;; "docs/flow-fanout.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-fanout.1" ;; "docs/flow-fanout.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-fanout.html" ;; "docs/flow-xlate.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-xlate.1" ;; "docs/flow-xlate.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-xlate.html" ;; "docs/flow-rpt2rrd.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-rpt2rrd.1" ;; "docs/flow-rpt2rrd.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-rpt2rrd.html" ;; "docs/flow-rptfmt.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-rptfmt.1" ;; "docs/flow-rptfmt.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-rptfmt.html" ;; "docs/flow-log2rrd.1" ) CONFIG_FILES="$CONFIG_FILES docs/flow-log2rrd.1" ;; "docs/flow-log2rrd.html" ) CONFIG_FILES="$CONFIG_FILES docs/flow-log2rrd.html" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "lib/ftconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS lib/ftconfig.h:lib/ftconfig.h.in" ;; *) { { 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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $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 -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # 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 # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@YACC@,$YACC,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@LEX@,$LEX,;t t s,@LEXLIB@,$LEXLIB,;t t s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t s,@YLIB@,$YLIB,;t t s,@MYSQLLIB@,$MYSQLLIB,;t t s,@MYSQLCFLAGS@,$MYSQLCFLAGS,;t t s,@MYSQLINCLUDE@,$MYSQLINCLUDE,;t t s,@PGSQLLIB@,$PGSQLLIB,;t t s,@PGSQLCFLAGS@,$PGSQLCFLAGS,;t t s,@PGSQLINCLUDE@,$PGSQLINCLUDE,;t t s,@CRYPTOLIB@,$CRYPTOLIB,;t t s,@OPENSSLINCLUDE@,$OPENSSLINCLUDE,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@ALLOCA@,$ALLOCA,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $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'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF 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,@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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then 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 ac_dir=`(dirname "$ac_file") 2>/dev/null || $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'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Run the commands associated with the file. case $ac_file in lib/ftconfig.h ) # update the timestamp echo 'timestamp for lib/ftconfig.h:lib/ftconfig.h.in' >"lib/stamp-h1" ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (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 # create build header $srcdir/src/ftbuild.sh; cd .. #cd src; ./ftbuild.sh; cd .. echo echo "Please subscribe to the flow-tools mailing list by sending a message to" echo "flow-tools-request@splintered.net" echo echo "Now type make to continue the build process" echo flow-tools-0.68/configure.in0000644000076600007660000001140510240411624011555 dnl Process this file with autoconf to produce a configure script. AC_INIT(lib/bit1024.c) AC_PREFIX_DEFAULT(/usr/local/netflow) AM_INIT_AUTOMAKE(flow-tools, 0.68) AM_CONFIG_HEADER(lib/ftconfig.h:lib/ftconfig.h.in) CFLAGS="-g -Wall" dnl Checks for programs. AC_PROG_CC AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_YACC YACC="$YACC -d" AC_PROG_RANLIB AM_PROG_LEX AC_SUBST(YLIB) AC_SUBST(MYSQLLIB) AC_SUBST(MYSQLCFLAGS) AC_SUBST(MYSQLINCLUDE) AC_SUBST(PGSQLLIB) AC_SUBST(PGSQLCFLAGS) AC_SUBST(PGSQLINCLUDE) AC_SUBST(CRYPTOLIB) AC_SUBST(OPENSSLINCLUDE) dnl extra argument: --with-mysql WITH_MYSQL= AC_ARG_WITH(mysql, [ --with-mysql[=PATH] Compile in MySQL support. (default=no)], [ if test -x "$withval"; then WHERE_MYSQL=$withval else WHERE_MYSQL="/usr" fi ] ) dnl extra argument: --with-pgsql WITH_PGSQL= AC_ARG_WITH(pgsql, [ --with-pgsql[=PATH] Compile in PostgreSQL support. (default=no)], [ if test -x "$withval"; then WHERE_PGSQL=$withval else WHERE_PGSQL="/usr" fi ] ) dnl extra argument: --with-openssl WITH_OPENSSL= AC_ARG_WITH(openssl, [ --with-openssl[=PATH] Compile in OpenSSL support. (default=no)], [ if test -x "$withval"; then WHERE_OPENSSL=$withval else WHERE_OPENSSL="/usr" fi ] ) dnl Checks for libraries. if test "x$WHERE_MYSQL" != "x"; then LIBS="-L$WHERE_MYSQL/lib/mysql" AC_CHECK_LIB(mysqlclient, my_init, [ MYSQLCFLAGS="-L$WHERE_MYSQL/lib/mysql -I$WHERE_MYSQL/include/mysql" MYSQLLIB="-lmysqlclient" AC_DEFINE(HAVE_MYSQL) ] ) fi if test "x$WHERE_OPENSSL" != "x"; then LIBS="-L$WHERE_OPENSSL/lib" AC_CHECK_LIB(crypto, EVP_EncryptUpdate, [ OPENSSLCFLAGS="-L$WHERE_OPENSSL/lib -I$WHERE_OPENSSL/include" CRYPTOLIB="-lcrypto" AC_DEFINE(HAVE_OPENSSL) ] ) fi if test "x$WHERE_PGSQL" != "x"; then LIBS="-L$WHERE_PGSQL/lib/pgsql" AC_CHECK_LIB(pq, PQsetdbLogin, [ PGSQLCFLAGS="-L$WHERE_PGSQL/lib -I$WHERE_PGSQL/include/pgsql" PGSQLLIB="-lpq" AC_DEFINE(HAVE_PGSQL) ] ) fi AC_CHECK_LIB(y, main,YLIB="$YLIB -ly",) AC_CHECK_LIB(z, zlibVersion) case "X$LIBS" in *-lz*) ;; *) AC_MSG_ERROR(Link with "-lz" (zlib >= 1.0.2) failed!) ;; esac AC_CHECK_LIB(wrap,allow_severity) dnl Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h features.h limits.h malloc.h string.h strings.h sys/time.h syslog.h unistd.h) # from cvs echo $ac_n "checking for sin_len in sockaddr_in ... $ac_c" AC_TRY_COMPILE([#include #include #include ], [struct sockaddr_in sock; sock.sin_len = sizeof(sock);], echo yes;AC_DEFINE(HAVE_SOCK_SIN_LEN), echo no) AC_DEFINE(_BSD_SOURCE) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_STRUCT_ST_RDEV AC_HEADER_TIME AC_STRUCT_TM dnl Checks for library functions. AC_FUNC_MMAP AC_FUNC_ALLOCA AC_TYPE_SIGNAL AC_CHECK_LIB(nsl,gethostbyname) AC_CHECK_LIB(socket,socket) AC_CHECK_FUNCS(gethostname gettimeofday select socket strdup strtoul) AC_CHECK_FUNCS(timelocal) AC_CHECK_FUNCS(sigaction) AC_REPLACE_FUNCS(strsep strerror strtoull) test "x$prefix" = xNONE && prefix=$ac_default_prefix eval localstatedir=`echo $localstatedir` dnl strtoul on some systems is really strtoull AC_MSG_CHECKING([strtoul returns 64 bits]) AC_TRY_RUN( [ #include int main(void) { unsigned long long ll; ll = strtoul("0x1010101010101010", (char**)0L, 0); return (ll != 0x1010101010101010LL); } ], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_LL_STRTOUL) ], [AC_MSG_RESULT(no)], ) dnl Allow the user to enable large file support AC_ARG_ENABLE(lfs, AC_HELP_STRING([--enable-lfs], [Enable Large File Support. (default=no)]), [ if test "x$enable_lfs" = xyes; then AC_MSG_NOTICE([Large File Support Enabled.]) ifelse(AC_ACVERSION, [2.13], [ CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" ], [ AC_SYS_LARGEFILE ]) fi ],[]) AC_OUTPUT(lib/Makefile src/Makefile bin/Makefile Makefile docs/Makefile lib/ftpaths.h configs/Makefile docs/flow-capture.1 docs/flow-capture.html docs/flow-nfilter.1 docs/flow-nfilter.html docs/flow-print.1 docs/flow-print.html docs/flow-report.1 docs/flow-report.html docs/flow-receive.1 docs/flow-receive.html docs/flow-tag.1 docs/flow-tag.html docs/flow-mask.1 docs/flow-mask.html docs/flow-fanout.1 docs/flow-fanout.html docs/flow-xlate.1 docs/flow-xlate.html docs/flow-rpt2rrd.1 docs/flow-rpt2rrd.html docs/flow-rptfmt.1 docs/flow-rptfmt.html docs/flow-log2rrd.1 docs/flow-log2rrd.html) # create build header $srcdir/src/ftbuild.sh; cd .. #cd src; ./ftbuild.sh; cd .. echo echo "Please subscribe to the flow-tools mailing list by sending a message to" echo "flow-tools-request@splintered.net" echo echo "Now type make to continue the build process" echo flow-tools-0.68/contrib/0000777000076600007660000000000010240421701010764 5flow-tools-0.68/contrib/acl-filter.tgz0000644000076600007660000003716407364563363013513 ‹—QÎ;ì<ëvG“ù+ž¢B>Û $ÐÅNPì|XB6{h岊g€3ìÌ Y‰ý@û–[—î¹’ì(Éæ¬È‰5Ó]]]U]ÕU]]`&#g*cèáæÞÞÖWýÝÒ˽=ø  ür¯LñSÒõ ¼Üy±³»WzQÚA°Ryû+Ø{pJ–|æAhû_ù^_ùáj¸ë ¥&AíÇ^\ÿ¸ióâAæ(—J/vwW®ÿËݽ]½þåíÝ2êByo§ôâ+(=Èìw|þŸ¯ÿÖúÚ7»ññEÿÛ¥Rº Új¬Ü0o!¾žºÎ•ò'¼¡–{âŒ<ßuìÍÜúZu26pT ü+5¤æåO p<Bæ²`€3Y0õ†ÎÿÚîHç|§?Nãx£ðÚöw:a€x†Þ`>EZìPá´ †ó¿Ù |œÒö<ÂõÜ™ïœfsæ*°àÚ /¼yˆ¨FJÉ´º l¸ö0T.Øc_)šŠ å«þ Œ}Û ÕÐDyå Õi´C’â²ûÞ•bŽDv®:DÏlÌlÚ3¡Š8ò&ïÚqÇø†3ÅÄ¢=›!à (KÄé¨`Q„Ž;ð'ß^–ãb÷À›N•?pì Ñ‹"Âõ˜Ú7ˆ¦¯À뇶ã"ÈÖÀCaB¡eõÒV‡¾q w^pé¸Dhk4B& ®«®7ñÆ7ÐÀ&7@t°]Þ+A¥Î—P½Rî\Á7ؘ[‡µ7Ê¿T…KP…ïv_n—6Ê/¶±k­°W.áÅîÎ6–‰ä ™óßóÁÄq/·7ûzì&.>öçÖñŸnJÈ4 t*j•ÒêJdPqDt—’3øÝÑJb0ŸÍ&Γ·Ô¦¼«›{öj†O$²”^#ß›2GY›)3z„*Hie¤‰àÍ”/lj.4yˆíš(ߟψ{2 ß÷üê¡Ì¢Üá¨C@ˆœI]7_#CCu¥&8éM1²>cnb¸øgxåjÈ4£rújBš¨> &ó¥|± î|ÚÓ‘Ñ~îÓ>ΊŽ|ÊSuÚ(ÞCx% _;]zµtOµcå‰ÚZÇǦÕ<7ªrÐä¹+ÏA¯á:aØz aå`ÅT*\—?‰FôÝÔxe1ó£aq_#Æ`+zdD…ŒðÖéÉ‚ZGÏ3ˆ†ó*5„Ee1dêBÙè5SpÄ`‚N1ÁTPX"ù@(&¡ë†â>ärԆ˦—½á|V ×‰r#†S< Šx£ÙY¢ÄÎæaznÇÍÊŽƒÏM'äÆÍõh‚`‘CR¹´ó^àü–”9qÉÂ!.%M‘!§ÂŽ•·®²Ðº°ÖŒˆvÐÏFgåÖÖô‰ôV是h>îödÎ,-þë®à~µô„xám¨úó1MÇŒòL=D³B“#%aKÞÙg–k÷:óÕÈù`ñë·¸½—½¾2È*Âè ‚»|xó™sÑß9W¨2í‡ëë+KŒ‰5ú3FÍ{¬ øúwŸÕÿŒÏíùŸÁƒÌq{þgçe©´-ùŸ—å½;œÿÙ~Ìÿü%ŸÇüÏcþç1ÿó˜ÿyÌÿ<æó?ÿˆün¥üÉæœ*¿ˆA¥(W)oWÊKAÿ¬?:³.oÏs'7û™¼Ÿ£ìÄåÀt„zÖæw\ý^Ayû[}»¹Áˆ"PP # žUÖþX G©€þ[ˆcÙI-” ¨A(Ï!êÑ$BV²Â’xÔ¨¾íµkÕÃ"|¥"#‘êáÿ e‹Rgfd±#Û™¨a¾HI¨\µÙÐ *ßà·à##qÇîòF… rprxJ^fj‡z`1 ò°‡|3q ÌóÆë §QâÂ^‡7—V“Ñ|Ê-¤°þ„Œ à’àlêòçÂje1™¾Ð»TDpó´ÑHçÿ‡jâL±#•|"9ŸÝù„bíµø”¬åH¢Dÿ]p(-¸.’ÉðáÛóçE}ÒÓGR9sÎ÷sÜC ν_Ë<`†@Ä ’… e ÍE=X†Í€ÅÞä:E‘%±ƒ$cO,m& r}šXš"efˆ“q4Ø"±X2i1·X;ð¢õi‰a0ƒa?é-BòìÞ(›z(Â:0>xå"™nÿ7å{…§ÔyFç+‡õT¶§€µGøR0ºa‰dx 2³bÜ+Ø(37ó:ðæ“¡ûŒR=á±Ò= ~uóI¬1Æ(õ¬ !øM½äËæ=ßtçÓ4 ­+È2 |Ù$’Bc$q›Õ2·öü¹èìZÚ8Ö2F­–Q0ÑŠOúoJsh„¶ú9K+aZ3¶#¨ï›å};›ß§£Ç+< ²*¦5‰ŠÅ„ Æ»2'*GÃÔŽþS£>øÈéºBiÚxý[oBg‚"üý¯z³Þ… nÖØ³ïëô}8§ñ¤I’Yu[ —(‚íß„ªçù”‘O‚ÇÍÙšü´a)ŠBSöÃ.gûÙ»KŸÉXê}%m žÍø›»$d†- ÉWák?ùNñFq6ܨÝÖVJñB5MìpñÆISK鳣zƒîãÅ5çK}Ð`îû¸ÞÆÿÐV4ÔìB«×>ü© ¡Õ;À £[4Pxk÷Njíc„êôê?v ŸÚôd Fód\unÚi!ÀýÿÆžï}ì:e êóÑÈùpvþ ~Ï÷·ò½aæ?¤ ‘-42 mv_Ü&yÍÛœ¦æ\vÒØc±C’®ØWº÷â„ß#¾ÈÇÁûçÏÙ¥®¡`³íEõø³÷²ÝÒþJýv¨ûÓì9O¶Ï å%<Ñ^çÍ”«¡£5±bÁ¼ì?ɽMëhZŒŽ€SwjrU´&ÝÏŸãc‚âhû×ÚïӲٱ-Qx`"2{oL—5ªP”`JÖpê ÉÑä¯ó‘NÅ=#“qç7ØlhüëWd²yÄ…OÑöÊh:ŸÅöAx YAz葸´”ÑmTÀÕ¸1Õ"¡ ÝwQž¢}¹·µ”ÊŠ{4`  ?Ö/æ”é¤×ßeùí`cf‡±ÞDÊ™‰S–ŽŽ®Œ{m´Q‘aòµ4ó}©fxl$¾2*X³a,ÚXÆûˆ”Á‚DCJ¬ôî³ÿùª²\SÒ‚ˆå¶J«åÀ¦¹Lé­rÐ0‘´zÅrÀ‘ü9‚¿ ʧ=`4BKmAù¨,­~Ü" U$Up™š1_¨…ñ<’ø5k± • ó ú¤4T…‹+ä”ÑÙ{K)~õ]-$xí]Ë™Xü~gµ„XLìÇA2…~‹'²Ä¹-±ÇvˆAúžü÷$R =x0nü“ç(šlq‚ËJÇ(tRã¼”Ã] ¦gœùÞ@AjÎ8ŠÚ8ÛVZ†E}Báóþ— 3‰‚K:n½v,Ñw<½rs2§'~qYÜýê4úÒ21%IcÏv¶y‰GÓ°çÌ®v ¢ÆÎ OÂÇÝÞœ¢~4jGÝbt¤¸”#Å%˜³Ò%‘Ÿ>9ôÔ•=1‘…NÞÒR^&2«—ö™‹‡j«•Òǧ˥‡*J>d¤÷Ù…9 º½h¤|?1K¬m€¤ï(RòæšíìÛ(Uƒk@—3I±'n*ôʉx‰õœ)”}02ÄôbjV±5JÄœ8.È&•äÛÀ}23"v¤†»'ï798>¬ -m³'Œ7„-ÚtØö„c ‹Åe1y2_Âö·Ñ¡ÝÌçöB¤…vÐc’Óšè$5Q&1IOæC{‡®3ðÄs¹$Aj¨ÛY¾“á£j½Q;Ì0Ýé|¥ 9hÐJ‘5ƒ/-a}X+ˆ¨Ðgˇ3‚”˜Ë»¿Èâ`"²‡XÜ_b+õ#B»¡Ã–Eˈ@"uùëHÅ8«ì#ŠMäO· ÜÇT´µ@!-œ%sû÷(%+—Qnk!¯{{a@ <•ÛúÄ9Pî¨îp¢$ã‚a’Í7!T¬ w5”—@hõÁ¡ZVW*ߨñ¶oy§»$F¡N*¤yá+é¾›“…‡H†\]…(ÍpµBº “¬["û #Sï£àlÇþx6œOgçø"ááF‡þàáê 6li©Æ-i9–³ý3<+Ü>?Ï!]¡B]H& ݨëÝ‘D¨Ó>… ì 3‚ãJùaa£SÌåpZœRÐ$’ «±ØY,UÂ2 2KêD¸Ï ‹ç€ð´ÄJHJ¸±`\M– ®ãªÁàY¥µ‹ap®Èí’i›¯êõè0¦ê½LlJªˆûø¬ åä'‰^‚C›ÈÇPPHa¯ d3 QwO\S@™*=·!˜©3rTt–æªK¾Þ¤ŠÑ+å÷=*yÝ„\®Û—|Ӕ˙eºE„gð,W5úÆrƒé=W_EHAh´æÈl¼rB’+§Gö„NX(Ñsd 77l©vb·> ƲhÏ)­77!¾ïG§˜kÛw?ò„ðìIðŒ79k€¦'Ÿ÷-0w›‰\ò°8ío¢Vv#·?ûþèfoé1IÒàLpöÄ9§ÿш¤ã‰Cߌ^,¹Øy˜“#<™±o ¯ Yï­Ä%D\¥‘º0ŒÝ[ö‘¯ o1–ÝÑÉ¥–ùú"_IÙþx`é…^Ç—+s»œRobß¾ÎÙ\’â’ Ž¹;ˆÀ馎4Æq÷c·`9Ø"%œMRÛúdB5º¨(n‘·YaZ¯¥×i)fSO©«I’ÝDBÊÔiñ>ßdFGcÌ^O~‰Òq÷s‹÷ðh ”þ7 ˆ[D\©ì oZÐÍ‘ÔÈž*×' 7Aº=º=ehMüÔ L²\0æ¸øPJ¡"9[‘)éš)«²P"EªbÑàOãPl±nŠÚ°ée° zX7…2HM1 Ÿ dd—]Fåâ_Oó¨Îg¥ó¢^dàïªà*ò퉴GßG ¡ð_y«äõ™§úÞ¼$Ìå…«câ²Äxh ?*~%¨t*v¥ZT*ýÊ´ò[eXiå1®þš ½xß ®ôGPpô>4°Ñí>=«‰d L#ïæš'²®`S”Ž8”,þ3¨HOBeo<«ÄsˆuEwVw í,5×1w µ—ÏJ%wŒ¬.Ÿ”FÞ5t°|RIß1ö`ù´÷;4c³Æi‡žS¡f»^Ì¡ÅÇM&ïDG¤ø“‰ý>2w]3’(ÆHÌôµi-fcé#Žž)ΡфMÔR"Š¥löEƒõ®H`À`‘Gõ N5 Â9N†ž?ÑL Glx›q™T¿«Ukí^£Þí6j½Zó°^mjZøä¶ßßù›úÛEÌñÈ”ŒÔŒÅø‹]¿Ò¿æ)üUsók~¥ ¦"(]R‡rU“a$$¡Î”ÛÝ¥Z¿E¨ð<:ÐLãÒÕu«õ­†£ãi\¦ù5|—”a¦ZU槨Z M¸ÚWáµB*qˆúÝJ™´„vj± ñvÈá{ÄSÚí•Sè Æw!ø.Ôd¦‡JûÆÓFCñ1p€œ¡n¨Fö|Þ2¨œD/Ÿ˜ÙçéÛRÚ–I‡i wlóïY ï?ÿü3å @¶y©9⨞ B\¬ò¸)W+‹J1XT";Τ"eü›ØBÕ~¾hŠ„´¯ûzDÈ S´ôú›“kÊ-|çá)µ<‹- p±&M;×ÎBAb|É@?à‘ÜhB.QꟈN$:ÈÄ Ul4†õÚ j_KR—m0êØÏq.jaãe†‡—e“qÄ@#Z©gZÄ—JÕ‰KºM*|´¹.’šX$!¯¥ì3;qëžTħZɃĔ,©\!®âöÜå[Mã¯4¾d%« ç\–/cö6’æ\"çtmÚ*‘&Ä’(äJñ”e)’aÂOʰ¨AM`DƘܸ .÷ik\dÃ÷7Ð?çÇ^üý‡ôo=ÀwüþçÞKóûÑï¾(•öÿá¯ø<þþÃãï?<þþÃãï?<þþÃãï?<þþÃ?â÷øwÒAÚgüèCþ5Ò™#Ýjû3{ Mø`¿úp¯`˜ú™ ûãÙBÃÿ¶÷å}m$I¢«>Ešõ!¡Ò}RÛcÔnv1fï¶fôR5’V%lÌûì/޼êÒ±{ú­ªÝHÊÊ#2222"22² ìfGác€;eÒ§’…‚I÷¯ÂI½/W“P 7£Å 5‹oƒÉRsŽö6ÐtÒézá¦äæj0æZ} 7;*Ü~é:¼@øÚò#ð-žCA‘#¸«K¢‰sÞœ }Smª[.²X@…L‹ÊÙù%0ú¡ô’ެ‚ú ýã¾ùuÝNEšJ ôCeÛì°’‘Er%Ì‹Î׆úÓ…œ±b|HeÄ­y9€e!YW´ÔÆkh1À ëÝ׊ë±:ÇwѲÅë;õ÷yúßcDœ­ÿ•Ê•b=¢ÿ•Vñÿ~ʳÒÿVúßJÿ[é+ýo¥ÿ­ô¿¿¨þ×}ˆþ¹[`æ­òf‚/}ïk{*Öñ³é Bŵ@}á´Á¨Û`¤¦C* ¦É ì6%4|ñ…Ï_›Î¤Óƒ”á¨Gù™ÁÐOa7‰[€º]úÕ¤pJÀ »äCFˆÈ‘_8ó4˜ÀY°`'urRÏt†¤.²œëP„ÚeŬ‡msD=>›€zOìçÏ¿”…LÖC5Q%ä,Z?½¾¸P. æÑCºs‚ßËéÀ ¯eš :˜qæt ,Ìí£íVûð¨uØ:Ø•Ý é¬I4AáæÔôvûvëèèÝÌžÝÖoÛï÷Oiª¦yõ`”™cüÑVµÈUމ`ö€ý),nô‹ë“öh#ö¼1,€Þ° R—ñ&¢oj3înÉÎUA´_þúæ0ù% pìË$ ‡}…Î…^ˆt\`h94±iƒê% E±r…Ð$ž.TR™—ú’{…ßýÓâ™y“{eטBüºwòGû¸u"ÒÏõ®Džð-ZðÒÔÀjØìÀ6 =AHƽò®F“[~¡`Ѓ…-ØQšY8st醊Ug;YÐN:zœS tÈçY?W íÒp/Z»Ð¾hj:ë6“Zº×Ý$÷5©é‡í©€ï±'j¸>EqmîP°f–Þþ­½wÐáèyÜÉ=¶Äô¥ì„L;Çøé0®]Õ˜ªÿ¢%»"QË–8UrÿOe‘¶[³âˆ uR¹ãû( Ùùr¯ziG5&„AÀ{´½»÷GD¿íö¤l«œAv¨ì®~›{ÅÔÓ B’¦ðr:˜âä%f^À_>»zç¤R1öÿ½ƒã“íýýÇkcŽÿW¥¶QÑ÷Ó]Ð¥j©V]ÙÿÆã½!`a0 ƒ&Ðÿ' š¡Å‡Ñµèv†xˆÞóiWi²´ÌãîÄË&—޳;ú:DÁ–„! íþ¸-z=¡ˆ¢ýA„ܦs0"{¶GºïSJK¦Ì‹<»ûÊóº|ØOÁçì]ˆ[±7"[ã§ÎØ|Áï ä¿Ä-4 9£‰s1篼IŠFñ$æ”9¶Ù Î{Ä>UŸçˆkr7ÿüríæäÍœ?éæáMþòŸŽƒ»ATÓI‡þ÷ôf ¢‚ô1™¯§Ž@÷ú¯;Íé’zšç °-î_š*Àà1€Îöx<àÖ(#ˆ½„Ì×ô‹©ÕqØÔö “ËM%zÛuœË‘ÐMGcsØÙ/$,°¸ 91Uªî8šºD DöÀ;WÏžã<<˱Î4¸®×t HX]!0"ÔçõÑŠ ¯Oö#y*œ ½õ§Þ̽Á€£ìfxójOÒºóy8úŠ+/ û;=l­ë‹  ªg"]ß¹å^Þ13Ô2BæŠÀû%곌”@ˆð¥'œ…m•’F½áe~cŽñõ¹•ʼnҨ°h4º¼E¤öh"nf¬$ˆ8JµNÎwíŸBfÖ× ·V«…à¬Ý:D:z–`Ì9«Íæe™NhB(ªc"y7‰c:oJÉ'¥s%ôwLwÐÒ±&ï&?ÀÏ2ã œ‡ú[½þ4PÂѾPTª·G'b<êãîôXð„X†Ä/ ¸N “½ƒ…|ÍHÕ^²Rfîtû%fßßûUe§×«wŽ<ž©!Ò<ïyº‚ë )¿0òY°ehxòùBÌtÆO"g-)1ô¾rC·®M#x~ý·Ñ„æ<ælˆ›×¼é A¯¼|°ØŸ½ôÓ#ÿE€ýÞ6æÈÅ yÿc½ŒD >K+ùïg<Ž^9¦ç÷/‡lÛ”©²ä7øE·ïwñHÖíÀÃlÏ÷Q~šNFºCnZ'ºÆ!0™h¨Ù®c×à=ªض#·˜zj¾êà3Öĵ9/‚o€&ZpÁÆmdZô,kð…/y)`¹Â–¢2õä=ž¡tlDüÀ8;ÐÞãDÚy”@;g'÷.õ ;Àñ¿3¶NêáAur½Ôw…ÓI%ÄÑqœÁ¬0:âQâè¡ÞäÛT‹VtF:áCÞÖ%é‹oðJ¿‡÷Ç8s°K$~&ï„øÀyŸ_‘“U3–/#ô@>0Ùr7—¯# = Š"êÄûŸë>J‰â÷ÑWo}൹?ñ§ò<5È+~íôbšç£9ä£l|iM¥aÏ‘èÓÚ¡Rë¦_GÁ’Rˆô•ŽØ;5Õ)u³;ê50ÇvÃ!ù=÷pݹôI?îvp1Á£Ã33<ÕLG›;>'èQÆÖ 3ô΄H•53bh»']Ì(Ö¨èXá€lX$›#YøŽQè 14u®ZûyáO{x†¸$ä—ò dIòGû%ENlÎáÞO'·4Ü¿Õ#rèóVP€»âj½N—5[_ŒÑñnJ´a„HE#ŽÅMð]wZ´? {JâFaî «{çÂŒs ê+6¦² ç±·П„J7Û·‚ñ擇U/S´$1ýçðͼ¡¤®Kv#Wj^=ÑæŽHI•ÖŽ­¦QzéèÆT­wy=iË»ÑÁµYPçCo2¢F´,é,‘„Ô„[^ß•-*ã ÷¿ö5S1LU:sã|dµ<´ý©C8§%Ê÷ñ Íp2}¤qÚÓ72Јz¥Ò7„HdÂ+€ã¢ƒî’ÎXV Ý›3¦k¬5¼Œ·Ìü gÍOê bÑB²lÖw;’¥JANGË. ˆÙ°¶·ü^£OâX7íÒzb‰±n00kG.W[VÿÐ÷€õkRtãWç$„[VÆ—ò—_ö±¦áù<$Ce=÷@Q¦šN `Ž—¿Ì;ý±%ð¡ ž£fÅŠd[¢.•ªåò7ü[Éd?úÙJ­^ÂrfL¨H¹VÔe(s£^ƒ4Ç)³ o@¥-6à€Q">ÄbgØýDŽóªK×tøVF¼+„ºêüÝ…—yRA6A«äÅ.Ûi•cÙ×OÝ£§Ð !7ÚˆL|o"—âÎä‚ÑùÑWõ;N5/~-c˜¢Ó9/’TúÄ#Vg¼›þ9¤³—/‘ÆÄ{"DþmÝ®å$T+󯤽ß^PG6‡¥±V͹ÈH•®³,ët°OsòÝTˆnÊ™FššøFÅ3(Z¼Å IÕË´r ãèä*ž7¡ ÜaõI¾ § FνFÃzìÄÄs™&µ!ÍÕ6µOA[~‰Í9²5Sg¦‘V#¾µn„ì”·%ÅØäÏïå§73Ì!Ë<óöÿ6jáó?µòÆÆÊþó3žÕùŸÕùŸÕùŸÕùŸÕùŸÕùŸÕùŸ¿ÎùKH£Ã?¥…ÿD×ÿùϸ;ð6ówËsä¿R±"÷ÿªåòîÿÕjÕâJþûÏúú:;ͤN`¥ÞODiS”Jj¹Q¬#M\.' èeZ*0’lz4Ä’ z÷«ÚëK`ýPf©J¤ê¬ü-jÕš[«•%ñoV¬[ºÕUÆæˆ.ßå%ËMÊ?ÑÅaÉrÂŽ§|Žèä¨Mg‡\ñöè$÷J'Zãúžù‘{%ž‘åŠïàcd0t¡&tŒž¸šè# Ò 5=Ñžª„,Õ øž{´^ÀÏÇéˆ|t_ÌÕ­1Ýù³Ésõüà'†ÿÇú}O³ùÿFµ\)kþO¶€R½^_éÿ?åA®k¹‡¥Þ‚ òï׸׍UÕ³kdlù|þI|M@;»$vo—þotÞu§0θ†ÔJòf2³/¹%ÉéŸàñ†á «2ìù1Ц ¿Û¢«]·ƒw]Lì)ãÚ'cmCfõDJª-,ÛPa)¹}þÂg,ÎûÃ6Èzo޶ßê6 ê)zñÊSþ‚'‰ù!³À­34œ×“n¹‰×õ@¿áxg7}ñnÆ}h RÎr±Á<£‰lFù;SÝù#.Aôûf€ú ‚ä¥üÚ¿2¥/:C´wðuR›^¶ß½?Úiénsj¾ʵ¿KGi… s8ö0ZU^ўຯ™BαO„rù{) ×þ„¼ iî—¯÷÷~=¾çñùÑ$ éiZ˜á_ЗŒï‰X6äG¤–¸¹¾Qw76y²#1mlº›%Qur\m¡÷Û»»x'{npAžåàñ|u£8l(7^®7× ñ=XYþ")†31!9gÂ¥Зâõ~ëxûZ¼þ@6þÀÜ£üþü¸ñ Ý‹Kø‹'Šsôn ðèþÐæÑ OË ÐŸäÑPÚæÑ äWµZ2®×ܺÇI£µú%¿¾†ÔÛ;8Ù_ã'ýFÞ—²Ç?µ?yœyû9ûÀùúv¾àEB€¡ÛÔ:ÈÆî1øüŸÁæ\>ŽÉ?±ÃM¥– »Ä„bZ”Zd™0_|b¥µj$€šáá¥jÝ-´åâ¡j)Ñ,ËqzbôÙŸÎè-ÆN¿Ïÿ\>‹£sõYžêõéB¦§éãß[ûåiz:£Ï+¼ÈÙ ØÎ»ƒßöÞÈÅS–5Ðt‘owö[Ûm¼{ ;?È›·´¹¥¾M+ï~ý÷ÖÎ – Ë(”m—"Å´vö¸ù–©2R 'C%OÙ¢•†ÛïÞŸ¾?i½{‡\éu(é5ç’LŽv^îkþöš‰w«ê–‹åñþé…—q™*,"i")"1‘‚D> Vöc1GJ•rÕ­”· ¿¨T6ÜJuÃF¹DK¨;y™P²ÝÕݺ²L<>&»µ@šÛGŠ1_£Œëö1p£_ß¿áÛWí7x[dð¸Ý8|9.õ¢ªäÐ-ý—ÛýqÛ»™žÒÀg w²‹¨H ô€ú5æ¯ú¦.uð}´A×ëKÒÅü‹|cµÙº»¡7—ô÷|…&² sk]“6J(bPª¹æNElÖZò’=u­™9ê– ö€ö–h.Vš+—Aȱ8Å”wwÉ6|3®XWßÔÌ|¡s_ž¸Áu÷Ž`Å”OÅjà†œ ã-"dä"LiÞpª‚¶9r+KZç£1ƒž]ºÅû ý©/]¨//­–ûTt—à ‹Em<É‘¶`Æúôå¶Ám­Ä1ƒŽ5`o0ßöÎ~ûäÃa o‰ÍàB}Óúã$ª,G÷@×Wrñ P"õ7\…¡¿ÓHY$‰7¹ødô€"}Í%ØH@­1¥±CAF"–’šº$«$;TD´JÉh6?FD£?¤Ê..¬e…2ÿ©›ä¿ ~ä4‹¬(™!º ÄN–%—"Ý:Õ–¢«ö¨~ÃD–[‚,Þ‘Öò3“ØÊ$¢,‹È[Âiö™nÐÝXn³†|›8:ÄGH®2ŠO.±hÎ^)õ Iö>3 –……‡Å¤Ñ,#/;Ÿc%2Öf¤ô,®aUËÆ‚:ˆjjΕÍ6T$ï˜O$`Ùó‰¹ò,"Á56‘H’E†™rÂ\I ’&– ’e$ÿ‡Pˆ%/¸žEHdÉÒ‰ÎÙHžD©$†B¶Û‡Û'¿Ï¥¢8éømŠwO!òmˆDdjÈ×îBœCµ¿0UX…¥Œ†la&VNc‹$ÈR5ÄIlNf&šy(RfåR Z,ßì|—Q<œl"7÷Å÷3œ wÏ´f:£º$Ò ç³\²z,Š ªÛ³›YŽ:Ã¥ ™†›ZlNgW²/]ç\š‘L0ž¸e¢¼DÑqоÈèÕSA¾ )¸sؽ"ÜQ)[.yåjÍ-wªÏä‘àjÂøÅüÕ Ü(¡j2²·ns(èÏÌŠãâʳ •+þc×>¿îµÍn$B"¦5‰"œz¦’æ-|DÞÅïK”I ܰ£^tñ$”=–,a$¾¹€ä¤ñ©C­]rhüFꈰšäÊbxnÌÆFÉVë. Æìß~Û\„Xy˜m TtÜpl“L#Š÷a ܸA1XwÅÅ#Žð¥<ÙKsG¤qÔåW|šÍ¶À"Wj?Fó õcLåÍ¢‹7³êí«¡Ûb~J±Œï¹É£e>þCúJTU€íl°©lLSZæÍ†[“Ó-ÔâUF£HÝáÙgIlC¯Nêm–œ'"™ˆâæp¥DU³¼+[u·Z©* WFúW˜ÅôCrÂÄÞP…Y”">¡˜e4l‚tó[¿IÇlG£%áŽÙ†„pÅ?šÌýŒÅÍ0DK¦14M;7øZÚfbrÈJh.¥ÿñ&Ò?ì‰d¯r}K¢lÙlF‚C…}} ·ê™/ÿÑeGäxİéI c£§ÿ8Ëã9Eñ7±ÆÑ‚ÖDC¬õ¼áíÚÂhžÏ¦­,ýÏÿBËãj"™máŽn„—f=Êë Ð爠±ä€‡‚:-9Øq­?lÔgÕ~Aã¯..[)¨‰8ŠFÑ÷Åöb‚)R±\‰V"Š:ºö⹈S•úæÃ%[Ï‚nt-×à8+{vX[bç+A øšÙ¡a\9ŽT+[nÕøJþ€ïb!fV¿Øqx¯knµTRx§ŠÎ1 {Ò°²M;®x $i¢dw"&!üsæJMÞ1k›]M&Œç¢„—ѺYu«[Å€Xýà‰(aä`¹øl«K솎àÂþ¿ìý«$ ËÃ,im…OŠkÌ &" û*ë (ñV±˜ÊHŠ}NO=´[Go÷NŒ˜6@Ñì0a[¬ –Ù›NY–Kn½R4ÚÿÒý½SÒQ¸ÏJ½¿_¼÷q£_«n¸µªuè§¾Yt7KÅ8ù©.*»{4ñu¤n©ÚKäP„8Ô:&ˆ4öc]†°V±e±1Ÿ^¼§XÐtOÇ¡†ÒúæÊÄõEÁPqàKøÕnÁ¢¨‹YX†’Ê¥Úbd‘І²ÐEF”Š®<ø½™ð®-}wèÃ_ò–7“@áÿ,‚jõË ‰—I+oa"pv@ÂâÖ¶»W] 0U—éÅD°ÎÊ®béd„Z±„Q r¬¾“^ckÁò…­ 3 ¼2ñËLgЦU‹i­x qn_¹½ƒ hIÏ(¼±´¢H5ZÐHQƒ¹Wrï.d×máZDX~É5zÝ´,È ¸zø‹.n'áEèrÒSq&Äoå­rKÂ+"Ö|¯Ì—À7b8…aYÉLç-ÀÅóçŒ ´lµÞ´޽ŠÍ’+Ôª‹=éµßôåêLNÜEÛ´z¯ Úc|ϺEø2£¡öd³Á5f'›åD.0 à>¨ðK°Ÿk1÷-/Á\t!‹½Ìc0‘î8N/Îf9I<&AL•£ü×ã6ÖLÜ …'rD‡êMÈrœÄæ‚äP«OÒ ÌÆÃâì&<3xŽ u€ó1r3ăRz>«*´¡Åñe™î‹õƒ6« µñ&x‰Ÿu_^kAwG0|¾1¶ƒ|5ÚT’æÙ¨<0œ ±yà µY £Â ñš2ðž}:áK:`pt(-¡È¨a3„NZ2U»P;š–uº\W‘ ¬œ4mìåµu|¸½Óâ,©€6+ÖdÕb8ÆèOx!¬w5–ܸ4ë+*¦±z,ÖÎ;½¸k`$0xµ+åOrµ AÎIk¼ˆ×ÕIêO©ãÎTüæ‹rU”(Àm)š.ñ$õ§ÕIêÿ}'©+e·²im>˜³ÇòTàøô/CoÚÇ€ËýaþÓ+½³í˜Ï¡‰ºU¼)Ñ'°JríPË ím—ݪ­ú.Ù¾yãßúºµ.ò‚fP8UÇœÁßÓ‰xžGWæ«Òw‡íƒÖb5¥è›£íƒ7-~ƒ Z/•E_Ƽf+D™»€ïôÖí{%>x¾åúêod \Ÿ×k«49Ú/PÚ¾¯Ó®ê‰U9Æ-ˆº'Tf ŸMa¿¬ 7œùC‘F×JVM|/Sž}ûÛz>›Îœ¶Ÿže˜)cÕÏàÏÇ! ¾S樃ýfüNw ã‡*5øT|œ~~œœ¥š©ÆJ [âí»mi!·Ü±± ÙÄöÎNëøxïø¤‰c ?æã?¡Øííˆ'ߣ³Ûm§oážôQ`ïnïî5Ñ?ŸqÄ’E»Úö)"%Aq 0xÙà‚ ô¥À»ÝÖÁzóiäOnì÷wÔi’’6ܲŽÿ¯ŒÏŸŒ›X»VÝ­–ì#nuS¡ÎóñªØ¾roWhiŸlÿ Xù½µKÀ(™?”KÙ¶ïIâe-%˜ê9ØÝ>Â,Yãd±ä£ëµ[ª*èÂlÓ¨»r\³¢}úñïg;=mt ™5ÎN4ÃgDìw «W/Ÿ«o§¥³¦lé¨õ¦õ5ðÀ‰sÚÉýs;÷β§m¨@þX)¦’í·-ª%Ÿº‹ž.Z{æ\kˆ5W„Ë©p0ɳ9 6…úW—¹l’ŃnmÌgÚ² ^Š\»\C®]©Í¼+` ù´äˆ×C&-4OâÓÅÕ´}~}Q>­”Ϥ657~ã%++·÷gÌ( }&í1ZIT©à—ÜÕ~²€b’e¡ðq(+cð\…³gÓÑgo(~é_I†c%v_!……€ZLŠá{è¨'­»È{hö´NLÖ½·‡bï ü9Ù9ïw!ûQk§…ÑŠñöÌc±ÿî eBó‘)¶"ÞœˆÖ 4€‘© P#ßYìE3Í*LûtØñ-“½Â¡j“•‡? ›¯—WæÇuÏ|Ÿvdzêj÷»P”àn{:òÛƒÑ%ÁK¹µ˜ý anSSÿ•軼I²²cå N^uüÏNN ðã7ÈF4È3”nUSëÃÆ7k§wúK ¹0ù˜Ç‡x¸øKЄxQ$RD¨o¸›ZŽL}Ãq´FUcIA¶¯aCÃm*õ´ÎΞß^Чµ&%©ÃÒÂðÜhO«nðl3dzŠ(´¦èO뤇¥îã ÔoC¨Æí{!ÄÐ\ ¢'@½Qçk„FTCÐ}À)¨‡ûõ-wKKLÿ H·³Cž?­GŠüu€!äIojÃG|Œ|§„^hóÚ1ãi½zÅJêËÎ*™ —²{Moì¶ÜtQõ‰YC¥›Q? fB|0-!‰ÂÂŽêM8‡ôÑyVíŸÖ2 %4‚ªóô´â&n>i¼Ç£éÆ}jWîfñ3§Ú{³s•4¥cõóbÙ-õî?L‚§Ü[¿‘'“¬›ÑßP+¨œ5OÅËðn¹,I k¹è–ÊzqŸÑ€xH±Òb½ä–7LŸ¾¥p·–‹_›n'é°@rú´Ó® A#ÊÔEðUî)ÖZå9Án#ò2´°†²GßÚ2Ä첉9MW½ŒéÊÀ ½ŽøðΛt¦£I#µÂRÝÆ–[Þ2CÿƒÇáî>‚+•”€ õÚîR\‘¸÷IxžÓd8ï"£ò@0Ç&vÎlœÙ*[H²qh)S¥ƒ¶ÎÀð¶¾LÒ¯‚•@JƒDx*!U3ÊrTD•­-·bÃ, ‹BM,4ZRð¨R‘ÉD0ÅÚ–€oVJÚÁQïõ¼a×k¤,…Á$ ƃïÄã/øhÔà£Àùê 8Æ!ÌrJ#¥0›²1˾š]kUR¹’ŽàÓ`äñ:twèÒÝýìNÈê– Tp€æu-vì*U·RÕ6- ?¨ôÌ PÌq9;‡$áJ È£® µIM›ê‚Ø 4”˜O¬®_=«gõ¬žÕ³zVÏêY=«gõ¬žÕ³zVÏêY=«gõ¬žÕ³zVÏêY=«gõ¬žåžÿ Ƽ¾@flow-tools-0.68/contrib/Cflow-1.051.tar.gz0000644000076600007660000012024307431574337013573 ‹ŽßX<Cflow-1.051.tarìô®q3ûÚf陯~¼èA»søð×&\ÎzÑ~'±™4¯á°Õ9"mï´BûÑ þ÷° ʉÀà“ ?fÊà‰|øÃ1ƒÖéë-a„Ïê`w÷Gseˆ,ºk…>ý¿+>¡ÙPë×àóîÂF@0[·BC@mðv>˜ŽZëZjŒ¬7;òvvùBŽäȉhÒChïþˆ¦- 7}y9ƒ¥±øŸORõ„ï:¶o.MËdB~ä Z“sZÄ=seÓœL/¦>ž]þÚÉj…O„çÙNkýŒ¨òç& FãÁhÎX1ØJ·Kñg´`W :ŒÓÓñèü]Ü27fà+øIoþjqÑ{›ñÃŒ&>žš€#ÈAV†$N3ð—n9ä1|×3í`µM¯übëî-QòôË¿‘"VçÖ?n]ñç›ÿ‹ Úè_ 0›ŸG br4n³£”.Òtû˜4%RµQŸ?|DÐ+tÙˆ$8 ìŽcùhÅöÊÄ%ÀFÓ=‡¾[–‰DÙZI%ö>ùáÒuö™I¥ ³Þ›ÁbÒë¿î½€úMCVœÔ@þÍ`:ŽG ~'ðÑ2ûE. Y b²–]–¹äU§Wè‰kÓ7É1KnsìdçKø‹–’^WêqÄyz)n……v#AÄ ¿|Þ^ËÍsµ„ "}F¡¯ Í0¼d¿Ð®pŸoºd[ƒ¢ÁÇ÷ã&*‹ö‘Š£3ÇÒ<´ÅNëщZqFÕ|Gÿ˜™ µ2Ô ñhÆ4rr`®òðèkiÑ᢮B¡cÔ²i®‚ga`Z)ª,¡Åp4¹œ—s5ÏDKyRÅG±GS±qqvê¿ÿÐ%òše9º¦"s-ML¯EÞÚi8öÏÁö¼è¶p>bUÚ z¸½%óW«È<|µ±M”‰ÖKÃä7Ï4ohAè7AzKzG ã¤Zf¸@7SÞÝ–AàÓWè¥Âðà^ï•á‘H¯Ë¿!Þ?ÜÉ8µÁÿÈ‘_kV(”Fâ“LgnÐ݈O®Ðƒ=Ìg(“ìcôs¤ÁŽ(Ù:¦¤Ø%ûÖ'LAxŠÌâ0¹À”Mdy‹òÅj«¾†:7@Â|É@†£7½ó #ˆÌë¤BEœd¡9Ú†N¸fÕÇDœ ¢ª<Âf¨Ð¤=×íp³ÄPy™4¡† £AV“Åœ@³ (ð8lÑi(ß·ý£æpt:x«†Úp—£áÛÅlПáÐaÜàíd<Å´™†:p³i¿wzÊ`ð°ît6áŽ*×±f1<£¡ã 8,ìbÀGÕüÑBxèq51Üß+à&¯ç³hè× ¸ïæƒð°jCFX¼O$`ÕŽ ±à¼0`Õ– F§VíÉd:žÑå3`Õ¦ÌÇñšá°jWPÚ‹ž‚=¬ÚwXµ/Dñ¢7{Í€UCcÀª™÷'‹³óÞKš½Sµ3ƒÑËáh°˜¿›  Si+pxJ«vfÚû-êTḭ́1áy °Ò\°?>•€•;CÚ³¸`ËïTí jCŠ•s9íÍ1-—Þ¤S¹7¨š¿j{¦ƒÙ`úf@²„‡œ8º–¦‹µcQNÙ’¥aªr­y)‡:{{8â¿°?4wwön4ŠVݸR‹K…÷œ”)ì«é+J“¸sÂ9¥i æK}_ØÔY*ú±1aX;nŒ ¾#B77ƒ¿Æ„Ó{N_0úušÄŽéSnÌ•2CÍö±yÝÿf¯_8kDdac¸ÆìòÛþP^øSI*‹V¡­S®HÑ^PÂ/ÓaÐñãþRÓ?ú'P§î—¬0m·ŽdâxX!`ö€ÿRY@›(>i”Nø­†lê\;¦±úÚ•¨STÿÂ…ÏÓgCÛ T‡éҶ̰¬7‘ð´=Pó4¥T£5&ÀTL876F`Ìa£U`†<¶¹Ó…›*öÅj%¨àòeú½5#æ,B&?WXÑ‚©ÎF»¢É­[ʆ±,lb*åXPO¨/YÛhvH@5nެ˴?¢X n¶D‹žš’#©Z ™Ž³ø¶˜¯«ôù Óž&±Æi¾kQJJm@ßÙ`ÙëØûÿž#së\R®,…®…Ô˜‘%ÉHgÔÛF65p©Kiàœ˜Ë“ˆh‡>¯^ÑÚTk)e‚«Q©L… ©>ªÄæaá­ff¥O -%®ÚëµÃÎcÔ®vë°&ÓÍh¾§`ÎÚª'xø|7c*³P•ëj¨Á©KoªM¨ní;¤—¨SŠV‹BˆR"¦ä«‘”º"y0ºãénv´Û${~âþèÉ ÔcaɡǨôR¥Ba.Ùˆ:·˜G¤ôQW˜ -ÐÀYþuš5“þ?SØÜhÞ-¸¡çRO‹öÕ¾v>r»š:çÞ~ÔO©I¯Y?\R ‡ƒÜS¿Y›˜ycsÍ59óM=_÷L7e¤¦Óú~´@uîã÷p…îMy¡u ¢’™†‰ '1¡Ú›¶\/›;E§Æe !:5uز¨%Â僶¾ #ôàÆÔé‚»qä|4}M4B;3%7­åUèùV+&3ó®Ä“ %Ýh.`ýv`p„BC"ŸI u6•dÌ…œ*yQÆLbÛ[ºUO7&äì±çUFoÌ&lªÔÀ•„VàKs >(š^èfQö—54c— 7ÚÒºmÊ-"´Â×qCKSí>¢~½@Jîµ]—Ñ·÷Û‡&Ôe5×x@¸ø•XPULöáP%W9¿ü³ô9 (‘ŠgÔ’u­@7¹G4°ŒLyÑÔ5œ_Lf’öäröê¢7}]÷]é/°pxÑë¿æÏJ0èˆþ‚XXø×u9M^.fýÞyoúûËÅhŒÙÃLR˜Mz/{ÃQW:¨ÂÓ§1©`2ž˜ð7,Z£ -T­s@_ΦÅ-~9 ï±L¸w$K¤t+ÍK;ê¾Y‰â"Èl|ŒWò|÷ÒÕ<6£œ£ "ÒWp‰,kVÜM÷Õ7RTå ‹´”OåYšzú$8ëMÑb>D‘}ߺ¹Â”¨À~ýèðK­‚óˆJuK¼^v%Ü*‹×²+:t£=¦(¶eR­B­Y¾C. Í4NZF8’ëUËfÃSN›}EzA͆}n0‘>'òsã-EqµÔ¥ˆÒŠå-û%uü˜u4)ÓH„¥–ƒ·d)ê–9{¦º£š×BŸÔ’œàv枢·’O¥¿Q9+»”Ö•»œfÒ$Ù£®Òz…` Dg†¹ZÅš­œŠÐ2ë,) ïŒl}'Nn9óNø¹¯ò‰úáY]ä©êÃFÓ9C ôK4ÈÄ騑Ê,*´ÿká22kÝB ±Ë)ˆ¢ûm5µU‹xÙ²±,÷X˰Rf–ÅR WÄSN¨PÀªÙZD½Ä È~×Ý40zëp‡ív»P'dC·”Nθsèw0¸ƒ¨_|¥)”ê|\ÈCÚ4"s’Þ€*ÛÕ1§x…ŸhÜ_>”‰¨(òOÛX°_Ѓ»[/d˜&cáÞ5Yø•³…<ªF23>I!©…ïïw·ü—§¼ýø“T+[ž#Ý÷E™§h:šLï7ŸQ6Úq¹ög°¡ß²îÉä ;³ìU>s[ÎÒ2ùH·mŸ®QþùY&±8ÍR|1tŠÈÙS6´²CÞf ¬Å=`.)òpá¶1Eþi¿OÔ¤{úicm5N©þYSÅîÈv"-dÞŸ€ Kª:Oq„ÏÆ²@ÚCfå =þÔK`¹» ò*žœÎ¦ Õ¤‚§kUpé7ß ^'i!Õ6Å8¢‘±€ì?#߈‚Ô3’MAitñèBG!½v‰H¯ã´ƒhFÅåvr !Ù2¬öy>Á–Äj éw:Í­<ì>ÓeÓ«ƒÍ;§7¶¦Oç8±P‹|ztœ†3Äp±Ò¦íö•4ŒDAÊk%꿲Ų0R=3ÕŠ€ø”„·”ûp?‹M2üuÅOœùü™,Mä늨8…û3Y\šÈ}rs#ÊÍÿh7â(÷*£’.ž®,5Ìãݧ‹Ëô’ÙJsÊHõ.ÉŠÄ’¶Öv6êûßÃþ¿mØÏ8댪ÞãotÓ”:ä>K¼Äé#r§ÀògOý.:l{uº0îgLBµ[7Ú­ƒþ«ñt09÷¼‘Ð;C:ß½?[Vr Ĥ;¨|g£Õj©óýµæºÂæ#«¥H¨µbb…Ly™v‰ŒS^¦]–£´»9Iާûê˜-–ßK/çVËx»‡Ë„o˜Z„ÆÝ™ÅݹÃg@:ß ÓêÂôÿ:$}6ߣÍÿC´)ò_ç þM‹ÌbßýUuá·ñÝf.;øš£08–É«ýÝG~÷‘ÿ©>ò«í]óª r¶cßé%¾@„DWŠq’«ºz­Mor3i`¯“«Ã_váÛ^à?H¿‚ú¥s1>½<àŽð-£èìx`w—Ox)ŸÀ`Ô{q>ØUïæíR£®EÒzš€%Ccwgöf’ÑÝÉt0 ç'»;;êê)ã‡|îÝ$AÑ›„Ä×ÎÏà‰àZ³Þ«[[µ£Î¯G¿>zÜùõø ùX“ï_Góè ììлtaд¨ñS§¯ ôy;;q÷‹¤¥ã‹nö­“ü»û°õ£¶x…å¬b,xî?Ä"mq%lØ[ÑAu”^L–gØXºqý¥®ùt“¶î›z«7S“·-™BôvyæG½!£Õë[ó_ãÊ»‘^=)ÞZCÛa4àÒq,¡Ù'ü·eb¶Pü¦ñ¼R×ô Np½%ɪ·ñó¤äù÷Ëåõ/¿ä%›ÂŸ=ÆÁ] ·˼ƒ½CÅçI‘Ä<–*ÅF~‘"¿¡ 2‘Ze¤ñý«›Q­×®°ŸºåÉwRùª§—ÛÛ->w¤A!ÉIJH¡mÍwvä ¢ê ä<Ãb^l|øý÷Bùýmv=¿VöÛ(ƒš½ “7ý7tJ;»&?PG¼7Zƒü¿ä¤^ ¾¤÷uN¸ÁQ'áNgMx¯>¡ï¦?£ïÑQ|hЫ;;èì$Ã’Ùœœ3’}𠚟§Y~"¼†êòp,9DJ|ëÊqüHW°Ê'ÔõðM/_‰€î~×Ô-LRkÂ|z9 Fá%wº¢;ã[h|Y3BêF(É-•´Ð6?Ñ ?‡_ +Á”@x9Ä(7*ÁSYX-ÊeJÐTÖ”C‹ïƒ•ÊE^ÊÌ!&WÄJ0ãûœE+äì·|…$š¢V¡©Œ;‡Æ P ¥V9™Ã”`p“C‰n§• ©+kyAD÷ÕÊ$A…Ì(FTwsªp›bÝTWÓÊTS^N-B«žKfÌ^?*ÛÁP¾òPlP[W’î¢QÌG|®L!ÔÙ"eí%8˜°©ø¢W¾7|¶HÁ+ä…Ù™è ꪹèÚjálUˆÑ}Ú¼(â2´L Q[ AñËÙå:Dò‚Ï#ËЇ§w ›F•^r*Aò´›¼[Œã%8ü¼ˆÅ¸]^ØwŒ"bRYïrÎýDf]øâЭ²rKØù¤†"{ü—8\7y„ÞGÜëƒzÂá}oE÷ùëòs£]H”RÐÿmï]×Û6’µÑù<û"0´‘’"©“MÇ^‘e9Ñ[Ò'Ê9—ÁlR­ ªÿ¶ò0y[éúôïD‡™…O«r\”L+²DâIMæá²"Í,xGÄšÄ7³vþâËÍ®l`nDít6 &ïJdrŽcûq‰gü(¡ Ñ@J¥v;’Üî¤~¹­3­‚´¬¶M»Zq—oÕ³’Aè‚Á }ù”yÎÓ¼ÇçÃaò̉D:dtyz¼·ób)ÑLŸ¬‰þEØwÊ΀QmåE€VhÆÒÑçÄÝ™Ò'ãqÆ7ƒT 985ñ§ˆ‘øÌ–ÏÖm m— -8,É_³q\ äÌÁeæâ öí¡EŒˆ³ýW(þ¿Èn·|J"E\ž"]ZJ¯ØJÙ;õ­Ý¦œ{íÝ®(]q¦àg9yñ³$ h»GÈĺ¸p¦?uñ|D¸ÇÉBA‚ݦ IæãP£!ŒÔ]YMü÷›êíÞ]ÞŠÀ742\_?ÿØÄU%2«@•YÅÙo6«6H…ÓÔ=ÚvÐÒ€3ìß7hÓþbX¹\è§íéS9ŽÏaÚÐ!ñxOÖDîëF4 f²ñŒw”…mn>²ÿ'¨¾c?@'Âà ߈sÜ4:™/8,ç(ê§(Z&ýx£ ñ=f{ \1P¢©‹%~0Ç?ÈfÐ5Eœ›E¥ÅÁ`7žLÄ®£ÊS¡ BMä%®YÎk£ø¡y"H B(ô&ÐØÐ`Ì"1‡dæí½&„ŒœžáàÏÃsׇGI€Âq!N ³$ùPæé÷xœTéúdz4!VwÆÐæ˜è·ê¾PÛ<ºEmGå4à<½}ß ÐB4KÝ×±TqqoÍ'Áû ႼF¨VX¬ çFÃÚ˜Âzëß2Ï̓ȅâ¹yYq^kÙàE0 …—nê,ž& Ž_è0OÚ»]ˆ åüB*¨x±_ÇÞ¨jé6¿ŽÕÉ×É®ðk¦d£þ.Þ¥UÜHAÅÛöºù¨ùséÒ¹n>ù:ÙM³´ŽÚ¾®ò¥Åñjéþ^Z#‹JT"t–O> R”»ç¯á0M !÷rŒ^¼HÚ/-íÆâvÇ7à $ä\Ù×ÕSçìºÖ”o¡¼ži‰œ tõ\WËÊ J÷ÍM}©| xÕÜ¢¿BMƒÖn¨™—5,¸bnWŸ¥ë¥fðéò=rœ Š$RÍ¢•*ºœŠ\f~È6Öª 6rÙ±s`Ë–:rœóGßöÌtÃê¸î‹†CÿókÑÇ5ëT ¤lrÕaéòÈñëYL®›}}ûV:‘¾|¬RûyQioþúTr¹U—]Šuü8½^eàßFˆ²ô•aœ%xÆKß$é‘z4ƒEñ Ã-Ø \WTë“®¿?a£k±•äg™C»k¿ÿkÅÊR*þ·6õJiN(PxF’âf¾â‹`4ú‚š Gð Ðr%ÁûpЄÆ¡þ å_»ôô9'vŒCë!/WxJg8ºAf,¦‹Ì˜> =¶¤/‡˜rÀF(µÛ‘TNECVÝŽ®r*Úê–Äj&ÄEdqmU—ÈrêZyÇM3UÂÉ©j®ÛQ\NEÇû&²ËYð£×V1¤—SG¼…nG}9Õ vKÌÝ}#‡¹¶nF9UU sýª8ä“+¹¥¢›4 ;½Ò&ƒä¹•z%¿Å7Usé$—ụî%Çõ];—8É tn¯½)òñ·Uæäy÷[“B7BEF å à7ÑC æo#Šn<Ὶ2Z°„Í—·_o1èß “6ÃÍ%,Xðù4Êä’’ø7d(Xª.¾1W|"n2ÅÝú´ªæR¡ÅÐ]f™iøþZÔð±a±c^Ë%E ½\¯B(Ø4³¾R7d4\\ÅØt-A—jiïŽYÎo‚fqܯÓùúˉ¼ë–k€ÿ4}sU|:ë~åá|íá¼B$™ñJ¬MÜ|²n÷N¾Ýyå?UwPz$K×¾³s÷ö¬Âk´›­ÍöšÉý—OüiK¶±±ñbÌ:ëü·Õjwäo«µ¹Ùjý¥µÝÙØØÞÞÞØÄû6}ÝüKëSdÑgLK]jêö¥å¨ØpxM;<•–NîN†þ)>6O;Q‡ß½xsúÍ©õ5YÛw&é/Å ô ŽƒË—¸³..*]Ï­—K—«ŸÖÝö¶S,ŸC7W¬ãËgÕÍÛpŠ•òìfÅ9ÅÊiwM1$·tÇf3îæ§ÐiåǶ¤Ø†[Ì&ëõ‹ òÈ-–åð-££äÎ4—Ù×)ÖÉËçúuŠm䊹Ùs>ÊËevŠAðâ3I‚‹3íä‹eɃóÅ6òŲ”ÂùbJ­¹)…M1ÿomQ±N¡X.qÖéF¡ÃÛÞ¤Ls­=*xsË¡˜D&w—7 gù]E±N±X!%²ÛX\Lr$gSx$Ål9˜3=:MóÁAsoÛ[îkMù8IseØ ÊõÑ·o£éû ˆŠï=<ÐZFá¾²M™ÛŽM¬20‚³”²JŒ^Eý€mœa"ÍV)ñP,…ÈJ‰nú0Ù”i–<ɽ1T òÄ«Ïg}Nê³£){nÓ‘y¬b’¬¹aBS“–ê³ižfȼ¶¹Gnk6YZÆGöYÝ›çͺ¿õ”¶»î··ŸÒ–s—¥ÍÁ,&û%͉6âa£ÎÞGÈ‹>ËÁø4°-Rsñ,:ç3K(i§‡‰&‚‚Üv,㛚8HÁ¶¹d²ÖÄ4W áÌaôÁgTz†„Q×o…µ 1Í-Ë‚6—m…µ5ÒæF1' õÕ€ÑÉþ€l·1Oü̳õ¡Ýb K¤¹’’Èó·tçò½¬T´ÀgΫhð„ûò>Ú\pOÜDlqßôûïý¸üß®ÈÜÆŸºëù¿­­­Mâõ¶7:[íöÆFküßfk}ëOþï>|ßl»ßïáq<˜$¯Æö±y|!ÏJ {Ù§W„ž.R¿º[óÛ?j•ÚñýHsvÄËé=@IN?9•ÀBŸi¢y˜^3º(®â¹ß`Y<ˆÍ­‹8¾tq¬Ñ h<Ñð íD šâ†.º±MüõÁÿkMz4?E}ÿ¡òI"KíO’ NH‰vPã%ÆÐÓ1ø/cj˜ÙÍ9éOߎéC¬RF#UºiäDRLQ¯Fýò‘HÖVm.ž}6ÉI¶Iww(†ÝQ*ÏØôz8ÕÑö¿Û?ùæð͉¿sðƒÿÝÎññÎÁÉOXJ—¾˜f£©h¬®{ÁlL8Ã/Zx½w¼û UÙy¾ÿjÿäÐA/÷Oöz=ÿ%áÛÿJŸÝ7¯vŽý£7ÇG‡½=ºD‘üœE׬ð7 ¡¡Ã4ˆF‰ÎûÚVuLçÄwÈ©½G²qÞD7o 8=«|SgŸ@6‰Óº9‹ÒÐ$×Ím*ªgûZ'ú·Za{Ó͆{ïi+wƒñÙ,œÓ××;~«Ó^\÷ßôvš„èý•ýAמŽú{¿ÝÜlûñµV{m½í·ÚÝÖv·ýØWÜáï}˜ú+TÑ9þ—òî«A¥ÍË(é7ÃÁü™çÁLpÐGæÌÐ0kf@‘¬LBäN×è’lN/*~U_t¦¾ûî¢RóŒþÉ7§/÷`'ø¡Õ~â>îý ;¹Çǽy¼‘{ !¾<”{¾³ûw~Ünå¿9þšwè±7¾òòµÿÔ¯BöÈzæç‡ÈñÐxL¹7ô„ßð°roè ¿‘‘å^á¿ãÑå^Ñ~Ã̽¡'^íÚu¦œNcéÚ›÷XjægÑM’Lºvq8¿„ 7.œ¹w/öz'§oŽ÷vv±âë…×½Ã7Ç»{§ÿçÍÞ¿ß(¼?Þ{±¼·‹MÜ|Rî•?*<†rötïûݽ½{/°](@h`çõÞÉÞñÑñásè,h¡w²C“¥—ÅÛ—fÂíâ÷^Ò¸iJ {íâ¸õ½ÖÞ*¼…mP½Ú^üÊV}ýÀÇŸ}„“‘ „ºÎ…í9Øsw ¸Aßæ6¨´ZLJîëâZÁ@àší}y¼ó5õ¯[Q\©ÞñéËýWü®¸J2è¿~‡s]\%´y]\)~½ß;|µsÂaïz/ª)¯ÚÅ•Òu<=9ì-‚+³æ}i©þ~ežÀeq­¢vO¿ÝÇ ÷A—Ø}srøòå"Àr6q³æ uœ/ÌldÈ;Lk\ØŠ2Ûâd³ºò~½4 Ü9-"”ïwOON^-Þ¨P[FõjI0ÝÁyèkÑÞÕø,¦k–X¦—Â~=øu¾»vƒÙ”0h2?£ÁVÔMt¬ˆmüSºÿ£¡ø­ "¤9E”·OLY¾×—%f²ÊDv&õñ ®Í Ø,ñrï„v÷祎¯ª+‰Îü43”@УUSà+èÐÜ ÐøÅ,±uÊùüsÜPz®Èجšíò^ÝUô%ê¸NËŒ^½ÊW£„«!¢4¹Ð©œ„H@ŸÒ¦ÿ¹©«MÝå‚I`ÕU¿éÿ#Ž&ÕÕ_Vë¾Î„ž­ÖV=ßh§T6ë×;¡[J&Â1ªüÊnŸ?¡¾9&J#žŒL¢i"\âÕƒÜ÷£ó BPT¼åÀfB‚ÄÀ¹ÀFûvMˆTõ~ôWíõºêÿTÇ=¯¥°#Õ˜Øt° Ãz^0ðÀo/yÞAÊ0VëÙóu#ô ðœaCáy"ù…lþ£W Wë¹yDgÁäƒQO¯2Jt Ò€L¹‹8É Û([˜Fh Z ´…qçä[]·…!5qñð ”µº!±Ó/}ö#øð±5zÇ»¸‘²Öø›,UšõEòè‰üNö’Jü-gîî«þ¶óÆÜNxõÀ”µF—Ûýc§ŽûŠV²å¯3„v;7†ì½êè":·‘yµžÉÁŸçÌ4=ɰۼœG`{¬™xÅ#–åªÉeG·Y¨ÕŸC^:4u~"0xæhC†}Ý?±Žbø–'#Î#sÉ]R-sÑ•¶ð‚íÊ6Þ¢Yø¦—ñìÝP²9¨¦UÏ·«PÍ „â„ÅÆîq¡òÒöOö ¯Ë›ë­%Ï· 1(DŸ?²x$QÉðÒ¦/Ã0-´»ÍœxQXÈ~致×YölÕ÷NˆÉï¹ðΫž¦£§O[,: ?‰²%"„Õëe d×>«AX+I˜Ô™ŸaÎ6ï@4õ/Ý8iHaKÙ;…×Í’4OÙV;”õw+dÈÙ ·Šâgªàr¦8Ã&¼ýÿ'ßGÆ,訨ÊV¹JÖ,,©‹Uw¶YG¡Òk[ç;‘:¹ ¦ýhAí¥öŸDÍÂt>›dšKº"ÅS[\Ø„ÁZ1wò.5ŠÛþ§Æ³[?¹µo*«Tίê¡Ü 2~E¯‹ëëHš7¹Lõìâ:Hã_MZÿ»Øo8 ýÙ$„5Ÿ`Eª«»ôC¾з%˜‰~àCŽr:I〥qÌ·ÕL¾Š©Ô ë'÷ÎàÛÑaoÿ{j‹¯¡$ Üþƒ0€rµòð‡µ‡ãµ‡ÿá7݇¯»{•:´ZüÚlܼ=Gá¬Ggm2øÛóŸ³ x˜ð´ñ¼²òó¢ß›åçì•ú±Â(߸æW«¶±g~«Yû¯¬ñ®ßþ£wPL:ωÑým›ùçÞó‡ÇÁåo¾¹>ýÊ ‹úÖ}þ‡ì)_[æÊg¯É,‹yÌ6OuûÓ¤­(T[±¬¨Z{-jR쬲¢Öôja³è1×,?(•„ISVŒ-’Ê…Ô²hA?škÁ™ª˜ù,èÈç˜'Ä-ùiäŽß ËÂΗä'¥²V¨U~å˜{Ô‹ÙéÞí!UnÄ*ê4öfíâ  ÛS0ô¿Ý;îít½Õ•c-Ü5æÊªÿôýñZõíàoµ·Mþ³Éfµj—Gkû_÷‡ÊÃAóak)VÚô_‡sȨ›®íø‰}òâj¼ŠÁLfÏvæilž}e(æÞõòÏ˪{V“zx¨ÅÄ¥õôdçë =<†Ÿ|?RuoźÙ{+æ8fߢ©·¢G‘¿à·žDþ‚ßæz+öàqY´À…ä ”·ÂÉ[уc¿p?zfô› zŠþbž™3ã­ÐYáÎè,p_üלy"ß2îŠÛöG4ðV,õæ­Ì‚Kú'ä?ϧèÿ €·âŠg³_òMžån2ç§Ì öSÝóhH*6{!ê^þÛûAþ÷Nø/ô¶üeg÷ïü—u²hzUÌÅi'¯HÕß®òTå„bú̈¼œVôkN,£ÏrúO§‹2Š¿ÝѸâ‹ü£¬Œê(󿤀9‹Þ 3wt”úÄÕKš‘;ºHóÈÑ?ê#GçhÖÌès±d6ßYé‘‘Ò:wÝÙOG[˜‚óÈ»ÚY¹‚U÷¡ˆMõI~’Vý–û‹²¾s:9+¢is~íí—Ç¢ž¯òˆéðï‚Å8?º‰5aÆÛ¢€IlštͨŠÈdÁy5©—eëzÚâ4~wJ%“*:1¸Ï¼ìèXPbü|Ç)qzÁTî£"†§O!ñkûüž§oy Éõ^a;o¶÷<¯¨¥%ä‰Á%,hÃ0Ó÷ãÞ~õNLòMÈ?µ}]Ÿj[H5§×êÛÏ/è—_p¶Ñä‹gª—Ã-­Éä~fS_ºmãY×[ÞÄÛÏmâ…­™ìj?ûJ6€N$^FÒ‡ºSešÎޣLJo^x›y©íŒ°BÐKû;GûEk:³fAŸ³ŒÒ#Ï•YJÚú‘- Ýû£Çî1ò7¬ŸÒ‘æ nТǻàŸ]qDi5±BÑxžH—ÚZ ¼Qt6íÓ,ítÉ¥swŸy? Ì–JlW¢÷Gçs¨˜hc5JpX[]FGÛ1¢vUî ¹DúÐþ<‘érƒ¾ ‡’ƪ¦©£rëù|Ddì ·‘———ÍÆ rF6ûñX¬™Ør8ͨ™×Áìÿ’ScU6Ø;SÞÞ÷D(¾ß¤ÿ¶`;é¿ß®•zI¦#A0ƒ&¬«’˵¬uÛáîÎþ‹ÕÄ”)t²YnµO 4ãÙùš44&™ÖSœ]k·[SVÇ1S†š^ÂÐ-sÏ«—;Gï7Êc™ŒãiÂc¡fξì :f÷xÿˆï7õVkb J}­®˜ÅÄËš òç®9ÿr4¸6g;UA‡Ôêp>á4 ‹|Šü§XÁgüEÕ¡gƒñ3´9&¦ÄåHêéxf7áN%#CïÞYÈ,“É¡BX„`LŽj'=\0*D& `qgl,6žQŠŽqf3jíõ‰¥}63M€w¯|fU|çÂÒ¡qrl²Œü)rt€€¯{¢4­3šS,9Ÿð‘TÜ7ù• d– ‘§ÎØ#7’.µ@— N4<ßèØÐU@<M÷;‚êqñfÔ}*Ä&ZÑ´Â]#g„—$è3­õœ¯‘4wüM°è¤|ÚÍ…Ÿ1GGX¥VÂiLs¬Â)Á@€´¨Åz–“²‰ëbD°îµAÄzñ Ìv+ËZ!îhY;ƒ˜–wÐL §ÂB–îÆB;cã•&&ûNI"mYÇˆØ ½×k&·×’¼Ø±a½²§ßm×@˜Îe Üjú†aõ–8Þv(Âï^ÛÊ­Æcfo¡‹a±xÆU{‹},³ÜÞ­|Ì2_ûZ—ÀbmË {„7[€®(5þfbt•8ݤ—;_b¬Ó!f3á¡Ð[垘ÕöPãîÈòúž±ƒ›]hS„E}Ÿ0-Ér/{aÀwN¯€¾t ¶£ŽÑ“«º¢'¡²P‹ VÓÛkž7ùÜ1ONs\í'˜)‹h¼e¾›ÅÒ"Êñ–øfK‰w­óåmb&6ºE{·:”VúTFôE¯Î…UU°ã gßOÔ€@AÃ´Žƒt£Žˆ“EMéwãÄò¯pÑ<*‚÷¢Ä%é2iYÚ@#+[8‡¥ ê_? þ†ïyŽóªA?UÚÓECyùåZ˜ö×LÑä§&˜öS{Éá•Ê6KW6$‰^Ù»µTÌʽ³(%Ò7\èÉœÉ%A0Œ”¯RæTO–¡Âà/vË,vkE·A@Ù3 dv&ðuØ àñœ)}¯,v¤ñ—Þ¿¼Ü?øÒÆ[bß ¾´Ÿ£2µGu ЮðB *.£š‘¾ì™Å—#¨j.D0g/"2Õ{«"taÅ%!ñöžº:éJ3 :Æa˜¾Ù9xñj¯écÞBÎ$W W©f¯ëî8 ì9Eγ‰Ð87ÛYØX4a¡¤@vqþÓ\vß4a¥ûQ¾àhð¿qÞFÂï?õÇW§áRu%qs|¡¾H.Çõ«._?‘ðÊXŠܸ—Èjr é°o¡S¼•:ñ¶šÄ[)oÒ.RÞNkx³ÂðºÂ[ª ko§,žèOø<Œ£I4ž%¼óÑr{XᮋVJwB±ƒLonG¤'‹y?†´¹‹à„UÌ„1~UxZðÙ0’ÙŠÃYœ–0» šjËJUUyn ˆ:C*¼(þÁêü†ú ‚ |‚5 >DRãÙÕð?ÅZ°rλ!΢EŠ·‰¨P&r2õÇÓ±á5º§û˜¹”YR ¾ÿ‹—Õ”?œ 5"Ò>prA±„`bÏ'Qzµ Éþ(ˆÆ^’Æ3ÈÛÙëƒX5Î*Ÿý#ì§Jüƒ+ñãfÉ¢"œ$#L žry%ñVQh'€Q~pÃŽ=PêïC曘ûÑ“ÀB~ÙÁœ\ßÊôëÎÎày 'e¹Tœ‡é3)EêÂ@•pôÂ{n Ar! Að á.‹n·$̆Ț³$»†n¤Å6r­ºÖ@ÌÉE¸ÏÒ[´$v#^N8 UÚO½W“X*¡¥IHO€¡ aÊI·½â ‚P‘³UµA ÙŨ¡íÚ%ñ’QešI¢ÃÙuÌÞ=–¨{–uOê&6ƒeøs#_4«£ìfJÊn¦¥|"ÈÜ–" ®T‘zµ« ¯6¾±!ðÕ†À76ÜNÖGÖPÁÛ·Ïr^Ø‹ lIëpíÔfOkkn´À°À>ÎûVl òµóû<ç:&óÉHkvudÓ «ã:CûeK3×Ò ›ëì\260¥2kƒB§â­œïTž-²8ÈU†G²³úÖKÙ/΋M üâÌØ%¹l€`'›3@Ȧë¸û9#w,™%Bá;—Je#É›#dÀ¦¾¿.ü¹f Þ!5:w„(Âìhˉ¦»é}ȤÐÈ$ÄåDx‡.ðaÜ‘`î„Êzz1K={Û 8ç_Ï=’‡Fñ*̹©ã„EXÝŽçÏM,’IX'²ÈôÁ‡²s¾º¯6þïæñ’2UŸDcÁO2üÀ’Þ&Ô z×Q·d2™ëP«ïÚzøífkö …KYüP ¼«\DiƒEŠC¾Ø'"VUy^ÆN'Ñ8¢«bt%ôIfz}HB «‘È=|q k¼c«?ðÔ>„-±h ú”Š´JÕê4fYrÜ QKõBžVe¢×mR«QK;V`B­'‘8iŒ™`Û"z/¯¬î3Kqîæ¦];cRãéðÒÐÂŒÌÕéŸÅ1Aû$#ß” 3òh)XLÀÂ(¹F/#,Q0›€ê㜇‰lç…&•9ôN^ìójz"¦ÇIÅûÄŒÑÔ¿Õý`#9 ›Âa0A·©ÊÝ½ï ‘¿ÚëyÞ7´:« ¿• ޾‰b*ÀÉã_bÛâNF•ËzMÔ¢Ó” A“÷ñˆ–\ÍÃsѼ]†‚‰GÚÈõöúú¶‡# OääŠD%õÈm&ìä ÏG"Dlrh#z7ñÛ­ÎÆµäŸ µ°1Í|€àãçaʼþÙNeu•ž®Š¬Åì´&î)Øï|µsüõ·ÿ%üîõAj¨£~_ìOoRy~ÉãöùÅ7FœúÈÆÙÖZÆ.«úô©,Z®²yXó?ÿ܆F—©>õWß9mÝZÐ&þÃöf³½™466/æÅ_~Ô’$4mU™ö +Ý_"¶Ñ߬ßsåÞZ±‹} ù!ùEÔØÉ€î$Yá™Ã1ûtÆØ#ðÓ°1‰þ97¯‹J< UbagÁìÊžZ>}ŽN<à tžP'Õa5Eþàäj «&Ûë½UF2‡—ÇÌÝe„XÓ`ŒáðÕ©‘Ž ˜Ÿ78C#?›¾µnÍÿHðË6µÌÊNО/pŽs,R²ìAD,™**ø\ÃŒ Ú¾ÓCŸÄj™‘x‚ ¬üÜŠ’€ôØXÝèãÙ%ì/lÚÈ«¾¨`'*ƨÔêz,q{åÊq[†Å6øºOâ†òÛ¹V [mºÁÕñM|‰†ê¢W³9Y8Õ¬õl äÖ–UáÃdz:» Ö"Ý]ƹft13¶ÆaÆ…«&(ÃÍ#’6ÆÂÂN,ù0€P”´Ù|'B£ã@ÇCîš@ARΦ–k‡ÍÆ¢±N…+({ÁeÛj7žz:³%Ñß„°P]¨>& 2ã9šÏËù ãEt¶:ÏÝ])9¥Øä$™GGu8ŒúùmBù9È*‡£ÍÃ&æYv+Aêª~ÍL'’cOp¤gè˜ @¤?‹Îh†Xç’õÏ®ÎéÀOÙ$m‡÷è}¸Æ§hƒ³“s„`Üj^¤ã‘Ç÷œ‘Þ›|ë¥;1^ê î£ïd¢Õ¦l1ÍÃn´Ðè d\aaÝ-àÌv€+ 7U­©âÏV7ëwㄚ±H?Ù €³lnÊvW@ã`ªÇ›Æ¯g· ¦Ðµ¾… ó°e–‹3³Õ=›µ×ôˆýc-VµõÙ.®+émíùEùÜ5½[Ÿ—cpÖÀÚ{2¾ŠÏ”´QT´äô BápÂcs'BËœL³Îq„À)ãƒè|xùÙø›¢dŒ9/"Õ0 xóX³«­Œä+Pi™ˆº‘ûøkáâóÜuÕÆÌe­ÓHŽáKÈø˜­¦ÂÌ/FÎ@–NžíFÜÀ¡(ÑÞF‡E™¬N’K»¢aXg…¡AÆ‚Ï5 L>¯Ë #ÌX•:¬õèç?æ ÛyXÒÁ“¹ e Àb¶.˜¨0ËZ”±uÿÂ\9lGà…"1„J '"1´ãX¡W§5Ën±QwÞ³\¶${œÍéT± ãj€“^à «Y« ;ÓpPÓýSvOº”¥Í‹òx$J<‹}`†Ùîl7[ô¿v%cEž¿ùº—»áÛXˆMÁˆ³i솅›„,©ØÁ6ú æÔ°oDÙ³y4Ó Ø1“`Þ›ÛñTD¿1·ï6Q䂿²,s•â\ΜÎfÆq`ŒÚõbdþh #6ºCèr\pX˜|Œgï‚"‡ªD>S¼3hŠ¢ U>fÃz~V¤ÁœVñÄ0sÅÌÓBSت0åÁÁ¢T¿DW(hèÕT²'ùÒUƒçÆÓ‘»rJ³aôØ ÕR#B¾inà5ž¶n‰,9lH~Å ôÞa„ë9íãÃSž;QI€ÑŽø ¶Ý³Ûn¥……1Qr9³&l ¯1^öØZª4Íd©þO9l¾"üÀ ×SAÍŸ!tR‘sL#,BĤËbøE]IÑ»v*ªúX²Ær¨"ß!,Q}Èi@0µÐè4[¢ú!®. ÆŽá†Yz Œ–p·™JÍÓÖ$ ÇV ÄÆ!]aJdðY,É_˜ŽšOåJWÃpǨ"cšë8ɵ@±ÉfUxV—°È¸ò3ƒœ °x®3H1ž5éòý纺ƒ(éÓ:ë —Y¡XÛñm b‹F¾Œm.bˆ´Ô¿?_=ääÓ‹žÆC(ƒÅ4‚³0›lܵ³d.ßÁ®Kª¥iå'ݱžm·ÚPëàÅ–„¢’+@Íea ³ÿ çR©îçE£ËÑ„]?†HÞ&ê©I‚á ŽÜ=¯Ù#ˆ}•f²6'„žßÇÑÀ¿:ÞTK#0³]ڽعóxËÕÍFDÛêc¶[Uqð5@žaqÃpkaŒwƒ±«0z¥£(±0QT€K®uQ„.é§AÚ¿àëÝ»†Gº‹ºú‰øõAÖþºL×;ŽX6 ˜Î¢K!éâ¡×­n÷%meFhì¼9!®Ïónû6Aä•ôÿäé÷»£Ç3ñ»BÇÛ¸ñÞ5qãÍJª¦Z^k«ª'W 3Ñúq:rAŒyéó/K¾ÿÏjž:C°ùÄãR˜E”CÞÞbwÇ¥GB2©!2óuÏØ OG=eV&7 v³M¤üh® J -¯03Z´v“8xçö1šp·±–¹ºé½iêµ[5u¨¬²î1†wŸ“b;mu7ÕêÔä²¹ „î{þ¥º>[¬Ar¹áÌvoÏßyÕ;ôàÂ3ª¶iˆ½X\Žˆïvé±^ã_GÃGê÷çiæåbˆ-ÄöE­$™;(3ÓZdšˆ¬.G0Ñp·ùgMz謢ÅSqÀXþ^ŒÒ¯)`Sù]SÆæñ[Tfb’%绦X.‰ß5å4‹ß5%4ß5ÖˆK_k(ˆåKk’õ]·z&Sß5e4Mߢ»:PNbiŽ3qÝjí\÷ž³ñ]Óz–†ïšBY¾ëÆ©)ø®)’e»±Ðþ _ätD‡û©šñVËj’$`ÒLÿ<&Ò=5 Ú}À"‰$‰éœ²µòmpR‹~€{Ú{ ÔQ&s¶¬y™ðÏ6ìÆ]™*Š“š¤ÎH¦!‹jø„ϧÞf‹²œTqÇ兀59Ï™1¼e,OJ5A¡§Ñg•’ñ9……·èÏ@ƒdXM—Eæ|jfüÔ¯ÊÊ¥Q¨t¬èl3LNãÄ`˜M@¿ ¨Xšo´6ÏÙžZr}ö@¡Ùèô æÏ'Ž=ˆãVÐk·ls…=±mó­ÀTxf&9zõ$£Áó†¥Dê³Z …&k°{†V¿Z©ñ¢ªÃÏŒ­õACY`òÞ¤¶øªãÝNœí®òý3E•X«ð*¹eÈRmѺ†›&ÅïH»¿ÎÃ/ ë|hÜ÷Æú⯗6­öïôtïàÅé©÷ØÿqošÿïõÎÁþ˽ÞɧÎ1wCþ÷V{ùÿ:›[Ûë­çßÄßO=EŸÿËóÿíý°ðµî›Ó±~ùx¼ã½Z¯ƒw!‹²^±€~0Ó…_`­›Ó‘·K¤ä9-Kš6›ÿñÉ1ÿ/øäζß´ÎÿÆúvù?ÛÛ[[ííçÿÜhµÿ<ÿwðyà7¾h°Ž¦Ë&ÄôËd>tÀ“¶[6ùa»íw:ÝÎz·³UH~hƒ|n6[­u}ÿ w²óê•Ä9_Èf£,c—0ê{Ò7i4Jº]ôŠÿf ‘r­™×kö-ò•Ù¾•SN‚s¹Ÿèh2$î þ®æÓ {Í´¬™«†ôizßAÍk^söBþÎóÞÉñÎî ݱ‡¯}f\5¸rµnʰÀÛ: ÌͲo­½{xðrÿë7Ç{¶îÛÏ¡9e½Ói<;Eo§¬Ž’{ßïÁIa¯gküè¯fi*¸bùù~nT«»‡ð¢éõx*þêù¿¢éjýšò½7/_î/?ÿ×Ò¢4à ,Ûª,®ôÅ{&èX1PÎ6Ǫ{]å:Lzæ"d@v˜Ñ<‰Þ‡Mi¥zûçqAfO‹ýè$¼A‰±kŒ&Éhµæÿ$9Ô>~­0³cÕ6ZA/6sœiÌtÿÄ,ecè¯6›kôà)úo˜6ƒÕlaÐ „î¶Ìª±$Ö¦.¾±ÏÅä•«Ø2Ò/—y…—òæ£é½¢*Y‡ü¬ÂZ)¨°è¢ú|[i¼8ì½±ý›>£aJÿüëm¥IŒÎ“ânìî¾|ÅQ—éhp«Ù|Ò²q·Ìw8âA8Ìm¡œ¡O°{rŒûñxLç*XE4ìE¦Á, ë&£=Íá'Ûe±PÈm°X˜Û-FÇùÙ¹ÏtB·ÚxnøÚúUþ2ÆÆ;U_Ø›·òv¥zøü¿÷vOj·œSe9Ý7åõïñqéåß>y ÿ·–Ñÿívgs{ôg«½¹½ÕZgþ»ó'ýhèAîvýæ}_Ëqöõ÷(þF«Ý@ºóV·õ¨ÛÚj´¶xvÑ¼Š²¾¼‚`™=É8úv3îä—âEY`B%¼ØÑf4˜^Mc _"VI®Ž_øîÚ1Ð@@»óxöî~§ö¨ÛÙì¶Šøm£í™ÍÉvÌì’\v”¶Ö *{!"¸‚s[iìUÜÃÔôªb6Å~ÞÒ‘`lÔõp^†36ñMì„ Fð=¹Ê"Å]^\ùûþ €h%”ƒôâQšul¢7©§¶öþ*šÌ?4ïËŠÎ7¿ðí­îÆ£îf»ˆMZÖ­Ó}5 q}£»QdA6¶íœIÃÍîè æ4i…ñ²­¼¤}–Å 4)DÞ3ÌáŒ5¥óH]Ã=؂ʞH0v™¯ñ@%xº¯ŒIwºE8ê´ß²ÃFæM DðX<“¿†M82Ш沃-Md¥Iíîc©¡„Ú€ÑD«xÆ6Z†Ëè_„ýwˆOª%jŽ×¨¾Hq¦¼ÇÁ€ñJfœ}çâwv›Ä•f×Þ´\Þ8i¢aWj*Ì…,HÎxÁZÃhÔ¨ˆ•p×R™fkƒ®­Â4yZM¼óûPè ݨ_ß!Ò8à³îÛ¬_$~|³ˆë{L›÷LË8C-™õާÁp9k5˜Jå' „ºtQÍ*ü Ò867Ö¬öuóhA^³Þ.Σ»^§îõ*ùùM.[QÐG@6«1¦SÖ0Ú´d…ÔíšÒíåØíeô!÷NE ·¥ … ó˜ü¦–á üêÙ•“7Ü¢Žfâ21üªåÄw]KÎ@ ¢ôÍVqCŒ6 çÈŸ)X‹I(áINS«Vaùº¤dô4Ê©Þc.ËIÉÒ4¤!ÅÊ‘‘½3®‡ÈÅõ3·#â°Þ—Ý‚YÓÖã.›óo€ {€”ÇRÕU›rØ{SÏáú,¿^ßÊëñ3f é7ò‘UVlRGÍæ(O4‡c–¼q%—œQCjÚ:ô0c&s ¾ì¬u#9:ÇìJ!ìmâoÖý-iû¾½E˜~kæÙ6›[¤IÜŸãþ½lIe‚Á5Ú`Z´¹É¦E…»•×MXq€•†¯Q¶uÅwW„FôâËyÁ¯U°5™ŸŤÿ;¾˜øÇñ˜fþå?f³¯.çI:’ÈøÔ_sŸª”dLt9šñË`6 Öen“®U!Ü'#v¡œàÎË$/Fuþ“x"Öˆ$˜¡¸9C#˜Ì³0½„›»2òek\*‘ž¥é}ÜF{[½ÈKîx™YÄYt^Ž–±Ô*ûR¬U³7&ç]‚°0p4Áð 2—At6B ÙyhýúA¼Å3ZšP’éÂQ”ÃzH\4E”ÉFÅâþÁ¢KUIÂO$ÌÄm…\eïCMJ «G˜pz‹”Ÿ'sÞ0Í×—‰­Æp=³6º‰§I·³|Þn–>Wð`ÙzŽcQ°ÒøÊGüë„SóÍïÞiÝ®ÀÒ4˜äàÀöþÑÎÉ7§¯w¾¿/‚ ¡X{èvNŸ¿þ$¨Cû±…¥Zƒ}ɽPvB­’/é=Ä»0ÕËì°yKßd†@ß÷x‰‘J ATYzù‡vi¤£m—= ;˜EÒV¾îsR Ü’„L¾ï½yî)㌒ØÏKìBñîð]kÅÆßËã0jN ð²ÔQê^ØLgÅJ¾‹÷€×ûLJ®&ã1ØÈUN¨m¬}Þ@S13¨Ê¶°Q[w§ÿèÞd¥FënÐÎF·SŠÕ²é±— @nàqZ–' }$Åï˜1^!!—WÝ!n·îƒ—iµN¡_„±Ý0D+4A‚5>R*ÁÓªÒjòCŸXÃOKKÒÞkâ?1ñ9à~õoµŠqB„ÙÜjâÙÌWfuý ŽÕõ‚Z1ÉÚÕý@Röfö•ç¸æýWMÿ›àrRñ¿<ÃïæýøjÖŸ4ûñø¬>–nl¢J7ü–ÁÍ44ù²mÞ2Uÿšìm´žPòñœ9<‡é˜À˜³ºOt÷•„i Û7LL>ÖOIFIle¡e8"5Môa?ÓÎöƒi .9•¹è1%›©Îær©‘mHùqßQÉØV{Üﵸ“Û&ZœÜF>üŽG†G«b)É2Á‹h˜JR79H,«×¼q*B£#w¥6nà d&5¨õÇ–³×Øú¬¹PS¤¦KmjnöçH8±-ÆâKúø{\:ŽQ¶¾MPqéÖ][:uBÐÄè|!aŽ•*0º»N•‡r™M‹îû2 ˜€>ùùÜK\­e»ÑyŒ®ëf·òãï@„$x8íO‡’è-꧸5Õå ?ahžD™65šxÖ?„¶÷Ÿæ‚Ò¶ËŠ´Žñž[1QMå®Ä/Ä7-z1±Aÿ;–q°Ô &mªgÂsîHk<£Áo³|¶—ºÊAâY°Ô„yúà$íY‹vìõüàï¤:ðÅ,™¡vÚÖƒ|æz9X·Ë¼±|]Õ¿»z4‹ÆœèS}Æ‘Þ%r’/kcïRB§ªŸæ´ÿ·‰CŠÇñ¤„HåäÜ4‹`šøÓhÊ‹·u€£3ËÑ·P,3-ï ¶‡Eþë}#ó¢~¢AŒ,ÌÕ"f𽓏#Ø«;F:bÐågžkv6z×Ò jÙ Ý7.={Ö¥GbŽB)+fìÂú T8á+0 ]ª¢¨7!$u%+ „HØ*+Ždv&j’ø«zðÿ×µ—|º|׉`HNlfÉ–Ò]jЖŠ/¼B°¬3‚@÷*pE«<ÿ|”Z‰·äR÷˜p!â!¨ÿðms By¿ ÐÜÄìoØÅ¦•jÕô‡tr¦¡Âf¯Sö* ëÇuwÃÕ/Á²ŠQÒ.™æ½œS8¦ =j5úñh>ž`ûÃð΃šÚ‰=ên>.{\Z$8™ÞÄ}QÍ0…g§fÈÜDÛv.¢ì‚õ”¼ f£ˆ™ªû‰ãêLyýÑš¸å!Úæ,bù€„š™d!Ùé ¦a#!VˆIT»÷‡ñ {ßdÙ{ñµ[ªL ͪ3ËðC: dj<3"ÛYî; / ûÊ;m÷}Ñ.ûÆ×dÀ"Ýž½EqŽ9E80£ =Ž–IG…ùm>3Ä;ïœÆžé#»KÃGÈñŒ#ãD&Ø‹Xÿá»¶ödÃZ 7¬@åÏXn¢œJŽP7T nxö­˜d¶XjŽ6µë¸6zŽ®îZ¤Ü‚…F{‹ã>o–%]6f&z©ˆpîäâ“eFÚ³¶b¤Ç3ÍqŠÐC” €ùGlÛö>Žäæb2 ï¶ó±lºµ,¦·^ËBCG“÷±hÀ A Š»³îp ×,JëqYC‹b¤ È•¢yäÔM3gïš÷™ÌDèH¸dÓ·{+byÄYÄùTO§L»`­Î8–¼†enÃ8¿&¬û•滵&¼¡¸oÎJV½L~gÆ”·T1I"+»OêGcÈ:Qš#:LØjt÷á8d›˜×o-JØ6V8´°~•¼7hÒ ±_®ñRc¥«SÉôž{Y42– Ï…¦St6×pé ë’H>¬r…îŸE#/gԚɜ"K;¹Óåm?~ü˜Ö¶Ñy3³MÈ ‹8|kqZBÜ‚kx­ªÁf½Ø}‚ TdñYäˆDÕËÇ$3Û1Ÿ.X,+ÛviÒ,´®h¥°/^rE=ß †wÈÇA¥ô„÷ ÷¼j/œúö=0|¼0økóu²µ ï¶ìƒ(… «q9Nñ–ÎáÜJcRɬíp̉dðÀÀÝéuY˜ß&CZA9od«Œ»¦ƒyszQ‘ÝviîÚô·4òN)æ¿ÏÈ—-x[ÂsýÛ©DÝQn!ˆîz ¿oY’;1rŽ~NÎ!wš5ÇbºØøå¢Øá",Õ›K ÒøGªXLÂ7…‘0ä)Kq ¹k¯Ù*#•6›Äjì^d^ƒpÌGiæ%(¸ŠúÞÝÙ±³šXJµ]S<–xf̽,R‚»½y ;Ó"È/îŒ1y/ÄÂâ…Ôg¯@ÿœ€ÔP—º,†þ>vcÇ£ÐzUäïc#aÌZ=ñÔôÕ¶R.‚#^ZHiã¡—óÝ;»ÂòÓEel¯PüÄ•~ƒ´2 AU×™Pð¬¶ÄàÏRb¯ÄÆÜá“DaãH€lì7¾ò8ƒ@ݸ¸eašº]6ÒàHmaÁ!?8ƒ^{m+#É81û ÆïT Öô¼‹ ߌ^ˆf î£6Ê\ €¬Ê`.ð-Ð^[óäa&J“çÖrNCø}iÀtSÙh¥cXEÆaÖ袬(œœ/ Dráú•k*pÎ\‰ÛËãÌ¢ÆbÏ©ÂaÙäŸñ¯?Þ5Éâ¬ÒF»,vi›ÄÄÆšMá 牵Á3bUµÀéËãÃ×þ0 ˆ=kv7 ^yb­r• t%¢®ðZlJ ºˆÉ–˜Kú×{ÿúã‰þîÃeb)ò{õöû7»ØáHVö^jg¦2¡!Mr"$¶añÿ9gW&­=×Â{Æi›š*áüh &Þä0œ&c;äã¼sæPVƒc¾l¬—3!ÙÕ`Ç\¶jW…x<¼$´pÔ@AýÄq‰3$¡¸$5T’ˆŠZ ³XßJÒÔ7ñ^f.ÜÙÆ?t«Žžõ£iÝ"ŸŠ.Nã'Œìò9ã?7³ äFá̃y/K6DÕ…-~Ê蓃|Qg¢;¼ÇI8‚ØŠ³ªg‚¦»' «ër)Ðu'g@}ŸC+ÙOýû šû°J)TÖ㌅(dtÊlªa¯b4fèqà¿ ¯hî!Æ^~Fñ™,„˜µ¦È]#÷DW^xMºÝžP„áî¬ÖcG'ü‡O­„ ì¬dïx”e|Í‚óù€5x»·Ao,4_3šî=#ÍžÉ`(–Rã‚fB,¢éi¶ig¡g DŠÍħœÍ¿ªl˜a¾Ú݇YX m0(íÇÝVÑ vÛ$sc(ÌÅMXÙ;øöçÕÝ—¯¿{q´wüêÅþñêG{A’5qò¼7æËÎmƒSl‚Mªå}ůÒs'aMïè{pë1»]l>Ká87½LÝ}XkK…•³ÀHž­ULf%)0wÆv[<µ`!ƒŠØ9]1Iû³¹®ÔV-ñD »¤ 6¶”Æ…9Ó]7 fŒu G[711³FO¢Ÿ‰%08xFè²£&RºîNT‹ËŽcpZ#̈D†~Fªí"ŠÝãEÝffrC²ó‡õWcUû‹s¶Ç"Ç€:[Ê7¼ø´ Ö»hjMÛÞÇ#vf·FÆX³4ñÔÆ­ô³w„”G¤L¼§s¹¾±É8ßî ¢ÖÒÜfS²íîÆ}wþ-ìÿ¬+Ñf{m÷ðè‡ýƒ¯ÿò©?­v«µ±±ñ—V«ÕÙXç¿­V»#[ë­í­¿´¶:››[­­MzÞÞØØ¢÷Ÿ|$ >sDW¥.ÓQ_¼ñ¿Þ;Ø;Þyå½yþj×§ÿöz{ž Ï·z vêÈútˆÚžçïÚP`ÕÝ=|ô¸Î¯ü—³0ô{ñ0½„9ûK„4a„R÷÷'ý¦ç/ýlmoú¯ƒ$ñwÞ‡u7ŸÍ¢Á9}}½ã·:íuêàMoÇó÷è^¾’›â8JMFG’F4v«LõQ÷c ž’xöªE}އa\/ëþq¡†ýѼšØƒnÏdMèb¦±á–Ç=š–u1NpõéìñÝB’©DfÀ'!wå_×Þyf̆ q Wy˜Mä v…X#’qf d½üÐ|3´`:E ˆ_ã+>˜ÓU?@rZh´¬^µ—å6\•¹Éq¨t6€óÌb¿ŠÎfðO]23Ø9)’è‡xÎBOLöJlðÒëˆa‹ÇM@Íwð‡¸dÝ^ðŽ/ŒÎŒ¤ŽWÑ,³ŽÍÖ“ÞtFýÓ ©ùÅ#KJ°çî)]44Ïz¨8Ðáœ92¥ñùU…-%PkgpзaC/£ä¢V·]!Q–Y“¤0q‹”±Ã¢Ô3$Mª(£šƒFõv¥1öe”hd®«<^³îOˆLsïbÇ´;ˆ%\‡ÒC¼;'l]’‚öåýc,—ð®ó^Kðü´ª»Eó´gÑ€è + B0'|Ôµi H'ïäl9d ÚK)…PX\'× édĉ@ Ý…3H*™> —’´%R<„–eE½…;ê®$GÀÐå×—t~°/é…ê$ê¦ÄÂæ„ð6K^7–×Þ9LÀyÆŒ3üaH q?o°EÄ'ýh‰VJ“ïèZ±:*V›rʸnœá™È¬nAÍ/ûäQ;;v‰c„c t«¨@x%ÃJ Ïl Îp¸JTŒt ‹þpšt}¸SdQ3ó«Cÿj§F뇬ê&ÎÍ$< Ö(á—£ðœŽ9ßx/Ã\yuw‡©Íµxææ)5ýñ¨wF ­ö" °cŒ>W3•ˆ£' |š<ŸFð p/xhnáŒ1³‰‹Â™ŠY °À-t¥9“ô±— œ†¥;F‚}‰!²á"ÃQ"—¨ý}ЗĖ ¶H\¢áê–Á*Ù‡èÈõNg dNŒs_¦„KFÅ9Ïû3½{‘Ì¡BÍ^FŦ-Oï£U„¯›§Í\N^®ê܉‹ž$›þLØH–³œœˆg¯—ã¯Sܳ߅Œ[ó¾Ðƒ€ ¦yˆr£à€›Q‚1bÑí͉IÀKâ}4˜³+K|ƈD:±ô Ç_ 6û|Úœ`ÖÜŒØ:‡DEƒ+a¤ ©‚$®ª[ÿmæHá§: !-NHŽß™¥¡$ÊŽ­U%78Ô§¸pØrfMCƒM±ÿö䊚{" â Ð êùTX8¹ÐrÃÔ^Óû¼ dz{²wüºçï¼ðw^ìŸìôü—‡Ç¾rTuÿÅ~ïäxÿù¼â‚¯_ì¿ÜßÝÁ ¾ÕYÊRIÁ‘›f tŒXÄå ®LDË€³]9þ]ÞÜÞ?²††N^L^4eÙ+G2¾ QÏ!-\ÝËœ“0|¾œ9`ôb軋©œ‰5mòMkž¤A #ÎÙ7híÒP£÷XbY|6áQpÙõÔ‹/Ø'OÊ:JÅ–€Hˆ‰º§°<„Iuì‚LbP®½›óñ£¼Í9ÄèD~C˜‘„îu[Aåg6¿ºÆ¬£T_O<³3~Åí½Ês¨\O£8“‰|YX…îŽ ”ˆ„@ˆŽeç"r˜„gF! t(8<ËTÙò¬O ¨À–Co6Ÿ”–^‘²¡t ó0.*&ªMNÏ!ÖEÞ?ä±·|0Uûf¿hžé¹ q(ÜÌB‘Æ Ÿ5 î ‰ qÑ<Œ¸Öô¾S×2 d³y躬™{ÇNrLFWí¦1ìêq#Ãjh5mf5qél¯K\ƒlfyß•?¦[`>F€ô˜Ð|˜Ñ¿–fq2é‘ôîø­Ð“):]0ñDhdλ%;iŠytýQ%¥¤¹ùŸøïÂpŠ#PêΓj‰¹±†âΖæ0áÄX‡øÁYŠg%ÏÍ6ÍG&"3þÐ!òKÇ Üé•ElÚ°aœUÿiiÚ*»KÂé0ñjs?N/®8‚*\Ëa6ìšô$Þ•¶(¨B;¡ù,yäÐ_¸t?ÎÜÍ 9 r”¾ãeV³Åc0¦b6O0•˜KÊPîRT\×»TàÔ%4µç¡"xÁUÒÓɵ½à,†x§—òp†$2‹$tîñ®Ç£ –1š0ÊC3Šâ•Åг/,„ø© ·‘¤ê9 éÈJUu;1¤UjOJ5eg¥q0lbl³Îz!  œ,em §£™KºœCIÀFØÌ èg‰\uá „uc¹ ®Çdw<¬«"&£”`º ½XÏbmŒ³0ØV@Ë(sõËôû5CºÛ¥7ýBfЕÐ+'&€¢ˆ§4 ÉèJ'Oˆ–¬Ãš"uyÉ9°`S¢XX’M÷/¸ºÓ ‰ªa"pd±€CµÆá”äâhÈ“I<'ì¶ùr ó¡Èa<!Æ ¸}°œ÷©‚¦%þ¥n(0 z d¶B-X°tO¼CÖÛ¨"¼Ú¼]ÜBñÀè5ŽFæþbË< âþ> / 8‘[É(¼êÞ‡~ÈèªkzÛ+;MÂÑÐÈÍÐØ¸ k—l!A_¤“ܒ׉å0™M™BÐ ™qU¾±f(w#7á²jêÊ29½M,¼rŸÙñ`fÔ‹@ Ð{6Ó`ÊzÀNr!†–Í:ßKj‡¼Ê1òì²(¤ÑLݹ ÝÂÖÔ‹óÈ)½§6A,ùäΠF޳‹#Z‡‹eÕÙSQˈ(B™s´Xó>eôÓNŸó|O®ÄÚLwC2¿§jù™2_„c:DA5p™cB@eLH]ϼ9µnИ唠Ü5ùéðëæõ©µX£=ÛôŒ™—ŽPcOh ë–"+Ï,°ç‰I¶wØ/Í;Çò7™×UÌXQ“±L 1B¸ª+A®Ô$Ó:f¤Y¡Ç„‘j¸ ‡€ÛOÌv8â¿IŸÁkoaY{n¡¸âÎ]ÜœÜ>0á'ðíö`ùúËL~Ãô—AüO`{€càð¬LŸêÅÌ$wAµdÊ6VL0¢±LŸ)£j[p®Âx†B„)‰m+‰;Œ—êÛñ¹´Ö͇Wb¯5°P¶œÖe¦”z.8áLV'yÙ0C*"“±°ZP¶cloN‚2N%µyÎ ±¡}ÉLƒ;h‘ÈÙ£/½{Ü»tiô1¥qÑsõ]pÃg7šsp#/H’¸8w°õœ$Ša>KË –ˆµ jt«™û ƒ‹TNÆdÄ–\Â!›ÍòÚø÷XtÐvâM;b¶^š{\XŇ[CåqÐæ±rЊz,QëV«‚mq¡¶Lktƈ‡}ªe'aüƒ)€1A4S§U™!FüŽÀ8 i’׌­B Óš\%)‘n,dâÍÏœ­ê|Ât Ùvå)Ùè 4z•³ztÉKÔ‚Ó:H,ç˜L’P‘Ð9SŸ“]ƒ 5U4C‹©•ª5µ|넚1ÊB%è3ä6£Ü˜ØS õ‘•9,éš>f¸=R¹9ÇÓ Þ ¡ .rZßßÈh@‘‚D\ûij‘¡_]ª%GKx©€^ ŽÏ ”^õ;¤ ´™WÆÄÏcç2JB«\ÐýòÞ?¡Wd]Q0Ç5`➉Y$—x]0,ÏžC³À ¡Y)d‘«È¬x1Œš·7„¡Ð™ Õ¿Ë…h–™ßØñÑám{\l@ü ]ôÿá|4ÒTÚÆäÞ¦laï\n 9M <˜ÄÖ0Êi5·`dk§¢˜A:Ìs°ø"¶Í«rU¤G(|ÉÆ@”&E݇ØÞ€ã W6c%ÝEtiþ¬Qpiµ÷Ê(–ç#í°GÍíìJc,¯ÈØá}UŒK…ì5îhX6…é_Ãååå¾߇šGcfôk{2b;|¯°ˆGM¶š¢Gaw!P®#õo˜qê5?Xds JóŒ"Y߈¥ˆâ¼,ÑQð›qÑéf\”B.Q† EOp©UÉåp>c}UÎàĺ·¡úªo™ME®Š®Õ8:š4½üIR ¡’ˆ³¥û.М@U)9è˜çQàȶ›þþ°nݱ8˜Í.âÚÿ1œ³,Oˆ‡;³G”(nœÐê~ýä5~U´ÍãHm U_Í~%I­î9PÈÄ0¯#`§j""”нðiàÄ.›Ž3L]3÷4Lý蘨[YÖEáŒÔEÝ&gׄŸè×^ËëŠÉ…Ú?¡º+Ó•O`µCà•DãùˆŽ©zˆƒîs¥+3¬ï¹jÇZ/œ¥"~wªéÕ_ÚDÞ0—œ=Uû—-“³»Öz†8Ô8Ûˆú³øŠØ„«›8‡Û¡L/„ü„ìÙ '¶ 6U±H¡Ñ•ˆíí/b#™ª yÈó0c¡&ŸiÔ,ï-ˆgD¹÷œñ¶ 3@y†KËŠƒJá| ÃÎQú”Rôõ"’f–t9”!Syrõr8Œýù( LÍúóqÂX[0ÜY0ÊPxè6ïX¢z"”4úSÈQK,WÕ€r" ä¹ÝBƒºŸ¹Mç3Æ` dn´3s½Ÿù—œzÇú$ÉÌ*$Dwz¥Ò3×C=•Õ‰à J¯Tä±4[J>ÉwnÜŒÌΡÑò©% &}>ÓS5ÃÌìÜ Ñ_·òUC1&‘+~*æú%Ù{ŸÃÁ¾æ} c°&9Þ9ì:Ä{fb»±¬ø%Tø3ÖA²ïYqHœca¦44œ}„'akDÅçìBBH?aÄÉv-}‡g ˆXâJOTˆŠ`wªîe#ªµA<‘ Ðí3`ËR6µò“ †ƒêS”Ãa:V3¾ é ÅüÄÚK(Ô›PñE1MxR85.˜²IŠ^ Ýg§KeÏhÂ÷rÎÂòm%·j’–Ð33šF¹V”S¬©Õkcq|Mc>õ1eÆh¤¥Ü)`%ƒþ³«L³åòé‚£3r¤dK¬È¬W’G™ `Œ 4“0€€¶ûÔðÆ&n|Ù#!¨Ò1¨Ó›¶ä C­™i¡Rϸ8¾²F&-?l¤ÑÊáà–N›GP²÷-`àÍÁ+Ìöxïÿ¼¡ù,€´±ó5AÓÙwï»}ê;TÜü:W¡Ùæÿ@`tè¿ÞùA ³Pð aZËí‘› ÚËßrZ·‰Ï–÷2nvVel„ˆÆ/ÎfÓ4PÅSF Y“^C?Š0‚S#ƒ‹ †˜FlkMa¶òcMÞ¨¦…£A—QñCËA¬t¥š+"áMŽÌä˜ yз‘\dù¸ŒÎŸ)ùŠ% *NUXÃiÌ|DT Mòß¹¨ØÇ·ûœ#Q˜¾Äzr}c7à,Àj¡í´é3â@†œ ZLвÍgÜVÑ­úêŠÚçpó3áóLzeÞÔq"Êíöëá˜Ûc¡€31±¢L›|.ò6ά³“íh-ö–K™3…¸“›N^e 1n¥š·”®•ièæâpձʊ]À²'—)ø,Ôl1u1!¦Æ\ð@Dæ’b½0T]È"ÞQ$1…Ĭ“ˆm4Q¼«iqoqU÷B†Ï:-aæLÖjáµ:„ë.TgÆ9[‘å «‰„£ÊÌÖò xZ‚ôëÈ`®_ôí¯ßÒ…Î(œß~0È™…@r&è–­ ij2§rŸÅ¿¸"Íá˜ÖCD9 œEjÝàÂ,G¯dåÒƒÌѰX|-iASÁD&jŠkÛJ&T ª¯'DTkÈÎ[4µg7rKµûÄ=¨ÏèÎóÞá+¢6^ýàRÊOtó 7ôÿ‡½U/W›Ù!(žþìžaÄŽú±ˆ È€[Pß)+/2,Ø·»þª;¦˜ª\\MÁر^+³ò6ãã1ØÚ ­ÆÓ6çM’ã—ú›Y•¢Ú¬?V'j^A ÁÁø$šh]g§…CSß%‘Ìói? ½qLM6ú4‚w,ȇ“9-X8N ›N9™G¢Éµ>þê5¢“ec<¸s‘ðG|EÕªÆÓÝškíq8«ùâ»=ó°ì#ÑmLÄ‚Êe8Îe¸Ì妒y¦Z#z6¿6ÔÑj™Ànb:¢+‚­¦¸_eèþ!¾ŠW“МhÜgW¶#±ÊÀ'Ôˆ"\íœúÎW¡cA:‰¸ð&¾Z¦Àð%©Y!uößÿ Ò¤Îá})¦#pö&(9¹¢“OžÕý6Ñe³hÄÑG@ È‹:"t$‘ñéú– H%¹K¬•«¨¦(“i~Üýei†çx¾Ú V­6sQQà§I( +”ñŒ=8{dÆ3s3iÞŒ„ˆ ¶ær{t$鉵Cñ´q#4¤piÌB÷€ˆ7ã1³ º…·8ºEY˜ù§ýߺýŸÿI3(}òC×Çjµ·Ö7ÿÒÚîlt6[ÛíÖÇÚîlþÿé>üçléãÿPHbS¹ªJ@V¨:iͰ£wÚNÄv h ¢Õ¦¿ÃIŠÚêæÎû°¨€·êy–}ï@¸C9Y dÎFt5h´Ä̱kâ‰6™s ‹¾?óÛÍf[\ÓQ’~ˆ÷;E¿§i|*5›T¼ºoœâ™TRD¬NO¬ý帢Ðó›kðe:ŇÃIWŸ &Pµ1“÷5ÿgàT,N/Fõ'øIÛ µSyGFü®VL eβá7žÙ°ÎœoƒV°öD+´ñ÷£mŽàãÉ5'á t‚o++§?¶~z[i6›ÔŽ­½2¡I8ÙQ«o?×±Õ}ú*íÖe:úGÆ ]¬LÐÚGïο‹ÿ%ùŧïãü¿ÙF¬¿íööÖÖæöz‹ñÿzkãOüÙs¦0¼FáÃäÁÁ—ì‘™dÚ–q¸ø¨}²:ÎîísË&®´Ø„£«A›â*ŸyÔ¡ýÁÇŽ®Á{Âåâ‚idIYÞf òŠvß'©kðÛ:7ÙH‰mR××Ñ0˜ªŽ¨&¶çM¢T|ÀË“mä£þnêCv¥R)LÑ¥ÊWϹxFÜ•Œñ…Œ ÓÙ 8?ÆóùhÌ*?Àç"M§ÝµµËËËæ?㦕MºyÖ¸âšgÚÉ&„Æ^ty¾¤¦bÓ÷øaú’SU·ëþûMúo‹m©ßo³~æt‚äÌ« š“0]K.ײ¶³þL2p›þõú}O‘ÿºŸiÇ»ÄÆTÒ`³¶xvý Íxv¾&}!‹¨]°\Z“nÖŠÕh€ÍALë%uÒ óµÿ•Cj+˜ñòcˆ=päàû¨ù¹ñ8ÂV¦HèÕË£÷KÆ8ÇӄǨPŸ9˜A… ´Ù÷÷ŸDT0乩„þ¢µ3]q´¿³y4væR Øv¥njh¢Ñi¶šl`L xLu1÷óÐzDSÓðu9¿ÏØ¢ÑÀõ”Qp´~+FÑ!B+#Ô+wqðYñûw\…—Í5IK8Wi`öÄ_îÑߥ1ƽ)k›L Ô`3´ŠÊ£ôñT,Uàø½óScÄVÿâçóÉ¿@ô}s~øð¡IBóü_þ/>}ñ? ýF¹9§8¥S€åÀaý×CÖN£ÕÜÜrAB› ~H8˜å7ÁEa€w .Vüwõš\p#‡ , w®ü~ñš3bM¸ök/"Õ™¨Þ‹×(Ìu¸xVäZs2*š—ªªD¯™H^¶ä¶M‘[9nº£CÊ9?ÛÚÁªQ…®ªé†UÒÑÎzh*;Ç_¿éùxT1¥ã™ 9™¡³ýˆ©MdƒÍ “„Œ$k+7œÃÞg05ÿ±ˆÞ7ˆóK›ç",û¾ /¼ð2‘Ûä&¡6av½@aÄÖ,æÚaòËPHv@²ÑTP)ºÒã,zö.{æ7.<¢½•ýA×7ùð8M£ß!~­Õ^k·ýN§»ñ¨»Ùö•nF0Å{-Ô‘<ùRÞ|•»ÂŸÝSóççÖ—ÿË…Éÿ„}\Ïÿmnl#þûöFg«½¹½¹÷í­ÖÖÖŸüß| FÑduO¼A)Tµ”Hñéÿúãµÿ·Úüâ¿jo >VÖjOàŒ<©öN^¾9©û•g+íJÍÿåB¡‘R} k¢gÞééÞÁ‹ÓSïÁ_ýµy2[ãŒZkgÑd H "©"ªæ|N«íš$*BŠH£ÇæyFÔ,ê[?jSù¾ƒ¼(ùIl%|"S‰ŸÂRâÁí %Îþ×J<øÝv~¯™Äƒ_i%ÁóþýV~Ÿ‘ăße#ñÀ竸ÄÉËÖí¼Þö‘ÞìQ·µU¸‘ø·¸“½°rgÿŸ—Õ,]g7íO‡£àœ¾EýñVú"Ü G6Ú5©NÛ¶ÿý"„8TH:rÂD¼‘l‰„UÒÝ?ìv_ÒQ–_*ÒÕšœ•8H±h6A±Ž•žîó ¡²–ª{“s®'žghçCv[ÙéQs¿ë#ë³̦Ô8DÃ0nÜ݈²p¢ëþ{ù”-ŠHÚÁ¦òö‰)Ë´¤è,V¹€H„ÏøáÛ ¦,íxe/÷Nv¿ÉFoÕ< ’SäÊ~ê¯Àå½ÛuMN§iãÙ8Hû§ìΪ++Nǹÿ•#-ÔjV> ÓùlÂpheÞúpåg-ßxö31³?þ¸ò ôì'3…ÞÉáñž4ÜŸÅÁ;¿²€åT·fð ÖÈrö)öN¡‹ƒ¸.Z†è|J‚r»ãGa8ûýûýçŽÿ¾oýaû»Ó;¢.ŽÃáïÜâ?÷÷öû›ßÝ?jg1—ßn±³<ÏsIÊ[]¥ÿÛýnØÝëN¢d§Ýçݸ» :•'¿BÅN/̯¶ÿ%‘¾x”ø“w=óef¾×ÊÅ'æåtÉ˪¶Aä±6bÖ_e¢¢÷Žý/¿<Ý;|yêq²ön9ù‹ŸèŸ÷ø'ù¥÷Ëì—c| ~™ÐŸû*æ'¿òz³'OP¨ž3ÝŒo±Cžê\ôüÝÿ±Ùlþô“‘g4.ˆ ‡‘\"”O–GÞØñTÇ“p ³Ì®¿z±ަ5[7кYú㺥 i£*°bܸKß ×^°:eͽ§æLOmØæötk½_ÕìÔ¶¦¬ U pSÓ :k™“½A²s&æLþhò5(«>û,×þþª¦‡Ëɺ ¯ë žÄHn›áê‚¶ö®k‹È‡*NnFÎ$ïòs=í­¼X8ò>”_ Ž™/¥$¥c¼"|B4­Û^Nµ5ß¶“ØvLª@µ·­Æ“°AVMSÐ4œO♆»'x5úÂa'«h#m¯Ü [óÇ£AåSô×+ô7[Ü1¤ká«”½rQoŸ»™­—Y'ÇÔI…x_B‹•_Û›´móâp-A®óc:(n÷ê~sŽQî›÷Ýh4rgŒsÎì£Q¢Ö+pT¦ïYkS¶R‹>œŽƒé‡TðKƒ¯º“†aÿèý†VðM‚‹wÓU®&Yß‚è¨/˜Îˆ-ŠE0Ï¿>òÁKI÷„Ä•£^ O$ û} ê(¸*;5u+.@’'v}H #U3™ä“®:½]$ÄÍ$§¸GOÁ_Q­º>—[œ^‹ÊZN‰œ¥G¶dÖ_Øž—ÀC§Q80O¯aÊieâwó)OR\š,Ç?1ÙmG?_€£9Uj²+<7ĆWÄt/F:ÏWÝEÏö)w ©‡œxˆÍô[í•5¾¿ƒ˜[çln@@:¬®×à© iëâ'Fdb*ÎüªI [y˜Tj&(3B ¢&Άž/w0Bºd1²<HîKõÄ£ÇÎ'}7‹`HnâLYÔfÝʼnW³†kV³À*Eç˜C_¢¬gΪÔ}N»ÌÚ³#¸Q³‡±Uˆÿ‹4…˜Œ³_“•›B™r ?D©Ð/ÿå·ü®ß©t¡ÅO¿UJ†¼‡‘Zîõs‹!ޏ .3¿ ÔS‡ˆQP1¤sµ²ò퀾<É·¶¬ÜɵMq hiå+~ô Ä^æ“Æ¿Tßþö¶™ûgþ«½MþÖxFÿ,{ÿ ZúŒÉo_‡Ñ^%Òá|¿ó5‡Ý\Ì)-Êg4©©öýQÿޝhö|u+Núò½F+P]iӣ޵ÍÄÒLdÝÝuÕ­p*› ÅEÖʹ/â$M–nÓ‚F¸BmÁÛ0ßy§r e³úÙ§‘QßþÓgvõ,«îÂÏDþPÖMEeܸ|ý(£ûh8~…j»ë<Ðþ(ŸUÁÆÿÌXµH#Û´»/ãþØx†üéu¿KYj^Z×ÓõW®glrm§?ÉfM‹üös|…B-HLåpf5 •™ —ûZm…#4c+Ï–VæzDè.­z|CÕpAåðÚ*ni]3§ÒõK%øûS­Á–œÙÿ(ç×.]¡±ªÙ²Ï?÷ ‹jz¸õÂ^×´»äK^¶ì77.izɦܨ`±-{ˆpÈW¾ "w©ì»—Ã?ÿiûeÝ&ÝHßí ˆÛìç_õö¿þùôNO?B‡“˜ Û;¥W•·_ÚQù _’µ õß¾­¢ßækkÎKŒõ-Ÿ_3 óRFìÙG<‹¯j…AsJ(ÑGz²%.Þ«ÉÈ®_mÐ’HGÀùÖ"žmNtqÁ*Þµö¿tÍnZ2»+¡\K¾ xaVX•'ò&{ü¿KçxÃLC)n7mí-3÷?3õe?>³wžÝ“Ïa/û‹]dì/4sr5 w@ÝÒïÒÄþ8»R³z‹æAoÝfÐ͇s;pþAÿ­œì½dÕó¯žýBøÓ%3¢_¹·fp·™]ø+&ðï2neÓ9åÃËW‡ßy>'§úеçËo}xøÃ9œeÏ¢i®¿TxH£,?E4Ü×ÖÂJSå*ö)?D›˜¥i€¢ÍüCnóu†*eyÞÝÂÃý#fD.âi×>»b;œ‡œ0Ê>Ò‡f¥sƒJã\çf¥0ž33ÒC”g0 'Ý\ÉÒC: >[at³®t´çz†ÎgVZFƒ®íÌŠv< ßÌ{-OÂXßp¦àæÀ¥„+¼§ÑP~©ÔÌüt7«Õ<âVPIc5‡]jtéUò§‚ûoUš´Ð- -_uWu€¢m¬ÚcV]á=¦oµÚ’´ßÎûü™¢+0±sƒ,ÃLÍ~ÇsaîÌû«ºµ|ÖizÊû‰)g¿h²­­k¼¨ëe~ºk% p ¸È=ˆ9d`Èisá$W [4Yó>)T°îHž§î³Z¾µðöí…7µ¸w°{øb¯šÑ:à£E²!·gµ]³|8ó±òŠ<Bü¸_µr"ä]”-x£Â¥oö2’â0Œ„½?ÂÐd'…²W±Ö³µ«U™:a‰0ëE•>O…•ÇDT:"ˆÕovz߬úá?­¼£ö$_Â<ϘûkJ°8¡TÀBžšˆ¸Á¥ÐÜy«L=×¢?m þ®t–\¼2—áêûœ ½ºd¥`°§z!U“ Àéz¶›µ€m§iFS‡FdФ*±¾îÀÌJ‡‚~Z^ï§Ê4á5¿2 /+>a¿Ï±Û$˜Jxi†Ûl6 u£IßÿŸÉ*G S-ÿ!ÍÌù!6ŠáòÍÄìd5¡ˆ Ón®9;ŸùzÃjå RÏlç [Þx6I/œý«Õò,OaM™–5Á«f½Øå©ë(jVÑÁÙBÂ…O>þío΋^nß5 ‡_3s‹µOMÒçP •a‹L³L A@G‡æf c ä› ¸,»a†*=ؤapƒÝ»¦á )ŽäŸ‚¾eúò실~¦epPýV/øÌ˜ÈšçŠÓ"üJ«}…°°¨Cª¦€JËfB·L—jš&©\?†gsæµY)ô_Ä¥tÁ÷øÆß°œ¯bñ~[1C}[?¢‹ÈrA=–@šßfÆW¼OêÚÃËêϬ?cm$¥f?æåã•–ÏÂxXuÎ;úi€™¥¦Ñéé,¾¬ÚÀv‡Pú‰çâsúXÏ”Á?ó´3ù)_@â(Ÿrà §5çq¡EÕ…+8 9Å)H? ˆôœÎ†nyR(v²oƒSLž¸ÅÌÎÕ2l#Ì·…èÔ…hQÚœ Iz”p20™2…Ãã ÑS„ :2qHÓÙ|ÒçÌZ|hYà•?°­ËF,Y ®¢mtªÌ7§ýá@ABQÈ Ž­›–s¨ÂL¸å?{šøfä †°KЍYçˆnÇW-›¤Ëz,D‘lñ$_‚Žç阃ê? _9/(¾#ýññO¥{ Ü©%¡ÝÈ#¬Ôå\ öÇy1^¾U—-¨š3œ¶OLUo¹»“Út—*Ýb‚Y…²C‚·Ô ÁYòé³…Î*@¤·ôU±z¥øqNùæã³*KÙn57:Í­ÇÍÖZgfô€~Ñ3<@ è <¦éÝ„åzµ×3Ì¢ëLˆPøÈN¹ÜÇÉ˜Šœ) çŒR½ù…ÿ ΨÛ.fþæÅ‘¢_43‰-ÇäpÇ`‡r—/w¼¨3ÐÕövN‰»ªýkˆ[ÿ™?@óë õãù¥_]ï4¤N­†óm<®^Nv¥r¢4ËE ‰EØfa¢‰oe‰¦<0He^—¬Ì…Eã3²|Nåv²€‹Unzg¨“Mî+ülºša?_tÎ8­#vëGHY|»Êkí-øôÁ¶C.eyæ×Üufû¥ê"» ³°þߌ|Q)ãŸä®ÿ.8W %;[‡ï­ÐO‚vâ«óIôÏ¹Ý k1WRƒÄpM÷r:µ„Ð $n@„—}|ã|JÚÓø?a½'€ëëV:c‹+‚]¤,ü‚uðsÿ—˾ß}’Åf11gT Pþ‰Á{©sÒ§Yí¬7ÿ¢.o½%Ÿn•’UÓàòÒš +×}~.b|Hó±P±§ô°Zy8… ­)jEßêýÜ9«"í Ýéç¡îzbeKšë;áD ®$eœÎ] òöÜùlÖdo~…! 7š/z÷]„2£§ Z9c"ÂgÍ‚,AÑwVÞ­”×x˜‘³û¦`² ï¦|f`!üsa—04\€*hÏèF¸#9¶0eÜi¸âxLD¹ f˜ ÊNÔ-ÊTÙ×,MYDmØ`¹¢ËhVß*n/Ö×h†ÍœÞ(ÛŒÜ ¤ê 7ϤÔù#grL3ÑqëR?S褂îLôž,(ÁXÅaI嬅«Ý~ÖÊSÅ‘Œ2¨?ŸâÒvÌóˆ CƤÑ誑É{…U¤eaqyU¯q^ÑŠØ4ÏÎÈÝ([c–G€OGAßäµûW8Cz­*ç2šÄ“«q”šÒ+~‚T÷buPá¨.bõb7œºCœÅ$¬Ð’eCðøÿMÀl"Ù.À¯ÏÝÒò(L×îiA a-*tAQ ïm T«ÖN¦µºƒö½ù‹^œ*é—¡TA¹†1#.½0†0ò‚ð£AÇú7öô’&€¢¼a€û"ÓÔž€¯fzÛ(žaåFdó4š‰4ø5ñ3ÍﳬSÖü-Væ•ÞèA•Ee&ñð˜hOèö4;MªâÛd*™b)Óv‰jM˜› j‡ª>RÚ„“ƒ—Ï‹8F¤ÚùЗ7íz<óuOå/9MøógVþ’?!"O›Ó©"µ·J¼@pk8±0½as$àaº]Ât$Yõ«‡X§ê~ºªú—X ÎG¿FÁ #±$¶Y㼺l–hrüiÖ4´(⼺½¾ö=cícsÎéHE'I÷Pt>1³FúU]ÍDîÊg}{šsq:~°’5åËKeä‘0]œÅL]/c)\v"C!¢ACûYh“ ˆ„‹V/Åç&Ûä™VæËÜhܘDSA 8–¼~Š`EiÎfœÑQ„Ö9"M£Î{ >yݦ£ÿäͦþô¢4 Gú¬xs"Kψ€s²6Te¹æä†#$›ÂUNS=43t$¥MϤöDz̨?g­: ijXÞ¸tvenäT6ƒørWZK¢²8¬8³Ãöìä´ß’ù±©x@S}ÑrÑË+œ§L¢p6§‹Q¸Zíº/G."øõœÛ&J³Ãµóæä›Ãcï6a½ÛDõm.éëýʾ¹x¾ÞoŒçËu{0_º»o—òØGííù;¯z‡ž$þΈê¹Àõ}²¿??~þüüÇ|þ?¶„önhflow-tools-0.68/contrib/find_scanners0000644000076600007660000006660107412755273013475 #!/usr/bin/perl -w # # Copyright (c) 2001 # The Regents of the University of Minnesota. All rights reserved. # # # This code is inspired and partially derived from the find_random_http # script posted to the flowtools email list on Aug 1, 2001 by Dave Plonka. # I owe him much for making this script possible. -Paul Dokas # # # 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 # Minnesota 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. # # # $Id: find_scanners,v 1.7 2001/11/28 20:36:40 dokas Exp $ # ######################################################################### # # This script is meant, more or less as a replacement for the very long # string of piped commands involving flow-cat, flow-stat, awk and sort # that I'd been using to analyze my border flows. I wanted to be able # to see a list of IP addresses sorted by bandwidth, flows or number of # packets and the services that were being used in one relatively small # format. # # The following are examples of how I run this script on the flows that # I collect with the OSU flow-tools: # # Show the source IP addresses for the top 20 outbound bandwidth # consumers and show the top 7 source and destination ports for the # 10 minute period ending at 08:30 on 11/26/2001: # # find_scanners -S -o -b 20 -s 7 -d 7 cf05.2001-11-26.083001 | less # # # Show the destination IP addresses for the top 10 inbound flow consumers # and show the top 7 source and destination ports for the 10 minute # period ending at 08:30 on 11/26/2001: # # find_scanners -D -i -f 20 -s 7 -d 7 cf05.2001-11-26.083001 | less # # # I find this script particularly helpful when I'm trying to figure out # what created all of those spikes in my FlowScan graphs. DOS attacks # are usually *really* easy to identify with this script. # # And finally, be warned that this script can consume a *LOT* of memory. # I collect flows at about 1.1 Mflows/10 minutes or about 1.8Kflows/sec # and this script routinely uses around 500MBytes of memory when chewing # on just 10 minutes worth of flows. # ######################################################################### # # To use this script, you'll need to install the following Perl modules: # # Net::Patricia # http://net.doit.wisc.edu/~plonka/Net-Patricia/ # or as found on CPAN # # Cflow # http://net.doit.wisc.edu/~plonka/Cflow/ # # # And, to get the Cflow module working, you'll need to be collecting flows # with one of the following: # # # CAIDA's cflowd 2.x by Daniel McRobb (with Cisco's NetFlow v5): # http://www.caida.org/tools/measurement/cflowd/ # http://net.doit.wisc.edu/~plonka/cflowd/ # # flow-tools by Mark Fullmer (with NetFlow v1, v5, v6, or v7): # http://www.splintered.net/sw/flow-tools/ # # lfapd by Steve Premeau (with Riverstone's LFAPv4): # # http://www.nmops.org/ # ######################################################################### # # Please send all bug fixes or enhancements to dokas@cs.umn.edu # ######################################################################### use strict; use POSIX; use Getopt::Std; use Cflow qw(:flowvars :tcpflags :icmptypes :icmpcodes 1.028); use Net::Patricia; use IO::File; use Socket; # for inet_ntoa # # Initialization # # Place your networks here # # E.G. # 10.0.0.0/8 # 192.168.0.0/16 # 172.16.0.0/12 my @MY_NETS = qw( ); # # Known services not necessarily in /etc/services. # You can also override /etc/services here. # my %KNOWN_SERVICES = ( kazaa => \&kazaa, gnutella => \&gnutella, hotline => \&hotline, ntp => \&ntp, ftp => \&ftp, http => \&http, dns => \&dns ); my $insuspect = new Net::Patricia; die unless ref($insuspect); my $outsuspect = new Net::Patricia; die unless ref($outsuspect); my $net = new Net::Patricia; die unless ref($net); if ($#MY_NETS == -1) { print("You need to put your networks into the @MY_NETS variable.\n"); print("Edit the source and add your networks to the @MY_NETS variable at line 138.\n"); exit(0); } foreach (@MY_NETS) { $net->add_string($_) } # # Globals # my $nfiles = 0; my $all_flows = 0; my $all_pkts = 0; my $all_bytes = 0; my %protocol_cache = ( 1 => 'icmp', 6 => 'tcp', 17 => 'udp', 47 => 'gre', 50 => 'esp', 51 => 'ah', ); my %service_cache = ( '412/6' => 'NeoModus', '1214/6' => 'KaZaA', '2340/6' => 'CuteMX', '4661/6' => 'eDonkey2000', '4662/6' => 'eDonkey2000', '5190/6' => 'AIM', '5501/6' => 'HotLine', '5502/6' => 'HotLine', '6257/17' => 'WinMX', '6346/6' => 'Gnutella', '6347/6' => 'Gnutella', '6699/6' => 'WinMX', '12345/6' => 'NetBus', '12346/6' => 'NetBus', '27015/17' => 'HalfLife', '27374/6' => 'SubSeven', '31337/6' => 'Elite', ); #our $filter_sub = \&kazaa; our $filter_sub = undef; # # Global command line arguments # our $opt_h = 0; our $opt_x = 0; our $opt_n = 0; our $opt_S = 0; our $opt_D = 0; our $opt_c = 0; our $opt_f = 0; our $opt_p = 0; our $opt_b = 0; our $opt_o = 0; our $opt_i = 0; our $opt_s = 0; our $opt_d = 0; our $opt_F = ""; # # Parse command line arguments # if (!getopts('hxnSDc:f:p:b:ios:d:F:') || $opt_h ) { usage("find_scanners"); } # # make sure the arguments are sane and set defaults as necessary # $opt_S = 1 if ($opt_S == 0 && $opt_D == 0); usage("find_scanners") if ($opt_S != 0 && $opt_D != 0); $opt_c = 10 if ($opt_c == 0 && $opt_f == 0 && $opt_p == 0 && $opt_b == 0); usage("find_scanners") if (($opt_c != 0) && ($opt_f != 0 || $opt_p != 0 || $opt_b != 0)); usage("find_scanners") if (($opt_f != 0) && ($opt_c != 0 || $opt_p != 0 || $opt_b != 0)); usage("find_scanners") if (($opt_p != 0) && ($opt_c != 0 || $opt_f != 0 || $opt_b != 0)); usage("find_scanners") if (($opt_b != 0) && ($opt_c != 0 || $opt_f != 0 || $opt_p != 0)); $opt_i = 1 if ($opt_o == 0 && $opt_i == 0); $opt_d = 10 if ($opt_s == 0 && $opt_d == 0); if ($opt_F ne "") { $filter_sub = eval("sub { if (".$opt_F.") { return 1; } else { return 0; } }") or die("Error compiling filter"); } # # actually cut the flows # print("Cutting flows...\n") if ($opt_x); Cflow::verbose(1); Cflow::find(\&do_flow, \&do_file, (-1 != $#ARGV) ? @ARGV : '-'); print("Done cutting flows.\n") if ($opt_x); # # # if ($opt_o) { my @top = (); find_top($insuspect, \@top); if ($opt_c > 0) { print("\n"); print("----------------------------------------\n"); print("Top outbound hosts by hosts counted\n"); print("----------------------------------------\n"); print_top($insuspect, \&ip_by_count, \&port_by_flows, $opt_c, \@top); } if ($opt_f > 0) { print("\n"); print("----------------------------------------\n"); print("Top outbound hosts by flows\n"); print("----------------------------------------\n"); print_top($insuspect, \&ip_by_flows, \&port_by_flows, $opt_f, \@top); } if ($opt_p > 0) { print("\n"); print("----------------------------------------\n"); print("Top outbound hosts by packets\n"); print("----------------------------------------\n"); print_top($insuspect, \&ip_by_pkts, \&port_by_pkts, $opt_p, \@top); } if ($opt_b > 0) { print("\n"); print("----------------------------------------\n"); print("Top outbound hosts by bandwidth\n"); print("----------------------------------------\n"); print_top($insuspect, \&ip_by_bytes, \&port_by_bytes, $opt_b, \@top); } } # # # if ($opt_i) { my @top = (); find_top($outsuspect, \@top); if ($opt_c > 0) { print("\n"); print("----------------------------------------\n"); print("Top inbound hosts by hosts counted\n"); print("----------------------------------------\n"); print_top($outsuspect, \&ip_by_count, \&port_by_flows, $opt_c, \@top); } if ($opt_f > 0) { print("\n"); print("----------------------------------------\n"); print("Top inbound hosts by flows\n"); print("----------------------------------------\n"); print_top($outsuspect, \&ip_by_flows, \&port_by_flows, $opt_f, \@top); } if ($opt_p > 0) { print("\n"); print("----------------------------------------\n"); print("Top inbound hosts by packets\n"); print("----------------------------------------\n"); print_top($outsuspect, \&ip_by_pkts, \&port_by_pkts, $opt_p, \@top); } if ($opt_b > 0) { print("\n"); print("----------------------------------------\n"); print("Top inbound hosts by bandwidth\n"); print("----------------------------------------\n"); print_top($outsuspect, \&ip_by_bytes, \&port_by_bytes, $opt_b, \@top); } } exit(0); # # # sub do_file { my $fname = shift; print(">>> Cutting $fname\n"); $nfiles++; } # # # sub add_flow { my $suspectdb = shift; my $addr1 = shift; my $ip1 = inet_ntoa(pack("N", $addr1)); my $port1 = shift; my $addr2 = shift; my $ip2 = inet_ntoa(pack("N", $addr2)); my $port2 = shift; my $scanner; print("$protocol\t$ip1 $port1\t$ip2 $port2\n") if ($opt_x); if ($scanner = $suspectdb->match_integer($addr1)) { my $victim; # # tally protocol/port pairs. # $scanner->{dstprotocolport}->{$protocol."-".$dstport}->{flows}++; $scanner->{dstprotocolport}->{$protocol."-".$dstport}->{pkts} += $pkts; $scanner->{dstprotocolport}->{$protocol."-".$dstport}->{bytes} += $bytes; $srcport = $dstport if ($protocol == 1); $scanner->{srcprotocolport}->{$protocol."-".$srcport}->{flows}++; $scanner->{srcprotocolport}->{$protocol."-".$srcport}->{pkts} += $pkts; $scanner->{srcprotocolport}->{$protocol."-".$srcport}->{bytes} += $bytes; # # Earlier start time? # $scanner->{startime} = $startime if ($scanner->{startime} > $startime); # # Later end time? # $scanner->{endtime} = $endtime if ($scanner->{endtime} < $endtime); # # # $victim = $scanner->{remote}->match_integer($addr2); if (! defined($victim)) { $victim = $scanner->{remote}->add_string($ip2, { flows => 1, pkts => $pkts, bytes => $bytes }); } else { $victim->{flows}++; $victim->{pkts} += $pkts; $victim->{bytes} += $bytes; } } else { $scanner = $suspectdb->add_string($ip1, { startime => $startime, endtime => $endtime, addr => $addr1, remote => new Net::Patricia }); $scanner->{remote}->add_string($ip2, { flows => 1, pkts => $pkts, bytes => $bytes, }); if ($opt_s) { $srcport = $dstport if ($protocol == 1); $scanner->{srcprotocolport}->{$protocol."-".$srcport} = { flows => 1, pkts => $pkts, bytes => $bytes } } if ($opt_d) { $scanner->{dstprotocolport}->{$protocol."-".$dstport} = { flows => 1, pkts => $pkts, bytes => $bytes } } } } # # # sub do_flow { my ($addr1, $port1); my ($addr2, $port2); print("do_flow()\n") if ($opt_x); # # # $all_flows++; $all_pkts += $pkts; $all_bytes += $bytes; # # # if ($opt_S) { $addr1 = $srcaddr; $port1 = $srcport; $addr2 = $dstaddr; $port2 = $dstport; } elsif ($opt_D) { $addr1 = $dstaddr; $port1 = $dstport; $addr2 = $srcaddr; $port2 = $srcport; } # # # if (($opt_o) and ($net->match_integer($srcaddr))) { if ($opt_F ne "") { return(0) if (! &$filter_sub()); } add_flow($insuspect, $addr1, $port1, $addr2, $port2); } # # # elsif (($opt_i) and (! $net->match_integer($srcaddr))) { if ($opt_F ne "") { return(0) if (! &$filter_sub()); } add_flow($outsuspect, $addr1, $port1, $addr2, $port2); } return(1); } # # # sub find_top { my $suspectdb = shift; my $tops = shift; $suspectdb->climb( sub { my $node = $_[0]; my $top_flows = 0; my $top_pkts = 0; my $top_bytes = 0; my $ip = inet_ntoa(pack("N", $node->{addr})); print("Checking: $ip\n") if ($opt_x); # # Gather the stats # my $count = $node->{remote}->climb(sub { $top_flows += $_[0]->{flows}; $top_pkts += $_[0]->{pkts}; $top_bytes += $_[0]->{bytes}; return(1); }); # # Save the host's info # push(@$tops, [$ip, $count, $top_flows, $top_pkts, $top_bytes]); # # Done # return(1); } ); } # # # sub print_top { my $suspectdb = shift; my $ip_sort_sub = shift; my $port_sort_sub = shift; my $ntop = shift; my $tops = shift; my $all_top_flows = 0; my $all_top_pkts = 0; my $all_top_bytes = 0; my $top; print("print_top()\n") if ($opt_x); # # # foreach $top (sort($ip_sort_sub @$tops)) { my ($ip, $count, $top_flows, $top_pkts, $top_bytes) = @{$top}; my $node = $suspectdb->match_exact_string($ip); my $all_flows_ratio; my $all_pkts_ratio; my $all_bytes_ratio; # # sanity check # die("$ip was not found in the suspectdb!") if (!defined($node)); # # Header information # print("Scanner: $ip"); if (!$opt_n) { my $hostname = gethostbyaddr(pack("N", $node->{addr}), AF_INET); if (defined($hostname)) { print(" ($hostname)"); } else { print(" ($ip)"); } } print("\t$count hosts touched\n"); # # Times # my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($node->{startime}); $year += 1900; $mon++; printf("\t%04d/%02d/%02d %02d:%02d:%02d ->", $year, $mon, $mday, $hour, $min, $sec); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($node->{endtime}); $year += 1900; $mon++; printf("%04d/%02d/%02d %02d:%02d:%02d\n", $year, $mon, $mday, $hour, $min, $sec); # # Flow counts # $all_flows_ratio = ($top_flows / $all_flows) * 100.0; printf("\tFLOWS: %21d (%6.2f%%)\n", $top_flows, $all_flows_ratio); # # Packet counts # $all_pkts_ratio = ($top_pkts / $all_pkts) * 100.0; printf("\tPKTS: %21d (%6.2f%%)\n", $top_pkts, $all_pkts_ratio); # # Byte counts # $all_bytes_ratio = ($top_bytes / $all_bytes) * 100.0; printf("\tBYTES: %21d (%6.2f%%)\n", $top_bytes, $all_bytes_ratio); # # sort and show all protocol/port pairs # my @pps; my $pp; my $nports; # # # if ($opt_d > 0) { @pps = (); foreach $pp (keys(%{$node->{dstprotocolport}})) { my ($protocol, $port) = split(/-/, $pp); push(@pps, { flows => $node->{dstprotocolport}->{$pp}->{flows}, pkts => $node->{dstprotocolport}->{$pp}->{pkts}, bytes => $node->{dstprotocolport}->{$pp}->{bytes}, protocol => $protocol, port => $port }); } print("\n\tAll Destination Ports:\n"); print(" PROTO/PORT\t FLOWS\t PKTS\t BYTES\n"); $nports = $opt_d; foreach $pp (sort($port_sort_sub @pps)) { # fill the protocol cache my $protocol = $protocol_cache{$pp->{protocol}}; if (! defined($protocol)) { $protocol = getprotobynumber($pp->{protocol}); $protocol = $pp->{protocol} if (! defined($protocol)); $protocol_cache{$pp->{protocol}} = $protocol; } # fill the service cache if ($pp->{protocol} == 1) { my $ICMPType = ($pp->{port} >> 8) & 0xff; my $ICMPCode = $pp->{port} & 0xff; printf("%14s%7s/%-6s\t%10d\t%10d\t%10d\n", $ICMPType, $ICMPCode, $protocol, $pp->{flows}, $pp->{pkts}, $pp->{bytes}); } else { my $service = $service_cache{$pp->{port}."/".$pp->{protocol}}; if (! defined($service)) { $service = getservbyport($pp->{port}, $protocol); $service = "" if (! defined($service)); $service_cache{$pp->{port}."/".$pp->{protocol}} = $service; } printf("%14s%7s/%-6s\t%10d\t%10d\t%10d\n", $service, "(".$pp->{port}.")", $protocol, $pp->{flows}, $pp->{pkts}, $pp->{bytes}); } last if (--$nports == 0); } } # # # if ($opt_s > 0) { @pps = (); foreach $pp (keys(%{$node->{srcprotocolport}})) { my ($protocol, $port) = split(/-/, $pp); push(@pps, { flows => $node->{srcprotocolport}->{$pp}->{flows}, pkts => $node->{srcprotocolport}->{$pp}->{pkts}, bytes => $node->{srcprotocolport}->{$pp}->{bytes}, protocol => $protocol, port => $port }); } print("\n\tAll Source Ports:\n"); print(" PROTO/PORT\t FLOWS\t PKTS\t BYTES\n"); $nports = $opt_s; foreach $pp (sort($port_sort_sub @pps)) { # fill the protocol cache my $protocol = $protocol_cache{$pp->{protocol}}; if (! defined($protocol)) { $protocol = getprotobynumber($pp->{protocol}); $protocol = $pp->{protocol} if (! defined($protocol)); $protocol_cache{$pp->{protocol}} = $protocol; } # fill the service cache if ($pp->{protocol} == 1) { my $ICMPType = ($pp->{port} >> 8) & 0xff; my $ICMPCode = $pp->{port} & 0xff; printf("%14s%7s/%-6s\t%10d\t%10d\t%10d\n", $ICMPType, $ICMPCode, $protocol, $pp->{flows}, $pp->{pkts}, $pp->{bytes}); } else { my $service = $service_cache{$pp->{port}."/".$pp->{protocol}}; if (! defined($service)) { $service = getservbyport($pp->{port}, $protocol); $service = "" if (! defined($service)); $service_cache{$pp->{port}."/".$pp->{protocol}} = $service; } printf("%14s%7s/%-6s\t%10d\t%10d\t%10d\n", $service, "(".$pp->{port}.")", $protocol, $pp->{flows}, $pp->{pkts}, $pp->{bytes}); } last if (--$nports == 0); } } # # Save top counts # $all_top_flows += $top_flows; $all_top_pkts += $top_pkts; $all_top_bytes += $top_bytes; print("\n"); # # # $ntop--; last if ($ntop == 0); } # # # if ($all_top_flows > 0) { my $all_flows_ratio = ($all_top_flows / $all_flows) * 100.0; my $all_pkts_ratio = ($all_top_pkts / $all_pkts) * 100.0; my $all_bytes_ratio = ($all_top_bytes / $all_bytes) * 100.0; $all_top_bytes /= 1024 * 1024; my $tmp = $all_bytes / (1024 * 1024); print("Top: $all_top_flows flows\t$all_top_pkts pkts\t$all_top_bytes MB\n"); print("All: $all_flows flows\t$all_pkts pkts\t$tmp MB\n\n"); printf("Top FLOWS: %15d (%6.2f%%)\n", $all_top_flows, $all_flows_ratio); printf("Top PKTS: %15d (%6.2f%%)\n", $all_top_pkts, $all_pkts_ratio); printf("Top BYTES: %12.2f MB (%6.2f%%)\n\n", $all_top_bytes, $all_bytes_ratio); } } # # ip_by_count # sub ip_by_count { my ($aip, $acount, $atop_flows, $atop_pkts, $atop_bytes) = @{$a}; my ($bip, $bcount, $btop_flows, $btop_pkts, $btop_bytes) = @{$b}; print("$aip, $acount <=> $bip, $bcount\n") if ($opt_x); return($bcount <=> $acount); } # # ip_by_flows # sub ip_by_flows { my ($aip, $acount, $atop_flows, $atop_pkts, $atop_bytes) = @{$a}; my ($bip, $bcount, $btop_flows, $btop_pkts, $btop_bytes) = @{$b}; print("$aip, $atop_flows <=> $bip, $btop_flows\n") if ($opt_x); return($btop_flows <=> $atop_flows); } # # ip_by_pkts # sub ip_by_pkts { my ($aip, $acount, $atop_flows, $atop_pkts, $atop_bytes) = @{$a}; my ($bip, $bcount, $btop_flows, $btop_pkts, $btop_bytes) = @{$b}; print("$aip, $atop_pkts <=> $bip, $atop_pkts\n") if ($opt_x); return($btop_pkts <=> $atop_pkts); } # # ip_by_bytes # sub ip_by_bytes { my ($aip, $acount, $atop_flows, $atop_pkts, $atop_bytes) = @{$a}; my ($bip, $bcount, $btop_flows, $btop_pkts, $btop_bytes) = @{$b}; print("$aip, $atop_bytes <=> $bip, $atop_bytes\n") if ($opt_x); return($btop_bytes <=> $atop_bytes); } # # port_by_flows # sub port_by_flows { return($b->{flows} <=> $a->{flows}); } # # port_by_pkts # sub port_by_pkts { return($b->{pkts} <=> $a->{pkts}); } # # port_by_bytes # sub port_by_bytes { return($b->{bytes} <=> $a->{bytes}); } # # # sub TCP { return(1) if ($protocol == 6); return(0); } # # # sub UDP { return(1) if ($protocol == 17); return(0); } # # # sub ICMP { return(1) if ($protocol == 1); return(0); } # # # sub kazaa { return(0) if ($protocol != 6); return(1) if (($srcport == 1214) || ($dstport == 1214)); return(0); } # # # sub gnutella { return(0) if ($protocol != 6); return(1) if (($srcport == 6346) || ($dstport == 6346)); return(1) if (($srcport == 6347) && ($dstport == 6347)); return(0); } # # # sub hotline { return(0) if ($protocol != 6); return(1) if (($dstport == 5501) || ($dstport == 5502)); return(0); } # # # sub ntp { return(1) if (($protocol == 6) && ($dstport == 123)); return(1) if (($protocol == 17) && ($dstport == 123)); return(0); } # # # sub ftp { return(1) if (($protocol == 6) && ($dstport == 21)); return(1) if (($protocol == 6) && ($srcport == 20)); return(0); } # # # sub http { return(1) if (($protocol == 6) && ($dstport == 80)); return(0); } # # # sub irc { return(0) if ($protocol != 6); return(1) if (($srcport == 6666) || ($dstport == 6666)); return(1) if (($srcport == 6667) || ($dstport == 6667)); return(0); } # # # sub dns { return(1) if (($protocol == 6) && ($dstport == 53)); return(1) if (($protocol == 17) && ($dstport == 53)); return(0); } # # # sub usage { my $progname = shift; print(STDERR "usage: $progname [-h] [-x] [-n] [-S]|[-D] [-c]|[-f]|[-p]|[-b] [-i] [-o] [-s N] [-d N] [flow_file [...]]\n"); print(STDERR "\n"); print(STDERR " -h\thelp\n"); print(STDERR " -x\tdebug\n"); print(STDERR "\n"); print(STDERR " -n\tno name lookups\n"); print(STDERR "\n"); print(STDERR " -S\tanalyze source machines\n"); print(STDERR " -D\tanalyze destination machines\n"); print(STDERR "\n"); print(STDERR " -c N\tsort by number of hosts contacted (default)\n"); print(STDERR " -f N\tsort by number of flows\n"); print(STDERR " -p N\tsort by number of packets\n"); print(STDERR " -b N\tsort by number of bytes\n"); print(STDERR "\n"); print(STDERR " N is the number of hosts to show (default is 10)\n"); print(STDERR "\n"); print(STDERR " -i\tanalyze inbound traffic (default)\n"); print(STDERR " -o\tanalyze outbound traffic\n"); print(STDERR "\n"); print(STDERR " -s N\tshow top N source ports\n"); print(STDERR " -d N\tshow top N destination ports (default with N = 10)\n"); print(STDERR "\n"); print(STDERR " -F 'filter'\tonly analyze the flows for which filter returns true\n"); exit($opt_h ? 0 : 2); } flow-tools-0.68/contrib/Inter.netPH-1.3.tar.gz0000644000076600007660000006761707511463662014470 ‹²#=ì[[sÛF²Îk¦Î˜rmU¤-š"%ÙŽí'Z¢mžÕmIÊŽAb(" ™ÿþ|Ý= HÊön%9ujͽ$"==}ýº§9ÊJSt3SÞ¼?úéOúôz§½/žáŸ½Þ‹ç§­ºÏO½Ïú½'ý^ÿÞïŸ?ÿI?û³ ?•-£BëŸ6›¯®ûÖóÿ§ŸQ ÿ³“?žSÿ½ã“þ³ç½>ôÜ{þCÿÉg[ÿã®Þõ»üŸ£ieôe´ÑýSÝ;~Õ;yÕïëã^ïøèH]FŸM7ÉæX||ôÑIJð™îýúêøå«“ÓÖÂE’šo.ç—ÃïÚ|‘æO#û4Yt…ö⓯NŸ·Ï“¸øÞµÉºLVæ{WÛu𔼸ä«Ç“Å›ì{è–³*Iã®]~4ÎÒd¶Žà«ó$::âoì¼À),ÿõÝúoù¿˜ÂncâÿÕ§'ÇäómüŠÇ?üÿ/øý]ÿm¿ÒN÷{í¬O,­÷ì(´>A¿¬õßôß”úùçŸß]Ýêwëáxp¡onß\ŒÎ4þ7¼š ñTËçƒ)l’gú¸£ÿ»ÊŒî¿|ÙWJŸåëM‘Ü-K}pvˆ/}ÙáGúmaŒžä‹ò!*Œ~›WY• ÐÑ£lÞULóÙK=5«ujôMÍMGOª¤4úä¤×Ñor[ÒêËçý~ÿiÿ¤÷BëÛÉ@éá½)69¸H¬^›b•”%ü·Ìõìè(‹uœX¸Õ¬9¬aë=DRT:_èr‰7Ódn2ktœÏ«•ÉÊŽÆz=_FÙ]’Ýé¤$òY^ê(E0q—…EŒß&ZÍRèéÒxJV/òB¯À¹¶þäô¿ØØä.KU= lòªP ˆ)ÎWôÄ.y=˜gp¸²«õ› øF:,ø+±+Ëd¦ˆR}SͰµºp» "AËVwUTDøÛðVúk[Ñ3åy~úKVħ­°Œ6­ƒ-h-bVW¶Ñ%I$VµYÓžµh` e’ëÀ´­D5Vò‹ $˜ñi¢l£s¼Sèu‘ßÑJ?,s¢\•˼°Ò v€•ª²¢>°t0Aaì^{Ì"[‡›ç0ˆo¶Q^ØɬˆŠ~ädIfKÅÝC­?啞Gv£…½ãØBƒyÞ%«ù¸4™~€`×&úLÒ`©zN:ôˆ8*ÌÂp ìMª5’†Á ¯A~?gvÇöBF%Y…ZF÷¢áÀ:ß—ÙáO8Û)îØûÌà[ëdA¤õCb—‡z+œen’{"Rs"C3 ìÎÀ×Jå_„ÑâÏàUZã,µexƧÁã\¸$"™Î̃ðëåþZŒÈ“ûœå5Ý8'š–(CΖµ3ÍéÕÒÌKqŽp–µ’™@–…!IÍÉŠ¬‡0fI¬`¬žH˜&cWw›%bœLÚ~–G9i¥ Ç-ø€²ª«¦òNk¸´M£’‰ÏMQF80V¬ñ0™%@4‰‹CDY$ªöj4”d‡8râ_åq² óeQ¼Åó%¢(Ýñ+ö’³Õ|©#/rÈjiÈíþ*>1Ç ½0 Äû ië»ÄÙ¬#© ¡¸ÒHåJn¤ÉV»âeüî–9ã• ;X§6µÀ¼ðT–:˜D͇]Â$°fåY…bSƒÁ¿%…òª!6û¬v_.uù–fm_éƒþ!ç%I“m©Ã,ÕÁñ!ä?wfd¦‡e¡’Œ,?LÍÜœ3žålìR^'Ô0hqb5†û1׃ÔBB¤ ‘Æ8|"Þº£UrH ž½Ñ¼38Å7> Wd¸@`YlkUH8Ír¼_PÚð–|ºV²"F‹ÃÌ'‡ñýÊÐ.&µ’ Ö‘µxDèàÁ(-lhA`ש ÌM¦ãÑ›[zÄ /¯ÏGoGgú‚˜ïu9íƒJÎYØ8à˜‡¼øì"!C¨ÍªˆDC¹wM@ší•Œ¢ ;Ë<¥äb£ƒ¶+ PH½‰±ªêü#2ô8y?¼èŠØŸÜO€ž ×QŒYjö9-g î9îÁ&ŸðQf‘x3ïì©©•AžÓ&á#OˆÑ«É=4ûb*Â|sà4zx%>0/89¶•µNlΜ[”õ:/Ø Lt”c ®!èßC“±>äÖ¹9¦ØAçg©¾YEw$²ƒ÷ˆŒ ˆ¸S¿@2xŸ§wÚ"¯ÈÖiÝãLyÍè'áîOy)”;ÏàÅ1@»‰ÕO;žÀQï÷r'WVùEë & x6Y¬Ã™Ãk ±ŒÊªÒ&ìòÈ  îM%¢h¹PE•íˆÞetLÜqˆ©!Ž" ä«ð€õ<#¸½à I·œ8Œ&%gD½chÊï|€0hÖ½2®J±ˆ¹™>çÀ…sîáø°«> Àѵ‘Ám¢eiŸwêCƹ‘LÐï ˆ‰6ßS°z¬æÈübCCê Á5Áæ$cY! Tbp>„yÓà_E¢Y'ó*¯l*»#æp,‡íâ›59: ÁÁ1®R§¹Èã1O£d©€iŸù_ëÏÆ¬É%ȺSòšõ‹ð•Ç­H(•>šY“aÊe8[MZÑ‘M}¶è`|ØÜ>*JshWp[³ªªµ$•ƒW‡cj— çH]‹3ûrMv€·qT"‡óµ‹0tæø‹’î_™{ÐÌ–sÜXŽÃwLQNUì71]dSÙ°¢â¼¸v Å—KÅNC É¡½]€×{RÉÄ®¯¢üv]Â4¸Wƈ‘È)¬ òø+Å£è°)æQe¥‚¨1#õ¬9æÏ![,ÎHîíLŽiXŠ«ìÓ¾ÆdyKÌ >ÅTm9ÓU]ác¶ÃÛ&  &È ÂqžåJ[Ät"ó€äÌO€eÖù;+©ŽÎµb™¿Ç°;_PÔBTˆ‘Û%")x{¦ÅÞ˜qM… è1$àS¿~è¡{-zŸè3ØãJ ÚXz3\P{ªˆ( !θÃ#Ð"À5¡ˆ’l”Rk—RªÂädzüz@Ab’9†¨ÇTÄÈ´E . Á]BA¾ ¥(‘A‹=eY^!ºPÐ%avŠVÄÓ{#^ÄÜ×>„iQ¿t<«íÃyðQ¿pØ4,¸»ÆÀz±x/mVSØv—FMšúüEä4»¹¾OÌÃVLd* Â;~™W¯(Á¶RviMºð=G¯ðÆ$(×qJ¯-A„/]‚¬%òޱVò§ÙEÿS%…´`„â±î!»ï›ðÚ•4¸'ç²Im¯¼gã\Œª„°žG(µ5®ñ¢r’_0ô¨kv8/QïaF|D6Ï@[¹ Fˆ î ÅÖÀûÈÎhëðÞ 2¾§:¬$O}P4Kˆ‡]´C},îU7çÌ‘ÚjöÙ•¶÷;"»µ55«²~AmVTð6‡®1%ÄHi’ØVRQÛI…k8]Ò¾(toù(¤ÚpÓ‘:O@€è!¾PKÜ©^‘j ·™g i‡à .>åX…¹‹ŠÉ€õ—ô¥iiŽMñb'¸& N¹ÿ^ÖÓɉ“£ ÿÇ@Õ–*la™TwÝh0³ÒÀº×ZZráÐlÅå2_L!å¯oœIoˆZé^aT^Î¥ÔÍðå”Ý pæQF¥E"79+ŠtÑÝIÉ“u5œƒ¤²ÚÆZ ù˯ ‘Cú;Ò÷yZQSª×–yÂÊÅôæ|‚}›(4+|ü ¸“°É6MUÊÞ,wòu¨¾}„mî©„”dêáÏñ!å¨|ö;õT|Ú›W%ÇBd{ò¯šxë3ÇšQÔc Á€ZfΧ¤¥ 4øi0GN^\ýÖÚ ïRù®ž2'Â<ê)%sbRTS„tœÏ{¯ š _A‚’kÚÇa;åÍA-_EEû¯|c¨iRÒ4ö"ìÔˆl÷dQíO ¹;ú>J!™¥ˆÎ%÷ßä\|QÓ” 8 l:;•Ñu–4 3¹Ðc`än¸|…@ÙÏk;Á…öÚá,,²g Ûrô¶rZz`à' øûtð¸üå$ÿ†æYW’‘$R5+ãS—˜YA’û·î¡92aîžE)xÉ$ž9ã®m¥=°àöaFH”"%ʶv‡o#PÒ£÷kþB¬õmçåóÖ5ª­ŽÊrÈ¥öŽžT3Ÿf"}@B.­ ²ET¤#&¼ðµ ¨cUgNZD—q®SÛ®Ì O¾}ËECÈ´täj×—Ýï.[úû˜¾ð=6©¨VJšª•]ZY®L"kóyâbpˆ ß,’,‘^+ÕYn½Äa~SCVóù‹˜K\ŸŒauÈÓ4 Cs"œò=OB'l§ìڰƳó„îÂW|”5\?Žnóør°nõÔ 6|í€Êvi:ÊÑŒ+Ez:ldö†*ÞÈWe_Ò-“YRJ«>êÛ{W(îžGè ¹ät7=ÛÈÅ÷+Z{«yàŒ6Ù¥¹CŽóÚjdÿÈ5u[:.ÀÒ55uý˜Ñ¿r±'×ì«-!n•8nÔáyWîQh†Ô”¯Aýoœ¸ ‡¶È?•ÈÞ}HSþ"Ù=‘Iqâv/1¸à÷|Á»9•tm¹ õ#.<%È ®s¹¨ ¾¯j œ¸¬iªÿ¢ëbÓWØ®!Š%_quUÛ“Ü„Š $T¶øÿ9é©ñ@w¥„c>ÇVEö¢«G IìÜN‹Ö7”Pµÿ^ÅwÜËT§r笀D)ã¿háôéï¨_£ä¶y•¸ÙBw_ w­Œ=ì¨À  ³ÙÈvÜü J¸òcD‚rÙoÜDêCŸ§iÔnR:¤_o±å#¹n_¦tAÍOÚ·N¿+#nþ‰^{ú¹Cã–¦v`^6YU)ÜÔÈe‘\` ‡Ü9\ÙD}^ÛÓzºäö{ðšKý;J$èí óßs×þ»“I‘×n==“W©9™ÕE¾A™°yÊ#s8Áï‚à'°7ç1œ¼¾`sW,1ÒœF4¸m_ÿ…2’QÎ!GäÈÃ……ù$cW^¼3‰À³4¢Â<ÇËf éF½ ¤U·ƒXÉ_a_0\pé³Ó¿.MJHZŠaš¤ËÄ) £7IC‡¾+ÅÒa6vKÅú;uU%dúI$ůe<Ã[ÿš[ò$0­/Y&§Qëz$GÝÑ\ÜZ¢ŽÛ¦.Åè ¿à;HšîÛaÉÄÊ[;‡.W“ð4¢‹çy& oË“çZæAÍ,ñK¯]µZ××½8=¸"q1˜{q€™ÙÍV’Um¹ž¹ˆøµë/×¶ûGnêu+b%6Ÿ ë?Ê…ýÌW§d+õÏ6ÍÍVX§KŒnàÈÎ,EE.½l‹Ý2€#zÇÒw #€ºï -_/ù½uÄ`èyMîâ”âú(ÍŒÊö«­ŸH;'c°B) AH訬ÛÀÄ”3¹œšG’]ƒX ŸÃƒéŠÄr@X„ŸÃ*}ƒÑ]?ÎòxgÊ€ÁËË.OÂ<:ŠN’òÓ…¹OøöVTNCÍ÷ò# «œîI @(–܉~¥õ„ÎÒ`ç!ÃD†O(¸ƒw»N [÷m&KŽëÞŸG‡À4º€bK9ÄËÀoQOPÊ5 ‘G \;b¤*ê¯R¿‘TW84ÅE¿"«V3S4ó¡¾6æn΂«õ­µ;…„„Ê` ÎeÚ'¼iP«ðžtš*ŽS¶ŸÑhšçAµ ¨ý˜¿!ôLå…ŸhmåÜŒé‘9¨=æ°söæBC„°Ù'‚­K²M=Ã’{œï_¡Út?7û~“!£K½®~5ðÆ ;ó'< 'ñ7œBµîþ®åÁ[ Z,ïˆÉÅL;?(7CO𽩤4¬³@}†¹oH~k»Çüõ5ÿ„#_r2«8ÔMF[O<»ŸiPc¹sž“^hdü.Rönö½âÞ›À„œJÆyñ~Óà¯ü/|Z¿›Jù*¯kvúåÌ6Ä0.Ô¯ÜIÔ“Ál?ÑGÓ÷×·Óšy:Üàê“þÇèê¼£‡#&4üíf<œàü ´G—àxˆ‡£«³‹Ûs~ W×SÈ 'ŸÓk_멃ÐW—Ã1äw5¼]Œ°%M¿M¯°Ï„ó³Û‹q;¾¹ž ©C"|<šüC&Ê öŸ·ƒš¤ —ƒ«3VÔ–"é¸úÓõ-e œûâœ(¿€5Ôç÷óéèÔ‹•Øfr{9tòžLY@újx~ãOz2‘Ôxx3Aü4#=•ë+‰-Ç]R¬dølàöê‚N;þóçÙc DcðÖF ô®>ް9ih[ù~å‚]ëËÁ'ÌþäÌlÖ“Ûm«€Q4Ö9xsM2x~FÌ!ŠÎÿÛÞ·6´q$‹Þ¯Ì¯èà—„%ÄÃgemÅÀœ8×á(ƒ4‚‰õ:É6›ðßo½º§{BØÄÉÙE»1ÒL?««««ªëñ¦þªq\ò P×bL^RLJ&~÷€z°Ö{ ØEÿ÷-®"b“„kfA4’K„ªùºÚy-«§œ]û³z Kñ¢Åê»?6‘òp?ì…ã¦Àä@Z8a#çS˜•Ï0àGÛ,òšÍ¤ê$²†õ„Îxø3Ü}`v䔋ƒådìÀÁÚŽàpn(¶£´üÛÄJOËsòÿˆ&È ¬&›FæüaÑN$nP™@:é 1˜éa;w:ƒÂ‰çž|‡4Lr”›–+¨¹,ÖêCí§U²“‰/WN1kdŒy5çÈj€‰B‘ßÅ©áˆMí¾.Lö}tÇ„oäŽo³({ °Í 0ƒK¹³æ=6-66&lŠÚˆ.H‘BŒ¾í'~Ѱ‹ÀÏDm¥FC’€È‡,ùh¢S¾t ïF<×Hbù áIõµÅ€€GÀ¬á 7}²GWÁ‘ï³1‘OX@VáÏ©-×™úZ"<‡¨ <õ‰éyÎý’\j99ë½e¼Ufî7vc ÊI¶¹g–§ql™9|£±ÖËg”bG v#×ìÅ—aÔJÁµ’.¦ùçJ6ì«XÃ.Ъg"pÖLl+XΛ‹€@£w$Bú€ß2rUHêÝY j“N`´±‰ä9 Àã˜>O<ã`”#ÈÑR‘/ÊY‘Lë6^džŽH~Ãba]cưÜByp} Lõ“>ý¥/öç÷$2Y2ÍCgd*‚;ex Õ ÚïÝ#Kí~0.*öä{ ð=¾é°=;^5£]¬š‹pc?Í„]o€Žòûk¾;u­(`Ón± ÕA4eo‹Ÿ‡—ÃÎå Ð{ÏijKÓ[Å -‚Š`éúÕÂóGx=Fƒ°#vè”Ø© LT4*5èì¿p4êµßþŒ‰>cCtý,9¹„­6÷8ü“^zŠÿT‹c?Y1ÍâØOÞ=ïž©A? ©Ã‹°ŽF@¤"uèOÚ,Ú½Ä@h8…"®žOƒžªW ÌØÿ—zÖ÷Gÿ Ú¨ Çç•ÑÅóÜváüÿ'¼ÁÚØÀÃ[;®¨ŸßªgŸ.§ÿ xÃJЙb+uúÞf†=_½„Äm¡Q¶Õ0 íˆ ·"ò ¹¼RY¯,®¬]DU¡A8x_‚Œ‡Ž«È 3spÕñµÚqO88ïÄà…u´êžoº©Cbtüw<ë’ôÑá¶û¸†þ×Ö×V%þmãÉ“5¤ÿÕê]ü¿oò±è?.ýüôÿŽä Éÿ€øEòÎ _¿w{þyä5Þ5¶él x;LÑ9ª2N•¿T連ÞSêûM´‹ªÜdš+”~ÇÕó:Aןö&›ê~ú…:$éŦ·P±”›xL›ÊSš +ë}e¨ ©/z ÷ ;;ÐõP¥¦•Q\ÑåÕ÷Ì´óû¥°¯³z¡–*š×#Á<¿KK;«OkÑÒ…ózåEÍïV‚ÖÎêׯ‹Œây= åw‹mgõ ï³ fô¦[ÞŒßyžùº©¼…6ñ*ºÜ þ¸èHÌlaá0.P©›Ù5ÉÒj€#>z# * ÇÐ$ê³fV5Õ—*>ü -€a‹zýÕ$~æÇ>ÿ9óí÷çÿŒü/ëëUÿþ¬büßÕÕÚÝùÿ->túóÂÏû]¹ç?ûË7úx^t¡|¹I‘xôÁã‘­áFºùíèÊ}viç>Y ûÙsÅÛÑqR¸òMŘÞ%Z¶\<š‡ê|<œŽÐOľ#M{¾)¨¯bW$·ÐT;ì…sà€ï¦ÐØåë`¨»éy™ÜÏ4Íýú‘©vˆÕyLÆCá\ƇB1¯•h©=Ïpg{³ù3h©ã÷¦—xÿs]°í µA]To<õèþ’*Ùbâóß:—íÃÒ_ž·pÒØT¶sh—ÍOMûaÔz=öSÐE%¦#ñÑí]Cr¾¥*ß­ 0K GýnW.”\éøŸì 9ÕsãJ¸ži„HK&nÑEØ…ñy&r›KqÔ)¿>¹@UnLâÛ/ߥš–,À6脼Ÿ4'Jã­h/„iûxYbÐÅÏ-í…å%¦ÃÝb^ºÏ£;¡Gx²>ò<ã)y&ë®oC»îŠÅp|yã¹ÛˆäýtA̶cJm“±QÀ[’Q8 ð¢~Q Ò0Ž.ó›|›—_ær„FMÆä K‹d…I¡­wŸ|¦HÓGªIÞL µw§ãÐGãûKöѧÉÁ󓏨P£áDÜÂ%Ês'@kXVùQMØC[[<7åjÊø½Ëñä)â1DÇr!>›=‡v ¡Ý2YFOØ./**À÷*9´‡Ÿõßšü]Åî©Dmf üϳ¼ Y UUý¾V©n<­¬TV–kkæg~b‘šyVu‹¬rÏ;’xOŸØvF{ã„u° p²ãôÑ#ôÍNFtŽñ!@ aT="ßq5ñÏð‚¨Ð¤kÏ€\äÉ¢k¢Ýò£ÊË>q|¼ÆüÁ}+nC€0|jÁŸ×Pt/L?££šßX Sv؃zí¼ÃÞpðÁ©ý`²¹y¨å PÚ³¿¤ü> g;lç°¾¯=PäÀ&· ÚÒµÑí³BC{ÕÄG|"ˆ 8ÙE¡w"Œ0!—.¡"BèˈŸ' +¤b×:!“ñq€>Qn€™Øé£°Õ=[È“Û,9û´~¼/>úd°7Á&þÔ/5À·¾È|h:1 i÷8N¡oo$Ù)mÏ8¡ÛH(y”¨ Á$<ï-M›×ík–iËÝô.‡8Èj ʾ/§ðOûôË„Žúø+bÂo¸}t° èn¢#iò÷ˆX/`€š»G† C!4–F¥Êœ³£î`"Ï¢q[…£²¸)”©½e¦"å^08Ÿ_4OSMõ¬ƒ×Û·ÐÔ„GÓ™¯ü wMå¹uvJ’3KÇãÒ-MèÒüK–M˜1k#‘•¬†|èôe[>Ú“áHqug¥D•Á»~Ùçþ¤Ê\š(Çì`8êâSÀT¼ð<6ÏÃï›7lnaaÎ À+ ц¦ù}¿GnîCòúŸ©LÁHm«epùwÕØò¿aé6û˜­ÿ_]Y}RKÞÿ®¯Ýåÿú&ÿÇ^ûä%€•­ÊI´¼´ä)üÿ.¸Æ|×¹MãüoÞ(:÷•0÷RÞ}Ý­Ž%ëZú]´J°$Ñô fŒñG`^hçÃv}9|p;œ‰‚=»<Ü”ÙaTÄÈ Ž¥bn@reÎ%ÂÇ÷ø»j¾l½©¿Sö§ºaÞ¢IáÏ­ýƒÝFëäàð¸ùÿjcÍiR.8¸M}Ûñ,ºŒ–IW=îS£ôãi8tNa4é$ N:Ébð¨ž%Ÿ)MKÆC÷™!ÎGd(ôL–`TYó‚R–Ér8Ðõ,9rvÕnħÿÅî„Æ¾è<Íò"µnôñŽG0£ƒEsKŽuaºSŒ¤=û—­ò¿Ã‘¶MÒ#ED¦¶¡)¥¦-äæ6ð-?ÚÒOVkªsО¢Ú@”öŸ@«?iGæÖH†&¯¶ÌP@Léº#Á'9áFëíÉ]¥1ŒÈœœ•OÞ§ñôtËãFÐCƒÄpkdLd ØìãhVÒjvÞ|p Áf£Ž1Šì Eý RsZ€ØºeÏ—õ…-Ý0ž›ž³ü$=¤¨•D±/@6¸¯Óð¦GO>êûч­™+/“. ?+"°À€Á願JF‚0 Š:ˆÝ‚¢/Kë~b$3`Dý~ˆÙJ(ÃȲU%‚ÔY8&·¸åQ8_¥ZIl´\ (¿Tù%åü>“Fã!.PAàÚ…ª%üÞSQÒ¯Š<!\àlz~nû Ža@¶a›wM *¶nÁNúAêsÏoê{{;ª…ÿ `Þø§¨~B!õx› <ÇÁd:èV©8 âÊóîa 'CC¹¹Â碔„oPbÐAù ioxÆâD¬üè)®0-#Þd8ñ{„hÑ– =²œšé%Ö ¨åm•‰…K£Ö°5Þ¢´ ¶AÄ.ÃYõ5iánÄeÉâ”~¾çÓâ”[ ôU”¤†<½uð>3ê°Û¢ppÛ+zÐñp­sKÊëÒVo—( ¨Z‚ïߟ½ß…,…˜Ëj‚ø(–‹ GÀîž[´Šö þC„15&ük•Nà bô8r†0à7|ý²¹× :Ðn¡ÐG¥x4Dr虿­>‡FLÿtéI‹Ïë-ó,2_ϦÝ÷ëÕxÆ´€ƒ6à‚»[› 1hQl‡æ¡7ŸBeZa«žm«*ïqþ’¢ð^/¬Ð£+¬û‰ÔÊ…Bòßy‚ã¤ÀË„ TR‹áfwóãEÐ^,ÕwÛª\-"t¿k_õÔa( õèã£M%]QÄònaQ'Ó\©Óó¡Äƒf_ý2X4v†KnLãÀÿ°eu>Ú”W1´a&1ÚdÖêZµdE¯¯˜JÖæ„jÕÜíD Þ03«\HmÜâe.d>\®„]A¦ýæ9Ä Ö¨…‹® Ö–… ,aÍ÷ßîíé…Ž ¼i_Œ­B%õ¨ôHÆ‚¸%kÁg)zü¿_±7ÑRFðøqqÛŸ C«9i)¦¼oy:B¼ÆÑ"ÛÕ–Þqyõ\äÝ9*,Ë<Ôñþ›C‹Ô7w#Žà‹¿`œ àʃñX†#ÇdÕ@9Ñ'콕Dtb/ã9“êø ú1Vv™Vö&øk ?ÛjNKqÅUY›šÐ¿2é;yoå\EÈê- †R¢t‡£‰½ì* c¤Û.>t™<¦ÐLKèØ£#˜a©¡áp6ÕƒˆÀCGGõ4>æƒá«'À)¬ÖŠ6’wÏQd-.¬¸RRfÅ$þ í.Á5AEk#P ~è-°„ïVòÊ)w§ȸ;ÙÓ{†šR,K˜¡gl0¢Ì]Ÿ:ò.ªÅƒˆJñd 5«5= ì¼ïX³geÉ M?j‡aÑ¢PÙjî7N}Ó ž½è:$7`Ö7JX1Át‡a8‹azÃá‡éȼ›”¨ýyÇ#b›üÔY²£¸+y£4cZfMÉ'¶o§Hxì|„2’ˆ„´Vö*ÁÐ…µFÎ{ØE4)>®šÖqÝF—§N Ël¹­åç$bn«H;ˆ5M€ù¿n»|c¼‹"£Š]ˆ ù`9äeiYÉ!Ã:pŒÜnÌKøZS ùÚ6 å´!©Ñ—"¨Ä$ù¹Þìâ×’‚Ýøò¤ÕÆ[p¤ZJýªq 0R<’³«J34=†Xº.½E¶Ü4­—ËÑíOZ@¼«ï7ÖN·Rküx&4Þñô˜ÙÇH!c"ÕÍC>oèd‘ Ї£kÝy)O@lßœ´ë»-Š $d3Y­VrÑ;]K‡<¾Ãî¢vÇ`ƒØèƒQLtMm}#.z¦æ¦Ñ]ÌC D–Ò#n³¢ÆôÌLT–bhfÏ3Á™hI jÃtu …ª Ýx ¢u »yc5ÛXã6ºW7””‹9¥‚i'g¤Êj<ÎÿšŠ¾:èIÞZºf%2§ü˜²ävÃõÅ¢·}ïqm´ž×øhÁSÞÏß·ˆÓ+ZœVúŠ nÖL,ò3ÝŽ nÖŽh¤Ñ ØÆ>¹£\„[yì·1Ò&I§xwØ»-Úâ(Ç@q4Iæî„7ºCµÑà%ˆ#“:—ÖàfI!¦SØw«Ùuõﺌ;MÛ´,ùƒÑ–ûÖKo0:+ÑŸÍ›QU£¥9°ÄÊõ˜õÂv •Æä;*jôB*”Z >uÅõjÀV•ÒÏbëoÁ°u(ûmÊ+ÖÄÚvËhŠôˆ«ZIb–€^C ¶þ†Í:ý œxp[ò3+éX®’8Ñ"ÓP` t~k6¡B àŸÖŠÒ(°c{óngh$µ" ™$h£¤uæ6&qئ6^p—ª!$)Ï¥fX5ë £²19#`êQ¡·hÓt–¡hMÍ|ô2è*ç£é‘.q-qIÌ#é’± Ѧz^/€ uW<Ÿ3C45ª¤È*èbäÓhAëÆ> ;xX<Í­¥C±Û>³7‰#KÚ„êy¦8kúêàdçu]Õ yeK3-Ix ˜’³É4~’5ràWæL€´7ÿÕpEœãF Ž:¢÷_ b¡Çõ8{`W1ßCÚ¦@|kÔ<ÄŠ¶Ž]òò5—®:‚½'ºâðH:Q¼ƒ­­Àgxpõˆr^âPIWZ1:‰¯°Š£SˆHB!ÛX§…bˆ=K±©Ò~\Z3‰–ÒKË4§Ï¿¢S·Ïxõhñf®”¬g|+Ö°„0õüË@¬U5ªð—Ķ"$•Púš,Ž ¢¯ÇReÐíÄX(±Iz^ͨÚv&–@„V¨3ªŠ¢•“Ø»dƒÕ<ŒfTigUaÉuF­M§H¨nb‘u/œºAo”[øAdš}mŠ#ì"¹=>¬ïü³Ž)#~l7öé¾c·^¼mîíOôÊÃêþÕžOÊÿ‡BâÜnÈÙþ?Õµµõ ÿ£ eÑÿgmãÉÿÏ·ø8þ?¼öwî?•û¼Zy²²†PcÙ>^Þ9¡²„©ð{Ò–Sx,4JãÛT<ÑÍT§>o÷8XrN­‰.þ™”'|:BggöH’¥VŽ®ïDdÚN£’Ö›ˆdèŒ+n¯€’|qµÃÓÿ6·¡ôhÒ~<–oÑ—z9Ï;g7u.ú3=‰f¹ˆ$Ü/æ²YÏ´R÷Ò†âžkš‡\Uü,‘K5©ÉSVç,uÁæhu;¥°DFúi'š`Ä=¶ŒÀ€øÀX jÓx\Í–~²±¦>c¹-/mPïKüE®7Šþ|:Îx3ìv£€âÕÄS“»Ç„©»uï¨}F³®#ÓÆù¦kôÒ‚Ýáò¯º:È÷xZÁgØ^Û+ÆtøÏ2žïn†›ÍÍÉæÉæÇ‹³Î¿¾Þˆ~Ã5¢¯ÝŠýt‰Ž0ê’²nwìK,R)¡%"”o÷GFx˜!õI/€y(ü+ØH‹ÙFÖöu£¾Û8jí5ONöh÷Ó¬ïëñ¡,³‡³ð|îæ_4_e´mÕÞ¼ÿ}.T¡åàóHÔþ‚½ü²ˆ×Ž¿È”~Y\ÌØ ·ñ4醘`Ø‹‡(/£ë :Ümð¸þ¹­È8ž[Èп̀èU= ĕѿZü8»M’ŠÝ‚dqùÇ*ñø¹úÞY¨;Ö)ÎÅõµé(AXLÇé÷3À;1~0ÆmswkÓ¸ø7Ô O˜)!è‡&ÞÁ²FYZ*®ì•`6[*¯Ï“xÛåtZýâNóúüZg´ ÝŒS ^rà\“Í뚬Îݤ¶À1&S–%)À-â¥/Y„Çp;pœT ÷Œq0|× í}ø…?’Á°(“ág‘EòÉÇJÔÒBø¶‹À­Kt¬ëú¡~ÞÂ$*ÃŽž©~®ic@¶j‡ zæ0o¦ƒ6ÏÂÙËØSÖÍ‹bý‹oàäÁqY#Læ‚ùl㙺¢çÌOK\àªüîe³±·Û:>ÚiÔ_må½ß=>Ñ頻4[Ýl}w÷hV³ú½iÖ²<úLtØ5aLR¨ŸüñàsaÅ$mÇLÙTI×I2TGè9"%‡ªäZ’k ï$æ„` C³ Œ%‚ðdœÙjãÑ,쀗%Uuг=6Ô4†‘.ªì’ÿ¯¹ßj,ñ$ñžÑÙ­ ÔÙ_¦6F~ y™Ø†Ùu7† ÈÚX×Ù‰"Ò<q[ç2ÛÂBC .ýÓ×PîV]îœà ­œM³¹p’Xg¶uýÑ!V¾•¹h6ç¹dU蜗‚”¢`ö­žðùJGÅ;»ÔgŽZøË@å6ÐÌl VZÉm„ö† ejðjÖN2ëÚ æº7üò[û;ïû¤îÿ$IÄmÞξÿ«ÕV6VñÿÖVVWîîÿ¾ÅǹÿÓkwøŒoÛ¾(èi\Ù‰{ÊóRJ}yüS®o0ª¬ÅuAQ±L*.*êä`÷`¿ó¥¡fv£åOa¯ÓöÇè)ºc2¶p™6ª #u>õ1ɶ˜bQíÿ™rÿ’Š>@÷CXl‡çÑÅüc=ÑD¡ŽöD9~µhˆY·1&-ev&¶(d´ÊâWÌ7~N16²q1™ÓX-FsïùÆÿö§}ãîlI\ÙŒ¢aˆEË혘øóžëÀÐ|NF>Q…ŠžÑñMý]ëø°±£j멇­=Š(†ã_|ëÚU¯ë?6ZÇ'GÍýWǭמʾ‰e£ÆDy,ž*ïŸãþö–/Xû~¢¯ÑÕ©Bx€·¼-,ýJú®;¢Â6uœy1ìGþ2¾¡±›°VBLü*ø>oÊ!3är ‹ö¼@FV_q!;3È Y)"iˆ G&j „²+‚¬–ê³KöÃhÇ™;”%Ì!?<1zä+PLЂÑiÓGë) °ä¥Ó@³_ G┦1`A;ô­ÐÄÈ$ ·(5šŒ´Rà×½Äi¦˜ŽœÂðŠ0èÇ—ßi™VäíF¤5ÿ'ãK'Ø4†Ï·)‹»$qgï¿`2¹Ä´mJ ¹²'ãáôüc’„þ@|݉GÃXíSøéO†ƒB ö‡¡Ÿt“Ö£‚onÈ o2(ŠÜçXM1øJªßÃX¢­@/wY^Ťôb”<PI*—ŒÄ8X•ú®î&ö~Ë€, Vedõn ™X-gC†›ú–±`Ì‚ C‘¢Ó$Ö’6XƘ³†*²b<^3wÐn§ÃQªÏáèÏëŸÓ>¿òæ¶c!C–f,7² ±M.fgŒÆª2Ê0 guø›ñò¸˜%ù¢‰xˆ_Ø”œ M¼Ø¾…(­†.íG-¼“¦Å2ÑAV¤Õ%+çmµ¸¸C GÂA'Ÿ´.…“¬*ÿmá7øÒŠFºËA ~CoLñ®…@úNuA´°S £¢•S£ôG0‰Õ¿¨1Ú*T+¸ÜÙ¿‚ñP®>™v+û²I.”#õ󲨆u³®T­±R1 ’)ü|‹ÇÆ%aåÂ7 :#_qô˜y¤…ˆ½ÉìÅɼW¶šúbû qŒ#ƒ|&©ÌØ[,ÆvkyF[ÈŽ0‚T¨òŠ2¡ý‰äÏÁ('k˜¬¦C ?lêL¦Geè`¶“€„ €ãV“X@Ì’²F¬£¤+âÕ‡tuœ\Kû\`”%.À°0Œá©„Ù …ªöšýcõ´Xô,îàF£oˆá>9š¢ "n¦(‰„ÆÉ“vRlp€û ~=Œ·›ñ±`ر]׺ÎblÂÕyïȧˆóô9„gô`Ð’‚ eÂA PÛÞ‚æ§ŒðbBve“‘s¥é¿øH9L–$ýƒÑ‰'EÊ•Ûõèá|€cš¢M}F:\£’5ǛӜˆYqRvü ØhÀæFi O¯Ý¡?Ž(Š9Ç´8ëùƒ´•¢ ×i[½Á×Ý´ƒñFXm¬‹ð¼4q’ÈŽfÙK®Ü'Yf$>–jøÏ*þ³¶e¿5M¶-ÒèÄE)ª¢Á¹rï§øÈÿ¸9¡´O.G5¸GÙæ˜1þð9ˆJ(C¨q´¦ª—C¾PÔÛÕ LØ%›hË-Þ8Pë,ÍC¹°&Ç“ª¥g5úS'R»~&µYSé†Êtɹ¬fÌ¥ögLFÏeõú¹¬ÎšKÀìðdâírŒzè¤&IE9L@â<-»e‰©†»ÎÞK60ÖRÀP¤"´÷‚³°D…ÓÑUc‚è¶]FƒºçurCŒp5 ó.Àt¿FÂÁd®ÂÌh;ÄðXA.  î‹¶ÀIœÓzüXN÷mC¡sÆz„”¨LºI\X ÖeÚȰ3lú#áO»£8þšVYÀèh*æ\C^´D,_³`Õ() Ïµ«o”‘´F8jTö~[ÃÀœ \s\r[n1”ÉQä20î1êp÷­˜ÅÝž ¢Ø;Ö˜Ûj]'žoä<"Vɱ¸Çl£wg€÷oj€G+ë Jö€×æ¨až¦Î°òïÞ½#2Þ‘lr'çš‹·mÈÇžý3Uå˘ZìmÝøÀ‘ƒP ‰ïø–V‘*…b l™'ç:öšwàu”$2­ ¤‡Ý¤^ùyt½„Hû̳é ü ëÑŽ’ÏôÐC¯lóâ%ÂØŽoi ÿ“ZOX¢Ó\)j!qžgAÙýæaEŒuÑüâ„ÓŸ| !Šá~0ÆJ¢P&²åG*ÀT×”u~ðm_Åî ÆyÙÆ¾F6RÛZyC?E´£/òHCÝâCŒZ$~G= ‘‡ác,áNhݤ‚ÀRÏ•>Ù‹¢±äJ¦À3·ÀpTä 6ØŠõBkŒ·½T¢„Ñœn[U€3%ž9ŠÀǺ‹æá£H¸ÓMF±Éïì¿¶ÙÔ]f6§“\?ftrA¥úzΔu‹Àñ ÂŽ!›ƒ¨ÇÅHt®!rŒ‚ÚsèÒêdÞ^>Ô‘gç…Ýu#³9'ÉnØÁUe· ŠæíòðqÈ a.·b˜ tQëÄ4©EbÛ÷;tEsv)òA¥A¢ƒ˜`œËÙ—zänˆ»k,ÿ€Ì£¶I«¹tØ”>ë P{ ‡>yiðˆþž†Ò«-­(Ç¢ưפ.ÙÄ[‡jæ2Ä5K!Q+;J¢+¤ÁY±dŒ}¡}ƒ ò­ÅÊã½Xjpß?T8ªÂ5¸XæXº} 8šÐ_m¯t÷¹ÝmÿÇ)b¢åÛîceemåÉ“õû?úhû¿Ú“5Œÿÿû?jý¶’õù·ÿËZŽ7áO‚ʨw} ýçŒõ_R[‹×¿åªë«ëkwöŸßâsï»åi4^> Ë£`ÜSÞ=Åh€gü9È#!þh~‚<ë݃2ôLGñ'ªì«gø£ŽŸÃÁ%”ª8ˆ¤~Í+LÏñVM•»Õõ_©ýyÍ:ïÍoÕyÏóP¥´C2ãÿ|*lâ—þ8vk@©(ú—ªð`J¢?ð^ðMgáÝ}yüûâF¹º¾xÅ¢Ê}S$õ\JW×ʵլâÉR¾V+?É*žx.¥Ÿ–«™¥Ï¥ô÷åêÓ¬Ò‰çRš˜¢¬âÎ Xq8]èù”ÃÁ6ËytuÓö{þ¸ðúÑ«ÓAÍã¾@štÊNÃV<ìürϨÉçd«‹Xˆ¦gêwÊt ¿˜µüÅZKu\Q¹% âAµ©µõ©zP]©Ôºú1H‹€…°VG}ø•Dƒ’*¤!F¶'? ÉÂË©¢Å% ŒÅÍ•R!oŽs´åTÐ-Î=½Úˆ¦W­&æ'ø9ç¥ôíÌ0ÝØ×M±ºÂs|â»Sä=5ç ¹ðíL0ÕÖ×Íï)cèzb™Ì9=.|;ÓKµõuÓûž§·‘˜S­9§Ç…ogz©¶ò¦ç!5bZÄi¢/Õ?読þÑBqí~gÚïc¶ŽÑp¤ ò–9Ý|Î;¡fé·ðúž\’H‰†LpÎÁãÂý(h—î÷ÃAéþÅp:†¯ÿþƒËÀ‡ŸèÁ%ýF¤nçÖç¬È¼ÏA­ûî‹zñ;xeäÚn¡ë·'Ã1Ž»Âk<þòXUkEõ@ÕÖ´!PG„Ï׋évÃÈé3k^qçþùù88GÃxäÏbÚ¦ªÏ銵€ü­MrÆû©Ãýñ¶ºOO¶Lä9Eä™>!–è³¶šÙ§æfuj—™ÝëÓäDŸdv*¬>­"³»ü>ÙåÓÌ.…͘եUdv—µZ¶k™} Û4«O«Èì>W]föëz¼Ÿ&fNKN;v Ó²B7áÿ³ä?Úè2Ó *ÑÅ-È×Èèffä¿• ’ÿ6Vîâ~“È(ûùÑðò>* /U{Œ®%ZDÃK‰Ç‘zúûõÉ…Š‘„,¦X¡ä‡EÆADö²@›‡pÎ6ML¨äSøë¹¤ÉŠ‹‘ ‘ñ©*×þD¡ñž‚axœ…b†ÚÙÈÛoœ¼Ü;øi·y´½|1ì˰‰è¨}ÑÜLJ÷ãb¿î5OP½ºÍ3õÂI-ʼ“7‡qK€kË“þˆúÆ ûh‹Ž8ÕmsdqÄFå;lQZÁç 1¨’ÆÈB—©‘ +ƒ1HoÓÁ‡È»ïŒN•OVWVTy¨îó¸–£^ØHÚ#\âéhDW¾ ÞÎÁÛý“í_{‘*÷ܪK°hŸÚðøW2‡mÿ´/†j±pŸê¨%4NXV@(¡äYûWìKŸêŽ>›~(!iÁß®nÆ)¦&üxüˆ²ò:CÔÉ÷业 Þ,«rõW³ØÑM*t§³eEÀ“ùèÅg磡U"vЭq@—Ã)ñy•Ôz µ„,\6ù|Ji~h]è*‰œcaŽÛá$`Ÿ)aߨ­âÝgÜZ¶wJbr´H½À”Ñù ŸE츈Sõ(Éò5ºûü•Ÿ”ÿt9¸åðß×øÿ¯I€ûŸÄ~z8x(+êPlz4ØUyb×BO:ÕvÓñã÷ÜnÝ©—õ¿‰S"ÙÛ•Ðg"©Íçp?ô2} ÿãœ's{NØ•v{l)Î0·ƒÎþéN€w†ÛsnßÙUÿûÚUçXI'ÛQë½ç·œ¾©í4)½¯µŸv¢éQ¦4µ v£K<Ñpлԩ)*"ˆÉÇ?cêËáÀu¥ä.0Uò ›‡‡G'­“CVÂê“ö¨…MEõѵ…´àºiö½ Nˆ’ó¾ú~cí´¤ÕðçÄ'áèãZA,)=9Åa¾9iÖw[GÍW¯O8Zb²Z-®&'}ºÕKYŽSO®á8>Šíƽ……çé 6'ÇgÚh\,~¹l°D¡Ÿè‹×Üÿ¬¬mT“úŸµZõNÿó->rÿ] Þ˜5A HDÿKhƒVV7«ÕXä¡•×{Uþ¬Œ-á§‹!ð`êt Oû?Û¿òÃ_½ ç”Ÿ¶Ï®+O9gàÑ#$çAðá‘× ô\ £Éö¯ø/…6ùCEAS_>Š–©T––—Ïýê¡âö¯øï¯žÇ×:üCÔ/‹÷ûÁ?îcsøé>Vùeq¨§þÿí¨ƒ½ÿ{á™Nu«6àsÚcþG¤¸ÿŸTWïì¿¿Å'oýw~<¾5¸ý¿Žÿ»º~gÿÿM>³Öÿh8œÜF×Üÿ¬¬T7ë¿^«ÞÿßäÃíÑûßíp»û\û™¹ÿƒÑ0 'ÃñWbþµû5Iÿ7ÖÖîöÿ7ùä¬ÿ%øùÌÚÿ JþÕ}\·ÿkO’òÿú“•ÚÝþÿŸåƒÃŸ›û¯–EÒ_>™¢‰Ä¥²%}’þ—½å7þ‡¯Mç*l²E·oVübžâ»wêv>¹ûŸÑâVú¸Fÿ·º¶±–”ÿžÜÙ}›kÌTýþû'%ü÷)ýû½çyhÉtœSæe ù[3á“7aû"<÷ª°h•],Òß›`NÔ~0¡Xz^sЮ¨lû§£ ¢ÝÎÙ”rGae 7ÐwRøä,ø¹µÑQ0  f,ƒ¿ÃéÄë;a7lS“E ã~HÑÜGãáǰC1<%\fœ[†œ¼+õƒÉ¦W…qºC¢éËXÚÃNÀy˜ÇÁ/;°AŽ’Ã&ªƒá$l%6"Æ@³ØŠÝá€ÃŠò½‹tÜîùa#²Ö2†]Z°ÐCIv¦uñÏ’¹v†í)Þîûz±–aØàŒêö} +¡ß‹bÀÓjQ]k&oUÂïNMBJׯ> å£ |4®Špŧ±ˆºbsøawò‰!!)ÜËì·? †ŸzA眜”7•ò(¸Cmgø0uк`8bÇ…|Ì/1š{Í¢yI3#„yÆÃqTQÞLy?Ù<ïBBu§öV)±y0"¡Ic½ô.1¬×4â4Á 3DwÀ¡, L·?œzÚÌr }vt:T𲳏"çšÁÐ×ãPòN‚ï1²{ªx'¯›ÇêøàåÉOõ£†‚ï‡G?6w»êÅÏêäuC5^5öOŽU}WíìŸ5_¼=98:V‹õc(¿H/êû?{w‡Gãcup¤šo÷šÐ´yTß?i6ŽÂû;{owá€*)h@휰;9(QWRÍ‹«©ƒ—êMãhç5ü¬¿hî5O~¦þ^6Oö±¯—ÐY]ÖNš;o÷êGêðíÑáÁqCÁd¼ÝæñÎ^½ù¦±‹±•÷1únãG˜‹:~]ßÛs&Í8s{Ñ€ÁÕ_ì5¸˜Ýnó¨±s‚Óˆ¿íœ`\{%…!7›ø¥ñ®“¨ý\’6ÿ÷-‚—j·þ¦þªq쮬ÀÎÛ£Æ*Ìÿøí‹ã“æÉÛ“†zup°Kƒ=nýØÜioy{Ç¥·ÇôpR§Ž¡ Ññ~ñö¸IÀjîŸ4ŽŽÞž4ö‹êõÁO cªîTö=˜*æàègla@@/©Ÿ^7àù‘ UG )çΉ] úžXsTûW{MóNß`+?5EX£æ1€&±ÛŸêÐç[š2. ŒŠ¿6=Ÿ%Z@Õ|©ê»?6qØRÖü¸)øA Ûy-à®Ð…÷_}fßæ'ÿÓ¬þmôqüWEeoBþžðŽÿû¹ôÕË="‡»›þcùùÌþóÚ…³œüøy%ª\NÿA€íÝÐ×ï^¾Ýÿ½¯4û¿—ÍõÞCn¶0¯ThÓUà7;ÚõGhvÄæjhãæ¼ø¯m#&½½æ‹mkËV|Ï“äMe«ò<ëǦº_€fŠÞÂýBý¨¿ •¢õŽJy‚¼…ð…ùÎ8  ôR¸@jtŒFZ‹ žGg›ÔÀ›"&\ª Iô8€1»—ùz©âÑ”û«7Âè'þÇÚ›¯ïc¶ü¿þäI­–¤ÿOVïèÿ·ø,“·ñ’ÏmøUw1ªûao8øà«g#úûÎ0œT>Шݯ(ÅçíÈZä>æ F׈[V÷äóqáCH.˜Fú[ûðs¥½¨…Û7G'"èGíâ4e.Š™ Ûb ¬E“aï‘DI¨°?ê±| ã÷Ås¸‡­Q‡ •ë$ü lªÑ”Cøèƒ|5ÅS‚Î"2¢gálq4†Sš†Š)@ ¥ÅNÐÒ†¬ÙÑWc;k Щ^Éκ~ØÄI9_˜pŒ $)ƒýp“R¶ÑñKÞ‡Q'<‚ñx0”ôÝ} ý…¼Ø4ÔqƒcKÞbv…ÔëP·±hI›ƒjkÔT ö*Ã*˜ú­„î*½­÷°,,®bd·ôۣ˒â\ô·$†kçÛ¤t.OŠ6ìÀ5FtÓ6g»A/ÞFÞc¿óÚê¥U’–·&C4QÇ¥æDy}²ï %Z* Bë:m±Ÿ—ç´  ú§Òm³o› K£:¿…É$X Ÿ&:?+è.Šê¡´U~Ó¯ÀÚ)zgyÈÁ´PƒÐÂòªÀþ]l÷ÎßÑÀ¼Äž^eGd†Ä†Äчå§Œú?`v´Dý‘*p3Ü5¿Œ¡oL`kJG‰=øÕ?êc<¡B¹ZTÏž©ÂSUV*ñ*É>{ÖL¿kÊ@úýà¦Þ§í—8ó²È1¦5ÔâLMöÓ9G&˜ËszM pp ¢ÁÛˆÒk„› bÝÁXð£„ÈRg ÚÄèB °­é ÏP(Ã9ÐöpJ”á`L,~€âý©úËVs¿q‚)‡HÅÅa`K®)ÒðFƒJI õT™Áx¼xöìÈØu“¼RÎPA±`î´Eç‘n¡l®‘ÇïâÒÈ #d:Û1ì Ð(:`yý–=êìu[ÙŠ•/,0…PÎÔɵJj>L %¾@‘Äï…]ØöjÿD#§ÕæáV„vg°4Ú“•vƒ×¹ÎËŠ kÔÁ‰l˜™Àp¤ "2vM®¯¸‹LŸDÉÌc »”­;!Z~0:¢âÛªQ¹püöððàè$Î0Z®jdN¶ÇÈLjDŸÑ"ì#% ¢'dFÖ¼Ùú¢eÏ\`%ñ+Åz~oË<–-úyô~ífõû ùâÿ¯Lê#ÎBC^—+[jK…˜H"Å£WCº/èA|§ÏB‹ÖÊ”«!` ìÕI¿:CZ[~ˆÿ.©êŠz¬0aᣕG¸¸Ø,¾y®jëëEò~q‰ÅÂBj(WÚ{«ÎQö˜âùã&žrÏÖ$ÚœMmåö&>œv-.ó”©<*:oRCÓÅCŒ—µjCdÅ l g}ñJ6‰@LížïŒ­“lÅÂ0Ä.Â(Ä%l<{‡X]ünoœ-‘Üé-Â[âú3ÜÚa¨$/]—÷q>¹Àš“ ò8Šü.ß„ü^ˆúÆAs=úˆöÉÃbÙK²~í³Í ð7í1~6í„(G#žÚÐù\,Âbax×¢öŸþ± øÓâ¨ADmË4ˆÝe$k4®zø>[KJûGŠo¢÷ÕÓ÷kO¯ŸºøÊìDháÏlDÑj¹ïoáä5zSz«æËæN µÝªàt]¢¿#ö¥ªâ‰ÀŸß5ûÁ©°{£$ù¡îD(ˆ"ºÁuS˜Ó~ô›:¤ð \#'t<’Ð哉I„yÖðþÁäIptЃ·ÀKÀC(?g°Ê ~Â6ÏcAùy×ï‡0ßÄ!«!ÚOâÁY8AfúP†öïcðJ—S›GÕ‡²ÁB=ÙH{ 2¦.>èTôÿ—t0G&¹¨ùï)Ãê{J­ú~õ´$dT¹Ca ˜Ãýšr[—f4x±¦áô2É—!^¹°d€A9ÆC×ʃÇüËÓbtq8ûløã.Ö§$Ó©ó)2…@ù§èä¦ ßƒ'F ÎùKW­=Õ„Þb",1v¼"™ φU>5¦m—I®\1ɯ݌ÀæÇÙÔQÓC=”,ºª!¿RÌdv¯3„³ŒžâŽ NH¸»¸%o?øÔ:¤Ÿ5f¯Ñ\é Ÿóâ”Trê†üc¼“ËÔn·H†&]°I·ÈáPHóÜTÁMŽô6 ÿÉÇ5å5IL5h'›8…§ƒ~+¢>:ÈJ੸Ѣ“Ÿ¹±äŒˆ¡²¸“ŒMÅ0«n8²¡ç ôÍœ0³ùÙSJðäsÏn­%| í—……åe:ž†}<ü­bäZaŒÎ÷çÁó-rIÓµ‰ ºáâ'2? ×vO½«4C´€µ³¡àÎ…·÷Z Ú|žP.祩=’PùF|È‚õ› lÛrêêe“­ã¾Œ9›x+ Ëur¦6–¦êJލ+¤)/ç÷;ê¦"蜒WsšbKéa ñ\â1ƒ>ÌC’É¡.º*WÒôÄ"K¤Xê[ãþ‰ZC±ß¹ƒAhvBî×ÝôýÏfe¸V[2Ìašei@­É")u㦟)'àHEý÷ù)3ºÄšò 0gsЙZ6Ô úÑ%%ãƒ3ë¸}í(AÁõ3™„eÅÂ3ƒ·BmræŒrëòKêÑ&¦×M¶1WÞu´Î^&<æa‘rX#§-:fòqd‘6rÚ©é.'³ /˜ÆQs¬°Úc’0 ܵ‚"óÓ7L¢‡Å99òXâ¯!TTvî‹ñð’ÞÄ…¨²f¶ Ñ²~ñL úP—š>bƒ%¥Gm•§R„uÖÃS=FÖ&æÑ˜´šAsu¬ãÔ´1ÞMˆ 1 ÌcMµc¥X^é'$Ô‹¨å\e”ŒgûuËEdAWh\É­c?±Èšiç!'2±¢Œ/­“[¸ó–—Õ«¶<,)ßÁ)J‚úãi5?n¨éè|ìwŠPÇÿNaÿ„ÂÖ|§s‡Ðfkÿäàæc+ó¬)o\;µ )hOÎ0.ˆÓðÝp¼1 Âécý¦ÃZÈ×J2à½t¯î‰ugœîè«î3ÜrÎQ®¯èúáC²ííp`eúZ¾Õ™)nÄ>]fÂÖ’R|hÆO&ÏÉ.Ôo] êåí㯄ü–>Ûˆ# Ú&q4Â^é÷ ÿÆ~¡jK„Ï ÆÔsÁŒÙf‘õäm'cž¡mÒáö2X.ßPW•.ðLã‰ÜçYº {ÆZûw¥ïõô5àaÍ›õÖnãÅÛWªJïeÂt{5í·üö$ü´ô5¢Ä$õzÀ§²ŒÒéðâ;Lñò˜î°´JÊÓ-´&ã ˆy?Ýn/àxGz-SU¬Q¤óÒ@\~—ŸK³ætŒqŠÅÍØ’|eÁ`€÷†½Ó릇Å0ð„“óEóäÐZtc‚)ÕùY âdzÀHilËßÚ(0!œÿ‚M¢ŽPñ,ÐV~DÅ 8Ðòs ^ÄÚ’w¹ƒH¢Oÿ‡]•øHÞN/ðÇÖbäBž9óVwКP_z© ÇÃ7xë€ÙѲšnp8ØÍ;À¾ö‡÷I@>®Z ÖT%¨…Ì×QîÝw8ÖÅ‹\`@©”HŸl ïN \ù¹u»“Yp¬ Ž¥#s?AOe¿/âÒ7ûµf–èw‡ƒœ¿`Ú$üˆ‹üb ¾`˜Úß-Ž/nSSË슚 tDw‘»G²¥®ozI êã¬øÁe}üƒüm¥Þ_¥žðâ&Öú¥Éì†+s+!b}§1+¿¥B¹ E‹™íäU*¤¥¨IKz–:þ›Üj4*>80a´>ÌÖ”;RÞú»,|ÍæÏ£%.Å#I#$"þ|%íÓÚI—jjg&¨Ó-Ü|Ê©ÅÿîÁ s§g† ýTßûg’$ò0‰ ð.΃œçns­Æþ.,5¨øI`N‡Vð`=sºyú×67.8Zßi9lÖár?9×w±î?u¦-ÝFò<ŸiH$‡yò4 î)g{þÅ–1ò¦;Fi\Ž^9x®ˆ d×€ƒ…c­uÒ8>a3¢÷qÑçÏÕêiI­|~º‚ß­FÂÕ'UÄF—ƒ‹o¿m *ÆT?]}gbXöL$ÙT”<ØÚüA´ü€#kz¦ó±Y|§_ºéû¬fî1¿jd> NlaA`9Âb‚ÏÕ·‘‚\gìÜÄ}+ðö‚îߺ4°[nOîz5쬽‰e³õçÙk¿7š$Ʋ§ùeÁþæ0w@þeáQÌ c D74Múãg”³šÔÆí@qgZ™%f€luf— 3ÐL3D‹¥X­7ƒâÝÞ]œ;·µì3w†6îYv—±z‰l/»l‘a6+Lù s8ÞlQ;Ó¢Øv/æfy½.Ýb\{ðcKµü|ïb†4z•-Ì¡ût>Îð ~·õýÖ+‘ÁJ8¸zíN™o· ¾lªÑ4ºÈ?žny¿`“Œ1mT/žÊéacž‰áõ7d™Rû_È1Ysø[1LÉq}+~ɲµ®<ãÓãáCnNþÆp_ÈÜ_spZñn Íß ¦½žŽ¤n]®~)ç6þ×qq‰qÜŒ‰‹ù%­ÌÏ>`ä (—ÛúVu‚1fIO·¾šGª“ù ÒÍ9EÚVö@Ò£ÞK©ÁÜîÉ8ƒü …M&ØÉ…«Ùå|,á©‚’W9<¦nm—¯”¤'»5ÕT þŸZòuäƒÁ¾œ÷¦Z+x1Á·²ùP4¼Mð«¤`‘ºÁ¿ÇìiXR¿•Ôø/gO-ª¾ÓxcÉq)ŽsÁUú®;nAjnÍäi/f’¯ø–A?K]¾ñY”ÃFÌØ–Œ8›J¯¶º·ÂûRè¾IŸÇ³¯¢çÛ‡¹*w2$Ìø¾^ °¸ƒÌ»«\ !W¸NúºôáC¦<_Év'xÀ±m|&œÌŸÂ’áÒShÅ4»L²ávGd+…?–S§«×€Å/hrú[±híXé”b žÂbûݨmÜ(Î¥ˆ¾üMNªm»#‹OÒ-,ä´œC(óE×9¬îdx«ôÑ\o6Š›_=XjOôÕA¬ypoô¶œKc©bJ?ÇTÒÙŸA s$±¹øæ¯bmùºWÕ¬-Ê1˜;›ØÛ[ân݃+a4ƒ»5œw¦Ø!/µ¹‡üÌ“@Ü2³š(ëÊ#îKK̯qN)GBar3ƒßϸƒÛN“™ôøD©ýmùowmÇöÂj‡á¢œæ(Ý&zÙMô’M܆@WÓXß»ÁjM-ú¦å²ÔÒ:þ ó¬^Ì|hG‡Äúiâ™\<s³W'ë¦LÆ'œM¥D¿;mp¦µšº{E ôiLJv%˜H͘‰$ßÏ@I·l ÷’šŠøåm`åªÆJnÿ6Ñ2fÑ&„Dö³È,¾°ìñ§&±IUüÞטâY/óY­¸PŠb^K5<à ŸÍª&vŽõ*µ{x¤ DŠ_ôr·”U1³’‹jé}ƺÆ?oƒqû_¹¹än¬¸\æ,ocC­ÙÌÍc÷Ÿ²§2h¾±†5Ã} ^?S¥wÎUJ4bóéŠet Nc³×½÷Ú3`ϓ۴T¥Ð¦êeƒû¸f]Ée¦O:¯3tiõüvp1ìa>zB€rY]`$GŒ'†ò&™!ÿ§h:1Ééd )°¯`üaÁ”&:º?P€ïÌí’ÃEçJDq×Ú>¡ÖH²ó¢²†9H ÄAt8²=F•+"ƒ£!…ÆiôýÈÿÒ0²tß®sNju…÷™½rJΤ0\ Ed®wdÊ¡1×Ó—\¼Ï9²ÉK²§à«1n&1ÉÀonèÊËñ|]§MÍÅxx·à`ο°ŸP¸Û¬˜É ü³Qfª­Á ΑpÍ×ë(›d11ÆMK-8©Y`ëÊÕÌ—§—À©qž~*¡5»Êéd|yÎ_Óä ¿ ¨t'“„¬;w¾Å¬(K3Æ„±¯I›šeî’ë¦e±5ó_fPvus!I„ñ­ï _™30À^…4òq›ÒZ1¾ÙH‰F\pNÌα6ú[!6›vÝ6^óÌsÐz&Fòx2pÚ¹ë¹f&·ˆÊ9Hœ¼¸ºa"kó?\|}ŽÙù09ГTþxt—ÿá|²ò?\üGæ¸ø²ü·‘ÿ¡4_ú‡>&i ÜhÕPŠî7”\‚@b£›¥€à@ƒ-#i¼6y ìgsäÊš ñh}I¦šäÓ®_SÀ˜Â’ñÜ.Š[Û*x\úqÍ\4e³³ <Ôã,¦¶ÄÉRÕ•Úšy¨u×…nI´ÕÅT…38QM,]ÕÛCŒµŸà\í ÞL–Õõ!UÎM©]FËѰýÁÉ!§¡# ¡U¥g†Òr‹§1ÃØèã¼H0B <¦ÛüÃÄ©Òr¢.-×»T:ÂT“>‡‡ùÁ b'm¸üD "Ju: ‰²é])3Ì­¼)ü}f0à†üÝŽ°?+(`:2$ 5ŠÄ!€|KA&ÁM€ŒéóÖÍ!ƒCú[âqhGs).ª|º¢~ i*PÝ‹BHêå`©WÂxÃØ›ìa;I’WÇœ eV¢ ÐYqR®$Q%ý‰/sÓ:[Ì0*Ú¸ØÂÔWÓ妑è{ ÁçŠâm Q ß"…ÖHr©Y8™`„ òɹ,,OBZs0"øànn–Ôj,î$醉̘àD|ò‚®× Φç@ðÇ£a$ÆÌ#ÚÊ2׿…p[×·zsÇ„ŒF3Ùð›zÀR :eì ;k _âÆ°Åξþêɘ®’cKzýòÈOÒÀ×ÄIÎü â±låi® ”ç ìºukê.›ä¦b­i/èjíiúå>¼*ç!c ZÀ‡x³ý¤[,fUûù¤×£ÒxE^Ìè“ ´^5NHZ+Kœþ6‡…Ø¢™“]ùØT¦XîEåÔBãY¦³Å¿Ï®)¼ãè7ïXÑù ›ûa1I+ôŠÌˆ6«š#lf‰ÆV´KŠiáÈù «è VkÞ9"uÎì[õ½½þ7ÎÞ˜1Ws§úâ¨Qÿ§[8Z ß-$Âiéò&”–U(;|–®q¥¿«mº`É\c7k )¼[z}÷ãì÷ø1ÑË$ü[F±«Œg<9‰-—xo&›Ñ»ÕDªÛ±Ír[²—#£­üйK”ýÝ$ZAŒ2l®% "iý«ÕwŸ[úØú¿.æ<î„ÃNpi_Ígvþïê“ÚêšÑÿ=YÙ€òk+µÚþï[|–Eùç¬=éÿVcÝߺZyºYû~suÍÊT`yiIëÇn œkäæñ¾œþç”ÝZy8ony¾,㹃Æ7ø_n*px÷u¹ÀqJYÉÀyø+ëÕ5„<€zÊj>^œhÔ IbÀdêäßó!þù¨iŠRÕqÖæs¼<÷G£`@&'ÕZdmhð9Œ¤æ†US«;-¼Àª¨ß„c½Û Ûœ%ÌŽ‰U[4‘qÐAm#Íš• 6’©Î”1䎳^З@ê¨ÅÊC€N8ð{*„v>‡˜ sR±!1Ú€4â¹÷+IqñÚNQ!R†RºËþ´7 G½€&©3CÖ÷úP8hcM‚1*hÓv@ËÔGKŠ»ûö°× ÚØƒ¬ˆGr/­CEãµ7ĘˆåÕCˆ‚g"o䇃M»dU.Ò?5ügµR©èWµìWÞ¬\Ûq>²õ«/Oš­ƒ·'ȯªõjͼx»ÿÏýƒŸö[/›{ µH*ä¨Ò™öG‹N“FUïæÍ½Œ–15}¶Râ)H3Qúñ”²øZ§@¼N¢ $ûÍÊæ›JÚ›è$=šn{0éeÕÄg8Åß *õȈ1{ªŽò—êu 1›]u±;¡±/:Φa¯C)——ú¹Ù­Yw< Áé~¡´{@ê8Ç*T!pùç*ß=Ö<„N±9>ok‘¾|Ê—¾Ág$òb8‚Cñ•_¢3ëBÛô]÷r¡p0šN9±!æŒi·ô#챪Õí$ÛÒ/¤l²›¶÷6æž:¥¢UØý­ëj þnyqZÀ÷€à§ºsÝ«…Kœ0­Ý˜8V‰ „\}‘3 kø¯;®@þ5Cèùç­q€4Є/÷$ƒ),¥T³Í+Ì¢é|½+ù3ÉXI ƒè‚{L`© ¼¦¸š%@°Mø{±ÈM0›-ŒHkûBBÝe2xôñѦ’Ž$“ÀâB¬W*Uë£S!óÀžÆ÷≱âÇrzå»6å•A˜EŒm™•ƦRšÕÜ*REè¶®Ÿ€nþx ÐdW`0úëá-˜‘¬Ç‹i+™´½ ߯áщ `.˜ö8ÑÎÅvð E{2 -Y=uÍSªfLš.#GG—Eµù°A3¾˜ü6¡}Ð1§+§Í–$ÈÄìs ¤Z?ìïý¬þ€¯'Go÷wèÛÎQ£~Ramâ:qSϬìCðfö8ÀOã‚áÇöÐ(5gÚP­pN é{I"l÷kèáGJåËþ8øÉù3àK%jiþcN”ãGÇ̓}]¢c•X×ýóóV?˜\ ;ÏôÓ¸pÍÀ Тk¥Ô%éûå^ýÀ·yÒ(È þu@ÃfC¿‡9Ù2A7 rfl@xbx¸â|K‡„MÏ|ÞU“~13}k8§µ¬Ä¯eͤÐÔÀG¾*Q«ZtÁŽ Z¨2Kt0ç̨¾âúÈ£Î1;ÎÑ5 @QpÞgÃm{¥xÜ »ÏO¬i­âÛ<]sä#I¹Žœ5/|’sm«!@ߟpæ¡ÌÒèœÝr>öM+¯µ9Ϫò·&W¡ цùðZ×ÊÕªG©‰*gQΡˆÒybnÄJ×–EøÎ¥Ž¢«/Áµ8ˆSWûä`_Ò$7¯3°À&4A¤tV/Ä£_dí–"+ziªœÒÅ( ZLÊÝA ó+`“-56£$™!{ÐÄá8äâC"ÒJ®l)Oò ÂÑY>K ƒ‘°LÆrŒˆmð”d/Ð$0>6zCÆiBõ&šMßïvö„x›m¡/»s|X-éP›‘÷«5zµ{x #a‹~3"•1¤úáac×>G4ð‡ÈMÎsxB)Ö)殜î ÉÖ¨­§Æ|Â=Ï0³)÷VÓðãMô9iúM•EÜgÁ1‹Ò;íÄÔ~F3DúEI-6Ås!qg°e–`3m¢dÆT~òÚÚ“r<˜D_¹, ~®cK¸ëX]*ÅžèiÅ~“dSîðþ9Þ' â°=¹uçŠÍÝ *WN$¼(yàá[‹Oݨ¹rèÖ¬1»ìÁãÇÛ+V_ÎNç§ZjÅcýATÁ1G¦qó²f½­¥6Íï•Æ*þh­'£„¾}B4|5£­V[Ñ,²fÓþY0žQóªyôF¹ED¦ÑѦÂkŽ ^žÉqsXßùgýU£¤„É%rxxtðªõâmso}—pÁôÊÜ™Ü}î>wŸ»ÏÝçîs÷¹ûÜ}î>·þùÿçÕ1ûàflow-tools-0.68/contrib/pyflowtools-0.3.tar.gz0000644000076600007660000003033607505514562014755 ‹ÊLì<pyflowtools-0.3.tarí}kw7’v¾¦Ïê?`˜ML:uó%#Å>KK”ÍLqH*ŽON·I‚b›ÝÜF·$nÆûÛ·.Í›d9ñÌy_1Ž-u P¨zªPgóq_§qªíÝÚÁÎWÂgw÷Éîó§OáßÝýÝ'ôïîÞ“'ô¯þ|µûüÉóƒÝ'Ïv÷¾Ú݃¿¾O¿úŸL¥~"ÄWI<¢åd¢¾úî3[˜ÿN£~ò¶ñÏÿÞîî3žïUóÿÜÎÿþó}œÿç{û_‰Ý‡ùÿÓ?^{žNâHÈ›TF*€Ÿ¦ñ( ¥ljH¤? ¢K"²M2òHŒüÔ÷^Üããy¿Š7ñTŠIšÎwv®¯¯k‘LkYl«Am$wþ—&aÇJ¤'Äû8{†Â¯ý¹ã ‰t"Eè§R¥â æû Y¿A¯7 Ôòp.ƒ+©Ä<΄/T0Á£<ˆR™Œý¡i,Z2=…Ö=¥ð•PiœÈ‘ÌÅ[?ù N³0œÊä‘rX"fþðƒ)EYIé9cS³hËsG]ïä•*5Ïk¦bG©D :5 }¥6Þ•©¸žà ñ_Ñx©?ã$žBIJ¬¥W†I¢§ ÄÑÈOF0šY–Vj¢nIÍ’ø*Áà}+tLJ!åƒö`Ðþp(·ü  tæ‡4BèÁ0N À è&4%E"p7ü*V¢Ô@3ñj¢ˆ¸ØûëóÝíÝ=ø#vwéOÅ ˆ`·añ‡KÆq-Î#-¦*.ÝM sÂt—UššÉa\…sQPÅÐN@ |BŠ”ªÃòLIÏuçêb†ÃÉÆ9“ä'ŠÝh¤ i¡·S Ú%=ciž”Å  ¬²]Q)iµÆ-qy²èŠ( Æs^+¢™>"‚"Ù0•¼yéÆYœÔ²´ƒ«{Ç*µ*HJƒÈÇ~1;V–#.4ªJãaBƒcîð‹{Uâtšb³µ¡*ƒA¤?éuL=UzdqìcÐeh3€òøêN¬Blžà48µ*C9Ró)°/ †Ä{`®.‡Ùؾvš5£&Á,5Š·„ õ³=¥íY¥¤µŠ «4?­n¯~væYóŒ¥;ò¿3èô¦BåŠm[h”ðò…دí çEiœ†Á 6á‚ÃÆÓY@‚ã´æ—Xƒâ»ÜZÂØOç 7Ѓ9$©t;rDÙ(ŸÈAÜhÇ)˜³Šóþ4‘òU˜û¤ödøê¬Qñ¼úf\d6…òE3 °(u|8ñ£Ë€ÕI¬‡at'ÏbœÀ|ÆVÓiðú?›Õfs1È‚pÔØ!¶›âǨ³w4s^B³ü©æËË5¤ÈІ¡çyVáÇSšq-Cà¯ü‹çu*‰.¾H¼E?üÇPåpê%Pødü|Þ~ßl½þ‚øÿÉÁ³ýÄÿOÀMÜÛ{‚ø~Ïž?Ì 0¡~úüØŸ’`t ?¾­‹Ýý½há¢[ pæqD r&“i¢Ö€U<„NÑâÊÀL(;€Lñe TpCz8 †à1ÒŽ‡®µ*,éÔÑ )Òâ5i| ˜þ5³¦ ¶z:%ñ‚„¦¦FMcQÊ0ÿó\FÜÍÔÿÁ½A —lyc`Ùõe,Ô„*ýC$^ÍI9%`ÜÙFÑÜÉ }(ÚÙÚÞòÎôpE)qc—™Ÿøð»¤ÆÄ¦¶ðÝ–gº½ j[L±«*ƒrdÇ̈  ,Ì쌆ì @yÞØ–Wì0¸Â,`óÄ#š Yš-/—šGÊacDò£¹ˆÑýC#~™øS0}1’Î@©&¦ PrËËO$ôª zSêzëD´0¾a|%ÙÜò ËÏ‚AâƒUX38Tãà>Ô*äÄ2B‡ñÎ…îM€î´‚‰ŒãËÏ» €ûkàïLú–cMoªø {E!'`ƒžÈ*Jè–6 SœC «{§–ÄÐ[@6л-oâ_ñT;râ,&^CK=e-EÉ%Ér Á“L® qŒÉc¹Ô¤Rµ¡§)Á­1Àn`‚bÂþ†ej‚ÃïN],¤¥¶ ˜P±1ôR»­D%‘¼æ.öiô¢é}ˆ(Â# I£O¢' À:¢F¼’Hû)šœH:Ô‰ JqÀ€˜[H.j-d©Œhñëv˜vå[}àW1NN‚ 9a÷€JAoz\©Ð¬q…!Rƒ2A C¼ Ax]«&$ÍlÝòVάËÏ*öIOÂ4˜‹²¬ùq ¯46­š2+ xö ça‰Ëp˃_Ó€†Í®çXJöm§`¢)è¡Ý¢a´ ¦ÍYAÜ¥e%Pnk¼ì¨ò‚lC9-¸ª•:GÒà-ª=+…@¨Âa{¢& PhjÄlê%"Ë¢C.í–g§ˆVµ\%0° Ò ¹ ,fêP”÷*d¸Øš¹2ºå•÷+ÀFt0XbÓÅ>Hé å%,|²‰ŠÃdl«…¹ª;d¤hBÝuÏë¡Ná¤HçŽ4+¨b=$Œ«ÅòOëÓÈ¿–>ÔÀyilu†rL~³²sš6Š@‚FjNmÒ‹¶f¤9^2A4€€ƒu€†%6#CÅ–bH‚| ìá–§Uˆr¥ z¬'ÏÇø›–’%cú±Éf<˰ èQ¡ f˜’µMâQ6䎉ÁYQE  ´Cvµ-1Ðl¯A‰Y–’2’sŠ%Ây•ÚqÕv+öûÍ‘Ÿ C,0ös†ïS4Æ ƒ¨vI¯\ÅÁH‡Ao&æÐ¿>Ôë< ÞÀè¡a.ìÄ6I 5¡@ì€ñè.XÊß•e´±µà#ŽHøQÌV2„Õšù—È·òP™ 0¶Qµ5°IýÃ0CÐmÄŠ>à`ý:b‹ó#Jnû%D« Ôòz¥p؉ƒg¸l”(e)Ñ©c8‘¡D¬¹‹8lÝ:) ”à'aÕY³˜h¹8bíK(.KU@jÌ,72㣃 dÑÒ h…mP‘Um| ȆÍcRº ÃæS/àÍœc2¤_ƒ”l¦X¹-Ï´]õ(1 fvo Ö“>ƒ¡®ès˜úŽÁ°â–dˆÒ‘˜ÂvŒY²ãÅÒ˜‰½~Ï×`;Mè‘*`œh”#Ú"Z/S0à6½½3rÜdÐ,fq¦BnÔéydx2Õ¯0JÊHBwÓ-…DÌÊÓÊHcúÁXý6øàH|r† EA£Á-ë)cÑ*QLÏUì<ÒîÀ@á¶Ù:ž¥}İ3÷1¸PänàáhŒ²Ó Ú¤`”—§)³³Åž!^ y@Oæ ÖJ¨¥œ—·qø¸1 皌¯e<Ójn¡”ÖÐ0ß'ß@m-Dû¹i@H4ylÉjÙ1šT+¼-5ÉÈtN¹Ëk•tU›[–Ù6%­_TZ÷‹f¦«¸lÄ6ZR@êS)Y^x J:Æþ!„_Ɉ¡Ÿ)v?,ÊÄÐ1Ùƒ!°˜ø ãįʼn(T¹´Î«J|gMÄ$Œ^¡¿¦¥KÕLWK]!QE6XÂ×€Ez©i>Ò¹N¯ ¯%Îþ3>Sl õ.ËŠf"T‘àz;ZX JŠ"(¸y^hÃÛYj+ŒÝ;µt}ÅÚˆüTÖ:ìÓª`pÀ$-XR¸.@Õ&‰·R×2ŠI2-8ÒœÇWØQd¤`ð³NE2pܘáD7d@iF†„£+ð€XY"/ýdbºŸ ¬p4ä&îÖƒªUgo‚SxR $Ãå\3 £þimJŽÎ#x°á/cqä…²¹5Hi¿‚,üÃ4&äÓ8ÌRÒAˆÞVXè-¯k–àõb_àZ‡·@?`4N¯1Ž\¨UbÞÂf;+ø,”d Ž_“¡œÂJ°µöÞ§}7'%‡QÕzÀ,d'@±8jKTMµžÅ!‹§~ÀrÈL¸)A¢Ibäv|¬:èmyt¾]`Ô«:Êð88ë ·SŠíé±Í¥ŸÐ&Qî‘–"-1¯j¯ÁV„ÛiìŽô¦"!(½Åf\ 421]sÏÞ*jž&±ÈxÇŽ/ÎQa6%j}·©X? z0÷šŠá:A "äkÇñ%@«m7Í“F Û`kÆX†¢r~݉Xϼ£·‘9Ô0¦ød4¤$ŽanßRôÄ„$È*r•Ën_Í4äÐúVÊ ËEºÙÀ˜ŽOb‚8…=ºq®i8ÔÆÝ¡ÍIž–©5®Xˆ6uD¸èÙQ‚h·’(ÓÉvœƒ}Vpóh. }nÔl-õ žs°¢0²öwÀ3 3Å>¯T< L¨M'†ä8ˆ袗¦+°†ÆÌ+ÅR‡fÏ8N|òíŒé<ßÅù ` o@®õ.Í$M½4ð·º4$wñÐ6#šê£EÚ£´á# ƒÝzeôÿ9©IŸä¹ly8]•|YLý¿N˜‚tš-ëì.èôi2„Q¨à+z€¶f˜fL«a®RÀyº †“ “¬Í¢óý4o Ð0ƒ}_/X gYHH`¼„*œ9ë·‰tޤºl³ùɤÍt–5ï“XP8\ã`SM ÆM=] °$ˆ£z%jð"#ï@9ב“‚öÄÄÔÙåÄÑúÞÄ×QÔéLR*àŠN,Ä †ð6…OrdÅÑ%I{†¼.¼‘E(Åb‹²,of/&÷Kã£éLƒÛªµù˜Á]zŒ×v`}û¤WqO‹’¶©ü MDªmšL •…ý×ÛòìÂ4|FàMûQVér$Œb¶þišÑxX8çDí É©’Û°oÐ.n)Úk)xVãíÌØÖ@f“‡pÛ°  ëI/JÄ×7ŠV³ÞØÖ¯8—…Wu1P餘žÁr'•Òþº\³)kò;´ÊÂ:.:ÎÞ++äÄh.à?Ö_ÕJW«’q`Ç„¶×j¨Ïו΢ÑG¤$Ç!ÎW¾"õ^–£§y(KÝsL8góOñX³v/-D’Š¿g£K 2˜q<\ÞÇ|¦1$iJõÄš Œ‰2ï~O©÷ÏaýfRUªbŒH€&v’H •u–ŽŒû8‘ 8ݦeG‡WŒ1Ç4EX5©I©6m,,™*ïöñâ&S‚ÁUlÙÚÎõ•9D§kQ}w!Ö^avHš ¦YëVò.o™€}¹Ô(47y%^óDC “J¡~§ž†KSIpÝ隥¨“–“¨|;É6Å'ÎBF}œê*’xÞÅ|›2œÅî` Ó ªDÆÉ1% Åv{Ooëp¢{8çû›>¬…CáQ²6"‡D§­¢P@¿ À(„ÛÝr­ HZ ª4i6ÂDs½aï9›MKa.øq"CßìPc `Ä‹T"ÔÆ™hàêf¡*8H†Ù”¸±Úøa®Ü¥Kßɧ:ó4{8¦”³ ²€«S@#¡÷ó݆y'·YˆæÍ²„ÛŠpLQ¦M8ýÆjÀÍQyÂn+€ÜÎu\ŽB&ÇPÇ9¤s½ xãæ\ô¨ØüÄ×ÎÑé£Ùf4é>t:+Ñ4M&iî§&›}…ª áBm\ ¨]Ì8sĬ…ÅÿéÄ xKó)c<c‡¶¼KÌ9…ΚH7d=úkÌ*Hh—:…c#ü¤Ï´7CÉ”ZÕÇGÖéSJ»:f$r­#¦Ífvç™R¾vFqÄÓ0Ó4¢üXÊ jB҃ȑ!@!ê`»kz˜+(ÝMNޱ‰F9jKÉ zAöV‘+´”ɇņp/²±®µ—9^È+½rÙ–±ÝU銰&y?ÔÌÖÞbÔcGgð.h²@9™´_a’\É­JP™iÅ&_ ƒy¾«æúû¬¾ز”ó„ê’<7UèɲûÀÚÞ8†ò)±ülB[ú…Q:y9`öx'Å.V2M•óKý´X·pâD…iŒDrf°6É”nBŽÐfF¼/6ôÙþ:j\ƒ–4nË(VöN/ñ(ðØF/õè Í×D­ÿZ£lµiöÈ.“’È«€¶‘yê1O[ñV”V@©÷«Óí( ìÅåÿ»8>—-&R€*~<Ã; ÊÉ7¡+…KYWác ØG}¬*Œ$ÈZÈê_ŸeÅFl (o­€HêNB俍:ðçRߏ„ÙÎ`ä¨0M‰(›d’'¹Z›Dcòû /¹ ¬C,@mK¤×1±,1$JÕÜ $»nòGò@½¢-‚p›Õfö(M·âĤ2Ú2'žRˆ{…\,?ßCa>ÌWqaq‹nnslbã˜:èÝ®îÏʳ'&Ëj·fЦI¥uV AŠ¥üÊàcÕ\H¦Uz±°¦€8KíWã’“EãAF èÏr %­‰°›¢®ò»m\·~è¨J<•tæ™B»2a*›Ã­£ ‘#öS@"ˆÿ(ï fÂ_Æ~ÈËÖbre$±¨¡ŒS“@M GæLSá˜&Ocëûãa'θÎÑÆÖ¹d ÎÝ3^­sñ®ÞéÔ[½÷ZöjâUã¸~ÑmˆÞ›†hwÎ_wêoE³kÒ{OÄi§Ñç§âøM½óºQÅr–(PÃd_‡;§ß¿ô­žh7:o›½{õ^ÔÛm ŽÇZÅYý0µñËq£ÝïÞ4Z[Þ96ð® =êöêX£Ùï:Í^³õš(bJq§ùúMO¼9?;it(ïxš§Š¢]ïôšî–=ù¹yRW©Þ…ž—Ä»fïÍùEÏöÇWo½?5['UÑh¥Æ/íN£ ,€>uDó-tºo›­ã³‹Jj~$Zç=à zÚ;'ö˜²†ÚP§«6‚›CŒ£‘¨“g˱Üaxø5r À‘¶…Š¥Z[ÐØà0ž!×ø)OuúéCmT/é¼ f­€Ãq¸LY+Å.¢öàÑåÀ…À'è£0Hâ<~2Tx °h0ØVÚƒJ˜HUˆ¡:'díöµ QægMü7M}½ë•ƒ)›Ÿ»[·ˆwÈRþ˜†‡½¶Õ§¦4¥'Ò&¾Ñ| ØÈTFÞD7UÛÛ¨ÓÉWYÀûÊöN{FF˜2 ñ€6’ Vâ9T,›[lFµ®?•IEðw…€wU"NÏÇÝn<=˜ÇúòcF¥ü ŽA%è­/P|fõ¹” Ó:f!XJó¢Jt=š–õ÷ñ<Í#i–9ZIºJé ¼ºñF¾2P¥FÏLôGˆÿr¤þîÉQŠ#¬OÅ盕Р4˜ £*6F­ý'vH¼ñ‡d¢Uáœß‚§âA`zsXzqô²*öÉ%AH·¸šá7U¼åDæPÛÏÁPÚ°ñl6z¯*” 0¹sM!Š‹˜CÁöj»»—¸*ÊÇ]b¾( •]Äa£=| “ÝéŒ*Z¶^´óÉ}B)hn“Nô^ÙtÜ{#ò& ÅšâÚ$¸šÓ/b[s;ï•׃¬šþSïE“ ®À—¼ÿuï Þù«ïÝ{ºK÷?Á£‡ûŸ¾Äý¯æN'˜|áÞð‡N[ñ²¹CQ¼enÍÕr–‚s `E_ ¨ß¼Ê.¡0¸ŽTÄÜRˆ@™N-Á»1{ßÛ› uí}C£žl†çø>9g0û…ûï¤\q©cD·ÒÅŽÒ}Ž0Â;]çh8ªì\í¸p­cÍs®ËÛæôrå Ã¥sgåÒ%œ˜â]ºÉ¯¼òID)íïÒe(‡‡§õYZ¾²‘`‡Þø°qÚãqx™Ÿa¤àçw<.ô÷gæåÚrªuö)É­pûlBù€túŠÛ L‰Û>1wUæâ°gÅ¡‰i½`«‰Î­ô¾úÿû³¨ÿ+`¿þ?x¶ÿì éÿý§OövŸàýïO÷÷ž?èÿ/ñÙy,þý à™Š ý¾ƒ;‘³XxëåN$S” W4ªWb¯öW±º³ûtgOìï>=8ÜÝT]4nfâßÅãÏûF§§‹ùÑÚä¥ól<ŒÒ°øH¥ rÆÅg~2ów¼,{ß°Æoê?7úÝ^§Ûh‹=—¨¾u3/Ç ïu¾ýs<. ¾UVŒSuš¦Ï/@%B)ÏÆœpåEã£f*:¤žêð¦‡.Þï|ƒêi¿~rÒ©âÍVï`ßþ¸÷ÌþøýÔk¾mx<]DèªéÑïú¼N¤èÂDL¥k)œ÷=——/ÒhØ@¡ýS¡>–-ÖSé;ÕqœêÝ^¿îÖ§ÒK¦¾úPrç®Hám½ûS‘VX¢’ú—k‡Tzõ×E"P~‘Z]¦Á2V À úžñ% úJèu=¹Ì¿ÛÀÕöy§W Aׯ»4$Þ«)ûÁh c­×ÍV£ß<ÉÉØ*«áØLª÷¾ÝX"FÁ™¹›õLnüRä —]Q}‡ïD$MüþlƒÜ7~éuêý¢ðçµ ÄêZ}ãR9mvºÎ4bÉ庛s+… êËhèÏÔš¹i¶`zŽëmg¶Ê¡Y¶Vâš­öEÏ¥€¡J·6aü•<8«»8óÕrÅO`ÀRý©Ÿ|£~¯cÀÛzç§ÆI¿wîp ¯T Á OâÙjÙlH¼9oçDtéU6 èNtâ,Ý<­ç½¥yÍ+-ÒÚ0³@¨0µ: í˜I™ô7ò¦Ýht–æÖ[Kp«>•l§kØÕîœ;cÄ‚…š|_ ×õ¤l‚¾ts"¶N’J†Ìa·s\0‡\z‰ÀsˆŠæÐTX¢²Á"•‚9Ôåi¬×Ô@¡¨euéU6Mñ]él2‡@£huù" üž…^0•k{ò¾{Ñfåeé˜:JépÖ‡þ庥Ù;n÷OÏê¯y¶UŠ„Öꬂ²ZÔRYÜô#%‡k×E«ùK¿Õm;TòZËÄn¥µ‚Ô"¥ÖÅÙYUìòñ‘P7]Î4íù98zŒ¶‡N#IbÄÇtI&&h[ô{e`ÿÚPé¿iÔO,îk n] A¼ð¬à~èa¨Õxþ£ùZnìŽ=a‚£)Û뮵ë€Om»šyÄ‘Bñ‰‡´ËË4Â1²n%Óm¹×2E?¤ì´ÅU«Ž#t;™&¨¾¥Äw«×Õ}Ÿº+ëq×ó~‚‹,gŸž‡öü-ÅGÁã4øÁ‚C†fVB¹=?>Í"ÊÕ¯,ubQèño-ñí9ú‹º3º"y¦ ºÍÞ•€VÍ^ù;®ØÇ¿òoÛ€¥t§¸Òñ ¯‚ÿ‘è;›§¥¥ï]*U×ÔNg}šw§6RC¾0úJuMí¯‚áb>¡û@‚6,(”ñkfp㤲b T‹Fï|Þ¿ |ó”Ûþ¥L101Y¨¬ZGU·º.|ÿöÕç ƒüI‘…‰œqÿ7“bXøþÍûª¯Å?‡„=Ùò9D¦þl†Áx—_MîÌ ,\¨M7Œ$óÛè‰À=›ûËAQŒÆ·´]¸@A} µ‚Â'OÀ £Ó‰ö¼ßk0êS`±ÙÃÌØu$.Ý»£¢(ƒçŽY0 Þñí 0… ‚üÏo3ÿt€ëÞ½O‚ádÅZþ4"×Òÿ€_/ÇØcQ ð› —ÕZ“®:^RÌEqÄh(WWG Y-ÖÆÂ÷ïlªÏ!€:é3»8øiõñôÿgˆ2ï¾m©† ŽàsI|p Ërø‰Ü„ÏPIŸ 0úÞ•)ëíþãVýKêùÇ^Á²Kp'àp, üÂe ¦ðcqGL¾SzÃ*Dî´^o½7ýŸëz½îR‡Ó h_ j¯Âë¿^×ÿEÀz©ºY7€õµHýKƒõ•HýK‚õUHý¬?€õ°î`õ5¨þ‰æíªÿiPýît4ÖþœºˆÓ`úL€éL_Ü•X||•Ÿ[Þ.y,"Ï×eçÝjíýî}½!§¯ÏÆý…|£‚N"¾ |äì¤à—ˆC7¾IþHדË~ÛåÚÃïè.S€®ÿ{EߊÈñ¯Îí͉ŠÅï›FºTí»ïÃéLÿD·K@ì/ô-æ9ö¦.Å3q¹ª8ïwNÎ[gïÑ›0…ˆêHüX¬Êн‘$}`ÅiOáÇ(~¤“S „ø™Ù¸ö›ç´Uå®TŠ}_9¨ÿ æ—ä¾,¾ ð«üF´ƒÖ<§}À~<ÝBmﺔºËà=ß«â7²1öñ+¿Knÿ–úöѾò¾Ö³ü³L«ñn!œÓèîQm=÷¦v¥Øѧ^¢ê_á÷;sÀL÷Îìz¡]ÌRiv¿ ´&¼ýÒæ.Öe¦I€Ùã³Oa5½°»|ö)oáayì!ÿæ6Ä.÷¼¯õÐʹW[±kåã}÷ß¼ßs& ÃXA¹ïðÛ<ò˜Ÿ1ÓJËŸp);oпÅ7½?fƒO÷Só =ïŸш=ðòÂYµÀ"&eÐûìZ^­š|y‡~Âv`q°k6$ïÌáµ{˜ pÙbu´´Ql$ïz_!%VTþ¢ÓôW*VYMÖMãvŽÏmÜ®)XK¬Tý`”CÞ!ªWY¦‹Ï·_Úá¹âüŠUϰÞh¶Ž;ÓœÿvìkÖçÊÅy[LO 4wÒXn._j³‚ ˜ôæK™šäx%Êâ1ü_¦Ü½gÐ/ø…º‚?é‰tµTù^ŒÍ¯h51úószTNŽñ㱓Öp°O§HŠOlòFÕI ©æ©. é |á—}îi¼sÚüE¼mŠ %ã«tXÙ×wýd8¡ã˜Uã9ø‚s¡'”x-ÆßïŠwÁ¸[¨À…ò/^,›üÂ/,«F³º6â;$¦†¹ø],–Û­sÝÿ¡+³²¦ñEK´<(_vOlJWÃ&ä»Òá„øÀIµ¿o./èæ9“¼u¸T˜Ò¬^ˆ('``A1f¦é¥üýâ  ÿÖ –Ù«,Gtþ¨,JE™%¿À´êc£ZЂ¨OÝy\ùNgUŽ–¶w§ÑR6Õá]û`p†]É9ðÃðiÚ{ö9½ÒŠæó²¡KûºtG—}ÄÎ_\ް;úW:%V¹àÜ‘i˜·Ü¿<ýìÅmR»¬ŠknòÚ vÒäîM=ZO>Ï(¼u7qñ”éŽÓrÒ«ë´þ²Þ[üü™ja BNI¿¾çŸ§ôËc±'·HRÖ¨È ³Ç:›Jë0ì¼wÇí­ŒIJŽª¿îýð›ƒúT2üµð`¤RûðA0 öÁs¨8[ƒëýrTß1•ÊJ×m†Ø+2É©œgó²˜Uï"yœ•[µ;MF&ì|ÏÄ÷/–ßÞ¯)´¤ MöÛо½GStŒaCC–i0U÷ ¯Oö| ¦é@_‚i|@à.\ãeû (½F<ÿñøÛEdS^EçDá É0ÅL\¤ãvk-TÈuOa¼ôöh‘B«#:[²Ž½uý'üÂŽßÿ¢âŸK}Ò”âyˆ… ý¡Øš· Ý}ƒ_*Ÿñ—\"zO©Rô¨×ìü®^¹ýŸ'®.ÆB—6ýéÞ:ºèN—Õ_ijrÿŸòÔÄÝ<ÝnÄ—s¯Ñ¨úQU<žbˆtJ^sϺ¿¥o¿*;;øº·î¨ kcD•¹^ ÌI0Ä3I¦LÑÓ ²è‹À˜í÷¶º­Õ¨X©ê&#[¿I£ÓLåÔx20ˆ’©³Ð&iÀl}õðùÓÎÿÂËfµÙü¾ÿåùÓ§ëîÙ}¾»kîy²ÿüÞÿòôààáüÿ—ø|󱓩dÏüËèJÌè¾GßÐ7xžý^Ž,Å[ˆ±þ‚|âR üŽ[ “ƒ*Å'eB¯/JŽtÁj6êZ‡Ô_”@àJUó”¯w{QêÐ]ú*ÄÅ·}ü¬ðE)Qôú?†äÒl«Am$ó²ú+^”^·Ïò§Y'i:;ÜÙ¹¾¾®ám¶òÎÿòµNwM=y“öÍW¾¿æc]Щ¿::oXú­êݾ3Ç7KšpiŒ†¤ô?%q—ÊñFéþèõ¯¯üùC5ÀmëÿàÙþâý»û÷?ý׿° ÀJ­ltßOí”õîè7¢ƒ÷™‘²Pé(]€wèQ°¿eA¦+áĸҷJ|«Jâ[ÀÙtË“uáè·üÖ·Ž€õYeºŠ¹[ªrk±g÷‚ÐÃÆõßþéõv³uzþïÛ=xòÜÞÿv°·öoïÁþ‘8>^;¶­ïÊ:{µ]¯ÖûP8²áÙ× $^7›Nýd~(.Z?µÎßµ¼7ñTnÏüK¨tg ëÕɤ ×àë‡ÛdçÅ*;o¾•íP€y÷N$_NG}3Ýi‡~Š÷âæOú'Üÿ•_ñ÷Eìÿ‚}mÿwŸþúüÉÃúÿWÀÿùju‚[€çát’"Þ&Æ’t>˜w¼‘vF ¤ FœíTþŽMÿº¸­rå‡{PI¿t×Jâ{"èdxé’ûP²T²O1 ö¹ÔÊ»7߆7•’¸²²Ú÷¢Ä÷3VVo÷̳÷” sûAï/WÒ_¦¼EÉÇ÷ýz2ÏV1;ØËˆ«Ø wJÌ _N¿W”Ñ—xm.D·tm.ÂWqÝZ†®¹µ^r[!}?ÈÞmåèöŽ…òÛªîRLï­o*xs§¾9Am,gîxÚL-¿‹é–bxÏÆ"ú:¥ÍÍ9Wm,—_ݳ™žséÐmånÀÂA›¦‹{6–È/èÙXLß¾sk™ÛW€¹@ç¶Bw’2sÍæBö‚šÅòÛg6»M(œ[dn/·²˜g¾‘þ'9Ä~2jâÍêI63~(©P]ÆfÙj[–HÖ$æäbÖ/ýPk´›mg¿ŸuúË—À˜ø»P¦ z;W¶˜óáóðyø<|>Ÿ‡ÏÃçáóðyø<|>Ÿ‡ÏÃçáóðyøüs?ÿ¯ Î%Èflow-tools-0.68/contrib/README0000644000076600007660000000131007460064451011572 Cflow: Dave Plonka's Cflow perl module. See http://net.doit.wisc.edu/~plonka/Cflow/ inter.net: Miguel A.L. Paraz William Emmanuel S. Yu flow-split flow-split-non flow-as-if flow-cidr acl-filter.tgz: Cisco style community and as-path acl's. Uses mrtd to process BGP dump's. find_scanners: Paul Dokas . Compact report of top IP's, ports, etc. pyflowtools: Robin Sommer . Python support. http://www.net.uni-sb.de/~robin/flowtools see also: flow-extract: E. Larry Lidz" . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. base=`echo "$object" | sed -e 's/\.o$//' -e 's/\.lo$//'` tmpdepfile1="$base.o.d" tmpdepfile2="$base.d" if test "$libtool" = yes; then "$@" -Wc,-MD else "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. test -z "$dashmflag" && dashmflag=-M ( IFS=" " case " $* " in *" --mode=compile "*) # this is libtool, let us make it quiet for arg do # cycle over the arguments case "$arg" in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) # X makedepend ( shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift;; -*) ;; *) set fnord "$@" "$arg"; shift;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 flow-tools-0.68/docs/0000777000076600007660000000000010240421707010262 5flow-tools-0.68/docs/flow-capture.1.in0000644000076600007660000002024307775360775013330 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-capture\fP" "1" .SH "NAME" \fBflow-capture\fP \(em Manage storage of flow file archives by expiring old data\&. .SH "SYNOPSIS" .PP \fBflow-capture\fP [-hu] [-b\fI big|little\fP] [-C\fI comment\fP] [-c\fI flow_clients\fP] [-d\fI debug_level\fP] [-D\fI daemonize\fP] [-e\fI expire_count\fP] [-f\fI filter_fname\fP] [-F\fI filter_definition\fP] [-E\fI expire_size\fP] [-n\fI rotations\fP] [-N\fI nesting_level\fP] [-p\fI pidfile\fP] [-R\fI rotate_program\fP] [-S\fI stat_interval\fP] [-t\fI tag_fname\fP] [-T\fI active_def\fP|\fIactive_def,active_def\fP \&...] [-V\fI pdu_version\fP] [-z\fI z_level\fP] -w\fI workdir\fP [-x\fI xlate_fname\fP] [-X\fI xlate_definition\fP] \fIlocalip/remoteip/port\fP .SH "DESCRIPTION" .PP The \fBflow-capture\fP utility will receive and store NetFlow exports to disk\&. The flow files are rotated \fIrotations\fPtimes per day and expiration of old flow files can be configured by number of files or total space utilization\&. Files are stored in \fBworkdir\fP and can optionally be stored in additional levels of directories\&. Active files created by \fBflow-capture\fP begin with \&'tmp\&'\&. Files that are complete begin with \&'ft\&'\&. .PP When the \fIremoteip\fP is configured only flows from that exporter will be processed, this is the most secure and recommended configuration\&. When the \fIlocalip\fP is configured \fBflow-capture\fP will only process flows sent to the \fI localip\fP IP address\&. If \fIremoteip\fP is 0 (not configured) flows from any source IP address are accepted\&. Multiple non aggregated PDU versions may be accepted at once to support Cisco\&'s Catalyst 6500 NetFlow implementation which exports from both the supervisor and MSFC with the same IP address and same port but different export versions\&. In this case the exports will be stored in the format specified by \fIpdu_version\fP or whichever export type is received first\&. .PP NetFlow exports are UDP and do not employ congestion control or a retransmission mechanism\&. If the server flow-capture is configured on is too busy, or the network is congested or lossy NetFlow exports will be lost\&. An estimate of lost flows is recorded in the flow files, and logged via syslog\&. Most servers will provide a count of dropped packets due to full socket buffers via the \fBnetstat\fP utility\&. For example \fBnetstat -s | grep full\fP will provide a count of UDP packets dropped due to full socket buffers\&. If this is a persistent occurrence either \fBflow-capture\fP will need a larger server or the compression level should be decreased with -z\&. .PP A SIGHUP signal will cause \fBflow-capture\fP to close the current file and create a new one\&. .PP A SIGQUIT or SIGTERM signal will cause \fBflow-capture\fP to close the current file and exit\&. .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-c\fI flow_clients\fP" 10 Enable \fIflow_clients\fP TCP clients\&. When libwrap is available the client must be in a permit list for the service flow-capture-client\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-e\fI expire_count\fP" 10 Retain the maximum number of files so that the total file count is less than \fIexpire_count\fP\&. Defaults to 0 (do not expire)\&. .IP "-E\fI expire_size\fP" 10 Retain the maximum number of files so that the total storage is less than \fIexpire_size\fP\&. The letters b,K,M,G can be used as multipliers, ie 16 Megabytes is 16M\&. Default to 0 (do not expire)\&. .IP "-f\fI filter_fname\fP" 10 Filter list filename\&. Defaults to \fB@localstatedir@/cfg/filter\fP\&. .IP "-F\fI filter_definition\fP" 10 Select the active definition\&. Defaults to default\&. .IP "-h" 10 Display help\&. .IP "-n\fI rotations\fP" 10 Configure the number of times flow-capture will create a new file per day\&. The default is 95, or every 15 minutes\&. .IP "-N\fI nesting_level\fP" 10 Configure the nesting level for storing flow files\&. The default is 0\&. -3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file -2 YYYY-MM/YYYY-MM-DD/flow-file -1 YYYY-MM-DD/flow-file 0 flow-file 1 YYYY/flow-file 2 YYYY/YYYY-MM/flow-file 3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file .IP "-p\fI pidfile\fP" 10 Configure the process ID file\&. Use - to disable pid file creation\&. .IP "-R\fI rotate_program\fP" 10 Execute \fIrotate_program\fP with the first argument as the flow file name after rotating it\&. .IP "-S\fI stat_interval\fP" 10 When configured \fBflow-capture\fP will log a timestamped message every \fIstat_interval\fP minutes indicating counters such as the number of flows received, packets processed, and lost flows\&. .IP "-t\fI tag_fname\fP" 10 Load tags from \fBtag_name\fP .IP "-T\fI active_def\fP|\fIactive_def,active_def\&.\&.\&.\fP" 10 Use \fIactive_def\fP as the active tag definition(s)\&. .IP "-u" 10 Preserve inherited umask\&. By default the umask will be set to 0022\&. .IP "-V\fI pdu_version\fP" 10 Use \fIpdu_version\fP format output\&. .PP .nf 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8\&.1 NetFlow AS Aggregation 8\&.2 NetFlow Proto Port Aggregation 8\&.3 NetFlow Source Prefix Aggregation 8\&.4 NetFlow Destination Prefix Aggregation 8\&.5 NetFlow Prefix Aggregation 8\&.6 NetFlow Destination (Catalyst switches) 8\&.7 NetFlow Source Destination (Catalyst switches) 8\&.8 NetFlow Full Flow (Catalyst switches) 8\&.9 NetFlow ToS AS Aggregation 8\&.10 NetFlow ToS Proto Port Aggregation 8\&.11 NetFlow ToS Source Prefix Aggregation 8\&.12 NetFlow ToS Destination Prefix Aggregation 8\&.13 NetFlow ToS Prefix Aggregation 8\&.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 .fi .IP "-w\fI workdir\fP" 10 Work in \fBworkdir\fP\&. .IP "-x\fI xlate_fname\fP" 10 Translation config file name\&. Defaults to \fB@localstatedir@/cfg/xlate\&.c fg\fP .IP "-X\fI xlate_definition\fP" 10 Translation definition\&. Defaults to default\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "EXAMPLES" .PP Receive flows from the exporter at 10\&.0\&.0\&.1 port 9800\&. Maintain 5 Gigabytes of flow files in /flows/krc4\&. Mask the source and destination IP addresses contained in the flow exports with 255\&.255\&.248\&.0\&. .PP \fBflow-capture -w /flows/krc4 -m 255\&.255\&.248\&.0 -E5G 0/10\&.0\&.0\&.1/9800\fP .PP Receive flows from any exporter on port 9800\&. Do not perform any flow file space management\&. Store the exports in /flows/krc4\&. Emit a stat log message every 5 minutes\&. .PP \fBflow-capture -w /flows/krc4 0/0/9800 -S5\fP .SH "BUGS" .PP Empty directories are not removed\&. .SH "FILES" .PP Configuration files: Tag - \fB@localstatedir@/cfg/tag\&.cfg\fP\&. Filter - \fB@localstatedir@/cfg/filter\&.cfg\fP\&. Xlate - \fB@localstatedir@/cfg/xlate\&.cfg\fP\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Fri 02 Jan 2004, 16:26 flow-tools-0.68/docs/flow-capture.html.in0000644000076600007660000002746507775361002014131 flow-capture

flow-capture

Name

flow-capture -- Manage storage of flow file archives by expiring old data.

Synopsis

flow-capture [-hu] [-b big|little] [-C comment] [-c flow_clients] [-d debug_level] [-D daemonize] [-e expire_count] [-f filter_fname] [-F filter_definition] [-E expire_size] [-n rotations] [-N nesting_level] [-p pidfile] [-R rotate_program] [-S stat_interval] [-t tag_fname] [-T active_def|active_def,active_def...] [-V pdu_version] [-z z_level] {-w workdir} [-x xlate_fname] [-X xlate_definition] {localip/remoteip/port}

DESCRIPTION

The flow-capture utility will receive and store NetFlow exports to disk. The flow files are rotated rotationstimes per day and expiration of old flow files can be configured by number of files or total space utilization. Files are stored in workdir and can optionally be stored in additional levels of directories. Active files created by flow-capture begin with 'tmp'. Files that are complete begin with 'ft'.

When the remoteip is configured only flows from that exporter will be processed, this is the most secure and recommended configuration. When the localip is configured flow-capture will only process flows sent to the localip IP address. If remoteip is 0 (not configured) flows from any source IP address are accepted. Multiple non aggregated PDU versions may be accepted at once to support Cisco's Catalyst 6500 NetFlow implementation which exports from both the supervisor and MSFC with the same IP address and same port but different export versions. In this case the exports will be stored in the format specified by pdu_version or whichever export type is received first.

NetFlow exports are UDP and do not employ congestion control or a retransmission mechanism. If the server flow-capture is configured on is too busy, or the network is congested or lossy NetFlow exports will be lost. An estimate of lost flows is recorded in the flow files, and logged via syslog. Most servers will provide a count of dropped packets due to full socket buffers via the netstat utility. For example netstat -s | grep full will provide a count of UDP packets dropped due to full socket buffers. If this is a persistent occurrence either flow-capture will need a larger server or the compression level should be decreased with -z.

A SIGHUP signal will cause flow-capture to close the current file and create a new one.

A SIGQUIT or SIGTERM signal will cause flow-capture to close the current file and exit.

OPTIONS

-b big|little

Byte order of output.

-c flow_clients

Enable flow_clients TCP clients. When libwrap is available the client must be in a permit list for the service flow-capture-client.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-e expire_count

Retain the maximum number of files so that the total file count is less than expire_count. Defaults to 0 (do not expire).

-E expire_size

Retain the maximum number of files so that the total storage is less than expire_size. The letters b,K,M,G can be used as multipliers, ie 16 Megabytes is 16M. Default to 0 (do not expire).

-f filter_fname

Filter list filename. Defaults to @localstatedir@/cfg/filter.

-F filter_definition

Select the active definition. Defaults to default.

-h

Display help.

-n rotations

Configure the number of times flow-capture will create a new file per day. The default is 95, or every 15 minutes.

-N nesting_level

Configure the nesting level for storing flow files. The default is 0. -3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file -2 YYYY-MM/YYYY-MM-DD/flow-file -1 YYYY-MM-DD/flow-file 0 flow-file 1 YYYY/flow-file 2 YYYY/YYYY-MM/flow-file 3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file

-p pidfile

Configure the process ID file. Use - to disable pid file creation.

-R rotate_program

Execute rotate_program with the first argument as the flow file name after rotating it.

-S stat_interval

When configured flow-capture will log a timestamped message every stat_interval minutes indicating counters such as the number of flows received, packets processed, and lost flows.

-t tag_fname

Load tags from tag_name

-T active_def|active_def,active_def...

Use active_def as the active tag definition(s).

-u

Preserve inherited umask. By default the umask will be set to 0022.

-V pdu_version

Use pdu_version format output.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-w workdir

Work in workdir.

-x xlate_fname

Translation config file name. Defaults to @localstatedir@/cfg/xlate.c fg

-X xlate_definition

Translation definition. Defaults to default.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Receive flows from the exporter at 10.0.0.1 port 9800. Maintain 5 Gigabytes of flow files in /flows/krc4. Mask the source and destination IP addresses contained in the flow exports with 255.255.248.0.

flow-capture -w /flows/krc4 -m 255.255.248.0 -E5G 0/10.0.0.1/9800

Receive flows from any exporter on port 9800. Do not perform any flow file space management. Store the exports in /flows/krc4. Emit a stat log message every 5 minutes.

flow-capture -w /flows/krc4 0/0/9800 -S5

BUGS

Empty directories are not removed.

FILES

Configuration files: Tag - @localstatedir@/cfg/tag.cfg. Filter - @localstatedir@/cfg/filter.cfg. Xlate - @localstatedir@/cfg/xlate.cfg.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-capture.sgml0000644000076600007660000002604307775355233013522 flow-capture 1 flow-capture Manage storage of flow file archives by expiring old data. flow-capture -hu -b big|little -C comment -c flow_clients -d debug_level -D daemonize -e expire_count -f filter_fname -F filter_definition -E expire_size -n rotations -N nesting_level -p pidfile -R rotate_program -S stat_interval -t tag_fname -T active_def|active_def,active_def -V pdu_version -z z_level -w workdir -x xlate_fname -X xlate_definition localip/remoteip/port DESCRIPTION The flow-capture utility will receive and store NetFlow exports to disk. The flow files are rotated rotations times per day and expiration of old flow files can be configured by number of files or total space utilization. Files are stored in workdir and can optionally be stored in additional levels of directories. Active files created by flow-capture begin with 'tmp'. Files that are complete begin with 'ft'. When the remoteip is configured only flows from that exporter will be processed, this is the most secure and recommended configuration. When the localip is configured flow-capture will only process flows sent to the localip IP address. If remoteip is 0 (not configured) flows from any source IP address are accepted. Multiple non aggregated PDU versions may be accepted at once to support Cisco's Catalyst 6500 NetFlow implementation which exports from both the supervisor and MSFC with the same IP address and same port but different export versions. In this case the exports will be stored in the format specified by pdu_version or whichever export type is received first. NetFlow exports are UDP and do not employ congestion control or a retransmission mechanism. If the server flow-capture is configured on is too busy, or the network is congested or lossy NetFlow exports will be lost. An estimate of lost flows is recorded in the flow files, and logged via syslog. Most servers will provide a count of dropped packets due to full socket buffers via the netstat utility. For example netstat -s | grep full will provide a count of UDP packets dropped due to full socket buffers. If this is a persistent occurrence either flow-capture will need a larger server or the compression level should be decreased with -z. A SIGHUP signal will cause flow-capture to close the current file and create a new one. A SIGQUIT or SIGTERM signal will cause flow-capture to close the current file and exit. OPTIONS -b big|little Byte order of output. -c flow_clients Enable flow_clients TCP clients. When libwrap is available the client must be in a permit list for the service flow-capture-client. -C Comment Add a comment. -d debug_level Enable debugging. -e expire_count Retain the maximum number of files so that the total file count is less than expire_count. Defaults to 0 (do not expire). -E expire_size Retain the maximum number of files so that the total storage is less than expire_size. The letters b,K,M,G can be used as multipliers, ie 16 Megabytes is 16M. Default to 0 (do not expire). -f filter_fname Filter list filename. Defaults to @localstatedir@/cfg/filter. -F filter_definition Select the active definition. Defaults to default. -h Display help. -n rotations Configure the number of times flow-capture will create a new file per day. The default is 95, or every 15 minutes. -N nesting_level Configure the nesting level for storing flow files. The default is 0. -3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file -2 YYYY-MM/YYYY-MM-DD/flow-file -1 YYYY-MM-DD/flow-file 0 flow-file 1 YYYY/flow-file 2 YYYY/YYYY-MM/flow-file 3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file -p pidfile Configure the process ID file. Use - to disable pid file creation. -R rotate_program Execute rotate_program with the first argument as the flow file name after rotating it. -S stat_interval When configured flow-capture will log a timestamped message every stat_interval minutes indicating counters such as the number of flows received, packets processed, and lost flows. -t tag_fname Load tags from tag_name -T active_def|active_def,active_def... Use active_def as the active tag definition(s). -u Preserve inherited umask. By default the umask will be set to 0022. -V pdu_version Use pdu_version format output. 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -w workdir Work in workdir. -x xlate_fname Translation config file name. Defaults to @localstatedir@/cfg/xlate.c fg -X xlate_definition Translation definition. Defaults to default. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Receive flows from the exporter at 10.0.0.1 port 9800. Maintain 5 Gigabytes of flow files in /flows/krc4. Mask the source and destination IP addresses contained in the flow exports with 255.255.248.0. flow-capture -w /flows/krc4 -m 255.255.248.0 -E5G 0/10.0.0.1/9800 Receive flows from any exporter on port 9800. Do not perform any flow file space management. Store the exports in /flows/krc4. Emit a stat log message every 5 minutes. flow-capture -w /flows/krc4 0/0/9800 -S5 BUGS Empty directories are not removed. FILES Configuration files: Tag - @localstatedir@/cfg/tag.cfg. Filter - @localstatedir@/cfg/filter.cfg. Xlate - @localstatedir@/cfg/xlate.cfg. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-cat.10000644000076600007660000000755207762017605012022 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-cat\fP" "1" .SH "NAME" \fBflow-cat\fP \(em Concatenate flow files .SH "SYNOPSIS" .PP \fBflow-cat\fP [-aghmp] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-o\fI filename\fP] [-t\fI start_time\fP] [-T\fI start_time\fP] [-z\fI z_level\fP] [\fIfile\fP|\fIdirectory\fP \&...] .SH "DESCRIPTION" .PP The \fBflow-cat\fP utility processes files and/or directories of files in the flow-tools format\&. The resulting concatenated data set is written to the standard output or \fBfile\fP specified by \fB-o\fP\&. If \fBfile\fP is a single dash (`-\&') or absent, flow-cat will read from the standard input\&. .SH "OPTIONS" .IP "-a" 10 Do not ignore filenames that begin with \fBtmp\fP\&. .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-g" 10 Sort file list by capture start time before processing\&. .IP "-h" 10 Display help\&. .IP "-m" 10 Disable the use of mmap()\&. .IP "-p" 10 Preload headers\&. Use to preserve meta information such as lost flows\&. .IP "-o\fI file\fP" 10 Write to \fBfile\fP instead of the standard out\&. .IP "-t\fI start_time\fP" 10 Select flow files up to \fIstart_time\fP\&. If used with -T select files between \fIstart_time\fP and \fIend_time\fP\&. .IP "-T\fI end_time\fP" 10 Select flow files after \fIend_time\fP\&. If used with -t select files between \fIstart_time\fP and \fIend_time\fP\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .IP "\fIfile\fP|\fIdirectory\&.\&.\&.\fP" 10 Process the files and/or directory\&. .SH "TIME/DATE parsing" .PP start_time and end_time parsing is implemented with \fBgetdate\&.y\fP, a commonly used function to process free-form time date specifications\&. Example usage borrowed from \fBcvs\fP: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT .SH "EXAMPLES" .PP Concatenate all flow files begining with ft-v05\&.2001-05\&.01, use flow-print to display the results\&. .PP \fBflow-cat ft-v05\&.2001-05-01\&.* | flow-print\fP .PP Concatenate flow files in \fB/flows/krc4\fP, store store the output in \fBcompressed\&.flows\fP at compression level 9 (best)\&. The headers are preloaded so various metadata such as the flow count is correct in the result\&. Filenames begining with \fBtmp\fP which are typically in-progress flow files from \fBflow-capture\fP are not processed\&. .PP \fBflow-cat -p -z9 /flows/krc4 > compressed\&.flows\fP .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Fri 28 Nov 2003, 23:24 flow-tools-0.68/docs/flow-cat.html0000644000076600007660000001247107762017610012616 flow-cat

flow-cat

Name

flow-cat -- Concatenate flow files

Synopsis

flow-cat [-aghmp] [-b big|little] [-C comment] [-d debug_level] [-o filename] [-t start_time] [-T start_time] [-z z_level] [file|directory...]

DESCRIPTION

The flow-cat utility processes files and/or directories of files in the flow-tools format. The resulting concatenated data set is written to the standard output or file specified by -o. If file is a single dash (`-') or absent, flow-cat will read from the standard input.

OPTIONS

-a

Do not ignore filenames that begin with tmp.

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-g

Sort file list by capture start time before processing.

-h

Display help.

-m

Disable the use of mmap().

-p

Preload headers. Use to preserve meta information such as lost flows.

-o file

Write to file instead of the standard out.

-t start_time

Select flow files up to start_time. If used with -T select files between start_time and end_time.

-T end_time

Select flow files after end_time. If used with -t select files between start_time and end_time.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

file|directory...

Process the files and/or directory.

TIME/DATE parsing

start_time and end_time parsing is implemented with getdate.y, a commonly used function to process free-form time date specifications. Example usage borrowed from cvs: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT

EXAMPLES

Concatenate all flow files begining with ft-v05.2001-05.01, use flow-print to display the results.

flow-cat ft-v05.2001-05-01.* | flow-print

Concatenate flow files in /flows/krc4, store store the output in compressed.flows at compression level 9 (best). The headers are preloaded so various metadata such as the flow count is correct in the result. Filenames begining with tmp which are typically in-progress flow files from flow-capture are not processed.

flow-cat -p -z9 /flows/krc4 > compressed.flows

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-cat.sgml0000644000076600007660000001243307762017556012623 flow-cat 1 flow-cat Concatenate flow files flow-cat -aghmp -b big|little -C comment -d debug_level -o filename -t start_time -T start_time -z z_level file|directory DESCRIPTION The flow-cat utility processes files and/or directories of files in the flow-tools format. The resulting concatenated data set is written to the standard output or file specified by . If file is a single dash (`-') or absent, flow-cat will read from the standard input. OPTIONS -a Do not ignore filenames that begin with tmp. -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -g Sort file list by capture start time before processing. -h Display help. -m Disable the use of mmap(). -p Preload headers. Use to preserve meta information such as lost flows. -o file Write to file instead of the standard out. -t start_time Select flow files up to start_time. If used with -T select files between start_time and end_time. -T end_time Select flow files after end_time. If used with -t select files between start_time and end_time. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. file|directory... Process the files and/or directory. TIME/DATE parsing start_time and end_time parsing is implemented with getdate.y, a commonly used function to process free-form time date specifications. Example usage borrowed from cvs: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT EXAMPLES Concatenate all flow files begining with ft-v05.2001-05.01, use flow-print to display the results. flow-cat ft-v05.2001-05-01.* | flow-print Concatenate flow files in /flows/krc4, store store the output in compressed.flows at compression level 9 (best). The headers are preloaded so various metadata such as the flow count is correct in the result. Filenames begining with tmp which are typically in-progress flow files from flow-capture are not processed. flow-cat -p -z9 /flows/krc4 > compressed.flows BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-dscan.10000644000076600007660000001344607552463661012346 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-dscan\fP" "1" .SH "NAME" \fBflow-dscan\fP \(em Detect scanning and other suspicious network activity\&. .SH "SYNOPSIS" .PP \fBflow-dscan\fP [-bBhlmpwW] [-d\fI debug_level\fP] [-D\fI iplist_depth\fP] [-s\fI state_file\fP] [-i\fI input_filter\fP] [-L\fI suppress_list\fP] [-o\fI output_filter\fP] [-O\fI excessive_octets\fP] [-P\fI excessive_flows\fP] [-S\fI port_scan_trigger\fP] [-t\fI ager_timeout\fP] .SH "DESCRIPTION" .PP The \fBflow-dscan\fP utility is used to detect suspicious activity such as port scanning, host scanning, and flows with unusually high octets or packets\&. A source and destination suppress list is supported to help prevent false alarms due to hosts such as nameservers or popular web servers that exchange traffic with a large number of hosts\&. Alarms are logged to syslog or stderr\&. The internal state of flow-dscan can be saved and loaded to allow for interrupted operation\&. .PP \fBflow-dscan\fP will work best if configured to only watch only inbound or outbound traffic by using the input or output interface filter option\&. .PP The host scanner works by counting the length of the destination IP hash chain\&. If it goes above 64, then the src is considered to be scanning\&. .PP The port scanner works by keeping a bitmap of the destination port number < 1024 per destination IP\&. If it goes above 64, the src is considered to be port scanning the destination\&. .PP When a src has been flagged as scanning it will not be reported again until the record is aged out and enough flows trigger it again\&. .PP A SIGHUP signal will instruct flow-dscan to reload the suppress list\&. .PP A SIGUSR1 signal will instruct flow-dscan to dump its internal state\&. .SH "OPTIONS" .IP "-b" 10 Do not detach and run in the background\&. Alerts go to stderr\&. .IP "-B" 10 Do not detach and run in the background\&. Alerts go to syslog\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-D\fI iplist_depth\fP" 10 Depth of IP host list for detecting host scanning\&. .IP "-h" 10 Display help\&. .IP "-i\fI input_filter\fP" 10 Input interface filter list\&. .IP "-I\fI output_filter\fP" 10 Output interface filter list\&. .IP "-l" 10 Load state from \fB/var/tmp/dscan\&.state\fP or the filename specified with -s\&. .IP "-L\fI suppress_list\fP" 10 Basename of suppress files\&. There are two suppress files for input and output traffic\&. The suppress file syntax is .IP "" 10 IP_address protocol source_port destination_port .IP "" 10 A \&'-\&' can be used as a wildcard in the protocol, source_port, and destination_port fields\&. Only a single protocol, source_port, and destination_port is supported per IP address\&. .IP "-m" 10 Multicast address filter\&. Use to ignore multicast addresses\&. .IP "-O\fI excessive_octets\fP" 10 Trigger an alert if a flow is processed with the octets field exceeding \fIexcessive_octets\fP\&. .IP "-p" 10 Dump state to \fB/var/tmp/dscan\&.state\fP or the filename specified with -s\&. .IP "-P\fI excessive_packets\fP" 10 Trigger an alert if a flow is processed with the packets field exceeding \fIexcessive_packets\fP\&. .IP "-s\fI statefile\fP" 10 State filename\&. Defaults to \fB/var/tmp/dscan\&.state\fP .IP "-S\fI port_scan_trigger\fP" 10 Number of ports a IP address must have used to be considered scanning\&. .IP "-t\fI ager_timeout\fP" 10 How long to keep flows around\&. Default to 90000\&. This is measured in flows processed\&. .IP "-T\fI excessive_time\fP" 10 Trigger an alert if a flow is processed with the End-Start field exceeding \fIexcessive_time\fP\&. .IP "-w" 10 Filter (ignore) candidate inbound www traffic, ie IP protocol 6, source port 80, and destination port > 1023\&. .IP "-W" 10 Filter (ignore) candidate outbound www traffic, ie IP protocol 6, destination port 80, and source port > 1023\&. .SH "EXAMPLES" .PP In a topology where 25 is the only output interface run flow-dscan over the data in \fB/flows/krc4\fP\&. Ignore www and multicast traffic, store the internal state in \fBdscan\&.statefile\fP on exit\&. Use empty suppress list files \fBdscan\&.suppress\&.src\fP and \fBdscan\&.suppress\&.dst\fP\&. The output produced by flow-dscan typically must be manually inspected by using flow-filter and flow-print\&. Many of the alerts will be false until the suppress lists are populated for the local environment\&. .PP \fBflow-cat /flows/krc4 | flow-dscan -I25 -b -m -s dscan\&.statefile -p -W\fP .SH "BUGS" .PP The ager should automatically become more aggressive when a low memory condition exists\&. There is no upper limit on the number of records that can be allocated\&. If the ager is not running often enough the host will be run out of memory\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-dscan.html0000644000076600007660000001601507552463661013145 flow-dscan

flow-dscan

Name

flow-dscan -- Detect scanning and other suspicious network activity.

Synopsis

flow-dscan [-bBhlmpwW] [-d debug_level] [-D iplist_depth] [-s state_file] [-i input_filter] [-L suppress_list] [-o output_filter] [-O excessive_octets] [-P excessive_flows] [-S port_scan_trigger] [-t ager_timeout]

DESCRIPTION

The flow-dscan utility is used to detect suspicious activity such as port scanning, host scanning, and flows with unusually high octets or packets. A source and destination suppress list is supported to help prevent false alarms due to hosts such as nameservers or popular web servers that exchange traffic with a large number of hosts. Alarms are logged to syslog or stderr. The internal state of flow-dscan can be saved and loaded to allow for interrupted operation.

flow-dscan will work best if configured to only watch only inbound or outbound traffic by using the input or output interface filter option.

The host scanner works by counting the length of the destination IP hash chain. If it goes above 64, then the src is considered to be scanning.

The port scanner works by keeping a bitmap of the destination port number < 1024 per destination IP. If it goes above 64, the src is considered to be port scanning the destination.

When a src has been flagged as scanning it will not be reported again until the record is aged out and enough flows trigger it again.

A SIGHUP signal will instruct flow-dscan to reload the suppress list.

A SIGUSR1 signal will instruct flow-dscan to dump its internal state.

OPTIONS

-b

Do not detach and run in the background. Alerts go to stderr.

-B

Do not detach and run in the background. Alerts go to syslog.

-d debug_level

Enable debugging.

-D iplist_depth

Depth of IP host list for detecting host scanning.

-h

Display help.

-i input_filter

Input interface filter list.

-I output_filter

Output interface filter list.

-l

Load state from /var/tmp/dscan.state or the filename specified with -s.

-L suppress_list

Basename of suppress files. There are two suppress files for input and output traffic. The suppress file syntax is

IP_address protocol source_port destination_port

A '-' can be used as a wildcard in the protocol, source_port, and destination_port fields. Only a single protocol, source_port, and destination_port is supported per IP address.

-m

Multicast address filter. Use to ignore multicast addresses.

-O excessive_octets

Trigger an alert if a flow is processed with the octets field exceeding excessive_octets.

-p

Dump state to /var/tmp/dscan.state or the filename specified with -s.

-P excessive_packets

Trigger an alert if a flow is processed with the packets field exceeding excessive_packets.

-s statefile

State filename. Defaults to /var/tmp/dscan.state

-S port_scan_trigger

Number of ports a IP address must have used to be considered scanning.

-t ager_timeout

How long to keep flows around. Default to 90000. This is measured in flows processed.

-T excessive_time

Trigger an alert if a flow is processed with the End-Start field exceeding excessive_time.

-w

Filter (ignore) candidate inbound www traffic, ie IP protocol 6, source port 80, and destination port > 1023.

-W

Filter (ignore) candidate outbound www traffic, ie IP protocol 6, destination port 80, and source port > 1023.

EXAMPLES

In a topology where 25 is the only output interface run flow-dscan over the data in /flows/krc4. Ignore www and multicast traffic, store the internal state in dscan.statefile on exit. Use empty suppress list files dscan.suppress.src and dscan.suppress.dst. The output produced by flow-dscan typically must be manually inspected by using flow-filter and flow-print. Many of the alerts will be false until the suppress lists are populated for the local environment.

flow-cat /flows/krc4 | flow-dscan -I25 -b -m -s dscan.statefile -p -W

BUGS

The ager should automatically become more aggressive when a low memory condition exists. There is no upper limit on the number of records that can be allocated. If the ager is not running often enough the host will be run out of memory.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-dscan.sgml0000644000076600007660000001673307455272472013152 flow-dscan 1 flow-dscan Detect scanning and other suspicious network activity. flow-dscan -bBhlmpwW -d debug_level -D iplist_depth -s state_file -i input_filter -L suppress_list -o output_filter -O excessive_octets -P excessive_flows -S port_scan_trigger -t ager_timeout DESCRIPTION The flow-dscan utility is used to detect suspicious activity such as port scanning, host scanning, and flows with unusually high octets or packets. A source and destination suppress list is supported to help prevent false alarms due to hosts such as nameservers or popular web servers that exchange traffic with a large number of hosts. Alarms are logged to syslog or stderr. The internal state of flow-dscan can be saved and loaded to allow for interrupted operation. flow-dscan will work best if configured to only watch only inbound or outbound traffic by using the input or output interface filter option. The host scanner works by counting the length of the destination IP hash chain. If it goes above 64, then the src is considered to be scanning. The port scanner works by keeping a bitmap of the destination port number < 1024 per destination IP. If it goes above 64, the src is considered to be port scanning the destination. When a src has been flagged as scanning it will not be reported again until the record is aged out and enough flows trigger it again. A SIGHUP signal will instruct flow-dscan to reload the suppress list. A SIGUSR1 signal will instruct flow-dscan to dump its internal state. OPTIONS -b Do not detach and run in the background. Alerts go to stderr. -B Do not detach and run in the background. Alerts go to syslog. -d debug_level Enable debugging. -D iplist_depth Depth of IP host list for detecting host scanning. -h Display help. -i input_filter Input interface filter list. -I output_filter Output interface filter list. -l Load state from /var/tmp/dscan.state or the filename specified with -s. -L suppress_list Basename of suppress files. There are two suppress files for input and output traffic. The suppress file syntax is IP_address protocol source_port destination_port A '-' can be used as a wildcard in the protocol, source_port, and destination_port fields. Only a single protocol, source_port, and destination_port is supported per IP address. -m Multicast address filter. Use to ignore multicast addresses. -O excessive_octets Trigger an alert if a flow is processed with the octets field exceeding excessive_octets. -p Dump state to /var/tmp/dscan.state or the filename specified with -s. -P excessive_packets Trigger an alert if a flow is processed with the packets field exceeding excessive_packets. -s statefile State filename. Defaults to /var/tmp/dscan.state -S port_scan_trigger Number of ports a IP address must have used to be considered scanning. -t ager_timeout How long to keep flows around. Default to 90000. This is measured in flows processed. -T excessive_time Trigger an alert if a flow is processed with the End-Start field exceeding excessive_time. -w Filter (ignore) candidate inbound www traffic, ie IP protocol 6, source port 80, and destination port > 1023. -W Filter (ignore) candidate outbound www traffic, ie IP protocol 6, destination port 80, and source port > 1023. EXAMPLES In a topology where 25 is the only output interface run flow-dscan over the data in /flows/krc4. Ignore www and multicast traffic, store the internal state in dscan.statefile on exit. Use empty suppress list files dscan.suppress.src and dscan.suppress.dst. The output produced by flow-dscan typically must be manually inspected by using flow-filter and flow-print. Many of the alerts will be false until the suppress lists are populated for the local environment. flow-cat /flows/krc4 | flow-dscan -I25 -b -m -s dscan.statefile -p -W BUGS The ager should automatically become more aggressive when a low memory condition exists. There is no upper limit on the number of records that can be allocated. If the ager is not running often enough the host will be run out of memory. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-expire.10000644000076600007660000000555707552463661012556 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-expire\fP" "1" .SH "NAME" \fBflow-expire\fP \(em Manage storage of flow file archives by expiring old data\&. .SH "SYNOPSIS" .PP \fBflow-expire\fP [-h] [-d\fI debug_level\fP] [-e\fI expire_count\fP] [-E\fI expire_size\fP] -w\fI workdir\fP .SH "DESCRIPTION" .PP The \fBflow-expire\fP utility will remove the oldest flow files in a directory based on either a count of files or space utilization\&. The directory is recursively searched for flow files\&. Files that do not have a flow-tools signature will be ignored\&. The internal timestamp is used so backups or copies of the flow files that do not retain the original timestamp will not impact the operation of \fBflow-expire\fP\&. \fBflow-expire\fP is typically used to manage storage in a distributed environment where flows are collected on a different server than they are archived\&. .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-e\fI expire_count\fP" 10 Retain the maximum number of files so that the total file count is less than \fIexpire_count\fP\&. .IP "-E\fI expire_size\fP" 10 Retain the maximum number of files so that the total storage is less than \fIexpire_size\fP\&. The letters b,K,M,G can be used as multipliers, ie 16 Megabytes is 16M\&. .IP "-h" 10 Display help\&. .IP "-w\fI workdir\fP" 10 Work in \fBworkdir\fP\&. .SH "EXAMPLES" .PP Remove the oldest flow files in \fB/flows/krc4\fP until the total storage is less then 2 Gigabytes\&. .PP \fBflow-expire -E2Gig -w /flows/krc4\fP .PP Remove the oldest flow files in \fB/flows/krc4\fP until the total number of files is less then 100\&. .PP \fBflow-expire -e100 -w /flows/krc4\fP .SH "BUGS" .PP Empty directories are not removed\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-expire.html0000644000076600007660000000670207552463661013353 flow-expire

flow-expire

Name

flow-expire -- Manage storage of flow file archives by expiring old data.

Synopsis

flow-expire [-h] [-d debug_level] [-e expire_count] [-E expire_size] {-w workdir}

DESCRIPTION

The flow-expire utility will remove the oldest flow files in a directory based on either a count of files or space utilization. The directory is recursively searched for flow files. Files that do not have a flow-tools signature will be ignored. The internal timestamp is used so backups or copies of the flow files that do not retain the original timestamp will not impact the operation of flow-expire. flow-expire is typically used to manage storage in a distributed environment where flows are collected on a different server than they are archived.

OPTIONS

-d debug_level

Enable debugging.

-e expire_count

Retain the maximum number of files so that the total file count is less than expire_count.

-E expire_size

Retain the maximum number of files so that the total storage is less than expire_size. The letters b,K,M,G can be used as multipliers, ie 16 Megabytes is 16M.

-h

Display help.

-w workdir

Work in workdir.

EXAMPLES

Remove the oldest flow files in /flows/krc4 until the total storage is less then 2 Gigabytes.

flow-expire -E2Gig -w /flows/krc4

Remove the oldest flow files in /flows/krc4 until the total number of files is less then 100.

flow-expire -e100 -w /flows/krc4

BUGS

Empty directories are not removed.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-expire.sgml0000644000076600007660000000637207410417045013340 flow-expire 1 flow-expire Manage storage of flow file archives by expiring old data. flow-expire -h -d debug_level -e expire_count -E expire_size -w workdir DESCRIPTION The flow-expire utility will remove the oldest flow files in a directory based on either a count of files or space utilization. The directory is recursively searched for flow files. Files that do not have a flow-tools signature will be ignored. The internal timestamp is used so backups or copies of the flow files that do not retain the original timestamp will not impact the operation of flow-expire. flow-expire is typically used to manage storage in a distributed environment where flows are collected on a different server than they are archived. OPTIONS -d debug_level Enable debugging. -e expire_count Retain the maximum number of files so that the total file count is less than expire_count. -E expire_size Retain the maximum number of files so that the total storage is less than expire_size. The letters b,K,M,G can be used as multipliers, ie 16 Megabytes is 16M. -h Display help. -w workdir Work in workdir. EXAMPLES Remove the oldest flow files in /flows/krc4 until the total storage is less then 2 Gigabytes. flow-expire -E2Gig -w /flows/krc4 Remove the oldest flow files in /flows/krc4 until the total number of files is less then 100. flow-expire -e100 -w /flows/krc4 BUGS Empty directories are not removed. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-export.10000644000076600007660000001277607763547163012610 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-export\fP" "1" .SH "NAME" \fBflow-export\fP \(em Export flow-tools files into other NetFlow packages\&. .SH "SYNOPSIS" .PP \fBflow-export\fP [-h] [-d\fI debug_level\fP] [-f\fI format\fP] [-m\fI mask_fields\fP] [-u\fI user:password:host:port:name:table\fP] .SH "DESCRIPTION" .PP The \fBflow-export\fP utility will convert flow-tools flow files to ASCII CSV, cflowd, pcap, wire, mySQL, and PGSQL format\&. .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-f\fI format\fP" 10 Export format\&. Supported formats are: 0 cflowd 1 pcap 2 ASCII CSV 3 MySQL 4 wire 5 PGSQL .IP "-h" 10 Display help\&. .IP "-m\fI mask_fields\fP" 10 Select fields for MySQL, PostgresSQL, cflowd, and ASCII formats\&. The \fImask_fields\fP is built from a bitwise OR of the following: .IP "" 10 .PP .nf UNIX_SECS 0x0000000000000001LL UNIX_NSECS 0x0000000000000002LL SYSUPTIME 0x0000000000000004LL EXADDR 0x0000000000000008LL DFLOWS 0x0000000000000010LL DPKTS 0x0000000000000020LL DOCTETS 0x0000000000000040LL FIRST 0x0000000000000080LL LAST 0x0000000000000100LL ENGINE_TYPE 0x0000000000000200LL ENGINE_ID 0x0000000000000400LL SRCADDR 0x0000000000001000LL DSTADDR 0x0000000000002000LL SRC_PREFIX 0x0000000000004000LL DST_PREFIX 0x0000000000008000LL NEXTHOP 0x0000000000010000LL INPUT 0x0000000000020000LL OUTPUT 0x0000000000040000LL SRCPORT 0x0000000000080000LL DSTPORT 0x0000000000100000LL PROT 0x0000000000200000LL TOS 0x0000000000400000LL TCP_FLAGS 0x0000000000800000LL SRC_MASK 0x0000000001000000LL DST_MASK 0x0000000002000000LL SRC_AS 0x0000000004000000LL DST_AS 0x0000000008000000LL IN_ENCAPS 0x0000000010000000LL OUT_ENCAPS 0x0000000020000000LL PEER_NEXTHOP 0x0000000040000000LL ROUTER_SC 0x0000000080000000LL EXTRA_PKTS 0x0000000100000000LL MARKED_TOS 0x0000000200000000LL .fi .IP "" 10 When exporting to cflowd format the \fImask_fields\fP field is the cflowd mask which is defined as the following: .IP "" 10 .PP .nf ROUTERMASK 0x00000001 SRCIPADDRMASK 0x00000002 DSTIPADDRMASK 0x00000004 INPUTIFINDEXMASK 0x00000008 OUTPUTIFINDEXMASK 0x00000010 SRCPORTMASK 0x00000020 DSTPORTMASK 0x00000040 PKTSMASK 0x00000080 BYTESMASK 0x00000100 IPNEXTHOPMASK 0x00000200 STARTTIMEMASK 0x00000400 ENDTIMEMASK 0x00000800 PROTOCOLMASK 0x00001000 TOSMASK 0x00002000 SRCASMASK 0x00004000 DSTASMASK 0x00008000 SRCMASKLENMASK 0x00010000 DSTMASKLENMASK 0x00020000 TCPFLAGSMASK 0x00040000 INPUTENCAPMASK 0x00080000 OUTPUTENCAPMASK 0x00100000 PEERNEXTHOPMASK 0x00200000 ENGINETYPEMASK 0x00400000 ENGINEIDMASK 0x00800000 INDEX_V1_MASK 0x00043FFF INDEX_V5_MASK 0x00C7FFFF INDEX_V6_MASK 0x00FFFFFF INDEX_V7_MASK 0x00C7FFFF INDEX_V8_1_MASK 0x00C0CD99 INDEX_V8_2_MASK 0x00C00DE1 INDEX_V8_3_MASK 0x00C14D8B INDEX_V8_4_MASK 0x00C28D95 INDEX_V8_5_MASK 0x00C3CD9F .fi .IP "" 10 The default value is all fields applicable to the the flow file, or the cflowd INDEX mask applicabable to the export format\&. .IP "-u\fI user:password:host:port:name:table\fP" 10 Configure MySQL or PostgresSQL Access\&. .SH "EXAMPLES" .PP Convert the flow-tools file \fBflows\fP to the cflowd file \fBflows\&.cflowd\fP\&. Include all fields\&. .PP \fBflow-export -f0 < flows > flows\&.cflowd\fP .SH "EXAMPLES" .PP Convert the flow-tools file \fBflows\fP to the ASCII\&. Include the SRCADDR and DSTADDR fields\&. .PP \fBflow-export -f2 -m0x3000 < flows > flows\&.ascii\fP .SH "EXAMPLES" .PP Export the flow-tools file \fBflows\fP to an MySQL Database\&. Include only SRCADDR, DSTADDR and DOCTETS\&. .PP \fBflow-export -f3 -mSRCADDR,DSTADDR,DOCTETS -u "user:password:host:port:name:table" < flows \fP .SH "BUGS" .PP The pcap format is a hack\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .PP Database Support: William Emmanuel Yu wyu@ateno\&.edu .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Thu 04 Dec 2003, 01:04 flow-tools-0.68/docs/flow-export.html0000644000076600007660000001460207763547165013404 flow-export

flow-export

Name

flow-export -- Export flow-tools files into other NetFlow packages.

Synopsis

flow-export [-h] [-d debug_level] [-f format] [-m mask_fields] [-u user:password:host:port:name:table]

DESCRIPTION

The flow-export utility will convert flow-tools flow files to ASCII CSV, cflowd, pcap, wire, mySQL, and PGSQL format.

OPTIONS

-d debug_level

Enable debugging.

-f format

Export format. Supported formats are: 0 cflowd 1 pcap 2 ASCII CSV 3 MySQL 4 wire 5 PGSQL

-h

Display help.

-m mask_fields

Select fields for MySQL, PostgresSQL, cflowd, and ASCII formats. The mask_fields is built from a bitwise OR of the following:

    UNIX_SECS       0x0000000000000001LL
    UNIX_NSECS      0x0000000000000002LL
    SYSUPTIME       0x0000000000000004LL
    EXADDR          0x0000000000000008LL
    
    DFLOWS          0x0000000000000010LL
    DPKTS           0x0000000000000020LL
    DOCTETS         0x0000000000000040LL
    FIRST           0x0000000000000080LL
    
    LAST            0x0000000000000100LL
    ENGINE_TYPE     0x0000000000000200LL
    ENGINE_ID       0x0000000000000400LL
    
    SRCADDR         0x0000000000001000LL
    DSTADDR         0x0000000000002000LL
    SRC_PREFIX      0x0000000000004000LL
    DST_PREFIX      0x0000000000008000LL
    NEXTHOP         0x0000000000010000LL
    INPUT           0x0000000000020000LL
    OUTPUT          0x0000000000040000LL
    SRCPORT         0x0000000000080000LL
    
    DSTPORT         0x0000000000100000LL
    PROT            0x0000000000200000LL
    TOS             0x0000000000400000LL
    TCP_FLAGS       0x0000000000800000LL
    
    SRC_MASK        0x0000000001000000LL
    DST_MASK        0x0000000002000000LL
    SRC_AS          0x0000000004000000LL
    DST_AS          0x0000000008000000LL
    
    IN_ENCAPS       0x0000000010000000LL
    OUT_ENCAPS      0x0000000020000000LL
    PEER_NEXTHOP    0x0000000040000000LL
    ROUTER_SC       0x0000000080000000LL
    EXTRA_PKTS      0x0000000100000000LL
    MARKED_TOS      0x0000000200000000LL

When exporting to cflowd format the mask_fields field is the cflowd mask which is defined as the following:

    ROUTERMASK         0x00000001
    SRCIPADDRMASK      0x00000002
    DSTIPADDRMASK      0x00000004
    INPUTIFINDEXMASK   0x00000008
    OUTPUTIFINDEXMASK  0x00000010
    SRCPORTMASK        0x00000020
    DSTPORTMASK        0x00000040
    PKTSMASK           0x00000080
    BYTESMASK          0x00000100
    IPNEXTHOPMASK      0x00000200
    STARTTIMEMASK      0x00000400
    ENDTIMEMASK        0x00000800
    PROTOCOLMASK       0x00001000
    TOSMASK            0x00002000
    SRCASMASK          0x00004000
    DSTASMASK          0x00008000
    SRCMASKLENMASK     0x00010000
    DSTMASKLENMASK     0x00020000
    TCPFLAGSMASK       0x00040000
    INPUTENCAPMASK     0x00080000
    OUTPUTENCAPMASK    0x00100000
    PEERNEXTHOPMASK    0x00200000
    ENGINETYPEMASK     0x00400000
    ENGINEIDMASK       0x00800000
    
    INDEX_V1_MASK      0x00043FFF
    INDEX_V5_MASK      0x00C7FFFF
    INDEX_V6_MASK      0x00FFFFFF
    INDEX_V7_MASK      0x00C7FFFF
    INDEX_V8_1_MASK    0x00C0CD99
    INDEX_V8_2_MASK    0x00C00DE1
    INDEX_V8_3_MASK    0x00C14D8B
    INDEX_V8_4_MASK    0x00C28D95
    INDEX_V8_5_MASK    0x00C3CD9F

The default value is all fields applicable to the the flow file, or the cflowd INDEX mask applicabable to the export format.

-u user:password:host:port:name:table

Configure MySQL or PostgresSQL Access.

EXAMPLES

Convert the flow-tools file flows to the cflowd file flows.cflowd. Include all fields.

flow-export -f0 < flows > flows.cflowd

EXAMPLES

Convert the flow-tools file flows to the ASCII. Include the SRCADDR and DSTADDR fields.

flow-export -f2 -m0x3000 < flows > flows.ascii

EXAMPLES

Export the flow-tools file flows to an MySQL Database. Include only SRCADDR, DSTADDR and DOCTETS.

flow-export -f3 -mSRCADDR,DSTADDR,DOCTETS -u "user:password:host:port:name:table" < flows

BUGS

The pcap format is a hack.

AUTHOR

Mark Fullmer

Database Support: William Emmanuel Yu

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-export.sgml0000644000076600007660000001415207763547161013376 flow-export 1 flow-export Export flow-tools files into other NetFlow packages. flow-export -h -d debug_level -f format -m mask_fields -u user:password:host:port:name:table DESCRIPTION The flow-export utility will convert flow-tools flow files to ASCII CSV, cflowd, pcap, wire, mySQL, and PGSQL format. OPTIONS -d debug_level Enable debugging. -f format Export format. Supported formats are: 0 cflowd 1 pcap 2 ASCII CSV 3 MySQL 4 wire 5 PGSQL -h Display help. -m mask_fields Select fields for MySQL, PostgresSQL, cflowd, and ASCII formats. The mask_fields is built from a bitwise OR of the following: UNIX_SECS 0x0000000000000001LL UNIX_NSECS 0x0000000000000002LL SYSUPTIME 0x0000000000000004LL EXADDR 0x0000000000000008LL DFLOWS 0x0000000000000010LL DPKTS 0x0000000000000020LL DOCTETS 0x0000000000000040LL FIRST 0x0000000000000080LL LAST 0x0000000000000100LL ENGINE_TYPE 0x0000000000000200LL ENGINE_ID 0x0000000000000400LL SRCADDR 0x0000000000001000LL DSTADDR 0x0000000000002000LL SRC_PREFIX 0x0000000000004000LL DST_PREFIX 0x0000000000008000LL NEXTHOP 0x0000000000010000LL INPUT 0x0000000000020000LL OUTPUT 0x0000000000040000LL SRCPORT 0x0000000000080000LL DSTPORT 0x0000000000100000LL PROT 0x0000000000200000LL TOS 0x0000000000400000LL TCP_FLAGS 0x0000000000800000LL SRC_MASK 0x0000000001000000LL DST_MASK 0x0000000002000000LL SRC_AS 0x0000000004000000LL DST_AS 0x0000000008000000LL IN_ENCAPS 0x0000000010000000LL OUT_ENCAPS 0x0000000020000000LL PEER_NEXTHOP 0x0000000040000000LL ROUTER_SC 0x0000000080000000LL EXTRA_PKTS 0x0000000100000000LL MARKED_TOS 0x0000000200000000LL When exporting to cflowd format the mask_fields field is the cflowd mask which is defined as the following: ROUTERMASK 0x00000001 SRCIPADDRMASK 0x00000002 DSTIPADDRMASK 0x00000004 INPUTIFINDEXMASK 0x00000008 OUTPUTIFINDEXMASK 0x00000010 SRCPORTMASK 0x00000020 DSTPORTMASK 0x00000040 PKTSMASK 0x00000080 BYTESMASK 0x00000100 IPNEXTHOPMASK 0x00000200 STARTTIMEMASK 0x00000400 ENDTIMEMASK 0x00000800 PROTOCOLMASK 0x00001000 TOSMASK 0x00002000 SRCASMASK 0x00004000 DSTASMASK 0x00008000 SRCMASKLENMASK 0x00010000 DSTMASKLENMASK 0x00020000 TCPFLAGSMASK 0x00040000 INPUTENCAPMASK 0x00080000 OUTPUTENCAPMASK 0x00100000 PEERNEXTHOPMASK 0x00200000 ENGINETYPEMASK 0x00400000 ENGINEIDMASK 0x00800000 INDEX_V1_MASK 0x00043FFF INDEX_V5_MASK 0x00C7FFFF INDEX_V6_MASK 0x00FFFFFF INDEX_V7_MASK 0x00C7FFFF INDEX_V8_1_MASK 0x00C0CD99 INDEX_V8_2_MASK 0x00C00DE1 INDEX_V8_3_MASK 0x00C14D8B INDEX_V8_4_MASK 0x00C28D95 INDEX_V8_5_MASK 0x00C3CD9F The default value is all fields applicable to the the flow file, or the cflowd INDEX mask applicabable to the export format. -u user:password:host:port:name:table Configure MySQL or PostgresSQL Access. EXAMPLES Convert the flow-tools file flows to the cflowd file flows.cflowd. Include all fields. flow-export -f0 < flows > flows.cflowd EXAMPLES Convert the flow-tools file flows to the ASCII. Include the SRCADDR and DSTADDR fields. flow-export -f2 -m0x3000 < flows > flows.ascii EXAMPLES Export the flow-tools file flows to an MySQL Database. Include only SRCADDR, DSTADDR and DOCTETS. flow-export -f3 -mSRCADDR,DSTADDR,DOCTETS -u "user:password:host:port:name:table" < flows BUGS The pcap format is a hack. AUTHOR Mark Fullmer maf@splintered.net Database Support: William Emmanuel Yu wyu@ateno.edu SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-fanout.1.in0000644000076600007660000001304007762037633013144 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-fanout\fP" "1" .SH "NAME" \fBflow-fanout\fP \(em Fanout (replicate) flow exports to many destinations\&. .SH "SYNOPSIS" .PP \fBflow-fanout\fP [-h] [-A\fI AS0_substitution\fP] [-d\fI debug_level\fP] [-f\fI filter_fname\fP] [-F\fI filter_definition\fP] [-m\fI privacy_mask\fP] [-p\fI pidfile\fP] [-s] [-S\fI stat_interval\fP] [-V\fI pdu_version\fP] [-x\fI xmit_delay\fP] \fIlocalip/remoteip/port\fP \fIlocalip/remoteip/port\fP \&... .SH "DESCRIPTION" .PP The \fBflow-fanout\fP utility will replicate flows arriving on localip/remoteip/port to destination(s) specified by localip/remoteip/port\&. .PP Flows processed by multiple exporters will be mixed into a single output stream\&. This functionality appeared to support Cisco Catalyst exports and may have other uses\&. .PP A SIGQUIT or SIGTERM signal will cause \fBflow-fanout\fP to exit\&. .SH "OPTIONS" .IP "-A\fI AS0_substitution\fP" 10 Cisco\&'s NetFlow exports represent the local autonomous system as 0 instead of the real value\&. This option can be used to replace the 0 in the export with the a configured value\&. Unfortunately under certain configurations AS 0 can also represent a cache miss or non forwarded traffic so use with caution\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-f\fI filter_fname\fP" 10 Filter list filename\&. Defaults to \fB@localstatedir@/cfg/filter\fP\&. .IP "-F\fI filter_definition\fP" 10 Select the active definition\&. Defaults to default\&. .IP "-h" 10 Display help\&. .IP "-m\fI privacy_mask\fP" 10 Apply \fIprivacy_mask\fP to the source and destination IP address of flows\&. For example a privacy_mask of 255\&.255\&.255\&.0 would convert flows with source/destination IP addresses 10\&.1\&.1\&.1 and 10\&.2\&.2\&.2 to 10\&.1\&.1\&.0 and 10\&.2\&.2\&.0 respectively\&. .IP "-p\fI pidfile\fP" 10 Configure the process ID file\&. Use - to disable pid file creation\&. .IP "-s" 10 Spoof the source IP address\&. If the IP address is 0 then it is replaced with the exporter source IP\&. .IP "-S\fI stat_interval\fP" 10 When configured \fBflow-fanout\fP will emit a timestamped message on stderr every \fIstat_interval\fP minutes indicating counters such as the number of flows received, packets processed, and lost flows\&. .IP "-V\fI pdu_version\fP" 10 Use \fIpdu_version\fP format output\&. .PP .nf 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8\&.1 NetFlow AS Aggregation 8\&.2 NetFlow Proto Port Aggregation 8\&.3 NetFlow Source Prefix Aggregation 8\&.4 NetFlow Destination Prefix Aggregation 8\&.5 NetFlow Prefix Aggregation 8\&.6 NetFlow Destination (Catalyst switches) 8\&.7 NetFlow Source Destination (Catalyst switches) 8\&.8 NetFlow Full Flow (Catalyst switches) 8\&.9 NetFlow ToS AS Aggregation 8\&.10 NetFlow ToS Proto Port Aggregation 8\&.11 NetFlow ToS Source Prefix Aggregation 8\&.12 NetFlow ToS Destination Prefix Aggregation 8\&.13 NetFlow ToS Prefix Aggregation 8\&.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 .fi .IP "-x\fI xmit_delay\fP" 10 Configure a microsecond transmit delay between packets\&. This may be necessary in some configurations to prevent a transmit buffer overrun\&. .SH "EXAMPLES" .PP Replicate flows arriving to local IP address 10\&.0\&.0\&.1 from the router exporting with IP address 10\&.1\&.1\&.1 on port 9500 to localhost port 9500 and 10\&.5\&.5\&.5 port 9200\&. The exports sent to 10\&.5\&.5\&.5 will be sent with a source IP address of 10\&.0\&.0\&.5 which must be a valid local IP address\&. .PP \fBflow-fanout 10\&.0\&.0\&.1/10\&.1\&.1\&.1/9500 0/0/9500 10\&.0\&.0\&.5/10\&.5\&.5\&.5/9200\fP .SH "BUGS" .PP NetFlow exports do not contain the exporter IP address inside the payload so the original exporter IP address (typically a router) will be lost when using \fBflow-fanout\fP\&. A work around for this protocol limitation is to use local IP aliases and the \fIlocalip\fP option\&. When the spoofing option is used multiple exporters with different IP addresses will share the same sequence number but will have the original source IP\&. Fixing this requires per source : destination sequence number mapping\&. It is much easier to just use multiple instances of flow-fanout running on different ports\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 29 Nov 2003, 01:41 flow-tools-0.68/docs/flow-fanout.html.in0000644000076600007660000001666107762037641013763 flow-fanout

flow-fanout

Name

flow-fanout -- Fanout (replicate) flow exports to many destinations.

Synopsis

flow-fanout [-h] [-A AS0_substitution] [-d debug_level] [-f filter_fname] [-F filter_definition] [-m privacy_mask] [-p pidfile] [-s] [-S stat_interval] [-V pdu_version] [-x xmit_delay] {localip/remoteip/port} {localip/remoteip/port...}

DESCRIPTION

The flow-fanout utility will replicate flows arriving on localip/remoteip/port to destination(s) specified by localip/remoteip/port.

Flows processed by multiple exporters will be mixed into a single output stream. This functionality appeared to support Cisco Catalyst exports and may have other uses.

A SIGQUIT or SIGTERM signal will cause flow-fanout to exit.

OPTIONS

-A AS0_substitution

Cisco's NetFlow exports represent the local autonomous system as 0 instead of the real value. This option can be used to replace the 0 in the export with the a configured value. Unfortunately under certain configurations AS 0 can also represent a cache miss or non forwarded traffic so use with caution.

-d debug_level

Enable debugging.

-f filter_fname

Filter list filename. Defaults to @localstatedir@/cfg/filter.

-F filter_definition

Select the active definition. Defaults to default.

-h

Display help.

-m privacy_mask

Apply privacy_mask to the source and destination IP address of flows. For example a privacy_mask of 255.255.255.0 would convert flows with source/destination IP addresses 10.1.1.1 and 10.2.2.2 to 10.1.1.0 and 10.2.2.0 respectively.

-p pidfile

Configure the process ID file. Use - to disable pid file creation.

-s

Spoof the source IP address. If the IP address is 0 then it is replaced with the exporter source IP.

-S stat_interval

When configured flow-fanout will emit a timestamped message on stderr every stat_interval minutes indicating counters such as the number of flows received, packets processed, and lost flows.

-V pdu_version

Use pdu_version format output.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-x xmit_delay

Configure a microsecond transmit delay between packets. This may be necessary in some configurations to prevent a transmit buffer overrun.

EXAMPLES

Replicate flows arriving to local IP address 10.0.0.1 from the router exporting with IP address 10.1.1.1 on port 9500 to localhost port 9500 and 10.5.5.5 port 9200. The exports sent to 10.5.5.5 will be sent with a source IP address of 10.0.0.5 which must be a valid local IP address.

flow-fanout 10.0.0.1/10.1.1.1/9500 0/0/9500 10.0.0.5/10.5.5.5/9200

BUGS

NetFlow exports do not contain the exporter IP address inside the payload so the original exporter IP address (typically a router) will be lost when using flow-fanout. A work around for this protocol limitation is to use local IP aliases and the localip option. When the spoofing option is used multiple exporters with different IP addresses will share the same sequence number but will have the original source IP. Fixing this requires per source : destination sequence number mapping. It is much easier to just use multiple instances of flow-fanout running on different ports.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-fanout.sgml0000644000076600007660000001504307762037550013344 flow-fanout 1 flow-fanout Fanout (replicate) flow exports to many destinations. flow-fanout -h -A AS0_substitution -d debug_level -f filter_fname -F filter_definition -m privacy_mask -p pidfile -s -S stat_interval -V pdu_version -x xmit_delay localip/remoteip/port localip/remoteip/port DESCRIPTION The flow-fanout utility will replicate flows arriving on localip/remoteip/port to destination(s) specified by localip/remoteip/port. Flows processed by multiple exporters will be mixed into a single output stream. This functionality appeared to support Cisco Catalyst exports and may have other uses. A SIGQUIT or SIGTERM signal will cause flow-fanout to exit. OPTIONS -A AS0_substitution Cisco's NetFlow exports represent the local autonomous system as 0 instead of the real value. This option can be used to replace the 0 in the export with the a configured value. Unfortunately under certain configurations AS 0 can also represent a cache miss or non forwarded traffic so use with caution. -d debug_level Enable debugging. -f filter_fname Filter list filename. Defaults to @localstatedir@/cfg/filter. -F filter_definition Select the active definition. Defaults to default. -h Display help. -m privacy_mask Apply privacy_mask to the source and destination IP address of flows. For example a privacy_mask of 255.255.255.0 would convert flows with source/destination IP addresses 10.1.1.1 and 10.2.2.2 to 10.1.1.0 and 10.2.2.0 respectively. -p pidfile Configure the process ID file. Use - to disable pid file creation. -s Spoof the source IP address. If the IP address is 0 then it is replaced with the exporter source IP. -S stat_interval When configured flow-fanout will emit a timestamped message on stderr every stat_interval minutes indicating counters such as the number of flows received, packets processed, and lost flows. -V pdu_version Use pdu_version format output. 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -x xmit_delay Configure a microsecond transmit delay between packets. This may be necessary in some configurations to prevent a transmit buffer overrun. EXAMPLES Replicate flows arriving to local IP address 10.0.0.1 from the router exporting with IP address 10.1.1.1 on port 9500 to localhost port 9500 and 10.5.5.5 port 9200. The exports sent to 10.5.5.5 will be sent with a source IP address of 10.0.0.5 which must be a valid local IP address. flow-fanout 10.0.0.1/10.1.1.1/9500 0/0/9500 10.0.0.5/10.5.5.5/9200 BUGS NetFlow exports do not contain the exporter IP address inside the payload so the original exporter IP address (typically a router) will be lost when using flow-fanout. A work around for this protocol limitation is to use local IP aliases and the localip option. When the spoofing option is used multiple exporters with different IP addresses will share the same sequence number but will have the original source IP. Fixing this requires per source : destination sequence number mapping. It is much easier to just use multiple instances of flow-fanout running on different ports. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-filter.10000644000076600007660000001247410142036157012524 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-filter\fP" "1" .SH "NAME" \fBflow-filter\fP \(em Filter flows\&. .SH "SYNOPSIS" .PP \fBflow-filter\fP [-hko] [-a\fI src_as_filter\fP] [-A\fI dst_as_filter\fP] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-D\fI dstaddr_filter_name\fP] [-d\fI debug_level\fP] [-e\fI exaddr_filter\fP] [-f\fI acl_fname\fP] [-i\fI input_filter\fP] [-I\fI output_filter\fP] [-p\fI srcport_filter\fP] [-P\fI dstport_filter\fP] [-r\fI ipprot_filter\fP] [-S\fI srcaddr_filter_name\fP] [-t\fI tos_filter\fP] [-T\fI tcp_flags_filter\fP] [-x\fI nexthop_filter_name\fP] [-z\fI z_level\fP] .SH "DESCRIPTION" .PP The \fBflow-filter\fP utility will filter flows based on user selectable criteria\&. The IP address filters are defined in \fBflow\&.acl\fP or by the filename specified by -f\&. .PP Other filters such as input interface and ports are defined on the command line\&. These filters accept range and negation operators, ie -i1-15 for input interfaces 1 through 15 or -i1,15 for input interfaces 1 and 15, or !1,15 for not input interfaces 1 and 15\&. .PP The syntax is kludgy and needs reworked but works for most applications\&. .SH "OPTIONS" .IP "-a\fI src_as_filter\fP" 10 Source AS filter, ie -a159 to permit Autonomous System 159\&. .IP "-A\fI dst_as_filter\fP" 10 Destination AS filter, ie -A159,3112 to permit Autonomous Systems 159 and 3112\&. .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-D\fI dstaddr_filter_name\fP" 10 Destination IP address filter\&. This is the name or number of a standard access list defined in \fBflow\&.acl\fP or the file specified by -f\&. .IP "-e\fI exaddr_filter\fP" 10 Exporter IP address filter\&. One exporter address can be filtered\&. .IP "-f\fI acl_fname\fP" 10 Access list filename\&. Defaults to \fBflow\&.acl\fP\&. .IP "-h" 10 Display help\&. .IP "-i\fI input_filter\fP" 10 Input interface filter, ie -i0 to permit traffic from interface 0\&. .IP "-k" 10 Keep time from input\&. .IP "-I\fI output_filter\fP" 10 Output interface filter, ie -I0 to permit traffic to interface 0\&. .IP "-o" 10 Logical OR instead of AND filters\&. .IP "-p\fI srcport_filter\fP" 10 Source port filter, ie -p80 to only permit source port 80\&. .IP "-P\fI dstport_filter\fP" 10 Destination port filter, ie -P80,8080 to permit destination ports 80 and 8080\&. .IP "-r\fI ipprot_filter\fP" 10 IP Protocol filter, ie -r6 to only permit TCP traffic\&. .IP "-S\fI srcaddr_filter_name\fP" 10 Source IP address filter\&. This is the name or number of a standard access list defined in \fBflow\&.acl\fP or the file specified by -f\&. .IP "-t\fI tos_filter\fP" 10 ToS bits filter\&. An optional mask is available which is applied to the tos field before comparing to the filter list\&. For example to match a tos bit pattern of 101xxxxx use 0xA0/0xE0\&. .IP "-T\fI tcp_flags_filter\fP" 10 TCP bits filter\&. An optional mask is available which is applied to the TCP flags field before comparing to the filter list\&. For example to match a flows with the SYN bit set use 0x2/0x2\&. .IP "-x\fI nexthop_filter_name\fP" 10 NextHop IP address filter\&. This is the name or number of a standard access list defined in \fBflow\&.acl\fP or the file specified by -f\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "EXAMPLES" .PP Print all traffic with a destination port of 80\&. .PP \fBflow-cat /flows/krc4 | flow-filter -P80 | flow-print\fP .PP Print all traffic with with source IP 10\&.0\&.0\&.1\&. Populate \fBflow\&.acl\fP with ip access-list standard badguy permit host 10\&.0\&.0\&.1 .PP \fBflow-cat /flows/krc4 | flow-filter -Sbadguy | flow-print\fP .PP Report all destinations that IP 10\&.0\&.0\&.1 has sent traffic to\&. Sort by octets\&. Populate \fBflow\&.acl\fP with ip access-list standard badguy permit host 10\&.0\&.0\&.1 .PP \fBflow-cat /flows/krc4 | flow-filter -Sbadguy | flow-stat -f8 -S2\fP .SH "BUGS" .PP Extended access lists are not fully implemented\&. The command line filter syntax is a kludge\&. .SH "NOTES" .PP Use flow-nfilter\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Tue 02 Nov 2004, 21:03 flow-tools-0.68/docs/flow-filter.html0000644000076600007660000001644310142036167013331 flow-filter

flow-filter

Name

flow-filter -- Filter flows.

Synopsis

flow-filter [-hko] [-a src_as_filter] [-A dst_as_filter] [-b big|little] [-C comment] [-D dstaddr_filter_name] [-d debug_level] [-e exaddr_filter] [-f acl_fname] [-i input_filter] [-I output_filter] [-p srcport_filter] [-P dstport_filter] [-r ipprot_filter] [-S srcaddr_filter_name] [-t tos_filter] [-T tcp_flags_filter] [-x nexthop_filter_name] [-z z_level]

DESCRIPTION

The flow-filter utility will filter flows based on user selectable criteria. The IP address filters are defined in flow.acl or by the filename specified by -f.

Other filters such as input interface and ports are defined on the command line. These filters accept range and negation operators, ie -i1-15 for input interfaces 1 through 15 or -i1,15 for input interfaces 1 and 15, or !1,15 for not input interfaces 1 and 15.

The syntax is kludgy and needs reworked but works for most applications.

OPTIONS

-a src_as_filter

Source AS filter, ie -a159 to permit Autonomous System 159.

-A dst_as_filter

Destination AS filter, ie -A159,3112 to permit Autonomous Systems 159 and 3112.

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-D dstaddr_filter_name

Destination IP address filter. This is the name or number of a standard access list defined in flow.acl or the file specified by -f.

-e exaddr_filter

Exporter IP address filter. One exporter address can be filtered.

-f acl_fname

Access list filename. Defaults to flow.acl.

-h

Display help.

-i input_filter

Input interface filter, ie -i0 to permit traffic from interface 0.

-k

Keep time from input.

-I output_filter

Output interface filter, ie -I0 to permit traffic to interface 0.

-o

Logical OR instead of AND filters.

-p srcport_filter

Source port filter, ie -p80 to only permit source port 80.

-P dstport_filter

Destination port filter, ie -P80,8080 to permit destination ports 80 and 8080.

-r ipprot_filter

IP Protocol filter, ie -r6 to only permit TCP traffic.

-S srcaddr_filter_name

Source IP address filter. This is the name or number of a standard access list defined in flow.acl or the file specified by -f.

-t tos_filter

ToS bits filter. An optional mask is available which is applied to the tos field before comparing to the filter list. For example to match a tos bit pattern of 101xxxxx use 0xA0/0xE0.

-T tcp_flags_filter

TCP bits filter. An optional mask is available which is applied to the TCP flags field before comparing to the filter list. For example to match a flows with the SYN bit set use 0x2/0x2.

-x nexthop_filter_name

NextHop IP address filter. This is the name or number of a standard access list defined in flow.acl or the file specified by -f.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Print all traffic with a destination port of 80.

flow-cat /flows/krc4 | flow-filter -P80 | flow-print

Print all traffic with with source IP 10.0.0.1. Populate flow.acl with ip access-list standard badguy permit host 10.0.0.1

flow-cat /flows/krc4 | flow-filter -Sbadguy | flow-print

Report all destinations that IP 10.0.0.1 has sent traffic to. Sort by octets. Populate flow.acl with ip access-list standard badguy permit host 10.0.0.1

flow-cat /flows/krc4 | flow-filter -Sbadguy | flow-stat -f8 -S2

BUGS

Extended access lists are not fully implemented. The command line filter syntax is a kludge.

NOTES

Use flow-nfilter.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-filter.sgml0000644000076600007660000001716410142036147013326 flow-filter 1 flow-filter Filter flows. flow-filter -hko -a src_as_filter -A dst_as_filter -b big|little -C comment -D dstaddr_filter_name -d debug_level -e exaddr_filter -f acl_fname -i input_filter -I output_filter -p srcport_filter -P dstport_filter -r ipprot_filter -S srcaddr_filter_name -t tos_filter -T tcp_flags_filter -x nexthop_filter_name -z z_level DESCRIPTION The flow-filter utility will filter flows based on user selectable criteria. The IP address filters are defined in flow.acl or by the filename specified by -f. Other filters such as input interface and ports are defined on the command line. These filters accept range and negation operators, ie -i1-15 for input interfaces 1 through 15 or -i1,15 for input interfaces 1 and 15, or !1,15 for not input interfaces 1 and 15. The syntax is kludgy and needs reworked but works for most applications. OPTIONS -a src_as_filter Source AS filter, ie -a159 to permit Autonomous System 159. -A dst_as_filter Destination AS filter, ie -A159,3112 to permit Autonomous Systems 159 and 3112. -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -D dstaddr_filter_name Destination IP address filter. This is the name or number of a standard access list defined in flow.acl or the file specified by -f. -e exaddr_filter Exporter IP address filter. One exporter address can be filtered. -f acl_fname Access list filename. Defaults to flow.acl. -h Display help. -i input_filter Input interface filter, ie -i0 to permit traffic from interface 0. -k Keep time from input. -I output_filter Output interface filter, ie -I0 to permit traffic to interface 0. -o Logical OR instead of AND filters. -p srcport_filter Source port filter, ie -p80 to only permit source port 80. -P dstport_filter Destination port filter, ie -P80,8080 to permit destination ports 80 and 8080. -r ipprot_filter IP Protocol filter, ie -r6 to only permit TCP traffic. -S srcaddr_filter_name Source IP address filter. This is the name or number of a standard access list defined in flow.acl or the file specified by -f. -t tos_filter ToS bits filter. An optional mask is available which is applied to the tos field before comparing to the filter list. For example to match a tos bit pattern of 101xxxxx use 0xA0/0xE0. -T tcp_flags_filter TCP bits filter. An optional mask is available which is applied to the TCP flags field before comparing to the filter list. For example to match a flows with the SYN bit set use 0x2/0x2. -x nexthop_filter_name NextHop IP address filter. This is the name or number of a standard access list defined in flow.acl or the file specified by -f. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Print all traffic with a destination port of 80. flow-cat /flows/krc4 | flow-filter -P80 | flow-print Print all traffic with with source IP 10.0.0.1. Populate flow.acl with ip access-list standard badguy permit host 10.0.0.1 flow-cat /flows/krc4 | flow-filter -Sbadguy | flow-print Report all destinations that IP 10.0.0.1 has sent traffic to. Sort by octets. Populate flow.acl with ip access-list standard badguy permit host 10.0.0.1 flow-cat /flows/krc4 | flow-filter -Sbadguy | flow-stat -f8 -S2 BUGS Extended access lists are not fully implemented. The command line filter syntax is a kludge. NOTES Use flow-nfilter. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-gen.10000644000076600007660000000620207552463661012017 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-gen\fP" "1" .SH "NAME" \fBflow-gen\fP \(em Generate test flows .SH "SYNOPSIS" .PP \fBflow-gen\fP [-h] [-b\fI big\fP|\fIlittle\fP] [-d\fI debug_level\fP] [-n\fI count\fP] [-V\fI version\fP] [-z\fI z_level\fP] .SH "DESCRIPTION" .PP The \fBflow-gen\fP utility generates a test pattern of flows in any of the currently supported export versions typically for debugging purposes\&. .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-h" 10 Display help\&. .IP "-n\fI count\fP" 10 Generate count flows\&. Default 1000\&. .IP "-V\fI version\fP" 10 Generate version type exports\&. Supported versions are: .PP .nf 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8\&.1 NetFlow AS Aggregation 8\&.2 NetFlow Proto Port Aggregation 8\&.3 NetFlow Source Prefix Aggregation 8\&.4 NetFlow Destination Prefix Aggregation 8\&.5 NetFlow Prefix Aggregation 8\&.6 NetFlow Destination (Catalyst switches) 8\&.7 NetFlow Source Destination (Catalyst switches) 8\&.8 NetFlow Full Flow (Catalyst switches) 8\&.9 NetFlow ToS AS Aggregation 8\&.10 NetFlow ToS Proto Port Aggregation 8\&.11 NetFlow ToS Source Prefix Aggregation 8\&.12 NetFlow ToS Destination Prefix Aggregation 8\&.13 NetFlow ToS Prefix Aggregation 8\&.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 .fi .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "EXAMPLES" .PP Generate a test pattern of 1000 version 5 flows and send them in the Cisco NetFlow packet format to 10\&.0\&.0\&.1 port 9500\&. .PP \fBflow-gen -V5 | flow-send 0/10\&.0\&.0\&.1/9500\fP .SH "BUGS" .PP The test pattern may change between releases\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-gen.html0000644000076600007660000001111307552463661012620 flow-gen

flow-gen

Name

flow-gen -- Generate test flows

Synopsis

flow-gen [-h] [-b big|little] [-d debug_level] [-n count] [-V version] [-z z_level]

DESCRIPTION

The flow-gen utility generates a test pattern of flows in any of the currently supported export versions typically for debugging purposes.

OPTIONS

-b big|little

Byte order of output.

-d debug_level

Enable debugging.

-h

Display help.

-n count

Generate count flows. Default 1000.

-V version

Generate version type exports. Supported versions are:

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Generate a test pattern of 1000 version 5 flows and send them in the Cisco NetFlow packet format to 10.0.0.1 port 9500.

flow-gen -V5 | flow-send 0/10.0.0.1/9500

BUGS

The test pattern may change between releases.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-gen.sgml0000644000076600007660000000675707412764642012636 flow-gen 1 flow-gen Generate test flows flow-gen -h -b big|little -d debug_level -n count -V version -z z_level DESCRIPTION The flow-gen utility generates a test pattern of flows in any of the currently supported export versions typically for debugging purposes. OPTIONS -b big|little Byte order of output. -d debug_level Enable debugging. -h Display help. -n count Generate count flows. Default 1000. -V version Generate version type exports. Supported versions are: 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Generate a test pattern of 1000 version 5 flows and send them in the Cisco NetFlow packet format to 10.0.0.1 port 9500. flow-gen -V5 | flow-send 0/10.0.0.1/9500 BUGS The test pattern may change between releases. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-header.10000644000076600007660000000433107552463661012477 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-header\fP" "1" .SH "NAME" \fBflow-header\fP \(em Display meta information in flow file\&. .SH "SYNOPSIS" .PP \fBflow-header\fP [-h] [-c\fI comment_char\fP] [-d\fI debug_level\fP] .SH "DESCRIPTION" .PP The \fBflow-header\fP utility will display the flow meta information flow-tools uses internally\&. .SH "OPTIONS" .IP "-c\fI comment_char\fP" 10 Field header\&. Defaults to # .IP "-d\fI debug_level\fP" 10 Turn on debugging\&. .IP "-h" 10 Display help\&. .SH "EXAMPLES" .PP Display the header information in \fBflowfile\fP \fBflow-header < \fBflowfile\fP\fP .PP .nf # # mode: normal # capture hostname: foo\&.bar # exporter IP address: 10\&.0\&.0\&.1 # capture start: Wed May 1 23:45:02 2001 # compress: on # byte order: little # stream version: 3 # export version: 5 # lost flows: 480 # corrupt packets: 0 # sequencer resets: 0 # capture end: Thu May 2 00:00:01 2001 # capture flows: 65880 .fi .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-header.html0000644000076600007660000000465407552463661013313 flow-header

flow-header

Name

flow-header -- Display meta information in flow file.

Synopsis

flow-header [-h] [-c comment_char] [-d debug_level]

DESCRIPTION

The flow-header utility will display the flow meta information flow-tools uses internally.

OPTIONS

-c comment_char

Field header. Defaults to #

-d debug_level

Turn on debugging.

-h

Display help.

EXAMPLES

Display the header information in flowfile flow-header < flowfile

#
# mode:                 normal
# capture hostname:     foo.bar
# exporter IP address:  10.0.0.1
# capture start:        Wed May  1 23:45:02 2001
# compress:             on
# byte order:           little
# stream version:       3
# export version:       5
# lost flows:           480
# corrupt packets:      0
# sequencer resets:     0
# capture end:          Thu May  2 00:00:01 2001
# capture flows:        65880

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-header.sgml0000644000076600007660000000430107410417170013261 flow-header 1 flow-header Display meta information in flow file. flow-header -h -c comment_char -d debug_level DESCRIPTION The flow-header utility will display the flow meta information flow-tools uses internally. OPTIONS -c comment_char Field header. Defaults to # -d debug_level Turn on debugging. -h Display help. EXAMPLES Display the header information in flowfile flow-header < flowfile # # mode: normal # capture hostname: foo.bar # exporter IP address: 10.0.0.1 # capture start: Wed May 1 23:45:02 2001 # compress: on # byte order: little # stream version: 3 # export version: 5 # lost flows: 480 # corrupt packets: 0 # sequencer resets: 0 # capture end: Thu May 2 00:00:01 2001 # capture flows: 65880 BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-import.10000644000076600007660000001210207552463661012554 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-import\fP" "1" .SH "NAME" \fBflow-import\fP \(em Import flows into flow-tools from other NetFlow packages\&. .SH "SYNOPSIS" .PP \fBflow-import\fP [-h] [-b\fI big|little\fP] [-d\fI debug_level\fP] [-f\fI format\fP] [-m\fI mask_fields\fP] [-V\fI pdu_version\fP] [-z\fI z_level\fP] .SH "DESCRIPTION" .PP The \fBflow-import\fP utility will convert data from cflowd and ASCII CSV files into flow-tools format\&. .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-f\fI format\fP" 10 Export format\&. Supported formats are: .PP .nf 0 cflowd 2 ASCII CSV 3 Cisco NFCollector .fi .IP "-h" 10 Display help\&. .IP "-m\fI mask_fields\fP" 10 Select fields for cflowd and ASCII formats\&. The \fImask_fields\fP is built from a bitwise OR of the following: .IP "" 10 .PP .nf UNIX_SECS 0x0000000000000001LL UNIX_NSECS 0x0000000000000002LL SYSUPTIME 0x0000000000000004LL EXADDR 0x0000000000000008LL DFLOWS 0x0000000000000010LL DPKTS 0x0000000000000020LL DOCTETS 0x0000000000000040LL FIRST 0x0000000000000080LL LAST 0x0000000000000100LL ENGINE_TYPE 0x0000000000000200LL ENGINE_ID 0x0000000000000400LL SRCADDR 0x0000000000001000LL DSTADDR 0x0000000000002000LL SRC_PREFIX 0x0000000000004000LL DST_PREFIX 0x0000000000008000LL NEXTHOP 0x0000000000010000LL INPUT 0x0000000000020000LL OUTPUT 0x0000000000040000LL SRCPORT 0x0000000000080000LL DSTPORT 0x0000000000100000LL PROT 0x0000000000200000LL TOS 0x0000000000400000LL TCP_FLAGS 0x0000000000800000LL SRC_MASK 0x0000000001000000LL DST_MASK 0x0000000002000000LL SRC_AS 0x0000000004000000LL DST_AS 0x0000000008000000LL IN_ENCAPS 0x0000000010000000LL OUT_ENCAPS 0x0000000020000000LL PEER_NEXTHOP 0x0000000040000000LL ROUTER_SC 0x0000000080000000LL EXTRA_PKTS 0x0000000100000000LL MARKED_TOS 0x0000000200000000LL .fi .IP "" 10 The default value is all fields applicable to the \fIpdu_version\fP\&. .IP "-V\fI pdu_version\fP" 10 Use \fIpdu_version\fP format output\&. .PP .nf 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8\&.1 NetFlow AS Aggregation 8\&.2 NetFlow Proto Port Aggregation 8\&.3 NetFlow Source Prefix Aggregation 8\&.4 NetFlow Destination Prefix Aggregation 8\&.5 NetFlow Prefix Aggregation 8\&.6 NetFlow Destination (Catalyst switches) 8\&.7 NetFlow Source Destination (Catalyst switches) 8\&.8 NetFlow Full Flow (Catalyst switches) 8\&.9 NetFlow ToS AS Aggregation 8\&.10 NetFlow ToS Proto Port Aggregation 8\&.11 NetFlow ToS Source Prefix Aggregation 8\&.12 NetFlow ToS Destination Prefix Aggregation 8\&.13 NetFlow ToS Prefix Aggregation 8\&.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 .fi .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "EXAMPLES" .PP Convert the cflowd file \fBflows\&.cflowd\fP to the flow-tools file \fBflows\fP\&. Store as Version 5 with compression level 5\&. .PP \fBflow-import -V5 -z5 -f0 < flows\&.cflowd > flows\fP .SH "EXAMPLES" .PP Convert the ASCII CSV data in flows\&.ascii to flow-tools format\&. The ASCII data must include all fields represented by 0xFF31EF in the order listed above\&. Store as Version 5 with no compression\&. .PP \fBflow-import -z0 -f2 -m0xFF31EF < flows\&.ascii > flows\fP .SH "BUGS" .PP The pcap format is a hack\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 05 Oct 2002, 20:46 flow-tools-0.68/docs/flow-import.html0000644000076600007660000001573207552463661013374 flow-import

flow-import

Name

flow-import -- Import flows into flow-tools from other NetFlow packages.

Synopsis

flow-import [-h] [-b big|little] [-d debug_level] [-f format] [-m mask_fields] [-V pdu_version] [-z z_level]

DESCRIPTION

The flow-import utility will convert data from cflowd and ASCII CSV files into flow-tools format.

OPTIONS

-b big|little

Byte order of output.

-d debug_level

Enable debugging.

-f format

Export format. Supported formats are:

  0 cflowd
  2 ASCII CSV
  3 Cisco NFCollector

-h

Display help.

-m mask_fields

Select fields for cflowd and ASCII formats. The mask_fields is built from a bitwise OR of the following:

    UNIX_SECS       0x0000000000000001LL
    UNIX_NSECS      0x0000000000000002LL
    SYSUPTIME       0x0000000000000004LL
    EXADDR          0x0000000000000008LL
    
    DFLOWS          0x0000000000000010LL
    DPKTS           0x0000000000000020LL
    DOCTETS         0x0000000000000040LL
    FIRST           0x0000000000000080LL
    
    LAST            0x0000000000000100LL
    ENGINE_TYPE     0x0000000000000200LL
    ENGINE_ID       0x0000000000000400LL
    
    SRCADDR         0x0000000000001000LL
    DSTADDR         0x0000000000002000LL
    SRC_PREFIX      0x0000000000004000LL
    DST_PREFIX      0x0000000000008000LL
    NEXTHOP         0x0000000000010000LL
    INPUT           0x0000000000020000LL
    OUTPUT          0x0000000000040000LL
    SRCPORT         0x0000000000080000LL
    
    DSTPORT         0x0000000000100000LL
    PROT            0x0000000000200000LL
    TOS             0x0000000000400000LL
    TCP_FLAGS       0x0000000000800000LL
    
    SRC_MASK        0x0000000001000000LL
    DST_MASK        0x0000000002000000LL
    SRC_AS          0x0000000004000000LL
    DST_AS          0x0000000008000000LL
    
    IN_ENCAPS       0x0000000010000000LL
    OUT_ENCAPS      0x0000000020000000LL
    PEER_NEXTHOP    0x0000000040000000LL
    ROUTER_SC       0x0000000080000000LL
    EXTRA_PKTS      0x0000000100000000LL
    MARKED_TOS      0x0000000200000000LL

The default value is all fields applicable to the pdu_version.

-V pdu_version

Use pdu_version format output.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Convert the cflowd file flows.cflowd to the flow-tools file flows. Store as Version 5 with compression level 5.

flow-import -V5 -z5 -f0 < flows.cflowd > flows

EXAMPLES

Convert the ASCII CSV data in flows.ascii to flow-tools format. The ASCII data must include all fields represented by 0xFF31EF in the order listed above. Store as Version 5 with no compression.

flow-import -z0 -f2 -m0xFF31EF < flows.ascii > flows

BUGS

The pcap format is a hack.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-import.sgml0000644000076600007660000001337707547640530013371 flow-import 1 flow-import Import flows into flow-tools from other NetFlow packages. flow-import -h -b big|little -d debug_level -f format -m mask_fields -V pdu_version -z z_level DESCRIPTION The flow-import utility will convert data from cflowd and ASCII CSV files into flow-tools format. OPTIONS -b big|little Byte order of output. -d debug_level Enable debugging. -f format Export format. Supported formats are: 0 cflowd 2 ASCII CSV 3 Cisco NFCollector -h Display help. -m mask_fields Select fields for cflowd and ASCII formats. The mask_fields is built from a bitwise OR of the following: UNIX_SECS 0x0000000000000001LL UNIX_NSECS 0x0000000000000002LL SYSUPTIME 0x0000000000000004LL EXADDR 0x0000000000000008LL DFLOWS 0x0000000000000010LL DPKTS 0x0000000000000020LL DOCTETS 0x0000000000000040LL FIRST 0x0000000000000080LL LAST 0x0000000000000100LL ENGINE_TYPE 0x0000000000000200LL ENGINE_ID 0x0000000000000400LL SRCADDR 0x0000000000001000LL DSTADDR 0x0000000000002000LL SRC_PREFIX 0x0000000000004000LL DST_PREFIX 0x0000000000008000LL NEXTHOP 0x0000000000010000LL INPUT 0x0000000000020000LL OUTPUT 0x0000000000040000LL SRCPORT 0x0000000000080000LL DSTPORT 0x0000000000100000LL PROT 0x0000000000200000LL TOS 0x0000000000400000LL TCP_FLAGS 0x0000000000800000LL SRC_MASK 0x0000000001000000LL DST_MASK 0x0000000002000000LL SRC_AS 0x0000000004000000LL DST_AS 0x0000000008000000LL IN_ENCAPS 0x0000000010000000LL OUT_ENCAPS 0x0000000020000000LL PEER_NEXTHOP 0x0000000040000000LL ROUTER_SC 0x0000000080000000LL EXTRA_PKTS 0x0000000100000000LL MARKED_TOS 0x0000000200000000LL The default value is all fields applicable to the pdu_version. -V pdu_version Use pdu_version format output. 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Convert the cflowd file flows.cflowd to the flow-tools file flows. Store as Version 5 with compression level 5. flow-import -V5 -z5 -f0 < flows.cflowd > flows EXAMPLES Convert the ASCII CSV data in flows.ascii to flow-tools format. The ASCII data must include all fields represented by 0xFF31EF in the order listed above. Store as Version 5 with no compression. flow-import -z0 -f2 -m0xFF31EF < flows.ascii > flows BUGS The pcap format is a hack. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-log2rrd.1.in0000644000076600007660000000431510240173712013210 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-log2rrd\fP" "1" .SH "NAME" \fBflow-log2rrd\fP \(em Process the STAT: lines from \fBflow-capture\fP and \fBflow-fanout\fP to RRD files\&. .SH "SYNOPSIS" .PP \fBflow-log2rrd\fP [-p\fI rrd_path\fP] .SH "DESCRIPTION" .PP The \fBflow-log2rrd\fP utility processes the STAT lines generated by \fBflow-capture\fP and \fBflow-fanout\fP and converts them into RRD files\&. RRD\&'s are stored as rrd_path/capture|fanout\&.hostname\&.srcip\&.dstip\&.port\&.rrd\&. The Datastores are flows,pkts,lost representing flows, packets, and lost flows respectively\&. Flow-fanout generates an additional DS nobufs indicating the number of times a write() failed with ENOBUFS\&. .SH "OPTIONS" .IP "-p\fI rrd_path\fP" 10 Path to store files\&. .SH "EXAMPLES" .PP Convert flow-capture STAT lines in /var/log/netflow to RRD\&'s in /flows/rrd/\&. .PP \fBcat /var/log/netflow | flow-rpt2rrd -p /flows/rrd\fP .SH "BUGS" .PP Expects STAT lines every 5 minutes\&. Hard coded to 7 days of 5 minute averages and 365 days of 1 day averages\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Tue 10 May 2005, 14:04 flow-tools-0.68/docs/flow-log2rrd.html.in0000644000076600007660000000454410240376623014026 flow-log2rrd

flow-log2rrd

Name

flow-log2rrd -- Process the STAT: lines from flow-capture and flow-fanout to RRD files.

Synopsis

flow-log2rrd [-p rrd_path]

DESCRIPTION

The flow-log2rrd utility processes the STAT lines generated by flow-capture and flow-fanout and converts them into RRD files. RRD's are stored as rrd_path/capture|fanout.hostname.srcip.dstip.port.rrd. The Datastores are flows,pkts,lost representing flows, packets, and lost flows respectively. Flow-fanout generates an additional DS nobufs indicating the number of times a write() failed with ENOBUFS.

OPTIONS

-p rrd_path

Path to store files.

EXAMPLES

Convert flow-capture STAT lines in /var/log/netflow to RRD's in /flows/rrd/.

cat /var/log/netflow | flow-rpt2rrd -p /flows/rrd

BUGS

Expects STAT lines every 5 minutes. Hard coded to 7 days of 5 minute averages and 365 days of 1 day averages.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-log2rrd.sgml0000644000076600007660000000403110240173710013376 flow-log2rrd 1 flow-log2rrd Process the STAT: lines from flow-capture and flow-fanout to RRD files. flow-log2rrd -p rrd_path DESCRIPTION The flow-log2rrd utility processes the STAT lines generated by flow-capture and flow-fanout and converts them into RRD files. RRD's are stored as rrd_path/capture|fanout.hostname.srcip.dstip.port.rrd. The Datastores are flows,pkts,lost representing flows, packets, and lost flows respectively. Flow-fanout generates an additional DS nobufs indicating the number of times a write() failed with ENOBUFS. OPTIONS -p rrd_path Path to store files. EXAMPLES Convert flow-capture STAT lines in /var/log/netflow to RRD's in /flows/rrd/. cat /var/log/netflow | flow-rpt2rrd -p /flows/rrd BUGS Expects STAT lines every 5 minutes. Hard coded to 7 days of 5 minute averages and 365 days of 1 day averages. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-mask.1.in0000644000076600007660000000606307775360777012626 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-mask\fP" "1" .SH "NAME" \fBflow-mask\fP \(em Apply tags to flow files\&. .SH "SYNOPSIS" .PP \fBflow-mask\fP [-hk] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-m\fI mask_fname\fP] [-M\fI active_def\fP \&...] .SH "DESCRIPTION" .PP The \fBflow-mask\fP utility is used to modify the source and destination mask length\&'s in flow records\&. .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-h" 10 Display help\&. .IP "-k" 10 Keep time from input\&. .IP "-m\fI mask_fname\fP" 10 Load masks from \fBmask_name\fP\&. Defaults to \fB@localstatedir@/cfg/mask\fP .IP "-M\fI mask_def\fP" 10 Use \fIactive_def\fP as the active tag definition(s)\&. .PP .PP The configuration file is a collection of definitions\&. A definition lists a sequence of prefixes and the mask length to replace the matching prefix with\&. Lines begining with # are treated as comments and ignored\&. .PP .PP .nf mask-definition command Description ---------------------------------------------------------------------- mask-definition Begin mask-definition section mask-definition foo prefix List the prefix to match on and the replacement mask\&. prefix 128\&.146/16 24 .fi .SH "EXAMPLES" .PP .nf \f(CW# #file: masks # mask-definition foo # All networks in 128\&.146/16 are /24\&'s\&. prefix 128\&.146/16 24 # except for 128\&.146\&.214/24, which are /32\&'s\&. prefix 128\&.146\&.214/24 32\fR .fi .PP .PP \fBflow-cat \fBflows\fP | flow-mask -mfoo -Fmasks | flow-print -f4\fP .SH "FILES" .PP Configuration files: Mask - \fB@localstatedir@/cfg/mask\&.cfg\fP\&. .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Fri 02 Jan 2004, 16:26 flow-tools-0.68/docs/flow-mask.html.in0000644000076600007660000000733607775361022013416 flow-mask

flow-mask

Name

flow-mask -- Apply tags to flow files.

Synopsis

flow-mask [-hk] [-b big|little] [-C comment] [-d debug_level] [-m mask_fname] [-M active_def...]

DESCRIPTION

The flow-mask utility is used to modify the source and destination mask length's in flow records.

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-h

Display help.

-k

Keep time from input.

-m mask_fname

Load masks from mask_name. Defaults to @localstatedir@/cfg/mask

-M mask_def

Use active_def as the active tag definition(s).

The configuration file is a collection of definitions. A definition lists a sequence of prefixes and the mask length to replace the matching prefix with. Lines begining with # are treated as comments and ignored.

mask-definition command             Description
----------------------------------------------------------------------
mask-definition                     Begin mask-definition section
                                    mask-definition foo

prefix                              List the prefix to match on and the
                                    replacement mask.
                                    prefix 128.146/16 24

EXAMPLES

#
#file: masks
#
mask-definition foo
# All networks in 128.146/16 are /24's.
 prefix 128.146/16 24
# except for 128.146.214/24, which are /32's.
 prefix 128.146.214/24 32

flow-cat flows | flow-mask -mfoo -Fmasks | flow-print -f4

FILES

Configuration files: Mask - @localstatedir@/cfg/mask.cfg.

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-mask.sgml0000644000076600007660000000716507775360640013014 flow-mask 1 flow-mask Apply tags to flow files. flow-mask -hk -b big|little -C comment -d debug_level -m mask_fname -M active_def DESCRIPTION The flow-mask utility is used to modify the source and destination mask length's in flow records. OPTIONS -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -h Display help. -k Keep time from input. -m mask_fname Load masks from mask_name. Defaults to @localstatedir@/cfg/mask -M mask_def Use active_def as the active tag definition(s). The configuration file is a collection of definitions. A definition lists a sequence of prefixes and the mask length to replace the matching prefix with. Lines begining with # are treated as comments and ignored. mask-definition command Description ---------------------------------------------------------------------- mask-definition Begin mask-definition section mask-definition foo prefix List the prefix to match on and the replacement mask. prefix 128.146/16 24 EXAMPLES # #file: masks # mask-definition foo # All networks in 128.146/16 are /24's. prefix 128.146/16 24 # except for 128.146.214/24, which are /32's. prefix 128.146.214/24 32 flow-cat flows | flow-mask -mfoo -Fmasks | flow-print -f4 FILES Configuration files: Mask - @localstatedir@/cfg/mask.cfg. BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-merge.10000644000076600007660000000551307552463661012351 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-merge\fP" "1" .SH "NAME" \fBflow-merge\fP \(em Merge flow files\&. .SH "SYNOPSIS" .PP \fBflow-merge\fP [-aghm] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-o\fI filename\fP] [-z\fI z_level\fP] [\fIfile\fP|\fIdirectory\fP \&...] .SH "DESCRIPTION" .PP The \fBflow-merge\fP utility processes files and/or directories of files in the flow-tools format\&. The resulting merged data set is written to the standard output or \fBfile\fP specified by \fB-o\fP\&. If \fBfile\fP is a single dash (`-\&') or absent, flow-merge will read from the standard input\&. Unlike flow-cat, flow-merge interleaves flow records preserving the relative chronological order\&. .SH "OPTIONS" .IP "-a" 10 Do not ignore filenames that begin with \fBtmp\fP\&. .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-g" 10 Sort file list by capture start time before processing\&. .IP "-h" 10 Display help\&. .IP "-m" 10 Disable the use of mmap()\&. .IP "-p" 10 Preload headers\&. Use to preserve meta information such as lost flows\&. .IP "-o\fI file\fP" 10 Write to \fBfile\fP instead of the standard out\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .IP "\fIfile\fP|\fIdirectory\&.\&.\&.\fP" 10 Process the files and/or directory\&. .SH "EXAMPLES" .PP Merge all flow files begining with ft-v05\&.2001-05\&.01, use flow-print to display the results\&. .PP \fBflow-merge ft-v05\&.2001-05-01\&.* | flow-print\fP .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Larry Lidz ellidz@eridu\&.uchicago\&.edu .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-merge.html0000644000076600007660000000720407552463661013154 flow-merge

flow-merge

Name

flow-merge -- Merge flow files.

Synopsis

flow-merge [-aghm] [-b big|little] [-C comment] [-d debug_level] [-o filename] [-z z_level] [file|directory...]

DESCRIPTION

The flow-merge utility processes files and/or directories of files in the flow-tools format. The resulting merged data set is written to the standard output or file specified by -o. If file is a single dash (`-') or absent, flow-merge will read from the standard input. Unlike flow-cat, flow-merge interleaves flow records preserving the relative chronological order.

OPTIONS

-a

Do not ignore filenames that begin with tmp.

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-g

Sort file list by capture start time before processing.

-h

Display help.

-m

Disable the use of mmap().

-p

Preload headers. Use to preserve meta information such as lost flows.

-o file

Write to file instead of the standard out.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

file|directory...

Process the files and/or directory.

EXAMPLES

Merge all flow files begining with ft-v05.2001-05.01, use flow-print to display the results.

flow-merge ft-v05.2001-05-01.* | flow-print

BUGS

None known.

AUTHOR

Larry Lidz

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-merge.sgml0000644000076600007660000000730307410417244013137 flow-merge 1 flow-merge Merge flow files. flow-merge -aghm -b big|little -C comment -d debug_level -o filename -z z_level file|directory DESCRIPTION The flow-merge utility processes files and/or directories of files in the flow-tools format. The resulting merged data set is written to the standard output or file specified by . If file is a single dash (`-') or absent, flow-merge will read from the standard input. Unlike flow-cat, flow-merge interleaves flow records preserving the relative chronological order. OPTIONS -a Do not ignore filenames that begin with tmp. -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -g Sort file list by capture start time before processing. -h Display help. -m Disable the use of mmap(). -p Preload headers. Use to preserve meta information such as lost flows. -o file Write to file instead of the standard out. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. file|directory... Process the files and/or directory. EXAMPLES Merge all flow files begining with ft-v05.2001-05.01, use flow-print to display the results. flow-merge ft-v05.2001-05-01.* | flow-print BUGS None known. AUTHOR Larry Lidz ellidz@eridu.uchicago.edu SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-nfilter.1.in0000644000076600007660000002571607775360776013343 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-nfilter\fP" "1" .SH "NAME" \fBflow-nfilter\fP \(em Filter flows\&. .SH "SYNOPSIS" .PP \fBflow-nfilter\fP [-hk] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-f\fI filter_fname\fP] [-F\fI filter_definition\fP] [-v\fI variable binding\fP] [-z\fI z_level\fP] .SH "DESCRIPTION" .PP The \fBflow-nfilter\fP utility will filter flows based on user selectable criteria\&. Filters are defined in a configuration file and are composed of primitives and a definition\&. Definitions contain match lines grouped to form logical AND and OR operations on the flow using the selected primitives\&. A definition may contain the invert command which will invert the result of the evaluation\&. .PP Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option\&. .PP Filter primitives begin with the filter-primitive keyword followed by a symbolic name\&. Each primitive has a type defined below\&. A list of permit and or deny keywords followed by an argument are later evaulated to determine if the flow is permitted or denied\&. The default action for a primitive is to deny which may be changed with the default keyword\&. Symbolic substitutions are done where appropriate\&. .PP .PP The match keyword in a definition selects the criteria to match a primitive\&. A match type may allow more than one type of primitive, for example the src-ip-addr match type will accept any of {ip-address, ip-address-mask, ip-address-prefix} primitive types\&. .PP .PP .nf Primitive type Type Description/Example ------------------------------------------------------------------- as Bucket Autonomous System Number\&. 600,159,3112 ip-address-prefix-len Numeric Integer from 0 to 32\&. 16-31 ip-protocol Bucket Integer from 0 to 255\&. 6,17,1 ip-tos Bucket Integer from 0 to 255 with mask\&. 0xA0/0xE0 ip-tcp-flags Bucket Integer from 0 to 255 with mask\&. 0x2/0x2 ifindex Bucket Integer from 0 to 65535 0,5,10 engine Bucket Integer from 0 to 255\&. 0 ip-port Bucket Integer from 0 to 65535\&. 80,8080,23,22 ip-address Hash List of IP Addresses\&. 10\&.0\&.0\&.1 ip-address-mask List List of IP address/mask pairs\&. 10\&.1\&.0\&.0 255\&.255\&.0\&.0 ip-address-prefix Trie List of IP address/mask pairs\&. 10\&.1/16 tag Hash List of tags\&. 0xFF00 tag-mask List List of tags\&. 0xF000/0xFF00 counter List List of Integers with qualifier\&. lt 32 time List List of relative time specifiers\&. gt 5:00 time-date List List of absolute time specifiers\&. gt December 12, 2002 5:13:21 double List List of doubles with qualifier\&. lt 32\&.0 rate Element Rate is calculated as 1/rate\&. permit 100 Match type Description Primitives accepted ------------------------------------------------------------------- source-as Source AS as destination-as Destination AS as ip-source-address Source IP Address ip-address, ip-address-mask, ip-address-prefix ip-destination-address Destination IP Address ip-address, ip-address-mask, ip-address-prefix ip-exporter-address Exporter IP Address ip-address, ip-address-mask, ip-address-prefix ip-nexthop-address NextHop IP Address ip-address, ip-address-mask, ip-address-prefix ip-shortcut-address Shortcut IP Address ip-address, ip-address-mask, ip-address-prefix ip-protocol IP Protocol ip-protocol ip-source-address-prefix-len Source IP address ip-address-prefix-len prefix length ip-destination-address-prefix-len Destination IP address ip-address-prefix-len prefix length ip-tos IP Type Of Service ip-tos ip-marked-tos IP Type Of Service ip-tos ip-tcp-flags IP/TCP Flags ip-tcp-flags ip-source-port Source IP Port ip-port eg TCP/UDP ip-destination-port Destination IP Port ip-port eg TCP/UDP input-interface Source ifIndex ifindex eg Input Interface output-interface Destination ifIndex ifindex eg Output Interface start-time Start Time of flow time, time-date end-time End Time of Flow time, time-date flows Number of flows counter octets Number of octets counter packets Number of packets counter duration Duration of flow in ms counter engine-id Engine ID engine engine-type Engine Type engine source-tag Source Tag tag, tag-mask destination-tag Destination Tag tag, tag-mask pps Packets Per Second double bps Bits Per Second double random-sample Random Sample rate .fi .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-f\fI filter_fname\fP" 10 Filter list filename\&. Defaults to \fB@localstatedir@/cfg/filter\fP\&. .IP "-F\fI filter_definition\fP" 10 Select the active definition\&. Defaults to default\&. .IP "-h" 10 Display help\&. .IP "-k" 10 Keep time from input\&. .IP "-v\fI variable binding\fP" 10 Set a variable FOO=bar\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "TIME/DATE parsing" .PP time-date parsing is implemented with \fBgetdate\&.y\fP, a commonly used function to process free-form time date specifications\&. Example usage borrowed from \fBcvs\fP: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT .SH "EXAMPLES" .PP An example of filter configuration file\&. .PP .nf filter-primitive srate type rate permit 100 filter-primitive test-as type as permit 600,159 filter-primitive test-prefix-len type ip-address-prefix-len permit 32 filter-primitive test-protocol type ip-protocol permit tcp filter-primitive test-tos type ip-tos mask 0xA0 permit 0xE0 filter-primitive test-tcp-flags type ip-tcp-flags mask 0x2 permit 0x2 filter-primitive test-ifindex type ifindex permit 0,5,10 filter-primitive test-engine type engine permit 0 filter-primitive test-port type ip-port permit https permit 80 default deny filter-primitive test-address type ip-address permit 0\&.0\&.0\&.1 permit 0\&.0\&.0\&.2 default deny filter-primitive test-address-mask type ip-address-mask permit 128\&.146\&.197\&.1 255\&.255\&.255\&.255 permit 128\&.146\&.197\&.2 255\&.255\&.255\&.255 filter-primitive test-prefix type ip-address-prefix permit 128\&.146\&.0\&.0/16 default deny filter-primitive test-tag type tag permit 0x00 permit 0x01 permit 0xFF filter-primitive test-tag-mask type tag-mask permit OSU 0xFF permit 0xFF 0xFF default deny filter-primitive test-counter type counter permit lt 5 permit gt 10 default deny filter-primitive test-time-date type time-date permit gt December 12, 2002 5:13:21 filter-primitive test-time type time-date permit gt 12:15:00 filter-definition sample-1-in-100 match random-sample srate filter-definition t1 match engine-type test-engine or match destination-tag test-tag-mask .fi .PP Display all flows with a destination port of 80 or source port of 25 (smtp) starting after Dec 12, 2001\&. The file \fBtest\fP is populated with the following: .PP .nf filter-primitive port80 type ip-port permit 80 filter-primitive port25 type ip-port permit smtp filter-primitive dec12 type time-date permit gt Dec 12, 2001 filter-definition foo match ip-source-port port80 match start-time dec12 or match ip-destination-port port25 match start-time dec12 .fi \fBflow-cat \fBflows\fP | flow-nfilter -ftest -Ffoo | flow-print\fP .SH "FILES" .PP Configuration files: Symbols - \fB@localstatedir@/sym/*\fP\&. Tag - \fB@localstatedir@/cfg/tag\&.cfg\fP\&. Filter - \fB@localstatedir@/cfg/filter\&.cfg\fP\&. .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Fri 02 Jan 2004, 16:26 flow-tools-0.68/docs/flow-nfilter.html.in0000644000076600007660000003035207775361013014120 flow-nfilter

flow-nfilter

Name

flow-nfilter -- Filter flows.

Synopsis

flow-nfilter [-hk] [-b big|little] [-C comment] [-d debug_level] [-f filter_fname] [-F filter_definition] [-v variable binding] [-z z_level]

DESCRIPTION

The flow-nfilter utility will filter flows based on user selectable criteria. Filters are defined in a configuration file and are composed of primitives and a definition. Definitions contain match lines grouped to form logical AND and OR operations on the flow using the selected primitives. A definition may contain the invert command which will invert the result of the evaluation.

Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option.

Filter primitives begin with the filter-primitive keyword followed by a symbolic name. Each primitive has a type defined below. A list of permit and or deny keywords followed by an argument are later evaulated to determine if the flow is permitted or denied. The default action for a primitive is to deny which may be changed with the default keyword. Symbolic substitutions are done where appropriate.

The match keyword in a definition selects the criteria to match a primitive. A match type may allow more than one type of primitive, for example the src-ip-addr match type will accept any of {ip-address, ip-address-mask, ip-address-prefix} primitive types.


Primitive type          Type       Description/Example
-------------------------------------------------------------------
as                      Bucket     Autonomous System Number.
                                   600,159,3112

ip-address-prefix-len   Numeric    Integer from 0 to 32.
                                   16-31

ip-protocol             Bucket     Integer from 0 to 255. 
                                   6,17,1

ip-tos                  Bucket     Integer from 0 to 255 with mask.
                                   0xA0/0xE0

ip-tcp-flags            Bucket     Integer from 0 to 255 with mask.
                                   0x2/0x2

ifindex                 Bucket     Integer from 0 to 65535
                                   0,5,10

engine                  Bucket     Integer from 0 to 255.
                                   0

ip-port                 Bucket     Integer from 0 to 65535.
                                   80,8080,23,22

ip-address              Hash       List of IP Addresses.
                                   10.0.0.1

ip-address-mask         List       List of IP address/mask pairs.
                                   10.1.0.0 255.255.0.0

ip-address-prefix       Trie       List of IP address/mask pairs.
                                   10.1/16

tag                     Hash       List of tags.
                                   0xFF00

tag-mask                List       List of tags.
                                   0xF000/0xFF00

counter                 List       List of Integers with qualifier.
                                   lt 32

time                    List       List of relative time specifiers.
                                   gt 5:00

time-date               List       List of absolute time specifiers.
                                   gt December 12, 2002 5:13:21

double                  List       List of doubles with qualifier.
                                   lt 32.0

rate                    Element    Rate is calculated as 1/rate.
                                   permit 100



Match type              Description             Primitives accepted
-------------------------------------------------------------------
source-as               Source AS               as

destination-as          Destination AS          as

ip-source-address       Source IP Address       ip-address,
                                                ip-address-mask,
                                                ip-address-prefix

ip-destination-address  Destination IP Address  ip-address,
                                                ip-address-mask,
                                                ip-address-prefix

ip-exporter-address     Exporter IP Address     ip-address,
                                                ip-address-mask,
                                                ip-address-prefix

ip-nexthop-address      NextHop IP Address      ip-address,
                                                ip-address-mask,
                                                ip-address-prefix

ip-shortcut-address     Shortcut IP Address     ip-address,
                                                ip-address-mask,
                                                ip-address-prefix

ip-protocol             IP Protocol             ip-protocol

ip-source-address-prefix-len
                        Source IP address       ip-address-prefix-len
                        prefix length

ip-destination-address-prefix-len
                        Destination IP address  ip-address-prefix-len
                        prefix length
           
ip-tos                  IP Type Of Service      ip-tos

ip-marked-tos           IP Type Of Service      ip-tos

ip-tcp-flags            IP/TCP Flags            ip-tcp-flags

ip-source-port          Source IP Port          ip-port
                        eg TCP/UDP

ip-destination-port     Destination IP Port     ip-port
                        eg TCP/UDP

input-interface         Source ifIndex          ifindex
                        eg Input Interface

output-interface        Destination ifIndex     ifindex
                        eg Output Interface

start-time              Start Time of flow      time, time-date

end-time                End Time of Flow        time, time-date

flows                   Number of flows         counter

octets                  Number of octets        counter

packets                 Number of packets       counter

duration                Duration of flow in ms  counter

engine-id               Engine ID               engine

engine-type             Engine Type             engine

source-tag              Source Tag              tag, tag-mask

destination-tag         Destination Tag         tag, tag-mask

pps                     Packets Per Second      double

bps                     Bits Per Second         double

random-sample           Random Sample           rate

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-f filter_fname

Filter list filename. Defaults to @localstatedir@/cfg/filter.

-F filter_definition

Select the active definition. Defaults to default.

-h

Display help.

-k

Keep time from input.

-v variable binding

Set a variable FOO=bar.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

TIME/DATE parsing

time-date parsing is implemented with getdate.y, a commonly used function to process free-form time date specifications. Example usage borrowed from cvs: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT

EXAMPLES

An example of filter configuration file.


filter-primitive srate
  type rate
  permit 100

filter-primitive test-as
  type as
  permit 600,159

filter-primitive test-prefix-len
  type ip-address-prefix-len
  permit 32

filter-primitive test-protocol
  type ip-protocol
  permit tcp

filter-primitive test-tos
  type ip-tos
  mask 0xA0
  permit 0xE0

filter-primitive test-tcp-flags
  type ip-tcp-flags
  mask 0x2
  permit 0x2

filter-primitive test-ifindex
  type ifindex
  permit 0,5,10

filter-primitive test-engine
  type engine
  permit 0

filter-primitive test-port
  type ip-port
  permit https
  permit 80
  default deny

filter-primitive test-address
  type ip-address
  permit 0.0.0.1
  permit 0.0.0.2
  default deny

filter-primitive test-address-mask
  type ip-address-mask
  permit 128.146.197.1 255.255.255.255
  permit 128.146.197.2 255.255.255.255

filter-primitive test-prefix
  type ip-address-prefix
  permit 128.146.0.0/16
  default deny

filter-primitive test-tag
  type tag
  permit 0x00
  permit 0x01
  permit 0xFF

filter-primitive test-tag-mask
  type tag-mask  
  permit OSU 0xFF
  permit 0xFF 0xFF
  default deny

filter-primitive test-counter
  type counter
  permit lt 5 
  permit gt 10
  default deny

filter-primitive test-time-date
  type time-date
  permit gt December 12, 2002 5:13:21

filter-primitive test-time
  type time-date
  permit gt 12:15:00

filter-definition sample-1-in-100
  match random-sample srate

filter-definition t1
  match engine-type test-engine
  or
  match destination-tag test-tag-mask

Display all flows with a destination port of 80 or source port of 25 (smtp) starting after Dec 12, 2001. The file test is populated with the following:

filter-primitive port80
  type ip-port
  permit 80

filter-primitive port25
  type ip-port
  permit smtp

filter-primitive dec12
  type time-date
  permit gt Dec 12, 2001

filter-definition foo
  match ip-source-port port80
  match start-time dec12
  or
  match ip-destination-port port25
  match start-time dec12

flow-cat flows | flow-nfilter -ftest -Ffoo | flow-print

FILES

Configuration files: Symbols - @localstatedir@/sym/*. Tag - @localstatedir@/cfg/tag.cfg. Filter - @localstatedir@/cfg/filter.cfg.

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-nfilter.sgml0000644000076600007660000002752007775360615013523 flow-nfilter 1 flow-nfilter Filter flows. flow-nfilter -hk -b big|little -C comment -d debug_level -f filter_fname -F filter_definition -v variable binding -z z_level DESCRIPTION The flow-nfilter utility will filter flows based on user selectable criteria. Filters are defined in a configuration file and are composed of primitives and a definition. Definitions contain match lines grouped to form logical AND and OR operations on the flow using the selected primitives. A definition may contain the invert command which will invert the result of the evaluation. Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option. Filter primitives begin with the filter-primitive keyword followed by a symbolic name. Each primitive has a type defined below. A list of permit and or deny keywords followed by an argument are later evaulated to determine if the flow is permitted or denied. The default action for a primitive is to deny which may be changed with the default keyword. Symbolic substitutions are done where appropriate. The match keyword in a definition selects the criteria to match a primitive. A match type may allow more than one type of primitive, for example the src-ip-addr match type will accept any of {ip-address, ip-address-mask, ip-address-prefix} primitive types. Primitive type Type Description/Example ------------------------------------------------------------------- as Bucket Autonomous System Number. 600,159,3112 ip-address-prefix-len Numeric Integer from 0 to 32. 16-31 ip-protocol Bucket Integer from 0 to 255. 6,17,1 ip-tos Bucket Integer from 0 to 255 with mask. 0xA0/0xE0 ip-tcp-flags Bucket Integer from 0 to 255 with mask. 0x2/0x2 ifindex Bucket Integer from 0 to 65535 0,5,10 engine Bucket Integer from 0 to 255. 0 ip-port Bucket Integer from 0 to 65535. 80,8080,23,22 ip-address Hash List of IP Addresses. 10.0.0.1 ip-address-mask List List of IP address/mask pairs. 10.1.0.0 255.255.0.0 ip-address-prefix Trie List of IP address/mask pairs. 10.1/16 tag Hash List of tags. 0xFF00 tag-mask List List of tags. 0xF000/0xFF00 counter List List of Integers with qualifier. lt 32 time List List of relative time specifiers. gt 5:00 time-date List List of absolute time specifiers. gt December 12, 2002 5:13:21 double List List of doubles with qualifier. lt 32.0 rate Element Rate is calculated as 1/rate. permit 100 Match type Description Primitives accepted ------------------------------------------------------------------- source-as Source AS as destination-as Destination AS as ip-source-address Source IP Address ip-address, ip-address-mask, ip-address-prefix ip-destination-address Destination IP Address ip-address, ip-address-mask, ip-address-prefix ip-exporter-address Exporter IP Address ip-address, ip-address-mask, ip-address-prefix ip-nexthop-address NextHop IP Address ip-address, ip-address-mask, ip-address-prefix ip-shortcut-address Shortcut IP Address ip-address, ip-address-mask, ip-address-prefix ip-protocol IP Protocol ip-protocol ip-source-address-prefix-len Source IP address ip-address-prefix-len prefix length ip-destination-address-prefix-len Destination IP address ip-address-prefix-len prefix length ip-tos IP Type Of Service ip-tos ip-marked-tos IP Type Of Service ip-tos ip-tcp-flags IP/TCP Flags ip-tcp-flags ip-source-port Source IP Port ip-port eg TCP/UDP ip-destination-port Destination IP Port ip-port eg TCP/UDP input-interface Source ifIndex ifindex eg Input Interface output-interface Destination ifIndex ifindex eg Output Interface start-time Start Time of flow time, time-date end-time End Time of Flow time, time-date flows Number of flows counter octets Number of octets counter packets Number of packets counter duration Duration of flow in ms counter engine-id Engine ID engine engine-type Engine Type engine source-tag Source Tag tag, tag-mask destination-tag Destination Tag tag, tag-mask pps Packets Per Second double bps Bits Per Second double random-sample Random Sample rate OPTIONS -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -f filter_fname Filter list filename. Defaults to @localstatedir@/cfg/filter. -F filter_definition Select the active definition. Defaults to default. -h Display help. -k Keep time from input. -v variable binding Set a variable FOO=bar. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. TIME/DATE parsing time-date parsing is implemented with getdate.y, a commonly used function to process free-form time date specifications. Example usage borrowed from cvs: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT EXAMPLES An example of filter configuration file. filter-primitive srate type rate permit 100 filter-primitive test-as type as permit 600,159 filter-primitive test-prefix-len type ip-address-prefix-len permit 32 filter-primitive test-protocol type ip-protocol permit tcp filter-primitive test-tos type ip-tos mask 0xA0 permit 0xE0 filter-primitive test-tcp-flags type ip-tcp-flags mask 0x2 permit 0x2 filter-primitive test-ifindex type ifindex permit 0,5,10 filter-primitive test-engine type engine permit 0 filter-primitive test-port type ip-port permit https permit 80 default deny filter-primitive test-address type ip-address permit 0.0.0.1 permit 0.0.0.2 default deny filter-primitive test-address-mask type ip-address-mask permit 128.146.197.1 255.255.255.255 permit 128.146.197.2 255.255.255.255 filter-primitive test-prefix type ip-address-prefix permit 128.146.0.0/16 default deny filter-primitive test-tag type tag permit 0x00 permit 0x01 permit 0xFF filter-primitive test-tag-mask type tag-mask permit OSU 0xFF permit 0xFF 0xFF default deny filter-primitive test-counter type counter permit lt 5 permit gt 10 default deny filter-primitive test-time-date type time-date permit gt December 12, 2002 5:13:21 filter-primitive test-time type time-date permit gt 12:15:00 filter-definition sample-1-in-100 match random-sample srate filter-definition t1 match engine-type test-engine or match destination-tag test-tag-mask Display all flows with a destination port of 80 or source port of 25 (smtp) starting after Dec 12, 2001. The file test is populated with the following: filter-primitive port80 type ip-port permit 80 filter-primitive port25 type ip-port permit smtp filter-primitive dec12 type time-date permit gt Dec 12, 2001 filter-definition foo match ip-source-port port80 match start-time dec12 or match ip-destination-port port25 match start-time dec12 flow-cat flows | flow-nfilter -ftest -Ffoo | flow-print FILES Configuration files: Symbols - @localstatedir@/sym/*. Tag - @localstatedir@/cfg/tag.cfg. Filter - @localstatedir@/cfg/filter.cfg. BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-print.1.in0000644000076600007660000001007507775360775013023 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-print\fP" "1" .SH "NAME" \fBflow-print\fP \(em Display flows in formatted ASCII\&. .SH "SYNOPSIS" .PP \fBflow-print\fP [-hlnpw] [-d\fI debug_level\fP] [-f\fI format\fP] .SH "DESCRIPTION" .PP The \fBflow-print\fP utility will display flow data in ASCII using pre-defined formats selectable with -f\&. .PP .nf Some of the less descriptive column headers are defined below Header Description ------------------------------- Sif Source Interface ifIndex\&. DiF Destination Interface ifIndex\&. Pr Protocol\&. P Protocol\&. SrcP Source Port\&. DstP Destination Port\&. Pkts Packets\&. Octets Octets (Bytes)\&. Active Time in ms the flow was active\&. B/Pk Bytes per Packet\&. Ts Type of Service\&. Fl Flags, for TCP the cumulative or of the TCP control bits\&. srcAS Source AS\&. dstAS Destination AS\&. Start Start time of the flow\&. End End time of the flow\&. router_sc V7 IP address of router producing shorcuts\&. peer_nexthop V6 IP address of peer next hop IP address\&. encap i/o Version 6 only\&. Encapsulation size in/out duration Time in ms the flow was active\&. input Input Interface ifIndex\&. output Output Interface ifIndex\&. flows Number of aggregated flows\&. mTos V8\&.x ToS of pkts that exceeded the contract\&. xpackets V8\&.x Packets that exceed the contract\&. .fi .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-f\fI format\fP" 10 Select format\&. The default is appropriate for the export type of the flow data\&. Available formats are: .PP .nf 0 1 line, interfaces, hex ports 1 2 line (includes timing and flags) 2 2 line candidate TCP syn attack flows 3 1 line, no interfaces, decimal ports 4 1 line with AS number 5 1 line, 132 column 6 show ip accounting emulation 7 1 line, 132 column +router_id 8 1 line, 132 column +encapsulation 9 1 line with tag values 10 AS aggregation 11 Protocol Port aggregation 12 Source Prefix aggregation 13 Destination Prefix aggregation 14 Prefix aggregation 15 Destination aggregation (Catalyst) 16 Source Destination aggregation (Catalyst) 17 Full Flow (Catalyst) 18 ToS AS Aggregation 19 ToS Proto Port aggregation 20 ToS Source Prefix aggregation 21 ToS Destination Prefix aggregation 22 ToS Prefix Aggregation 23 ToS Prefix Port aggregation 24 Full (Catalyst) .fi .IP "-h" 10 Display help\&. .IP "-l" 10 Unbuffer output\&. .IP "-n" 10 Use symbolic names where appropriate\&. .IP "-p" 10 Display header information\&. .IP "-w" 10 Wide output\&. .SH "EXAMPLES" .PP Display flows in \fBflowfile\fP .PP \fBflow-print < flowfile\fP .SH "FILES" .PP Configuration files: Symbols - \fB@localstatedir@/sym/*\fP\&. .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Fri 02 Jan 2004, 16:26 flow-tools-0.68/docs/flow-print.html.in0000644000076600007660000001605507775361005013616 flow-print

flow-print

Name

flow-print -- Display flows in formatted ASCII.

Synopsis

flow-print [-hlnpw] [-d debug_level] [-f format]

DESCRIPTION

The flow-print utility will display flow data in ASCII using pre-defined formats selectable with -f.

Some of the less descriptive column headers are defined below

Header     Description
-------------------------------
Sif           Source Interface ifIndex.
DiF           Destination Interface ifIndex.
Pr            Protocol.
P             Protocol.
SrcP          Source Port.
DstP          Destination Port.
Pkts          Packets.
Octets        Octets (Bytes).
Active        Time in ms the flow was active.
B/Pk          Bytes per Packet.
Ts            Type of Service.
Fl            Flags, for TCP the cumulative or of the TCP control bits.
srcAS         Source AS.
dstAS         Destination AS.
Start         Start time of the flow.
End           End time of the flow.
router_sc     V7 IP address of router producing shorcuts.
peer_nexthop  V6 IP address of peer next hop IP address.
encap i/o     Version 6 only.  Encapsulation size in/out
duration      Time in ms the flow was active.
input         Input Interface ifIndex.
output        Output Interface ifIndex.
flows         Number of aggregated flows.
mTos          V8.x ToS of pkts that exceeded the contract.
xpackets      V8.x Packets that exceed the contract.

OPTIONS

-d debug_level

Enable debugging.

-f format

Select format. The default is appropriate for the export type of the flow data. Available formats are:

    0 1 line, interfaces, hex ports
    1 2 line (includes timing and flags)
    2 2 line candidate TCP syn attack flows
    3 1 line, no interfaces, decimal ports
    4 1 line with AS number
    5 1 line, 132 column
    6 show ip accounting emulation
    7 1 line, 132 column +router_id
    8 1 line, 132 column +encapsulation
    9 1 line with tag values
   10 AS aggregation
   11 Protocol Port aggregation
   12 Source Prefix aggregation
   13 Destination Prefix aggregation
   14 Prefix aggregation
   15 Destination aggregation (Catalyst)
   16 Source Destination aggregation (Catalyst)
   17 Full Flow (Catalyst)
   18 ToS AS Aggregation
   19 ToS Proto Port aggregation
   20 ToS Source Prefix aggregation
   21 ToS Destination Prefix aggregation
   22 ToS Prefix Aggregation
   23 ToS Prefix Port aggregation
   24 Full (Catalyst)

-h

Display help.

-l

Unbuffer output.

-n

Use symbolic names where appropriate.

-p

Display header information.

-w

Wide output.

EXAMPLES

Display flows in flowfile

flow-print < flowfile

FILES

Configuration files: Symbols - @localstatedir@/sym/*.

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-print.sgml0000644000076600007660000001056207775360662013214 flow-print 1 flow-print Display flows in formatted ASCII. flow-print -hlnpw -d debug_level -f format DESCRIPTION The flow-print utility will display flow data in ASCII using pre-defined formats selectable with -f. Some of the less descriptive column headers are defined below Header Description ------------------------------- Sif Source Interface ifIndex. DiF Destination Interface ifIndex. Pr Protocol. P Protocol. SrcP Source Port. DstP Destination Port. Pkts Packets. Octets Octets (Bytes). Active Time in ms the flow was active. B/Pk Bytes per Packet. Ts Type of Service. Fl Flags, for TCP the cumulative or of the TCP control bits. srcAS Source AS. dstAS Destination AS. Start Start time of the flow. End End time of the flow. router_sc V7 IP address of router producing shorcuts. peer_nexthop V6 IP address of peer next hop IP address. encap i/o Version 6 only. Encapsulation size in/out duration Time in ms the flow was active. input Input Interface ifIndex. output Output Interface ifIndex. flows Number of aggregated flows. mTos V8.x ToS of pkts that exceeded the contract. xpackets V8.x Packets that exceed the contract. OPTIONS -d debug_level Enable debugging. -f format Select format. The default is appropriate for the export type of the flow data. Available formats are: 0 1 line, interfaces, hex ports 1 2 line (includes timing and flags) 2 2 line candidate TCP syn attack flows 3 1 line, no interfaces, decimal ports 4 1 line with AS number 5 1 line, 132 column 6 show ip accounting emulation 7 1 line, 132 column +router_id 8 1 line, 132 column +encapsulation 9 1 line with tag values 10 AS aggregation 11 Protocol Port aggregation 12 Source Prefix aggregation 13 Destination Prefix aggregation 14 Prefix aggregation 15 Destination aggregation (Catalyst) 16 Source Destination aggregation (Catalyst) 17 Full Flow (Catalyst) 18 ToS AS Aggregation 19 ToS Proto Port aggregation 20 ToS Source Prefix aggregation 21 ToS Destination Prefix aggregation 22 ToS Prefix Aggregation 23 ToS Prefix Port aggregation 24 Full (Catalyst) -h Display help. -l Unbuffer output. -n Use symbolic names where appropriate. -p Display header information. -w Wide output. EXAMPLES Display flows in flowfile flow-print < flowfile FILES Configuration files: Symbols - @localstatedir@/sym/*. BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-receive.1.in0000644000076600007660000000000007776732112013261 flow-tools-0.68/docs/flow-receive.html.in0000644000076600007660000001453407777161121014103 flow-receive

flow-receive

Name

flow-receive -- Receive flow data with the NetFlow protocol.

Synopsis

flow-receive [-h] [-b big|little] [-C comment] [-d debug_level] [-o output_file] [-S stat_interval] [-V pdu_version] [-z z_level] {localip/remoteip/port}

DESCRIPTION

The flow-receive utility is used to receive flows in NetFlow format. When the remoteip is configured only flows from that exporter will be processed, this is the most secure and recommended configuration. When the localip is configured flow-receive will only process flows sent to the localip IP address. If remoteip is 0 (not configured) flows from any source IP address are accepted. Multiple non aggregated PDU versions may be accepted at once to support Cisco's Catalyst 6500 NetFlow implementation which exports from both the supervisor and MSFC with the same IP address and same port but different export versions. In this case the exports will be stored in the format specified by the -V flag or whichever export type is received first.

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-h

Display help.

-o file

Write to file instead of the standard out.

-S stat_interval

When configured flow-receive will emit a timestamped message on stderr every stat_interval minutes indicating counters such as the number of flows received, packets processed, and lost flows.

-V pdu_version

Use pdu_version format output.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Listen on port 9800 on any local interface for exports from IP address 10.0.0.1, store the exports in flows

flow-receive 0/10.0.0.1/9800 > flows

Listen on port 9800 on any local interface from any IP address, display the received flows with flow-print.

flow-receive 0/0/9800 | flow-print

BUGS

It is not currently possible to convert between the aggregated formats (8.x) and the non aggregated formats (1,5,6,7).

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-receive.sgml0000644000076600007660000001235007776322724013475 flow-receive 1 flow-receive Receive flow data with the NetFlow protocol. flow-receive -h -b big|little -C comment -d debug_level -o output_file -S stat_interval -V pdu_version -z z_level localip/remoteip/port DESCRIPTION The flow-receive utility is used to receive flows in NetFlow format. When the remoteip is configured only flows from that exporter will be processed, this is the most secure and recommended configuration. When the localip is configured flow-receive will only process flows sent to the localip IP address. If remoteip is 0 (not configured) flows from any source IP address are accepted. Multiple non aggregated PDU versions may be accepted at once to support Cisco's Catalyst 6500 NetFlow implementation which exports from both the supervisor and MSFC with the same IP address and same port but different export versions. In this case the exports will be stored in the format specified by the -V flag or whichever export type is received first. OPTIONS -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -h Display help. -o file Write to file instead of the standard out. -S stat_interval When configured flow-receive will emit a timestamped message on stderr every stat_interval minutes indicating counters such as the number of flows received, packets processed, and lost flows. -V pdu_version Use pdu_version format output. 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Listen on port 9800 on any local interface for exports from IP address 10.0.0.1, store the exports in flows flow-receive 0/10.0.0.1/9800 > flows Listen on port 9800 on any local interface from any IP address, display the received flows with flow-print. flow-receive 0/0/9800 | flow-print BUGS It is not currently possible to convert between the aggregated formats (8.x) and the non aggregated formats (1,5,6,7). AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-report.1.in0000644000076600007660000004744407777161113013177 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-report\fP" "1" .SH "NAME" \fBflow-report\fP \(em Generate reports from flow data\&. .SH "SYNOPSIS" .PP \fBflow-report\fP [-h] [-d\fI debug_level\fP] [-s\fI stat_fname\fP] [-S\fI stat_definition\fP] [-v\fI variable binding\fP] .SH "DESCRIPTION" .PP The \fBflow-report\fP utility will generate reports from flow data\&. The reports are easy to parse ASCII text that can be used by a front end to produce readable reports, graphs, and charts\&. .PP Reports are definied in a configuration file by the \&'stat-report\&' keyword followed by a report name\&. Each report has a type defined below and other commands\&. Reports are grouped into a definition with the \&'stat-definition\&' keyword followed by a definition name\&. Each definition can invoke a filter and optionally apply tags\&. .PP Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option\&. .PP Generated reports consist of comment lines and report lines\&. Comment lines begin with a # and include details such as the options used, report name, records in the report, and the report line format\&. Some of the more verbose comments can be controlled with the +header and +xheader options\&. By default this information is not displayed\&. A column title beginning with the string rec precedes the report lines\&. Report lines consist of key fields, such as an IP address and calculated totals for that key such as the number of flows\&. The summary-detail report is a little bit different from other reports in that it has multiple title lines and no key fields\&. The column titles are described below\&. .PP .nf +time_real Difference between the real time of the first and last flow\&. +aflowtime Total time of the flows / Total number of flows\&. +aps Total Octets / Total Packets (Average Packet Size) +afs Total Octets / Total Flows / (Average Flow Size) +apf Total Packets / Total Flows (Average Packets / Flow) +fps Total Flows / (Last End Time of Flow - First Start Time of Flow) (Average Flows / Second) +fps_real (Average Flows / Second in realtime) +psizeN Average Packet Size buckets\&. +fpsizeN Packets / Flow buckets\&. +fosizeN Octets / Flow buckets\&. +ftimeN Time / Flow buckets\&. ignores Flows with a packet count of 0\&. SSS-count Count of of an item, example source-ip-address-count SSS* key fields, example source-ip-address index Report line index\&. first Time of first flow in unix_secs format\&. last Time of last flow in unix_secs format\&. flows Summation of flows/key\&. octets Summation of octets/key\&. packets Summation of packets/key\&. duration End time of Flow - Start time of Flow\&. avg-bps Average Bits/Second\&. min-bps Minimum Bits/Second\&. max-bps Maximum Bits/Second\&. avg-pps Average Packets/Second\&. min-pps Minimum Packets/Second\&. max-pps Maximum Packets/Second\&. frecs Records used in average calculations\&. Note fields with a + are only available in the summary-detail report\&. .fi The PPS and BPS calculations will not always be correct due to flows which only have one packet, or some other condition where the start time is equal to the end time\&. In this case these flows are not used in the PPS and BPS calculations\&. To facilitate aggregating multiple reports and retaining the PPS and BPS fields, the number of flows counted is available in the frecs field\&. .PP .PP .nf stat-report command Description/Example ------------------------------------------------------------------------ type Define the report type\&. type destination-tag filter Apply this filter definition\&. filter permit-only-tcp scale Scale report by n\&. scale 100 tag-mask Apply source and destination mask to tag\&. tag-mask 0xFF00 0xFF00 ip-source-address-format Format of source IP address\&. address - address, ie 128\&.146\&.1\&.7 prefix-len - address/len ie 128\&.146\&.1\&.7/24 prefix-mask- prefix/len 128\&.146\&.1/24 ip-destination-address-format Format of destination IP address\&. address - address, ie 128\&.146\&.1\&.7 prefix-len - address/len ie 128\&.146\&.1\&.7/24 prefix-mask- prefix/len 128\&.146\&.1/24 output Start an output configuration\&. Multiple output configurations can be configured per report\&. .fi .PP .PP .nf output option Description/Example ------------------------------------------------------------------------- path Pathname of output\&. If the path begins with a | the output is a pipe\&. The pathname is formatted through strftime()\&. Directories not in the path are automatically created\&. path /tmp/%Y/%m/%d/foo\&.out time What time to use when formatting the pathname with strftime\&. now - current time start - first flow end - last flow mid - average of first and last\&. tally Emit a % total line every n records\&. tally 10 format Output format\&. Currently only ascii\&. format ascii sort Sort on a field\&. + ascending, - descending\&. sort +flows - sort on the flows field Sortable fields are flows,octets,packets, duration,avg-pps,min-pps,max-pps,avg-bps, min-bps,max-bps records Truncate report at n records\&. records 10 fields Enable/Disable fields with +/-\&. Fields: index,first,last,flows,octets,packets, duration,pps,bps,other,key,key1,key2, key3,key4,count\&. fields +key,+flows,+octets,+packets, For reports with one key, the key field is referenced with key, else key1,key2,key3,etc Note that the count field is only available in select reports, those which end in -count\&. options Enable/Disable options with +/- +header - include header\&. +xheader - include extra header\&. +totals - include a totals line\&. +percent-total - report in % total form\&. +names - use symbolic names\&. options +header,+xheader .fi .PP .PP .nf stat-definition option Description/Example ------------------------------------------------------------------------- filter Apply this filter definition\&. filter default tag Apply this tag definition\&. tag default mask Apply this mask definition\&. mask default report Invoke this report\&. Multiple reports can be set\&. report foo time-series How often to produce a report in seconds\&. time-series 60 .fi .PP .PP .nf global options Description/Example ------------------------------------------------------------------------- include-tag Specify path to include tag definitions\&. include-tag /flows/tags/test1 include-filter Specify path to include filter definitions\&. include-filter /flows/filters/test1 include-mask Specify path to include mask definitions\&. include-filter /flows/masks/test1 .fi .PP .PP .nf Report type Summarization Key Elements\&. ------------------------------------------------------------------------ summary-detail Totals plus quick breakdown\&. summary-counters Totals only\&. packet-size Average packet size distribution\&. octets Octets per flow distribution\&. packets Packets per flow distribution\&. ip-source-port IP Source Port\&. ip-destination-port IP Destination Port\&. ip-source/destination-port IP Source/Destination Port pair\&. bps Bits/Second distribution\&. pps Packets/Second distribution\&. ip-destination-address-type IP class with ASM/SSM Multicast breakout\&. ip-protocol IP Protocol\&. ip-tos IP Type of Service\&. ip-next-hop-address IP Next Hop Address\&. ip-source-address IP Source Address\&. ip-destination-address IP Destination Address\&. ip-source/destination-address IP Source/Destination Address pair\&. ip-exporter-address IP Exporter Address\&. input-interface Input Interface\&. output-interface Output Interface\&. input/output-interface Input/Output Interface pair\&. source-as Source AS\&. destination-as Destination AS\&. source/destination-as Source/Destination AS\&. ip-source-address/source-as IP Source Addrss and Source AS\&. ip-destination-address/source-as IP Destination Address and Source AS\&. ip-source-address/destination-as IP Source Address and Destination AS\&. ip-destination-address/destination-as IP Destination Address and Destination AS\&. ip-source/destination-address/source-as IP Source/Destination Address and Source AS\&. ip-source/destination-address/destination-as IP Source/Destination Address and Destination AS\&. ip-source/destination-address/source/destination-as IP Source/Destination Address and Source/Destination AS\&. ip-source-address/input-interface IP Source Address and Input Interface\&. ip-destination-address/input-interface IP Destination Address and Input Interface\&. ip-source-address/output-interface IP Source Address and Output Interface\&. ip-destination-address/output-interface IP Destination Address and Output Interface\&. ip-source/destination-address/input-interface IP Source/Destination Address and Input Interface\&. ip-source/destination-address/output-interface IP Source/Destination Address and Output Interface\&. ip-source/destination-address/input/output-interface IP Source/Destination Address and Input/Output Interface\&. input-interface/source-as Input Interface and Source AS\&. input-interface/destination-as Input Interface and Destination AS\&. output-interface/source-as Output Interface and Source AS\&. output-interface/destination-as Output Interface and Destination AS\&. input-interface/source/destination-as Input Interface and Source/Destination AS\&. output-interface/source/destination-as Output Interface and Source/Destination AS\&. input/output-interface/source/destination-as Input/Output Interface and Source/Destination AS\&. engine-id Engine ID\&. engine-type Engine Type\&. source-tag Source Tag\&. destination-tag Destination Tag\&. source/destination-tag Source/Destination Tag\&. ip-source-address/ip-source-port IP Source Address and IP Source Port\&. ip-source-address/ip-destination-port IP Source Address and IP Destination Port\&. ip-destination-address/ip-source-port IP Destination Address and IP Source Port\&. ip-destination-address/ip-destination-port IP Destination Address and IP Destination Port\&. ip-source-address/ip-source/destination-port IP Source Address and IP Source/Destination Port\&. ip-destination-address/ip-source/destination-port IP Destination Address and IP Source/Destination Port\&. ip-source/destination-address/ip-source-port IP Source/Destination Address and IP Source Port\&. ip-source/destination-address/ip-destination-port IP Source/Destination Address and IP Destination Port\&. ip-source/destination-address/ip-source/destination-port IP Source/Destination Address and IP Source/Destination Port\&. ip-source-address/input/output-interface IP Source Address and Input/Output Interface\&. ip-destination-address/input/output-interface IP Destination Address and Input/Output Interface\&. ip-source-address/source/destination-as IP Source Address and Source/Destination AS\&. ip-destination-address/source/destination-as IP Destination Address and Source/Destination AS\&. ip-address IP Address (both source and destination)\&. ip-port IP Port (both source and destination)\&. ip-source-address-destination-count Count of destination IP addresses associated with a source IP address\&. ip-destination-address-source-count Count of source IP addresses associated with a destination IP address\&. linear-interpolated-flows-octets-packets Linear interpolated distribution of flows, octets and packets\&. The distribution is done across the start and end time of the flow\&. first First packet of flow distribution\&. last Last packet of flow distribution\&. duration Duration of flow distribution\&. ip-source-address/source-tag IP Source Address and Source tag\&. ip-source-address/destination-tag IP Source Address and Destination tag\&. ip-destination-address/source-tag IP Destination Address and Source tag\&. ip-destination-address/destination-tag IP Destination Address and Destination tag\&. ip-source/destination-address/source/destination-tag IP Source/Destination Address and Source/Destination tag\&. ip-source/destination-address/ip-protocol/ip-tos IP Source/Destination Address, IP Protocol, and ToS\&. ip-source/destination-address/ip-protocol/ip-tos/ip-source/destination-port IP Source/Destination Addess, IP Protocol, IP Tos, IP Source/Destination Port\&. .fi .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-s\fI stat_fname\fP" 10 Report configuration filename\&. Defaults to \fB@localstatedir@/cfg/stat\fP\&. .IP "-S\fI stat_definition\fP" 10 Select the active definition\&. .IP "-v\fI variable binding\fP" 10 Set a variable FOO=bar\&. .IP "-h" 10 Display help\&. -hh will list the available reports\&. .SH "EXAMPLES" .PP An example of report configuration file .PP .nf # stat config file include-filter /tmp/filter stat-report t1 type summary-detail filter default scale 100 output format ascii options +header,+xheader,+totals fields +other path /tmp/output1 stat-report t6 type ip-source-port output format ascii options +header,+xheader,+totals,+names,+percent-total sort +pps tally 5 path /tmp/output6 stat-definition test filter tcp report t1 report t6 .fi .PP .nf # filter config file filter-primitive TCP type ip-protocol permit TCP filter-definition tcp match ip-protocol TCP .fi \fBflow-cat \fBflows\fP | flow-report -stest -Stest\fP .SH "IMPLEMENTATION NOTES" .PP Packet size calculations are dOctets / dPkts, ie an average packet size\&. It is not possible to get a true packet size from flow exports\&. pps and bps calculations are an average of the averages\&. Flows that do not have a duration (start == end) are not counted in the pps and bps calculations\&. Flows without a packet or octet count are ignored\&. .SH "FILES" .PP Configuration files: Symbols - \fB@localstatedir@/sym/*\fP\&. Tag - \fB@localstatedir@/cfg/tag\&.cfg\fP\&. Filter - \fB@localstatedir@/cfg/filter\&.cfg\fP\&. Mask - \fB@localstatedir@/cfg/mask\&.cfg\fP\&. Report - \fB@localstatedir@/cfg/stat\&.cfg\fP\&. Xlate - \fB@localstatedir@/cfg/xlate\&.cfg\fP\&. .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Wed 07 Jan 2004, 23:53 flow-tools-0.68/docs/flow-report.html.in0000644000076600007660000005032207777161127013775 flow-report

flow-report

Name

flow-report -- Generate reports from flow data.

Synopsis

flow-report [-h] [-d debug_level] [-s stat_fname] [-S stat_definition] [-v variable binding]

DESCRIPTION

The flow-report utility will generate reports from flow data. The reports are easy to parse ASCII text that can be used by a front end to produce readable reports, graphs, and charts.

Reports are definied in a configuration file by the 'stat-report' keyword followed by a report name. Each report has a type defined below and other commands. Reports are grouped into a definition with the 'stat-definition' keyword followed by a definition name. Each definition can invoke a filter and optionally apply tags.

Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option.

Generated reports consist of comment lines and report lines. Comment lines begin with a # and include details such as the options used, report name, records in the report, and the report line format. Some of the more verbose comments can be controlled with the +header and +xheader options. By default this information is not displayed. A column title beginning with the string rec precedes the report lines. Report lines consist of key fields, such as an IP address and calculated totals for that key such as the number of flows. The summary-detail report is a little bit different from other reports in that it has multiple title lines and no key fields. The column titles are described below.

 +time_real   Difference between the real time of the first and last
              flow.
 +aflowtime   Total time of the flows / Total number of flows.
 +aps         Total Octets / Total Packets (Average Packet Size)
 +afs         Total Octets / Total Flows / (Average Flow Size)
 +apf         Total Packets / Total Flows (Average Packets / Flow)
 +fps         Total Flows / (Last End Time of Flow -
                First Start Time of Flow) (Average Flows / Second)
 +fps_real    (Average Flows / Second in realtime)
 +psizeN      Average Packet Size buckets.
 +fpsizeN     Packets / Flow buckets.
 +fosizeN     Octets / Flow buckets.
 +ftimeN      Time / Flow buckets.

  ignores     Flows with a packet count of 0.

  SSS-count   Count of of an item, example source-ip-address-count

  SSS*        key fields, example source-ip-address
  index       Report line index.
  first       Time of first flow in unix_secs format.
  last        Time of last flow in unix_secs format.

  flows       Summation of flows/key.
  octets      Summation of octets/key.
  packets     Summation of packets/key.
  duration    End time of Flow - Start time of Flow.
  avg-bps     Average Bits/Second.
  min-bps     Minimum Bits/Second.
  max-bps     Maximum Bits/Second.
  avg-pps     Average Packets/Second.
  min-pps     Minimum Packets/Second.
  max-pps     Maximum Packets/Second.
  frecs       Records used in average calculations.

Note fields with a + are only available in the summary-detail report.
The PPS and BPS calculations will not always be correct due to flows which only have one packet, or some other condition where the start time is equal to the end time. In this case these flows are not used in the PPS and BPS calculations. To facilitate aggregating multiple reports and retaining the PPS and BPS fields, the number of flows counted is available in the frecs field.

stat-report command          Description/Example
------------------------------------------------------------------------
type                         Define the report type.
                             type destination-tag

filter                       Apply this filter definition.
                             filter permit-only-tcp


scale                        Scale report by n.
                             scale 100


tag-mask                     Apply source and destination mask to tag.
                             tag-mask 0xFF00 0xFF00

ip-source-address-format     Format of source IP address.
                             address    -  address, ie 128.146.1.7
                             prefix-len -  address/len ie 128.146.1.7/24
                             prefix-mask-  prefix/len 128.146.1/24

ip-destination-address-format
                             Format of destination IP address.
                             address    -  address, ie 128.146.1.7
                             prefix-len -  address/len ie 128.146.1.7/24
                             prefix-mask-  prefix/len 128.146.1/24

output                       Start an output configuration.  Multiple
                             output configurations can be configured
                             per report.

output option                Description/Example
-------------------------------------------------------------------------

path                         Pathname of output.  If the path begins
                             with a | the output is a pipe.  The
                             pathname is formatted through strftime().
                             Directories not in the path are
                             automatically created.
                             path /tmp/%Y/%m/%d/foo.out

time                         What time to use when formatting the
                             pathname with strftime.
                             now         - current time
                             start       - first flow
                             end         - last flow
                             mid         - average of first and last.


tally                        Emit a % total line every n records.
                             tally 10

format                       Output format.  Currently only ascii.
                             format ascii

sort                         Sort on a field.  + ascending, - descending.
                             sort +flows    - sort on the flows field

                             Sortable fields are flows,octets,packets,
                             duration,avg-pps,min-pps,max-pps,avg-bps,
                             min-bps,max-bps


records                      Truncate report at n records.
                             records 10

fields                       Enable/Disable fields with +/-.  Fields:
                             index,first,last,flows,octets,packets,
                             duration,pps,bps,other,key,key1,key2,
                             key3,key4,count.
                             fields +key,+flows,+octets,+packets,

                             For reports with one key, the key
                             field is referenced with key, else
                             key1,key2,key3,etc

                             Note that the count field is only available
                             in select reports, those which end in
                             -count.
         

options                      Enable/Disable options with +/-
                             +header        - include header.
                             +xheader       - include extra header.
                             +totals        - include a totals line.
                             +percent-total - report in % total form.
                             +names         - use symbolic names.
                             options +header,+xheader

stat-definition option       Description/Example
-------------------------------------------------------------------------
filter                       Apply this filter definition.
                             filter default

tag                          Apply this tag definition.
                             tag default

mask                         Apply this mask definition.
                             mask default

report                       Invoke this report.  Multiple reports can
                             be set.
                             report foo

time-series                  How often to produce a report in seconds.
                             time-series 60

global options               Description/Example
-------------------------------------------------------------------------
include-tag                  Specify path to include tag definitions.
                             include-tag /flows/tags/test1

include-filter               Specify path to include filter definitions.
                             include-filter /flows/filters/test1

include-mask                 Specify path to include mask definitions.
                             include-filter /flows/masks/test1


Report type                  Summarization Key Elements.
------------------------------------------------------------------------
summary-detail               Totals plus quick breakdown.

summary-counters             Totals only.

packet-size                  Average packet size distribution.

octets                       Octets per flow distribution.

packets                      Packets per flow distribution.

ip-source-port               IP Source Port.

ip-destination-port          IP Destination Port.

ip-source/destination-port   IP Source/Destination Port pair.

bps                          Bits/Second distribution.

pps                          Packets/Second distribution.

ip-destination-address-type
                             IP class with ASM/SSM Multicast breakout.

ip-protocol                  IP Protocol.

ip-tos                       IP Type of Service.

ip-next-hop-address          IP Next Hop Address.

ip-source-address            IP Source Address.

ip-destination-address       IP Destination Address.

ip-source/destination-address
                             IP Source/Destination Address pair.

ip-exporter-address          IP Exporter Address.

input-interface              Input Interface.

output-interface             Output Interface.

input/output-interface       Input/Output Interface pair.

source-as                    Source AS.

destination-as               Destination AS.

source/destination-as        Source/Destination AS.

ip-source-address/source-as  IP Source Addrss and Source AS.

ip-destination-address/source-as
                             IP Destination Address and Source AS.

ip-source-address/destination-as
                             IP Source Address and Destination AS.

ip-destination-address/destination-as
                             IP Destination Address and Destination AS.

ip-source/destination-address/source-as
                             IP Source/Destination Address and Source AS.

ip-source/destination-address/destination-as
                             IP Source/Destination Address and
                             Destination AS.

ip-source/destination-address/source/destination-as
                             IP Source/Destination Address and
                             Source/Destination AS.

ip-source-address/input-interface
                             IP Source Address and Input Interface.

ip-destination-address/input-interface
                             IP Destination Address and Input Interface.

ip-source-address/output-interface
                             IP Source Address and Output Interface.

ip-destination-address/output-interface
                             IP Destination Address and Output Interface.

ip-source/destination-address/input-interface
                             IP Source/Destination Address and
                             Input Interface.

ip-source/destination-address/output-interface
                             IP Source/Destination Address and
                             Output Interface.

ip-source/destination-address/input/output-interface
                             IP Source/Destination Address and
                             Input/Output Interface.

input-interface/source-as    Input Interface and Source AS.

input-interface/destination-as
                             Input Interface and Destination AS.

output-interface/source-as
                             Output Interface and Source AS.

output-interface/destination-as
                             Output Interface and Destination AS.

input-interface/source/destination-as
                             Input Interface and Source/Destination AS.

output-interface/source/destination-as
                             Output Interface and Source/Destination AS.

input/output-interface/source/destination-as
                             Input/Output Interface and
                             Source/Destination AS.

engine-id                    Engine ID.

engine-type                  Engine Type.

source-tag                   Source Tag.

destination-tag              Destination Tag.

source/destination-tag       Source/Destination Tag.

ip-source-address/ip-source-port
                             IP Source Address and IP Source Port.

ip-source-address/ip-destination-port
                             IP Source Address and IP Destination Port.

ip-destination-address/ip-source-port
                             IP Destination Address and IP Source Port.

ip-destination-address/ip-destination-port
                             IP Destination Address and
                             IP Destination Port.

ip-source-address/ip-source/destination-port
                             IP Source Address and
                             IP Source/Destination Port.

ip-destination-address/ip-source/destination-port
                             IP Destination Address and
                             IP Source/Destination Port.

ip-source/destination-address/ip-source-port
                             IP Source/Destination Address and
                             IP Source Port.

ip-source/destination-address/ip-destination-port
                             IP Source/Destination Address and
                             IP Destination Port.

ip-source/destination-address/ip-source/destination-port
                             IP Source/Destination Address and
                             IP Source/Destination Port.

ip-source-address/input/output-interface
                             IP Source Address and
                             Input/Output Interface.

ip-destination-address/input/output-interface
                             IP Destination Address and
                             Input/Output Interface.

ip-source-address/source/destination-as
                             IP Source Address and
                             Source/Destination AS.

ip-destination-address/source/destination-as
                             IP Destination Address and
                             Source/Destination AS.

ip-address                   IP Address (both source and destination).

ip-port                      IP Port (both source and destination).

ip-source-address-destination-count
                             Count of destination IP addresses associated
                             with a source IP address.

ip-destination-address-source-count
                             Count of source IP addresses associated
                             with a destination IP address.

linear-interpolated-flows-octets-packets
                             Linear interpolated distribution of flows,
                             octets and packets.  The distribution is
                             done across the start and end time of the
                             flow.

first                        First packet of flow distribution.

last                         Last packet of flow distribution.

duration                     Duration of flow distribution.

ip-source-address/source-tag
                             IP Source Address and
                             Source tag.

ip-source-address/destination-tag
                             IP Source Address and
                             Destination tag.

ip-destination-address/source-tag
                             IP Destination Address and
                             Source tag.

ip-destination-address/destination-tag
                             IP Destination Address and
                             Destination tag.

ip-source/destination-address/source/destination-tag
                             IP Source/Destination Address and
                             Source/Destination tag.

ip-source/destination-address/ip-protocol/ip-tos
                             IP Source/Destination Address, IP Protocol,
                             and ToS.

ip-source/destination-address/ip-protocol/ip-tos/ip-source/destination-port
                             IP Source/Destination Addess, IP Protocol,
                             IP Tos, IP Source/Destination Port.

OPTIONS

-d debug_level

Enable debugging.

-s stat_fname

Report configuration filename. Defaults to @localstatedir@/cfg/stat.

-S stat_definition

Select the active definition.

-v variable binding

Set a variable FOO=bar.

-h

Display help. -hh will list the available reports.

EXAMPLES

An example of report configuration file

# stat config file

include-filter /tmp/filter

stat-report t1
  type summary-detail
  filter default
  scale 100 
  output
    format ascii
    options +header,+xheader,+totals
    fields +other
    path /tmp/output1

stat-report t6
  type ip-source-port  
  output
    format ascii
    options +header,+xheader,+totals,+names,+percent-total
    sort +pps
    tally 5
    path /tmp/output6

stat-definition test
  filter tcp
  report t1
  report t6
# filter config file

filter-primitive TCP
  type ip-protocol
  permit TCP

filter-definition tcp
  match ip-protocol TCP
flow-cat flows | flow-report -stest -Stest

IMPLEMENTATION NOTES

Packet size calculations are dOctets / dPkts, ie an average packet size. It is not possible to get a true packet size from flow exports. pps and bps calculations are an average of the averages. Flows that do not have a duration (start == end) are not counted in the pps and bps calculations. Flows without a packet or octet count are ignored.

FILES

Configuration files: Symbols - @localstatedir@/sym/*. Tag - @localstatedir@/cfg/tag.cfg. Filter - @localstatedir@/cfg/filter.cfg. Mask - @localstatedir@/cfg/mask.cfg. Report - @localstatedir@/cfg/stat.cfg. Xlate - @localstatedir@/cfg/xlate.cfg.

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-report.sgml0000644000076600007660000004771107776323057013377 flow-report 1 flow-report Generate reports from flow data. flow-report -h -d debug_level -s stat_fname -S stat_definition -v variable binding DESCRIPTION The flow-report utility will generate reports from flow data. The reports are easy to parse ASCII text that can be used by a front end to produce readable reports, graphs, and charts. Reports are definied in a configuration file by the 'stat-report' keyword followed by a report name. Each report has a type defined below and other commands. Reports are grouped into a definition with the 'stat-definition' keyword followed by a definition name. Each definition can invoke a filter and optionally apply tags. Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option. Generated reports consist of comment lines and report lines. Comment lines begin with a # and include details such as the options used, report name, records in the report, and the report line format. Some of the more verbose comments can be controlled with the +header and +xheader options. By default this information is not displayed. A column title beginning with the string rec precedes the report lines. Report lines consist of key fields, such as an IP address and calculated totals for that key such as the number of flows. The summary-detail report is a little bit different from other reports in that it has multiple title lines and no key fields. The column titles are described below. +time_real Difference between the real time of the first and last flow. +aflowtime Total time of the flows / Total number of flows. +aps Total Octets / Total Packets (Average Packet Size) +afs Total Octets / Total Flows / (Average Flow Size) +apf Total Packets / Total Flows (Average Packets / Flow) +fps Total Flows / (Last End Time of Flow - First Start Time of Flow) (Average Flows / Second) +fps_real (Average Flows / Second in realtime) +psizeN Average Packet Size buckets. +fpsizeN Packets / Flow buckets. +fosizeN Octets / Flow buckets. +ftimeN Time / Flow buckets. ignores Flows with a packet count of 0. SSS-count Count of of an item, example source-ip-address-count SSS* key fields, example source-ip-address index Report line index. first Time of first flow in unix_secs format. last Time of last flow in unix_secs format. flows Summation of flows/key. octets Summation of octets/key. packets Summation of packets/key. duration End time of Flow - Start time of Flow. avg-bps Average Bits/Second. min-bps Minimum Bits/Second. max-bps Maximum Bits/Second. avg-pps Average Packets/Second. min-pps Minimum Packets/Second. max-pps Maximum Packets/Second. frecs Records used in average calculations. Note fields with a + are only available in the summary-detail report. The PPS and BPS calculations will not always be correct due to flows which only have one packet, or some other condition where the start time is equal to the end time. In this case these flows are not used in the PPS and BPS calculations. To facilitate aggregating multiple reports and retaining the PPS and BPS fields, the number of flows counted is available in the frecs field. stat-report command Description/Example ------------------------------------------------------------------------ type Define the report type. type destination-tag filter Apply this filter definition. filter permit-only-tcp scale Scale report by n. scale 100 tag-mask Apply source and destination mask to tag. tag-mask 0xFF00 0xFF00 ip-source-address-format Format of source IP address. address - address, ie 128.146.1.7 prefix-len - address/len ie 128.146.1.7/24 prefix-mask- prefix/len 128.146.1/24 ip-destination-address-format Format of destination IP address. address - address, ie 128.146.1.7 prefix-len - address/len ie 128.146.1.7/24 prefix-mask- prefix/len 128.146.1/24 output Start an output configuration. Multiple output configurations can be configured per report. output option Description/Example ------------------------------------------------------------------------- path Pathname of output. If the path begins with a | the output is a pipe. The pathname is formatted through strftime(). Directories not in the path are automatically created. path /tmp/%Y/%m/%d/foo.out time What time to use when formatting the pathname with strftime. now - current time start - first flow end - last flow mid - average of first and last. tally Emit a % total line every n records. tally 10 format Output format. Currently only ascii. format ascii sort Sort on a field. + ascending, - descending. sort +flows - sort on the flows field Sortable fields are flows,octets,packets, duration,avg-pps,min-pps,max-pps,avg-bps, min-bps,max-bps records Truncate report at n records. records 10 fields Enable/Disable fields with +/-. Fields: index,first,last,flows,octets,packets, duration,pps,bps,other,key,key1,key2, key3,key4,count. fields +key,+flows,+octets,+packets, For reports with one key, the key field is referenced with key, else key1,key2,key3,etc Note that the count field is only available in select reports, those which end in -count. options Enable/Disable options with +/- +header - include header. +xheader - include extra header. +totals - include a totals line. +percent-total - report in % total form. +names - use symbolic names. options +header,+xheader stat-definition option Description/Example ------------------------------------------------------------------------- filter Apply this filter definition. filter default tag Apply this tag definition. tag default mask Apply this mask definition. mask default report Invoke this report. Multiple reports can be set. report foo time-series How often to produce a report in seconds. time-series 60 global options Description/Example ------------------------------------------------------------------------- include-tag Specify path to include tag definitions. include-tag /flows/tags/test1 include-filter Specify path to include filter definitions. include-filter /flows/filters/test1 include-mask Specify path to include mask definitions. include-filter /flows/masks/test1 Report type Summarization Key Elements. ------------------------------------------------------------------------ summary-detail Totals plus quick breakdown. summary-counters Totals only. packet-size Average packet size distribution. octets Octets per flow distribution. packets Packets per flow distribution. ip-source-port IP Source Port. ip-destination-port IP Destination Port. ip-source/destination-port IP Source/Destination Port pair. bps Bits/Second distribution. pps Packets/Second distribution. ip-destination-address-type IP class with ASM/SSM Multicast breakout. ip-protocol IP Protocol. ip-tos IP Type of Service. ip-next-hop-address IP Next Hop Address. ip-source-address IP Source Address. ip-destination-address IP Destination Address. ip-source/destination-address IP Source/Destination Address pair. ip-exporter-address IP Exporter Address. input-interface Input Interface. output-interface Output Interface. input/output-interface Input/Output Interface pair. source-as Source AS. destination-as Destination AS. source/destination-as Source/Destination AS. ip-source-address/source-as IP Source Addrss and Source AS. ip-destination-address/source-as IP Destination Address and Source AS. ip-source-address/destination-as IP Source Address and Destination AS. ip-destination-address/destination-as IP Destination Address and Destination AS. ip-source/destination-address/source-as IP Source/Destination Address and Source AS. ip-source/destination-address/destination-as IP Source/Destination Address and Destination AS. ip-source/destination-address/source/destination-as IP Source/Destination Address and Source/Destination AS. ip-source-address/input-interface IP Source Address and Input Interface. ip-destination-address/input-interface IP Destination Address and Input Interface. ip-source-address/output-interface IP Source Address and Output Interface. ip-destination-address/output-interface IP Destination Address and Output Interface. ip-source/destination-address/input-interface IP Source/Destination Address and Input Interface. ip-source/destination-address/output-interface IP Source/Destination Address and Output Interface. ip-source/destination-address/input/output-interface IP Source/Destination Address and Input/Output Interface. input-interface/source-as Input Interface and Source AS. input-interface/destination-as Input Interface and Destination AS. output-interface/source-as Output Interface and Source AS. output-interface/destination-as Output Interface and Destination AS. input-interface/source/destination-as Input Interface and Source/Destination AS. output-interface/source/destination-as Output Interface and Source/Destination AS. input/output-interface/source/destination-as Input/Output Interface and Source/Destination AS. engine-id Engine ID. engine-type Engine Type. source-tag Source Tag. destination-tag Destination Tag. source/destination-tag Source/Destination Tag. ip-source-address/ip-source-port IP Source Address and IP Source Port. ip-source-address/ip-destination-port IP Source Address and IP Destination Port. ip-destination-address/ip-source-port IP Destination Address and IP Source Port. ip-destination-address/ip-destination-port IP Destination Address and IP Destination Port. ip-source-address/ip-source/destination-port IP Source Address and IP Source/Destination Port. ip-destination-address/ip-source/destination-port IP Destination Address and IP Source/Destination Port. ip-source/destination-address/ip-source-port IP Source/Destination Address and IP Source Port. ip-source/destination-address/ip-destination-port IP Source/Destination Address and IP Destination Port. ip-source/destination-address/ip-source/destination-port IP Source/Destination Address and IP Source/Destination Port. ip-source-address/input/output-interface IP Source Address and Input/Output Interface. ip-destination-address/input/output-interface IP Destination Address and Input/Output Interface. ip-source-address/source/destination-as IP Source Address and Source/Destination AS. ip-destination-address/source/destination-as IP Destination Address and Source/Destination AS. ip-address IP Address (both source and destination). ip-port IP Port (both source and destination). ip-source-address-destination-count Count of destination IP addresses associated with a source IP address. ip-destination-address-source-count Count of source IP addresses associated with a destination IP address. linear-interpolated-flows-octets-packets Linear interpolated distribution of flows, octets and packets. The distribution is done across the start and end time of the flow. first First packet of flow distribution. last Last packet of flow distribution. duration Duration of flow distribution. ip-source-address/source-tag IP Source Address and Source tag. ip-source-address/destination-tag IP Source Address and Destination tag. ip-destination-address/source-tag IP Destination Address and Source tag. ip-destination-address/destination-tag IP Destination Address and Destination tag. ip-source/destination-address/source/destination-tag IP Source/Destination Address and Source/Destination tag. ip-source/destination-address/ip-protocol/ip-tos IP Source/Destination Address, IP Protocol, and ToS. ip-source/destination-address/ip-protocol/ip-tos/ip-source/destination-port IP Source/Destination Addess, IP Protocol, IP Tos, IP Source/Destination Port. OPTIONS -d debug_level Enable debugging. -s stat_fname Report configuration filename. Defaults to @localstatedir@/cfg/stat. -S stat_definition Select the active definition. -v variable binding Set a variable FOO=bar. -h Display help. -hh will list the available reports. EXAMPLES An example of report configuration file # stat config file include-filter /tmp/filter stat-report t1 type summary-detail filter default scale 100 output format ascii options +header,+xheader,+totals fields +other path /tmp/output1 stat-report t6 type ip-source-port output format ascii options +header,+xheader,+totals,+names,+percent-total sort +pps tally 5 path /tmp/output6 stat-definition test filter tcp report t1 report t6 # filter config file filter-primitive TCP type ip-protocol permit TCP filter-definition tcp match ip-protocol TCP flow-cat flows | flow-report -stest -Stest IMPLEMENTATION NOTES Packet size calculations are dOctets / dPkts, ie an average packet size. It is not possible to get a true packet size from flow exports. pps and bps calculations are an average of the averages. Flows that do not have a duration (start == end) are not counted in the pps and bps calculations. Flows without a packet or octet count are ignored. FILES Configuration files: Symbols - @localstatedir@/sym/*. Tag - @localstatedir@/cfg/tag.cfg. Filter - @localstatedir@/cfg/filter.cfg. Mask - @localstatedir@/cfg/mask.cfg. Report - @localstatedir@/cfg/stat.cfg. Xlate - @localstatedir@/cfg/xlate.cfg. BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-rpt2rrd.1.in0000644000076600007660000001155310240375760013245 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-rpt2rrd\fP" "1" .SH "NAME" \fBflow-rpt2rrd\fP \(em Convert flow-report CSV output to RRDtool format\&. .SH "SYNOPSIS" .PP \fBflow-rpt2rrd\fP [-nv] [-d\fI debug_level\fP] [-k\fI keys\fP] [-K\fI keys_file\fP] [-f\fI fields\fP] [-p\fI rrd_path\fP] [-P\fI rrd_postfix\fP] [-r\fI rrd_storage\fP] .SH "DESCRIPTION" .PP The \fBflow-rpt2rrd\fP utility processes the CSV output of flow-report into RRDtool format\&. The aggregates for a key are each stored as a DS in RRD filename {rrd_path,"/",key,rrd_postfix,"\&.rrd"}\&. By default a DS is created for flows, octets, and packets\&. The key must be specified, for example an ip-port report could use smtp,nntp,ssh,telnet as the keys which would create a separate RRD for each key\&. .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Set debug level to debug_level (debugging code) .IP "-h" 10 Help\&. .IP "-k\fI keys\fP|\fIhtml\fP" 10 Comma separated list of key values\&. If the report has symbols then the key must be the symbol, ie smtp not 25\&. The totals_* lines may be used if they are enabled in the report\&. There is no default, keys must be specified with -k or -K\&. .IP "-K\fI keys_file\fP" 10 Load keys from \fIkeys_file\fP\&. See -k\&. .IP "-f" 10 Comma separated list of columns to store\&. Each column maps to a DS in the RRD\&. Defaults to flows,octets,packets .IP "-n" 10 Enable symbol table lookups\&. For example TCP port 25 = smtp\&. This will result in RRD file names with the symbolic names if symbol lookups were not enabled in the report\&. .IP "-p\fI rrd_path\fP" 10 Set path to RRD files\&. Defaults to "\&."\&. .IP "-P\fI rrd_postfix\fP" 10 Set RRD file name postfix\&. Defaults to ""\&. .IP "-r\fI rrd_storage\fP" 10 Set RRD storage for 5 minute, 30 minute, 2 hour, and 1 day databases\&. List items are : seperated\&. Defaults to 600:600:600:732\&. .IP "-v" 10 Enable verbose output\&. .SH "EXAMPLES" .PP .nf The following example shows the combined use of flow-nfilter (inline), flow-report, and flow-rpt2rrd to create an RRD depicting traffic from clmbo-r4 to AS 10796 and 6478 for 2004-11-08\&. rrdtool graph is then used to create a \&.png\&. #!/bin/sh cat << EOF>report\&.cfg include-filter nfilter\&.cfg stat-report CLMBO-R4-TO-INTERNET-BY-DESTINATION-AS type destination-as filter CLMBO-R4-INTERNET-OUT scale 100 output options +header,+xheader fields -duration stat-definition 5min-summaries report CLMBO-R4-TO-INTERNET-BY-DESTINATION-AS EOF cat << EOF>nfilter\&.cfg # ifMIB\&.ifMIBObjects\&.ifXTable\&.ifXEntry\&.ifName\&.46 = so-0/0/0\&.0 filter-primitive CLMBO-R4-INTERNET type ifindex permit 46 # Match on traffic to the Internet filter-definition CLMBO-R4-INTERNET-OUT match output-interface CLMBO-R4-INTERNET EOF mkdir rrds # 5 minute flow files from flow-capture are here FLOW_DATA=/flows/clmbo-r4/2004-11-08/ # for each 5 minute flow,aggregate with flow-report then store to RRD for name in $FLOW_DATA/*; do echo working\&.\&.\&.$name flow-report -s report\&.cfg -S5min-summaries < $name | flow-rpt2rrd -k10796,6478 -p rrds done # first flow - 0:1:23 11/8/2004 START=1099890083 # last flow - 0:1:25 11/9/2004 END=1099976485 rrdtool graph CLMBO-R4-TO-INTERNET\&.png --start $START --end $END \ --vertical-label "Bits/Second" --title="CLMBO-R4 TO INTERNET BY AS" \ DEF:AS10796in=rrds/10796\&.rrd:octets:AVERAGE \ DEF:AS6478in=rrds/6478\&.rrd:octets:AVERAGE \ CDEF:b_AS10796in=AS10796in,8,* \ CDEF:b_AS6478in=AS6478in,8,* \ LINE1:b_AS10796in#FF0000:AS10796-in \ LINE1:b_AS6478in#555555:AS6478-in \ .fi .SH "BUGS" .PP Hard coded to expect 5 minute flow file intervals\&. Does not properly parse flow-report time-series output\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Wed 11 May 2005, 08:34 flow-tools-0.68/docs/flow-rpt2rrd.html.in0000644000076600007660000001270610240376631014050 flow-rpt2rrd

flow-rpt2rrd

Name

flow-rpt2rrd -- Convert flow-report CSV output to RRDtool format.

Synopsis

flow-rpt2rrd [-nv] [-d debug_level] [-k keys] [-K keys_file] [-f fields] [-p rrd_path] [-P rrd_postfix] [-r rrd_storage]

DESCRIPTION

The flow-rpt2rrd utility processes the CSV output of flow-report into RRDtool format. The aggregates for a key are each stored as a DS in RRD filename {rrd_path,"/",key,rrd_postfix,".rrd"}. By default a DS is created for flows, octets, and packets. The key must be specified, for example an ip-port report could use smtp,nntp,ssh,telnet as the keys which would create a separate RRD for each key.

OPTIONS

-d debug_level

Set debug level to debug_level (debugging code)

-h

Help.

-k keys|html

Comma separated list of key values. If the report has symbols then the key must be the symbol, ie smtp not 25. The totals_* lines may be used if they are enabled in the report. There is no default, keys must be specified with -k or -K.

-K keys_file

Load keys from keys_file. See -k.

-f

Comma separated list of columns to store. Each column maps to a DS in the RRD. Defaults to flows,octets,packets

-n

Enable symbol table lookups. For example TCP port 25 = smtp. This will result in RRD file names with the symbolic names if symbol lookups were not enabled in the report.

-p rrd_path

Set path to RRD files. Defaults to ".".

-P rrd_postfix

Set RRD file name postfix. Defaults to "".

-r rrd_storage

Set RRD storage for 5 minute, 30 minute, 2 hour, and 1 day databases. List items are : seperated. Defaults to 600:600:600:732.

-v

Enable verbose output.

EXAMPLES

The following example shows the combined use of flow-nfilter (inline), 
flow-report, and flow-rpt2rrd to create an RRD depicting traffic 
from clmbo-r4 to AS 10796 and 6478 for 2004-11-08.  rrdtool graph is
then used to create a .png.

#!/bin/sh

cat << EOF>report.cfg

include-filter nfilter.cfg

stat-report CLMBO-R4-TO-INTERNET-BY-DESTINATION-AS
  type destination-as
  filter CLMBO-R4-INTERNET-OUT
  scale 100
  output   
    options +header,+xheader
    fields -duration

stat-definition 5min-summaries
  report CLMBO-R4-TO-INTERNET-BY-DESTINATION-AS
EOF

cat << EOF>nfilter.cfg
# ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.46 = so-0/0/0.0
filter-primitive CLMBO-R4-INTERNET
  type ifindex
  permit 46

# Match on traffic to the Internet
filter-definition CLMBO-R4-INTERNET-OUT
  match output-interface CLMBO-R4-INTERNET
EOF

mkdir rrds

# 5 minute flow files from flow-capture are here
FLOW_DATA=/flows/clmbo-r4/2004-11-08/

# for each 5 minute flow,aggregate with flow-report then store to RRD
for name in $FLOW_DATA/*; do
  echo working...$name
  flow-report -s report.cfg -S5min-summaries < $name | flow-rpt2rrd -k10796,6478  -p rrds
done

# first flow - 0:1:23 11/8/2004
START=1099890083
# last flow - 0:1:25 11/9/2004
END=1099976485

rrdtool graph CLMBO-R4-TO-INTERNET.png --start $START --end $END \
        --vertical-label "Bits/Second" --title="CLMBO-R4 TO INTERNET BY AS" \
        DEF:AS10796in=rrds/10796.rrd:octets:AVERAGE \
        DEF:AS6478in=rrds/6478.rrd:octets:AVERAGE \
        CDEF:b_AS10796in=AS10796in,8,* \
        CDEF:b_AS6478in=AS6478in,8,* \
        LINE1:b_AS10796in#FF0000:AS10796-in \
        LINE1:b_AS6478in#555555:AS6478-in \

BUGS

Hard coded to expect 5 minute flow file intervals. Does not properly parse flow-report time-series output.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-rpt2rrd.sgml0000644000076600007660000001276210240375754013450 flow-rpt2rrd 1 flow-rpt2rrd Convert flow-report CSV output to RRDtool format. flow-rpt2rrd -nv -d debug_level -k keys -K keys_file -f fields -p rrd_path -P rrd_postfix -r rrd_storage DESCRIPTION The flow-rpt2rrd utility processes the CSV output of flow-report into RRDtool format. The aggregates for a key are each stored as a DS in RRD filename {rrd_path,"/",key,rrd_postfix,".rrd"}. By default a DS is created for flows, octets, and packets. The key must be specified, for example an ip-port report could use smtp,nntp,ssh,telnet as the keys which would create a separate RRD for each key. OPTIONS -d debug_level Set debug level to debug_level (debugging code) -h Help. -k keys|html Comma separated list of key values. If the report has symbols then the key must be the symbol, ie smtp not 25. The totals_* lines may be used if they are enabled in the report. There is no default, keys must be specified with -k or -K. -K keys_file Load keys from keys_file. See -k. -f Comma separated list of columns to store. Each column maps to a DS in the RRD. Defaults to flows,octets,packets -n Enable symbol table lookups. For example TCP port 25 = smtp. This will result in RRD file names with the symbolic names if symbol lookups were not enabled in the report. -p rrd_path Set path to RRD files. Defaults to ".". -P rrd_postfix Set RRD file name postfix. Defaults to "". -r rrd_storage Set RRD storage for 5 minute, 30 minute, 2 hour, and 1 day databases. List items are : seperated. Defaults to 600:600:600:732. -v Enable verbose output. EXAMPLES The following example shows the combined use of flow-nfilter (inline), flow-report, and flow-rpt2rrd to create an RRD depicting traffic from clmbo-r4 to AS 10796 and 6478 for 2004-11-08. rrdtool graph is then used to create a .png. #!/bin/sh cat << EOF>report.cfg include-filter nfilter.cfg stat-report CLMBO-R4-TO-INTERNET-BY-DESTINATION-AS type destination-as filter CLMBO-R4-INTERNET-OUT scale 100 output options +header,+xheader fields -duration stat-definition 5min-summaries report CLMBO-R4-TO-INTERNET-BY-DESTINATION-AS EOF cat << EOF>nfilter.cfg # ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.46 = so-0/0/0.0 filter-primitive CLMBO-R4-INTERNET type ifindex permit 46 # Match on traffic to the Internet filter-definition CLMBO-R4-INTERNET-OUT match output-interface CLMBO-R4-INTERNET EOF mkdir rrds # 5 minute flow files from flow-capture are here FLOW_DATA=/flows/clmbo-r4/2004-11-08/ # for each 5 minute flow,aggregate with flow-report then store to RRD for name in $FLOW_DATA/*; do echo working...$name flow-report -s report.cfg -S5min-summaries < $name | flow-rpt2rrd -k10796,6478 -p rrds done # first flow - 0:1:23 11/8/2004 START=1099890083 # last flow - 0:1:25 11/9/2004 END=1099976485 rrdtool graph CLMBO-R4-TO-INTERNET.png --start $START --end $END \ --vertical-label "Bits/Second" --title="CLMBO-R4 TO INTERNET BY AS" \ DEF:AS10796in=rrds/10796.rrd:octets:AVERAGE \ DEF:AS6478in=rrds/6478.rrd:octets:AVERAGE \ CDEF:b_AS10796in=AS10796in,8,* \ CDEF:b_AS6478in=AS6478in,8,* \ LINE1:b_AS10796in#FF0000:AS10796-in \ LINE1:b_AS6478in#555555:AS6478-in \ BUGS Hard coded to expect 5 minute flow file intervals. Does not properly parse flow-report time-series output. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-rptfmt.1.in0000644000076600007660000000536510240172475013164 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-rptfmt\fP" "1" .SH "NAME" \fBflow-rptfmt\fP \(em Format the output of flow-report in ASCII or HTML .SH "SYNOPSIS" .PP \fBflow-rptfmt\fP [-hHnp] [-a\fI alarm_time\fP] [-f\fI format\fP] [-F\fI fields\fP] [-m\fI max_lines\fP] [-s\fI sort_field\fP] .SH "DESCRIPTION" .PP The \fBflow-rptfmt\fP utility processes the CSV output of flow-report into formatted ASCII or HTML\&. Sorting, maximum display lines, field filter, header display, and name substitution are supported during post processing\&. Additionally an alarm can be set for use in CGI scripts to limit the CPU time of formatting\&. .SH "OPTIONS" .IP "-a\fI alarm_time\fP" 10 Exit after \fIalarm_time\fP seconds\&. .IP "-f\fI ascii\fP|\fIhtml\fP" 10 Set output format\&. Defaults to ASCII\&. .IP "-F\fI display_fields\fP" 10 Limit columns to \fIdisplay_fields\fP .IP "-h" 10 Help\&. .IP "-H" 10 Display header information\&. .IP "-m \fImax_lines\fP" 10 Limit rows to max_lines\&. .IP "-n" 10 Enable symbol table lookups\&. .IP "-p" 10 Display in percent total form\&. .IP "-s\fI sort_field\fP" 10 Sort on \fIsort_field\fP\&. Prepend with + for ascending, - for descending sort\&. .SH "EXAMPLES" .PP Format the output of daily-ip-protocol\&.txt in ASCII\&. Display the ip-protocol and octets fields in percent total format with symbols\&. Limit output to top 5 sorted by octets\&. .PP \fBcat daily-ip-protocol\&.txt | flow-rptfmt -fascii -Fip-protocol,octets -p -n -m5 \fP .SH "BUGS" .PP Sorting could be faster\&. Percent totals could be faster\&. May not work with flow-report prior to 0\&.68\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Tue 10 May 2005, 13:54 flow-tools-0.68/docs/flow-rptfmt.html.in0000644000076600007660000000647610240376615013776 flow-rptfmt

flow-rptfmt

Name

flow-rptfmt -- Format the output of flow-report in ASCII or HTML

Synopsis

flow-rptfmt [-hHnp] [-a alarm_time] [-f format] [-F fields] [-m max_lines] [-s sort_field]

DESCRIPTION

The flow-rptfmt utility processes the CSV output of flow-report into formatted ASCII or HTML. Sorting, maximum display lines, field filter, header display, and name substitution are supported during post processing. Additionally an alarm can be set for use in CGI scripts to limit the CPU time of formatting.

OPTIONS

-a alarm_time

Exit after alarm_time seconds.

-f ascii|html

Set output format. Defaults to ASCII.

-F display_fields

Limit columns to display_fields

-h

Help.

-H

Display header information.

-m max_lines

Limit rows to max_lines.

-n

Enable symbol table lookups.

-p

Display in percent total form.

-s sort_field

Sort on sort_field. Prepend with + for ascending, - for descending sort.

EXAMPLES

Format the output of daily-ip-protocol.txt in ASCII. Display the ip-protocol and octets fields in percent total format with symbols. Limit output to top 5 sorted by octets.

cat daily-ip-protocol.txt | flow-rptfmt -fascii -Fip-protocol,octets -p -n -m5

BUGS

Sorting could be faster. Percent totals could be faster. May not work with flow-report prior to 0.68.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-rptfmt.sgml0000644000076600007660000000652310240172472013353 flow-rptfmt 1 flow-rptfmt Format the output of flow-report in ASCII or HTML flow-rptfmt -hHnp -a alarm_time -f format -F fields -m max_lines -s sort_field DESCRIPTION The flow-rptfmt utility processes the CSV output of flow-report into formatted ASCII or HTML. Sorting, maximum display lines, field filter, header display, and name substitution are supported during post processing. Additionally an alarm can be set for use in CGI scripts to limit the CPU time of formatting. OPTIONS -a alarm_time Exit after alarm_time seconds. -f ascii|html Set output format. Defaults to ASCII. -F display_fields Limit columns to display_fields -h Help. -H Display header information. -m max_lines Limit rows to max_lines. -n Enable symbol table lookups. -p Display in percent total form. -s sort_field Sort on sort_field. Prepend with + for ascending, - for descending sort. EXAMPLES Format the output of daily-ip-protocol.txt in ASCII. Display the ip-protocol and octets fields in percent total format with symbols. Limit output to top 5 sorted by octets. cat daily-ip-protocol.txt | flow-rptfmt -fascii -Fip-protocol,octets -p -n -m5 BUGS Sorting could be faster. Percent totals could be faster. May not work with flow-report prior to 0.68. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-send.10000644000076600007660000000723207643046417012200 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-send\fP" "1" .SH "NAME" \fBflow-send\fP \(em Transmit flow data with the NetFlow protocol\&. .SH "SYNOPSIS" .PP \fBflow-send\fP [-h] [-d\fI debug_level\fP] [-m\fI privacy_mask\fP] [-s] [-x\fI xmit_delay\fP] [-V\fI pdu_version\fP] \fIlocalip/remoteip/port\fP .SH "DESCRIPTION" .PP The \fBflow-send\fP utility is used to transmit flows in NetFlow format to a collector specified by localip/remoteip/port\&. .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-h" 10 Display help\&. .IP "-s" 10 Enable spoofing of source IP address\&. .IP "-m\fI privacy_mask\fP" 10 Apply \fIprivacy_mask\fP to the source and destination IP address of flows\&. For example a privacy_mask of 255\&.255\&.255\&.0 would convert flows with source/destination IP addresses 10\&.1\&.1\&.1 and 10\&.2\&.2\&.2 to 10\&.1\&.1\&.0 and 10\&.2\&.2\&.0 respectively\&. .IP "-V\fI pdu_version\fP" 10 Use \fIpdu_version\fP format when transmitting\&. .PP .nf 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8\&.1 NetFlow AS Aggregation 8\&.2 NetFlow Proto Port Aggregation 8\&.3 NetFlow Source Prefix Aggregation 8\&.4 NetFlow Destination Prefix Aggregation 8\&.5 NetFlow Prefix Aggregation 8\&.6 NetFlow Destination (Catalyst switches) 8\&.7 NetFlow Source Destination (Catalyst switches) 8\&.8 NetFlow Full Flow (Catalyst switches) 8\&.9 NetFlow ToS AS Aggregation 8\&.10 NetFlow ToS Proto Port Aggregation 8\&.11 NetFlow ToS Source Prefix Aggregation 8\&.12 NetFlow ToS Destination Prefix Aggregation 8\&.13 NetFlow ToS Prefix Aggregation 8\&.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 .fi .IP "-x\fI xmit_delay\fP" 10 Configure a microsecond transmit delay between packets\&. This may be necessary in some configurations to prevent a transmit buffer overrun\&. .SH "EXAMPLES" .PP Transmit all flows in the directory /flows/krc4 to the collector at 10\&.0\&.0\&.1 listening on port 9500\&. .PP \fBflow-cat /flows/krc4 | flow-send 0/10\&.0\&.0\&.1/9500\fP .PP Generate a test pattern of version 7 flows and send them to a collector at 10\&.0\&.0\&.1 listening on port 9500\&. .PP \fBflow-gen -V7 | flow-send 0/10\&.0\&.0\&.1/9500\fP .SH "BUGS" .PP It is not currently possible to convert between the aggregated formats (8\&.x) and the non aggregated formats (1,5,6,7)\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Thu 03 Apr 2003, 10:02 flow-tools-0.68/docs/flow-send.html0000644000076600007660000001201507643046423012774 flow-send

flow-send

Name

flow-send -- Transmit flow data with the NetFlow protocol.

Synopsis

flow-send [-h] [-d debug_level] [-m privacy_mask] [-s] [-x xmit_delay] [-V pdu_version] {localip/remoteip/port}

DESCRIPTION

The flow-send utility is used to transmit flows in NetFlow format to a collector specified by localip/remoteip/port.

OPTIONS

-d debug_level

Enable debugging.

-h

Display help.

-s

Enable spoofing of source IP address.

-m privacy_mask

Apply privacy_mask to the source and destination IP address of flows. For example a privacy_mask of 255.255.255.0 would convert flows with source/destination IP addresses 10.1.1.1 and 10.2.2.2 to 10.1.1.0 and 10.2.2.0 respectively.

-V pdu_version

Use pdu_version format when transmitting.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-x xmit_delay

Configure a microsecond transmit delay between packets. This may be necessary in some configurations to prevent a transmit buffer overrun.

EXAMPLES

Transmit all flows in the directory /flows/krc4 to the collector at 10.0.0.1 listening on port 9500.

flow-cat /flows/krc4 | flow-send 0/10.0.0.1/9500

Generate a test pattern of version 7 flows and send them to a collector at 10.0.0.1 listening on port 9500.

flow-gen -V7 | flow-send 0/10.0.0.1/9500

BUGS

It is not currently possible to convert between the aggregated formats (8.x) and the non aggregated formats (1,5,6,7).

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-send.sgml0000644000076600007660000000775107643046411013002 flow-send 1 flow-send Transmit flow data with the NetFlow protocol. flow-send -h -d debug_level -m privacy_mask -s -x xmit_delay -V pdu_version localip/remoteip/port DESCRIPTION The flow-send utility is used to transmit flows in NetFlow format to a collector specified by localip/remoteip/port. OPTIONS -d debug_level Enable debugging. -h Display help. -s Enable spoofing of source IP address. -m privacy_mask Apply privacy_mask to the source and destination IP address of flows. For example a privacy_mask of 255.255.255.0 would convert flows with source/destination IP addresses 10.1.1.1 and 10.2.2.2 to 10.1.1.0 and 10.2.2.0 respectively. -V pdu_version Use pdu_version format when transmitting. 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -x xmit_delay Configure a microsecond transmit delay between packets. This may be necessary in some configurations to prevent a transmit buffer overrun. EXAMPLES Transmit all flows in the directory /flows/krc4 to the collector at 10.0.0.1 listening on port 9500. flow-cat /flows/krc4 | flow-send 0/10.0.0.1/9500 Generate a test pattern of version 7 flows and send them to a collector at 10.0.0.1 listening on port 9500. flow-gen -V7 | flow-send 0/10.0.0.1/9500 BUGS It is not currently possible to convert between the aggregated formats (8.x) and the non aggregated formats (1,5,6,7). AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-split.10000644000076600007660000000510707552463661012404 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-split\fP" "1" .SH "NAME" \fBflow-split\fP \(em Split flow files into smaller files\&. .SH "SYNOPSIS" .PP \fBflow-split\fP [-gGhn] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-N\fI nflows\fP] [-o\fI outfile_basename\fP] [-T\fI nseconds\fP] [-z\fI z_level\fP] .SH "DESCRIPTION" .PP The \fBflow-split\fP utility will split a flow file into smaller files based on the the number of flows or the ammount of time that has passed\&. .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-g" 10 Split on source tag\&. .IP "-G" 10 Split on destination tag\&. .IP "-h" 10 Display help\&. .IP "-n" 10 Use symbols for tag field in filename\&. .IP "-N\fI nflows\fP" 10 Split after processing \fInflows\fP\&. .IP "-o\fI outfile_basename\fP" 10 The basename of the resulting files\&. .IP "-T\fI nsecond\fP" 10 Split after processing an interval of \fInseconds\fP flows\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "EXAMPLES" .PP Create 1 minute flow files from the flow archive in \fB/flows/krc4\fP\&. Store the results in \fB/flows/krc4\&.split\fP .PP \fBflow-cat /flows/krc4 | flow-split -T60 -o /flows/krc4\&.split/1min\fP\&. .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sun 09 Jun 2002, 23:21 flow-tools-0.68/docs/flow-split.html0000644000076600007660000000662307552463661013214 flow-split

flow-split

Name

flow-split -- Split flow files into smaller files.

Synopsis

flow-split [-gGhn] [-b big|little] [-C comment] [-d debug_level] [-N nflows] [-o outfile_basename] [-T nseconds] [-z z_level]

DESCRIPTION

The flow-split utility will split a flow file into smaller files based on the the number of flows or the ammount of time that has passed.

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-g

Split on source tag.

-G

Split on destination tag.

-h

Display help.

-n

Use symbols for tag field in filename.

-N nflows

Split after processing nflows.

-o outfile_basename

The basename of the resulting files.

-T nsecond

Split after processing an interval of nseconds flows.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Create 1 minute flow files from the flow archive in /flows/krc4. Store the results in /flows/krc4.split

flow-cat /flows/krc4 | flow-split -T60 -o /flows/krc4.split/1min.

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-split.sgml0000644000076600007660000000672507501015456013202 flow-split 1 flow-split Split flow files into smaller files. flow-split -gGhn -b big|little -C comment -d debug_level -N nflows -o outfile_basename -T nseconds -z z_level DESCRIPTION The flow-split utility will split a flow file into smaller files based on the the number of flows or the ammount of time that has passed. OPTIONS -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -g Split on source tag. -G Split on destination tag. -h Display help. -n Use symbols for tag field in filename. -N nflows Split after processing nflows. -o outfile_basename The basename of the resulting files. -T nsecond Split after processing an interval of nseconds flows. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Create 1 minute flow files from the flow archive in /flows/krc4. Store the results in /flows/krc4.split flow-cat /flows/krc4 | flow-split -T60 -o /flows/krc4.split/1min. BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-stat.10000644000076600007660000001140007552463661012215 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-stat\fP" "1" .SH "NAME" \fBflow-stat\fP \(em Generate reports with flow data\&. .SH "SYNOPSIS" .PP \fBflow-stat\fP [-hnpPw] [-d\fI debug_level\fP] [-f\fI format\fP] [-S\fI sort_field\fP] [-s\fI sort_field\fP] [-t\fI tally_lines\fP] [-T\fI title\fP] .SH "DESCRIPTION" .PP The \fBflow-stat\fP utility generates usage reports for flow data sets by IP address, IP address pairs, ports, packets, bytes, interfaces, next hops, autonomous systems, ToS bits, exporters, and tags\&. .SH "OPTIONS" .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-f\fI format\fP" 10 .PP .nf Report format\&. Choose from the following: 0 Overall Summary 1 Average packet size distribution 2 Packets per flow distribution 3 Octets per flow distribution 4 Bandwidth per flow distribution 5 UDP/TCP destination port 6 UDP/TCP source port 7 UDP/TCP port 8 Destination IP 9 Source IP 10 Source/Destination IP 11 Source or Destination IP 12 IP protocol 13 octets for flow duration plot data 14 packets for flow duration plot data 15 short summary 16 IP Next Hop 17 Input interface 18 Output interface 19 Source AS 20 Destination AS 21 Source/Destination AS 22 IP ToS 23 Input/Output Interface 24 Source Prefix 25 Destination Prefix 26 Source/Destination Prefix 27 Exporter IP 28 Engine Id 29 Engine Type 30 Source Tag 31 Destination Tag 32 Source/Destination Tag .fi .IP "-h" 10 Display help\&. .IP "-n" 10 Use symbolic names where appropriate\&. .IP "-p" 10 Display header information\&. .IP "-P" 10 Report as percent total\&. .IP "-s\fI sort_field\fP" 10 Sort ascending on field \fIsort_field\fP\&. .IP "-S\fI sort_field\fP" 10 Sort descending on field \fIsort_field\fP\&. .IP "-t\fI tally_lines\fP" 10 Tally totals every \fItally_lines\fPlines\&. .IP "-T\fI title\fP" 10 Set report title to \fItitle\fP\&. .IP "-w" 10 Wide output\&. .SH "EXAMPLES" .PP Provide a report on top source/destination IP pairs sorted by octets, report in percent total form for the flows in \fB/flows/krc4\fP\&. Use the preload option to flow-cat to preserve meta information and display it with flow-stat\&. .PP \fBflow-cat -p /flows/krc4 | flow-stat -f10 -P -p -S4\fP .SH "EXAMPLES" .PP Many times a campus network will have a single border router which has one interface pointing to the internal side and many interfaces pointing to other providers\&. These interfaces each have a unique numerical id known in SNMP terms as an ifIndex\&. The ifIndex to interface name mappings can be determined by using a tool such as \fBsnmpwalk\fP or using show commands in recent versions of IOS with the \&'show snmp mib ifmib ifindex\&' or JunOS \&'show interfaces\&'\&. Once the ifIndex for each interface is known flow-filter can be combined with flow-stat to provide reports such as inbound vs outbound top src/destination IP addresses\&. Provide a top source IP address report by outbound traffic, ie the top senders of traffic on the campus network\&. Assume the ifIndex of the campus interface is 5\&. .PP flow-cat -p /flows/krc4 | flow-filter -i5 | flow-stat -f9 -P -p -S3 .SH "EXAMPLES" .PP Provide a top destination IP address report by outbound traffic, ie the top sinks of traffic on the campus network\&. Assume the ifIndex of the campus interface is 5\&. .PP flow-cat -p /flows/krc4 | flow-filter -I5 | flow-stat -f8 -P -p -S3 .SH "EXAMPLES" .PP Provide a top source/destination AS report\&. Use symbolic names\&. .PP flow-cat -p /flows/krc4 | flow-stat -f20 -n -P -p -S4 .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-stat.html0000644000076600007660000001626507552463661013037 flow-stat

flow-stat

Name

flow-stat -- Generate reports with flow data.

Synopsis

flow-stat [-hnpPw] [-d debug_level] [-f format] [-S sort_field] [-s sort_field] [-t tally_lines] [-T title]

DESCRIPTION

The flow-stat utility generates usage reports for flow data sets by IP address, IP address pairs, ports, packets, bytes, interfaces, next hops, autonomous systems, ToS bits, exporters, and tags.

OPTIONS

-d debug_level

Enable debugging.

-f format

Report format.  Choose from the following:

    0  Overall Summary
    1  Average packet size distribution
    2  Packets per flow distribution
    3  Octets per flow distribution
    4  Bandwidth per flow distribution
    5  UDP/TCP destination port
    6  UDP/TCP source port
    7  UDP/TCP port
    8  Destination IP
    9  Source IP
    10 Source/Destination IP
    11 Source or Destination IP
    12 IP protocol
    13 octets for flow duration plot data
    14 packets for flow duration plot data
    15 short summary
    16 IP Next Hop
    17 Input interface
    18 Output interface
    19 Source AS
    20 Destination AS
    21 Source/Destination AS
    22 IP ToS
    23 Input/Output Interface
    24 Source Prefix
    25 Destination Prefix
    26 Source/Destination Prefix
    27 Exporter IP
    28 Engine Id
    29 Engine Type
    30 Source Tag
    31 Destination Tag
    32 Source/Destination Tag

-h

Display help.

-n

Use symbolic names where appropriate.

-p

Display header information.

-P

Report as percent total.

-s sort_field

Sort ascending on field sort_field.

-S sort_field

Sort descending on field sort_field.

-t tally_lines

Tally totals every tally_lineslines.

-T title

Set report title to title.

-w

Wide output.

EXAMPLES

Provide a report on top source/destination IP pairs sorted by octets, report in percent total form for the flows in /flows/krc4. Use the preload option to flow-cat to preserve meta information and display it with flow-stat.

flow-cat -p /flows/krc4 | flow-stat -f10 -P -p -S4

EXAMPLES

Many times a campus network will have a single border router which has one interface pointing to the internal side and many interfaces pointing to other providers. These interfaces each have a unique numerical id known in SNMP terms as an ifIndex. The ifIndex to interface name mappings can be determined by using a tool such as snmpwalk or using show commands in recent versions of IOS with the 'show snmp mib ifmib ifindex' or JunOS 'show interfaces'. Once the ifIndex for each interface is known flow-filter can be combined with flow-stat to provide reports such as inbound vs outbound top src/destination IP addresses. Provide a top source IP address report by outbound traffic, ie the top senders of traffic on the campus network. Assume the ifIndex of the campus interface is 5.

flow-cat -p /flows/krc4 | flow-filter -i5 | flow-stat -f9 -P -p -S3

EXAMPLES

Provide a top destination IP address report by outbound traffic, ie the top sinks of traffic on the campus network. Assume the ifIndex of the campus interface is 5.

flow-cat -p /flows/krc4 | flow-filter -I5 | flow-stat -f8 -P -p -S3

EXAMPLES

Provide a top source/destination AS report. Use symbolic names.

flow-cat -p /flows/krc4 | flow-stat -f20 -n -P -p -S4

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-stat.sgml0000644000076600007660000001354207455334366013031 flow-stat 1 flow-stat Generate reports with flow data. flow-stat -hnpPw -d debug_level -f format -S sort_field -s sort_field -t tally_lines -T title DESCRIPTION The flow-stat utility generates usage reports for flow data sets by IP address, IP address pairs, ports, packets, bytes, interfaces, next hops, autonomous systems, ToS bits, exporters, and tags. OPTIONS -d debug_level Enable debugging. -f format Report format. Choose from the following: 0 Overall Summary 1 Average packet size distribution 2 Packets per flow distribution 3 Octets per flow distribution 4 Bandwidth per flow distribution 5 UDP/TCP destination port 6 UDP/TCP source port 7 UDP/TCP port 8 Destination IP 9 Source IP 10 Source/Destination IP 11 Source or Destination IP 12 IP protocol 13 octets for flow duration plot data 14 packets for flow duration plot data 15 short summary 16 IP Next Hop 17 Input interface 18 Output interface 19 Source AS 20 Destination AS 21 Source/Destination AS 22 IP ToS 23 Input/Output Interface 24 Source Prefix 25 Destination Prefix 26 Source/Destination Prefix 27 Exporter IP 28 Engine Id 29 Engine Type 30 Source Tag 31 Destination Tag 32 Source/Destination Tag -h Display help. -n Use symbolic names where appropriate. -p Display header information. -P Report as percent total. -s sort_field Sort ascending on field sort_field. -S sort_field Sort descending on field sort_field. -t tally_lines Tally totals every tally_lineslines. -T title Set report title to title. -w Wide output. EXAMPLES Provide a report on top source/destination IP pairs sorted by octets, report in percent total form for the flows in /flows/krc4. Use the preload option to flow-cat to preserve meta information and display it with flow-stat. flow-cat -p /flows/krc4 | flow-stat -f10 -P -p -S4 EXAMPLES Many times a campus network will have a single border router which has one interface pointing to the internal side and many interfaces pointing to other providers. These interfaces each have a unique numerical id known in SNMP terms as an ifIndex. The ifIndex to interface name mappings can be determined by using a tool such as snmpwalk or using show commands in recent versions of IOS with the 'show snmp mib ifmib ifindex' or JunOS 'show interfaces'. Once the ifIndex for each interface is known flow-filter can be combined with flow-stat to provide reports such as inbound vs outbound top src/destination IP addresses. Provide a top source IP address report by outbound traffic, ie the top senders of traffic on the campus network. Assume the ifIndex of the campus interface is 5. flow-cat -p /flows/krc4 | flow-filter -i5 | flow-stat -f9 -P -p -S3 EXAMPLES Provide a top destination IP address report by outbound traffic, ie the top sinks of traffic on the campus network. Assume the ifIndex of the campus interface is 5. flow-cat -p /flows/krc4 | flow-filter -I5 | flow-stat -f8 -P -p -S3 EXAMPLES Provide a top source/destination AS report. Use symbolic names. flow-cat -p /flows/krc4 | flow-stat -f20 -n -P -p -S4 BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-tag.1.in0000644000076600007660000003024107775360776012440 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-tag\fP" "1" .SH "NAME" \fBflow-tag\fP \(em Apply tags to flow files\&. .SH "SYNOPSIS" .PP \fBflow-tag\fP [-hk] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-t\fI tag_fname\fP] [-T\fI tag_definition\fP] [-v\fI variable binding\fP] .SH "DESCRIPTION" .PP The \fBflow-tag\fP utility is used to add or modify source and destination tags in flow records\&. Tags are 32 bit identifiers derived from rules and fields in a flow record\&. Tags can be used to group flows with common prefixes, autonomous systems, next hops, exporter id and/or input/output interface\&. \fBflow-stat\fP can be used with tagged flows to produce group based reports\&. For example, all outbound traffic for a customer where the customer is defined by a list of IP prefixes\&. .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-h" 10 Display help\&. .IP "-k" 10 Keep time from input\&. .IP "-t\fI tag_fname\fP" 10 Load tags from \fBtag_name\fP\&. Defaults to \fB@localstatedir@/cfg/tag\fP .IP "-T\fI active_def\fP|" 10 Use \fIactive_def\fP as the active tag definition(s)\&. .IP "-v\fI variable binding\fP" 10 Set a variable FOO=bar\&. .PP .PP The configuration file is a collection of actions and definitions\&. An action is triggered by a definition and a definition is invoked only if listed with the \fI-T\fP flag\&. Lines begining with # are treated as comments and ignored\&. .PP Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option\&. .PP .PP .nf tag-action command Description/Example ---------------------------------------------------------------------- tag-action Begin tag-action section tag-action foo type Configure the type of action, one of source-prefix, destination-prefix, prefix, source-as, destination-as, as, next-hop, tcp-source-port, tcp-destination-port, tcp-port, udp-source-port, udp-destination-port, udp-port, tos, exporter, source-ip-address, destination-ip-address, ip-address, input-interface, output-interface, interface, any\&. type src-prefix match Match criteria\&. The match condition depends on the type\&. Following the match condition is one of set-destination, set-source, or-destination, or-source to set or logically or a value to the source or destination tag\&. match 128\&.146/16 set-destination 0x010001 Multiple actions may match and set tags on the same flow\&. Note that listing many actions will cause tags to be applied in O(actions) time\&. The actions try to run in O(1) time\&. For example if 10 prefixes are listed in a single action it will take about the same CPU as if 100 prefixes are used\&. Listing 100 actions will require 100 times the CPU as 1 action\&. tag-action types Description ---------------------------------------------------------------------- source-prefix Source Prefix destination-prefix Destination Prefix prefix Source or Destination Prefix source-as Source AS destination-as Destination AS as Source or Destination AS next-hop IP Next Hop tcp-source-port TCP Source Port tcp-destination-port TCP Destination Port tcp-port TCP Source or Destination Port udp-source-port UDP Source Port udp-destination-port UDP Destination Port udp-port UDP Source or Destination Port tos Type of Service exporter Exporter IP Address source-ip-address Source IP Address destination-ip-address Destination IP Address ip-address Source or Destination IP Address input-interface Input Interface output-interface Output Interface interface Input or Output Interface any Match any flows tag-action matches Description ---------------------------------------------------------------------- set-destination Set the destination tag, replacing any previous tag\&. set-source Set the source tag, replacing any previous tag\&. or-destination Logically or this value to the existing destination tag or-source Logically or this value to the existing source tag .fi .PP A definition lists a set of actions which are evaluated if the filter criteria is met\&. Each definition is built with terms\&. A term has its action(s) evaluated if the filter is passed\&. .PP .nf definition command Description/Example ----------------------------------------------------------------------- tag-definition Begin tag-defintion secrion tag-definition bar term Begin a list of actions to be evaluated that match the filter rule\&. term input-filter List of input ifIndexes the flow must match\&. input-filter 1,2,3,4 output-filter List of output ifIndexes the flow must match\&. output-filter 1,2,3,4 exporter IP address of exporter the flow must match\&. exporter 1\&.2\&.3\&.4 action Name of action to evaluate\&. Actions are evaluated in the order they appear in a definition\&. action foo .fi .PP .SH "EXAMPLES" .PP The meaning of a tag is user defined\&. The following example uses 16 bits of a tag as a customer ID and 4 bits as a customer type\&. \fBflow-xlate\fP can be used to apply a mask to these fields\&. .PP .nf \f(CW# file: gigapop-tags # tag format # # 0 7 15 23 31 # 0000 0000 0000 0000 0000 0000 0000 0000 (32 bits) # RRRRRRRRRRRRRR TTTT NNNNNNNNNNNNNNNNNNN # | | | Site name # | | Site type # | Reserved # # # SITE_NAME_MASK = 0x0000FFFF # SITE_TYPE_MASK = 0x00FF0000 # # ID Name #--------------------------------- # 0x0001 OSU # 0x0002 CWRU # 0x0003 BGSU # \&.\&.\&. etc # 0x0019 MULTICAST # # ID Type #------------------------ # 0x01 Participant # 0x02 SEGP # 0x03 Sponsored-Participant # 0x04 Gigapop # 0x05 MULTICAST tag-action OHIO-GIGAPOP_DST type destination-prefix # OSU match 128\&.146/16 set-destination 0x010001 match 164\&.107/16 set-destination 0x010001 match 140\&.254/16 set-destination 0x010001 match 192\&.153\&.26/24 set-destination 0x010001 # CWRU match 129\&.22/16 set-destination 0x010002 match 192\&.5\&.110/24 set-destination 0x010002 # BGSU match 129\&.1/16 set-destination 0x010003 # \&.\&.\&.etc # MULTICAST match 224/4 set-destination 0x050019 tag-action OHIO-GIGAPOP_SRC type source-prefix # OSU match 128\&.146/16 set-source 0x010001 match 164\&.107/16 set-source 0x010001 match 140\&.254/16 set-source 0x010001 match 192\&.153\&.26/24 set-source 0x010001 # CWRU match 129\&.22/16 set-source 0x010002 match 192\&.5\&.110/24 set-source 0x010002 # BGSU match 129\&.1/16 set-source 0x010003 # \&.\&.\&.etc tag-action OTHER_DST type destination-prefix match 0/0 set-destination 0x0 tag-action OTHER_SRC type source-prefix match 0/0 set-source 0x0 tag-definition OHIO-GIGAPOP term # Abilene interface input-filter 25 # clear tag first -- it defaults to 0, so this may not be necessary\&. action OTHER_DST action OHIO-GIGAPOP_DST term # Abilene interface output-filter 25 # clear tag first -- it defaults to 0, so this may not be necessary\&. action OTHER_SRC action OHIO-GIGAPOP_SRC \fR .fi .PP .PP First populate \fB@localstatedir@/sym/tag\fP for \fBflow-stat\fP to use as symbols\&. .PP .nf \f(CW0x0001 OSU 0x0002 CWRU 0x0003 BGSU 0x0019 MULTICAST 0x010000 PART 0x020000 SEGP 0x030000 SPART 0x040000 GIGAPOP 0x050000 MULTICAST\fR .fi .PP .PP To generate a report for outgoing traffic to Abilene based on customer ID: .PP .nf \f(CWflow-cat \fBflows\fP | flow-filter -I25 | flow-tag -t gigapop-tags -TOHIO-GIGAPOP | flow-xlate -t0x0000FFFF | flow-stat -n -f30 -S2\fR .fi .PP .PP .nf # --- ---- ---- Report Information --- --- --- # # Fields: Total # Symbols: Enabled # Sorting: Descending Field 2 # Name: Source Tag # # Args: \&.\&./flow-stat -n -f30 -S2 # # # Src Tag flows octets packets # OSU 4942230 181326237007 302476793 CWRU 874883 54358312807 70589318 BGSU 1008797 7600209852 22060870 .fi .PP To generate a report for inbound traffic from Abilene based on customer type: .PP .nf \f(CWflow-cat \fBflows\fP | flow-filter -i25 | flow-tag -t gigapop-tags -TOHIO-GIGAPOP | flow-xlate -T0xFF0000 | flow-stat -n -f31 -S2\fR .fi .PP .PP .nf # --- ---- ---- Report Information --- --- --- # # Fields: Total # Symbols: Enabled # Sorting: Descending Field 2 # Name: Destination Tag # # Args: \&.\&./flow-stat -n -f31 -S2 # # # Dst Tag flows octets packets # PART 15923156 663289954569 981163979 SEGP 4995795 135525076170 196534917 MULTICAST 45171 49866825003 137798118 GIGAPOP 942209 26422533266 23199961 SPART 73998 5170323905 7597985 .fi .SH "FILES" .PP Configuration files: Symbols - \fB@localstatedir@/sym/*\fP\&. Tag - \fB@localstatedir@/cfg/tag\&.cfg\fP\&. .SH "BUGS" .PP None known\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Fri 02 Jan 2004, 16:26 flow-tools-0.68/docs/flow-tag.html.in0000644000076600007660000003207407775361010013230 flow-tag

flow-tag

Name

flow-tag -- Apply tags to flow files.

Synopsis

flow-tag [-hk] [-b big|little] [-C comment] [-d debug_level] [-t tag_fname] [-T tag_definition] [-v variable binding]

DESCRIPTION

The flow-tag utility is used to add or modify source and destination tags in flow records. Tags are 32 bit identifiers derived from rules and fields in a flow record. Tags can be used to group flows with common prefixes, autonomous systems, next hops, exporter id and/or input/output interface. flow-stat can be used with tagged flows to produce group based reports. For example, all outbound traffic for a customer where the customer is defined by a list of IP prefixes.

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-h

Display help.

-k

Keep time from input.

-t tag_fname

Load tags from tag_name. Defaults to @localstatedir@/cfg/tag

-T active_def|

Use active_def as the active tag definition(s).

-v variable binding

Set a variable FOO=bar.

The configuration file is a collection of actions and definitions. An action is triggered by a definition and a definition is invoked only if listed with the -T flag. Lines begining with # are treated as comments and ignored.

Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option.

tag-action command            Description/Example
----------------------------------------------------------------------
tag-action                    Begin tag-action section
                              tag-action foo

type                          Configure the type of action, one of
                              source-prefix, destination-prefix, prefix,
                              source-as, destination-as, as, next-hop,
                              tcp-source-port, tcp-destination-port,
                              tcp-port, udp-source-port,
                              udp-destination-port, udp-port,
                              tos, exporter, source-ip-address,
                              destination-ip-address, ip-address,
                              input-interface, output-interface,
                              interface, any.
                              type src-prefix

match                         Match criteria.  The match condition
                              depends on the type.  Following the
                              match condition is one of
                              set-destination, set-source,
                              or-destination, or-source to
                              set or logically or a value to the
                              source or destination tag.
                              match 128.146/16 set-destination 0x010001

Multiple actions may match and set tags on the same flow.  Note that
listing many actions will cause tags to be applied in O(actions) time.
The actions try to run in O(1) time.  For example if 10 prefixes are
listed in a single action it will take about the same CPU as if 100
prefixes are used.  Listing 100 actions will require 100 times the
CPU as 1 action.


tag-action types                    Description
----------------------------------------------------------------------

source-prefix                       Source Prefix

destination-prefix                  Destination Prefix

prefix                              Source or Destination Prefix

source-as                           Source AS

destination-as                      Destination AS

as                                  Source or Destination AS

next-hop                            IP Next Hop

tcp-source-port                     TCP Source Port

tcp-destination-port                TCP Destination Port

tcp-port                            TCP Source or Destination Port

udp-source-port                     UDP Source Port

udp-destination-port                UDP Destination Port

udp-port                            UDP Source or Destination Port

tos                                 Type of Service

exporter                            Exporter IP Address

source-ip-address                   Source IP Address

destination-ip-address              Destination IP Address

ip-address                          Source or Destination IP Address

input-interface                     Input Interface

output-interface                    Output Interface

interface                           Input or Output Interface

any                                 Match any flows


tag-action matches                  Description
----------------------------------------------------------------------

set-destination                     Set the destination tag, replacing
                                    any previous tag.

set-source                          Set the source tag, replacing any
                                    previous tag.

or-destination                      Logically or this value to the
                                    existing destination tag

or-source                           Logically or this value to the
                                    existing source tag


A definition lists a set of actions which are evaluated if the filter criteria is met. Each definition is built with terms. A term has its action(s) evaluated if the filter is passed.

definition command                  Description/Example
-----------------------------------------------------------------------
tag-definition                      Begin tag-defintion secrion
                                    tag-definition bar

term                                Begin a list of actions to be
                                    evaluated that match the filter
                                    rule.
                                    term

input-filter                        List of input ifIndexes the flow
                                    must match.
                                    input-filter 1,2,3,4

output-filter                       List of output ifIndexes the flow
                                    must match.
                                    output-filter 1,2,3,4

exporter                            IP address of exporter the flow must
                                    match.
                                    exporter 1.2.3.4

action                              Name of action to evaluate.  Actions
                                    are evaluated in the order they
                                    appear in a definition.
                                    action foo

EXAMPLES

The meaning of a tag is user defined. The following example uses 16 bits of a tag as a customer ID and 4 bits as a customer type. flow-xlate can be used to apply a mask to these fields.

# file: gigapop-tags
# tag format
# 
# 0       7         15        23        31
# 0000 0000 0000 0000 0000 0000 0000 0000 (32 bits)
# RRRRRRRRRRRRRR TTTT NNNNNNNNNNNNNNNNNNN
#              |    |                   | Site name
#              |    | Site type
#              | Reserved
#
#
# SITE_NAME_MASK = 0x0000FFFF  
# SITE_TYPE_MASK = 0x00FF0000
#
# ID             Name
#---------------------------------
# 0x0001         OSU
# 0x0002         CWRU
# 0x0003         BGSU   
# ... etc
# 0x0019         MULTICAST
#
# ID             Type  
#------------------------
# 0x01         Participant
# 0x02         SEGP
# 0x03         Sponsored-Participant
# 0x04         Gigapop
# 0x05         MULTICAST

tag-action OHIO-GIGAPOP_DST
 type destination-prefix
# OSU
 match 128.146/16 set-destination     0x010001
 match 164.107/16 set-destination     0x010001
 match 140.254/16 set-destination     0x010001
 match 192.153.26/24 set-destination  0x010001
# CWRU
 match 129.22/16 set-destination      0x010002
 match 192.5.110/24 set-destination   0x010002
# BGSU
 match 129.1/16 set-destination       0x010003
# ...etc
# MULTICAST
 match 224/4 set-destination 0x050019

tag-action OHIO-GIGAPOP_SRC
 type source-prefix
# OSU
 match 128.146/16 set-source     0x010001
 match 164.107/16 set-source     0x010001
 match 140.254/16 set-source     0x010001
 match 192.153.26/24 set-source  0x010001
# CWRU
 match 129.22/16 set-source      0x010002
 match 192.5.110/24 set-source   0x010002
# BGSU
 match 129.1/16 set-source       0x010003
# ...etc

tag-action OTHER_DST
 type destination-prefix
 match 0/0 set-destination 0x0
 
tag-action OTHER_SRC
 type source-prefix
 match 0/0 set-source 0x0

tag-definition OHIO-GIGAPOP
 term
# Abilene interface
 input-filter 25
# clear tag first -- it defaults to 0, so this may not be necessary.
 action OTHER_DST
 action OHIO-GIGAPOP_DST
 term
# Abilene interface
 output-filter 25
# clear tag first -- it defaults to 0, so this may not be necessary.
 action OTHER_SRC
 action OHIO-GIGAPOP_SRC

First populate @localstatedir@/sym/tag for flow-stat to use as symbols.

0x0001 OSU
0x0002 CWRU
0x0003 BGSU
0x0019 MULTICAST
0x010000 PART
0x020000 SEGP
0x030000 SPART
0x040000 GIGAPOP
0x050000 MULTICAST

To generate a report for outgoing traffic to Abilene based on customer ID:

flow-cat flows | flow-filter -I25 | flow-tag -t gigapop-tags -TOHIO-GIGAPOP | flow-xlate -t0x0000FFFF | flow-stat -n -f30 -S2
#  --- ---- ---- Report Information --- --- ---
#
# Fields:    Total
# Symbols:   Enabled
# Sorting:   Descending Field 2
# Name:      Source Tag
#
# Args:      ../flow-stat -n -f30 -S2 
#
#
# Src Tag   flows                 octets                packets
#
OSU         4942230               181326237007          302476793
CWRU        874883                54358312807           70589318
BGSU        1008797               7600209852            22060870

To generate a report for inbound traffic from Abilene based on customer type:

flow-cat flows | flow-filter -i25 | flow-tag -t gigapop-tags -TOHIO-GIGAPOP | flow-xlate -T0xFF0000 | flow-stat -n -f31 -S2
#  --- ---- ---- Report Information --- --- ---
#
# Fields:    Total
# Symbols:   Enabled
# Sorting:   Descending Field 2
# Name:      Destination Tag
#
# Args:      ../flow-stat -n -f31 -S2 
#
#
# Dst Tag   flows                 octets                packets
#
PART        15923156              663289954569          981163979
SEGP        4995795               135525076170          196534917
MULTICAST   45171                 49866825003           137798118
GIGAPOP     942209                26422533266           23199961
SPART       73998                 5170323905            7597985

FILES

Configuration files: Symbols - @localstatedir@/sym/*. Tag - @localstatedir@/cfg/tag.cfg.

BUGS

None known.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-tag.sgml0000644000076600007660000003172607775360727012642 flow-tag 1 flow-tag Apply tags to flow files. flow-tag -hk -b big|little -C comment -d debug_level -t tag_fname -T tag_definition -v variable binding DESCRIPTION The flow-tag utility is used to add or modify source and destination tags in flow records. Tags are 32 bit identifiers derived from rules and fields in a flow record. Tags can be used to group flows with common prefixes, autonomous systems, next hops, exporter id and/or input/output interface. flow-stat can be used with tagged flows to produce group based reports. For example, all outbound traffic for a customer where the customer is defined by a list of IP prefixes. OPTIONS -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -h Display help. -k Keep time from input. -t tag_fname Load tags from tag_name. Defaults to @localstatedir@/cfg/tag -T active_def| Use active_def as the active tag definition(s). -v variable binding Set a variable FOO=bar. The configuration file is a collection of actions and definitions. An action is triggered by a definition and a definition is invoked only if listed with the -T flag. Lines begining with # are treated as comments and ignored. Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option. tag-action command Description/Example ---------------------------------------------------------------------- tag-action Begin tag-action section tag-action foo type Configure the type of action, one of source-prefix, destination-prefix, prefix, source-as, destination-as, as, next-hop, tcp-source-port, tcp-destination-port, tcp-port, udp-source-port, udp-destination-port, udp-port, tos, exporter, source-ip-address, destination-ip-address, ip-address, input-interface, output-interface, interface, any. type src-prefix match Match criteria. The match condition depends on the type. Following the match condition is one of set-destination, set-source, or-destination, or-source to set or logically or a value to the source or destination tag. match 128.146/16 set-destination 0x010001 Multiple actions may match and set tags on the same flow. Note that listing many actions will cause tags to be applied in O(actions) time. The actions try to run in O(1) time. For example if 10 prefixes are listed in a single action it will take about the same CPU as if 100 prefixes are used. Listing 100 actions will require 100 times the CPU as 1 action. tag-action types Description ---------------------------------------------------------------------- source-prefix Source Prefix destination-prefix Destination Prefix prefix Source or Destination Prefix source-as Source AS destination-as Destination AS as Source or Destination AS next-hop IP Next Hop tcp-source-port TCP Source Port tcp-destination-port TCP Destination Port tcp-port TCP Source or Destination Port udp-source-port UDP Source Port udp-destination-port UDP Destination Port udp-port UDP Source or Destination Port tos Type of Service exporter Exporter IP Address source-ip-address Source IP Address destination-ip-address Destination IP Address ip-address Source or Destination IP Address input-interface Input Interface output-interface Output Interface interface Input or Output Interface any Match any flows tag-action matches Description ---------------------------------------------------------------------- set-destination Set the destination tag, replacing any previous tag. set-source Set the source tag, replacing any previous tag. or-destination Logically or this value to the existing destination tag or-source Logically or this value to the existing source tag A definition lists a set of actions which are evaluated if the filter criteria is met. Each definition is built with terms. A term has its action(s) evaluated if the filter is passed. definition command Description/Example ----------------------------------------------------------------------- tag-definition Begin tag-defintion secrion tag-definition bar term Begin a list of actions to be evaluated that match the filter rule. term input-filter List of input ifIndexes the flow must match. input-filter 1,2,3,4 output-filter List of output ifIndexes the flow must match. output-filter 1,2,3,4 exporter IP address of exporter the flow must match. exporter 1.2.3.4 action Name of action to evaluate. Actions are evaluated in the order they appear in a definition. action foo EXAMPLES The meaning of a tag is user defined. The following example uses 16 bits of a tag as a customer ID and 4 bits as a customer type. flow-xlate can be used to apply a mask to these fields. # file: gigapop-tags # tag format # # 0 7 15 23 31 # 0000 0000 0000 0000 0000 0000 0000 0000 (32 bits) # RRRRRRRRRRRRRR TTTT NNNNNNNNNNNNNNNNNNN # | | | Site name # | | Site type # | Reserved # # # SITE_NAME_MASK = 0x0000FFFF # SITE_TYPE_MASK = 0x00FF0000 # # ID Name #--------------------------------- # 0x0001 OSU # 0x0002 CWRU # 0x0003 BGSU # ... etc # 0x0019 MULTICAST # # ID Type #------------------------ # 0x01 Participant # 0x02 SEGP # 0x03 Sponsored-Participant # 0x04 Gigapop # 0x05 MULTICAST tag-action OHIO-GIGAPOP_DST type destination-prefix # OSU match 128.146/16 set-destination 0x010001 match 164.107/16 set-destination 0x010001 match 140.254/16 set-destination 0x010001 match 192.153.26/24 set-destination 0x010001 # CWRU match 129.22/16 set-destination 0x010002 match 192.5.110/24 set-destination 0x010002 # BGSU match 129.1/16 set-destination 0x010003 # ...etc # MULTICAST match 224/4 set-destination 0x050019 tag-action OHIO-GIGAPOP_SRC type source-prefix # OSU match 128.146/16 set-source 0x010001 match 164.107/16 set-source 0x010001 match 140.254/16 set-source 0x010001 match 192.153.26/24 set-source 0x010001 # CWRU match 129.22/16 set-source 0x010002 match 192.5.110/24 set-source 0x010002 # BGSU match 129.1/16 set-source 0x010003 # ...etc tag-action OTHER_DST type destination-prefix match 0/0 set-destination 0x0 tag-action OTHER_SRC type source-prefix match 0/0 set-source 0x0 tag-definition OHIO-GIGAPOP term # Abilene interface input-filter 25 # clear tag first -- it defaults to 0, so this may not be necessary. action OTHER_DST action OHIO-GIGAPOP_DST term # Abilene interface output-filter 25 # clear tag first -- it defaults to 0, so this may not be necessary. action OTHER_SRC action OHIO-GIGAPOP_SRC First populate @localstatedir@/sym/tag for flow-stat to use as symbols. 0x0001 OSU 0x0002 CWRU 0x0003 BGSU 0x0019 MULTICAST 0x010000 PART 0x020000 SEGP 0x030000 SPART 0x040000 GIGAPOP 0x050000 MULTICAST To generate a report for outgoing traffic to Abilene based on customer ID: flow-cat flows | flow-filter -I25 | flow-tag -t gigapop-tags -TOHIO-GIGAPOP | flow-xlate -t0x0000FFFF | flow-stat -n -f30 -S2 # --- ---- ---- Report Information --- --- --- # # Fields: Total # Symbols: Enabled # Sorting: Descending Field 2 # Name: Source Tag # # Args: ../flow-stat -n -f30 -S2 # # # Src Tag flows octets packets # OSU 4942230 181326237007 302476793 CWRU 874883 54358312807 70589318 BGSU 1008797 7600209852 22060870 To generate a report for inbound traffic from Abilene based on customer type: flow-cat flows | flow-filter -i25 | flow-tag -t gigapop-tags -TOHIO-GIGAPOP | flow-xlate -T0xFF0000 | flow-stat -n -f31 -S2 # --- ---- ---- Report Information --- --- --- # # Fields: Total # Symbols: Enabled # Sorting: Descending Field 2 # Name: Destination Tag # # Args: ../flow-stat -n -f31 -S2 # # # Dst Tag flows octets packets # PART 15923156 663289954569 981163979 SEGP 4995795 135525076170 196534917 MULTICAST 45171 49866825003 137798118 GIGAPOP 942209 26422533266 23199961 SPART 73998 5170323905 7597985 FILES Configuration files: Symbols - @localstatedir@/sym/*. Tag - @localstatedir@/cfg/tag.cfg. BUGS None known. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-tools-examples.10000644000076600007660000002217507552463661014231 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-tools-examples\fP" "1" .SH "NAME" \fBflow-tools-examples\fP \(em Example usage of flow-tools\&. .SH "EXAMPLE - Configuring Cisco IOS Router" .PP NetFlow is configured on each input interface, then global commands are used to specify the export destination\&. To ensure a consistant source address address Loopback0 is configured as the export source\&. .PP .nf \f(CWip cef distributed ip flow-export version 5 origin-as ip flow-export destination 10\&.0\&.0\&.100 5004 ip flow-export source Loopback0 interface Loopback0 ip address 10\&.1\&.1\&.1 255\&.255\&.255\&.255 interface FastEthernet0/1/0 ip address 10\&.0\&.0\&.1 255\&.255\&.255\&.0 no ip directed-broadcast ip route-cache flow ip route-cache distributed \fR .fi .PP Many other options exist such as aggregated NetFlow and sampled NetFlow which are detailed at \fI (link to URL http://www.cisco.com) \fR\&. .SH "EXAMPLE - Configuring Cisco CatIOS Switch" .PP Some Cisco Catalyst switches support a different implementation of NetFlow that is performed on the supervisor\&. With the cache based forwarding model which is implemented in the Catalyst 55xx with Route Switch Module (RSM) and NetFlow Feature Card (NFFC), the RSM processes the first flow and the remaining packets in the flow are forwarded by the Supervisor\&. This is also implemented in the early versions of the 65xx with MSFC\&. The deterministic forwarding model used in the 65xx with MSFC2 do not use NetFlow to determine the forwarding path, the flow cache is only used for statistics as in the current IOS implementations\&. In all of of the above configurations flow exports arrive from both the RSM/MSFC and the Supervisor engines as distinct streams\&. In the worst cast the RSM exports in version 5 and the Supervisor exports in version 7\&. Fortunately flow-capture and flow-receive can sort all this out by processing flows from both sources and converting them to a common export format\&. .PP The router side running IOS is configured identically to the example given above\&. The CatIOS NetFlow Data Export configuration follows: .PP .PP .nf \f(CWset mls flow full set mls nde version 7 set mls nde 10\&.0\&.0\&.1 9800 set mls nde enable\fR .fi .PP .PP When the 65xx is running in Native mode, from a users perspective the switch is only running IOS\&. .PP More detailed examples can be found on Cisco\&'s web site \fI (link to URL http://www.cisco.com) \fR\&. .SH "EXAMPLE - Configuring Juniper Router" .PP Juniper supports flow exports by the routing engine sampling packet headers and aggregating them into flows\&. Packet sampling is done by defining a firewall filter to accept and sample all traffic, applying that rule to the interface, then configuring the sampling forwarding option\&. .PP .nf \f(CWinterfaces { ge-0/3/0 { unit 0 { family inet { filter { input all; output all; } address 10\&.0\&.0\&.1/24; } } } firewall { filter all { term all { then { sample; accept; } } } } forwarding-options { sampling { input { family inet { rate 100; } } output { cflowd 10\&.0\&.0\&.100 { port 9800; version 5; } } } }\fR .fi .PP .PP Other options exist such as aggregated flows which are detailed at \fI (link to URL http://www.juniper.net) \fR\&. .SH "EXAMPLE - Network topology and \fBflow\&.acl\fP" .PP The network topology and flow\&.acl will be used for many of the examples that follow\&. Flows are collected and stored in \fB/flows/R\fP\&. .PP .nf ISP-A ISP-B + + + + IP=10\&.1\&.2\&.1/24 + + IP=10\&.1\&.1\&.1/24 ifIndex=2 + + ifIndex=1 interface=serial1/1 + + interface=serial0/0 ----- | R | Campus Router ----- + + IP=10\&.1\&.4\&.1/24 + + IP=10\&.1\&.3\&.1/24 ifIndex=4 + + ifIndex=3 interface=Ethernet1/1 + + interface=Ethernet0/0 + + Sales Marketing .fi .PP .nf \f(CWip access-list standard sales permit 10\&.1\&.4\&.0 0\&.0\&.0\&.255 ip access-list standard not_sales deny 10\&.1\&.4\&.0 0\&.0\&.0\&.255 ip access-list standard marketing permit 10\&.1\&.3\&.0 0\&.0\&.0\&.255 ip access-list standard not_marketing deny 10\&.1\&.3\&.0 0\&.0\&.0\&.255 ip access-list standard campus permit 10\&.1\&.4\&.0 0\&.0\&.0\&.255 ip access-list standard campus permit 10\&.1\&.3\&.0 0\&.0\&.0\&.255 ip access-list standard not_campus deny 10\&.1\&.4\&.0 0\&.0\&.0\&.255 ip access-list standard not_campus deny 10\&.1\&.3\&.0 0\&.0\&.0\&.255 ip access-list standard evil_hacket permit host 10\&.6\&.6\&.6 ip access-list standard spoofer permit host 10\&.9\&.9\&.9 ip access-list standard multicast 224\&.0\&.0\&.0 15\&.255\&.255\&.255\fR .fi .PP .SH "EXAMPLE - Finding spoofed addresses" .PP A common problem on the Internet is the use of "spoofed" (addresses that are not assigned to an organization) for use in DoS attacks or compromising servers that rely on the source IP address for authentication\&. .PP Display all flow records that originate from the campus and are sent to the Internet but are not using legal addresses\&. .PP \fBflow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-print\fP .PP Summary of the destinations of the internally spoofed addresses sorted by octets\&. .PP \fBflow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f8 -S2\fP .PP Summary of the sources of the internally spoofed addresses sorted by flows\&. .PP \fBflow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f9 -S1\fP .PP Summary of the internally spoofed sources and destination pairs sorted by packets\&. .PP \fBflow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f10 -S4\fP .PP Display all flow records that originate external to the campus that have campus addresses\&. Many times these can be attackers trying to exploit host based authentication mechanisms like unix r* commands\&. Another common source is mobile clients which send packets with their campus addresses before obtaining a valid IP\&. .PP \fBflow-cat /flows/R | flow-filter -Scampus -i1,2 | flow-print\fP .PP Summary of the destinations of the externally spoofed addresses sorted by octets\&. .PP \fBflow-cat /flows/R | flow-filter -Scampus -i1,2 | flow-stat -f8 -S2\fP .SH "EXAMPLE - Locate hosts using or running services" .PP Find all SMTP servers active during the collection period that have established connections to the Internet\&. Summarize sorted by octets\&. .PP \fBflow-cat /flows/R | flow-filter -I1,2 -P25 | flow-stat -f9 -S2\fP .PP Find all outbound NNTP connections to the Internet\&. Summarize with source and destination IP sorted by octets\&. .PP \fBflow-cat /flows/R | flow-filter -I1,2 -P119 | flow-stat -f10 -S3\fP .PP Find all inbound NNTP connections to the Internet\&. Summarize with source and destination IP sorted by octets\&. .PP \fBflow-cat /flows/R | flow-filter -i1,2 -P119 | flow-stat -f10 -S3\fP .SH "EXAMPLE - Multicast usage" .PP Summarize Multicast S,G where sources are on campus\&. .PP \fBflow-cat /flows/R | flow-filter -Dmulticast -I1,2 | flow-stat -f10 -S3\fP .PP Summarize Multicast S,G where sources are off campus\&. .PP \fBflow-cat /flows/R | flow-filter -Dmulticast -i1,2 | flow-stat -f10 -S3\fP .SH "EXAMPLE - Find scanners" .PP Find SMTP scanners with flow-dscan\&. This will also find SMTP clients which try to contact many servers\&. This behavior is characterized by a recent Microsoft worm\&. .PP .PP .nf \fBtouch dscan\&.suppress\&.src dscan\&.suppress\&.dst\fP \fBflow-cat /flows/R | flow-filter -P25 | flow-dscan -b\fP .fi .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Sat 08 Jun 2002, 23:41 flow-tools-0.68/docs/flow-tools-examples.html0000644000076600007660000002400107552463661015023 flow-tools-examples

flow-tools-examples

Name

flow-tools-examples -- Example usage of flow-tools.

EXAMPLE - Configuring Cisco IOS Router

NetFlow is configured on each input interface, then global commands are used to specify the export destination. To ensure a consistant source address address Loopback0 is configured as the export source.

ip cef distributed
ip flow-export version 5 origin-as
ip flow-export destination 10.0.0.100 5004
ip flow-export source Loopback0

interface Loopback0
 ip address 10.1.1.1 255.255.255.255

interface FastEthernet0/1/0 
 ip address 10.0.0.1 255.255.255.0
 no ip directed-broadcast
 ip route-cache flow
 ip route-cache distributed
Many other options exist such as aggregated NetFlow and sampled NetFlow which are detailed at http://www.cisco.com.

EXAMPLE - Configuring Cisco CatIOS Switch

Some Cisco Catalyst switches support a different implementation of NetFlow that is performed on the supervisor. With the cache based forwarding model which is implemented in the Catalyst 55xx with Route Switch Module (RSM) and NetFlow Feature Card (NFFC), the RSM processes the first flow and the remaining packets in the flow are forwarded by the Supervisor. This is also implemented in the early versions of the 65xx with MSFC. The deterministic forwarding model used in the 65xx with MSFC2 do not use NetFlow to determine the forwarding path, the flow cache is only used for statistics as in the current IOS implementations. In all of of the above configurations flow exports arrive from both the RSM/MSFC and the Supervisor engines as distinct streams. In the worst cast the RSM exports in version 5 and the Supervisor exports in version 7. Fortunately flow-capture and flow-receive can sort all this out by processing flows from both sources and converting them to a common export format.

The router side running IOS is configured identically to the example given above. The CatIOS NetFlow Data Export configuration follows:

set mls flow full
set mls nde version 7
set mls nde 10.0.0.1 9800
set mls nde enable

When the 65xx is running in Native mode, from a users perspective the switch is only running IOS.

More detailed examples can be found on Cisco's web site http://www.cisco.com.

EXAMPLE - Configuring Juniper Router

Juniper supports flow exports by the routing engine sampling packet headers and aggregating them into flows. Packet sampling is done by defining a firewall filter to accept and sample all traffic, applying that rule to the interface, then configuring the sampling forwarding option.

interfaces {
    ge-0/3/0 {
        unit 0 {
            family inet {
                filter {
                    input all;
                    output all;
                }
                address 10.0.0.1/24;
            }
        }
    }

firewall {
    filter all {
        term all {
            then {
                sample;
                accept;
            }
        }
    }
}

forwarding-options {
    sampling {
        input {
            family inet {
                rate 100;
            }
        }
        output {
            cflowd 10.0.0.100 {
                port 9800;
                version 5;
            }
        }
    }
}

Other options exist such as aggregated flows which are detailed at http://www.juniper.net.

EXAMPLE - Network topology and flow.acl

The network topology and flow.acl will be used for many of the examples that follow. Flows are collected and stored in /flows/R.


                       ISP-A       ISP-B
                         +           +
                          +         +
            IP=10.1.2.1/24 +       + IP=10.1.1.1/24
                 ifIndex=2  +     +  ifIndex=1
       interface=serial1/1   +   +   interface=serial0/0
                             -----
                             | R | Campus Router
                             -----
                             +   +
           IP=10.1.4.1/24   +     +   IP=10.1.3.1/24
                ifIndex=4  +       +  ifIndex=3
    interface=Ethernet1/1 +         + interface=Ethernet0/0
                         +           +
                       Sales      Marketing
ip access-list standard sales permit 10.1.4.0 0.0.0.255
ip access-list standard not_sales deny 10.1.4.0 0.0.0.255
ip access-list standard marketing permit 10.1.3.0 0.0.0.255
ip access-list standard not_marketing deny 10.1.3.0 0.0.0.255
ip access-list standard campus permit 10.1.4.0 0.0.0.255
ip access-list standard campus permit 10.1.3.0 0.0.0.255
ip access-list standard not_campus deny 10.1.4.0 0.0.0.255
ip access-list standard not_campus deny 10.1.3.0 0.0.0.255
ip access-list standard evil_hacket permit host 10.6.6.6
ip access-list standard spoofer permit host 10.9.9.9
ip access-list standard multicast 224.0.0.0 15.255.255.255

EXAMPLE - Finding spoofed addresses

A common problem on the Internet is the use of "spoofed" (addresses that are not assigned to an organization) for use in DoS attacks or compromising servers that rely on the source IP address for authentication.

Display all flow records that originate from the campus and are sent to the Internet but are not using legal addresses.

flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-print

Summary of the destinations of the internally spoofed addresses sorted by octets.

flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f8 -S2

Summary of the sources of the internally spoofed addresses sorted by flows.

flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f9 -S1

Summary of the internally spoofed sources and destination pairs sorted by packets.

flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f10 -S4

Display all flow records that originate external to the campus that have campus addresses. Many times these can be attackers trying to exploit host based authentication mechanisms like unix r* commands. Another common source is mobile clients which send packets with their campus addresses before obtaining a valid IP.

flow-cat /flows/R | flow-filter -Scampus -i1,2 | flow-print

Summary of the destinations of the externally spoofed addresses sorted by octets.

flow-cat /flows/R | flow-filter -Scampus -i1,2 | flow-stat -f8 -S2

EXAMPLE - Locate hosts using or running services

Find all SMTP servers active during the collection period that have established connections to the Internet. Summarize sorted by octets.

flow-cat /flows/R | flow-filter -I1,2 -P25 | flow-stat -f9 -S2

Find all outbound NNTP connections to the Internet. Summarize with source and destination IP sorted by octets.

flow-cat /flows/R | flow-filter -I1,2 -P119 | flow-stat -f10 -S3

Find all inbound NNTP connections to the Internet. Summarize with source and destination IP sorted by octets.

flow-cat /flows/R | flow-filter -i1,2 -P119 | flow-stat -f10 -S3

EXAMPLE - Multicast usage

Summarize Multicast S,G where sources are on campus.

flow-cat /flows/R | flow-filter -Dmulticast -I1,2 | flow-stat -f10 -S3

Summarize Multicast S,G where sources are off campus.

flow-cat /flows/R | flow-filter -Dmulticast -i1,2 | flow-stat -f10 -S3

EXAMPLE - Find scanners

Find SMTP scanners with flow-dscan. This will also find SMTP clients which try to contact many servers. This behavior is characterized by a recent Microsoft worm.

touch dscan.suppress.src dscan.suppress.dst

flow-cat /flows/R | flow-filter -P25 | flow-dscan -b

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-tools-examples.sgml0000644000076600007660000002254507455335055015031 flow-tools-examples 1 flow-tools-examples Example usage of flow-tools. EXAMPLE - Configuring Cisco IOS Router NetFlow is configured on each input interface, then global commands are used to specify the export destination. To ensure a consistant source address address Loopback0 is configured as the export source. ip cef distributed ip flow-export version 5 origin-as ip flow-export destination 10.0.0.100 5004 ip flow-export source Loopback0 interface Loopback0 ip address 10.1.1.1 255.255.255.255 interface FastEthernet0/1/0 ip address 10.0.0.1 255.255.255.0 no ip directed-broadcast ip route-cache flow ip route-cache distributed Many other options exist such as aggregated NetFlow and sampled NetFlow which are detailed at . EXAMPLE - Configuring Cisco CatIOS Switch Some Cisco Catalyst switches support a different implementation of NetFlow that is performed on the supervisor. With the cache based forwarding model which is implemented in the Catalyst 55xx with Route Switch Module (RSM) and NetFlow Feature Card (NFFC), the RSM processes the first flow and the remaining packets in the flow are forwarded by the Supervisor. This is also implemented in the early versions of the 65xx with MSFC. The deterministic forwarding model used in the 65xx with MSFC2 do not use NetFlow to determine the forwarding path, the flow cache is only used for statistics as in the current IOS implementations. In all of of the above configurations flow exports arrive from both the RSM/MSFC and the Supervisor engines as distinct streams. In the worst cast the RSM exports in version 5 and the Supervisor exports in version 7. Fortunately flow-capture and flow-receive can sort all this out by processing flows from both sources and converting them to a common export format. The router side running IOS is configured identically to the example given above. The CatIOS NetFlow Data Export configuration follows: set mls flow full set mls nde version 7 set mls nde 10.0.0.1 9800 set mls nde enable When the 65xx is running in Native mode, from a users perspective the switch is only running IOS. More detailed examples can be found on Cisco's web site . EXAMPLE - Configuring Juniper Router Juniper supports flow exports by the routing engine sampling packet headers and aggregating them into flows. Packet sampling is done by defining a firewall filter to accept and sample all traffic, applying that rule to the interface, then configuring the sampling forwarding option. interfaces { ge-0/3/0 { unit 0 { family inet { filter { input all; output all; } address 10.0.0.1/24; } } } firewall { filter all { term all { then { sample; accept; } } } } forwarding-options { sampling { input { family inet { rate 100; } } output { cflowd 10.0.0.100 { port 9800; version 5; } } } } Other options exist such as aggregated flows which are detailed at . EXAMPLE - Network topology and <filename>flow.acl</filename> The network topology and flow.acl will be used for many of the examples that follow. Flows are collected and stored in /flows/R. ISP-A ISP-B + + + + IP=10.1.2.1/24 + + IP=10.1.1.1/24 ifIndex=2 + + ifIndex=1 interface=serial1/1 + + interface=serial0/0 ----- | R | Campus Router ----- + + IP=10.1.4.1/24 + + IP=10.1.3.1/24 ifIndex=4 + + ifIndex=3 interface=Ethernet1/1 + + interface=Ethernet0/0 + + Sales Marketing ip access-list standard sales permit 10.1.4.0 0.0.0.255 ip access-list standard not_sales deny 10.1.4.0 0.0.0.255 ip access-list standard marketing permit 10.1.3.0 0.0.0.255 ip access-list standard not_marketing deny 10.1.3.0 0.0.0.255 ip access-list standard campus permit 10.1.4.0 0.0.0.255 ip access-list standard campus permit 10.1.3.0 0.0.0.255 ip access-list standard not_campus deny 10.1.4.0 0.0.0.255 ip access-list standard not_campus deny 10.1.3.0 0.0.0.255 ip access-list standard evil_hacket permit host 10.6.6.6 ip access-list standard spoofer permit host 10.9.9.9 ip access-list standard multicast 224.0.0.0 15.255.255.255 EXAMPLE - Finding spoofed addresses A common problem on the Internet is the use of "spoofed" (addresses that are not assigned to an organization) for use in DoS attacks or compromising servers that rely on the source IP address for authentication. Display all flow records that originate from the campus and are sent to the Internet but are not using legal addresses. flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-print Summary of the destinations of the internally spoofed addresses sorted by octets. flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f8 -S2 Summary of the sources of the internally spoofed addresses sorted by flows. flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f9 -S1 Summary of the internally spoofed sources and destination pairs sorted by packets. flow-cat /flows/R | flow-filter -Snot_campus -I1,2 | flow-stat -f10 -S4 Display all flow records that originate external to the campus that have campus addresses. Many times these can be attackers trying to exploit host based authentication mechanisms like unix r* commands. Another common source is mobile clients which send packets with their campus addresses before obtaining a valid IP. flow-cat /flows/R | flow-filter -Scampus -i1,2 | flow-print Summary of the destinations of the externally spoofed addresses sorted by octets. flow-cat /flows/R | flow-filter -Scampus -i1,2 | flow-stat -f8 -S2 EXAMPLE - Locate hosts using or running services Find all SMTP servers active during the collection period that have established connections to the Internet. Summarize sorted by octets. flow-cat /flows/R | flow-filter -I1,2 -P25 | flow-stat -f9 -S2 Find all outbound NNTP connections to the Internet. Summarize with source and destination IP sorted by octets. flow-cat /flows/R | flow-filter -I1,2 -P119 | flow-stat -f10 -S3 Find all inbound NNTP connections to the Internet. Summarize with source and destination IP sorted by octets. flow-cat /flows/R | flow-filter -i1,2 -P119 | flow-stat -f10 -S3 EXAMPLE - Multicast usage Summarize Multicast S,G where sources are on campus. flow-cat /flows/R | flow-filter -Dmulticast -I1,2 | flow-stat -f10 -S3 Summarize Multicast S,G where sources are off campus. flow-cat /flows/R | flow-filter -Dmulticast -i1,2 | flow-stat -f10 -S3 EXAMPLE - Find scanners Find SMTP scanners with flow-dscan. This will also find SMTP clients which try to contact many servers. This behavior is characterized by a recent Microsoft worm. touch dscan.suppress.src dscan.suppress.dst flow-cat /flows/R | flow-filter -P25 | flow-dscan -b AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/flow-tools.10000644000076600007660000001714207552463661012413 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-tools\fP" "1" .SH "NAME" \fBflow-tools\fP \(em Tool set for working with NetFlow data\&. .SH "DESCRIPTION" .PP Flow-tools is library and a collection of programs used to collect, send, process, and generate reports from NetFlow data\&. The tools can be used together on a single server or distributed to multiple servers for large deployments\&. The flow-toools library provides an API for development of custom applications for NetFlow export versions 1,5,6 and the 14 currently defined version 8 subversions\&. A Perl and Python interface have been contributed and are included in the distribution\&. .PP Flow data is collected and stored by default in host byte order, yet the files are portable across big and little endian architectures\&. .PP Commands that utilize the network use a localip/remoteip/port designation for communication\&. "localip" is the IP address the host will use as a source for sending or bind to when receiving NetFlow PDU\&'s (ie the destination address of the exporter\&. Configuring the "localip" to 0 will force the kernel to decide what IP address to use for sending and listen on all IP addresses for receiving\&. "remoteip" is the destination IP address used for sending or the expected address of the source when receiving\&. If the "remoteip" is 0 then the application will accept flows from any source address\&. The "port" is the UDP port number used for sending or receiving\&. When using multicast addresses the localip/remoteip/port is used to represent the source, group, and port respectively\&. .PP Flows are exported from a router in a number of different configurable versions\&. A flow is a collection of key fields and additional data\&. The flow key is {srcaddr, dstaddr, input, output, srcport, dstport, prot, ToS}\&. Flow-tools supports one export version per file\&. .PP Export versions 1, 5, 6, and 7 all maintain {nexthop, dPkts, dOctets, First, Last, flags}, ie the next-hop IP address, number of packets, number of octets (bytes), start time, end time, and flags such as the TCP header bits\&. Version 5 adds the additional fields {src_as, dst_as, src_mask, dst_mask}, ie source AS, destination AS, source network mask, and destination network mask\&. Version 7 which is specific to the Catalyst switches adds in addition to the version 5 fields {router_sc}, which is the Router IP address which populates the flow cache shortcut in the Supervisor\&. Version 6 which is not officially supported by Cisco adds in addition to the version 5 fields {in_encaps, out_encaps, peer_nexthop}, ie the input and output interface encapsulation size, and the IP address of the next hop within the peer\&. Version 1 exports do not contain a sequence number and therefore should be avoided, although it is safe to store the data as version 1 if the additional fields are not used\&. .PP Version 8 IOS NetFlow is a second level flow cache that reduces the data exported from the router\&. There are currently 11 formats, all of which provide {dFlows, dOctets, dPkts, First, Last} for the key fields\&. .PP .PP .nf 8\&.1 - Source and Destination AS, Input and Output interface 8\&.2 - Protocol and Port 8\&.3 - Source Prefix and Input interface 8\&.4 - Destination Prefix and Output interface 8\&.5 - Source/Destination Prefix and Input/Output interface 8\&.9 - 8\&.1 + ToS 8\&.10 - 8\&.2 + ToS 8\&.11 - 8\&.3 + ToS 8\&.12 - 8\&.5 + ToS 8\&.13 - 8\&.2 + ToS 8\&.14 - 8\&.3 + ports + ToS .fi .PP Version 8 CatIOS NetFlow appears to be a less fine grained first level flow cache\&. .PP .PP .nf 8\&.6 - Destination IP, ToS, Marked ToS, 8\&.7 - Source/Destination IP, Input/Output interface, ToS, Marked ToS, 8\&.8 - Source/Destination IP, Source/Destination Port, Input/Output interface, ToS, Marked ToS, .fi .PP .PP The following programs are included in the flow-tools distribution\&. .PP \fBflow-capture\fP - Collect, compress, store, and manage disk space for exported flows from a router\&. .PP \fBflow-cat\fP - Concatenate flow files\&. Typically flow files will contain a small window of 5 or 15 minutes of exports\&. Flow-cat can be used to append files for generating reports that span longer time periods\&. .PP \fBflow-fanout\fP - Replicate NetFlow datagrams to unicast or multicast destinations\&. Flow-fanout is used to facilitate multiple collectors attached to a single router\&. .PP \fBflow-report\fP - Generate reports for NetFlow data sets\&. Reports include source/destination IP pairs, source/destination AS, and top talkers\&. Over 50 reports are currently supported\&. .PP \fBflow-tag\fP - Tag flows based on IP address or AS #\&. Flow-tag is used to group flows by customer network\&. The tags can later be used with flow-fanout or flow-report to generate customer based traffic reports\&. .PP \fBflow-filter\fP - Filter flows based on any of the export fields\&. Flow-filter is used in-line with other programs to generate reports based on flows matching filter expressions\&. .PP \fBflow-import\fP - Import data from ASCII or cflowd format\&. .PP \fBflow-export\fP - Export data to ASCII or cflowd format\&. .PP \fBflow-send\fP - Send data over the network using the NetFlow protocol\&. .PP \fBflow-receive\fP - Receive exports using the NetFlow protocol without storing to disk like flow-capture\&. .PP \fBflow-gen\fP - Generate test data\&. .PP \fBflow-dscan\fP - Simple tool for detecting some types of network scanning and Denial of Service attacks\&. .PP \fBflow-merge\fP - Merge flow files in chronoligical order\&. .PP \fBflow-xlate\fP - Perform translations on some flow fields\&. .PP \fBflow-expire\fP - Expire flows using the same policy of flow-capture\&. .PP \fBflow-header\fP - Display meta information in flow file\&. .PP \fBflow-split\fP - Split flow files into smaller files based on size, time, or tags\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .PP \fBflow-merge\fP by Larry Lidz ellidz@eridu\&.uchicago\&.edu .PP Patches and other contribitions by a list too long to mention here\&. .PP \fBflow-tools\fP is avalable at \fI (link to URL http://www.splintered.net/sw/flow-tools) \fR\&. .PP A mailing list is maintained at flow-tools@splintered\&.net .SH "SEE ALSO" .PP \fBflow-capture\fP(1) \fBflow-cat\fP(1) \fBflow-dscan\fP(1) \fBflow-expire\fP(1) \fBflow-export\fP(1) \fBflow-fanout\fP(1) \fBflow-filter\fP(1) \fBflow-nfilter\fP(1) \fBflow-gen\fP(1) \fBflow-header\fP(1) \fBflow-import\fP(1) \fBflow-merge\fP(1) \fBflow-print\fP(1) \fBflow-receive\fP(1) \fBflow-report\fP(1) \fBflow-send\fP(1) \fBflow-split\fP(1) \fBflow-stat\fP(1) \fBflow-tag\fP(1) \fBflow-xlate\fP(1) ...\" created by instant / docbook-to-man, Tue 06 Aug 2002, 22:22 flow-tools-0.68/docs/flow-tools.html0000644000076600007660000002165707552463661013225 flow-tools

flow-tools

Name

flow-tools -- Tool set for working with NetFlow data.

DESCRIPTION

Flow-tools is library and a collection of programs used to collect, send, process, and generate reports from NetFlow data. The tools can be used together on a single server or distributed to multiple servers for large deployments. The flow-toools library provides an API for development of custom applications for NetFlow export versions 1,5,6 and the 14 currently defined version 8 subversions. A Perl and Python interface have been contributed and are included in the distribution.

Flow data is collected and stored by default in host byte order, yet the files are portable across big and little endian architectures.

Commands that utilize the network use a localip/remoteip/port designation for communication. "localip" is the IP address the host will use as a source for sending or bind to when receiving NetFlow PDU's (ie the destination address of the exporter. Configuring the "localip" to 0 will force the kernel to decide what IP address to use for sending and listen on all IP addresses for receiving. "remoteip" is the destination IP address used for sending or the expected address of the source when receiving. If the "remoteip" is 0 then the application will accept flows from any source address. The "port" is the UDP port number used for sending or receiving. When using multicast addresses the localip/remoteip/port is used to represent the source, group, and port respectively.

Flows are exported from a router in a number of different configurable versions. A flow is a collection of key fields and additional data. The flow key is {srcaddr, dstaddr, input, output, srcport, dstport, prot, ToS}. Flow-tools supports one export version per file.

Export versions 1, 5, 6, and 7 all maintain {nexthop, dPkts, dOctets, First, Last, flags}, ie the next-hop IP address, number of packets, number of octets (bytes), start time, end time, and flags such as the TCP header bits. Version 5 adds the additional fields {src_as, dst_as, src_mask, dst_mask}, ie source AS, destination AS, source network mask, and destination network mask. Version 7 which is specific to the Catalyst switches adds in addition to the version 5 fields {router_sc}, which is the Router IP address which populates the flow cache shortcut in the Supervisor. Version 6 which is not officially supported by Cisco adds in addition to the version 5 fields {in_encaps, out_encaps, peer_nexthop}, ie the input and output interface encapsulation size, and the IP address of the next hop within the peer. Version 1 exports do not contain a sequence number and therefore should be avoided, although it is safe to store the data as version 1 if the additional fields are not used.

Version 8 IOS NetFlow is a second level flow cache that reduces the data exported from the router. There are currently 11 formats, all of which provide {dFlows, dOctets, dPkts, First, Last} for the key fields.

  8.1 -  Source and Destination AS, Input and Output interface
  8.2 -  Protocol and Port
  8.3 -  Source Prefix and Input interface
  8.4 -  Destination Prefix and Output interface
  8.5 -  Source/Destination Prefix and Input/Output interface
  8.9 -  8.1 + ToS
  8.10 - 8.2 + ToS
  8.11 - 8.3 + ToS
  8.12 - 8.5 + ToS
  8.13 - 8.2 + ToS
  8.14 - 8.3 + ports + ToS

Version 8 CatIOS NetFlow appears to be a less fine grained first level flow cache.

  8.6 - Destination IP, ToS, Marked ToS, 
  8.7 - Source/Destination IP, Input/Output interface, ToS, Marked ToS, 
  8.8 - Source/Destination IP, Source/Destination Port,
        Input/Output interface, ToS, Marked ToS, 

The following programs are included in the flow-tools distribution.

flow-capture - Collect, compress, store, and manage disk space for exported flows from a router.

flow-cat - Concatenate flow files. Typically flow files will contain a small window of 5 or 15 minutes of exports. Flow-cat can be used to append files for generating reports that span longer time periods.

flow-fanout - Replicate NetFlow datagrams to unicast or multicast destinations. Flow-fanout is used to facilitate multiple collectors attached to a single router.

flow-report - Generate reports for NetFlow data sets. Reports include source/destination IP pairs, source/destination AS, and top talkers. Over 50 reports are currently supported.

flow-tag - Tag flows based on IP address or AS #. Flow-tag is used to group flows by customer network. The tags can later be used with flow-fanout or flow-report to generate customer based traffic reports.

flow-filter - Filter flows based on any of the export fields. Flow-filter is used in-line with other programs to generate reports based on flows matching filter expressions.

flow-import - Import data from ASCII or cflowd format.

flow-export - Export data to ASCII or cflowd format.

flow-send - Send data over the network using the NetFlow protocol.

flow-receive - Receive exports using the NetFlow protocol without storing to disk like flow-capture.

flow-gen - Generate test data.

flow-dscan - Simple tool for detecting some types of network scanning and Denial of Service attacks.

flow-merge - Merge flow files in chronoligical order.

flow-xlate - Perform translations on some flow fields.

flow-expire - Expire flows using the same policy of flow-capture.

flow-header - Display meta information in flow file.

flow-split - Split flow files into smaller files based on size, time, or tags.

AUTHOR

Mark Fullmer

flow-merge by Larry Lidz

Patches and other contribitions by a list too long to mention here.

flow-tools is avalable at http://www.splintered.net/sw/flow-tools.

A mailing list is maintained at

SEE ALSO

flow-capture(1) flow-cat(1) flow-dscan(1) flow-expire(1) flow-export(1) flow-fanout(1) flow-filter(1) flow-nfilter(1) flow-gen(1) flow-header(1) flow-import(1) flow-merge(1) flow-print(1) flow-receive(1) flow-report(1) flow-send(1) flow-split(1) flow-stat(1) flow-tag(1) flow-xlate(1)

flow-tools-0.68/docs/flow-tools.sgml0000644000076600007660000001764407524102174013210 flow-tools 1 flow-tools Tool set for working with NetFlow data. DESCRIPTION Flow-tools is library and a collection of programs used to collect, send, process, and generate reports from NetFlow data. The tools can be used together on a single server or distributed to multiple servers for large deployments. The flow-toools library provides an API for development of custom applications for NetFlow export versions 1,5,6 and the 14 currently defined version 8 subversions. A Perl and Python interface have been contributed and are included in the distribution. Flow data is collected and stored by default in host byte order, yet the files are portable across big and little endian architectures. Commands that utilize the network use a localip/remoteip/port designation for communication. "localip" is the IP address the host will use as a source for sending or bind to when receiving NetFlow PDU's (ie the destination address of the exporter. Configuring the "localip" to 0 will force the kernel to decide what IP address to use for sending and listen on all IP addresses for receiving. "remoteip" is the destination IP address used for sending or the expected address of the source when receiving. If the "remoteip" is 0 then the application will accept flows from any source address. The "port" is the UDP port number used for sending or receiving. When using multicast addresses the localip/remoteip/port is used to represent the source, group, and port respectively. Flows are exported from a router in a number of different configurable versions. A flow is a collection of key fields and additional data. The flow key is {srcaddr, dstaddr, input, output, srcport, dstport, prot, ToS}. Flow-tools supports one export version per file. Export versions 1, 5, 6, and 7 all maintain {nexthop, dPkts, dOctets, First, Last, flags}, ie the next-hop IP address, number of packets, number of octets (bytes), start time, end time, and flags such as the TCP header bits. Version 5 adds the additional fields {src_as, dst_as, src_mask, dst_mask}, ie source AS, destination AS, source network mask, and destination network mask. Version 7 which is specific to the Catalyst switches adds in addition to the version 5 fields {router_sc}, which is the Router IP address which populates the flow cache shortcut in the Supervisor. Version 6 which is not officially supported by Cisco adds in addition to the version 5 fields {in_encaps, out_encaps, peer_nexthop}, ie the input and output interface encapsulation size, and the IP address of the next hop within the peer. Version 1 exports do not contain a sequence number and therefore should be avoided, although it is safe to store the data as version 1 if the additional fields are not used. Version 8 IOS NetFlow is a second level flow cache that reduces the data exported from the router. There are currently 11 formats, all of which provide {dFlows, dOctets, dPkts, First, Last} for the key fields. 8.1 - Source and Destination AS, Input and Output interface 8.2 - Protocol and Port 8.3 - Source Prefix and Input interface 8.4 - Destination Prefix and Output interface 8.5 - Source/Destination Prefix and Input/Output interface 8.9 - 8.1 + ToS 8.10 - 8.2 + ToS 8.11 - 8.3 + ToS 8.12 - 8.5 + ToS 8.13 - 8.2 + ToS 8.14 - 8.3 + ports + ToS Version 8 CatIOS NetFlow appears to be a less fine grained first level flow cache. 8.6 - Destination IP, ToS, Marked ToS, 8.7 - Source/Destination IP, Input/Output interface, ToS, Marked ToS, 8.8 - Source/Destination IP, Source/Destination Port, Input/Output interface, ToS, Marked ToS, The following programs are included in the flow-tools distribution. flow-capture - Collect, compress, store, and manage disk space for exported flows from a router. flow-cat - Concatenate flow files. Typically flow files will contain a small window of 5 or 15 minutes of exports. Flow-cat can be used to append files for generating reports that span longer time periods. flow-fanout - Replicate NetFlow datagrams to unicast or multicast destinations. Flow-fanout is used to facilitate multiple collectors attached to a single router. flow-report - Generate reports for NetFlow data sets. Reports include source/destination IP pairs, source/destination AS, and top talkers. Over 50 reports are currently supported. flow-tag - Tag flows based on IP address or AS #. Flow-tag is used to group flows by customer network. The tags can later be used with flow-fanout or flow-report to generate customer based traffic reports. flow-filter - Filter flows based on any of the export fields. Flow-filter is used in-line with other programs to generate reports based on flows matching filter expressions. flow-import - Import data from ASCII or cflowd format. flow-export - Export data to ASCII or cflowd format. flow-send - Send data over the network using the NetFlow protocol. flow-receive - Receive exports using the NetFlow protocol without storing to disk like flow-capture. flow-gen - Generate test data. flow-dscan - Simple tool for detecting some types of network scanning and Denial of Service attacks. flow-merge - Merge flow files in chronoligical order. flow-xlate - Perform translations on some flow fields. flow-expire - Expire flows using the same policy of flow-capture. flow-header - Display meta information in flow file. flow-split - Split flow files into smaller files based on size, time, or tags. AUTHOR Mark Fullmer maf@splintered.net flow-merge by Larry Lidz ellidz@eridu.uchicago.edu Patches and other contribitions by a list too long to mention here. flow-tools is avalable at . A mailing list is maintained at flow-tools@splintered.net SEE ALSO flow-capture(1) flow-cat(1) flow-dscan(1) flow-expire(1) flow-export(1) flow-fanout(1) flow-filter(1) flow-nfilter(1) flow-gen(1) flow-header(1) flow-import(1) flow-merge(1) flow-print(1) flow-receive(1) flow-report(1) flow-send(1) flow-split(1) flow-stat(1) flow-tag(1) flow-xlate(1) flow-tools-0.68/docs/flow-xlate.1.in0000644000076600007660000002114610240150411012742 ...\" $Header: /usr/src/docbook-to-man/cmd/RCS/docbook-to-man.sh,v 1.3 1996/06/17 03:36:49 fld Exp $ ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "\fBflow-xlate\fP" "1" .SH "NAME" \fBflow-xlate\fP \(em Apply translations to selected fields of a flow\&. .SH "SYNOPSIS" .PP \fBflow-xlate\fP [-hkn] [-b\fI big\fP|\fIlittle\fP] [-C\fI comment\fP] [-d\fI debug_level\fP] [-v\fI variable binding\fP] [-V\fI flow_version\fP] [-x\fI xlate_fname\fP] [-X\fI xlate_definition\fP] [-z\fI z_level\fP] .SH "DESCRIPTION" .PP The \fBflow-xlate\fP utility is used to apply translations to flows\&. Translations are defined in a configuration file and are composed of actions and a definition to invoke action(s)\&. The definitions are in the form of terms, each term can have a filter and multiple actions\&. .PP Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option\&. .PP Translation actions begin with the xlate-action keyword followed by a symbolic name\&. Each action has a type defined below\&. .PP Translation definitions begin with the xlate-definition keyword followed by a symbolic name\&. Each definition is composed of terms which are evaluated in the order of the configuration file\&. A term may invoke a filter to conditionally invoke an action\&. .PP .nf Action type/sub-commands Description/Example ------------------------------------------------------------------------ ip-source-address-to-network Zero host bits based on mask\&. ip-destination-address-to-network Zero host bits based on mask\&. (no sub-commands) ip-source-address-to-class-network Zero source host bits to match class\&. ip-destination-address-to-class-network Zero dst host bits to match class\&. (no sub-commands) ip-source-address-anonymize Anonymize source address\&. ip-destination-address-anonymize Anonymize destination address\&. ip-address-anonymize Anonymize src/dst address\&. algorithm Algorithm\&. cryptopan-aes128 is currently supported\&. algorithm cryptopan-aes128 key Key\&. Key is 128 bits in hex\&. key 0123456789ABCDEFG key-file File to load key from\&. Key is 128 bits in hex\&. key-file /mfstmp/secret-key key-file-refresh How often to check the key file\&. Interval is in minutes, the optional second argument is hour:min:sec to specify the first refresh\&. This example will load a new key every day at 12:00:00\&. 14400 12:00:00 ip-address-privacy-mask Apply a mask to the source and destination address to remove bits\&. ip-port-privacy-mask Apply a mask to the source and destination port to remove bits\&. tag-mask Apply mask to the source and destination tag\&. mask Source and Destination mask to apply\&. mask 0xFFFF 0xFFFF scale Scale packets and bytes\&. scale Scale to apply\&. scale 100 replace-source-as0 Replace source AS 0 replace-destination-as0 Replace destination AS 0 as AS replacement value\&. as 3112 .fi .SH "OPTIONS" .IP "-b\fI big\fP|\fIlittle\fP" 10 Byte order of output\&. .IP "-C\fI Comment\fP" 10 Add a comment\&. .IP "-d\fI debug_level\fP" 10 Enable debugging\&. .IP "-h" 10 Display help\&. .IP "-k" 10 Keep time from input\&. .IP "-n" 10 Don\&'t load configuration file\&. Useful only with -V .IP "-v\fI variable binding\fP" 10 Set a variable FOO=bar\&. .IP "-V\fI pdu_version\fP" 10 Use \fIpdu_version\fP format output\&. .PP .nf 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8\&.1 NetFlow AS Aggregation 8\&.2 NetFlow Proto Port Aggregation 8\&.3 NetFlow Source Prefix Aggregation 8\&.4 NetFlow Destination Prefix Aggregation 8\&.5 NetFlow Prefix Aggregation 8\&.6 NetFlow Destination (Catalyst switches) 8\&.7 NetFlow Source Destination (Catalyst switches) 8\&.8 NetFlow Full Flow (Catalyst switches) 8\&.9 NetFlow ToS AS Aggregation 8\&.10 NetFlow ToS Proto Port Aggregation 8\&.11 NetFlow ToS Source Prefix Aggregation 8\&.12 NetFlow ToS Destination Prefix Aggregation 8\&.13 NetFlow ToS Prefix Aggregation 8\&.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 .fi .IP "-x\fI xlate_fname\fP" 10 Translation config file name\&. Defaults to \fB@localstatedir@/cfg/xlate\&.cfg\fP .IP "-X\fI xlate_definition\fP" 10 Translation definition\&. Defaults to default\&. .IP "-z\fI z_level\fP" 10 Configure compression level to \fI z_level\fP\&. 0 is disabled (no compression), 9 is highest compression\&. .SH "EXAMPLES" .PP Convert the version 7 flows in \fBflows\&.v7\fP to version 5, storing the result in \fBflows\&.v5\fP\&. .PP \fBflow-xlate -V5 < flows\&.v7 > flows\&.v5\fP .PP Set the low 11 bits in the IP addresses to zero unless the address is multicast or it belongs to the 192\&.88\&.99/24 network\&. .PP .nf # xlate\&.cfg include-filter filter\&.cfg xlate-action MULTICAST-PRIVACY type ip-address-privacy-mask mask 0xFFFFFFFF 0xFFFFFFFF xlate-action UNICAST-PRIVACY type ip-address-privacy-mask mask 0xFFFFFF00 0xFFFFF800 xlate-definition abilene_privacy term filter mcast action MULTICAST-PRIVACY stop term filter ucast action UNICAST-PRIVACY .fi .PP .nf # filter\&.cfg filter-primitive MCAST type ip-address-mask permit 224\&.0\&.0\&.0 240\&.0\&.0\&.0 filter-primitive UCAST type ip-address-mask deny 224\&.0\&.0\&.0 240\&.0\&.0\&.0 default permit filter-primitive SKIP type ip-address-mask deny 192\&.88\&.99\&.0 255\&.255\&.255\&.0 default permit filter-definition mcast match ip-destination-address MCAST filter-definition ucast match ip-destination-address UCAST match ip-destination-address SKIP match ip-source-address SKIP .fi \fBflow-cat \fBflows\fP | flow-xlate -xxlate\&.cfg -Xabilene_privacy | flow-print\fP .SH "FILES" .PP Configuration files: Symbols - \fB@localstatedir@/sym/*\fP\&. Filter - \fB@localstatedir@/cfg/filter\&.cfg\fP\&. Xlate - \fB@localstatedir@/cfg/xlate\&.cfg\fP\&. .SH "BUGS" .PP The scale option can overflow the 32 bit flow counters\&. This could be solved by detecting this condition and splitting the flow in two\&. .PP Translation between aggregated and non aggregated formats is not supported\&. .SH "AUTHOR" .PP Mark Fullmer maf@splintered\&.net .SH "SEE ALSO" .PP \fBflow-tools\fP(1) ...\" created by instant / docbook-to-man, Tue 10 May 2005, 11:19 flow-tools-0.68/docs/flow-xlate.html0000644000076600007660000002647210240412033013151 flow-xlate

flow-xlate

Name

flow-xlate -- Apply translations to selected fields of a flow.

Synopsis

flow-xlate [-hkn] [-b big|little] [-C comment] [-d debug_level] [-v variable binding] [-V flow_version] [-x xlate_fname] [-X xlate_definition] [-z z_level]

DESCRIPTION

The flow-xlate utility is used to apply translations to flows. Translations are defined in a configuration file and are composed of actions and a definition to invoke action(s). The definitions are in the form of terms, each term can have a filter and multiple actions.

Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option.

Translation actions begin with the xlate-action keyword followed by a symbolic name. Each action has a type defined below.

Translation definitions begin with the xlate-definition keyword followed by a symbolic name. Each definition is composed of terms which are evaluated in the order of the configuration file. A term may invoke a filter to conditionally invoke an action.

Action type/sub-commands                Description/Example
------------------------------------------------------------------------
ip-source-address-to-network            Zero host bits based on mask.
ip-destination-address-to-network       Zero host bits based on mask.

  (no sub-commands)

ip-source-address-to-class-network      Zero source host bits to
                                        match class.
ip-destination-address-to-class-network Zero dst host bits to
                                        match class.
                                      
  (no sub-commands)

ip-source-address-anonymize             Anonymize source address.
ip-destination-address-anonymize        Anonymize destination address.
ip-address-anonymize                    Anonymize src/dst address.


    algorithm                           Algorithm.  cryptopan-aes128 is
                                        currently supported.
                                         algorithm cryptopan-aes128

    key                                 Key.  Key is 128 bits in hex.
                                         key 0123456789ABCDEFG

    key-file                            File to load key from.  Key is
                                        128 bits in hex.
                                         key-file /mfstmp/secret-key

    key-file-refresh                    How often to check the key file.
                                        Interval is in minutes, the
                                        optional second argument is
                                        hour:min:sec to specify the
                                        first refresh.  This example
                                        will load a new key every day
                                        at 12:00:00.
                                         14400 12:00:00


ip-address-privacy-mask                 Apply a mask to the source and
                                        destination address to remove
                                        bits.

ip-port-privacy-mask                    Apply a mask to the source and
                                        destination port to remove
                                        bits.

tag-mask                                Apply mask to the source and
                                        destination tag.

    mask                                Source and Destination mask
                                        to apply.
                                         mask 0xFFFF 0xFFFF

scale                                   Scale packets and bytes.

  scale                                 Scale to apply.
                                         scale 100

replace-source-as0                      Replace source AS 0
replace-destination-as0                 Replace destination AS 0

  as                                    AS replacement value.
                                         as 3112

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-h

Display help.

-k

Keep time from input.

-n

Don't load configuration file. Useful only with -V

-v variable binding

Set a variable FOO=bar.

-V pdu_version

Use pdu_version format output.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-x xlate_fname

Translation config file name. Defaults to /usr/local/netflow/var/cfg/xlate.cfg

-X xlate_definition

Translation definition. Defaults to default.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Convert the version 7 flows in flows.v7 to version 5, storing the result in flows.v5.

flow-xlate -V5 < flows.v7 > flows.v5

Set the low 11 bits in the IP addresses to zero unless the address is multicast or it belongs to the 192.88.99/24 network.

# xlate.cfg
include-filter filter.cfg

xlate-action MULTICAST-PRIVACY
  type ip-address-privacy-mask
  mask 0xFFFFFFFF 0xFFFFFFFF  
  
xlate-action UNICAST-PRIVACY
  type ip-address-privacy-mask
  mask 0xFFFFFF00 0xFFFFF800

xlate-definition abilene_privacy
  term
    filter mcast
    action MULTICAST-PRIVACY
    stop
  term
    filter ucast
    action UNICAST-PRIVACY

# filter.cfg
filter-primitive MCAST
  type ip-address-mask
  permit 224.0.0.0 240.0.0.0

filter-primitive UCAST
  type ip-address-mask
  deny 224.0.0.0 240.0.0.0
  default permit

filter-primitive SKIP
  type ip-address-mask
  deny 192.88.99.0 255.255.255.0
  default permit

filter-definition mcast
  match ip-destination-address MCAST

filter-definition ucast
  match ip-destination-address UCAST
  match ip-destination-address SKIP
  match ip-source-address SKIP

flow-cat flows | flow-xlate -xxlate.cfg -Xabilene_privacy | flow-print

FILES

Configuration files: Symbols - /usr/local/netflow/var/sym/*. Filter - /usr/local/netflow/var/cfg/filter.cfg. Xlate - /usr/local/netflow/var/cfg/xlate.cfg.

BUGS

The scale option can overflow the 32 bit flow counters. This could be solved by detecting this condition and splitting the flow in two.

Translation between aggregated and non aggregated formats is not supported.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-xlate.html.in0000644000076600007660000002643510240150416013561 flow-xlate

flow-xlate

Name

flow-xlate -- Apply translations to selected fields of a flow.

Synopsis

flow-xlate [-hkn] [-b big|little] [-C comment] [-d debug_level] [-v variable binding] [-V flow_version] [-x xlate_fname] [-X xlate_definition] [-z z_level]

DESCRIPTION

The flow-xlate utility is used to apply translations to flows. Translations are defined in a configuration file and are composed of actions and a definition to invoke action(s). The definitions are in the form of terms, each term can have a filter and multiple actions.

Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option.

Translation actions begin with the xlate-action keyword followed by a symbolic name. Each action has a type defined below.

Translation definitions begin with the xlate-definition keyword followed by a symbolic name. Each definition is composed of terms which are evaluated in the order of the configuration file. A term may invoke a filter to conditionally invoke an action.

Action type/sub-commands                Description/Example
------------------------------------------------------------------------
ip-source-address-to-network            Zero host bits based on mask.
ip-destination-address-to-network       Zero host bits based on mask.

  (no sub-commands)

ip-source-address-to-class-network      Zero source host bits to
                                        match class.
ip-destination-address-to-class-network Zero dst host bits to
                                        match class.
                                      
  (no sub-commands)

ip-source-address-anonymize             Anonymize source address.
ip-destination-address-anonymize        Anonymize destination address.
ip-address-anonymize                    Anonymize src/dst address.


    algorithm                           Algorithm.  cryptopan-aes128 is
                                        currently supported.
                                         algorithm cryptopan-aes128

    key                                 Key.  Key is 128 bits in hex.
                                         key 0123456789ABCDEFG

    key-file                            File to load key from.  Key is
                                        128 bits in hex.
                                         key-file /mfstmp/secret-key

    key-file-refresh                    How often to check the key file.
                                        Interval is in minutes, the
                                        optional second argument is
                                        hour:min:sec to specify the
                                        first refresh.  This example
                                        will load a new key every day
                                        at 12:00:00.
                                         14400 12:00:00


ip-address-privacy-mask                 Apply a mask to the source and
                                        destination address to remove
                                        bits.

ip-port-privacy-mask                    Apply a mask to the source and
                                        destination port to remove
                                        bits.

tag-mask                                Apply mask to the source and
                                        destination tag.

    mask                                Source and Destination mask
                                        to apply.
                                         mask 0xFFFF 0xFFFF

scale                                   Scale packets and bytes.

  scale                                 Scale to apply.
                                         scale 100

replace-source-as0                      Replace source AS 0
replace-destination-as0                 Replace destination AS 0

  as                                    AS replacement value.
                                         as 3112

OPTIONS

-b big|little

Byte order of output.

-C Comment

Add a comment.

-d debug_level

Enable debugging.

-h

Display help.

-k

Keep time from input.

-n

Don't load configuration file. Useful only with -V

-v variable binding

Set a variable FOO=bar.

-V pdu_version

Use pdu_version format output.

    1    NetFlow version 1 (No sequence numbers, AS, or mask)
    5    NetFlow version 5
    6    NetFlow version 6 (5+ Encapsulation size)
    7    NetFlow version 7 (Catalyst switches)
    8.1  NetFlow AS Aggregation
    8.2  NetFlow Proto Port Aggregation
    8.3  NetFlow Source Prefix Aggregation
    8.4  NetFlow Destination Prefix Aggregation
    8.5  NetFlow Prefix Aggregation
    8.6  NetFlow Destination (Catalyst switches)
    8.7  NetFlow Source Destination (Catalyst switches)
    8.8  NetFlow Full Flow (Catalyst switches)
    8.9  NetFlow ToS AS Aggregation
    8.10 NetFlow ToS Proto Port Aggregation
    8.11 NetFlow ToS Source Prefix Aggregation
    8.12 NetFlow ToS Destination Prefix Aggregation
    8.13 NetFlow ToS Prefix Aggregation
    8.14 NetFlow ToS Prefix Port Aggregation
    1005 Flow-Tools tagged version 5

-x xlate_fname

Translation config file name. Defaults to @localstatedir@/cfg/xlate.cfg

-X xlate_definition

Translation definition. Defaults to default.

-z z_level

Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression.

EXAMPLES

Convert the version 7 flows in flows.v7 to version 5, storing the result in flows.v5.

flow-xlate -V5 < flows.v7 > flows.v5

Set the low 11 bits in the IP addresses to zero unless the address is multicast or it belongs to the 192.88.99/24 network.

# xlate.cfg
include-filter filter.cfg

xlate-action MULTICAST-PRIVACY
  type ip-address-privacy-mask
  mask 0xFFFFFFFF 0xFFFFFFFF  
  
xlate-action UNICAST-PRIVACY
  type ip-address-privacy-mask
  mask 0xFFFFFF00 0xFFFFF800

xlate-definition abilene_privacy
  term
    filter mcast
    action MULTICAST-PRIVACY
    stop
  term
    filter ucast
    action UNICAST-PRIVACY

# filter.cfg
filter-primitive MCAST
  type ip-address-mask
  permit 224.0.0.0 240.0.0.0

filter-primitive UCAST
  type ip-address-mask
  deny 224.0.0.0 240.0.0.0
  default permit

filter-primitive SKIP
  type ip-address-mask
  deny 192.88.99.0 255.255.255.0
  default permit

filter-definition mcast
  match ip-destination-address MCAST

filter-definition ucast
  match ip-destination-address UCAST
  match ip-destination-address SKIP
  match ip-source-address SKIP

flow-cat flows | flow-xlate -xxlate.cfg -Xabilene_privacy | flow-print

FILES

Configuration files: Symbols - @localstatedir@/sym/*. Filter - @localstatedir@/cfg/filter.cfg. Xlate - @localstatedir@/cfg/xlate.cfg.

BUGS

The scale option can overflow the 32 bit flow counters. This could be solved by detecting this condition and splitting the flow in two.

Translation between aggregated and non aggregated formats is not supported.

AUTHOR

Mark Fullmer

SEE ALSO

flow-tools(1)

flow-tools-0.68/docs/flow-xlate.sgml0000644000076600007660000002333610240150406013146 flow-xlate 1 flow-xlate Apply translations to selected fields of a flow. flow-xlate -hkn -b big|little -C comment -d debug_level -v variable binding -V flow_version -x xlate_fname -X xlate_definition -z z_level DESCRIPTION The flow-xlate utility is used to apply translations to flows. Translations are defined in a configuration file and are composed of actions and a definition to invoke action(s). The definitions are in the form of terms, each term can have a filter and multiple actions. Words in the configuration file of the form @VAR or @{VAR:default} will be expanded at run-time by setting variable names with the -v option. Translation actions begin with the xlate-action keyword followed by a symbolic name. Each action has a type defined below. Translation definitions begin with the xlate-definition keyword followed by a symbolic name. Each definition is composed of terms which are evaluated in the order of the configuration file. A term may invoke a filter to conditionally invoke an action. Action type/sub-commands Description/Example ------------------------------------------------------------------------ ip-source-address-to-network Zero host bits based on mask. ip-destination-address-to-network Zero host bits based on mask. (no sub-commands) ip-source-address-to-class-network Zero source host bits to match class. ip-destination-address-to-class-network Zero dst host bits to match class. (no sub-commands) ip-source-address-anonymize Anonymize source address. ip-destination-address-anonymize Anonymize destination address. ip-address-anonymize Anonymize src/dst address. algorithm Algorithm. cryptopan-aes128 is currently supported. algorithm cryptopan-aes128 key Key. Key is 128 bits in hex. key 0123456789ABCDEFG key-file File to load key from. Key is 128 bits in hex. key-file /mfstmp/secret-key key-file-refresh How often to check the key file. Interval is in minutes, the optional second argument is hour:min:sec to specify the first refresh. This example will load a new key every day at 12:00:00. 14400 12:00:00 ip-address-privacy-mask Apply a mask to the source and destination address to remove bits. ip-port-privacy-mask Apply a mask to the source and destination port to remove bits. tag-mask Apply mask to the source and destination tag. mask Source and Destination mask to apply. mask 0xFFFF 0xFFFF scale Scale packets and bytes. scale Scale to apply. scale 100 replace-source-as0 Replace source AS 0 replace-destination-as0 Replace destination AS 0 as AS replacement value. as 3112 OPTIONS -b big|little Byte order of output. -C Comment Add a comment. -d debug_level Enable debugging. -h Display help. -k Keep time from input. -n Don't load configuration file. Useful only with -V -v variable binding Set a variable FOO=bar. -V pdu_version Use pdu_version format output. 1 NetFlow version 1 (No sequence numbers, AS, or mask) 5 NetFlow version 5 6 NetFlow version 6 (5+ Encapsulation size) 7 NetFlow version 7 (Catalyst switches) 8.1 NetFlow AS Aggregation 8.2 NetFlow Proto Port Aggregation 8.3 NetFlow Source Prefix Aggregation 8.4 NetFlow Destination Prefix Aggregation 8.5 NetFlow Prefix Aggregation 8.6 NetFlow Destination (Catalyst switches) 8.7 NetFlow Source Destination (Catalyst switches) 8.8 NetFlow Full Flow (Catalyst switches) 8.9 NetFlow ToS AS Aggregation 8.10 NetFlow ToS Proto Port Aggregation 8.11 NetFlow ToS Source Prefix Aggregation 8.12 NetFlow ToS Destination Prefix Aggregation 8.13 NetFlow ToS Prefix Aggregation 8.14 NetFlow ToS Prefix Port Aggregation 1005 Flow-Tools tagged version 5 -x xlate_fname Translation config file name. Defaults to @localstatedir@/cfg/xlate.cfg -X xlate_definition Translation definition. Defaults to default. -z z_level Configure compression level to z_level. 0 is disabled (no compression), 9 is highest compression. EXAMPLES Convert the version 7 flows in flows.v7 to version 5, storing the result in flows.v5. flow-xlate -V5 < flows.v7 > flows.v5 Set the low 11 bits in the IP addresses to zero unless the address is multicast or it belongs to the 192.88.99/24 network. # xlate.cfg include-filter filter.cfg xlate-action MULTICAST-PRIVACY type ip-address-privacy-mask mask 0xFFFFFFFF 0xFFFFFFFF xlate-action UNICAST-PRIVACY type ip-address-privacy-mask mask 0xFFFFFF00 0xFFFFF800 xlate-definition abilene_privacy term filter mcast action MULTICAST-PRIVACY stop term filter ucast action UNICAST-PRIVACY # filter.cfg filter-primitive MCAST type ip-address-mask permit 224.0.0.0 240.0.0.0 filter-primitive UCAST type ip-address-mask deny 224.0.0.0 240.0.0.0 default permit filter-primitive SKIP type ip-address-mask deny 192.88.99.0 255.255.255.0 default permit filter-definition mcast match ip-destination-address MCAST filter-definition ucast match ip-destination-address UCAST match ip-destination-address SKIP match ip-source-address SKIP flow-cat flows | flow-xlate -xxlate.cfg -Xabilene_privacy | flow-print FILES Configuration files: Symbols - @localstatedir@/sym/*. Filter - @localstatedir@/cfg/filter.cfg. Xlate - @localstatedir@/cfg/xlate.cfg. BUGS The scale option can overflow the 32 bit flow counters. This could be solved by detecting this condition and splitting the flow in two. Translation between aggregated and non aggregated formats is not supported. AUTHOR Mark Fullmer maf@splintered.net SEE ALSO flow-tools(1) flow-tools-0.68/docs/Makefile.am0000644000076600007660000000555510240250454012243 man_MANSIN = flow-capture.1.in flow-cat.1 flow-dscan.1 flow-expire.1 flow-export.1 flow-fanout.1.in flow-filter.1 flow-gen.1 flow-header.1 flow-import.1 flow-merge.1 flow-print.1.in flow-receive.1.in flow-send.1 flow-split.1 flow-stat.1 flow-tools-examples.1 flow-tools.1 flow-tag.1.in flow-nfilter.1.in flow-report.1.in flow-mask.1.in flow-xlate.1.in flow-rptfmt.1.in flow-log2rrd.1.in flow-rpt2rrd.1.in man_MANS = flow-capture.1 flow-cat.1 flow-dscan.1 flow-expire.1 flow-export.1 flow-fanout.1 flow-filter.1 flow-gen.1 flow-header.1 flow-import.1 flow-merge.1 flow-print.1 flow-receive.1 flow-send.1 flow-split.1 flow-stat.1 flow-tools-examples.1 flow-tools.1 flow-tag.1 flow-nfilter.1 flow-report.1 flow-mask.1 flow-xlate.1 flow-rptfmt.1 flow-log2rrd.1 flow-rpt2rrd.1 man_SGMLS = flow-capture.sgml flow-cat.sgml flow-dscan.sgml flow-expire.sgml flow-export.sgml flow-fanout.sgml flow-filter.sgml flow-gen.sgml flow-header.sgml flow-import.sgml flow-merge.sgml flow-print.sgml flow-receive.sgml flow-send.sgml flow-split.sgml flow-stat.sgml flow-tools-examples.sgml flow-tools.sgml flow-xlate.sgml flow-tag.sgml flow-nfilter.sgml flow-report.sgml flow-mask.sgml flow-rptfmt.sgml flow-log2rrd.sgml flow-rpt2rrd.sgml man_HTMLSIN = flow-capture.html.in flow-cat.html flow-dscan.html flow-expire.html flow-export.html flow-fanout.html.in flow-filter.html flow-gen.html flow-header.html flow-import.html flow-merge.html flow-print.html.in flow-receive.html.in flow-send.html flow-split.html flow-stat.html flow-tools-examples.html flow-tools.html flow-xlate.html.in flow-tag.html.in flow-nfilter.html.in flow-report.html.in flow-mask.html.in flow-xlate.html flow-rptfmt.html.in flow-log2rrd.html.in flow-rpt2rrd.html.in man_HTMLS = flow-capture.html flow-cat.html flow-dscan.html flow-expire.html flow-export.html flow-fanout.html flow-filter.html flow-gen.html flow-header.html flow-import.html flow-merge.html flow-print.html flow-receive.html flow-send.html flow-split.html flow-stat.html flow-tools-examples.html flow-tools.html flow-tag.html flow-nfilter.html flow-report.html flow-mask.html flow-xlate.html flow-rptfmt.html flow-log2rrd.html flow-rpt2rrd.html EXTRA_DIST = $(man_MANSIN) $(man_SGMLS) $(man_HTMLSIN) SUFFIXES = .sgml .1 .html .1.in .html.in .sgml.1: docbook-to-man $*.sgml > $*.1 .sgml.1.in: docbook-to-man $*.sgml > $*.1.in .sgml.html: openjade -V nochunks -c /usr/local/share/sgml/docbook/dsssl/modular/catalog -c /usr/local/share/sgml/docbook/catalog -c /usr/local/share/sgml/jade/catalog -d /usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl -t sgml $*.sgml > $*.html .sgml.html.in: openjade -V nochunks -c /usr/local/share/sgml/docbook/dsssl/modular/catalog -c /usr/local/share/sgml/docbook/catalog -c /usr/local/share/sgml/jade/catalog -d /usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl -t sgml $*.sgml > $*.html.in all-am: Makefile $(man_MANSIN) $(man_HTMLS) flow-tools-0.68/docs/Makefile.in0000644000076600007660000003310610240412242012240 # Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CRYPTOLIB = @CRYPTOLIB@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ MYSQLCFLAGS = @MYSQLCFLAGS@ MYSQLINCLUDE = @MYSQLINCLUDE@ MYSQLLIB = @MYSQLLIB@ OPENSSLINCLUDE = @OPENSSLINCLUDE@ PACKAGE = @PACKAGE@ PGSQLCFLAGS = @PGSQLCFLAGS@ PGSQLINCLUDE = @PGSQLINCLUDE@ PGSQLLIB = @PGSQLLIB@ RANLIB = @RANLIB@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YLIB = @YLIB@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ man_MANSIN = flow-capture.1.in flow-cat.1 flow-dscan.1 flow-expire.1 flow-export.1 flow-fanout.1.in flow-filter.1 flow-gen.1 flow-header.1 flow-import.1 flow-merge.1 flow-print.1.in flow-receive.1.in flow-send.1 flow-split.1 flow-stat.1 flow-tools-examples.1 flow-tools.1 flow-tag.1.in flow-nfilter.1.in flow-report.1.in flow-mask.1.in flow-xlate.1.in flow-rptfmt.1.in flow-log2rrd.1.in flow-rpt2rrd.1.in man_MANS = flow-capture.1 flow-cat.1 flow-dscan.1 flow-expire.1 flow-export.1 flow-fanout.1 flow-filter.1 flow-gen.1 flow-header.1 flow-import.1 flow-merge.1 flow-print.1 flow-receive.1 flow-send.1 flow-split.1 flow-stat.1 flow-tools-examples.1 flow-tools.1 flow-tag.1 flow-nfilter.1 flow-report.1 flow-mask.1 flow-xlate.1 flow-rptfmt.1 flow-log2rrd.1 flow-rpt2rrd.1 man_SGMLS = flow-capture.sgml flow-cat.sgml flow-dscan.sgml flow-expire.sgml flow-export.sgml flow-fanout.sgml flow-filter.sgml flow-gen.sgml flow-header.sgml flow-import.sgml flow-merge.sgml flow-print.sgml flow-receive.sgml flow-send.sgml flow-split.sgml flow-stat.sgml flow-tools-examples.sgml flow-tools.sgml flow-xlate.sgml flow-tag.sgml flow-nfilter.sgml flow-report.sgml flow-mask.sgml flow-rptfmt.sgml flow-log2rrd.sgml flow-rpt2rrd.sgml man_HTMLSIN = flow-capture.html.in flow-cat.html flow-dscan.html flow-expire.html flow-export.html flow-fanout.html.in flow-filter.html flow-gen.html flow-header.html flow-import.html flow-merge.html flow-print.html.in flow-receive.html.in flow-send.html flow-split.html flow-stat.html flow-tools-examples.html flow-tools.html flow-xlate.html.in flow-tag.html.in flow-nfilter.html.in flow-report.html.in flow-mask.html.in flow-xlate.html flow-rptfmt.html.in flow-log2rrd.html.in flow-rpt2rrd.html.in man_HTMLS = flow-capture.html flow-cat.html flow-dscan.html flow-expire.html flow-export.html flow-fanout.html flow-filter.html flow-gen.html flow-header.html flow-import.html flow-merge.html flow-print.html flow-receive.html flow-send.html flow-split.html flow-stat.html flow-tools-examples.html flow-tools.html flow-tag.html flow-nfilter.html flow-report.html flow-mask.html flow-xlate.html flow-rptfmt.html flow-log2rrd.html flow-rpt2rrd.html EXTRA_DIST = $(man_MANSIN) $(man_SGMLS) $(man_HTMLSIN) SUFFIXES = .sgml .1 .html .1.in .html.in subdir = docs mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/ftconfig.h CONFIG_CLEAN_FILES = flow-capture.1 flow-capture.html flow-nfilter.1 \ flow-nfilter.html flow-print.1 flow-print.html flow-report.1 \ flow-report.html flow-receive.1 flow-receive.html flow-tag.1 \ flow-tag.html flow-mask.1 flow-mask.html flow-fanout.1 \ flow-fanout.html flow-xlate.1 flow-xlate.html flow-rpt2rrd.1 \ flow-rpt2rrd.html flow-rptfmt.1 flow-rptfmt.html flow-log2rrd.1 \ flow-log2rrd.html DIST_SOURCES = NROFF = nroff MANS = $(man_MANS) DIST_COMMON = Makefile.am Makefile.in flow-capture.1.in \ flow-capture.html.in flow-fanout.1.in flow-fanout.html.in \ flow-log2rrd.1.in flow-log2rrd.html.in flow-mask.1.in \ flow-mask.html.in flow-nfilter.1.in flow-nfilter.html.in \ flow-print.1.in flow-print.html.in flow-receive.1.in \ flow-receive.html.in flow-report.1.in flow-report.html.in \ flow-rpt2rrd.1.in flow-rpt2rrd.html.in flow-rptfmt.1.in \ flow-rptfmt.html.in flow-tag.1.in flow-tag.html.in \ flow-xlate.1.in flow-xlate.html.in all: all-am .SUFFIXES: .SUFFIXES: .sgml .1 .html .1.in .html.in $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) flow-capture.1: $(top_builddir)/config.status flow-capture.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-capture.html: $(top_builddir)/config.status flow-capture.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-nfilter.1: $(top_builddir)/config.status flow-nfilter.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-nfilter.html: $(top_builddir)/config.status flow-nfilter.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-print.1: $(top_builddir)/config.status flow-print.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-print.html: $(top_builddir)/config.status flow-print.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-report.1: $(top_builddir)/config.status flow-report.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-report.html: $(top_builddir)/config.status flow-report.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-receive.1: $(top_builddir)/config.status flow-receive.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-receive.html: $(top_builddir)/config.status flow-receive.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-tag.1: $(top_builddir)/config.status flow-tag.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-tag.html: $(top_builddir)/config.status flow-tag.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-mask.1: $(top_builddir)/config.status flow-mask.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-mask.html: $(top_builddir)/config.status flow-mask.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-fanout.1: $(top_builddir)/config.status flow-fanout.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-fanout.html: $(top_builddir)/config.status flow-fanout.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-xlate.1: $(top_builddir)/config.status flow-xlate.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-xlate.html: $(top_builddir)/config.status flow-xlate.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-rpt2rrd.1: $(top_builddir)/config.status flow-rpt2rrd.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-rpt2rrd.html: $(top_builddir)/config.status flow-rpt2rrd.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-rptfmt.1: $(top_builddir)/config.status flow-rptfmt.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-rptfmt.html: $(top_builddir)/config.status flow-rptfmt.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-log2rrd.1: $(top_builddir)/config.status flow-log2rrd.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ flow-log2rrd.html: $(top_builddir)/config.status flow-log2rrd.html.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ uninstall-info-am: man1dir = $(mandir)/man1 install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: $(mkinstalldirs) $(DESTDIR)$(man1dir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-man install-exec-am: install-info: install-info-am install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-info-am uninstall-man uninstall-man: uninstall-man1 .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-man1 install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic uninstall uninstall-am \ uninstall-info-am uninstall-man uninstall-man1 .sgml.1: docbook-to-man $*.sgml > $*.1 .sgml.1.in: docbook-to-man $*.sgml > $*.1.in .sgml.html: openjade -V nochunks -c /usr/local/share/sgml/docbook/dsssl/modular/catalog -c /usr/local/share/sgml/docbook/catalog -c /usr/local/share/sgml/jade/catalog -d /usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl -t sgml $*.sgml > $*.html .sgml.html.in: openjade -V nochunks -c /usr/local/share/sgml/docbook/dsssl/modular/catalog -c /usr/local/share/sgml/docbook/catalog -c /usr/local/share/sgml/jade/catalog -d /usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl -t sgml $*.sgml > $*.html.in all-am: Makefile $(man_MANSIN) $(man_HTMLS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/INSTALL0000644000076600007660000001474207272641503010320 COMPILING THE TOOLKIT --------------------------- To compile the toolkit, you'll first need to install zlib1.0.4 or greater tcp_wrappers 7.6, and gnu make zlib - ftp://ftp.freesoftware.com/pub/infozip/zlib/ tcp_wrappers ftp://ftp.win.tue.nl pub/security/tcp_wrappers_7.6.tar.gz gnu_make ftp://ftp.gnu.org/pub/gnu/make/make-3.79.1.tar.gz Then ./configure gmake gmake install CONFIGURING THE ROUTER ---------------------------- ! enable cef ip cef ip cef distributed !Turn on flow accounting for each input interface with the interface command interface Fddi3/0 ip route-cache flow interface atm3/0/0 ip route-cache flow ... Verify the router is generating flow stats with the command 'show ip cache flow'. Note that for routers with distributed switching (GSR's, 75XX's) the RP cli will only show flows that made it up to the RP. To see flows on the individual linecards use the 'attach' or 'if-con' command and issue the 'sh ip ca fl' on each LC. IP packet size distribution (36242M total packets): 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 .002 .340 .084 .021 .020 .012 .009 .009 .008 .007 .006 .007 .004 .003 .004 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608 .002 .004 .035 .077 .338 .000 .000 .000 .000 .000 .000 IP Flow Switching Cache, 4456704 bytes 4139 active, 61397 inactive, 712344771 added 871670181 ager polls, 0 flow alloc failures last clearing of statistics never Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec) -------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow TCP-Telnet 1572735 0.3 58 127 21.4 27.0 14.8 TCP-FTP 6193502 1.4 24 746 35.3 3.6 9.0 TCP-FTPD 1458042 0.3 1534 833 520.9 42.4 4.2 TCP-WWW 93403998 21.7 19 633 432.9 4.9 6.3 TCP-SMTP 16123540 3.7 15 431 59.1 3.4 6.4 TCP-X 687228 0.1 238 276 38.1 20.8 14.3 TCP-BGP 1116819 0.2 3 45 0.7 5.3 16.0 TCP-NNTP 1455156 0.3 1102 176 373.4 106.1 11.9 TCP-Frag 3244 0.0 4 636 0.0 2.8 16.3 TCP-other 188162587 43.8 118 733 5204.5 11.1 6.9 UDP-DNS 38042100 8.8 3 84 27.3 3.8 16.4 UDP-NTP 18760129 4.3 1 76 5.3 1.3 16.3 UDP-TFTP 665 0.0 4 76 0.0 7.9 16.4 UDP-Frag 13111 0.0 2121 1108 6.4 366.8 13.5 UDP-other 195556237 45.5 35 343 1632.5 5.8 16.3 ICMP 149285440 34.7 2 64 72.9 0.9 16.5 IGMP 15315 0.0 167 32 0.5 1660.6 3.9 IPINIP 15112 0.0 35 52 0.1 275.3 14.2 GRE 127489 0.0 3 109 0.1 16.9 16.1 IP-other 348604 0.0 56 447 4.5 21.5 16.2 Total: 712341053 165.8 50 620 8436.8 6.2 12.2 SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts AT4/0.1 128.146.225.194 AT1/0.2 128.194.203.23 06 0019 2CAF 15 AT2/0.10 129.22.250.148 AT1/0.2 129.2.226.43 06 04BA 1A20 1266 AT2/0.11 130.108.110.48 AT1/0.2 170.140.89.100 06 0923 10A3 436 AT1/0.2 170.140.89.100 AT2/0.11 130.108.110.48 06 10A3 0923 462 ! Enable the exports of flows with the global commands ip flow-export version 5 origin-as ip flow-export 10.0.0.1 9990 ! Enable the AS aggregation cache and export the aggregated flows to ! 10.0.0.1 port 9991 ip flow-aggregation cache as export destination 10.0.0.1 9991 enabled ! Create a loopback interface if one does not exist ! interface Loopback0 ip address 10.1.1.1 255.255.255.255 ! ! Configure NetFlow export source address ! ip flow-export source Loopback0 If you have tcpdump installed on or near the host you're using to capture flows, the exports can be verified. shattered:~% /usr/local/etc/tcpdump -n udp port 9991 /usr/local/etc/tcpdump: listening on le0 12:11:29.953100 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:29.962551 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:29.975115 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:29.984444 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:29.993956 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:30.003252 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:30.015483 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:30.024852 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:30.034182 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:30.043545 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 12:11:30.053239 10.0.0.1.1868 > 10.0.0.2.9991: udp 1168 flow-receive can be used to verify your host is receiving flows: ./flow-receive 0/0/9990 | ./flow-print or ./flow-receive 0/0/9991 | ./flow-print % ./flow-receive 0/0/9990 | ./flow-print | head -10 Sif SrcIPaddress Dif DstIPaddress Pr SrcP DstP Pkts Octets 60 206.204.84.9 00 10.0.135.63 06 15 5f0 2 88 00 10.0.135.63 60 206.204.84.9 06 5f0 15 16 787 60 206.204.84.9 00 10.0.135.63 06 15 5f0 13 1742 00 10.0.155.25 60 204.62.245.167 06 50 bae5 15 948 60 204.62.245.167 00 10.0.155.25 06 bae5 50 13 681 60 206.204.84.20 00 10.0.135.63 06 50 5ed 7 3494 60 206.204.84.20 00 10.0.135.63 06 50 5ef 6 401 60 206.204.84.20 00 10.0.135.63 06 50 5eb 11 9413 00 10.0.135.63 60 206.204.84.20 06 5ed 50 9 637 To store the flow exports on disk, use flow capture. The following will store 15 minute compressed exports in /netflow/oar/krc3.v5 and begin removing the oldest files after 3Gig of storage has been used. mkdir -p /netflow/oar/krc3.v5 ./flow-capture -w /netflow/oar/krc3.v5 -E3G 0/10.1.1.1/9990 The completed exports will begin with 'ft'. The current export file will begin with 'tmp'. The 'ft' files can now be used with the other tools, ie ./flow-print < /netflow/oar/krc3.v8.1/ft-v08m01.2001-02-09.111502 flow-cat, flow-stat, and flow-filter can be combined to produce various reports such as total bytes in the export period, source/destination matrixes, per interface totals, etc. flow-tools-0.68/install-sh0000755000076600007660000001267107470616132011272 #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then : else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else : fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else : fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else : fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 flow-tools-0.68/lib/0000777000076600007660000000000010240421707010100 5flow-tools-0.68/lib/bit1024.c0000644000076600007660000000645707622602461011271 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: bit1024.c,v 1.6 2003/02/13 02:38:41 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" int bit1024_reverse[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; u_int bit1024_pow2[] = { 1U, 2U, 4U, 8U, 16U, 32U, 64U, 128U, 256U, 512U, 1024U, 2048U, 4096U, 8192U, 16384U, 32768U, 65536U, 131072U, 262144U, 524288U, 1048576U, 2097152U, 4194304U, 8388608U, 16777216U, 33554432U, 67108864U, 134217728U, 268435456U, 536870912U, 1073741824U, 2147483648U, }; void bit1024_store(int d, struct bit1024 *old) { old->n[(31 - (d/32))] |= bit1024_pow2[d%32]; } /* bit1024_store */ int bit1024_count(struct bit1024 *b) { register int i, c; for (i = 0, c = 0; i < 32; ++i) { c += bit1024_reverse[(b->n[i]&0x000000FF)]+ bit1024_reverse[(b->n[i]&0x0000FF00)>>8]+ bit1024_reverse[(b->n[i]&0x00FF0000)>>16]+ bit1024_reverse[(b->n[i]&0xFF000000)>>24]; } return c; } /* bit1024_count */ void bit1024_print(FILE *FP, struct bit1024 *b) { int i, j, x; if (!(x = bit1024_count(b))) { return; } fprintf(FP, "P %d", x); for (i = 31; i >= 0; --i) { for (j = 0; j < 32; ++j) { if (b->n[i] & bit1024_pow2[j]) { x = (31 - i); fprintf(FP, " %d", x*32+j); } } } fprintf(FP, "\n"); } /* bit1024_print */ flow-tools-0.68/lib/fmt.c0000644000076600007660000002166307631751125010770 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: fmt.c,v 1.17 2003/03/06 22:57:25 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif unsigned int fmt_uint8(register char *s, register u_int8 u, int format) { register int len = 0; char *s1; if (!s) return 0; s1 = s; s += FMT_UINT8 - 1; do { ++len; *--s = '0' + (u % 10); u /= 10; } while(u); if ((format == FMT_PAD_RIGHT) || (format == FMT_JUST_LEFT)) { bcopy(s, s1, len); if (format == FMT_PAD_RIGHT) for (; len < (FMT_UINT8 - 1); ++len) s1[len] = ' '; s1[len] = 0; return len; } return len; } /* fmt_uint8 */ unsigned int fmt_uint16s(struct ftsym *ftsym, int max, char *s, u_int16 u, int format) { int ret; char *str; if (ftsym && ftsym_findbyval(ftsym, (u_int32)u, &str) == 1) { strncpy(s, str, max); s[max-1] = 0; ret = strlen(s); if (format == FMT_PAD_RIGHT) for (; ret < (max-1); ++ret) s[ret] = ' '; if (format == FMT_PAD_RIGHT) return max-1; else return ret; } else { return fmt_uint16(s, u, format); } } /* fmt_uint16s */ unsigned int fmt_uint8s(struct ftsym *ftsym, int max, char *s, u_int8 u, int format) { int ret; char *str; if (ftsym && ftsym_findbyval(ftsym, (u_int32)u, &str) == 1) { strncpy(s, str, max); s[max-1] = 0; ret = strlen(s); if (format == FMT_PAD_RIGHT) for (; ret < (max-1); ++ret) s[ret] = ' '; if (format == FMT_PAD_RIGHT) return max-1; else return ret; } else { return fmt_uint8(s, u, format); } } /* fmt_uint8s */ unsigned int fmt_uint32s(struct ftsym *ftsym, int max, char *s, u_int32 u, int format) { int ret; char *str; if (ftsym && ftsym_findbyval(ftsym, (u_int32)u, &str) == 1) { strncpy(s, str, max); s[max-1] = 0; ret = strlen(s); if (format == FMT_PAD_RIGHT) for (; ret < (max-1); ++ret) s[ret] = ' '; if (format == FMT_PAD_RIGHT) return max-1; else return ret; } else { return fmt_uint32(s, u, format); } } /* fmt_uint32s */ unsigned int fmt_uint16(register char *s, register u_int16 u, int format) { register int len = 0; char *s1; if (!s) return 0; s1 = s; s += FMT_UINT16 - 1; do { ++len; *--s = '0' + (u % 10); u /= 10; } while(u); if ((format == FMT_PAD_RIGHT) || (format == FMT_JUST_LEFT)) { bcopy(s, s1, len); if (format == FMT_PAD_RIGHT) for (; len < (FMT_UINT16 - 1); ++len) s1[len] = ' '; s1[len] = 0; return len; } return len; } /* fmt_uint16 */ unsigned int fmt_uint32(register char *s, register u_int32 u, int format) { register int len = 0; char *s1; int i; if (!s) return 0; s1 = s; s += FMT_UINT32 - 1; do { ++len; *--s = '0' + (u % 10); u /= 10; } while(u); if ((format == FMT_PAD_RIGHT) || (format == FMT_JUST_LEFT)) { bcopy(s, s1, len); if (format == FMT_PAD_RIGHT) for (; len < (FMT_UINT32 - 1); ++len) s1[len] = ' '; s1[len] = 0; return len; } if (format == FMT_PAD_LEFT) { for (i = 0; i < ((FMT_UINT32 - 1) - len); ++i) s1[i] = ' '; s1[(FMT_UINT32 - 1)] = 0; return (FMT_UINT32 - 1); } return 0; } /* fmt_uint32 */ unsigned int fmt_uint64(register char *s, register u_int64 u, int format) { register int len = 0; char *s1; int i; if (!s) return 0; s1 = s; s += FMT_UINT64 - 1; do { ++len; *--s = '0' + (u % 10); u /= 10; } while(u); if ((format == FMT_PAD_RIGHT) || (format == FMT_JUST_LEFT)) { bcopy(s, s1, len); if (format == FMT_PAD_RIGHT) for (; len < (FMT_UINT64 - 1); ++len) s1[len] = ' '; s1[len] = 0; return len; } if (format == FMT_PAD_LEFT) { for (i = 0; i < ((FMT_UINT64 - 1) - len); ++i) s1[i] = ' '; s1[(FMT_UINT64 - 1)] = 0; return (FMT_UINT64 - 1); } return 0; } /* fmt_uint64 */ unsigned int fmt_ipv4s(register char *s, register u_int32 u, int len, int format) { struct sockaddr_in in; struct hostent *he; /* need at least this much */ if (len < FMT_IPV4) { if (len > 0) s[0] = 0; return 0; } /* symbol lookups disabled? */ if (!(format & FMT_SYM)) return fmt_ipv4(s, u, format); in.sin_addr.s_addr = htonl(u); if (!(he = gethostbyaddr((char*)&in.sin_addr.s_addr, sizeof (in.sin_addr.s_addr), AF_INET))) return fmt_ipv4(s, u, format); strncpy(s, he->h_name, len); s[len-1] = 0; return (strlen(s)); } /* fmt_ipv4s */ unsigned int fmt_ipv4(register char *s, register u_int32 u, int format) { register int len = 0; char *s1; int i, j; u_int8 e[4]; char c[4][4]; if (!s) return 0; j = 0; e[0] = (u & 0xFF000000)>>24; e[1] = (u & 0x00FF0000)>>16; e[2] = (u & 0x0000FF00)>>8; e[3] = (u & 0x000000FF); for (i = 0; i < 4; ++i) { s1 = &c[i][3]; len = 0; do { ++len; *--s1 = '0' + (e[i] % 10); e[i] /= 10; } while(e[i]); bcopy(s1, s+j, len); j += len; *(s+j) = '.'; ++j; } --j; s[j] = 0; if (format == FMT_JUST_LEFT) return j; if (format == FMT_PAD_RIGHT) { for (; j < (FMT_IPV4-1); ++j) s[j] = ' '; s[j] = 0; return (FMT_IPV4-1); } if (format == FMT_JUST_RIGHT) { bcopy(s, s+(FMT_IPV4-1)-j, j); for (i = 0; i < (FMT_IPV4-1)-j; ++i) s[i] = ' '; s[FMT_IPV4-1] = 0; return (FMT_IPV4-1); } return j; } /* fmt_ipv4 */ unsigned int fmt_ipv4prefixs(register char *s, register u_int32 u, u_char mask, int len, int format) { struct sockaddr_in in; struct hostent *he; /* need at least this much */ if (len < FMT_IPV4_PREFIX) { if (len > 0) s[0] = 0; return 0; } /* symbol lookups disabled? */ if (!(format & FMT_SYM)) return fmt_ipv4prefix(s, u, mask, format); in.sin_addr.s_addr = htonl(u & ipv4_len2mask(mask)); if (!(he = gethostbyaddr((char*)&in.sin_addr.s_addr, sizeof (in.sin_addr.s_addr), AF_INET))) return fmt_ipv4(s, u, format); strncpy(s, he->h_name, len); s[len-1] = 0; return (strlen(s)); } /* int fmt_ipv4prefixs */ unsigned int fmt_ipv4prefix(register char *s, register u_int32 u, u_char mask, int format) { register int len = 0; char *s1; int i, j, k, done; u_int8 e[4]; char c[5][4]; if (!s) return 0; j = 0; done = 0; if (mask > 32) mask = 0; e[0] = (u & 0xFF000000)>>24; e[1] = (u & 0x00FF0000)>>16; e[2] = (u & 0x0000FF00)>>8; e[3] = (u & 0x000000FF); for (i = 0; i < 4; ++i) { s1 = &c[i][3]; /* check for last octets are all 0, make sure to encode at least one 0 */ if (i > 0) for (done = 1, k = 1; k < 4; ++k) if (e[k] != 0) done = 0; if (done) break; len = 0; do { ++len; *--s1 = '0' + (e[i] % 10); e[i] /= 10; } while(e[i]); bcopy(s1, s+j, len); j += len; *(s+j) = '.'; ++j; } /* backup over the last . and replace with / */ --j; s[j++] = '/'; s1 = &c[4][3]; len = 0; do { ++len; *--s1 = '0' + (mask % 10); mask /= 10; } while(mask); bcopy(s1, s+j, len); j += len; s[j] = 0; if (format == FMT_JUST_LEFT) return j; if (format == FMT_PAD_RIGHT) { for (; j < (FMT_IPV4_PREFIX-1); ++j) s[j] = ' '; s[j] = 0; return (FMT_IPV4_PREFIX-1); } if (format == FMT_JUST_RIGHT) { bcopy(s, s+(FMT_IPV4_PREFIX-1)-j, j); for (i = 0; i < (FMT_IPV4_PREFIX-1)-j; ++i) s[i] = ' '; s[FMT_IPV4_PREFIX-1] = 0; return (FMT_IPV4_PREFIX-1); } return j; } /* fmt_ipv4prefix */ flow-tools-0.68/lib/ftchash.c0000644000076600007660000003016407716226051011615 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftchash.c,v 1.14 2003/08/12 18:04:25 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif int sort_offset; static int cmp64(const void *a, const void *b); static int cmp40(const void *a, const void *b); static int cmp32(const void *a, const void *b); static int cmp16(const void *a, const void *b); static int cmp8(const void *a, const void *b); static int cmp_double(const void *a, const void *b); /* * function: ftchash_new * * allocate and initialize new hash structure. * * h_size - size of hash table (number of buckets) * d_size - size of data record (multiple of long word byte alignment) * key_size - size of key * chunk_entries - number of data entries per chunk * * returns allocated structure or 0L for error. * */ struct ftchash *ftchash_new(int h_size, int d_size, int key_size, int chunk_entries) { struct ftchash *ftch; int i; /* allocate ftchash */ if (!(ftch = (struct ftchash*)malloc(sizeof (struct ftchash)))) { fterr_warn("malloc()"); return ftch; } /* init */ bzero(ftch, sizeof (struct ftchash)); ftch->h_size = h_size; ftch->d_size = d_size; ftch->key_size = key_size; ftch->chunk_size = chunk_entries * d_size; FT_SLIST_INIT(&ftch->chunk_list); /* allocate h_size buckets */ if (!(ftch->buckets = (struct ftchash_bhead*)malloc( sizeof (struct ftchash_bhead)*h_size))) { fterr_warn("malloc()"); free (ftch); return (struct ftchash*)0L; } /* init buckets */ for (i = 0; i < h_size; ++i) FT_SLIST_INIT(&(*ftch).buckets[i]); return ftch; } /* ftchash_new */ /* * function: ftchash_free * * free storage allocated with ftchash_new */ void ftchash_free(struct ftchash *ftch) { struct ftchash_chunk *chunk; if (ftch) { if (ftch->buckets) free (ftch->buckets); if (ftch->sorted_recs) free (ftch->sorted_recs); while ((chunk = FT_SLIST_FIRST(&ftch->chunk_list))) { FT_SLIST_REMOVE_HEAD(&ftch->chunk_list, chain); free (chunk->base); free (chunk); } free (ftch); } } /* ftchash_free */ /* * function: ftchash_lookup * * lookup record in hash table * * returns pointer to record found or * *0L if not found */ void *ftchash_lookup(struct ftchash *ftch, void *key, u_int32 hash) { struct ftchash_rec_gen *rec; struct ftchash_bhead *bhead; int keyoff; /* offset to key */ keyoff = offsetof(struct ftchash_rec_gen, data); /* lookup hash entry */ bhead = &(*ftch).buckets[hash]; /* walk down chain */ FT_SLIST_FOREACH(rec, bhead, chain) { /* if found return pointer */ if (!bcmp((char*)rec+keyoff, (char*)key, ftch->key_size)) return rec; } return (void*)0L; } /* ftchash_lookup */ /* * function: ftchash_update * * add record to hash table. key_size bytes will be copied from rec to * the allocated hash record. The caller must update the remaining * area of rec. hash value must be less than h_size. * * returns 0L on error * or pointer to allocated record */ void *ftchash_update(struct ftchash *ftch, void *newrec, u_int32 hash) { struct ftchash_rec_gen *rec; struct ftchash_bhead *bhead; int keyoff; /* no longer sorted */ ftch->sort_flags &= ~FT_CHASH_SORTED; /* offset to key */ keyoff = offsetof(struct ftchash_rec_gen, data); /* lookup hash entry */ bhead = &(*ftch).buckets[hash]; /* walk down chain */ FT_SLIST_FOREACH(rec, bhead, chain) { /* if found return pointer */ if (!bcmp((char*)rec+keyoff, (char*)newrec+keyoff, ftch->key_size)) return rec; } /* not found, allocate new entry */ if (!(rec = (struct ftchash_rec_gen*) ftchash_alloc_rec(ftch))) { fterr_warnx("ftchash_alloc_rec(): failed"); return (void*)0L; } /* add to chain */ FT_SLIST_INSERT_HEAD(bhead, rec, chain); /* copy in key */ bcopy((char*)newrec+keyoff, (char*)rec+keyoff, ftch->key_size); /* increment storage counter */ ftch->entries ++; /* return new record pointer */ return rec; } /* ftchash_update */ /* * function: ftchash_alloc_rec * * allocate a new record * * chunk pointer is added to ftch->chunk_list when adding new chunk * * a chunk will always contain at least 1 record * * returns 0L on error * or pointer to allocated record */ void *ftchash_alloc_rec(struct ftchash *ftch) { void *p; struct ftchash_chunk *chunk; if ((!ftch->active_chunk) || (ftch->active_chunk->next >= ftch->chunk_size)) { /* allocate the chunk */ if (!(p = malloc(ftch->chunk_size))) { fterr_warnx("malloc()"); return (void*)0L; } bzero(p, ftch->chunk_size); /* allocate the chunk holder */ if (!(chunk = (struct ftchash_chunk*)malloc( sizeof (struct ftchash_chunk)))) { fterr_warnx("malloc()"); free (p); return (void*)0L; } bzero(chunk, sizeof (struct ftchash_chunk)); chunk->base = p; ftch->active_chunk = chunk; FT_SLIST_INSERT_HEAD(&ftch->chunk_list, chunk, chain); } p = (char*)ftch->active_chunk->base + ftch->active_chunk->next; ftch->active_chunk->next += ftch->d_size; return p; } /* ftchash_alloc_rec */ /* * function: ftchash_first * * setup ftchash_foreach to first entry; */ void ftchash_first(struct ftchash *ftch) { struct ftchash_chunk *chunk; if (ftch->sort_flags & FT_CHASH_SORTED) { if (ftch->sort_flags & FT_CHASH_SORT_ASCENDING) ftch->traverse_srec = ftch->entries; else ftch->traverse_srec = 0; } else { chunk = FT_SLIST_FIRST(&ftch->chunk_list); if (chunk) { ftch->traverse_chunk = chunk; ftch->traverse_rec = chunk->base; } else { ftch->traverse_rec = (void*)0L; ftch->traverse_chunk = (void*)0L; } } /* sorted? */ } /* ftchash_first */ /* * function: ftchash_foreach * * returns next entry in hash table, or NULL if the last entry * ftchash_first() must be called first. * */ void *ftchash_foreach(struct ftchash *ftch) { struct ftchash_chunk *chunk; void *ret; if (ftch->sort_flags & FT_CHASH_SORTED) { if (ftch->sort_flags & FT_CHASH_SORT_ASCENDING) { if (ftch->traverse_srec > 0) return (ftch->sorted_recs[--ftch->traverse_srec]); else return (void*)0L; } else { if (ftch->traverse_srec < ftch->entries) return (ftch->sorted_recs[ftch->traverse_srec++]); else return (void*)0L; } } else { /* only happens on empty hash table -- done */ if (!ftch->traverse_chunk) return (void*)0L; /* more entries in this chunk *? */ if ((char*)ftch->traverse_rec < (char*)ftch->traverse_chunk->base+ftch->traverse_chunk->next) { ret = ftch->traverse_rec; (char*)ftch->traverse_rec += ftch->d_size; return ret; } else { /* go to next chunk */ chunk = FT_SLIST_NEXT(ftch->traverse_chunk, chain); /* if this is a valid chunk, return first record */ if (chunk) { ftch->traverse_chunk = chunk; ftch->traverse_rec = (char*)ftch->traverse_chunk->base + ftch->d_size; return (chunk->base); } else { /* else that was the last chunk, done */ return (void*)0L; } } } /* sorted? */ } /* ftchash_foreach */ /* * function: ftchash_sort * * creates an array of pointers to the sorted records * * returns -1 on error * 0 otherwise */ int ftchash_sort(struct ftchash *ftch, int offset, int flags) { void *rec; u_int64 x; /* entries to sort? */ if (!ftch->entries) return 0; /* free memory from previous call */ if (ftch->sorted_recs) free(ftch->sorted_recs); /* allocate ftch->entries * sizeof 32 bit pointer */ if (!(ftch->sorted_recs = (struct ftchash_rec_gen**) malloc(sizeof (struct ftchash_rec_gen*)*ftch->entries))) { fterr_warn("malloc()"); return -1; } ftch->sort_flags = flags; /* copy in the unsorted entries */ ftchash_first(ftch); x = 0; while ((rec = ftchash_foreach(ftch))) { ftch->sorted_recs[x++] = (struct ftchash_rec_gen*)rec; } /* while */ sort_offset = offset; if (flags & FT_CHASH_SORT_64) qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp64); else if (flags & FT_CHASH_SORT_40) qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp40); else if (flags & FT_CHASH_SORT_32) qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp32); else if (flags & FT_CHASH_SORT_16) qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp16); else if (flags & FT_CHASH_SORT_8) qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp8); else if (flags & FT_CHASH_SORT_DOUBLE) qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp_double); else fterr_errx(1, "ftchash_sort(): internal error"); ftch->sort_flags |= FT_CHASH_SORTED; return 0; } /* ftchash_sort */ static int cmp64(const void *a, const void *b) { register u_int64 *la, *lb; char *d; d = *(char**)a; la = (u_int64*)(d+sort_offset); d = *(char**)b; lb = (u_int64*)(d+sort_offset); if (*la < *lb) return -1; if (*la > *lb) return 1; return 0; } /* cmp64 */ static int cmp40(const void *a, const void *b) { register u_int32 *la, *lb; register u_int8 *ca, *cb; register char *d; d = *(char**)a; la = (u_int32*)(d+sort_offset); d = *(char**)b; lb = (u_int32*)(d+sort_offset); if (*la < *lb) return -1; if (*la > *lb) return 1; d = *(char**)a; ca = (u_int8*)(d+sort_offset+4); d = *(char**)b; cb = (u_int8*)(d+sort_offset+4); if (*ca < *cb) return -1; if (*ca > *cb) return 1; return 0; } /* cmp40 */ static int cmp32(const void *a, const void *b) { register u_int32 *la, *lb; char *d; d = *(char**)a; la = (u_int32*)(d+sort_offset); d = *(char**)b; lb = (u_int32*)(d+sort_offset); if (*la < *lb) return -1; if (*la > *lb) return 1; return 0; } /* cmp32 */ static int cmp16(const void *a, const void *b) { register u_int16 *la, *lb; char *d; d = *(char**)a; la = (u_int16*)(d+sort_offset); d = *(char**)b; lb = (u_int16*)(d+sort_offset); if (*la < *lb) return -1; if (*la > *lb) return 1; return 0; } /* cmp16 */ static int cmp8(const void *a, const void *b) { register u_int8 *la, *lb; char *d; d = *(char**)a; la = (u_int8*)(d+sort_offset); d = *(char**)b; lb = (u_int8*)(d+sort_offset); if (*la < *lb) return -1; if (*la > *lb) return 1; return 0; } /* cmp8 */ static int cmp_double(const void *a, const void *b) { register double *la, *lb; char *d; d = *(char**)a; la = (double*)(d+sort_offset); d = *(char**)b; lb = (double*)(d+sort_offset); if (*la < *lb) return -1; if (*la > *lb) return 1; return 0; } /* cmp_double */ flow-tools-0.68/lib/ftconfig.h.in0000644000076600007660000001326210240411662012374 /* lib/ftconfig.h.in. Generated from configure.in by autoheader. */ /* Name of package. */ #undef PACKAGE /* Version of package. */ #undef VERSION /* Linux */ #undef _BSD_SOURCE /* Linux */ #undef HAVE_FEATURES_H /* BSD socket */ #undef HAVE_SOCK_SIN_LEN /* MYSQL */ #undef HAVE_MYSQL /* PGSQL */ #undef HAVE_PGSQL /* DEC */ #undef HAVE_LL_STRTOUL /* OPENSSL */ #undef HAVE_OPENSSL /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the `wrap' library (-lwrap). */ #undef HAVE_LIBWRAP /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strsep' function. */ #undef HAVE_STRSEP /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the `strtoull' function. */ #undef HAVE_STRTOULL /* Define to 1 if `st_rdev' is member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_RDEV /* Define to 1 if your `struct stat' has `st_rdev'. Deprecated, use `HAVE_STRUCT_STAT_ST_RDEV' instead. */ #undef HAVE_ST_RDEV /* Define to 1 if you have the header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `timelocal' function. */ #undef HAVE_TIMELOCAL /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned' if does not define. */ #undef size_t flow-tools-0.68/lib/ftdecode.c0000644000076600007660000015751510240153453011753 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftdecode.c,v 1.25 2005/05/10 15:45:47 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif /* * function ftpdu_check_seq * * Check sequence number in decoded PDU * * ftpdu_verify must be called first * * Returns 0 - sequence number matched expected * -1 - sequence number did not match expected * seq_rcv, seq_exp updated */ int ftpdu_check_seq(struct ftpdu *ftpdu, struct ftseq *ftseq) { struct ftpdu_header *ph; int ret; u_int seq_index; /* version 1 exports do not have sequence numbers */ if (ftpdu->ftv.d_version == 1) return 0; ph = (struct ftpdu_header*)&ftpdu->buf; #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT32(ph->flow_sequence); SWAPINT16(ph->count); #endif /* LITTLE_ENDIAN */ seq_index = ph->engine_id<<8 | ph->engine_type; /* first time always okay */ if (!ftseq->seq_set[seq_index]) { ftseq->seq_set[seq_index] = 1; ftseq->seq[seq_index] = ph->flow_sequence + ph->count; ret = 0; } else { /* if cur == expecting then okay, else reset */ if (ph->flow_sequence == ftseq->seq[seq_index]) { ftseq->seq[seq_index] += ph->count; ret = 0; } else { ftseq->seq_rcv = ph->flow_sequence; ftseq->seq_exp = ftseq->seq[seq_index]; ftseq->seq[seq_index] = ph->flow_sequence + ph->count; /* calculate lost sequence numbers, account for wraparound at 2^32 */ if (ftseq->seq_rcv > ftseq->seq_exp) ftseq->seq_lost = ftseq->seq_rcv - ftseq->seq_exp; else ftseq->seq_lost = (0xFFFFFFFF - ftseq->seq_exp) + ftseq->seq_rcv; ret = -1; } } #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT32(ph->flow_sequence); SWAPINT16(ph->count); #endif /* LITTLE_ENDIAN */ return ret; } /* ftpdu_check_seq */ /* * function: ftpdu_verify * * verify PDU is valid * count is not too high * version is valid * sizeof structure is valid * * iff the verification checks pass then ftpdu->ftver is initialized to the * pdu version * and ftpdu->decodef() is initialized to the decode function * * pdu must be in network byte order and is returned in network byte order * */ int ftpdu_verify(struct ftpdu *ftpdu) { struct ftpdu_header *ph; int size, ret; ret = -1; /* enough bytes to decode the count and version? */ if (ftpdu->bused < 4) goto ftpdu_verify_out_quick; ph = (struct ftpdu_header*)&ftpdu->buf; #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(ph->version); SWAPINT16(ph->count); #endif /* LITTLE_ENDIAN */ bzero(&ftpdu->ftv, sizeof (struct ftver)); ftpdu->ftv.s_version = FT_IO_SVERSION; switch (ph->version) { case 1: /* max PDU's in record */ if (ph->count > FT_PDU_V1_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v1, records) + ph->count * sizeof (struct ftrec_v1); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 1; ftpdu->decodef = fts3rec_pdu_v1_decode; break; case 5: /* max PDU's in record */ if (ph->count > FT_PDU_V5_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v5, records) + ph->count * sizeof (struct ftrec_v5); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 5; ftpdu->decodef = fts3rec_pdu_v5_decode; break; case 6: /* max PDU's in record */ if (ph->count > FT_PDU_V6_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v6, records) + ph->count * sizeof (struct ftrec_v6); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 6; ftpdu->decodef = fts3rec_pdu_v6_decode; break; case 7: /* max PDU's in record */ if (ph->count > FT_PDU_V7_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v7, records) + ph->count * sizeof (struct ftrec_v7); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 7; ftpdu->decodef = fts3rec_pdu_v7_decode; break; case 8: /* enough bytes to decode the aggregation method and version? */ if (ftpdu->bused < (offsetof(struct ftpdu_v8_gen, agg_version) + sizeof ((struct ftpdu_v8_gen *)0)->agg_version)) goto ftpdu_verify_out; ftpdu->ftv.agg_method = ((struct ftpdu_v8_gen *)&ftpdu->buf)->aggregation; ftpdu->ftv.agg_version = ((struct ftpdu_v8_gen *)&ftpdu->buf)->agg_version; /* XXX Juniper hack */ if (ftpdu->ftv.agg_version == 0) ftpdu->ftv.agg_version = 2; /* can only decode version 2 aggregation method packets */ if (ftpdu->ftv.agg_version != 2) goto ftpdu_verify_out; switch (ftpdu->ftv.agg_method) { case 1: /* max PDU's in record */ if (ph->count > FT_PDU_V8_1_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_1, records) + ph->count * sizeof (struct ftrec_v8_1); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 1; ftpdu->decodef = fts3rec_pdu_v8_1_decode; break; case 2: /* max PDU's in record */ if (ph->count > FT_PDU_V8_2_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_2, records) + ph->count * sizeof (struct ftrec_v8_2); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 2; ftpdu->decodef = fts3rec_pdu_v8_2_decode; break; case 3: /* max PDU's in record */ if (ph->count > FT_PDU_V8_3_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_3, records) + ph->count * sizeof (struct ftrec_v8_3); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 3; ftpdu->decodef = fts3rec_pdu_v8_3_decode; break; case 4: /* max PDU's in record */ if (ph->count > FT_PDU_V8_4_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_4, records) + ph->count * sizeof (struct ftrec_v8_4); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 4; ftpdu->decodef = fts3rec_pdu_v8_4_decode; break; case 5: /* max PDU's in record */ if (ph->count > FT_PDU_V8_5_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_5, records) + ph->count * sizeof (struct ftrec_v8_5); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 5; ftpdu->decodef = fts3rec_pdu_v8_5_decode; break; case 6: /* max PDU's in record */ if (ph->count > FT_PDU_V8_6_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_6, records) + ph->count * sizeof (struct ftrec_v8_6); /* PDU received size == PDU expected size? */ /* Catalyst pads exports, so use > instead of != */ if (size > ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 6; ftpdu->decodef = fts3rec_pdu_v8_6_decode; break; case 7: /* max PDU's in record */ if (ph->count > FT_PDU_V8_7_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_7, records) + ph->count * sizeof (struct ftrec_v8_7); /* PDU received size == PDU expected size? */ /* Catalyst pads exports, so use > instead of != */ if (size > ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 7; ftpdu->decodef = fts3rec_pdu_v8_7_decode; break; case 8: /* max PDU's in record */ if (ph->count > FT_PDU_V8_8_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_8, records) + ph->count * sizeof (struct ftrec_v8_8); /* PDU received size == PDU expected size? */ /* Catalyst pads exports, so use > instead of != */ if (size > ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 8; ftpdu->decodef = fts3rec_pdu_v8_8_decode; break; case 9: /* max PDU's in record */ if (ph->count > FT_PDU_V8_9_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_9, records) + ph->count * sizeof (struct ftrec_v8_9); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 9; ftpdu->decodef = fts3rec_pdu_v8_9_decode; break; case 10: /* max PDU's in record */ if (ph->count > FT_PDU_V8_10_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_10, records) + ph->count * sizeof (struct ftrec_v8_10); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 10; ftpdu->decodef = fts3rec_pdu_v8_10_decode; break; case 11: /* max PDU's in record */ if (ph->count > FT_PDU_V8_11_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_11, records) + ph->count * sizeof (struct ftrec_v8_11); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 11; ftpdu->decodef = fts3rec_pdu_v8_11_decode; break; case 12: /* max PDU's in record */ if (ph->count > FT_PDU_V8_12_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_12, records) + ph->count * sizeof (struct ftrec_v8_12); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 12; ftpdu->decodef = fts3rec_pdu_v8_12_decode; break; case 13: /* max PDU's in record */ if (ph->count > FT_PDU_V8_13_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_13, records) + ph->count * sizeof (struct ftrec_v8_13); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 13; ftpdu->decodef = fts3rec_pdu_v8_13_decode; break; case 14: /* max PDU's in record */ if (ph->count > FT_PDU_V8_14_MAXFLOWS) goto ftpdu_verify_out; size = offsetof(struct ftpdu_v8_14, records) + ph->count * sizeof (struct ftrec_v8_14); /* PDU received size == PDU expected size? */ if (size != ftpdu->bused) goto ftpdu_verify_out; ftpdu->ftv.d_version = 8; ftpdu->ftv.agg_method = 14; ftpdu->decodef = fts3rec_pdu_v8_14_decode; break; default: goto ftpdu_verify_out; } /* switch ph->agg_method */ break; /* 8 */ default: goto ftpdu_verify_out; } /* switch ph->version */ ret = 0; ftpdu_verify_out: #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(ph->version); SWAPINT16(ph->count); #endif /* LITTLE_ENDIAN */ ftpdu_verify_out_quick: return ret; } /* * function: fts3rec_pdu_decode * * pdu must be in network byte order. Caller must initialize * ftpdu->ftd.byte_order and ftpdu->ftd.as_sub * * stream records are returned in the byte order defined by * ftpdu->ftd.byte_order * * AS 0 is substituted with ftpdu->ftd.as_sub * * ftpdu_verify() must be called first to ensure the packet will * not overrun buffers and to initialize the decode jump table * * returns: # of stream records decoded. PDU is no longer valid * after calling (bytes may be swapped) */ int fts3rec_pdu_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; n = -1; bzero(&ftpdu->ftd.buf, FT_IO_MAXDECODE); /* take advantage that all pdu's have a common header. */ ph = (struct ftpdu_header*)&ftpdu->buf; /* * If this is a LITTLE_ENDIAN architecture ph->version and ph->count * need to be swapped before being used. * * ftpdu->ftd->exporter_ip and ftpdu->ftd->as_sub are in LITTLE_ENDIAN, the * rest of the PDU is BIG_ENDIAN. Flip these to BIG_ENDIAN to make the * conversions below easier (everything in the PDU is BIG) */ #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(ph->version); SWAPINT16(ph->count); SWAPINT16(ftpdu->ftd.as_sub); SWAPINT32(ftpdu->ftd.exporter_ip); #endif /* LITTLE_ENDIAN */ ftpdu->ftd.count = ph->count; /* decode it */ n = ftpdu->decodef(ftpdu); /* restore ftd */ #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(ftpdu->ftd.as_sub); SWAPINT32(ftpdu->ftd.exporter_ip); #endif /* LITTLE_ENDIAN */ return n; } /* fts3rec_pdu_decode */ /* * function: fts3rec_pdu_v1_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v1_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v1 *pdu_v1; struct fts3rec_v1 *rec_v1; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v1); pdu_v1 = (struct ftpdu_v1*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < ftpdu->ftd.count; ++n) { rec_v1 = (struct fts3rec_v1*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v1->unix_nsecs = ph->unix_nsecs; rec_v1->unix_secs = ph->unix_secs; rec_v1->sysUpTime = ph->sysUpTime; rec_v1->srcaddr = pdu_v1->records[n].srcaddr; rec_v1->dstaddr = pdu_v1->records[n].dstaddr; rec_v1->nexthop = pdu_v1->records[n].nexthop; rec_v1->input = pdu_v1->records[n].input; rec_v1->output = pdu_v1->records[n].output; rec_v1->dPkts = pdu_v1->records[n].dPkts; rec_v1->dOctets = pdu_v1->records[n].dOctets; rec_v1->First = pdu_v1->records[n].First; rec_v1->Last = pdu_v1->records[n].Last; rec_v1->dstport = pdu_v1->records[n].dstport; rec_v1->srcport = pdu_v1->records[n].srcport; rec_v1->prot = pdu_v1->records[n].prot; rec_v1->tos = pdu_v1->records[n].tos; rec_v1->tcp_flags = pdu_v1->records[n].flags; /* copy in exporter IP */ rec_v1->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v1->srcaddr); SWAPINT32(rec_v1->dstaddr); SWAPINT32(rec_v1->nexthop); SWAPINT16(rec_v1->input); SWAPINT16(rec_v1->output); SWAPINT32(rec_v1->dPkts); SWAPINT32(rec_v1->dOctets); SWAPINT32(rec_v1->First); SWAPINT32(rec_v1->Last); SWAPINT16(rec_v1->dstport); SWAPINT16(rec_v1->srcport); SWAPINT32(rec_v1->exaddr); } } /* for n */ return ftpdu->ftd.count; } /* fts3rec_pdu_v1_decode */ /* * function: fts3rec_pdu_v5_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v5_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v5 *pdu_v5; struct fts3rec_v5 *rec_v5; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v5); pdu_v5 = (struct ftpdu_v5*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v5->count; ++n) { rec_v5 = (struct fts3rec_v5*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v5->unix_nsecs = ph->unix_nsecs; rec_v5->unix_secs = ph->unix_secs; rec_v5->sysUpTime = ph->sysUpTime; rec_v5->engine_type = pdu_v5->engine_type; rec_v5->engine_id = pdu_v5->engine_id; rec_v5->srcaddr = pdu_v5->records[n].srcaddr; rec_v5->dstaddr = pdu_v5->records[n].dstaddr; rec_v5->nexthop = pdu_v5->records[n].nexthop; rec_v5->input = pdu_v5->records[n].input; rec_v5->output = pdu_v5->records[n].output; rec_v5->dPkts = pdu_v5->records[n].dPkts; rec_v5->dOctets = pdu_v5->records[n].dOctets; rec_v5->First = pdu_v5->records[n].First; rec_v5->Last = pdu_v5->records[n].Last; rec_v5->dstport = pdu_v5->records[n].dstport; rec_v5->srcport = pdu_v5->records[n].srcport; rec_v5->prot = pdu_v5->records[n].prot; rec_v5->tos = pdu_v5->records[n].tos; rec_v5->tcp_flags = pdu_v5->records[n].tcp_flags; rec_v5->src_as = pdu_v5->records[n].src_as; rec_v5->dst_as = pdu_v5->records[n].dst_as; rec_v5->src_mask = pdu_v5->records[n].src_mask; rec_v5->dst_mask = pdu_v5->records[n].dst_mask; /* perform AS substitution */ rec_v5->src_as = (rec_v5->src_as) ? rec_v5->src_as : ftpdu->ftd.as_sub; rec_v5->dst_as = (rec_v5->dst_as) ? rec_v5->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v5->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v5->srcaddr); SWAPINT32(rec_v5->dstaddr); SWAPINT32(rec_v5->nexthop); SWAPINT16(rec_v5->input); SWAPINT16(rec_v5->output); SWAPINT32(rec_v5->dPkts); SWAPINT32(rec_v5->dOctets); SWAPINT32(rec_v5->First); SWAPINT32(rec_v5->Last); SWAPINT16(rec_v5->dstport); SWAPINT16(rec_v5->srcport); SWAPINT16(rec_v5->src_as); SWAPINT16(rec_v5->dst_as); SWAPINT32(rec_v5->exaddr); } } /* for n */ return ftpdu->ftd.count; } /* fts3rec_pdu_v5_decode */ /* * function: fts3rec_pdu_v6_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v6_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v6 *pdu_v6; struct fts3rec_v6 *rec_v6; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v6); pdu_v6 = (struct ftpdu_v6*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v6->count; ++n) { rec_v6 = (struct fts3rec_v6*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v6->unix_nsecs = ph->unix_nsecs; rec_v6->unix_secs = ph->unix_secs; rec_v6->sysUpTime = ph->sysUpTime; rec_v6->engine_type = pdu_v6->engine_type; rec_v6->engine_type = pdu_v6->engine_id; rec_v6->srcaddr = pdu_v6->records[n].srcaddr; rec_v6->dstaddr = pdu_v6->records[n].dstaddr; rec_v6->nexthop = pdu_v6->records[n].nexthop; rec_v6->input = pdu_v6->records[n].input; rec_v6->output = pdu_v6->records[n].output; rec_v6->dPkts = pdu_v6->records[n].dPkts; rec_v6->dOctets = pdu_v6->records[n].dOctets; rec_v6->First = pdu_v6->records[n].First; rec_v6->Last = pdu_v6->records[n].Last; rec_v6->dstport = pdu_v6->records[n].dstport; rec_v6->srcport = pdu_v6->records[n].srcport; rec_v6->prot = pdu_v6->records[n].prot; rec_v6->tos = pdu_v6->records[n].tos; rec_v6->tcp_flags = pdu_v6->records[n].tcp_flags; rec_v6->src_as = pdu_v6->records[n].src_as; rec_v6->dst_as = pdu_v6->records[n].dst_as; rec_v6->src_mask = pdu_v6->records[n].src_mask; rec_v6->dst_mask = pdu_v6->records[n].dst_mask; /* perform AS substitution */ rec_v6->src_as = (rec_v6->src_as) ? rec_v6->src_as : ftpdu->ftd.as_sub; rec_v6->dst_as = (rec_v6->dst_as) ? rec_v6->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v6->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v6->srcaddr); SWAPINT32(rec_v6->dstaddr); SWAPINT32(rec_v6->nexthop); SWAPINT16(rec_v6->input); SWAPINT16(rec_v6->output); SWAPINT32(rec_v6->dPkts); SWAPINT32(rec_v6->dOctets); SWAPINT32(rec_v6->First); SWAPINT32(rec_v6->Last); SWAPINT16(rec_v6->dstport); SWAPINT16(rec_v6->srcport); SWAPINT16(rec_v6->src_as); SWAPINT16(rec_v6->dst_as); SWAPINT32(rec_v6->exaddr); } } /* for n */ return ftpdu->ftd.count; } /* fts3rec_pdu_v6_decode */ /* * function: fts3rec_pdu_v7_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v7_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v7 *pdu_v7; struct fts3rec_v7 *rec_v7; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v7); pdu_v7 = (struct ftpdu_v7*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v7->count; ++n) { rec_v7 = (struct fts3rec_v7*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v7->unix_nsecs = ph->unix_nsecs; rec_v7->unix_secs = ph->unix_secs; rec_v7->sysUpTime = ph->sysUpTime; rec_v7->engine_type = pdu_v7->engine_type; rec_v7->engine_type = pdu_v7->engine_id; rec_v7->srcaddr = pdu_v7->records[n].srcaddr; rec_v7->dstaddr = pdu_v7->records[n].dstaddr; rec_v7->nexthop = pdu_v7->records[n].nexthop; rec_v7->input = pdu_v7->records[n].input; rec_v7->output = pdu_v7->records[n].output; rec_v7->dPkts = pdu_v7->records[n].dPkts; rec_v7->dOctets = pdu_v7->records[n].dOctets; rec_v7->First = pdu_v7->records[n].First; rec_v7->Last = pdu_v7->records[n].Last; rec_v7->dstport = pdu_v7->records[n].dstport; rec_v7->srcport = pdu_v7->records[n].srcport; rec_v7->prot = pdu_v7->records[n].prot; rec_v7->tos = pdu_v7->records[n].tos; rec_v7->tcp_flags = pdu_v7->records[n].tcp_flags; rec_v7->src_as = pdu_v7->records[n].src_as; rec_v7->dst_as = pdu_v7->records[n].dst_as; rec_v7->src_mask = pdu_v7->records[n].src_mask; rec_v7->dst_mask = pdu_v7->records[n].dst_mask; rec_v7->router_sc = pdu_v7->records[n].router_sc; /* perform AS substitution */ rec_v7->src_as = (rec_v7->src_as) ? rec_v7->src_as : ftpdu->ftd.as_sub; rec_v7->dst_as = (rec_v7->dst_as) ? rec_v7->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v7->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v7->srcaddr); SWAPINT32(rec_v7->dstaddr); SWAPINT32(rec_v7->nexthop); SWAPINT16(rec_v7->input); SWAPINT16(rec_v7->output); SWAPINT32(rec_v7->dPkts); SWAPINT32(rec_v7->dOctets); SWAPINT32(rec_v7->First); SWAPINT32(rec_v7->Last); SWAPINT16(rec_v7->dstport); SWAPINT16(rec_v7->srcport); SWAPINT16(rec_v7->src_as); SWAPINT16(rec_v7->dst_as); SWAPINT32(rec_v7->router_sc); SWAPINT32(rec_v7->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v7_decode */ /* * function: fts3rec_pdu_v8_1_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_1_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_1 *pdu_v8_1; struct fts3rec_v8_1 *rec_v8_1; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_1); pdu_v8_1 = (struct ftpdu_v8_1*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_1->count; ++n) { rec_v8_1 = (struct fts3rec_v8_1*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_1->unix_nsecs = ph->unix_nsecs; rec_v8_1->unix_secs = ph->unix_secs; rec_v8_1->sysUpTime = ph->sysUpTime; rec_v8_1->engine_type = pdu_v8_1->engine_type; rec_v8_1->engine_type = pdu_v8_1->engine_id; rec_v8_1->dFlows = pdu_v8_1->records[n].dFlows; rec_v8_1->dPkts = pdu_v8_1->records[n].dPkts; rec_v8_1->dOctets = pdu_v8_1->records[n].dOctets; rec_v8_1->First = pdu_v8_1->records[n].First; rec_v8_1->Last = pdu_v8_1->records[n].Last; rec_v8_1->src_as = pdu_v8_1->records[n].src_as; rec_v8_1->dst_as = pdu_v8_1->records[n].dst_as; rec_v8_1->input = pdu_v8_1->records[n].input; rec_v8_1->output = pdu_v8_1->records[n].output; /* perform AS substitution */ rec_v8_1->src_as = (rec_v8_1->src_as) ? rec_v8_1->src_as : ftpdu->ftd.as_sub; rec_v8_1->dst_as = (rec_v8_1->dst_as) ? rec_v8_1->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_1->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_1->dFlows); SWAPINT32(rec_v8_1->dPkts); SWAPINT32(rec_v8_1->dOctets); SWAPINT32(rec_v8_1->First); SWAPINT32(rec_v8_1->Last); SWAPINT16(rec_v8_1->src_as); SWAPINT16(rec_v8_1->dst_as); SWAPINT16(rec_v8_1->input); SWAPINT16(rec_v8_1->output); SWAPINT32(rec_v8_1->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_1_decode */ /* * function: fts3rec_pdu_v8_2_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_2_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_2 *pdu_v8_2; struct fts3rec_v8_2 *rec_v8_2; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_2); pdu_v8_2 = (struct ftpdu_v8_2*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_2->count; ++n) { rec_v8_2 = (struct fts3rec_v8_2*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_2->unix_nsecs = ph->unix_nsecs; rec_v8_2->unix_secs = ph->unix_secs; rec_v8_2->sysUpTime = ph->sysUpTime; rec_v8_2->engine_type = pdu_v8_2->engine_type; rec_v8_2->engine_type = pdu_v8_2->engine_id; rec_v8_2->dFlows = pdu_v8_2->records[n].dFlows; rec_v8_2->dPkts = pdu_v8_2->records[n].dPkts; rec_v8_2->dOctets = pdu_v8_2->records[n].dOctets; rec_v8_2->First = pdu_v8_2->records[n].First; rec_v8_2->Last = pdu_v8_2->records[n].Last; rec_v8_2->srcport = pdu_v8_2->records[n].srcport; rec_v8_2->dstport = pdu_v8_2->records[n].dstport; rec_v8_2->prot = pdu_v8_2->records[n].prot; /* copy in exporter IP */ rec_v8_2->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_2->dFlows); SWAPINT32(rec_v8_2->dPkts); SWAPINT32(rec_v8_2->dOctets); SWAPINT32(rec_v8_2->First); SWAPINT32(rec_v8_2->Last); SWAPINT16(rec_v8_2->srcport); SWAPINT16(rec_v8_2->dstport); SWAPINT32(rec_v8_2->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_2_decode */ /* * function: fts3rec_pdu_v8_3_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_3_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_3 *pdu_v8_3; struct fts3rec_v8_3 *rec_v8_3; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_3); pdu_v8_3 = (struct ftpdu_v8_3*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_3->count; ++n) { rec_v8_3 = (struct fts3rec_v8_3*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_3->unix_nsecs = ph->unix_nsecs; rec_v8_3->unix_secs = ph->unix_secs; rec_v8_3->sysUpTime = ph->sysUpTime; rec_v8_3->engine_type = pdu_v8_3->engine_type; rec_v8_3->engine_type = pdu_v8_3->engine_id; rec_v8_3->dFlows = pdu_v8_3->records[n].dFlows; rec_v8_3->dPkts = pdu_v8_3->records[n].dPkts; rec_v8_3->dOctets = pdu_v8_3->records[n].dOctets; rec_v8_3->First = pdu_v8_3->records[n].First; rec_v8_3->Last = pdu_v8_3->records[n].Last; rec_v8_3->srcaddr = pdu_v8_3->records[n].src_prefix; rec_v8_3->src_mask = pdu_v8_3->records[n].src_mask; rec_v8_3->src_as = pdu_v8_3->records[n].src_as; rec_v8_3->input = pdu_v8_3->records[n].input; /* perform AS substitution */ rec_v8_3->src_as = (rec_v8_3->src_as) ? rec_v8_3->src_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_3->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_3->dFlows); SWAPINT32(rec_v8_3->dPkts); SWAPINT32(rec_v8_3->dOctets); SWAPINT32(rec_v8_3->First); SWAPINT32(rec_v8_3->Last); SWAPINT32(rec_v8_3->srcaddr); SWAPINT16(rec_v8_3->src_as); SWAPINT16(rec_v8_3->input); SWAPINT32(rec_v8_3->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_3_decode */ /* * function: fts3rec_pdu_v8_4_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_4_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_4 *pdu_v8_4; struct fts3rec_v8_4 *rec_v8_4; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_4); pdu_v8_4 = (struct ftpdu_v8_4*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_4->count; ++n) { rec_v8_4 = (struct fts3rec_v8_4*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_4->unix_nsecs = ph->unix_nsecs; rec_v8_4->unix_secs = ph->unix_secs; rec_v8_4->sysUpTime = ph->sysUpTime; rec_v8_4->engine_type = pdu_v8_4->engine_type; rec_v8_4->engine_type = pdu_v8_4->engine_id; rec_v8_4->dFlows = pdu_v8_4->records[n].dFlows; rec_v8_4->dPkts = pdu_v8_4->records[n].dPkts; rec_v8_4->dOctets = pdu_v8_4->records[n].dOctets; rec_v8_4->First = pdu_v8_4->records[n].First; rec_v8_4->Last = pdu_v8_4->records[n].Last; rec_v8_4->dstaddr = pdu_v8_4->records[n].dst_prefix; rec_v8_4->dst_mask = pdu_v8_4->records[n].dst_mask; rec_v8_4->dst_as = pdu_v8_4->records[n].dst_as; rec_v8_4->output = pdu_v8_4->records[n].output; /* perform AS substitution */ rec_v8_4->dst_as = (rec_v8_4->dst_as) ? rec_v8_4->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_4->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_4->dFlows); SWAPINT32(rec_v8_4->dPkts); SWAPINT32(rec_v8_4->dOctets); SWAPINT32(rec_v8_4->First); SWAPINT32(rec_v8_4->Last); SWAPINT32(rec_v8_4->dstaddr); SWAPINT16(rec_v8_4->dst_as); SWAPINT16(rec_v8_4->output); SWAPINT32(rec_v8_4->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_4_decode */ /* * function: fts3rec_pdu_v8_5_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_5_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_5 *pdu_v8_5; struct fts3rec_v8_5 *rec_v8_5; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_5); pdu_v8_5 = (struct ftpdu_v8_5*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_5->count; ++n) { rec_v8_5 = (struct fts3rec_v8_5*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_5->unix_nsecs = ph->unix_nsecs; rec_v8_5->unix_secs = ph->unix_secs; rec_v8_5->sysUpTime = ph->sysUpTime; rec_v8_5->engine_type = pdu_v8_5->engine_type; rec_v8_5->engine_type = pdu_v8_5->engine_id; rec_v8_5->dFlows = pdu_v8_5->records[n].dFlows; rec_v8_5->dPkts = pdu_v8_5->records[n].dPkts; rec_v8_5->dOctets = pdu_v8_5->records[n].dOctets; rec_v8_5->First = pdu_v8_5->records[n].First; rec_v8_5->Last = pdu_v8_5->records[n].Last; rec_v8_5->srcaddr = pdu_v8_5->records[n].src_prefix; rec_v8_5->dstaddr = pdu_v8_5->records[n].dst_prefix; rec_v8_5->src_mask = pdu_v8_5->records[n].src_mask; rec_v8_5->dst_mask = pdu_v8_5->records[n].dst_mask; rec_v8_5->src_as = pdu_v8_5->records[n].src_as; rec_v8_5->dst_as = pdu_v8_5->records[n].dst_as; rec_v8_5->input = pdu_v8_5->records[n].input; rec_v8_5->output = pdu_v8_5->records[n].output; /* perform AS substitution */ rec_v8_5->src_as = (rec_v8_5->src_as) ? rec_v8_5->src_as : ftpdu->ftd.as_sub; rec_v8_5->dst_as = (rec_v8_5->dst_as) ? rec_v8_5->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_5->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_5->dFlows); SWAPINT32(rec_v8_5->dPkts); SWAPINT32(rec_v8_5->dOctets); SWAPINT32(rec_v8_5->First); SWAPINT32(rec_v8_5->Last); SWAPINT32(rec_v8_5->srcaddr); SWAPINT32(rec_v8_5->dstaddr); SWAPINT16(rec_v8_5->src_as); SWAPINT16(rec_v8_5->dst_as); SWAPINT16(rec_v8_5->input); SWAPINT16(rec_v8_5->output); SWAPINT32(rec_v8_5->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_5_decode */ /* * function: fts3rec_pdu_v8_6_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_6_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_6 *pdu_v8_6; struct fts3rec_v8_6 *rec_v8_6; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_6); pdu_v8_6 = (struct ftpdu_v8_6*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_6->count; ++n) { rec_v8_6 = (struct fts3rec_v8_6*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_6->unix_nsecs = ph->unix_nsecs; rec_v8_6->unix_secs = ph->unix_secs; rec_v8_6->sysUpTime = ph->sysUpTime; rec_v8_6->engine_type = pdu_v8_6->engine_type; rec_v8_6->engine_type = pdu_v8_6->engine_id; rec_v8_6->dPkts = pdu_v8_6->records[n].dPkts; rec_v8_6->dOctets = pdu_v8_6->records[n].dOctets; rec_v8_6->First = pdu_v8_6->records[n].First; rec_v8_6->Last = pdu_v8_6->records[n].Last; rec_v8_6->dstaddr = pdu_v8_6->records[n].dstaddr; rec_v8_6->extra_pkts = pdu_v8_6->records[n].extra_pkts; rec_v8_6->router_sc = pdu_v8_6->records[n].router_sc; rec_v8_6->output = pdu_v8_6->records[n].output; rec_v8_6->tos = pdu_v8_6->records[n].tos; rec_v8_6->marked_tos = pdu_v8_6->records[n].marked_tos; /* copy in exporter IP */ rec_v8_6->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_6->dPkts); SWAPINT32(rec_v8_6->dOctets); SWAPINT32(rec_v8_6->First); SWAPINT32(rec_v8_6->Last); SWAPINT32(rec_v8_6->dstaddr); SWAPINT32(rec_v8_6->extra_pkts); SWAPINT32(rec_v8_6->router_sc); SWAPINT16(rec_v8_6->output); SWAPINT32(rec_v8_6->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_6_decode */ /* * function: fts3rec_pdu_v8_7_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_7_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_7 *pdu_v8_7; struct fts3rec_v8_7 *rec_v8_7; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_7); pdu_v8_7 = (struct ftpdu_v8_7*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_7->count; ++n) { rec_v8_7 = (struct fts3rec_v8_7*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_7->unix_nsecs = ph->unix_nsecs; rec_v8_7->unix_secs = ph->unix_secs; rec_v8_7->sysUpTime = ph->sysUpTime; rec_v8_7->engine_type = pdu_v8_7->engine_type; rec_v8_7->engine_type = pdu_v8_7->engine_id; rec_v8_7->dPkts = pdu_v8_7->records[n].dPkts; rec_v8_7->dOctets = pdu_v8_7->records[n].dOctets; rec_v8_7->First = pdu_v8_7->records[n].First; rec_v8_7->Last = pdu_v8_7->records[n].Last; rec_v8_7->dstaddr = pdu_v8_7->records[n].dstaddr; rec_v8_7->srcaddr = pdu_v8_7->records[n].srcaddr; rec_v8_7->extra_pkts = pdu_v8_7->records[n].extra_pkts; rec_v8_7->router_sc = pdu_v8_7->records[n].router_sc; rec_v8_7->output = pdu_v8_7->records[n].output; rec_v8_7->input = pdu_v8_7->records[n].input; rec_v8_7->tos = pdu_v8_7->records[n].tos; rec_v8_7->marked_tos = pdu_v8_7->records[n].marked_tos; /* copy in exporter IP */ rec_v8_7->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_7->dPkts); SWAPINT32(rec_v8_7->dOctets); SWAPINT32(rec_v8_7->First); SWAPINT32(rec_v8_7->Last); SWAPINT32(rec_v8_7->dstaddr); SWAPINT32(rec_v8_7->srcaddr); SWAPINT32(rec_v8_7->extra_pkts); SWAPINT32(rec_v8_7->router_sc); SWAPINT16(rec_v8_7->output); SWAPINT16(rec_v8_7->input); SWAPINT32(rec_v8_7->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_7_decode */ /* * function: fts3rec_pdu_v8_8_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_8_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_8 *pdu_v8_8; struct fts3rec_v8_8 *rec_v8_8; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_8); pdu_v8_8 = (struct ftpdu_v8_8*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_8->count; ++n) { rec_v8_8 = (struct fts3rec_v8_8*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_8->unix_nsecs = ph->unix_nsecs; rec_v8_8->unix_secs = ph->unix_secs; rec_v8_8->sysUpTime = ph->sysUpTime; rec_v8_8->engine_type = pdu_v8_8->engine_type; rec_v8_8->engine_type = pdu_v8_8->engine_id; rec_v8_8->dstaddr = pdu_v8_8->records[n].dstaddr; rec_v8_8->srcaddr = pdu_v8_8->records[n].srcaddr; rec_v8_8->dstport = pdu_v8_8->records[n].dstport; rec_v8_8->srcport = pdu_v8_8->records[n].srcport; rec_v8_8->dPkts = pdu_v8_8->records[n].dPkts; rec_v8_8->dOctets = pdu_v8_8->records[n].dOctets; rec_v8_8->First = pdu_v8_8->records[n].First; rec_v8_8->Last = pdu_v8_8->records[n].Last; rec_v8_8->output = pdu_v8_8->records[n].output; rec_v8_8->input = pdu_v8_8->records[n].input; rec_v8_8->tos = pdu_v8_8->records[n].tos; rec_v8_8->prot = pdu_v8_8->records[n].prot; rec_v8_8->marked_tos = pdu_v8_8->records[n].marked_tos; rec_v8_8->extra_pkts = pdu_v8_8->records[n].extra_pkts; rec_v8_8->router_sc = pdu_v8_8->records[n].router_sc; /* copy in exporter IP */ rec_v8_8->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_8->dstaddr); SWAPINT32(rec_v8_8->srcaddr); SWAPINT16(rec_v8_8->dstport); SWAPINT16(rec_v8_8->srcport); SWAPINT32(rec_v8_8->dPkts); SWAPINT32(rec_v8_8->dOctets); SWAPINT32(rec_v8_8->First); SWAPINT32(rec_v8_8->Last); SWAPINT16(rec_v8_8->output); SWAPINT16(rec_v8_8->input); SWAPINT32(rec_v8_8->extra_pkts); SWAPINT32(rec_v8_8->router_sc); SWAPINT32(rec_v8_8->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_8_decode */ /* * function: fts3rec_pdu_v8_9_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_9_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_9 *pdu_v8_9; struct fts3rec_v8_9 *rec_v8_9; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_9); pdu_v8_9 = (struct ftpdu_v8_9*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_9->count; ++n) { rec_v8_9 = (struct fts3rec_v8_9*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_9->unix_nsecs = ph->unix_nsecs; rec_v8_9->unix_secs = ph->unix_secs; rec_v8_9->sysUpTime = ph->sysUpTime; rec_v8_9->engine_type = pdu_v8_9->engine_type; rec_v8_9->engine_type = pdu_v8_9->engine_id; rec_v8_9->dFlows = pdu_v8_9->records[n].dFlows; rec_v8_9->dPkts = pdu_v8_9->records[n].dPkts; rec_v8_9->dOctets = pdu_v8_9->records[n].dOctets; rec_v8_9->First = pdu_v8_9->records[n].First; rec_v8_9->Last = pdu_v8_9->records[n].Last; rec_v8_9->src_as = pdu_v8_9->records[n].src_as; rec_v8_9->dst_as = pdu_v8_9->records[n].dst_as; rec_v8_9->input = pdu_v8_9->records[n].input; rec_v8_9->output = pdu_v8_9->records[n].output; rec_v8_9->tos = pdu_v8_9->records[n].tos; /* perform AS substitution */ rec_v8_9->src_as = (rec_v8_9->src_as) ? rec_v8_9->src_as : ftpdu->ftd.as_sub; rec_v8_9->dst_as = (rec_v8_9->dst_as) ? rec_v8_9->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_9->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_9->dFlows); SWAPINT32(rec_v8_9->dPkts); SWAPINT32(rec_v8_9->dOctets); SWAPINT32(rec_v8_9->First); SWAPINT32(rec_v8_9->Last); SWAPINT16(rec_v8_9->src_as); SWAPINT16(rec_v8_9->dst_as); SWAPINT16(rec_v8_9->input); SWAPINT16(rec_v8_9->output); SWAPINT32(rec_v8_9->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_9_decode */ /* * function: fts3rec_pdu_v8_10_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_10_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_10 *pdu_v8_10; struct fts3rec_v8_10 *rec_v8_10; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_10); pdu_v8_10 = (struct ftpdu_v8_10*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_10->count; ++n) { rec_v8_10 = (struct fts3rec_v8_10*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_10->unix_nsecs = ph->unix_nsecs; rec_v8_10->unix_secs = ph->unix_secs; rec_v8_10->sysUpTime = ph->sysUpTime; rec_v8_10->engine_type = pdu_v8_10->engine_type; rec_v8_10->engine_type = pdu_v8_10->engine_id; rec_v8_10->dFlows = pdu_v8_10->records[n].dFlows; rec_v8_10->dPkts = pdu_v8_10->records[n].dPkts; rec_v8_10->dOctets = pdu_v8_10->records[n].dOctets; rec_v8_10->First = pdu_v8_10->records[n].First; rec_v8_10->Last = pdu_v8_10->records[n].Last; rec_v8_10->prot = pdu_v8_10->records[n].prot; rec_v8_10->tos = pdu_v8_10->records[n].tos; rec_v8_10->srcport = pdu_v8_10->records[n].srcport; rec_v8_10->dstport = pdu_v8_10->records[n].dstport; rec_v8_10->prot = pdu_v8_10->records[n].prot; /* copy in exporter IP */ rec_v8_10->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_10->dFlows); SWAPINT32(rec_v8_10->dPkts); SWAPINT32(rec_v8_10->dOctets); SWAPINT32(rec_v8_10->First); SWAPINT32(rec_v8_10->Last); SWAPINT16(rec_v8_10->srcport); SWAPINT16(rec_v8_10->dstport); SWAPINT32(rec_v8_10->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_10_decode */ /* * function: fts3rec_pdu_v8_11_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_11_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_11 *pdu_v8_11; struct fts3rec_v8_11 *rec_v8_11; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_11); pdu_v8_11 = (struct ftpdu_v8_11*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_11->count; ++n) { rec_v8_11 = (struct fts3rec_v8_11*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_11->unix_nsecs = ph->unix_nsecs; rec_v8_11->unix_secs = ph->unix_secs; rec_v8_11->sysUpTime = ph->sysUpTime; rec_v8_11->engine_type = pdu_v8_11->engine_type; rec_v8_11->engine_type = pdu_v8_11->engine_id; rec_v8_11->dFlows = pdu_v8_11->records[n].dFlows; rec_v8_11->dPkts = pdu_v8_11->records[n].dPkts; rec_v8_11->dOctets = pdu_v8_11->records[n].dOctets; rec_v8_11->First = pdu_v8_11->records[n].First; rec_v8_11->Last = pdu_v8_11->records[n].Last; rec_v8_11->srcaddr = pdu_v8_11->records[n].src_prefix; rec_v8_11->src_mask = pdu_v8_11->records[n].src_mask; rec_v8_11->tos = pdu_v8_11->records[n].tos; rec_v8_11->src_as = pdu_v8_11->records[n].src_as; rec_v8_11->input = pdu_v8_11->records[n].input; /* perform AS substitution */ rec_v8_11->src_as = (rec_v8_11->src_as) ? rec_v8_11->src_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_11->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_11->dFlows); SWAPINT32(rec_v8_11->dPkts); SWAPINT32(rec_v8_11->dOctets); SWAPINT32(rec_v8_11->First); SWAPINT32(rec_v8_11->Last); SWAPINT32(rec_v8_11->srcaddr); SWAPINT16(rec_v8_11->src_as); SWAPINT16(rec_v8_11->input); SWAPINT32(rec_v8_11->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_11_decode */ /* * function: fts3rec_pdu_v8_12_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_12_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_12 *pdu_v8_12; struct fts3rec_v8_12 *rec_v8_12; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_12); pdu_v8_12 = (struct ftpdu_v8_12*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_12->count; ++n) { rec_v8_12 = (struct fts3rec_v8_12*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_12->unix_nsecs = ph->unix_nsecs; rec_v8_12->unix_secs = ph->unix_secs; rec_v8_12->sysUpTime = ph->sysUpTime; rec_v8_12->engine_type = pdu_v8_12->engine_type; rec_v8_12->engine_type = pdu_v8_12->engine_id; rec_v8_12->dFlows = pdu_v8_12->records[n].dFlows; rec_v8_12->dPkts = pdu_v8_12->records[n].dPkts; rec_v8_12->dOctets = pdu_v8_12->records[n].dOctets; rec_v8_12->First = pdu_v8_12->records[n].First; rec_v8_12->Last = pdu_v8_12->records[n].Last; rec_v8_12->dstaddr = pdu_v8_12->records[n].dst_prefix; rec_v8_12->tos = pdu_v8_12->records[n].tos; rec_v8_12->dst_mask = pdu_v8_12->records[n].dst_mask; rec_v8_12->dst_as = pdu_v8_12->records[n].dst_as; rec_v8_12->output = pdu_v8_12->records[n].output; /* perform AS substitution */ rec_v8_12->dst_as = (rec_v8_12->dst_as) ? rec_v8_12->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_12->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_12->dFlows); SWAPINT32(rec_v8_12->dPkts); SWAPINT32(rec_v8_12->dOctets); SWAPINT32(rec_v8_12->First); SWAPINT32(rec_v8_12->Last); SWAPINT32(rec_v8_12->dstaddr); SWAPINT16(rec_v8_12->dst_as); SWAPINT16(rec_v8_12->output); SWAPINT32(rec_v8_12->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_12_decode */ /* * function: fts3rec_pdu_v8_13_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_13_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_13 *pdu_v8_13; struct fts3rec_v8_13 *rec_v8_13; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_13); pdu_v8_13 = (struct ftpdu_v8_13*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_13->count; ++n) { rec_v8_13 = (struct fts3rec_v8_13*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_13->unix_nsecs = ph->unix_nsecs; rec_v8_13->unix_secs = ph->unix_secs; rec_v8_13->sysUpTime = ph->sysUpTime; rec_v8_13->engine_type = pdu_v8_13->engine_type; rec_v8_13->engine_type = pdu_v8_13->engine_id; rec_v8_13->dFlows = pdu_v8_13->records[n].dFlows; rec_v8_13->dPkts = pdu_v8_13->records[n].dPkts; rec_v8_13->dOctets = pdu_v8_13->records[n].dOctets; rec_v8_13->First = pdu_v8_13->records[n].First; rec_v8_13->Last = pdu_v8_13->records[n].Last; rec_v8_13->srcaddr = pdu_v8_13->records[n].src_prefix; rec_v8_13->dstaddr = pdu_v8_13->records[n].dst_prefix; rec_v8_13->src_mask = pdu_v8_13->records[n].src_mask; rec_v8_13->dst_mask = pdu_v8_13->records[n].dst_mask; rec_v8_13->tos = pdu_v8_13->records[n].tos; rec_v8_13->src_as = pdu_v8_13->records[n].src_as; rec_v8_13->dst_as = pdu_v8_13->records[n].dst_as; rec_v8_13->input = pdu_v8_13->records[n].input; rec_v8_13->output = pdu_v8_13->records[n].output; /* perform AS substitution */ rec_v8_13->src_as = (rec_v8_13->src_as) ? rec_v8_13->src_as : ftpdu->ftd.as_sub; rec_v8_13->dst_as = (rec_v8_13->dst_as) ? rec_v8_13->dst_as : ftpdu->ftd.as_sub; /* copy in exporter IP */ rec_v8_13->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_13->dFlows); SWAPINT32(rec_v8_13->dPkts); SWAPINT32(rec_v8_13->dOctets); SWAPINT32(rec_v8_13->First); SWAPINT32(rec_v8_13->Last); SWAPINT32(rec_v8_13->srcaddr); SWAPINT32(rec_v8_13->dstaddr); SWAPINT16(rec_v8_13->src_as); SWAPINT16(rec_v8_13->dst_as); SWAPINT16(rec_v8_13->input); SWAPINT16(rec_v8_13->output); SWAPINT32(rec_v8_13->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_13_decode */ /* * function: fts3rec_pdu_v8_14_decode * * subfunction to fts3rec_pdu_decode * * returns: # of stream records decoded */ int fts3rec_pdu_v8_14_decode(struct ftpdu *ftpdu) { int n; struct ftpdu_header *ph; struct ftpdu_v8_14 *pdu_v8_14; struct fts3rec_v8_14 *rec_v8_14; ftpdu->ftd.rec_size = sizeof (struct fts3rec_v8_14); pdu_v8_14 = (struct ftpdu_v8_14*)&ftpdu->buf; ph = (struct ftpdu_header*)&ftpdu->buf; /* preswap */ if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(ph->sysUpTime); SWAPINT32(ph->unix_secs); SWAPINT32(ph->unix_nsecs); } for (n = 0; n < pdu_v8_14->count; ++n) { rec_v8_14 = (struct fts3rec_v8_14*) (ftpdu->ftd.buf + (n*ftpdu->ftd.rec_size)); rec_v8_14->unix_nsecs = ph->unix_nsecs; rec_v8_14->unix_secs = ph->unix_secs; rec_v8_14->sysUpTime = ph->sysUpTime; rec_v8_14->engine_type = pdu_v8_14->engine_type; rec_v8_14->engine_type = pdu_v8_14->engine_id; rec_v8_14->dFlows = pdu_v8_14->records[n].dFlows; rec_v8_14->dPkts = pdu_v8_14->records[n].dPkts; rec_v8_14->dOctets = pdu_v8_14->records[n].dOctets; rec_v8_14->First = pdu_v8_14->records[n].First; rec_v8_14->Last = pdu_v8_14->records[n].Last; rec_v8_14->srcaddr = pdu_v8_14->records[n].src_prefix; rec_v8_14->dstaddr = pdu_v8_14->records[n].dst_prefix; rec_v8_14->src_mask = pdu_v8_14->records[n].src_mask; rec_v8_14->dst_mask = pdu_v8_14->records[n].dst_mask; rec_v8_14->tos = pdu_v8_14->records[n].tos; rec_v8_14->prot = pdu_v8_14->records[n].prot; rec_v8_14->srcport = pdu_v8_14->records[n].srcport; rec_v8_14->dstport = pdu_v8_14->records[n].dstport; rec_v8_14->input = pdu_v8_14->records[n].input; rec_v8_14->output = pdu_v8_14->records[n].output; /* copy in exporter IP */ rec_v8_14->exaddr = ftpdu->ftd.exporter_ip; if (ftpdu->ftd.byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(rec_v8_14->dFlows); SWAPINT32(rec_v8_14->dPkts); SWAPINT32(rec_v8_14->dOctets); SWAPINT32(rec_v8_14->First); SWAPINT32(rec_v8_14->Last); SWAPINT32(rec_v8_14->srcaddr); SWAPINT32(rec_v8_14->dstaddr); SWAPINT16(rec_v8_14->srcport); SWAPINT16(rec_v8_14->dstport); SWAPINT16(rec_v8_14->input); SWAPINT16(rec_v8_14->output); SWAPINT32(rec_v8_14->exaddr); } } /* for */ return ftpdu->ftd.count; } /* fts3rec_pdu_v8_14_decode */ flow-tools-0.68/lib/ftencode.c0000644000076600007660000014416607622602461011773 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftencode.c,v 1.13 2003/02/13 02:38:41 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif /* * function: ftencode_init * * Initialize a ftencode structure, must be called before * first attempt to encode pdu with fts3rec_*_encode() */ void ftencode_init(struct ftencode *enc, int flags) { bzero(enc, sizeof (struct ftencode)); enc->flags = flags; if (enc->flags & FT_ENC_FLAGS_IPHDR) enc->buf_enc = (char*)&enc->buf + FT_ENC_IPHDR_LEN; else enc->buf_enc = (char*)&enc->buf; } /* ftencode_init */ /* * function: ftencode_reset * * Use between successive calls to f2s2rec_*_encode() */ void ftencode_reset(struct ftencode *enc) { int len; if (enc->flags & FT_ENC_FLAGS_IPHDR) len = FT_IO_MAXENCODE - FT_ENC_IPHDR_LEN; else len = FT_IO_MAXENCODE; bzero (enc->buf_enc, len); enc->buf_size = 0; } /* ftencode_reset */ /* * function: ftencode_sum_data * * calculate checksum of PDU (just the data) * */ void ftencode_sum_data(struct ftencode *enc) { int size; u_short *word; int sum; sum = 0; size = enc->buf_size; word = (u_short*)enc->buf_enc; for (size = enc->buf_size; size > 1; size -=2) sum += *word++; /* odd byte */ if (size == 1) sum += htons(*(u_char*)word<<8); enc->d_sum = sum; } /* ftencode_cksum_data */ /* * function: fts3rec_pdu_encode * * Encode any type f2s2rec_* into a PDU * wrapper function for other f2s2rec_pdu_*_encode * * Note ftencode_init() must be called on the ftencode * first, and ftencode_reset() must be called after each * PDU is processed by the caller before calling this * function again. * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_encode(struct ftencode *enc, void *rec) { switch (enc->ver.d_version) { case 1: return (fts3rec_pdu_v1_encode(enc, (struct fts3rec_v1*)rec)); break; case 5: return (fts3rec_pdu_v5_encode(enc, (struct fts3rec_v5*)rec)); break; case 6: return (fts3rec_pdu_v6_encode(enc, (struct fts3rec_v6*)rec)); break; case 7: return (fts3rec_pdu_v7_encode(enc, (struct fts3rec_v7*)rec)); break; case 8: switch (enc->ver.agg_method) { case 1: return (fts3rec_pdu_v8_1_encode(enc, (struct fts3rec_v8_1*)rec)); break; case 2: return (fts3rec_pdu_v8_2_encode(enc, (struct fts3rec_v8_2*)rec)); break; case 3: return (fts3rec_pdu_v8_3_encode(enc, (struct fts3rec_v8_3*)rec)); break; case 4: return (fts3rec_pdu_v8_4_encode(enc, (struct fts3rec_v8_4*)rec)); break; case 5: return (fts3rec_pdu_v8_5_encode(enc, (struct fts3rec_v8_5*)rec)); break; case 6: return (fts3rec_pdu_v8_6_encode(enc, (struct fts3rec_v8_6*)rec)); break; case 7: return (fts3rec_pdu_v8_7_encode(enc, (struct fts3rec_v8_7*)rec)); break; case 8: return (fts3rec_pdu_v8_8_encode(enc, (struct fts3rec_v8_8*)rec)); break; case 9: return (fts3rec_pdu_v8_9_encode(enc, (struct fts3rec_v8_9*)rec)); break; case 10: return (fts3rec_pdu_v8_10_encode(enc, (struct fts3rec_v8_10*)rec)); break; case 11: return (fts3rec_pdu_v8_11_encode(enc, (struct fts3rec_v8_11*)rec)); break; case 12: return (fts3rec_pdu_v8_12_encode(enc, (struct fts3rec_v8_12*)rec)); break; case 13: return (fts3rec_pdu_v8_13_encode(enc, (struct fts3rec_v8_13*)rec)); break; case 14: return (fts3rec_pdu_v8_14_encode(enc, (struct fts3rec_v8_14*)rec)); break; } /* switch */ break; } /* switch */ return -1; } /* fts3rec_pdu_encode */ /* * function: fts3rec_pdu_v1_encode * * Encode a fts3rec into a version 1 PDU * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v1_encode(struct ftencode *enc, struct fts3rec_v1 *rec_v1) { struct ftpdu_v1 *pdu_v1; int i; pdu_v1 = (struct ftpdu_v1*) enc->buf_enc; i = pdu_v1->count; /* space to encode more ? */ if (i >= FT_PDU_V1_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v1->version = 1; pdu_v1->sysUpTime = rec_v1->sysUpTime; pdu_v1->unix_secs = rec_v1->unix_secs; pdu_v1->unix_nsecs = rec_v1->unix_nsecs; enc->buf_size = 16; /* pdu header size */ } else { /* sysUpTime, unix_secs, and unix_nsecs must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v1->sysUpTime != rec_v1->sysUpTime) || (pdu_v1->unix_secs != rec_v1->unix_secs) || (pdu_v1->unix_nsecs != rec_v1->unix_nsecs)) return -1; } pdu_v1->records[i].srcaddr = rec_v1->srcaddr; pdu_v1->records[i].dstaddr = rec_v1->dstaddr; pdu_v1->records[i].nexthop = rec_v1->nexthop; pdu_v1->records[i].input = rec_v1->input; pdu_v1->records[i].output = rec_v1->output; pdu_v1->records[i].dPkts = rec_v1->dPkts; pdu_v1->records[i].dOctets = rec_v1->dOctets; pdu_v1->records[i].First = rec_v1->First; pdu_v1->records[i].Last = rec_v1->Last; pdu_v1->records[i].srcport = rec_v1->srcport; pdu_v1->records[i].dstport = rec_v1->dstport; pdu_v1->records[i].prot = rec_v1->prot; pdu_v1->records[i].tos = rec_v1->tos; pdu_v1->records[i].flags = rec_v1->tcp_flags; pdu_v1->count ++; enc->buf_size += sizeof (struct ftrec_v1); if (pdu_v1->count >= FT_PDU_V1_MAXFLOWS) return 0; else return 1; } /* * function: fts3rec_pdu_v5_encode * * Encode a fts3rec into a version 5 PDU * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v5_encode(struct ftencode *enc, struct fts3rec_v5 *rec_v5) { struct ftpdu_v5 *pdu_v5; u_int seq_index; int i; pdu_v5 = (struct ftpdu_v5*) enc->buf_enc; i = pdu_v5->count; /* index to sequence # */ seq_index = rec_v5->engine_id<<8 | rec_v5->engine_type; /* space to encode more ? */ if (i >= FT_PDU_V5_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v5->version = 5; pdu_v5->sysUpTime = rec_v5->sysUpTime; pdu_v5->unix_secs = rec_v5->unix_secs; pdu_v5->unix_nsecs = rec_v5->unix_nsecs; pdu_v5->engine_type = rec_v5->engine_type; pdu_v5->engine_id = rec_v5->engine_id; pdu_v5->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 24; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v5->sysUpTime != rec_v5->sysUpTime) || (pdu_v5->unix_secs != rec_v5->unix_secs) || (pdu_v5->unix_nsecs != rec_v5->unix_nsecs) || (pdu_v5->engine_id != rec_v5->engine_id) || (pdu_v5->engine_type != rec_v5->engine_type)) return -1; } pdu_v5->records[i].srcaddr = rec_v5->srcaddr; pdu_v5->records[i].dstaddr = rec_v5->dstaddr; pdu_v5->records[i].nexthop = rec_v5->nexthop; pdu_v5->records[i].input = rec_v5->input; pdu_v5->records[i].output = rec_v5->output; pdu_v5->records[i].dPkts = rec_v5->dPkts; pdu_v5->records[i].dOctets = rec_v5->dOctets; pdu_v5->records[i].First = rec_v5->First; pdu_v5->records[i].Last = rec_v5->Last; pdu_v5->records[i].srcport = rec_v5->srcport; pdu_v5->records[i].dstport = rec_v5->dstport; pdu_v5->records[i].prot = rec_v5->prot; pdu_v5->records[i].tos = rec_v5->tos; pdu_v5->records[i].tcp_flags = rec_v5->tcp_flags; pdu_v5->records[i].src_as = rec_v5->src_as; pdu_v5->records[i].dst_as = rec_v5->dst_as; pdu_v5->records[i].src_mask = rec_v5->src_mask; pdu_v5->records[i].dst_mask = rec_v5->dst_mask; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v5->count ++; enc->buf_size += sizeof (struct ftrec_v5); if (pdu_v5->count >= FT_PDU_V5_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v5_encode */ /* * function: fts3rec_pdu_v6_encode * * Encode a fts3rec into a version 6 PDU * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v6_encode(struct ftencode *enc, struct fts3rec_v6 *rec_v6) { struct ftpdu_v6 *pdu_v6; u_int seq_index; int i; pdu_v6 = (struct ftpdu_v6*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v6->engine_id<<8 | rec_v6->engine_type; i = pdu_v6->count; /* space to encode more ? */ if (i >= FT_PDU_V6_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v6->version = 6; pdu_v6->sysUpTime = rec_v6->sysUpTime; pdu_v6->unix_secs = rec_v6->unix_secs; pdu_v6->unix_nsecs = rec_v6->unix_nsecs; pdu_v6->engine_type = rec_v6->engine_type; pdu_v6->engine_id = rec_v6->engine_id; pdu_v6->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 24; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v6->sysUpTime != rec_v6->sysUpTime) || (pdu_v6->unix_secs != rec_v6->unix_secs) || (pdu_v6->unix_nsecs != rec_v6->unix_nsecs) || (pdu_v6->engine_id != rec_v6->engine_id) || (pdu_v6->engine_type != rec_v6->engine_type)) return -1; } pdu_v6->records[i].srcaddr = rec_v6->srcaddr; pdu_v6->records[i].dstaddr = rec_v6->dstaddr; pdu_v6->records[i].nexthop = rec_v6->nexthop; pdu_v6->records[i].input = rec_v6->input; pdu_v6->records[i].output = rec_v6->output; pdu_v6->records[i].dPkts = rec_v6->dPkts; pdu_v6->records[i].dOctets = rec_v6->dOctets; pdu_v6->records[i].First = rec_v6->First; pdu_v6->records[i].Last = rec_v6->Last; pdu_v6->records[i].srcport = rec_v6->srcport; pdu_v6->records[i].dstport = rec_v6->dstport; pdu_v6->records[i].prot = rec_v6->prot; pdu_v6->records[i].tos = rec_v6->tos; pdu_v6->records[i].tcp_flags = rec_v6->tcp_flags; pdu_v6->records[i].src_as = rec_v6->src_as; pdu_v6->records[i].dst_as = rec_v6->dst_as; pdu_v6->records[i].src_mask = rec_v6->src_mask; pdu_v6->records[i].dst_mask = rec_v6->dst_mask; pdu_v6->records[i].in_encaps = rec_v6->in_encaps; pdu_v6->records[i].out_encaps = rec_v6->out_encaps; pdu_v6->records[i].peer_nexthop = rec_v6->peer_nexthop; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v6->count ++; enc->buf_size += sizeof (struct ftrec_v6); if (pdu_v6->count >= FT_PDU_V6_MAXFLOWS) return 0; else return 1; } /* * function: fts3rec_pdu_v7_encode * * Encode a fts3rec into a version 7 PDU * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v7_encode(struct ftencode *enc, struct fts3rec_v7 *rec_v7) { struct ftpdu_v7 *pdu_v7; u_int seq_index; int i; pdu_v7 = (struct ftpdu_v7*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v7->engine_id<<8 | rec_v7->engine_type; i = pdu_v7->count; /* space to encode more ? */ if (i >= FT_PDU_V7_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v7->version = 7; pdu_v7->sysUpTime = rec_v7->sysUpTime; pdu_v7->unix_secs = rec_v7->unix_secs; pdu_v7->unix_nsecs = rec_v7->unix_nsecs; pdu_v7->engine_type = rec_v7->engine_type; pdu_v7->engine_id = rec_v7->engine_id; pdu_v7->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 24; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v7->sysUpTime != rec_v7->sysUpTime) || (pdu_v7->unix_secs != rec_v7->unix_secs) || (pdu_v7->unix_nsecs != rec_v7->unix_nsecs) || (pdu_v7->engine_id != rec_v7->engine_id) || (pdu_v7->engine_type != rec_v7->engine_type)) return -1; } pdu_v7->records[i].srcaddr = rec_v7->srcaddr; pdu_v7->records[i].dstaddr = rec_v7->dstaddr; pdu_v7->records[i].nexthop = rec_v7->nexthop; pdu_v7->records[i].input = rec_v7->input; pdu_v7->records[i].output = rec_v7->output; pdu_v7->records[i].dPkts = rec_v7->dPkts; pdu_v7->records[i].dOctets = rec_v7->dOctets; pdu_v7->records[i].First = rec_v7->First; pdu_v7->records[i].Last = rec_v7->Last; pdu_v7->records[i].srcport = rec_v7->srcport; pdu_v7->records[i].dstport = rec_v7->dstport; pdu_v7->records[i].prot = rec_v7->prot; pdu_v7->records[i].tos = rec_v7->tos; pdu_v7->records[i].tcp_flags = rec_v7->tcp_flags; pdu_v7->records[i].src_as = rec_v7->src_as; pdu_v7->records[i].dst_as = rec_v7->dst_as; pdu_v7->records[i].src_mask = rec_v7->src_mask; pdu_v7->records[i].dst_mask = rec_v7->dst_mask; pdu_v7->records[i].router_sc = rec_v7->router_sc; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v7->count ++; enc->buf_size += sizeof (struct ftrec_v7); if (pdu_v7->count >= FT_PDU_V7_MAXFLOWS) return 0; else return 1; } /* * function: fts3rec_pdu_v8_1_encode * * Encode a fts3rec into a version 8 Agg method 1 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_1_encode(struct ftencode *enc, struct fts3rec_v8_1 *rec_v8_1) { struct ftpdu_v8_1 *pdu_v8_1; u_int seq_index; int i; pdu_v8_1 = (struct ftpdu_v8_1*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_1->engine_id<<8 | rec_v8_1->engine_type; i = pdu_v8_1->count; /* space to encode more ? */ if (i >= FT_PDU_V8_1_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_1->version = 8; pdu_v8_1->sysUpTime = rec_v8_1->sysUpTime; pdu_v8_1->unix_secs = rec_v8_1->unix_secs; pdu_v8_1->unix_nsecs = rec_v8_1->unix_nsecs; pdu_v8_1->engine_type = rec_v8_1->engine_type; pdu_v8_1->engine_id = rec_v8_1->engine_id; pdu_v8_1->aggregation = 1; pdu_v8_1->agg_version = 2; pdu_v8_1->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_1->sysUpTime != rec_v8_1->sysUpTime) || (pdu_v8_1->unix_secs != rec_v8_1->unix_secs) || (pdu_v8_1->unix_nsecs != rec_v8_1->unix_nsecs) || (pdu_v8_1->engine_id != rec_v8_1->engine_id) || (pdu_v8_1->engine_type != rec_v8_1->engine_type)) return -1; } pdu_v8_1->records[i].dFlows = rec_v8_1->dFlows; pdu_v8_1->records[i].dPkts = rec_v8_1->dPkts; pdu_v8_1->records[i].dOctets = rec_v8_1->dOctets; pdu_v8_1->records[i].First = rec_v8_1->First; pdu_v8_1->records[i].Last = rec_v8_1->Last; pdu_v8_1->records[i].src_as = rec_v8_1->src_as; pdu_v8_1->records[i].dst_as = rec_v8_1->dst_as; pdu_v8_1->records[i].input = rec_v8_1->input; pdu_v8_1->records[i].output = rec_v8_1->output; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_1->count ++; enc->buf_size += sizeof (struct ftrec_v8_1); if (pdu_v8_1->count >= FT_PDU_V8_1_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_1_encode */ /* * function: fts3rec_pdu_v8_2_encode * * Encode a fts3rec into a version 8 Agg method 2 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_2_encode(struct ftencode *enc, struct fts3rec_v8_2 *rec_v8_2) { struct ftpdu_v8_2 *pdu_v8_2; u_int seq_index; int i; pdu_v8_2 = (struct ftpdu_v8_2*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_2->engine_id<<8 | rec_v8_2->engine_type; i = pdu_v8_2->count; /* space to encode more ? */ if (i >= FT_PDU_V8_2_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_2->version = 8; pdu_v8_2->sysUpTime = rec_v8_2->sysUpTime; pdu_v8_2->unix_secs = rec_v8_2->unix_secs; pdu_v8_2->unix_nsecs = rec_v8_2->unix_nsecs; pdu_v8_2->engine_type = rec_v8_2->engine_type; pdu_v8_2->engine_id = rec_v8_2->engine_id; pdu_v8_2->aggregation = 2; pdu_v8_2->agg_version = 2; pdu_v8_2->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_2->sysUpTime != rec_v8_2->sysUpTime) || (pdu_v8_2->unix_secs != rec_v8_2->unix_secs) || (pdu_v8_2->unix_nsecs != rec_v8_2->unix_nsecs) || (pdu_v8_2->engine_id != rec_v8_2->engine_id) || (pdu_v8_2->engine_type != rec_v8_2->engine_type)) return -1; } pdu_v8_2->records[i].dFlows = rec_v8_2->dFlows; pdu_v8_2->records[i].dPkts = rec_v8_2->dPkts; pdu_v8_2->records[i].dOctets = rec_v8_2->dOctets; pdu_v8_2->records[i].First = rec_v8_2->First; pdu_v8_2->records[i].Last = rec_v8_2->Last; pdu_v8_2->records[i].prot = rec_v8_2->prot; pdu_v8_2->records[i].srcport = rec_v8_2->srcport; pdu_v8_2->records[i].dstport = rec_v8_2->dstport; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_2->count ++; enc->buf_size += sizeof (struct ftrec_v8_2); if (pdu_v8_2->count >= FT_PDU_V8_2_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_2_encode */ /* * function: fts3rec_pdu_v8_3_encode * * Encode a fts3rec into a version 8 Agg method 3 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_3_encode(struct ftencode *enc, struct fts3rec_v8_3 *rec_v8_3) { struct ftpdu_v8_3 *pdu_v8_3; u_int seq_index; int i; pdu_v8_3 = (struct ftpdu_v8_3*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_3->engine_id<<8 | rec_v8_3->engine_type; i = pdu_v8_3->count; /* space to encode more ? */ if (i >= FT_PDU_V8_3_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_3->version = 8; pdu_v8_3->sysUpTime = rec_v8_3->sysUpTime; pdu_v8_3->unix_secs = rec_v8_3->unix_secs; pdu_v8_3->unix_nsecs = rec_v8_3->unix_nsecs; pdu_v8_3->engine_type = rec_v8_3->engine_type; pdu_v8_3->engine_id = rec_v8_3->engine_id; pdu_v8_3->aggregation = 3; pdu_v8_3->agg_version = 2; pdu_v8_3->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_3->sysUpTime != rec_v8_3->sysUpTime) || (pdu_v8_3->unix_secs != rec_v8_3->unix_secs) || (pdu_v8_3->unix_nsecs != rec_v8_3->unix_nsecs) || (pdu_v8_3->engine_id != rec_v8_3->engine_id) || (pdu_v8_3->engine_type != rec_v8_3->engine_type)) return -1; } pdu_v8_3->records[i].dFlows = rec_v8_3->dFlows; pdu_v8_3->records[i].dPkts = rec_v8_3->dPkts; pdu_v8_3->records[i].dOctets = rec_v8_3->dOctets; pdu_v8_3->records[i].First = rec_v8_3->First; pdu_v8_3->records[i].Last = rec_v8_3->Last; pdu_v8_3->records[i].src_prefix = rec_v8_3->srcaddr; pdu_v8_3->records[i].src_mask = rec_v8_3->src_mask; pdu_v8_3->records[i].src_as = rec_v8_3->src_as; pdu_v8_3->records[i].input = rec_v8_3->input; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_3->count ++; enc->buf_size += sizeof (struct ftrec_v8_3); if (pdu_v8_3->count >= FT_PDU_V8_3_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_3_encode */ /* * function: fts3rec_pdu_v8_4_encode * * Encode a fts3rec into a version 8 Agg method 4 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_4_encode(struct ftencode *enc, struct fts3rec_v8_4 *rec_v8_4) { struct ftpdu_v8_4 *pdu_v8_4; u_int seq_index; int i; pdu_v8_4 = (struct ftpdu_v8_4*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_4->engine_id<<8 | rec_v8_4->engine_type; i = pdu_v8_4->count; /* space to encode more ? */ if (i >= FT_PDU_V8_4_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_4->version = 8; pdu_v8_4->sysUpTime = rec_v8_4->sysUpTime; pdu_v8_4->unix_secs = rec_v8_4->unix_secs; pdu_v8_4->unix_nsecs = rec_v8_4->unix_nsecs; pdu_v8_4->engine_type = rec_v8_4->engine_type; pdu_v8_4->engine_id = rec_v8_4->engine_id; pdu_v8_4->aggregation = 4; pdu_v8_4->agg_version = 2; pdu_v8_4->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_4->sysUpTime != rec_v8_4->sysUpTime) || (pdu_v8_4->unix_secs != rec_v8_4->unix_secs) || (pdu_v8_4->unix_nsecs != rec_v8_4->unix_nsecs) || (pdu_v8_4->engine_id != rec_v8_4->engine_id) || (pdu_v8_4->engine_type != rec_v8_4->engine_type)) return -1; } pdu_v8_4->records[i].dFlows = rec_v8_4->dFlows; pdu_v8_4->records[i].dPkts = rec_v8_4->dPkts; pdu_v8_4->records[i].dOctets = rec_v8_4->dOctets; pdu_v8_4->records[i].First = rec_v8_4->First; pdu_v8_4->records[i].Last = rec_v8_4->Last; pdu_v8_4->records[i].dst_prefix = rec_v8_4->dstaddr; pdu_v8_4->records[i].dst_mask = rec_v8_4->dst_mask; pdu_v8_4->records[i].dst_as = rec_v8_4->dst_as; pdu_v8_4->records[i].output = rec_v8_4->output; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_4->count ++; enc->buf_size += sizeof (struct ftrec_v8_4); if (pdu_v8_4->count >= FT_PDU_V8_4_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_4_encode */ /* * function: fts3rec_pdu_v8_5_encode * * Encode a fts3rec into a version 8 Agg method 5 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_5_encode(struct ftencode *enc, struct fts3rec_v8_5 *rec_v8_5) { struct ftpdu_v8_5 *pdu_v8_5; u_int seq_index; int i; pdu_v8_5 = (struct ftpdu_v8_5*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_5->engine_id<<8 | rec_v8_5->engine_type; i = pdu_v8_5->count; /* space to encode more ? */ if (i >= FT_PDU_V8_5_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_5->version = 8; pdu_v8_5->sysUpTime = rec_v8_5->sysUpTime; pdu_v8_5->unix_secs = rec_v8_5->unix_secs; pdu_v8_5->unix_nsecs = rec_v8_5->unix_nsecs; pdu_v8_5->engine_type = rec_v8_5->engine_type; pdu_v8_5->engine_id = rec_v8_5->engine_id; pdu_v8_5->aggregation = 5; pdu_v8_5->agg_version = 2; pdu_v8_5->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_5->sysUpTime != rec_v8_5->sysUpTime) || (pdu_v8_5->unix_secs != rec_v8_5->unix_secs) || (pdu_v8_5->unix_nsecs != rec_v8_5->unix_nsecs) || (pdu_v8_5->engine_id != rec_v8_5->engine_id) || (pdu_v8_5->engine_type != rec_v8_5->engine_type)) return -1; } pdu_v8_5->records[i].dFlows = rec_v8_5->dFlows; pdu_v8_5->records[i].dPkts = rec_v8_5->dPkts; pdu_v8_5->records[i].dOctets = rec_v8_5->dOctets; pdu_v8_5->records[i].First = rec_v8_5->First; pdu_v8_5->records[i].Last = rec_v8_5->Last; pdu_v8_5->records[i].src_prefix = rec_v8_5->srcaddr; pdu_v8_5->records[i].dst_prefix = rec_v8_5->dstaddr; pdu_v8_5->records[i].dst_mask = rec_v8_5->dst_mask; pdu_v8_5->records[i].src_mask = rec_v8_5->src_mask; pdu_v8_5->records[i].src_as = rec_v8_5->src_as; pdu_v8_5->records[i].dst_as = rec_v8_5->dst_as; pdu_v8_5->records[i].input = rec_v8_5->input; pdu_v8_5->records[i].output = rec_v8_5->output; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_5->count ++; enc->buf_size += sizeof (struct ftrec_v8_5); if (pdu_v8_5->count >= FT_PDU_V8_5_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_5_encode */ /* * function: fts3rec_pdu_v8_6_encode * * Encode a fts3rec into a version 8 Agg method 6 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_6_encode(struct ftencode *enc, struct fts3rec_v8_6 *rec_v8_6) { struct ftpdu_v8_6 *pdu_v8_6; u_int seq_index; int i; pdu_v8_6 = (struct ftpdu_v8_6*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_6->engine_id<<8 | rec_v8_6->engine_type; i = pdu_v8_6->count; /* space to encode more ? */ if (i >= FT_PDU_V8_6_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_6->version = 8; pdu_v8_6->sysUpTime = rec_v8_6->sysUpTime; pdu_v8_6->unix_secs = rec_v8_6->unix_secs; pdu_v8_6->unix_nsecs = rec_v8_6->unix_nsecs; pdu_v8_6->engine_type = rec_v8_6->engine_type; pdu_v8_6->engine_id = rec_v8_6->engine_id; pdu_v8_6->aggregation = 6; pdu_v8_6->agg_version = 2; pdu_v8_6->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_6->sysUpTime != rec_v8_6->sysUpTime) || (pdu_v8_6->unix_secs != rec_v8_6->unix_secs) || (pdu_v8_6->unix_nsecs != rec_v8_6->unix_nsecs) || (pdu_v8_6->engine_id != rec_v8_6->engine_id) || (pdu_v8_6->engine_type != rec_v8_6->engine_type)) return -1; } pdu_v8_6->records[i].dstaddr = rec_v8_6->dstaddr; pdu_v8_6->records[i].dPkts = rec_v8_6->dPkts; pdu_v8_6->records[i].dOctets = rec_v8_6->dOctets; pdu_v8_6->records[i].First = rec_v8_6->First; pdu_v8_6->records[i].Last = rec_v8_6->Last; pdu_v8_6->records[i].output = rec_v8_6->output; pdu_v8_6->records[i].tos = rec_v8_6->tos; pdu_v8_6->records[i].marked_tos = rec_v8_6->marked_tos; pdu_v8_6->records[i].extra_pkts = rec_v8_6->extra_pkts; pdu_v8_6->records[i].router_sc = rec_v8_6->router_sc; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_6->count ++; enc->buf_size += sizeof (struct ftrec_v8_6); if (pdu_v8_6->count >= FT_PDU_V8_6_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_6_encode */ /* * function: fts3rec_pdu_v8_7_encode * * Encode a fts3rec into a version 8 Agg method 7 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_7_encode(struct ftencode *enc, struct fts3rec_v8_7 *rec_v8_7) { struct ftpdu_v8_7 *pdu_v8_7; u_int seq_index; int i; pdu_v8_7 = (struct ftpdu_v8_7*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_7->engine_id<<8 | rec_v8_7->engine_type; i = pdu_v8_7->count; /* space to encode more ? */ if (i >= FT_PDU_V8_7_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_7->version = 8; pdu_v8_7->sysUpTime = rec_v8_7->sysUpTime; pdu_v8_7->unix_secs = rec_v8_7->unix_secs; pdu_v8_7->unix_nsecs = rec_v8_7->unix_nsecs; pdu_v8_7->engine_type = rec_v8_7->engine_type; pdu_v8_7->engine_id = rec_v8_7->engine_id; pdu_v8_7->aggregation = 7; pdu_v8_7->agg_version = 2; pdu_v8_7->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_7->sysUpTime != rec_v8_7->sysUpTime) || (pdu_v8_7->unix_secs != rec_v8_7->unix_secs) || (pdu_v8_7->unix_nsecs != rec_v8_7->unix_nsecs) || (pdu_v8_7->engine_id != rec_v8_7->engine_id) || (pdu_v8_7->engine_type != rec_v8_7->engine_type)) return -1; } pdu_v8_7->records[i].dstaddr = rec_v8_7->dstaddr; pdu_v8_7->records[i].srcaddr = rec_v8_7->srcaddr; pdu_v8_7->records[i].dPkts = rec_v8_7->dPkts; pdu_v8_7->records[i].dOctets = rec_v8_7->dOctets; pdu_v8_7->records[i].First = rec_v8_7->First; pdu_v8_7->records[i].Last = rec_v8_7->Last; pdu_v8_7->records[i].output = rec_v8_7->output; pdu_v8_7->records[i].input = rec_v8_7->input; pdu_v8_7->records[i].tos = rec_v8_7->tos; pdu_v8_7->records[i].marked_tos = rec_v8_7->marked_tos; pdu_v8_7->records[i].extra_pkts = rec_v8_7->extra_pkts; pdu_v8_7->records[i].router_sc = rec_v8_7->router_sc; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_7->count ++; enc->buf_size += sizeof (struct ftrec_v8_7); if (pdu_v8_7->count >= FT_PDU_V8_7_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_7_encode */ /* * function: fts3rec_pdu_v8_8_encode * * Encode a fts3rec into a version 8 Agg method 8 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_8_encode(struct ftencode *enc, struct fts3rec_v8_8 *rec_v8_8) { struct ftpdu_v8_8 *pdu_v8_8; u_int seq_index; int i; pdu_v8_8 = (struct ftpdu_v8_8*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_8->engine_id<<8 | rec_v8_8->engine_type; i = pdu_v8_8->count; /* space to encode more ? */ if (i >= FT_PDU_V8_8_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_8->version = 8; pdu_v8_8->sysUpTime = rec_v8_8->sysUpTime; pdu_v8_8->unix_secs = rec_v8_8->unix_secs; pdu_v8_8->unix_nsecs = rec_v8_8->unix_nsecs; pdu_v8_8->engine_type = rec_v8_8->engine_type; pdu_v8_8->engine_id = rec_v8_8->engine_id; pdu_v8_8->aggregation = 8; pdu_v8_8->agg_version = 2; pdu_v8_8->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_8->sysUpTime != rec_v8_8->sysUpTime) || (pdu_v8_8->unix_secs != rec_v8_8->unix_secs) || (pdu_v8_8->unix_nsecs != rec_v8_8->unix_nsecs) || (pdu_v8_8->engine_id != rec_v8_8->engine_id) || (pdu_v8_8->engine_type != rec_v8_8->engine_type)) return -1; } pdu_v8_8->records[i].dstaddr = rec_v8_8->dstaddr; pdu_v8_8->records[i].srcaddr = rec_v8_8->srcaddr; pdu_v8_8->records[i].dstport = rec_v8_8->dstport; pdu_v8_8->records[i].srcport = rec_v8_8->srcport; pdu_v8_8->records[i].dPkts = rec_v8_8->dPkts; pdu_v8_8->records[i].dOctets = rec_v8_8->dOctets; pdu_v8_8->records[i].First = rec_v8_8->First; pdu_v8_8->records[i].Last = rec_v8_8->Last; pdu_v8_8->records[i].output = rec_v8_8->output; pdu_v8_8->records[i].input = rec_v8_8->input; pdu_v8_8->records[i].tos = rec_v8_8->tos; pdu_v8_8->records[i].marked_tos = rec_v8_8->marked_tos; pdu_v8_8->records[i].extra_pkts = rec_v8_8->extra_pkts; pdu_v8_8->records[i].router_sc = rec_v8_8->router_sc; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_8->count ++; enc->buf_size += sizeof (struct ftrec_v8_8); if (pdu_v8_8->count >= FT_PDU_V8_8_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_8_encode */ /* * function: fts3rec_pdu_v8_9_encode * * Encode a fts3rec into a version 8 Agg method 9 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_9_encode(struct ftencode *enc, struct fts3rec_v8_9 *rec_v8_9) { struct ftpdu_v8_9 *pdu_v8_9; u_int seq_index; int i; pdu_v8_9 = (struct ftpdu_v8_9*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_9->engine_id<<8 | rec_v8_9->engine_type; i = pdu_v8_9->count; /* space to encode more ? */ if (i >= FT_PDU_V8_9_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_9->version = 8; pdu_v8_9->sysUpTime = rec_v8_9->sysUpTime; pdu_v8_9->unix_secs = rec_v8_9->unix_secs; pdu_v8_9->unix_nsecs = rec_v8_9->unix_nsecs; pdu_v8_9->engine_type = rec_v8_9->engine_type; pdu_v8_9->engine_id = rec_v8_9->engine_id; pdu_v8_9->aggregation = 9; pdu_v8_9->agg_version = 2; pdu_v8_9->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_9->sysUpTime != rec_v8_9->sysUpTime) || (pdu_v8_9->unix_secs != rec_v8_9->unix_secs) || (pdu_v8_9->unix_nsecs != rec_v8_9->unix_nsecs) || (pdu_v8_9->engine_id != rec_v8_9->engine_id) || (pdu_v8_9->engine_type != rec_v8_9->engine_type)) return -1; } pdu_v8_9->records[i].dFlows = rec_v8_9->dFlows; pdu_v8_9->records[i].dPkts = rec_v8_9->dPkts; pdu_v8_9->records[i].dOctets = rec_v8_9->dOctets; pdu_v8_9->records[i].First = rec_v8_9->First; pdu_v8_9->records[i].Last = rec_v8_9->Last; pdu_v8_9->records[i].src_as = rec_v8_9->src_as; pdu_v8_9->records[i].dst_as = rec_v8_9->dst_as; pdu_v8_9->records[i].input = rec_v8_9->input; pdu_v8_9->records[i].output = rec_v8_9->output; pdu_v8_9->records[i].tos = rec_v8_9->tos; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_9->count ++; enc->buf_size += sizeof (struct ftrec_v8_9); if (pdu_v8_9->count >= FT_PDU_V8_9_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_9_encode */ /* * function: fts3rec_pdu_v8_10_encode * * Encode a fts3rec into a version 8 Agg method 10 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_10_encode(struct ftencode *enc, struct fts3rec_v8_10 *rec_v8_10) { struct ftpdu_v8_10 *pdu_v8_10; u_int seq_index; int i; pdu_v8_10 = (struct ftpdu_v8_10*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_10->engine_id<<8 | rec_v8_10->engine_type; i = pdu_v8_10->count; /* space to encode more ? */ if (i >= FT_PDU_V8_10_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_10->version = 8; pdu_v8_10->sysUpTime = rec_v8_10->sysUpTime; pdu_v8_10->unix_secs = rec_v8_10->unix_secs; pdu_v8_10->unix_nsecs = rec_v8_10->unix_nsecs; pdu_v8_10->engine_type = rec_v8_10->engine_type; pdu_v8_10->engine_id = rec_v8_10->engine_id; pdu_v8_10->aggregation = 10; pdu_v8_10->agg_version = 2; pdu_v8_10->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_10->sysUpTime != rec_v8_10->sysUpTime) || (pdu_v8_10->unix_secs != rec_v8_10->unix_secs) || (pdu_v8_10->unix_nsecs != rec_v8_10->unix_nsecs) || (pdu_v8_10->engine_id != rec_v8_10->engine_id) || (pdu_v8_10->engine_type != rec_v8_10->engine_type)) return -1; } pdu_v8_10->records[i].dFlows = rec_v8_10->dFlows; pdu_v8_10->records[i].dPkts = rec_v8_10->dPkts; pdu_v8_10->records[i].dOctets = rec_v8_10->dOctets; pdu_v8_10->records[i].First = rec_v8_10->First; pdu_v8_10->records[i].Last = rec_v8_10->Last; pdu_v8_10->records[i].srcport = rec_v8_10->srcport; pdu_v8_10->records[i].dstport = rec_v8_10->dstport; pdu_v8_10->records[i].prot = rec_v8_10->prot; pdu_v8_10->records[i].tos = rec_v8_10->tos; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_10->count ++; enc->buf_size += sizeof (struct ftrec_v8_10); if (pdu_v8_10->count >= FT_PDU_V8_10_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_10_encode */ /* * function: fts3rec_pdu_v8_11_encode * * Encode a fts3rec into a version 8 Agg method 11 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_11_encode(struct ftencode *enc, struct fts3rec_v8_11 *rec_v8_11) { struct ftpdu_v8_11 *pdu_v8_11; u_int seq_index; int i; pdu_v8_11 = (struct ftpdu_v8_11*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_11->engine_id<<8 | rec_v8_11->engine_type; i = pdu_v8_11->count; /* space to encode more ? */ if (i >= FT_PDU_V8_11_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_11->version = 8; pdu_v8_11->sysUpTime = rec_v8_11->sysUpTime; pdu_v8_11->unix_secs = rec_v8_11->unix_secs; pdu_v8_11->unix_nsecs = rec_v8_11->unix_nsecs; pdu_v8_11->engine_type = rec_v8_11->engine_type; pdu_v8_11->engine_id = rec_v8_11->engine_id; pdu_v8_11->aggregation = 11; pdu_v8_11->agg_version = 2; pdu_v8_11->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_11->sysUpTime != rec_v8_11->sysUpTime) || (pdu_v8_11->unix_secs != rec_v8_11->unix_secs) || (pdu_v8_11->unix_nsecs != rec_v8_11->unix_nsecs) || (pdu_v8_11->engine_id != rec_v8_11->engine_id) || (pdu_v8_11->engine_type != rec_v8_11->engine_type)) return -1; } pdu_v8_11->records[i].dFlows = rec_v8_11->dFlows; pdu_v8_11->records[i].dPkts = rec_v8_11->dPkts; pdu_v8_11->records[i].dOctets = rec_v8_11->dOctets; pdu_v8_11->records[i].First = rec_v8_11->First; pdu_v8_11->records[i].Last = rec_v8_11->Last; pdu_v8_11->records[i].src_prefix = rec_v8_11->srcaddr; pdu_v8_11->records[i].src_mask = rec_v8_11->src_mask; pdu_v8_11->records[i].tos = rec_v8_11->tos; pdu_v8_11->records[i].src_as = rec_v8_11->src_as; pdu_v8_11->records[i].input = rec_v8_11->input; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_11->count ++; enc->buf_size += sizeof (struct ftrec_v8_11); if (pdu_v8_11->count >= FT_PDU_V8_11_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_11_encode */ /* * function: fts3rec_pdu_v8_12_encode * * Encode a fts3rec into a version 8 Agg method 12 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_12_encode(struct ftencode *enc, struct fts3rec_v8_12 *rec_v8_12) { struct ftpdu_v8_12 *pdu_v8_12; u_int seq_index; int i; pdu_v8_12 = (struct ftpdu_v8_12*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_12->engine_id<<8 | rec_v8_12->engine_type; i = pdu_v8_12->count; /* space to encode more ? */ if (i >= FT_PDU_V8_12_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_12->version = 8; pdu_v8_12->sysUpTime = rec_v8_12->sysUpTime; pdu_v8_12->unix_secs = rec_v8_12->unix_secs; pdu_v8_12->unix_nsecs = rec_v8_12->unix_nsecs; pdu_v8_12->engine_type = rec_v8_12->engine_type; pdu_v8_12->engine_id = rec_v8_12->engine_id; pdu_v8_12->aggregation = 12; pdu_v8_12->agg_version = 2; pdu_v8_12->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_12->sysUpTime != rec_v8_12->sysUpTime) || (pdu_v8_12->unix_secs != rec_v8_12->unix_secs) || (pdu_v8_12->unix_nsecs != rec_v8_12->unix_nsecs) || (pdu_v8_12->engine_id != rec_v8_12->engine_id) || (pdu_v8_12->engine_type != rec_v8_12->engine_type)) return -1; } pdu_v8_12->records[i].dFlows = rec_v8_12->dFlows; pdu_v8_12->records[i].dPkts = rec_v8_12->dPkts; pdu_v8_12->records[i].dOctets = rec_v8_12->dOctets; pdu_v8_12->records[i].First = rec_v8_12->First; pdu_v8_12->records[i].Last = rec_v8_12->Last; pdu_v8_12->records[i].dst_prefix = rec_v8_12->dstaddr; pdu_v8_12->records[i].output = rec_v8_12->output; pdu_v8_12->records[i].dst_mask = rec_v8_12->dst_mask; pdu_v8_12->records[i].dst_as = rec_v8_12->dst_as; pdu_v8_12->records[i].tos = rec_v8_12->tos; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_12->count ++; enc->buf_size += sizeof (struct ftrec_v8_12); if (pdu_v8_12->count >= FT_PDU_V8_12_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_12_encode */ /* * function: fts3rec_pdu_v8_13_encode * * Encode a fts3rec into a version 8 Agg method 13 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_13_encode(struct ftencode *enc, struct fts3rec_v8_13 *rec_v8_13) { struct ftpdu_v8_13 *pdu_v8_13; u_int seq_index; int i; pdu_v8_13 = (struct ftpdu_v8_13*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_13->engine_id<<8 | rec_v8_13->engine_type; i = pdu_v8_13->count; /* space to encode more ? */ if (i >= FT_PDU_V8_13_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_13->version = 8; pdu_v8_13->sysUpTime = rec_v8_13->sysUpTime; pdu_v8_13->unix_secs = rec_v8_13->unix_secs; pdu_v8_13->unix_nsecs = rec_v8_13->unix_nsecs; pdu_v8_13->engine_type = rec_v8_13->engine_type; pdu_v8_13->engine_id = rec_v8_13->engine_id; pdu_v8_13->aggregation = 13; pdu_v8_13->agg_version = 2; pdu_v8_13->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_13->sysUpTime != rec_v8_13->sysUpTime) || (pdu_v8_13->unix_secs != rec_v8_13->unix_secs) || (pdu_v8_13->unix_nsecs != rec_v8_13->unix_nsecs) || (pdu_v8_13->engine_id != rec_v8_13->engine_id) || (pdu_v8_13->engine_type != rec_v8_13->engine_type)) return -1; } pdu_v8_13->records[i].dFlows = rec_v8_13->dFlows; pdu_v8_13->records[i].dPkts = rec_v8_13->dPkts; pdu_v8_13->records[i].dOctets = rec_v8_13->dOctets; pdu_v8_13->records[i].First = rec_v8_13->First; pdu_v8_13->records[i].Last = rec_v8_13->Last; pdu_v8_13->records[i].src_prefix = rec_v8_13->srcaddr; pdu_v8_13->records[i].dst_prefix = rec_v8_13->dstaddr; pdu_v8_13->records[i].dst_mask = rec_v8_13->dst_mask; pdu_v8_13->records[i].src_mask = rec_v8_13->src_mask; pdu_v8_13->records[i].tos = rec_v8_13->tos; pdu_v8_13->records[i].src_as = rec_v8_13->src_as; pdu_v8_13->records[i].dst_as = rec_v8_13->dst_as; pdu_v8_13->records[i].input = rec_v8_13->input; pdu_v8_13->records[i].output = rec_v8_13->output; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_13->count ++; enc->buf_size += sizeof (struct ftrec_v8_13); if (pdu_v8_13->count >= FT_PDU_V8_13_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_13_encode */ /* * function: fts3rec_pdu_v8_14_encode * * Encode a fts3rec into a version 8 Agg method 14 * * returns: -1 error encoding, PDU not encoded. * 0 PDU encoded. Hint next call will fail. * 1 PDU encoded. Room for more. * */ int fts3rec_pdu_v8_14_encode(struct ftencode *enc, struct fts3rec_v8_14 *rec_v8_14) { struct ftpdu_v8_14 *pdu_v8_14; u_int seq_index; int i; pdu_v8_14 = (struct ftpdu_v8_14*) enc->buf_enc; /* index to sequence # */ seq_index = rec_v8_14->engine_id<<8 | rec_v8_14->engine_type; i = pdu_v8_14->count; /* space to encode more ? */ if (i >= FT_PDU_V8_14_MAXFLOWS) return -1; /* if this is the first record, fill in the header */ if (!i) { pdu_v8_14->version = 8; pdu_v8_14->sysUpTime = rec_v8_14->sysUpTime; pdu_v8_14->unix_secs = rec_v8_14->unix_secs; pdu_v8_14->unix_nsecs = rec_v8_14->unix_nsecs; pdu_v8_14->engine_type = rec_v8_14->engine_type; pdu_v8_14->engine_id = rec_v8_14->engine_id; pdu_v8_14->aggregation = 14; pdu_v8_14->agg_version = 2; pdu_v8_14->flow_sequence = enc->seq_next[seq_index]; enc->buf_size = 28; /* pdu header size */ } else { /* sysUpTime, unix_secs, unix_nsecs, and engine_* must match for * each pdu. If a stream is being re-encoded this will normally * work out fine, if the stream was sorted or changed in some way * the PDU may only be able to hold one record. */ if ((pdu_v8_14->sysUpTime != rec_v8_14->sysUpTime) || (pdu_v8_14->unix_secs != rec_v8_14->unix_secs) || (pdu_v8_14->unix_nsecs != rec_v8_14->unix_nsecs) || (pdu_v8_14->engine_id != rec_v8_14->engine_id) || (pdu_v8_14->engine_type != rec_v8_14->engine_type)) return -1; } pdu_v8_14->records[i].dFlows = rec_v8_14->dFlows; pdu_v8_14->records[i].dPkts = rec_v8_14->dPkts; pdu_v8_14->records[i].dOctets = rec_v8_14->dOctets; pdu_v8_14->records[i].First = rec_v8_14->First; pdu_v8_14->records[i].Last = rec_v8_14->Last; pdu_v8_14->records[i].src_prefix = rec_v8_14->srcaddr; pdu_v8_14->records[i].dst_prefix = rec_v8_14->dstaddr; pdu_v8_14->records[i].srcport = rec_v8_14->srcport; pdu_v8_14->records[i].dstport = rec_v8_14->dstport; pdu_v8_14->records[i].input = rec_v8_14->input; pdu_v8_14->records[i].output = rec_v8_14->output; pdu_v8_14->records[i].dst_mask = rec_v8_14->dst_mask; pdu_v8_14->records[i].src_mask = rec_v8_14->src_mask; pdu_v8_14->records[i].tos = rec_v8_14->tos; pdu_v8_14->records[i].prot = rec_v8_14->prot; /* increment sequence # */ enc->seq_next[seq_index]++; pdu_v8_14->count ++; enc->buf_size += sizeof (struct ftrec_v8_14); if (pdu_v8_14->count >= FT_PDU_V8_14_MAXFLOWS) return 0; else return 1; } /* fts3rec_pdu_v8_14_encode */ flow-tools-0.68/lib/fterr.c0000644000076600007660000001147007622602461011315 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: fterr.c,v 1.9 2003/02/13 02:38:41 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #define FTERR_FILE 1 #define FTERR_SYSLOG 2 static int fterr_flags = FTERR_FILE; static FILE *fterr_file; static char *fterr_id = ""; static void (*fterr_exit)(int); void fterr_setexit(void (*f)(int)) { fterr_exit = f; } /* fterr_set_exit */ void fterr_setid(char *id) { char *c; /* skip to end */ for (c = id; *c; ++c); /* skip back to first / or begining */ for (; (c != id) && (*c != '/'); --c); if (c != id) fterr_id = c+1; else fterr_id = c; } void fterr_setfile(int enable, void *fp) { if (enable) { fterr_flags |= FTERR_FILE; fterr_file = fp; } else fterr_flags &= ~FTERR_FILE; } void fterr_setsyslog(int enable, int logopt, int facility) { if (enable) { fterr_flags |= FTERR_SYSLOG; openlog(fterr_id, logopt, facility); } else { if (fterr_flags & FTERR_SYSLOG) closelog(); fterr_flags &= ~FTERR_SYSLOG; } } void fterr_info(const char *fmt, ...) { va_list ap; char buf[1025]; char buf2[1025]; va_start(ap, fmt); vsnprintf(buf, (size_t)1024, fmt, ap); va_end(ap); snprintf(buf2, 1024, "%s: %s", fterr_id, buf); if (fterr_flags & FTERR_FILE) fprintf(((fterr_file) ? fterr_file : stderr), "%s\n", buf2); if (fterr_flags & FTERR_SYSLOG) syslog(LOG_INFO, buf); } /* fterr_info */ void fterr_err(int code, const char *fmt, ...) { va_list ap; char buf[1025]; char buf2[1025]; va_start(ap, fmt); vsnprintf(buf, (size_t)1024, fmt, ap); va_end(ap); if (fterr_flags & FTERR_FILE) { snprintf(buf2, 1024, "%s: %s: %s", fterr_id, buf, strerror(errno)); fprintf(((fterr_file) ? fterr_file : stderr), "%s\n", buf2); } if (fterr_flags & FTERR_SYSLOG) { snprintf(buf2, 1024, "%s: %s", buf, strerror(errno)); syslog(LOG_INFO, buf2); } if (fterr_exit) fterr_exit(code); exit (code); } /* fterr_err */ void fterr_errx(int code, const char *fmt, ...) { va_list ap; char buf[1025]; char buf2[1025]; va_start(ap, fmt); vsnprintf(buf, (size_t)1024, fmt, ap); va_end(ap); if (fterr_flags & FTERR_FILE) { snprintf(buf2, 1024, "%s: %s", fterr_id, buf); fprintf(((fterr_file) ? fterr_file : stderr), "%s\n", buf2); } if (fterr_flags & FTERR_SYSLOG) syslog(LOG_INFO, buf); if (fterr_exit) fterr_exit(code); exit (code); } /* fterr_errx */ void fterr_warnx(const char *fmt, ...) { va_list ap; char buf[1025]; char buf2[1025]; va_start(ap, fmt); vsnprintf(buf, (size_t)1024, fmt, ap); va_end(ap); if (fterr_flags & FTERR_FILE) { snprintf(buf2, 1024, "%s: %s", fterr_id, buf); fprintf(((fterr_file) ? fterr_file : stderr), "%s\n", buf2); } if (fterr_flags & FTERR_SYSLOG) syslog(LOG_INFO, buf); } /* fterr_warnx */ void fterr_warn(const char *fmt, ...) { va_list ap; char buf[1025]; char buf2[1025]; va_start(ap, fmt); vsnprintf(buf, (size_t)1024, fmt, ap); va_end(ap); if (fterr_flags & FTERR_FILE) { snprintf(buf2, 1024, "%s: %s: %s", fterr_id, buf, strerror(errno)); fprintf(((fterr_file) ? fterr_file : stderr), "%s\n", buf2); } if (fterr_flags & FTERR_SYSLOG) { snprintf(buf2, 1024, "%s: %s", buf, strerror(errno)); syslog(LOG_INFO, buf2); } } /* fterr_warn */ flow-tools-0.68/lib/ftfil.c0000644000076600007660000040607207776322413011313 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftfil.c,v 1.20 2004/01/05 17:55:23 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif #define PARSE_PRIMITIVE_TYPE_INIT(A)\ if (!(A = malloc (sizeof *A))) {\ fterr_warn("malloc()");\ return -1;\ }\ bzero(A, sizeof *A);\ A->init = 1;\ A->default_mode = FT_FIL_MODE_DENY;\ lp->cur_primitive->lookup = A;\ #define RADIX_TRIE_INIT\ if (!rn_init_called) {\ max_keylen = sizeof(struct radix_sockaddr_in);\ rn_init();\ rn_init_called = 1;\ }\ extern int max_keylen; extern u_int32 mask_lookup[]; static int rn_init_called; static struct radix_node_head *rhead; enum ftfil_op { FT_FIL_OP_UNSET, FT_FIL_OP_LT, FT_FIL_OP_GT, FT_FIL_OP_EQ, FT_FIL_OP_NE, FT_FIL_OP_GE, FT_FIL_OP_LE }; enum ftfil_parse_state { PARSE_STATE_UNSET, PARSE_STATE_PRIMITIVE, PARSE_STATE_DEFINITION }; enum ftfil_def_match { FT_FIL_DEFINITION_MATCH_UNSET, FT_FIL_DEFINITION_MATCH_SRC_AS, FT_FIL_DEFINITION_MATCH_DST_AS, FT_FIL_DEFINITION_MATCH_IP_SRC_ADDR, FT_FIL_DEFINITION_MATCH_IP_DST_ADDR, FT_FIL_DEFINITION_MATCH_IP_EXPORTER_ADDR, FT_FIL_DEFINITION_MATCH_IP_NEXT_HOP_ADDR, FT_FIL_DEFINITION_MATCH_IP_SC_ADDR, FT_FIL_DEFINITION_MATCH_IP_PROTOCOL, FT_FIL_DEFINITION_MATCH_IP_SRC_PREFIX_LEN, FT_FIL_DEFINITION_MATCH_IP_DST_PREFIX_LEN, FT_FIL_DEFINITION_MATCH_IP_TOS, FT_FIL_DEFINITION_MATCH_IP_MARKED_TOS, FT_FIL_DEFINITION_MATCH_IP_TCP_FLAGS, FT_FIL_DEFINITION_MATCH_IP_SRC_PORT, FT_FIL_DEFINITION_MATCH_IP_DST_PORT, FT_FIL_DEFINITION_MATCH_INPUT_IF, FT_FIL_DEFINITION_MATCH_OUTPUT_IF, FT_FIL_DEFINITION_MATCH_START_TIME, FT_FIL_DEFINITION_MATCH_END_TIME, FT_FIL_DEFINITION_MATCH_FLOWS, FT_FIL_DEFINITION_MATCH_OCTETS, FT_FIL_DEFINITION_MATCH_PACKETS, FT_FIL_DEFINITION_MATCH_XTRA_PACKETS, FT_FIL_DEFINITION_MATCH_DURATION, FT_FIL_DEFINITION_MATCH_ENGINE_ID, FT_FIL_DEFINITION_MATCH_ENGINE_TYPE, FT_FIL_DEFINITION_MATCH_SRC_TAG, FT_FIL_DEFINITION_MATCH_DST_TAG, FT_FIL_DEFINITION_MATCH_PPS, FT_FIL_DEFINITION_MATCH_BPS, FT_FIL_DEFINITION_MATCH_RANDOM_SAMPLE }; char *op_name_lookup[] = {"Unset", "lt", "gt", "eq", "ne", "ge", "le"}; char *mode_name_lookup[] = {"Unset", "permit", "deny"}; struct line_parser { enum ftfil_parse_state state; enum ftfil_primitive_type type; enum ftfil_mode mode; struct ftfil_primitive *cur_primitive; struct ftfil_def *cur_def; struct ftfil_match *cur_def_match; struct ftsym *sym_ip_prot; struct ftsym *sym_ip_tcp_port; struct ftsym *sym_asn; struct ftsym *sym_tag; struct ftsym *sym_cur; int lineno; char *buf, *fname, *word; }; struct ftfil_lookup_ip_address { struct ftchash *ftch; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_mask { FT_STAILQ_HEAD(filipmhead, ftfil_lookup_ip_mask_rec) list; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_mask_rec { FT_STAILQ_ENTRY(ftfil_lookup_ip_mask_rec) chain; u_int32 ip, mask; int mode; /* FT_FIL_MODE_PERMIT/DENY */ }; struct ftfil_lookup_ip_prefix_rec { struct radix_node rt_nodes[2]; /* radix tree glue */ struct radix_sockaddr_in addr; u_int8 masklen; int mode; /* FT_FIL_MODE_PERMIT/DENY */ }; struct ftfil_lookup_ip_prefix { struct radix_node_head *rhead; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_as { u_int8 mode[65536]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_prot { u_int8 mode[256]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_port { u_int8 mode[65536]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_tos { u_int8 mask; u_int8 mode[256]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_tcp_flags { u_int8 mask; u_int8 mode[256]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_if_index { u_int8 mode[65536]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_engine { u_int8 mode[256]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_ip_prefix_len { u_int8 mode[33]; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_counter_rec { FT_STAILQ_ENTRY(ftfil_lookup_counter_rec) chain; u_int32 val; enum ftfil_op op; /* FT_FIL_OP */ int mode; }; struct ftfil_lookup_counter { FT_STAILQ_HEAD(fillchead, ftfil_lookup_counter_rec) list; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_double_rec { FT_STAILQ_ENTRY(ftfil_lookup_double_rec) chain; double val; enum ftfil_op op; /* FT_FIL_OP */ int mode; }; struct ftfil_lookup_double { FT_STAILQ_HEAD(filldhead, ftfil_lookup_double_rec) list; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_tag { struct ftchash *ftch; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_tag_mask_rec { FT_STAILQ_ENTRY(ftfil_lookup_tag_mask_rec) chain; u_int32 tag, mask; int mode; /* FT_FIL_MODE_PERMIT/DENY */ }; struct ftfil_lookup_tag_mask { FT_STAILQ_HEAD(filtmhead, ftfil_lookup_tag_mask_rec) list; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_time_rec { FT_STAILQ_ENTRY(ftfil_lookup_time_rec) chain; int hour, min, sec; enum ftfil_op op; /* FT_FIL_OP */ int mode; }; struct ftfil_lookup_time { FT_STAILQ_HEAD(filltmehead, ftfil_lookup_time_rec) list; enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_lookup_rate { int rate; enum ftfil_mode mode; /* FT_FIL_MODE_PERMIT/DENY */ enum ftfil_mode default_mode; /* FT_FIL_MODE_PERMIT/DENY */ int init; /* initialized? */ }; struct ftfil_match_item_cache { FT_SLIST_ENTRY(ftfil_match_item_cache) chain; u_int32 time; /* cache time -- only valid for flow == curflow+1 */ void *flow; /* address of flow evaluating -- used to invalidate cache */ enum ftfil_mode mode; /* result FT_FIL_MODE_* */ void *lookup; /* data for evaluator */ int (*eval)(void *lookup, void *rec, struct fts3rec_offsets *fo); }; static int walk_free(struct radix_node *rn, struct walkarg *UNUSED); static int ftfil_load_lookup(struct line_parser *lp, char *s, int size, char *list, int mode); static int parse_definition(struct line_parser *lp, struct ftfil *ftfil); static int parse_definition_match(struct line_parser *lp, struct ftfil *ftfil); static int parse_definition_or(struct line_parser *lp, struct ftfil *ftfil); static int parse_definition_invert(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_deny(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_permit(struct line_parser *lp, struct ftfil *ftfil); static int parse2_primitive_permitdeny(struct line_parser *lp, struct ftfil *ftfil, int flag); static int parse_primitive_default(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_mask(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_asn(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_ip_prot(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_ip_port(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_ip_prefix_len(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_if_index(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_ip_tos(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_ip_tcp_flags(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_engine(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_ip_address(struct line_parser *lp, struct ftfil *ftfil); int parse_primitive_type_ip_mask(struct line_parser *lp, struct ftfil *ftfil); int parse_primitive_type_ip_prefix(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_tag(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_tag_mask(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_counter(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_time_date(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_time(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_double(struct line_parser *lp, struct ftfil *ftfil); static int parse_primitive_type_rate(struct line_parser *lp, struct ftfil *ftfil); inline int eval_match_src_as(struct ftfil_lookup_as *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_dst_as(struct ftfil_lookup_as *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_engine_type(struct ftfil_lookup_engine *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_engine_id(struct ftfil_lookup_engine *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_dst_if_index(struct ftfil_lookup_if_index *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_src_if_index(struct ftfil_lookup_if_index *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_dst_port(struct ftfil_lookup_ip_port *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_src_port(struct ftfil_lookup_ip_port *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_tcp_flags(struct ftfil_lookup_ip_tcp_flags *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_marked_tos(struct ftfil_lookup_ip_tos *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_tos(struct ftfil_lookup_ip_tos *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_dst_prefix_len(struct ftfil_lookup_ip_prefix_len *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_src_prefix_len(struct ftfil_lookup_ip_prefix_len *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_prot(struct ftfil_lookup_ip_prot *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_flows(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_octets(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_packets(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_xtra_packets(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_duration(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_start_time_date(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_end_time_date(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_start_time(struct ftfil_lookup_time *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_end_time(struct ftfil_lookup_time *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_src_tag_l(struct ftfil_lookup_tag_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_src_tag_h(struct ftfil_lookup_tag *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_dst_tag_l(struct ftfil_lookup_tag_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_dst_tag_h(struct ftfil_lookup_tag *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_sc_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_sc_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_sc_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_nexthop_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_nexthop_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_nexthop_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_src_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_src_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_src_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_dst_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_dst_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_dst_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_exporter_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_exporter_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_ip_exporter_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_pps(struct ftfil_lookup_double *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_bps(struct ftfil_lookup_double *lookup, char *rec, struct fts3rec_offsets *fo); inline int eval_match_random_sample(struct ftfil_lookup_rate *lookup, char *rec, struct fts3rec_offsets *fo); static int resolve_primitives(struct ftfil *ftfil); #define NEXT_WORD(A,B)\ for (;;) {\ B = strsep(A, " \t");\ if ((B && *B != 0) || (!B))\ break;\ }\ struct jump { char *name; enum ftfil_parse_state state; int (*func)(struct line_parser *lp, struct ftfil *ftfil); }; static struct jump pjump[] = { {"filter-primitive", 0, parse_primitive}, {"type", PARSE_STATE_PRIMITIVE, parse_primitive_type}, {"permit", PARSE_STATE_PRIMITIVE, parse_primitive_permit}, {"deny", PARSE_STATE_PRIMITIVE, parse_primitive_deny}, {"default", PARSE_STATE_PRIMITIVE, parse_primitive_default}, {"mask", PARSE_STATE_PRIMITIVE, parse_primitive_mask}, {"filter-definition", 0, parse_definition}, {"match", PARSE_STATE_DEFINITION, parse_definition_match}, {"or", PARSE_STATE_DEFINITION, parse_definition_or}, {"invert", PARSE_STATE_DEFINITION, parse_definition_invert}, {0, 0, 0}, }; /* * data structures: * * Each primitive is stored in a linked list of struct ftfil_primitive. The * head is ftfil.primitives. Each primitive has a lookup entry which * points to a struct ftfil_lookup_* based on the enum ftfil_primitive_type * stored as type. Some lookup entries allocate further storage (ie * a hash, radix tree, or linked list for the linear lookups). * * Each definition is stored in a linked list of struct ftfil_def. * The head is ftfil.defs. Each definition has a list of * ftfil_match matches. The matches have a list of ftfil_match_items. * For a match to be satisfied each each item in the match must evaluate * true (AND). For a definition to be satisfied (permitted) one of the * entries in the match list must be satisfied (OR). * * Each primitive (enum ftfil_primitive_type) has an associated * parse_primitive_type_xxx(). * * Each match type (enum ftfil_def_match) has an associated * eval_match_xxx(). * * ftfil_eval() walks the matches and the match items for the definition * passed to it looking for a match. If every match item in a match * evaluated to permit (enum ftfil_mode) a permit is returned, else * a deny. * * The current evaluator code does not cache results. For example * * match src-ip-addr test1 * match ip-protocol test2 * or * match src-ip-addr test1 * match ip-port test3 * * If the first two matches fail the result from "match src-ip-addr test1" * will need to be calculated a second time. In practice this doesn't * seem to be a problem -- the performance impact is minimal for real * world definitions. Adding a cache would most likely reduce performance * for most cases due to overhead of the cache test/update code. * * Also note that in the above example if the first two matches pass * the the next two will not be evaluated at all - short circuit. */ /* ************************************************************************* eval_* ************************************************************************* */ /* * function: eval_match_src_as * * Evalute src_as * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_src_as(struct ftfil_lookup_as *lookup, char *rec, struct fts3rec_offsets *fo) { u_int16 *src_as; int val; src_as = ((u_int16*)(rec+fo->src_as)); val = lookup->mode[*src_as]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_src_as */ /* * function: eval_match_dst_as * * Evalute dst_as * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_dst_as(struct ftfil_lookup_as *lookup, char *rec, struct fts3rec_offsets *fo) { u_int16 *dst_as; int val; dst_as = ((u_int16*)(rec+fo->dst_as)); val = lookup->mode[*dst_as]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_dst_as */ /* * function: eval_match_ip_prot * * Evalute ip_prot * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_prot(struct ftfil_lookup_ip_prot *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 *ip_prot; int val; ip_prot = ((u_int8*)(rec+fo->prot)); val = lookup->mode[*ip_prot]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_prot */ /* * function: eval_match_ip_src_prefix_len * * Evalute ip_src_prefix_len * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_src_prefix_len(struct ftfil_lookup_ip_prefix_len *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 *src_mask; int val; src_mask = ((u_int8*)(rec+fo->src_mask)); val = lookup->mode[*src_mask]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_src_prefix_len */ /* * function: eval_match_ip_dst_prefix_len * * Evalute ip_dst_prefix_len * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_dst_prefix_len(struct ftfil_lookup_ip_prefix_len *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 *dst_mask; int val; dst_mask = ((u_int8*)(rec+fo->dst_mask)); val = lookup->mode[*dst_mask]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_dst_prefix_len */ /* * function: eval_match_ip_tos * * Evalute ip_tos * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_tos(struct ftfil_lookup_ip_tos *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 tos; int val; tos = *((u_int8*)(rec+fo->tos)); tos &= lookup->mask; val = lookup->mode[tos]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_tos */ /* * function: eval_match_marked_ip_tos * * Evalute marked_ip_tos * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_marked_tos(struct ftfil_lookup_ip_tos *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 marked_tos; int val; marked_tos = *((u_int8*)(rec+fo->marked_tos)); marked_tos &= lookup->mask; val = lookup->mode[marked_tos]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_marked_tos */ /* * function: eval_match_ip_tcp_flags * * Evalute ip_tcp_flags * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_tcp_flags(struct ftfil_lookup_ip_tcp_flags *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 tcp_flags; int val; tcp_flags = *((u_int8*)(rec+fo->tcp_flags)); tcp_flags &= lookup->mask; val = lookup->mode[tcp_flags]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_tcp_flags */ /* * function: eval_match_ip_src_port * * Evalute ip_src_port * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_src_port(struct ftfil_lookup_ip_port *lookup, char *rec, struct fts3rec_offsets *fo) { u_int16 *src_port; int val; src_port = ((u_int16*)(rec+fo->srcport)); val = lookup->mode[*src_port]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_src_port */ /* * function: eval_match_ip_dst_port * * Evalute ip_dst_port * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_dst_port(struct ftfil_lookup_ip_port *lookup, char *rec, struct fts3rec_offsets *fo) { u_int16 *dst_port; int val; dst_port = ((u_int16*)(rec+fo->dstport)); val = lookup->mode[*dst_port]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_ip_dst_port */ /* * function: eval_match_src_if_index * * Evalute src_if_index * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_src_if_index(struct ftfil_lookup_if_index *lookup, char *rec, struct fts3rec_offsets *fo) { u_int16 *src_if_index; int val; src_if_index = ((u_int16*)(rec+fo->input)); val = lookup->mode[*src_if_index]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_src_if_index */ /* * function: eval_match_dst_if_index * * Evalute dst_if_index * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_dst_if_index(struct ftfil_lookup_if_index *lookup, char *rec, struct fts3rec_offsets *fo) { u_int16 *dst_if_index; int val; dst_if_index = ((u_int16*)(rec+fo->output)); val = lookup->mode[*dst_if_index]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_dst_if_index */ /* * function: eval_match_engine_id * * Evalute engine_id * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_engine_id(struct ftfil_lookup_engine *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 *engine_id; int val; engine_id = ((u_int8*)(rec+fo->engine_id)); val = lookup->mode[*engine_id]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_engine_id */ /* * function: eval_match_engine_type * * Evalute engine_type * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_engine_type(struct ftfil_lookup_engine *lookup, char *rec, struct fts3rec_offsets *fo) { u_int8 *engine_type; int val; engine_type = ((u_int8*)(rec+fo->engine_type)); val = lookup->mode[*engine_type]; if (val == FT_FIL_MODE_PERMIT) return FT_FIL_MODE_PERMIT; else if (val == FT_FIL_MODE_DENY) return FT_FIL_MODE_DENY; else return lookup->default_mode; } /* eval_match_engine_type */ /* * function: eval_match_flows * * Evalute flows * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_flows(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; u_int32 *flows; int t, match; flows = ((u_int32*)(rec+fo->dFlows)); match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (*flows < ftflcr->val); break; case FT_FIL_OP_GT: t = (*flows > ftflcr->val); break; case FT_FIL_OP_EQ: t = (*flows == ftflcr->val); break; case FT_FIL_OP_NE: t = (*flows != ftflcr->val); break; case FT_FIL_OP_GE: t = (*flows >= ftflcr->val); break; case FT_FIL_OP_LE: t = (*flows <= ftflcr->val); break; default: fterr_warnx("eval_match_flows: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_flows */ /* * function: eval_match_octets * * Evalute octets * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_octets(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; u_int32 *octets; int t, match; octets = ((u_int32*)(rec+fo->dOctets)); match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (*octets < ftflcr->val); break; case FT_FIL_OP_GT: t = (*octets > ftflcr->val); break; case FT_FIL_OP_EQ: t = (*octets == ftflcr->val); break; case FT_FIL_OP_NE: t = (*octets != ftflcr->val); break; case FT_FIL_OP_GE: t = (*octets >= ftflcr->val); break; case FT_FIL_OP_LE: t = (*octets <= ftflcr->val); break; default: fterr_warnx("eval_match_octets: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_octets */ /* * function: eval_match_packets * * Evalute packets * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_packets(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; u_int32 *packets; int t, match; packets = ((u_int32*)(rec+fo->dPkts)); match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (*packets < ftflcr->val); break; case FT_FIL_OP_GT: t = (*packets > ftflcr->val); break; case FT_FIL_OP_EQ: t = (*packets == ftflcr->val); break; case FT_FIL_OP_NE: t = (*packets != ftflcr->val); break; case FT_FIL_OP_GE: t = (*packets >= ftflcr->val); break; case FT_FIL_OP_LE: t = (*packets <= ftflcr->val); break; default: fterr_warnx("eval_match_packets: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_packets */ /* * function: eval_match_xtra_packets * * Evalute xtra_packets * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_xtra_packets(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; u_int32 *xtra_packets; int t, match; xtra_packets = ((u_int32*)(rec+fo->extra_pkts)); match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (*xtra_packets < ftflcr->val); break; case FT_FIL_OP_GT: t = (*xtra_packets > ftflcr->val); break; case FT_FIL_OP_EQ: t = (*xtra_packets == ftflcr->val); break; case FT_FIL_OP_NE: t = (*xtra_packets != ftflcr->val); break; case FT_FIL_OP_GE: t = (*xtra_packets >= ftflcr->val); break; case FT_FIL_OP_LE: t = (*xtra_packets <= ftflcr->val); break; default: fterr_warnx("eval_match_xtra_packets: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_xtra_packets */ /* * function: eval_match_duration * * Evalute duration * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_duration(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; u_int32 duration, *first, *last; int t, match; first = ((u_int32*)(rec+fo->First)); last = ((u_int32*)(rec+fo->Last)); duration = *last - *first; match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (duration < ftflcr->val); break; case FT_FIL_OP_GT: t = (duration > ftflcr->val); break; case FT_FIL_OP_EQ: t = (duration == ftflcr->val); break; case FT_FIL_OP_NE: t = (duration != ftflcr->val); break; case FT_FIL_OP_GE: t = (duration >= ftflcr->val); break; case FT_FIL_OP_LE: t = (duration <= ftflcr->val); break; default: fterr_warnx("eval_match_duration: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_duration */ /* * function: eval_match_start_time_date * * Evalute start_time_date * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_start_time_date(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; struct fttime ftt; u_int32 *sysUpTime, *unix_secs, *unix_nsecs, *First; int t, match; sysUpTime = ((u_int32*)(rec+fo->sysUpTime)); unix_secs = ((u_int32*)(rec+fo->unix_secs)); unix_nsecs = ((u_int32*)(rec+fo->unix_nsecs)); First = ((u_int32*)(rec+fo->First)); ftt = ftltime(*sysUpTime, *unix_secs, *unix_nsecs, *First); match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (ftt.secs < ftflcr->val); break; case FT_FIL_OP_GT: t = (ftt.secs > ftflcr->val); break; case FT_FIL_OP_EQ: t = (ftt.secs == ftflcr->val); break; case FT_FIL_OP_NE: t = (ftt.secs != ftflcr->val); break; case FT_FIL_OP_GE: t = (ftt.secs >= ftflcr->val); break; case FT_FIL_OP_LE: t = (ftt.secs <= ftflcr->val); break; default: fterr_warnx("eval_match_start_time_date: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_start_time_date */ /* * function: eval_match_end_time_date * * Evalute end_time_date * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_end_time_date(struct ftfil_lookup_counter *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_counter_rec *ftflcr; struct fttime ftt; u_int32 *sysUpTime, *unix_secs, *unix_nsecs, *Last; int t, match; sysUpTime = ((u_int32*)(rec+fo->sysUpTime)); unix_secs = ((u_int32*)(rec+fo->unix_secs)); unix_nsecs = ((u_int32*)(rec+fo->unix_nsecs)); Last = ((u_int32*)(rec+fo->Last)); ftt = ftltime(*sysUpTime, *unix_secs, *unix_nsecs, *Last); match = 0; FT_STAILQ_FOREACH(ftflcr, &lookup->list, chain) { switch (ftflcr->op) { case FT_FIL_OP_LT: t = (ftt.secs < ftflcr->val); break; case FT_FIL_OP_GT: t = (ftt.secs > ftflcr->val); break; case FT_FIL_OP_EQ: t = (ftt.secs == ftflcr->val); break; case FT_FIL_OP_NE: t = (ftt.secs != ftflcr->val); break; case FT_FIL_OP_GE: t = (ftt.secs >= ftflcr->val); break; case FT_FIL_OP_LE: t = (ftt.secs <= ftflcr->val); break; default: fterr_warnx("eval_match_end_time_date: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftflcr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_end_time_date */ /* * function: eval_match_start_time * * Evalute start_time * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_start_time(struct ftfil_lookup_time *lookup, char *rec, struct fts3rec_offsets *fo) { time_t t1, t2; struct tm *tm; struct ftfil_lookup_time_rec *ftfltmer; struct fttime ftt; u_int32 *sysUpTime, *unix_secs, *unix_nsecs, *First; int t, match; sysUpTime = ((u_int32*)(rec+fo->sysUpTime)); unix_secs = ((u_int32*)(rec+fo->unix_secs)); unix_nsecs = ((u_int32*)(rec+fo->unix_nsecs)); First = ((u_int32*)(rec+fo->First)); ftt = ftltime(*sysUpTime, *unix_secs, *unix_nsecs, *First); t1 = ftt.secs; /* tm is now "today" for the flow */ tm = localtime(&t1); tm->tm_hour = 0; tm->tm_min = 0; tm->tm_sec = 0; match = 0; FT_STAILQ_FOREACH(ftfltmer, &lookup->list, chain) { /* * find where the hh:mm:ss for this filter falls relative to day start, * store as t2 */ tm->tm_hour = ftfltmer->hour; tm->tm_min = ftfltmer->min; tm->tm_sec = ftfltmer->sec; t2 = mktime(tm); switch (ftfltmer->op) { case FT_FIL_OP_LT: t = (t1 < t2); break; case FT_FIL_OP_GT: t = (t1 > t2); break; case FT_FIL_OP_EQ: t = (t1 == t2); break; case FT_FIL_OP_NE: t = (t1 != t2); break; case FT_FIL_OP_GE: t = (t1 >= t2); break; case FT_FIL_OP_LE: t = (t1 <= t2); break; default: fterr_warnx("eval_match_start_time: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftfltmer */ /* if there was a match, then return that mode */ if (match) return ftfltmer->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_start_time */ /* * function: eval_match_end_time * * Evalute end_time * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_end_time(struct ftfil_lookup_time *lookup, char *rec, struct fts3rec_offsets *fo) { time_t t1, t2; struct tm *tm; struct ftfil_lookup_time_rec *ftfltmer; struct fttime ftt; u_int32 *sysUpTime, *unix_secs, *unix_nsecs, *Last; int t, match; sysUpTime = ((u_int32*)(rec+fo->sysUpTime)); unix_secs = ((u_int32*)(rec+fo->unix_secs)); unix_nsecs = ((u_int32*)(rec+fo->unix_nsecs)); Last = ((u_int32*)(rec+fo->Last)); ftt = ftltime(*sysUpTime, *unix_secs, *unix_nsecs, *Last); t1 = ftt.secs; /* tm is now "today" for the flow */ tm = localtime(&t1); tm->tm_hour = 0; tm->tm_min = 0; tm->tm_sec = 0; match = 0; FT_STAILQ_FOREACH(ftfltmer, &lookup->list, chain) { /* * find where the hh:mm:ss for this filter falls relative to day start, * store as t2 */ tm->tm_hour = ftfltmer->hour; tm->tm_min = ftfltmer->min; tm->tm_sec = ftfltmer->sec; t2 = mktime(tm); switch (ftfltmer->op) { case FT_FIL_OP_LT: t = (t1 < t2); break; case FT_FIL_OP_GT: t = (t1 > t2); break; case FT_FIL_OP_EQ: t = (t1 == t2); break; case FT_FIL_OP_NE: t = (t1 != t2); break; case FT_FIL_OP_GE: t = (t1 >= t2); break; case FT_FIL_OP_LE: t = (t1 <= t2); break; default: fterr_warnx("eval_match_end_time: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftfltmer */ /* if there was a match, then return that mode */ if (match) return ftfltmer->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_end_time */ /* * function: eval_match_src_tag_l * * Evalute src_tag as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_src_tag_l(struct ftfil_lookup_tag_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_tag_mask_rec *ftfltmr; u_int32 *src_tag; int match; src_tag = ((u_int32*)(rec+fo->src_tag)); match = 0; FT_STAILQ_FOREACH(ftfltmr, &lookup->list, chain) { /* match? */ if ((*src_tag & ftfltmr->mask) == ftfltmr->tag) { match = 1; break; } } /* ftfltmr */ /* if there was a match, then return that mode */ if (match) return ftfltmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_src_tag_l */ /* * function: eval_match_src_tag_h * * Evalute src_tag as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_src_tag_h(struct ftfil_lookup_tag *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *src_tag, hash; int match; src_tag = ((u_int32*)(rec+fo->src_tag)); match = 0; hash = (*src_tag>>16) ^ (*src_tag & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, src_tag, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_src_tag_h */ /* * function: eval_match_dst_tag_h * * Evalute dst_tag as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_dst_tag_h(struct ftfil_lookup_tag *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *dst_tag, hash; int match; dst_tag = ((u_int32*)(rec+fo->dst_tag)); match = 0; hash = (*dst_tag>>16) ^ (*dst_tag & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, dst_tag, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_dst_tag_h */ /* * function: eval_match_dst_tag_l * * Evalute dst_tag as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_dst_tag_l(struct ftfil_lookup_tag_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_tag_mask_rec *ftfltmr; u_int32 *dst_tag; int match; dst_tag = ((u_int32*)(rec+fo->dst_tag)); match = 0; FT_STAILQ_FOREACH(ftfltmr, &lookup->list, chain) { /* match? */ if ((*dst_tag & ftfltmr->mask) == ftfltmr->tag) { match = 1; break; } } /* ftfltmr */ /* if there was a match, then return that mode */ if (match) return ftfltmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_dst_tag_l */ /* * function: eval_match_nexthop_l * * Evalute nexthop as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_nexthop_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_mask_rec *ftflipmr; u_int32 *nexthop; int match; nexthop = ((u_int32*)(rec+fo->nexthop)); match = 0; FT_STAILQ_FOREACH(ftflipmr, &lookup->list, chain) { /* match? */ if ((*nexthop & ftflipmr->mask) == ftflipmr->ip) { match = 1; break; } } /* ftflipmr */ /* if there was a match, then return that mode */ if (match) return ftflipmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_nexthop_addr_l */ /* * function: eval_match_ip_nexthop_addr_h * * Evalute nexthop as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_nexthop_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *nexthop, hash; int match; nexthop = ((u_int32*)(rec+fo->nexthop)); match = 0; hash = (*nexthop>>16) ^ (*nexthop & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, nexthop, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_nexthop_addr_h */ /* * function: eval_match_ip_nexthop_addr_r * * Evalute nexthop as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_nexthop_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_prefix_rec *ftflipprr; struct radix_node_head *rhead; struct radix_sockaddr_in sock1; int match; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->nexthop)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; match = 0; rhead = lookup->rhead; if ((ftflipprr = (struct ftfil_lookup_ip_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) match = 1; /* if there was a match, then return that mode */ if (match) return ftflipprr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_nexthop_addr_r */ /* * function: eval_match_ip_sc_addr_l * * Evalute sc as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_sc_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_mask_rec *ftflipmr; u_int32 *sc; int match; sc = ((u_int32*)(rec+fo->router_sc)); match = 0; FT_STAILQ_FOREACH(ftflipmr, &lookup->list, chain) { /* match? */ if ((*sc & ftflipmr->mask) == ftflipmr->ip) { match = 1; break; } } /* ftflipmr */ /* if there was a match, then return that mode */ if (match) return ftflipmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_sc_addr_l */ /* * function: eval_match_ip_sc_addr_h * * Evalute sc as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_sc_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *sc, hash; int match; sc = ((u_int32*)(rec+fo->router_sc)); match = 0; hash = (*sc>>16) ^ (*sc & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, sc, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_sc_addr_h */ /* * function: eval_match_ip_sc_addr_r * * Evalute sc as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_sc_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_prefix_rec *ftflipprr; struct radix_node_head *rhead; struct radix_sockaddr_in sock1; int match; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->router_sc)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; match = 0; rhead = lookup->rhead; if ((ftflipprr = (struct ftfil_lookup_ip_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) match = 1; /* if there was a match, then return that mode */ if (match) return ftflipprr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_sc_addr_r */ /* * function: eval_match_ip_src_addr_l * * Evalute ip_src_addr as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_src_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_mask_rec *ftflipmr; u_int32 *ip_src_addr; int match; ip_src_addr = ((u_int32*)(rec+fo->srcaddr)); match = 0; FT_STAILQ_FOREACH(ftflipmr, &lookup->list, chain) { /* match? */ if ((*ip_src_addr & ftflipmr->mask) == ftflipmr->ip) { match = 1; break; } } /* ftflipmr */ /* if there was a match, then return that mode */ if (match) return ftflipmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_src_addr_l */ /* * function: eval_match_ip_src_addr_h * * Evalute ip_src_addr as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_src_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *ip_src_addr, hash; int match; ip_src_addr = ((u_int32*)(rec+fo->srcaddr)); match = 0; hash = (*ip_src_addr>>16) ^ (*ip_src_addr & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, ip_src_addr, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_src_addr_h */ /* * function: eval_match_ip_src_addr_r * * Evalute ip_src_addr as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_src_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_prefix_rec *ftflipprr; struct radix_node_head *rhead; struct radix_sockaddr_in sock1; int match; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->srcaddr)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; match = 0; rhead = lookup->rhead; if ((ftflipprr = (struct ftfil_lookup_ip_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) match = 1; /* if there was a match, then return that mode */ if (match) return ftflipprr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_src_addr_r */ /* * function: eval_match_ip_dst_addr_l * * Evalute ip_dst_addr as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_dst_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_mask_rec *ftflipmr; u_int32 *ip_dst_addr; int match; ip_dst_addr = ((u_int32*)(rec+fo->dstaddr)); match = 0; FT_STAILQ_FOREACH(ftflipmr, &lookup->list, chain) { /* match? */ if ((*ip_dst_addr & ftflipmr->mask) == ftflipmr->ip) { match = 1; break; } } /* ftflipmr */ /* if there was a match, then return that mode */ if (match) return ftflipmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_dst_addr_l */ /* * function: eval_match_ip_dst_addr_h * * Evalute ip_dst_addr as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_dst_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *ip_dst_addr, hash; int match; ip_dst_addr = ((u_int32*)(rec+fo->dstaddr)); match = 0; hash = (*ip_dst_addr>>16) ^ (*ip_dst_addr & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, ip_dst_addr, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_dst_addr_h */ /* * function: eval_match_ip_dst_addr_r * * Evalute ip_dst_addr as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_dst_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_prefix_rec *ftflipprr; struct radix_node_head *rhead; struct radix_sockaddr_in sock1; int match; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->dstaddr)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; match = 0; rhead = lookup->rhead; if ((ftflipprr = (struct ftfil_lookup_ip_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) match = 1; /* if there was a match, then return that mode */ if (match) return ftflipprr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_dst_addr_r */ /* * function: eval_match_ip_exporter_addr_l * * Evalute ip_exporter_addr as list * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_exporter_addr_l(struct ftfil_lookup_ip_mask *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_mask_rec *ftflipmr; u_int32 *ip_exporter_addr; int match; ip_exporter_addr = ((u_int32*)(rec+fo->exaddr)); match = 0; FT_STAILQ_FOREACH(ftflipmr, &lookup->list, chain) { /* match? */ if ((*ip_exporter_addr & ftflipmr->mask) == ftflipmr->ip) { match = 1; break; } } /* ftflipmr */ /* if there was a match, then return that mode */ if (match) return ftflipmr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_exporter_addr_l */ /* * function: eval_match_ip_exporter_addr_h * * Evalute ip_exporter_addr as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_exporter_addr_h(struct ftfil_lookup_ip_address *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_fil_c32 *ftch_recfc32p; u_int32 *ip_exporter_addr, hash; int match; ip_exporter_addr = ((u_int32*)(rec+fo->exaddr)); match = 0; hash = (*ip_exporter_addr>>16) ^ (*ip_exporter_addr & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(lookup->ftch, ip_exporter_addr, hash))) match = 1; /* if there was a match, then return that mode */ if (match) return ftch_recfc32p->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_exporter_addr_h */ /* * function: eval_match_ip_exporter_addr_r * * Evalute ip_exporter_addr as hash * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_ip_exporter_addr_r(struct ftfil_lookup_ip_prefix *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_ip_prefix_rec *ftflipprr; struct radix_node_head *rhead; struct radix_sockaddr_in sock1; int match; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->exaddr)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; match = 0; rhead = lookup->rhead; if ((ftflipprr = (struct ftfil_lookup_ip_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) match = 1; /* if there was a match, then return that mode */ if (match) return ftflipprr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_ip_exporter_addr_r */ /* * function: eval_match_bps * * Evalute Bits Per Second * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_bps(struct ftfil_lookup_double *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_double_rec *ftfldr; double bps; u_int32 dOctets, Last, First, duration; int t, match; dOctets = *((u_int32*)(rec+fo->dOctets)); Last = *((u_int32*)(rec+fo->Last)); First = *((u_int32*)(rec+fo->First)); duration = Last - First; if (duration) bps = (double)dOctets*8 / ((double)duration / 1000.0); else bps = 0; match = 0; FT_STAILQ_FOREACH(ftfldr, &lookup->list, chain) { switch (ftfldr->op) { case FT_FIL_OP_LT: t = (bps < ftfldr->val); break; case FT_FIL_OP_GT: t = (bps > ftfldr->val); break; case FT_FIL_OP_EQ: t = (bps == ftfldr->val); break; case FT_FIL_OP_NE: t = (bps != ftfldr->val); break; case FT_FIL_OP_GE: t = (bps >= ftfldr->val); break; case FT_FIL_OP_LE: t = (bps <= ftfldr->val); break; default: fterr_warnx("eval_match_flows: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftfldr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_bps */ /* * function: eval_match_pps * * Evalute Packets Per Second * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_pps(struct ftfil_lookup_double *lookup, char *rec, struct fts3rec_offsets *fo) { struct ftfil_lookup_double_rec *ftfldr; double pps; u_int32 dPkts, Last, First, duration; int t, match; dPkts = *((u_int32*)(rec+fo->dPkts)); Last = *((u_int32*)(rec+fo->Last)); First = *((u_int32*)(rec+fo->First)); duration = Last - First; if (duration) pps = (double)dPkts / ((double)duration / 1000.0); else pps = 0; match = 0; FT_STAILQ_FOREACH(ftfldr, &lookup->list, chain) { switch (ftfldr->op) { case FT_FIL_OP_LT: t = (pps < ftfldr->val); break; case FT_FIL_OP_GT: t = (pps > ftfldr->val); break; case FT_FIL_OP_EQ: t = (pps == ftfldr->val); break; case FT_FIL_OP_NE: t = (pps != ftfldr->val); break; case FT_FIL_OP_GE: t = (pps >= ftfldr->val); break; case FT_FIL_OP_LE: t = (pps <= ftfldr->val); break; default: fterr_warnx("eval_match_flows: internal error"); return -1; break; } /* switch */ /* did this line match? */ if (t) { match = 1; break; } } /* ftflcr */ /* if there was a match, then return that mode */ if (match) return ftfldr->mode; /* else return the default */ return lookup->default_mode; } /* eval_match_pps */ /* * function: eval_match_random_sample * * Evalute random_sample * * returns: FT_FIL_MODE_PERMIT * FT_FIL_MODE_DENY */ inline int eval_match_random_sample(struct ftfil_lookup_rate *lookup, char *rec, struct fts3rec_offsets *fo) { int val; /* val is a random number from 0..lookup->rate-1 */ val = rand() % lookup->rate; /* pick 0 as the "pass" value -- could have picked any number in the range */ if (!val) return (lookup->mode == FT_FIL_MODE_PERMIT) ? FT_FIL_MODE_PERMIT : FT_FIL_MODE_DENY; else return (lookup->mode == FT_FIL_MODE_PERMIT) ? FT_FIL_MODE_DENY : FT_FIL_MODE_PERMIT; } /* eval_match_random_sample */ /* ************************************************************************* public ftfil_* ************************************************************************* */ /* * function: ftfil_load * * Process fname into ftfil. * * returns: 0 ok * <0 fail */ int ftfil_load(struct ftfil *ftfil, struct ftvar *ftvar, char *fname) { struct stat sb; struct jump *jmp; struct line_parser lp; int fd, ret, found; char *buf, *buf2, *c; char sbuf[FT_LP_MAXLINE]; ret = -1; buf = (char*)0L; bzero(&lp, sizeof lp); bzero(ftfil, sizeof *ftfil); FT_SLIST_INIT(&ftfil->defs); FT_SLIST_INIT(&ftfil->primitives); lp.sym_ip_prot = ftsym_new(FT_PATH_SYM_IP_PROT); lp.sym_ip_tcp_port = ftsym_new(FT_PATH_SYM_TCP_PORT); lp.sym_asn = ftsym_new(FT_PATH_SYM_ASN); lp.sym_tag = ftsym_new(FT_PATH_SYM_TAG); lp.fname = fname; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto load_fil_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto load_fil_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto load_fil_out; } /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(%s): short", fname); goto load_fil_out; } /* null terminate file */ buf[sb.st_size] = 0; buf2 = buf; for (;;) { /* rip a line */ for (;;) { c = strsep(&buf2, "\n"); ++lp.lineno; if ((c && *c != 0) || (!c)) break; } /* no more lines */ if (!c) { goto load_fil_done; } /* do variable substitutions first */ if (ftvar) { if (ftvar_evalstr(ftvar, c, sbuf, sizeof(sbuf)) < 0) { fterr_warnx("ftvar_evalstr(): failed"); goto load_fil_done; } } else { strncpy(sbuf, c, sizeof(sbuf)); sbuf[sizeof(sbuf)-1] = 0; } lp.buf = sbuf; /* first word */ NEXT_WORD(&lp.buf, c); /* whitespace only line */ if (!c) { continue; } /* comment line */ if (c && *c == '#') continue; for (jmp = pjump; jmp->name; ++jmp) { found = 0; if (((!jmp->state) || (jmp->state & lp.state)) && (!strcasecmp(c, jmp->name))) { found = 1; if (jmp->func(&lp, ftfil)) goto load_fil_out; NEXT_WORD(&lp.buf, c); if (c) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_fil_out;; } break; } } /* test each word */ if (!found) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_fil_out; } } /* more lines */ load_fil_done: if (resolve_primitives(ftfil)) { fterr_warnx("resolve_primitives(): failed"); goto load_fil_out; } ret = 0; load_fil_out: if (fd != -1) close(fd); if (buf) free(buf); if (ret == -1) ftfil_free(ftfil); if (lp.sym_ip_prot) ftsym_free(lp.sym_ip_prot); if (lp.sym_ip_tcp_port) ftsym_free(lp.sym_ip_tcp_port); if (lp.sym_asn) ftsym_free(lp.sym_asn); if (lp.sym_tag) ftsym_free(lp.sym_tag); return ret; } /* ftfil_load */ void ftfil_free(struct ftfil *ftfil) { struct ftfil_primitive *ftfp; struct ftfil_lookup_ip_address *ftflipa; struct ftfil_lookup_ip_prefix *ftflippr; struct ftfil_lookup_ip_mask *ftflipm; struct ftfil_lookup_counter *ftflc; struct ftfil_lookup_counter_rec *ftflcr; struct ftfil_lookup_tag *ftflt; struct ftfil_lookup_tag_mask *ftfltm; struct ftfil_lookup_tag_mask_rec *ftfltmr; struct ftfil_lookup_ip_mask_rec *ftflipmr; struct ftfil_def *ftfd; struct ftfil_match *ftm; struct ftfil_match_item *ftmi; struct ftfil_lookup_time *ftfltme; struct ftfil_lookup_time_rec *ftfltmer; struct ftfil_lookup_double *ftfld; struct ftfil_lookup_double_rec *ftfldr; /* * walk the primitive list, free each entry */ while (!FT_SLIST_EMPTY(&ftfil->primitives)) { ftfp = FT_SLIST_FIRST(&ftfil->primitives); switch (ftfp->type) { case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX: ftflippr = ftfp->lookup; if (ftflippr->init) { rhead = ftflippr->rhead; rhead->rnh_walktree(rhead, walk_free, 0); } break; case FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS: ftflipa = ftfp->lookup; if (ftflipa->init) ftchash_free(ftflipa->ftch); break; case FT_FIL_PRIMITIVE_TYPE_IP_MASK: ftflipm = ftfp->lookup; while (!FT_STAILQ_EMPTY(&ftflipm->list)) { ftflipmr = FT_STAILQ_FIRST(&ftflipm->list); FT_STAILQ_REMOVE_HEAD(&ftflipm->list, chain); free(ftflipmr); } break; case FT_FIL_PRIMITIVE_TYPE_COUNTER: case FT_FIL_PRIMITIVE_TYPE_TIME_DATE: ftflc = ftfp->lookup; while (!FT_STAILQ_EMPTY(&ftflc->list)) { ftflcr = FT_STAILQ_FIRST(&ftflc->list); FT_STAILQ_REMOVE_HEAD(&ftflc->list, chain); free(ftflcr); } break; case FT_FIL_PRIMITIVE_TYPE_TAG: ftflt = ftfp->lookup; if (ftflt->init) ftchash_free(ftflt->ftch); break; case FT_FIL_PRIMITIVE_TYPE_TAG_MASK: ftfltm = ftfp->lookup; while (!FT_STAILQ_EMPTY(&ftfltm->list)) { ftfltmr = FT_STAILQ_FIRST(&ftfltm->list); FT_STAILQ_REMOVE_HEAD(&ftfltm->list, chain); free(ftfltmr); } break; case FT_FIL_PRIMITIVE_TYPE_TIME: ftfltme = ftfp->lookup; while (!FT_STAILQ_EMPTY(&ftfltme->list)) { ftfltmer = FT_STAILQ_FIRST(&ftfltme->list); FT_STAILQ_REMOVE_HEAD(&ftfltme->list, chain); free(ftfltmer); } break; case FT_FIL_PRIMITIVE_TYPE_DOUBLE: ftfld = ftfp->lookup; while (!FT_STAILQ_EMPTY(&ftfld->list)) { ftfldr = FT_STAILQ_FIRST(&ftfld->list); FT_STAILQ_REMOVE_HEAD(&ftfld->list, chain); free(ftfldr); } break; case FT_FIL_PRIMITIVE_TYPE_UNSET: case FT_FIL_PRIMITIVE_TYPE_AS: case FT_FIL_PRIMITIVE_TYPE_IP_PROTOCOL: case FT_FIL_PRIMITIVE_TYPE_IP_PORT: case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX_LEN: case FT_FIL_PRIMITIVE_TYPE_IP_TOS: case FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS: case FT_FIL_PRIMITIVE_TYPE_IF_INDEX: case FT_FIL_PRIMITIVE_TYPE_ENGINE: case FT_FIL_PRIMITIVE_TYPE_RATE: /* no work */ break; } /* ftfp->type */ FT_SLIST_REMOVE_HEAD(&ftfil->primitives, chain); if (ftfp->name) free(ftfp->name); free(ftfp->lookup); free(ftfp); } /* !ftfil->primitives list empty */ /* * walk the definitions list, free each entry */ while (!FT_SLIST_EMPTY(&ftfil->defs)) { ftfd = FT_SLIST_FIRST(&ftfil->defs); while (!FT_STAILQ_EMPTY(&ftfd->matches)) { ftm = FT_STAILQ_FIRST(&ftfd->matches); while (!FT_STAILQ_EMPTY(&ftm->items)) { ftmi = FT_STAILQ_FIRST(&ftm->items); if (ftmi->tmp_primitive) free(ftmi->tmp_primitive); if (ftmi->tmp_type) free(ftmi->tmp_type); FT_STAILQ_REMOVE_HEAD(&ftm->items, chain); free(ftmi); } /* !ftm->items list empty */ FT_STAILQ_REMOVE_HEAD(&ftfd->matches, chain); free(ftm); } /* !ftfd->matches list empty */ FT_SLIST_REMOVE_HEAD(&ftfil->defs, chain); if (ftfd->name) free(ftfd->name); free(ftfd); } /* !ftfil->defs list empty */ } /* ftfil_free */ struct ftfil_def *ftfil_def_find(struct ftfil *ftfil, char *name) { struct ftfil_def *ftfd; int found; found = 0; FT_SLIST_FOREACH(ftfd, &ftfil->defs, chain) { if (!strcasecmp(name, ftfd->name)) return ftfd; } /* ftfd */ return (struct ftfil_def*)0L; } /* ftfil_def_find */ /* * function: ftfil_def_eval * * Evaluate a flow with a filter definition * * returns: FT_FIL_MODE_PERMIT or FT_FIL_MODE_DENY * <0 fail */ int ftfil_def_eval(struct ftfil_def *active_def, char *rec, struct fts3rec_offsets *fo) { struct ftfil_match_item *ftmi; struct ftfil_match *ftm; int done; /* for each match (OR path) */ FT_STAILQ_FOREACH(ftm, &active_def->matches, chain) { done = 1; /* for each matchi (AND path) */ FT_STAILQ_FOREACH(ftmi, &ftm->items, chain) { if (ftmi->eval(ftmi->lookup, rec, fo) == FT_FIL_MODE_DENY) { done = 0; break; } } /* matchi */ if (done) return active_def->invert ? FT_FIL_MODE_DENY : FT_FIL_MODE_PERMIT; } /* match */ return active_def->invert ? FT_FIL_MODE_PERMIT : FT_FIL_MODE_DENY; } /* ftfil_def_eval */ /* * function: ftfil_test_xfields * * Check if fields in current flow are valid for a filter -- ie * the filter does not reference a field not contained in the flow. * * returns: 0 okay * 1 fail */ int ftfil_def_test_xfields(struct ftfil_def *active_def, u_int64 test) { if ((active_def->xfields & test) != active_def->xfields) return 1; else return 0; } /* ftfil_def_test_xfields */ /* ************************************************************************* parse_definition_* ************************************************************************* */ /* * function: parse_definition * * process the 'filter-definition' line. Each primitive has a unique name * which is added to the ftfil->definitions linked list. The current * definition is updated in lp. Filter definitions reference filter * primitives * * returns: 0 ok * <0 fail */ int parse_definition(struct line_parser *lp, struct ftfil *ftfil) { char *c; struct ftfil_def *ftfd; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftfd, &ftfil->defs, chain) { if (!strcasecmp(c, ftfd->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(ftfd = (struct ftfil_def*)malloc(sizeof (struct ftfil_def)))) { fterr_warn("malloc()"); return -1; } bzero(ftfd, sizeof *ftfd); FT_STAILQ_INIT(&ftfd->matches); if (!(ftfd->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftfd); return -1; } strcpy(ftfd->name, c); FT_SLIST_INSERT_HEAD(&ftfil->defs, ftfd, chain); lp->state = PARSE_STATE_DEFINITION; lp->cur_def = ftfd; lp->cur_def_match = (void*)0L; return 0; } /* parse_definition */ /* * function: parse_definition_match * * process the definition match lines * * _must_ call resolve_primitives when done with all lines and before * destroying the file parser buffer. * * returns: 0 ok * <0 fail */ static int parse_definition_match(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_match_item *ftmi; struct ftfil_match *ftm; char *c; if (!lp->cur_def) { fterr_warnx("%s line %d: Not in filter-definition mode.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting match type.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting match primitive.", lp->fname, lp->lineno); return -1; } /* * if cur_match is not set, allocate a new match. This is either the * first match line or a match after an or statement (OR path) */ if (!lp->cur_def_match) { if (!(ftm = (struct ftfil_match*)malloc(sizeof *ftm))) { fterr_warn("malloc()"); return -1; } bzero(ftm, sizeof *ftm); FT_STAILQ_INIT(&ftm->items); lp->cur_def_match = ftm; FT_STAILQ_INSERT_TAIL(&lp->cur_def->matches, ftm, chain); } /* add this match line to the current items list (AND path) */ if (!(ftmi = (struct ftfil_match_item*)malloc(sizeof *ftmi))) { fterr_warn("malloc()"); if (!lp->cur_def_match) free(ftm); /* the potential ftm allocation will get cleaned up in ftfil_free() */ return -1; } bzero(ftmi, sizeof *ftmi); if (!(ftmi->tmp_type = malloc(strlen(c)+1))) { if (!lp->cur_def_match) free(ftm); free(ftmi); fterr_warn("malloc()"); return -1; } strcpy(ftmi->tmp_type, c); if (!(ftmi->tmp_primitive = malloc(strlen(lp->word)+1))) { if (!lp->cur_def_match) free(ftm); free(ftmi->tmp_type); free(ftmi); fterr_warn("malloc()"); return -1; } strcpy(ftmi->tmp_primitive, lp->word); FT_STAILQ_INSERT_TAIL(&lp->cur_def_match->items, ftmi, chain); return 0; } /* parse_definition_match */ /* * function: parse_definition_invert * * process the definition invert * * returns: 0 ok * <0 fail */ static int parse_definition_invert(struct line_parser *lp, struct ftfil *ftfil) { if (!lp->cur_def) { fterr_warnx("%s line %d: Not in filter-definition mode.", lp->fname, lp->lineno); return -1; } lp->cur_def->invert = 1; return 0; } /* parse_definition_invert */ /* * function: resolve_primitives * * resolve the dangling pointers to primitives in definitions -- * allows definitions to be defined before primitives. * * _must_ be called after work done by parse_definition_match * * returns: 0 ok * <0 fail */ static int resolve_primitives(struct ftfil *ftfil) { struct ftfil_match_item *ftmi; struct ftfil_match *ftm; struct ftfil_primitive *ftfp; struct ftfil_def *ftfd; int type, found, valid; void *eval; /* foreach definition */ FT_SLIST_FOREACH(ftfd, &ftfil->defs, chain) { /* foreach match line in the definition */ FT_STAILQ_FOREACH(ftm, &ftfd->matches, chain) { /* for each match item in the match line */ FT_STAILQ_FOREACH(ftmi, &ftm->items, chain) { /* Find the primitive */ found = 0; FT_SLIST_FOREACH(ftfp, &ftfil->primitives, chain) { if (!strcasecmp(ftmi->tmp_primitive, ftfp->name)) { found = 1; break; } /* if */ } /* ftfp */ if (!found) { fterr_warnx( "Unable to resolve primitive \"%s\" in filter-definition \"%s\".", ftmi->tmp_primitive, ftfd->name); return -1; } /* * primitive found, set it and make rest of checks */ /* match on what? */ if (!strcasecmp(ftmi->tmp_type, "src-as")) { type = FT_FIL_DEFINITION_MATCH_SRC_AS; eval = eval_match_src_as; ftfd->xfields |= FT_XFIELD_SRC_AS; } else if (!strcasecmp(ftmi->tmp_type, "source-as")) { type = FT_FIL_DEFINITION_MATCH_SRC_AS; eval = eval_match_src_as; ftfd->xfields |= FT_XFIELD_SRC_AS; } else if (!strcasecmp(ftmi->tmp_type, "dst-as")) { type = FT_FIL_DEFINITION_MATCH_DST_AS; eval = eval_match_dst_as; ftfd->xfields |= FT_XFIELD_DST_AS; } else if (!strcasecmp(ftmi->tmp_type, "destination-as")) { type = FT_FIL_DEFINITION_MATCH_DST_AS; eval = eval_match_dst_as; ftfd->xfields |= FT_XFIELD_DST_AS; } else if (!strcasecmp(ftmi->tmp_type, "ip-protocol")) { type = FT_FIL_DEFINITION_MATCH_IP_PROTOCOL; eval = eval_match_ip_prot; ftfd->xfields |= FT_XFIELD_PROT; } else if (!strcasecmp(ftmi->tmp_type, "src-ip-addr-prefix-len")) { type = FT_FIL_DEFINITION_MATCH_IP_SRC_PREFIX_LEN; eval = eval_match_ip_src_prefix_len; ftfd->xfields |= FT_XFIELD_SRC_MASK; } else if (!strcasecmp(ftmi->tmp_type, "ip-source-address-prefix-len")) { type = FT_FIL_DEFINITION_MATCH_IP_SRC_PREFIX_LEN; eval = eval_match_ip_src_prefix_len; ftfd->xfields |= FT_XFIELD_SRC_MASK; } else if (!strcasecmp(ftmi->tmp_type, "dst-ip-addr-prefix-len")) { type = FT_FIL_DEFINITION_MATCH_IP_DST_PREFIX_LEN; eval = eval_match_ip_dst_prefix_len; ftfd->xfields |= FT_XFIELD_DST_MASK; } else if (!strcasecmp(ftmi->tmp_type, "ip-destination-address-prefix-len")) { type = FT_FIL_DEFINITION_MATCH_IP_DST_PREFIX_LEN; eval = eval_match_ip_dst_prefix_len; ftfd->xfields |= FT_XFIELD_DST_MASK; } else if (!strcasecmp(ftmi->tmp_type, "ip-tos")) { type = FT_FIL_DEFINITION_MATCH_IP_TOS; eval = eval_match_ip_tos; ftfd->xfields |= FT_XFIELD_TOS; } else if (!strcasecmp(ftmi->tmp_type, "ip-marked-tos")) { type = FT_FIL_DEFINITION_MATCH_IP_MARKED_TOS; eval = eval_match_ip_marked_tos; ftfd->xfields |= FT_XFIELD_MARKED_TOS; } else if (!strcasecmp(ftmi->tmp_type, "ip-tcp-flags")) { type = FT_FIL_DEFINITION_MATCH_IP_TCP_FLAGS; eval = eval_match_ip_tcp_flags; ftfd->xfields |= FT_XFIELD_TCP_FLAGS; } else if (!strcasecmp(ftmi->tmp_type, "src-ip-port")) { type = FT_FIL_DEFINITION_MATCH_IP_SRC_PORT; eval = eval_match_ip_src_port; ftfd->xfields |= FT_XFIELD_SRCPORT; } else if (!strcasecmp(ftmi->tmp_type, "ip-source-port")) { type = FT_FIL_DEFINITION_MATCH_IP_SRC_PORT; eval = eval_match_ip_src_port; ftfd->xfields |= FT_XFIELD_SRCPORT; } else if (!strcasecmp(ftmi->tmp_type, "dst-ip-port")) { type = FT_FIL_DEFINITION_MATCH_IP_DST_PORT; eval = eval_match_ip_dst_port; ftfd->xfields |= FT_XFIELD_DSTPORT; } else if (!strcasecmp(ftmi->tmp_type, "ip-destination-port")) { type = FT_FIL_DEFINITION_MATCH_IP_DST_PORT; eval = eval_match_ip_dst_port; ftfd->xfields |= FT_XFIELD_DSTPORT; } else if (!strcasecmp(ftmi->tmp_type, "src-ifindex")) { type = FT_FIL_DEFINITION_MATCH_INPUT_IF; eval = eval_match_src_if_index; ftfd->xfields |= FT_XFIELD_INPUT; } else if (!strcasecmp(ftmi->tmp_type, "input-interface")) { type = FT_FIL_DEFINITION_MATCH_INPUT_IF; eval = eval_match_src_if_index; ftfd->xfields |= FT_XFIELD_INPUT; } else if (!strcasecmp(ftmi->tmp_type, "dst-ifindex")) { type = FT_FIL_DEFINITION_MATCH_OUTPUT_IF; eval = eval_match_dst_if_index; ftfd->xfields |= FT_XFIELD_OUTPUT; } else if (!strcasecmp(ftmi->tmp_type, "output-interface")) { type = FT_FIL_DEFINITION_MATCH_OUTPUT_IF; eval = eval_match_dst_if_index; ftfd->xfields |= FT_XFIELD_OUTPUT; } else if (!strcasecmp(ftmi->tmp_type, "engine-id")) { type = FT_FIL_DEFINITION_MATCH_ENGINE_ID; eval = eval_match_engine_id; ftfd->xfields |= FT_XFIELD_ENGINE_ID; } else if (!strcasecmp(ftmi->tmp_type, "engine-type")) { type = FT_FIL_DEFINITION_MATCH_ENGINE_TYPE; eval = eval_match_engine_type; ftfd->xfields |= FT_XFIELD_ENGINE_TYPE; } else if (!strcasecmp(ftmi->tmp_type, "flows")) { type = FT_FIL_DEFINITION_MATCH_FLOWS; eval = eval_match_flows; ftfd->xfields |= FT_XFIELD_DFLOWS; } else if (!strcasecmp(ftmi->tmp_type, "octets")) { type = FT_FIL_DEFINITION_MATCH_OCTETS; eval = eval_match_octets; ftfd->xfields |= FT_XFIELD_DOCTETS; } else if (!strcasecmp(ftmi->tmp_type, "packets")) { type = FT_FIL_DEFINITION_MATCH_PACKETS; eval = eval_match_packets; ftfd->xfields |= FT_XFIELD_DPKTS; } else if (!strcasecmp(ftmi->tmp_type, "extra-packets")) { type = FT_FIL_DEFINITION_MATCH_XTRA_PACKETS; eval = eval_match_xtra_packets; ftfd->xfields |= FT_XFIELD_EXTRA_PKTS; } else if (!strcasecmp(ftmi->tmp_type, "duration")) { type = FT_FIL_DEFINITION_MATCH_DURATION; eval = eval_match_duration; ftfd->xfields |= (FT_XFIELD_FIRST|FT_XFIELD_LAST); } else if (!strcasecmp(ftmi->tmp_type, "start-time")) { type = FT_FIL_DEFINITION_MATCH_START_TIME; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TIME_DATE) eval = eval_match_start_time_date; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TIME) eval = eval_match_start_time; ftfd->xfields |= (FT_XFIELD_FIRST|FT_XFIELD_UNIX_SECS| FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME); } else if (!strcasecmp(ftmi->tmp_type, "end-time")) { type = FT_FIL_DEFINITION_MATCH_END_TIME; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TIME_DATE) eval = eval_match_end_time_date; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TIME) eval = eval_match_end_time; ftfd->xfields |= (FT_XFIELD_LAST|FT_XFIELD_UNIX_SECS| FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME); } else if (!strcasecmp(ftmi->tmp_type, "src-tag")) { type = FT_FIL_DEFINITION_MATCH_SRC_TAG; ftfd->xfields |= FT_XFIELD_SRC_TAG; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG_MASK) eval = eval_match_src_tag_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG) eval = eval_match_src_tag_h; } else if (!strcasecmp(ftmi->tmp_type, "source-tag")) { type = FT_FIL_DEFINITION_MATCH_SRC_TAG; ftfd->xfields |= FT_XFIELD_SRC_TAG; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG_MASK) eval = eval_match_src_tag_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG) eval = eval_match_src_tag_h; } else if (!strcasecmp(ftmi->tmp_type, "dst-tag")) { type = FT_FIL_DEFINITION_MATCH_SRC_TAG; ftfd->xfields |= FT_XFIELD_DST_TAG; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG_MASK) eval = eval_match_dst_tag_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG) eval = eval_match_dst_tag_h; } else if (!strcasecmp(ftmi->tmp_type, "destination-tag")) { type = FT_FIL_DEFINITION_MATCH_SRC_TAG; ftfd->xfields |= FT_XFIELD_DST_TAG; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG_MASK) eval = eval_match_dst_tag_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_TAG) eval = eval_match_dst_tag_h; } else if (!strcasecmp(ftmi->tmp_type, "nexthop-ip-addr")) { type = FT_FIL_DEFINITION_MATCH_IP_NEXT_HOP_ADDR; ftfd->xfields |= FT_XFIELD_NEXTHOP; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_nexthop_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_nexthop_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_nexthop_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "ip-nexthop-address")) { type = FT_FIL_DEFINITION_MATCH_IP_NEXT_HOP_ADDR; ftfd->xfields |= FT_XFIELD_NEXTHOP; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_nexthop_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_nexthop_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_nexthop_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "shortcut-ip-addr")) { type = FT_FIL_DEFINITION_MATCH_IP_SC_ADDR; ftfd->xfields |= FT_XFIELD_ROUTER_SC; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_sc_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_sc_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_sc_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "ip-shortcut-address")) { type = FT_FIL_DEFINITION_MATCH_IP_SC_ADDR; ftfd->xfields |= FT_XFIELD_ROUTER_SC; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_sc_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_sc_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_sc_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "src-ip-addr")) { type = FT_FIL_DEFINITION_MATCH_IP_SRC_ADDR; ftfd->xfields |= FT_XFIELD_SRCADDR; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_src_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_src_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_src_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "ip-source-address")) { type = FT_FIL_DEFINITION_MATCH_IP_SRC_ADDR; ftfd->xfields |= FT_XFIELD_SRCADDR; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_src_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_src_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_src_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "dst-ip-addr")) { type = FT_FIL_DEFINITION_MATCH_IP_DST_ADDR; ftfd->xfields |= FT_XFIELD_DSTADDR; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_dst_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_dst_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_dst_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "ip-destination-address")) { type = FT_FIL_DEFINITION_MATCH_IP_DST_ADDR; ftfd->xfields |= FT_XFIELD_DSTADDR; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_dst_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_dst_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_dst_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "exporter-ip-addr")) { type = FT_FIL_DEFINITION_MATCH_IP_EXPORTER_ADDR; ftfd->xfields |= FT_XFIELD_EXADDR; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_exporter_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_exporter_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_exporter_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "ip-exporter-address")) { type = FT_FIL_DEFINITION_MATCH_IP_EXPORTER_ADDR; ftfd->xfields |= FT_XFIELD_EXADDR; if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_MASK) eval = eval_match_ip_exporter_addr_l; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS) eval = eval_match_ip_exporter_addr_h; else if (ftfp->type == FT_FIL_PRIMITIVE_TYPE_IP_PREFIX) eval = eval_match_ip_exporter_addr_r; } else if (!strcasecmp(ftmi->tmp_type, "bps")) { type = FT_FIL_DEFINITION_MATCH_BPS; eval = eval_match_bps; ftfd->xfields |= FT_XFIELD_DOCTETS|FT_XFIELD_LAST|FT_XFIELD_FIRST; } else if (!strcasecmp(ftmi->tmp_type, "pps")) { type = FT_FIL_DEFINITION_MATCH_PPS; eval = eval_match_pps; ftfd->xfields |= FT_XFIELD_DPKTS|FT_XFIELD_LAST|FT_XFIELD_FIRST; } else if (!strcasecmp(ftmi->tmp_type, "random-sample")) { type = FT_FIL_DEFINITION_MATCH_RANDOM_SAMPLE; eval = eval_match_random_sample; } else { fterr_warnx( "Unknown match criteria \"%s\" in filter-definition \"%s\".", ftmi->tmp_type, ftfd->name); return -1; } /* * the match type must be valid for the primitive */ valid = 0; switch (ftfp->type) { case FT_FIL_PRIMITIVE_TYPE_AS: if ((type == FT_FIL_DEFINITION_MATCH_SRC_AS) || (type == FT_FIL_DEFINITION_MATCH_DST_AS)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_PROTOCOL: if (type == FT_FIL_DEFINITION_MATCH_IP_PROTOCOL) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_MASK: if ((type == FT_FIL_DEFINITION_MATCH_IP_NEXT_HOP_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_SRC_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_DST_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_EXPORTER_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_SC_ADDR)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS: if ((type == FT_FIL_DEFINITION_MATCH_IP_NEXT_HOP_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_SRC_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_DST_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_EXPORTER_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_SC_ADDR)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX: if ((type == FT_FIL_DEFINITION_MATCH_IP_NEXT_HOP_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_SRC_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_DST_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_EXPORTER_ADDR) || (type == FT_FIL_DEFINITION_MATCH_IP_SC_ADDR)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_PORT: if ((type == FT_FIL_DEFINITION_MATCH_IP_SRC_PORT) || (type == FT_FIL_DEFINITION_MATCH_IP_DST_PORT)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX_LEN: if ((type == FT_FIL_DEFINITION_MATCH_IP_SRC_PREFIX_LEN) || (type == FT_FIL_DEFINITION_MATCH_IP_DST_PREFIX_LEN)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_TOS: if ((type == FT_FIL_DEFINITION_MATCH_IP_TOS) || (type == FT_FIL_DEFINITION_MATCH_IP_MARKED_TOS)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS: if (type == FT_FIL_DEFINITION_MATCH_IP_TCP_FLAGS) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_IF_INDEX: if ((type == FT_FIL_DEFINITION_MATCH_INPUT_IF) || (type == FT_FIL_DEFINITION_MATCH_OUTPUT_IF)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_COUNTER: if ((type == FT_FIL_DEFINITION_MATCH_FLOWS) || (type == FT_FIL_DEFINITION_MATCH_OCTETS) || (type == FT_FIL_DEFINITION_MATCH_PACKETS) || (type == FT_FIL_DEFINITION_MATCH_XTRA_PACKETS) || (type == FT_FIL_DEFINITION_MATCH_START_TIME) || (type == FT_FIL_DEFINITION_MATCH_DURATION)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_TIME: case FT_FIL_PRIMITIVE_TYPE_TIME_DATE: if ((type == FT_FIL_DEFINITION_MATCH_START_TIME) || (type == FT_FIL_DEFINITION_MATCH_END_TIME)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_ENGINE: if ((type == FT_FIL_DEFINITION_MATCH_ENGINE_ID) || (type == FT_FIL_DEFINITION_MATCH_ENGINE_TYPE)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_TAG_MASK: if ((type == FT_FIL_DEFINITION_MATCH_SRC_TAG) || (type == FT_FIL_DEFINITION_MATCH_DST_TAG)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_TAG: if ((type == FT_FIL_DEFINITION_MATCH_SRC_TAG) || (type == FT_FIL_DEFINITION_MATCH_DST_TAG)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_DOUBLE: if ((type == FT_FIL_DEFINITION_MATCH_PPS) || (type == FT_FIL_DEFINITION_MATCH_BPS)) valid = 1; break; case FT_FIL_PRIMITIVE_TYPE_RATE: if (type == FT_FIL_DEFINITION_MATCH_RANDOM_SAMPLE) valid = 1; default: break; } /* switch */ /* make sure primitive is valid for match type */ if (!valid) { fterr_warnx( "Primitive \"%s\" incompatible with match in filter-definition \"%s\".", ftmi->tmp_type, ftfd->name); return -1; } ftmi->lookup = ftfp->lookup; ftmi->eval = eval; } /* ftmi */ } /* ftm */ } /* ftfd */ return 0; } /* resolve_primitives */ /* * function: parse_definition_or * * process the definition or lines * * returns: 0 ok * <0 fail */ static int parse_definition_or(struct line_parser *lp, struct ftfil *ftfil) { lp->cur_def_match = (struct ftfil_match*)0L; return 0; } /* parse_definition_or */ /* ************************************************************************* parse_primitive_* ************************************************************************* */ /* * function: parse_primitive_type_asn * * process the asn primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_asn(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_as *ftfla; /* enable symbol lookups */ lp->sym_cur = lp->sym_tag; ftfla = (struct ftfil_lookup_as*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 65536, ftfla->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_asn */ /* * function: parse_primitive_type_ip_prot * * process the ip_prot primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_prot(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_prot *ftflipp; /* enable symbol lookups */ lp->sym_cur = lp->sym_ip_prot; ftflipp = (struct ftfil_lookup_ip_prot*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 256, ftflipp->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_ip_prot */ /* * function: parse_primitive_type_ip_port * * process the ip_port primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_port(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_port *ftflippo; /* enable symbol lookups */ lp->sym_cur = lp->sym_ip_tcp_port; ftflippo = (struct ftfil_lookup_ip_port*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 65536, ftflippo->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_ip_port */ /* * function: parse_primitive_type_ip_prefix_len * * process the ip_prefix_len primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_prefix_len(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_prefix_len *ftflipl; /* disable symbol lookups */ lp->sym_cur = (struct ftsym*)0L; ftflipl = (struct ftfil_lookup_ip_prefix_len*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 33, ftflipl->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_ip_prefix_len */ /* * function: parse_primitive_type_ip_tos * * process the ip_tos primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_tos(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_tos *ftflipt; /* disable symbol lookups */ lp->sym_cur = (struct ftsym*)0L; ftflipt = (struct ftfil_lookup_ip_tos*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 256, ftflipt->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_ip_tos */ /* * function: parse_primitive_type_ip_tcp_flags * * process the ip_tcp_flags primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_tcp_flags(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_tcp_flags *ftfliptcp; /* disable symbol lookups */ lp->sym_cur = (struct ftsym*)0L; ftfliptcp = (struct ftfil_lookup_ip_tcp_flags*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 256, ftfliptcp->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_ip_tcp_flags */ /* * function: parse_primitive_type_if_index * * process the if_index primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_if_index(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_if_index *ftflif; /* disable symbol lookups */ lp->sym_cur = (struct ftsym*)0L; ftflif = (struct ftfil_lookup_if_index*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 65536, ftflif->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_if_index */ /* * function: parse_primitive_type_engine * * process the engine primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_engine(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_engine *ftfle; /* disable symbol lookups */ lp->sym_cur = (struct ftsym*)0L; ftfle = (struct ftfil_lookup_engine*)lp->cur_primitive->lookup; if (ftfil_load_lookup(lp, lp->word, 65536, ftfle->mode, lp->mode)) { fterr_warnx("load_lookup(): failed"); return -1; } return 0; } /* parse_primitive_type_engine */ /* * function: parse_primitive_type_ip_address * * process the ip-address primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_address(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_address *ftflipa; struct ftchash_rec_fil_c32 ftch_recfc32, *ftch_recfc32p; u_int32 hash; char fmt_buf[32]; ftflipa = (struct ftfil_lookup_ip_address*)lp->cur_primitive->lookup; bzero(&ftch_recfc32, sizeof ftch_recfc32); ftch_recfc32.c32 = scan_ip(lp->word); hash = (ftch_recfc32.c32>>16) ^ (ftch_recfc32.c32 & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(ftflipa->ftch, &ftch_recfc32.c32, hash))) { fmt_ipv4(fmt_buf, ftch_recfc32p->c32, FMT_JUST_LEFT); fterr_warnx("%s line %d: entry %s previously set as %s.", lp->fname, lp->lineno, fmt_buf, mode_name_lookup[ftch_recfc32p->mode]); } if (!(ftch_recfc32p = ftchash_update(ftflipa->ftch, &ftch_recfc32, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } ftch_recfc32p->mode = lp->mode; return 0; } /* parse_primitive_type_ip_address */ /* * function: parse_primitive_type_tag * * process the tag primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_tag(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_tag *ftflt; struct ftchash_rec_fil_c32 ftch_recfc32, *ftch_recfc32p; u_int32 hash, val; ftflt = (struct ftfil_lookup_tag*)lp->cur_primitive->lookup; bzero(&ftch_recfc32, sizeof ftch_recfc32); if (isalpha((int)lp->word[0])) { if (lp->sym_tag && ftsym_findbyname(lp->sym_tag, lp->word, &val)) ftch_recfc32.c32 = val; else { fterr_warnx("%s line %d: symbol lookup for \"%s\" failed.", lp->fname, lp->lineno, lp->word); return -1; } } else ftch_recfc32.c32 = strtoul(lp->word, (char**)0L, 0); hash = (ftch_recfc32.c32>>16) ^ (ftch_recfc32.c32 & 0xFFFF); hash = ((hash >>8) ^ (hash & 0x0FFF)); if ((ftch_recfc32p = ftchash_lookup(ftflt->ftch, &ftch_recfc32.c32, hash))) fterr_warnx("%s line %d: entry 0x%lX previously set as %s.", lp->fname, lp->lineno, ftch_recfc32.c32, mode_name_lookup[ftch_recfc32p->mode]); if (!(ftch_recfc32p = ftchash_update(ftflt->ftch, &ftch_recfc32, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } ftch_recfc32p->mode = lp->mode; return 0; } /* parse_primitive_type_tag */ /* * function: parse_primitive_type_ip_mask * * process the ip-mask primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_mask(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_mask *ftflipm; struct ftfil_lookup_ip_mask_rec *ftflipmr, *ftflipmr2; char fmt_buf1[32], fmt_buf2[32]; char *ip; ip = lp->word; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting mask.", lp->fname, lp->lineno); return -1; } ftflipm = (struct ftfil_lookup_ip_mask*)lp->cur_primitive->lookup; if (!(ftflipmr = (struct ftfil_lookup_ip_mask_rec*) malloc(sizeof *ftflipmr))) { fterr_warn("malloc()"); return -1; } bzero(ftflipmr, sizeof *ftflipmr); ftflipmr->ip = scan_ip(ip); ftflipmr->mask = scan_ip(lp->word); ftflipmr->mode = lp->mode; FT_STAILQ_FOREACH(ftflipmr2, &ftflipm->list, chain) { if ((ftflipmr2->ip == ftflipmr->ip) && (ftflipmr2->mask == ftflipmr->mask)) { fmt_ipv4(fmt_buf1, ftflipmr2->ip, FMT_JUST_LEFT); fmt_ipv4(fmt_buf2, ftflipmr2->mask, FMT_JUST_LEFT); fterr_warnx("%s line %d: entry %s %s previously set as %s.", lp->fname, lp->lineno, fmt_buf1, fmt_buf2, mode_name_lookup[ftflipmr2->mode]); } } FT_STAILQ_INSERT_TAIL(&ftflipm->list, ftflipmr, chain); return 0; } /* parse_primitive_type_ip_mask */ /* * function: parse_primitive_type_tag_mask * * process the tag-mask primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_tag_mask(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_tag_mask *ftfltm; struct ftfil_lookup_tag_mask_rec *ftfltmr, *ftfltmr2; u_int32 val, tval; char *tag; tag = lp->word; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting mask.", lp->fname, lp->lineno); return -1; } ftfltm = (struct ftfil_lookup_tag_mask*)lp->cur_primitive->lookup; if (isalpha((int)tag[0])) { if (lp->sym_tag && ftsym_findbyname(lp->sym_tag, tag, &val)) tval = val; else { fterr_warnx("%s line %d: symbol lookup for \"%s\" failed.", lp->fname, lp->lineno, tag); return -1; } } else tval = strtoul(tag, (char**)0L, 0); if (!(ftfltmr = (struct ftfil_lookup_tag_mask_rec*) malloc(sizeof *ftfltmr))) { fterr_warn("malloc()"); return -1; } bzero(ftfltmr, sizeof *ftfltmr); ftfltmr->tag = tval; ftfltmr->mask = strtoul(lp->word, (char**)0L, 0); ftfltmr->mode = lp->mode; FT_STAILQ_FOREACH(ftfltmr2, &ftfltm->list, chain) { if ((ftfltmr2->tag == ftfltmr->tag) && (ftfltmr2->mask == ftfltmr->mask)) { fterr_warnx("%s line %d: entry 0x%lX 0x%lX previously set as %s.", lp->fname, lp->lineno, ftfltmr2->tag, ftfltmr2->mask, mode_name_lookup[ftfltmr2->mode]); } } FT_STAILQ_INSERT_TAIL(&ftfltm->list, ftfltmr, chain); return 0; } /* parse_primitive_type_tag_mask */ /* * function: parse_primitive_type_ip_prefix * * process the ip-prefix primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_ip_prefix(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_prefix *ftflippr; struct ftfil_lookup_ip_prefix_rec *ftflipprr, *ftflipprr2; struct ip_prefix ipp; struct radix_sockaddr_in sock1, sock2; char fmt_buf[32]; ftflippr = (struct ftfil_lookup_ip_prefix*)lp->cur_primitive->lookup; if (!(ftflipprr = (struct ftfil_lookup_ip_prefix_rec*) malloc(sizeof *ftflipprr))) { fterr_warn("malloc()"); return -1; } bzero (ftflipprr, sizeof *ftflipprr); ipp = scan_ip_prefix(lp->word); ftflipprr->rt_nodes->rn_key = (caddr_t)&ftflipprr->addr; ftflipprr->addr.sin_addr.s_addr = ipp.addr; ftflipprr->addr.sin_len = sizeof (struct radix_sockaddr_in); ftflipprr->addr.sin_family = AF_INET; ftflipprr->masklen = ipp.len; ftflipprr->mode = lp->mode; bzero(&sock1, sizeof sock1); bzero(&sock2, sizeof sock2); sock1.sin_addr.s_addr = ipp.addr; sock1.sin_family = AF_INET; sock1.sin_len = sizeof sock1; sock2.sin_addr.s_addr = (!ipp.len) ? 0 : mask_lookup[ipp.len]; sock2.sin_family = AF_INET; sock2.sin_len = sizeof sock2; ftflipprr2 = (struct ftfil_lookup_ip_prefix_rec*) ftflippr->rhead->rnh_lookup(&sock1, &sock2, ftflippr->rhead); if (ftflipprr2 && (ftflipprr2->addr.sin_addr.s_addr == ipp.addr) && (ftflipprr2->masklen == ipp.len)) { fmt_ipv4prefix(fmt_buf, ftflipprr2->addr.sin_addr.s_addr, ftflipprr2->masklen, FMT_JUST_LEFT); fterr_warnx("%s line %d: entry %s previously set as %s.", lp->fname, lp->lineno, fmt_buf, mode_name_lookup[ftflipprr2->mode]); /* can't add this again */ free(ftflipprr); return 0; } if (!ftflippr->rhead->rnh_addaddr(&ftflipprr->addr, &sock2, ftflippr->rhead, ftflipprr->rt_nodes)) { free(ftflipprr); fterr_warnx("rnh_addaddr(): failed for %s", lp->word); return -1; } return 0; } /* parse_primitive_type_ip_prefix */ /* * function: parse_primitive_type_counter * * process the counter primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_counter(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_counter *ftflc; struct ftfil_lookup_counter_rec *ftflcr, *ftflcr2; char *c; enum ftfil_op op; c = lp->word; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting counter.", lp->fname, lp->lineno); return -1; } if (!strcasecmp(c, "lt")) op = FT_FIL_OP_LT; else if (!strcasecmp(c, "gt")) op = FT_FIL_OP_GT; else if (!strcasecmp(c, "eq")) op = FT_FIL_OP_EQ; else if (!strcasecmp(c, "ne")) op = FT_FIL_OP_NE; else if (!strcasecmp(c, "le")) op = FT_FIL_OP_LE; else if (!strcasecmp(c, "ge")) op = FT_FIL_OP_GE; else { fterr_warnx("%s line %d: Expecting one of {lt,gt,eq,ne,le,ge}", lp->fname, lp->lineno); return -1; } ftflc = (struct ftfil_lookup_counter*)lp->cur_primitive->lookup; if (!(ftflcr = (struct ftfil_lookup_counter_rec*) malloc(sizeof *ftflcr))) { fterr_warn("malloc()"); return -1; } bzero(ftflcr, sizeof *ftflcr); ftflcr->val = strtoul(lp->word, (char**)0L, 0); ftflcr->op = op; ftflcr->mode = lp->mode; FT_STAILQ_FOREACH(ftflcr2, &ftflc->list, chain) { if ((ftflcr2->val == ftflcr->val) && (ftflcr2->op == ftflcr->op)) { fterr_warnx("%s line %d: entry %s %lu previously set as %s.", lp->fname, lp->lineno, op_name_lookup[ftflcr2->op], ftflcr2->val, mode_name_lookup[ftflcr2->mode]); } } FT_STAILQ_INSERT_TAIL(&ftflc->list, ftflcr, chain); return 0; } /* parse_primitive_type_counter */ /* * function: parse_primitive_type_time_date * * process the time/date primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_time_date(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_counter *ftflc; struct ftfil_lookup_counter_rec *ftflcr, *ftflcr2; time_t t; enum ftfil_op op; if (!lp->buf) { fterr_warnx("%s line %d: Expecting time/date.", lp->fname, lp->lineno); return -1; } if ((t = get_date(lp->buf, (time_t*)0L)) == -1) { fterr_warnx("%s line %d: Cannot parse time/date.", lp->fname, lp->lineno); return -1; } /* eat the line */ for (; *(lp->buf); ++lp->buf); if (!strcasecmp(lp->word, "lt")) op = FT_FIL_OP_LT; else if (!strcasecmp(lp->word, "gt")) op = FT_FIL_OP_GT; else if (!strcasecmp(lp->word, "eq")) op = FT_FIL_OP_EQ; else if (!strcasecmp(lp->word, "ne")) op = FT_FIL_OP_NE; else if (!strcasecmp(lp->word, "le")) op = FT_FIL_OP_LE; else if (!strcasecmp(lp->word, "ge")) op = FT_FIL_OP_GE; else { fterr_warnx("%s line %d: Expecting one of {lt,gt,eq,ne,le,ge}", lp->fname, lp->lineno); return -1; } ftflc = (struct ftfil_lookup_counter*)lp->cur_primitive->lookup; if (!(ftflcr = (struct ftfil_lookup_counter_rec*) malloc(sizeof *ftflcr))) { fterr_warn("malloc()"); return -1; } bzero(ftflcr, sizeof *ftflcr); ftflcr->val = t; ftflcr->op = op; ftflcr->mode = lp->mode; FT_STAILQ_FOREACH(ftflcr2, &ftflc->list, chain) { if ((ftflcr2->val == ftflcr->val) && (ftflcr2->op == ftflcr->op)) { fterr_warnx("%s line %d: entry %s %lu previously set as %s.", lp->fname, lp->lineno, op_name_lookup[ftflcr2->op], ftflcr2->val, mode_name_lookup[ftflcr2->mode]); } } FT_STAILQ_INSERT_TAIL(&ftflc->list, ftflcr, chain); return 0; } /* parse_primitive_type_time_date */ /* * function: parse_primitive_type_time * * process the time primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_time(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_time *ftfltme; struct ftfil_lookup_time_rec *ftfltmer, *ftfltmer2; enum ftfil_op op; char *c, *cop; int hour, min, sec; if (!lp->word) { fterr_warnx("%s line %d: Expecting time op.", lp->fname, lp->lineno); return -1; } cop = lp->word; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting time value.", lp->fname, lp->lineno); return -1; } /* parse out time */ hour = min = sec = 0; if (!(c = strsep(&lp->word, ":"))) goto done; hour = atoi(c); if (!(c = strsep(&lp->word, ":"))) goto done; min = atoi(c); if (!(c = strsep(&lp->word, ":"))) goto done; sec = atoi(c); if (lp->word) { fterr_warnx("%s line %d: Unexpected text: %s", lp->fname, lp->lineno, lp->word); return -1; } done: if (!strcasecmp(cop, "lt")) op = FT_FIL_OP_LT; else if (!strcasecmp(cop, "gt")) op = FT_FIL_OP_GT; else if (!strcasecmp(cop, "eq")) op = FT_FIL_OP_EQ; else if (!strcasecmp(cop, "ne")) op = FT_FIL_OP_NE; else if (!strcasecmp(cop, "le")) op = FT_FIL_OP_LE; else if (!strcasecmp(cop, "ge")) op = FT_FIL_OP_GE; else { fterr_warnx("%s line %d: Expecting one of {lt,gt,eq,ne,le,ge}", lp->fname, lp->lineno); return -1; } ftfltme = (struct ftfil_lookup_time*)lp->cur_primitive->lookup; if (!(ftfltmer = (struct ftfil_lookup_time_rec*) malloc(sizeof *ftfltmer))) { fterr_warn("malloc()"); return -1; } bzero(ftfltmer, sizeof *ftfltmer); ftfltmer->hour = hour; ftfltmer->min = min; ftfltmer->sec = sec; ftfltmer->op = op; ftfltmer->mode = lp->mode; FT_STAILQ_FOREACH(ftfltmer2, &ftfltme->list, chain) { if ((ftfltmer2->hour == ftfltmer->hour) && (ftfltmer2->min == ftfltmer->min) && (ftfltmer2->sec == ftfltmer->sec) && (ftfltmer2->op == ftfltmer->op)) { fterr_warnx("%s line %d: entry %d:%d:%d %lu previously set as %s.", lp->fname, lp->lineno, op_name_lookup[ftfltmer2->op], ftfltmer2->hour, ftfltmer2->min, ftfltmer2->sec, mode_name_lookup[ftfltmer2->mode]); } } FT_STAILQ_INSERT_TAIL(&ftfltme->list, ftfltmer, chain); return 0; } /* parse_primitive_type_time */ /* * function: parse_primitive_type_double * * process the double primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_double(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_double *ftfld; struct ftfil_lookup_double_rec *ftfldr, *ftfldr2; char *c; enum ftfil_op op; c = lp->word; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting counter.", lp->fname, lp->lineno); return -1; } if (!strcasecmp(c, "lt")) op = FT_FIL_OP_LT; else if (!strcasecmp(c, "gt")) op = FT_FIL_OP_GT; else if (!strcasecmp(c, "eq")) op = FT_FIL_OP_EQ; else if (!strcasecmp(c, "ne")) op = FT_FIL_OP_NE; else if (!strcasecmp(c, "le")) op = FT_FIL_OP_LE; else if (!strcasecmp(c, "ge")) op = FT_FIL_OP_GE; else { fterr_warnx("%s line %d: Expecting one of {lt,gt,eq,ne,le,ge}", lp->fname, lp->lineno); return -1; } ftfld = (struct ftfil_lookup_double*)lp->cur_primitive->lookup; if (!(ftfldr = (struct ftfil_lookup_double_rec*) malloc(sizeof *ftfldr))) { fterr_warn("malloc()"); return -1; } bzero(ftfldr, sizeof *ftfldr); ftfldr->val = strtod(lp->word, (char**)0L); ftfldr->op = op; ftfldr->mode = lp->mode; FT_STAILQ_FOREACH(ftfldr2, &ftfld->list, chain) { if ((ftfldr2->val == ftfldr->val) && (ftfldr2->op == ftfldr->op)) { fterr_warnx("%s line %d: entry %s %f previously set as %s.", lp->fname, lp->lineno, op_name_lookup[ftfldr2->op], ftfldr2->val, mode_name_lookup[ftfldr2->mode]); } } FT_STAILQ_INSERT_TAIL(&ftfld->list, ftfldr, chain); return 0; } /* parse_primitive_type_double */ /* * function: parse_primitive_type_rate * * process the rate primitive * * returns: 0 ok * <0 fail */ int parse_primitive_type_rate(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_rate *ftflr; /* disable symbol lookups */ lp->sym_cur = (struct ftsym*)0L; ftflr = (struct ftfil_lookup_rate*)lp->cur_primitive->lookup; if (ftflr->rate) fterr_warnx("%s line %d: Rate previously set.", lp->fname, lp->lineno); ftflr->rate = atoi(lp->word); if (!ftflr->rate) fterr_errx(1, "%s line %d: Rate can not be 0.", lp->fname, lp->lineno); ftflr->mode = lp->mode; return 0; } /* parse_primitive_type_rate */ /* * function: parse_primitive * * process the 'filter-primitive' line. Each primitive has a unique name * which is added to the ftfil->primitives linked list. The current * primitive definition is updated in lp. Primitives by themself do nothing, * they must be invoked by a definition. * * returns: 0 ok * <0 fail */ int parse_primitive(struct line_parser *lp, struct ftfil *ftfil) { char *c; struct ftfil_primitive *ftfp; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftfp, &ftfil->primitives, chain) { if (!strcasecmp(c, ftfp->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(ftfp = (struct ftfil_primitive*)malloc(sizeof (struct ftfil_primitive)))) { fterr_warn("malloc()"); return -1; } bzero(ftfp, sizeof *ftfp); if (!(ftfp->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftfp); return -1; } strcpy(ftfp->name, c); FT_SLIST_INSERT_HEAD(&ftfil->primitives, ftfp, chain); lp->state = PARSE_STATE_PRIMITIVE; lp->cur_primitive = ftfp; return 0; } /* parse_primitive */ /* * function: parse_primitive_type * * process the 'type' line. When the type is set the initial storage * is allocated. * * returns: 0 ok * <0 fail */ int parse_primitive_type(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_address *ftflipa; struct ftfil_lookup_ip_prefix *ftflippr; struct ftfil_lookup_ip_mask *ftflipm; struct ftfil_lookup_as *ftfla; struct ftfil_lookup_ip_prefix_len *ftflipl; struct ftfil_lookup_ip_prot *ftflipp; struct ftfil_lookup_ip_tos *ftflipt; struct ftfil_lookup_ip_tcp_flags *ftfliptcp; struct ftfil_lookup_if_index *ftflif; struct ftfil_lookup_engine *ftfle; struct ftfil_lookup_ip_port *ftflippo; struct ftfil_lookup_counter *ftflc; struct ftfil_lookup_tag *ftflt; struct ftfil_lookup_tag_mask *ftfltm; struct ftfil_lookup_counter *ftfltme; struct ftfil_lookup_double *ftfld; struct ftfil_lookup_rate *ftflr; if (!lp->cur_primitive) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting type.", lp->fname, lp->lineno); return -1; } if (lp->cur_primitive->type) { fterr_warnx("%s line %d: Type previously defined.", lp->fname, lp->lineno); return -1; } if (!strcasecmp(lp->word, "as")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_AS; PARSE_PRIMITIVE_TYPE_INIT(ftfla); } else if (!strcasecmp(lp->word, "ip-address-prefix")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_PREFIX; PARSE_PRIMITIVE_TYPE_INIT(ftflippr); RADIX_TRIE_INIT; if (rn_inithead((void**)&ftflippr->rhead, 32) < 0) { fterr_warnx("rn_inithead(): failed"); return -1; } } else if (!strcasecmp(lp->word, "ip-address")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS; PARSE_PRIMITIVE_TYPE_INIT(ftflipa); if (!(ftflipa->ftch = ftchash_new(4096, sizeof (struct ftchash_rec_fil_c32), 4, 12))) { fterr_warnx("ftchash_new(): failed"); return -1; } } else if (!strcasecmp(lp->word, "ip-address-mask")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_MASK; PARSE_PRIMITIVE_TYPE_INIT(ftflipm); FT_STAILQ_INIT(&ftflipm->list); } else if (!strcasecmp(lp->word, "ip-protocol")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_PROTOCOL; PARSE_PRIMITIVE_TYPE_INIT(ftflipp); } else if (!strcasecmp(lp->word, "ip-port")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_PORT; PARSE_PRIMITIVE_TYPE_INIT(ftflippo); } else if (!strcasecmp(lp->word, "ip-address-prefix-len")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_PREFIX_LEN; PARSE_PRIMITIVE_TYPE_INIT(ftflipl); } else if (!strcasecmp(lp->word, "ip-tos")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_TOS; PARSE_PRIMITIVE_TYPE_INIT(ftflipt); ftflipt->mask = 0xFF; } else if (!strcasecmp(lp->word, "ip-tcp-flags")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS; PARSE_PRIMITIVE_TYPE_INIT(ftfliptcp); ftfliptcp->mask = 0xFF; } else if (!strcasecmp(lp->word, "ifindex")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_IF_INDEX; PARSE_PRIMITIVE_TYPE_INIT(ftflif); } else if (!strcasecmp(lp->word, "counter")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_COUNTER; PARSE_PRIMITIVE_TYPE_INIT(ftflc); FT_STAILQ_INIT(&ftflc->list); } else if (!strcasecmp(lp->word, "time-date")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_TIME_DATE; PARSE_PRIMITIVE_TYPE_INIT(ftflc); FT_STAILQ_INIT(&ftflc->list); } else if (!strcasecmp(lp->word, "engine")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_ENGINE; PARSE_PRIMITIVE_TYPE_INIT(ftfle); } else if (!strcasecmp(lp->word, "tag")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_TAG; PARSE_PRIMITIVE_TYPE_INIT(ftflt); if (!(ftflt->ftch = ftchash_new(4096, sizeof (struct ftchash_rec_fil_c32), 4, 12))) { fterr_warnx("ftchash_new(): failed"); return -1; } } else if (!strcasecmp(lp->word, "tag-mask")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_TAG_MASK; PARSE_PRIMITIVE_TYPE_INIT(ftfltm); FT_STAILQ_INIT(&ftfltm->list); } else if (!strcasecmp(lp->word, "time")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_TIME; PARSE_PRIMITIVE_TYPE_INIT(ftfltme); FT_STAILQ_INIT(&ftfltme->list); } else if (!strcasecmp(lp->word, "double")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_DOUBLE; PARSE_PRIMITIVE_TYPE_INIT(ftfld); FT_STAILQ_INIT(&ftfld->list); } else if (!strcasecmp(lp->word, "rate")) { lp->cur_primitive->type = FT_FIL_PRIMITIVE_TYPE_RATE; PARSE_PRIMITIVE_TYPE_INIT(ftflr); /* initialize random number generator */ srand(getpid() ^ time((time_t*)0L)); } else { fterr_warnx("%s line %d: Unrecognized type.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_primitive_type */ int parse_primitive_permit(struct line_parser *lp, struct ftfil *ftfil) { return parse2_primitive_permitdeny(lp, ftfil, FT_FIL_MODE_PERMIT); } int parse_primitive_deny(struct line_parser *lp, struct ftfil *ftfil) { return parse2_primitive_permitdeny(lp, ftfil, FT_FIL_MODE_DENY); } static int parse_primitive_default(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_address *ftflipa; struct ftfil_lookup_ip_prefix *ftflippr; struct ftfil_lookup_ip_mask *ftflipm; struct ftfil_lookup_as *ftfla; struct ftfil_lookup_ip_prefix_len *ftflipl; struct ftfil_lookup_ip_prot *ftflipp; struct ftfil_lookup_ip_tos *ftflipt; struct ftfil_lookup_ip_tcp_flags *ftfliptcp; struct ftfil_lookup_if_index *ftflif; struct ftfil_lookup_engine *ftfle; struct ftfil_lookup_ip_port *ftflippo; struct ftfil_lookup_counter *ftflc; struct ftfil_lookup_tag *ftflt; struct ftfil_lookup_tag_mask *ftfltm; struct ftfil_lookup_counter *ftfltme; struct ftfil_lookup_counter *ftfld; int flag; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting permit or deny.", lp->fname, lp->lineno); return -1; } if (!strcasecmp(lp->word, "permit")) flag = FT_FIL_MODE_PERMIT; else if (!strcasecmp(lp->word, "deny")) flag = FT_FIL_MODE_DENY; else { fterr_warnx("%s line %d: Expecting permit or deny.", lp->fname, lp->lineno); return -1; } switch (lp->cur_primitive->type) { case FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS: ftflipa = lp->cur_primitive->lookup; ftflipa->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX: ftflippr = lp->cur_primitive->lookup; ftflippr->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_MASK: ftflipm = lp->cur_primitive->lookup; ftflipm->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_AS: ftfla = lp->cur_primitive->lookup; ftfla->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_PROTOCOL: ftflipp = lp->cur_primitive->lookup; ftflipp->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX_LEN: ftflipl = lp->cur_primitive->lookup; ftflipl->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_TOS: ftflipt = lp->cur_primitive->lookup; ftflipt->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS: ftfliptcp = lp->cur_primitive->lookup; ftfliptcp->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IF_INDEX: ftflif = lp->cur_primitive->lookup; ftflif->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_IP_PORT: ftflippo = lp->cur_primitive->lookup; ftflippo->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_ENGINE: ftfle = lp->cur_primitive->lookup; ftfle->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_TAG: ftflt = lp->cur_primitive->lookup; ftflt->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_TAG_MASK: ftfltm = lp->cur_primitive->lookup; ftfltm->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_COUNTER: ftflc = lp->cur_primitive->lookup; ftflc->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_TIME_DATE: ftflc = lp->cur_primitive->lookup; ftflc->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_TIME: ftfltme = lp->cur_primitive->lookup; ftfltme->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_DOUBLE: ftfld = lp->cur_primitive->lookup; ftfld->default_mode = flag; break; case FT_FIL_PRIMITIVE_TYPE_RATE: fterr_warnx("%s line %d: No default mode for rate.", lp->fname, lp->lineno); break; default: fterr_errx(1, "parse_primitive_default(): internal error"); break; } /* switch */ return 0; } /* parse_primitive_default */ /* * function: parse2_primitive_permitdeny * * process the permit and deny lines * * returns: 0 ok * <0 fail */ int parse2_primitive_permitdeny(struct line_parser *lp, struct ftfil *ftfil, int mode) { int ret; ret = -1; if (!lp->cur_primitive) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } lp->mode = mode; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting permit/deny data.", lp->fname, lp->lineno); return -1; } switch (lp->cur_primitive->type) { case FT_FIL_PRIMITIVE_TYPE_AS: ret = parse_primitive_type_asn(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX: ret = parse_primitive_type_ip_prefix(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS: ret = parse_primitive_type_ip_address(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_MASK: ret = parse_primitive_type_ip_mask(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_PROTOCOL: ret = parse_primitive_type_ip_prot(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_PORT: ret = parse_primitive_type_ip_port(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_PREFIX_LEN: ret = parse_primitive_type_ip_prefix_len(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_TOS: ret = parse_primitive_type_ip_tos(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS: ret = parse_primitive_type_ip_tcp_flags(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_IF_INDEX: ret = parse_primitive_type_if_index(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_COUNTER: ret = parse_primitive_type_counter(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_TIME_DATE: ret = parse_primitive_type_time_date(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_ENGINE: ret = parse_primitive_type_engine(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_TAG: ret = parse_primitive_type_tag(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_TAG_MASK: ret = parse_primitive_type_tag_mask(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_TIME: ret = parse_primitive_type_time(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_DOUBLE: ret = parse_primitive_type_double(lp, ftfil); break; case FT_FIL_PRIMITIVE_TYPE_RATE: ret = parse_primitive_type_rate(lp, ftfil); break; default: fterr_errx(1, "parse_primitive_permitdeny(): internal error"); break; } /* switch */ return ret; } /* parse_primitive_permitdeny */ /* * function: parse_primitive_mask * * process the 'mask' line. * * returns: 0 ok * <0 fail */ int parse_primitive_mask(struct line_parser *lp, struct ftfil *ftfil) { struct ftfil_lookup_ip_tos *ftflipt; struct ftfil_lookup_ip_tcp_flags *ftfliptcp; if (!lp->cur_primitive) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting mask value.", lp->fname, lp->lineno); return -1; } switch (lp->cur_primitive->type) { case FT_FIL_PRIMITIVE_TYPE_IP_TOS: ftflipt = lp->cur_primitive->lookup; ftflipt->mask = strtoul(lp->word, (char**)0L, 0); break; case FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS: ftfliptcp = lp->cur_primitive->lookup; ftfliptcp->mask = strtoul(lp->word, (char**)0L, 0); break; default: fterr_warnx("%s line %d: Mask not supported for primitive.", lp->fname, lp->lineno); return -1; } /* switch */ return 0; } /* parse_primitive_mask */ /* ************************************************************************* internal support ************************************************************************* */ /* * function: ftfil_load_lookup * * loads a list of , seperated numbers into an array * ! will invert the list * - can be used as a range operator * * example * 1,5-10 == 1,5,6,7,8,9,10 * !1 == all numbers in the range except for 1 * * Only ranges that have been specified will be initialized. * * The array will either be unset, or set * to FT_FL_MODE_PERMIT or FT_FL_MODE_DENY */ static int ftfil_load_lookup(struct line_parser *lp, char *s, int size, char *list, int mode) { char *p, *q, *r, c; int j, flag; unsigned i, i2; int permit,deny; u_int32 val; if (mode == FT_FIL_MODE_DENY) { permit = FT_FIL_MODE_DENY; deny = FT_FIL_MODE_PERMIT; } else if (mode == FT_FIL_MODE_PERMIT) { permit = FT_FIL_MODE_PERMIT; deny = FT_FIL_MODE_DENY; } else { fterr_errx(1, "ftfil_load_lookup(): internal error mode not set"); } p = s; while ((*p == ' ') || (*p == '\t')) ++p; if (*p == '!') { flag = deny; ++p; } else { flag = permit; } while (*p) { /* skip white space */ for (q = p; *q && (*q == ' ' || *q == '\t'); ++q); /* skip to the end of the word */ for (r = q; *r && (*r != ',' && *r != '-'); ++r); /* save the character */ c = *r; /* q is the null terminated word now */ *r = 0; /* looks like a symbol? then try a lookup */ if (isalpha((int)*q)) { if (lp->sym_cur && ftsym_findbyname(lp->sym_cur, q, &val)) i = val; else { fterr_warnx("%s line %d: symbol lookup for \"%s\" failed.", lp->fname, lp->lineno, q); return -1; } } else i = (unsigned)strtoul(q, (char**)0L, 0); if (i >= size) { fterr_warnx("%s line %d: Value out of range.", lp->fname, lp->lineno); return -1; } if (list[i] != FT_FIL_MODE_UNSET) fterr_warnx("%s line %d: index %u previously set as %s.", lp->fname, lp->lineno, i, mode_name_lookup[(int)list[i]]); list[i] = flag; /* if the next char was a null terminator, then done */ if (!c) break; /* skip to next word */ p = r+1; if (c == '-') { /* skip white space */ for (q = p; *q && (*q == ' ' || *q == '\t'); ++q); /* skip to the end of the word */ for (r = q; *r && (*r != ',' && *r != '-'); ++r); /* save the character */ c = *r; /* q is the null terminated word now */ *r = 0; /* looks like a symbol? then try a lookup */ if (isalpha((int)*q)) { if (lp->sym_cur && ftsym_findbyname(lp->sym_cur, q, &val)) i2 = val; else { fterr_warnx("%s line %d: symbol lookup for \"%s\" failed.", lp->fname, lp->lineno, q); return -1; } } else i2 = (unsigned)strtoul(q, (char**)0L, 0); if (i2 >= size) { fterr_warnx("%s line %d: Value out of range.", lp->fname, lp->lineno); return -1; } for (j = i; j <= i2; ++j) { if ((j != i) && (list[j] != FT_FIL_MODE_UNSET)) fterr_warnx("%s line %d: index %u previously set as %s.", lp->fname, lp->lineno, j, mode_name_lookup[(int)list[j]]); list[j] = flag; } /* skip to next word */ p = r+1; /* if the next char was a null terminator, then done */ if (!c) break; } } /* *p */ return 0; } /* ftfil_load_lookup */ static int walk_free(struct radix_node *rn, struct walkarg *UNUSED) { struct ftfil_lookup_ip_prefix_rec *r; struct radix_sockaddr_in sock1, sock2; r = (struct ftfil_lookup_ip_prefix_rec*)rn; bzero(&sock1, sizeof sock1); bzero(&sock2, sizeof sock2); sock1.sin_addr.s_addr = r->addr.sin_addr.s_addr; sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; sock2.sin_addr.s_addr = (!r->masklen) ? 0: mask_lookup[r->masklen]; sock2.sin_len = sizeof sock2; sock2.sin_family = AF_INET; if (r != (struct ftfil_lookup_ip_prefix_rec*)rhead->rnh_deladdr(&sock1, &sock2, rhead)) fterr_errx(1, "rn_deladdr(): failed."); else free(r); return 0; } /* walk_free */ flow-tools-0.68/lib/ftfile.c0000644000076600007660000004426307622602462011453 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftfile.c,v 1.24 2003/02/13 02:38:42 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif int load_dir(char *prefix, struct ftfile_entries *fte, int flags, int *depth); extern int debug; /* * function: ftfile_entry_new * * allocate ftfile_entry struct. see also ftfile_entry_free */ struct ftfile_entry *ftfile_entry_new(int len) { struct ftfile_entry *e; if (!(e = (struct ftfile_entry*)malloc(sizeof (struct ftfile_entry)))) return (struct ftfile_entry*)0L; bzero(e, sizeof *e); if (!(e->name = (char*)malloc(len+1))) { free (e); return (struct ftfile_entry*)0L; } return e; } /* ftfile_entry_new */ /* * function: ftfile_entry_free * * deallocate ftfile_entry struct allocated by ftfile_entry_new() */ void ftfile_entry_free(struct ftfile_entry *entry) { free(entry->name); free(entry); } /* ftfile_entry_free */ /* * function: ftfile_loadfile * * Load filename into the file entries data structures * Files that do not match the flow-tools naming convention or * do not have the correct magic word in the header are not loaded * to prevent accidental removal. * * returns: < 0 error * >= 0 ok */ int ftfile_loadfile(struct ftfile_entries *fte, char *fname, int flags) { struct stat sb; struct ftfile_entry *n1, *n2; struct ftiheader head; int fd, done, len; if (flags & FT_FILE_INIT) FT_TAILQ_INIT(&fte->head); if (fname[0]) { /* skip anything that doesn't begin with "ft" "cf" and "tmp" */ if (flags & FT_FILE_CHECKNAMES) if ((strncmp(fname, "ft", 2)) && (strncmp(fname, "cf", 2)) && (strncmp(fname, "tmp", 3))) { fterr_warnx("ignoring: %s", fname); return 0; } /* skip tmp files? */ if (flags & FT_FILE_SKIPTMP) if (!strncmp(fname, "tmp", 3)) return 0; /* make sure the file is actually a flow file */ if ((fd = open (fname, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", fname); return 0; } if (fstat(fd, &sb) < 0) { fterr_warn("fstat(%s)", fname); close(fd); return -1; } if (ftiheader_read(fd, &head) < 0) { fterr_warnx("ftiheader_read(%s): Failed, ignoring file.", fname); close(fd); return 0; } close (fd); } else { /* empty filename -- stdin */ bzero(&head, sizeof head); bzero(&sb, sizeof sb); } len = strlen(fname); /* insert the entry in the list sorted by start time of flow file */ done = 0; if (flags & FT_FILE_SORT) { FT_TAILQ_FOREACH(n1, &fte->head, chain) { if (n1->start > head.cap_start) { if (!(n2 = ftfile_entry_new(len))) { fterr_warnx("ftfile_entry_new(): failed"); return -1; } n2->size = sb.st_size; n2->start = head.cap_start; strcpy(n2->name, fname); FT_TAILQ_INSERT_BEFORE(n1, n2, chain); done = 1; break; } } /* FT_TAILQ_FOREACH */ } /* FT_FILE_SORT */ if ((!done) || (!(flags & FT_FILE_SORT))) { if (!(n2 = ftfile_entry_new(len))) { fterr_warnx("ftfile_entry_new(): failed"); return -1; } n2->size = sb.st_size; n2->start = head.cap_start; strcpy(n2->name, fname); FT_TAILQ_INSERT_TAIL(&fte->head, n2, chain); } /* !done or !FT_FILE_SORT */ fte->num_bytes += sb.st_size; fte->num_files ++; return 0; } /* ftfile_loadfile */ /* * function: ftfile_loaddir * * Load directory contents into the file entries data structures * Files that do not match the flow-tools naming convention or * do not have the correct magic word in the header are not loaded * to prevent accidental removal. * * returns: < 0 error * >= 0 ok */ int ftfile_loaddir(struct ftfile_entries *fte, char *dir, int flags) { int depth, here; DIR *dirp; depth = 0; if (flags & FT_FILE_INIT) FT_TAILQ_INIT(&fte->head); /* remember current dir */ if (!(dirp = opendir("."))) { fterr_warn("opendir(.)"); return -1; } if ((here = open(".", O_RDONLY, 0)) < 0) { fterr_warn("open(.)"); return -1; } /* go to working dir */ if (chdir (dir) < 0) { fterr_warn("chdir(%s)", dir); close(here); closedir(dirp); return -1; } /* load entries */ if (load_dir(dir, fte, flags, &depth)) { fterr_warn("load_dir(): failed"); fchdir(here); close(here); closedir(dirp); return -1; } if (debug) fterr_info("ftfile_loaddir(): loaded %lu files", fte->num_files); /* return */ if (fchdir(here) < 0) { fterr_warn("fchdir()"); close(here); closedir(dirp); return -1; } closedir(dirp); close(here); return 0; } /* ftfile_loaddir */ /* * function: ftfile_add_tail * * Add a file to the end of the list * * returns: < 0 error * >= 0 ok */ int ftfile_add_tail(struct ftfile_entries *fte, char *fname, off_t size, u_int32 start) { struct ftfile_entry *n1; if (!(n1 = ftfile_entry_new(strlen(fname)))) { fterr_warnx("ftfile_entry_new(): failed"); return -1; } n1->size = size; n1->start = start; strcpy(n1->name, fname); FT_TAILQ_INSERT_TAIL(&fte->head, n1, chain); fte->num_files ++; fte->num_bytes += size; return 0; } /* ftfile_add_tail */ /* * function: ftfile_expire * * If doit is set, and the directory has exceeded the maximum size * of files, or maximum storage size remove files until the limits * are under the mark. curbytes is a hint (fudge factor) to account * for the existing open flow export. * * returns: < 0 error * >= 0 ok */ int ftfile_expire (struct ftfile_entries *fte, int doit, int curbytes) { u_int i; struct ftfile_entry *n1; u_int64 bytes; /* * if max_files is set, remove files starting at the head of the list until * max_files <= num_files. update num_files, num_bytes */ i = 0; bytes = 0; if (fte->max_files && (fte->num_files > fte->max_files)) { FT_TAILQ_FOREACH(n1, &fte->head, chain) { fterr_info("remove/1 %s", n1->name); bytes += n1->size; ++i; if (doit) { FT_TAILQ_REMOVE(&fte->head, n1, chain); if (unlink(n1->name) == -1) fterr_warn("unlink(%s)", n1->name); ftfile_entry_free(n1); } /* doit */ if ((fte->num_files - i) <= fte->max_files) break; } /* FT_TAILQ_FOREACH */ if (doit) { fte->num_files -= i; fte->num_bytes -= bytes; } /* doit */ } /* if */ if (debug) fterr_info("remove/1 %u files", i); i = 0; bytes = 0; /* * if max_bytes is set, remove files starting at the head of the list until * max_bytes <= num_bytes */ if (fte->max_bytes && (fte->num_bytes+curbytes > fte->max_bytes)) { FT_TAILQ_FOREACH(n1, &fte->head, chain) { fterr_info("remove/2 %s", n1->name); bytes += n1->size; ++i; if (doit) { FT_TAILQ_REMOVE(&fte->head, n1, chain); if (unlink(n1->name) == -1) fterr_warn("unlink(%s)", n1->name); ftfile_entry_free(n1); } /* doit */ if ((fte->num_bytes+curbytes - bytes) <= fte->max_bytes) break; } /* FT_TAILQ_FOREACH */ if (doit) { fte->num_files -= i; fte->num_bytes -= bytes; } /* doit */ } /* if */ if (debug) fterr_info("remove/2 %u files", i); return 0; } /* ftfile_expire */ /* * function: ftfile_dump * * Dump the contents of the file entries data struct. * * returns: < 0 error * >= 0 ok */ int ftfile_dump(struct ftfile_entries *fte) { struct ftfile_entry *n1; FT_TAILQ_FOREACH(n1, &fte->head, chain) { fterr_info("name=%s size=%ld time=%lu", n1->name, (long)n1->size, (unsigned long)n1->start); } /* FT_TAILQ_FOREACH */ return 0; } /* ftfile_dump */ /* * function: ftfile_pathname * * Generate export file pathname based on ftv, time, nest, and done flag. * */ void ftfile_pathname(char *buf, int bsize, int nest, struct ftver ftv, int done, u_int32 ftime) { struct tm *tm; char *prefix, dbuf[64]; long gmt_val; char gmt_sign; int tm_gmtoff; if (!(tm = localtime ((time_t*)&ftime))) { snprintf(buf, bsize, "."); } tm_gmtoff = get_gmtoff(ftime); /* compute GMT offset */ if (tm_gmtoff >= 0) { gmt_val = tm_gmtoff; gmt_sign = '+'; } else { gmt_val = -tm_gmtoff; gmt_sign = '-'; } /* compute directory prefix to pathname */ if (nest == 0) { dbuf[0] = 0; } else if (nest == 1) { sprintf(dbuf, "%2.2d/", (int)tm->tm_year+1900); } else if (nest == 2) { sprintf(dbuf, "%2.2d/%2.2d-%2.2d/", (int)tm->tm_year+1900, (int)tm->tm_year+1900, (int)tm->tm_mon+1); } else if ((nest == 3) || (nest == -3)) { sprintf(dbuf, "%2.2d/%2.2d-%2.2d/%2.2d-%2.2d-%2.2d/", (int)tm->tm_year+1900, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday); } else if (nest == -2) { sprintf(dbuf, "%2.2d-%2.2d/%2.2d-%2.2d-%2.2d/", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday); } else if (nest == -1) { sprintf(dbuf, "%2.2d-%2.2d-%2.2d/", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday); } else { /* really an error */ dbuf[0] = 0; } /* prefix differs if file is active */ prefix = (done) ? "ft-v" : "tmp-v"; if (ftv.d_version == 8) { /* ft-vNNmNN.YYYY-DD-MM.HHMMSS.+|-NNNN */ snprintf(buf, bsize, "%s%s%2.2dm%2.2d.%4.4d-%2.2d-%2.2d.%2.2d%2.2d%2.2d%c%2.2d%2.2d", dbuf, prefix, ftv.d_version, ftv.agg_method, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, gmt_sign, (int)(gmt_val/3600), (int)((gmt_val %3600) / 60)); } else { /* ft-vNN.YYYY-DD-MM.HHMMSS.+|-NNNN */ snprintf(buf, bsize, "%s%s%2.2d.%4.4d-%2.2d-%2.2d.%2.2d%2.2d%2.2d%c%2.2d%2.2d", dbuf, prefix, ftv.d_version, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, gmt_sign, (int)(gmt_val/3600), (int)((gmt_val %3600) / 60)); } /* ver != 8 */ } /* ftfile_name */ /* * function: ftfile_mkpath * * Create directory components for pathname. * * nest controls depth * -3 YYYY/YYYY-MM/YYYY-MM-DD * -2 YYYY-MM/YYYY-MM-DD * -1 YYYY-MM-DD * 0 no directories are created * 1 YYYY * 2 YYYY/YYYY-MM * 3 YYYY/YYYY-MM/YYYY-MM-DD * * returns -1 on error * */ int ftfile_mkpath(u_int32 ftime, int nest) { struct tm *tm; char buf[32]; /* no directories */ if (nest == 0) return 0; /* illegal */ if ((nest > 3) || (nest < -3)) return -1; if (!(tm = localtime ((time_t*)&ftime))) return -1; if (nest == -1) /* YYYY-MM-DD */ sprintf(buf, "%2.2d-%2.2d-%2.2d", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday); else if (nest == -2) /* YYYY-MM */ sprintf(buf, "%2.2d-%2.2d", (int)tm->tm_year+1900, (int)tm->tm_mon+1); else if ((nest == -3) || (nest > 0)) /* YYYY */ sprintf(buf, "%2.2d", (int)tm->tm_year+1900); else /* not reached */ return -1; if (mkdir(buf, 0755) < 0) { if (errno != EEXIST) { fterr_warn("mkdir(%s)", buf); return -1; } } if ((nest == 1) || (nest == -1)) return 0; if (nest == -2) /* YYYY-MM/YYYY-MM-DD */ sprintf(buf, "%2.2d-%2.2d/%2.2d-%2.2d-%2.2d", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday); else if ((nest == -3) || (nest > 0)) /* YYYY/YYYY-MM */ sprintf(buf, "%2.2d/%2.2d-%2.2d", (int)tm->tm_year+1900, (int)tm->tm_year+1900, (int)tm->tm_mon+1); else /* not reached */ return -1; if (mkdir(buf, 0755) < 0) { if (errno != EEXIST) { fterr_warn("mkdir(%s)", buf); return -1; } } if ((nest == 2) || (nest == -2)) return 0; if ((nest == 3) || (nest == -3)) /* YYYY/YYYY-MM/YYYY-MM-DD */ sprintf(buf, "%2.2d/%2.2d-%2.2d/%2.2d-%2.2d-%2.2d", (int)tm->tm_year+1900, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday); else /* not reached */ return -1; if (mkdir(buf, 0755) < 0) { if (errno != EEXIST) { fterr_warn("mkdir(%s)", buf); return -1; } } return 0; } /* ftfile_mkpath */ int load_dir(char *prefix, struct ftfile_entries *fte, int flags, int *depth) { DIR *dirp; struct dirent *dirent; struct stat sb; struct ftfile_entry *n1, *n2; struct ftiheader head; char *path_new; int fd, done, ret, here; int prefix_len, name_len, path_len; if (++ *depth > 50) { fterr_warnx("Limit of 50 nested directories reached."); return -1; } ret = -1; here = -1; prefix_len = strlen(prefix); dirp = opendir("."); for (dirent = readdir(dirp); dirent; dirent = readdir(dirp)) { /* skip . and .. */ if (dirent->d_name[0] == '.') if (!dirent->d_name[1]) continue; if (dirent->d_name[1] == '.') if (!dirent->d_name[2]) continue; if (stat(dirent->d_name, &sb) < 0) { fterr_warn("stat(%s)", dirent->d_name); goto errout; } name_len = strlen(dirent->d_name); path_len = prefix_len + name_len + 1; if (S_ISDIR(sb.st_mode)) { if (!(path_new = (char*)malloc(path_len+1))) { fterr_warn("malloc()"); goto errout; } sprintf(path_new, "%s/%s", prefix, dirent->d_name); /* remember where we are */ if ((here = open(".", O_RDONLY, 0)) < 0) { fterr_warn("open(.)"); goto errout; } if (chdir(dirent->d_name) < 0) { fterr_warn("chdir(%s)", path_new); free(path_new); goto errout; } if (load_dir(path_new, fte, flags, depth) < 0) { fterr_warnx("load_dir(%s)", path_new); free(path_new); goto errout; } if (fchdir(here) < 0) { fterr_warn("chdir(..)"); free(path_new); goto errout; } close (here); here = -1; free (path_new); } else { /* S_ISDIR */ /* skip non plain files */ if (!S_ISREG(sb.st_mode)) { fterr_warnx("not plain, skipping: %s", dirent->d_name); continue; } /* skip anything that doesn't begin with "ft" "cf" and "tmp" */ if (flags & FT_FILE_CHECKNAMES) if ((strncmp(dirent->d_name, "ft", 2)) && (strncmp(dirent->d_name, "cf", 2)) && (strncmp(dirent->d_name, "tmp", 3))) { fterr_warnx("ignoring: %s", dirent->d_name); continue; } /* skip tmp files? */ if (flags & FT_FILE_SKIPTMP) if (!strncmp(dirent->d_name, "tmp", 3)) continue; /* make sure the file is actually a flow file */ if ((fd = open (dirent->d_name, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", dirent->d_name); continue; } if (ftiheader_read(fd, &head) < 0) { fterr_warnx("ftiheader_read(%s): Failed, ignoring file.", dirent->d_name); close(fd); continue; } close (fd); /* insert the entry in the list sorted by start time of flow file */ done = 0; if (flags & FT_FILE_SORT) { FT_TAILQ_FOREACH(n1, &fte->head, chain) { if (n1->start > head.cap_start) { if (!(n2 = ftfile_entry_new(path_len))) { fterr_warnx("ftfile_entry_new(): failed"); goto errout; } n2->size = sb.st_size; n2->start = head.cap_start; sprintf(n2->name, "%s/%s", prefix, dirent->d_name); FT_TAILQ_INSERT_BEFORE(n1, n2, chain); done = 1; break; } } /* FT_TAILQ_FOREACH */ } /* FT_FILE_SORT */ if ((!done) || (!(flags & FT_FILE_SORT))) { if (!(n2 = ftfile_entry_new(path_len))) { fterr_warnx("ftfile_entry_new(): failed"); goto errout; } n2->size = sb.st_size; n2->start = head.cap_start; sprintf(n2->name, "%s/%s", prefix, dirent->d_name); FT_TAILQ_INSERT_TAIL(&fte->head, n2, chain); } /* !done or !FT_FILE_SORT */ fte->num_bytes += sb.st_size; fte->num_files ++; } /* ! S_ISDIR */ } /* for */ ret = 0; errout: closedir(dirp); if (here != -1) close (here); -- *depth; return ret; } /* main */ void ftfile_free(struct ftfile_entries *fte) { struct ftfile_entry *n1, *n2; FT_TAILQ_FOREACH(n1, &fte->head, chain) { FT_TAILQ_REMOVE(&fte->head, n1, chain); n2 = n1; n1 = FT_TAILQ_NEXT(n1, chain); ftfile_entry_free(n2); if (!n1) break; } } /* ftfile_free */ flow-tools-0.68/lib/ftio.c0000644000076600007660000021002307626266243011137 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftio.c,v 1.47 2003/02/24 00:51:47 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_MMAP #include #include #include #endif int readn(register int fd, register void *ptr, register int nbytes); /* * function: ftio_init * * Initialize an ftio structure, allocating r/w buffers, zlib, etc. * On READ the header is consumed. * * flags: FT_IO_FLAG_READ - setup ftio for reading * FT_IO_FLAG_WRITE - setup ftio for writing * FT_IO_FLAG_ZINIT - used with FT_IO_FLAG_WRITE to signal * future use of compression. * FT_IO_FLAG_NO_SWAP - used with FT_IO_FLAG_WRITE. Normally * ftio_write() expects the record in * host format, and will return it in * host format. This will disable the * swap operation to maximize performance * in certain cases. * FT_IO_FLAG_MMAP - use mmap() for reading flows * * ftio_close() must be called on the stream to free resources * and flush buffers on WRITE. * * returns: < 0 error * >= 0 ok */ int ftio_init(struct ftio *ftio, int fd, int flag) { int i, ret; struct stat sb; struct ftver ftv; bzero(ftio, sizeof (struct ftio)); ftio->fd = fd; ret = -1; if (flag & FT_IO_FLAG_READ) { #if HAVE_MMAP if (flag & FT_IO_FLAG_MMAP) { if (fstat(ftio->fd, &sb) < 0) { fterr_warn("stat()"); goto ftio_init_out; } ftio->mr_size = sb.st_size; if ((ftio->mr = mmap((caddr_t)0L, ftio->mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, ftio->fd, (off_t)0L)) == MAP_FAILED) { fterr_warn("mmap()"); goto ftio_init_out; } ftio->flags |= FT_IO_FLAG_MMAP; } /* FT_IO_FLAG_MMAP */ #endif /* HAVE_MMAP */ /* load header */ if (ftiheader_read(ftio->fd, &ftio->fth) < 0) { fterr_warnx("ftiheader_read(): failed"); goto ftio_init_out; } if (flag & FT_IO_FLAG_MMAP) { ftio->d_start = ftio->fth.enc_len; ftio->d_end = sb.st_size; } /* verify stream version */ if ((ftio->fth.s_version != 1) && (ftio->fth.s_version != 3)) { fterr_warnx("Unsupported stream version %d", (int)ftio->fth.s_version); goto ftio_init_out; } /* backwards compatability hack */ if ((ftio->fth.s_version == 1) && (ftio->fth.d_version == 65535)) ftio->fth.d_version = 1; /* alloc z_buf if compression set and not using mmap */ if (!(ftio->flags & FT_IO_FLAG_MMAP)) { if (ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) { if (!(ftio->z_buf = (char*)malloc(FT_Z_BUFSIZE))) { fterr_warn("malloc()"); goto ftio_init_out; } } } /* calculate record size */ if ((ftio->rec_size = ftio_rec_size(ftio)) < 0) { fterr_warnx("Unsupported record type (ftio_rec_size_"); goto ftio_init_out; } /* calculate FT_XFIELD* */ if ((ftio->xfield = ftio_xfield(ftio)) == -1) { fterr_warnx("Unsupported record type (ftio_xfield)"); goto ftio_init_out; } /* set byte swap function */ if (!(ftio->swapf = ftio_rec_swapfunc(ftio))) { goto ftio_init_out; } /* get byte for fields */ ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&ftio->fo, &ftv); /* * alloc d_buf -- 1 for compressed or strems, many for uncompressed */ if (ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) i = ftio->rec_size; else i = FT_D_BUFSIZE; if ((ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) || (!(ftio->flags & FT_IO_FLAG_MMAP))) { if (!(ftio->d_buf = (char*)malloc(i))) { fterr_warn("malloc()"); goto ftio_init_out; } } /* initialize zlib and set zlib initialized flag */ if (ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) { ftio->zs.zalloc = (alloc_func)0; ftio->zs.zfree = (free_func)0; ftio->zs.opaque = (voidpf)0; if (inflateInit(&ftio->zs) != Z_OK) { fterr_warnx("inflateInit(): failed"); goto ftio_init_out; } ftio->flags |= FT_IO_FLAG_ZINIT; #ifdef HAVE_MMAP if (flag & FT_IO_FLAG_MMAP) { ftio->zs.avail_in = sb.st_size - ftio->fth.enc_len; ftio->zs.next_in = (Bytef*)ftio->mr+ftio->fth.enc_len; } #endif /* HAVE_MMAP */ ftio->zs.avail_out = ftio->rec_size; ftio->zs.next_out = (Bytef*)ftio->d_buf; } /* mark stream for reading */ ftio->flags |= FT_IO_FLAG_READ; /* flags always valid */ ftio->fth.fields |= FT_FIELD_HEADER_FLAGS; ret = 0; } else if (flag & FT_IO_FLAG_WRITE) { #if BYTE_ORDER == LITTLE_ENDIAN ftio->fth.byte_order = FT_HEADER_LITTLE_ENDIAN; #endif /* LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN ftio->fth.byte_order = FT_HEADER_BIG_ENDIAN; #endif /* BIG_ENDIAN */ /* alloc z_buf if compression set */ if (flag & FT_IO_FLAG_ZINIT) { if (!(ftio->z_buf = (char*)malloc(FT_Z_BUFSIZE))) { fterr_warn("malloc()"); goto ftio_init_out; } ftio->zs.zalloc = (alloc_func)0; ftio->zs.zfree = (free_func)0; ftio->zs.opaque = (voidpf)0; if (deflateInit(&ftio->zs, ftio->z_level) != Z_OK) { fterr_warnx("deflateInit(): failed"); goto ftio_init_out; } ftio->flags |= FT_IO_FLAG_ZINIT; ftio->fth.flags |= FT_HEADER_FLAG_COMPRESS; ftio->zs.next_out = (Bytef*)ftio->z_buf; ftio->zs.avail_out = FT_Z_BUFSIZE; /* no compression */ } else { if (!(ftio->d_buf = (char*)malloc(FT_D_BUFSIZE))) { fterr_warn("malloc()"); goto ftio_init_out; } ftio->d_end = FT_D_BUFSIZE; } /* mark stream for writing */ ftio->flags |= FT_IO_FLAG_WRITE; /* flags field always valid */ ftio->fth.fields |= FT_FIELD_HEADER_FLAGS; /* preserve FT_IO_FLAG_NO_SWAP */ if (flag & FT_IO_FLAG_NO_SWAP) ftio->flags |= FT_IO_FLAG_NO_SWAP; ret = 0; } /* write */ ftio_init_out: if (ret) { if (ftio->z_buf) free (ftio->z_buf); if (ftio->d_buf) free (ftio->d_buf); if (ftio->flags & FT_IO_FLAG_ZINIT) inflateEnd(&ftio->zs); #if HAVE_MMAP if (ftio->mr) munmap(ftio->mr, (size_t)ftio->mr_size); #endif /* HAVE_MMAP */ } /* error */ return ret; } /* * function: ftio_set_z_level * * Set the zlib compression level for a ftio stream. */ void ftio_set_z_level(struct ftio *ftio, int z_level) { ftio->fth.fields |= FT_FIELD_HEADER_FLAGS; if ((ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) && (!z_level)) { fterr_warnx("Compression can not be disabled"); return; } if ((!(ftio->fth.flags & FT_HEADER_FLAG_COMPRESS)) && (z_level)) { fterr_warnx("Compression can not be enabled"); return; } ftio->z_level = z_level; if (z_level) if (deflateParams(&ftio->zs, ftio->z_level, Z_DEFAULT_STRATEGY) != Z_OK) fterr_warnx("deflateParams(): failed"); } /* * function: ftio_set_flows_count * * Set the # of flows for a ftio stream header */ void ftio_set_flows_count(struct ftio *ftio, u_int32 n) { ftio->fth.fields |= FT_FIELD_FLOW_COUNT; ftio->fth.flows_count = n; } /* * function: ftio_set_streaming * * Set the streaming flag for a ftio stream */ void ftio_set_streaming(struct ftio *ftio, int flag) { ftio->fth.fields |= FT_FIELD_HEADER_FLAGS; if (flag) ftio->fth.flags |= FT_HEADER_FLAG_STREAMING; else ftio->fth.flags &= ~FT_HEADER_FLAG_STREAMING; } /* * function: ftio_set_preloaded * * Set the streaming preloaded for a ftio stream */ void ftio_set_preloaded(struct ftio *ftio, int flag) { ftio->fth.fields |= FT_FIELD_HEADER_FLAGS; if (flag) ftio->fth.flags |= FT_HEADER_FLAG_PRELOADED; else ftio->fth.flags &= ~FT_HEADER_FLAG_PRELOADED; } /* * function: ftio_set_ver * * Set the version information for a ftio stream */ int ftio_set_ver(struct ftio *ftio, struct ftver *ver) { ftio->fth.fields |= FT_FIELD_EX_VER; if (ver->d_version == 8) { ftio->fth.fields |= FT_FIELD_AGG_VER; ftio->fth.fields |= FT_FIELD_AGG_METHOD; } ftio->fth.d_version = ver->d_version; ftio->fth.s_version = ver->s_version; ftio->fth.agg_method = ver->agg_method; ftio->fth.agg_version = ver->agg_version; /* calculate record size */ if ((ftio->rec_size = ftio_rec_size(ftio)) < 0) { fterr_warnx("Unsupported record type"); ftio->fth.d_version = 0; return -1; } /* set byte swap function */ if (!(ftio->swapf = ftio_rec_swapfunc(ftio))) { return -1; } return 0; } /* * function: ftio_set_byte_order * * Set the byte order for a ftio stream */ void ftio_set_byte_order(struct ftio *ftio, int byte_order) { ftio->fth.fields |= FT_FIELD_HEADER_FLAGS; ftio->fth.byte_order = byte_order; } /* * function: ftio_set_debug * * Set the debug level for a ftio stream */ void ftio_set_debug(struct ftio *ftio, int debug) { ftio->debug = debug; } /* * function: ftio_set_comment * * Set the header comment for a ftio stream */ int ftio_set_comment(struct ftio *ftio, char *comment) { if (!comment) return 0; if (ftio->fth.comments) free(ftio->fth.comments); if (!(ftio->fth.comments = (char*)malloc(strlen(comment)+1))) { fterr_warn("malloc()"); return -1; } strcpy(ftio->fth.comments, comment); ftio->fth.fields |= FT_FIELD_COMMENTS; return 0; } /* * function: ftio_set_cap_hostname * * Set the header capture hostname for a ftio stream */ int ftio_set_cap_hostname(struct ftio *ftio, char *hostname) { if (!hostname) return 0; if (ftio->fth.cap_hostname) free(ftio->fth.cap_hostname); if (!(ftio->fth.cap_hostname = (char*)malloc(strlen(hostname)+1))) { fterr_warn("malloc()"); } strcpy(ftio->fth.cap_hostname, hostname); ftio->fth.fields |= FT_FIELD_CAP_HOSTNAME; return 0; } /* * function: ftio_set_corrupt * * Set the corrupt flows header field */ void ftio_set_corrupt(struct ftio *ftio, u_int32 n) { ftio->fth.fields |= FT_FIELD_PKT_CORRUPT; ftio->fth.pkts_corrupt = n; } /* * function: ftio_set_lost * * Set the lost flows header field */ void ftio_set_lost(struct ftio *ftio, u_int32 n) { ftio->fth.fields |= FT_FIELD_FLOW_LOST; ftio->fth.flows_lost = n; } /* * function: ftio_set_reset * * Set the reset sequence header field */ void ftio_set_reset(struct ftio *ftio, u_int32 n) { ftio->fth.fields |= FT_FIELD_SEQ_RESET; ftio->fth.seq_reset = n; } /* * function: ftio_set_xip * * Set the exporter ip header field */ void ftio_set_xip(struct ftio *ftio, u_int32 ip) { ftio->fth.fields |= FT_FIELD_EXPORTER_IP; ftio->fth.exporter_ip = ip; } /* * function: ftio_set_cap_time * * Set the header time for a ftio stream */ void ftio_set_cap_time(struct ftio *ftio, u_int32 start, u_int32 end) { ftio->fth.fields |= FT_FIELD_CAP_START; ftio->fth.fields |= FT_FIELD_CAP_END; ftio->fth.cap_start = start; ftio->fth.cap_end = end; } /* * function: ftio_set_cap_time_start * * Set the header time for a ftio stream */ void ftio_set_cap_time_start(struct ftio *ftio, u_int32 start) { ftio->fth.fields |= FT_FIELD_CAP_START; ftio->fth.cap_start = start; } /* * function: ftio_get_ver * * Get the version from a ftio stream */ void ftio_get_ver(struct ftio *ftio, struct ftver *ver) { ver->d_version = ftio->fth.d_version; ver->s_version = ftio->fth.s_version; ver->agg_method = ftio->fth.agg_method; ver->agg_version = ftio->fth.agg_version; } /* * function: ftio_get_stime * * Get the starting time from a ftio stream */ u_int32 ftio_get_cap_start(struct ftio *ftio) { return ftio->fth.cap_start; } /* * function: ftio_get_etime * * Get the ending time from a ftio stream */ u_int32 ftio_get_cap_end(struct ftio *ftio) { return ftio->fth.cap_end; } /* * function: ftio_get_rec_total * * Get the total records processed from a ftio stream */ u_int64 ftio_get_rec_total(struct ftio *ftio) { return ftio->rec_total; } /* * function: ftio_get_flows_count * * Get the total records processed from a ftio stream */ u_int32 ftio_get_flows_count(struct ftio *ftio) { return ftio->fth.flows_count; } /* * function: ftio_get_debug * * Get the debug level from a ftio stream */ int ftio_get_debug(struct ftio *ftio) { return ftio->debug; } /* * function: ftio_get_cap_hostname * * Get the header hostname from a ftio stream */ char *ftio_get_hostname(struct ftio *ftio) { return ftio->fth.cap_hostname; } /* * function: ftio_get_comment * * Get the header comment from a ftio stream */ char *ftio_get_comment(struct ftio *ftio) { return ftio->fth.comments; } /* * function ftio_get_corrupt * * Get header corrupt flows from a ftio stream */ u_int32 ftio_get_corrupt(struct ftio *ftio) { return ftio->fth.pkts_corrupt; } /* * function ftio_get_lost * * Get header lost flows from a ftio stream */ u_int32 ftio_get_lost(struct ftio *ftio) { return ftio->fth.flows_lost; } /* * function: ftio_close * * Free resources allocated with ftio_init() * Flush any non empty buffers if stream was initialized for WRITE * close file descriptor * * returns: <0 error * >= 0 okay */ int ftio_close(struct ftio *ftio) { int ret, err, n, nbytes; ret = -1; nbytes = 0; if (ftio->fth.fields & FT_FIELD_COMMENTS) free(ftio->fth.comments); if (ftio->fth.fields & FT_FIELD_CAP_HOSTNAME) free(ftio->fth.cap_hostname); if (ftio->fth.ftmap) ftmap_free(ftio->fth.ftmap); if (ftio->flags & FT_IO_FLAG_READ) { if (ftio->flags & FT_IO_FLAG_ZINIT) inflateEnd(&ftio->zs); if (ftio->z_buf) free (ftio->z_buf); if (ftio->d_buf) free (ftio->d_buf); #if HAVE_MMAP if (ftio->mr) munmap(ftio->mr, (size_t)ftio->mr_size); #endif /* HAVE_MMAP */ } else if (ftio->flags & FT_IO_FLAG_WRITE) { /* compression enabled? */ if (ftio->flags & FT_IO_FLAG_ZINIT) { ftio->zs.avail_in = 0; while (1) { err = deflate(&ftio->zs, Z_FINISH); /* if done compressing, do final write to disk */ if (err == Z_STREAM_END) break; /* if anything other than Z_OK, then it's an error */ if (err != Z_OK) { fterr_warnx("deflate(): failed"); goto ftio_close_out; } /* need to flush */ if (!ftio->zs.avail_out) { n = writen(ftio->fd, ftio->z_buf, FT_Z_BUFSIZE); if (n < 0) { fterr_warn("writen()"); goto ftio_close_out; } if (n == 0) { fterr_warnx("writen(): EOF"); goto ftio_close_out; } nbytes += n; ftio->zs.next_out = (Bytef*)ftio->z_buf; ftio->zs.avail_out = FT_Z_BUFSIZE; } else break; } /* while 1 */ n = writen(ftio->fd, ftio->z_buf, FT_Z_BUFSIZE-ftio->zs.avail_out); if (n < 0) { fterr_warn("writen()"); goto ftio_close_out; } if (n == 0) { fterr_warnx("writen(): EOF"); goto ftio_close_out; } nbytes += n; ret = 0; /* no compression */ } else { if (ftio->d_start) { n = writen(ftio->fd, ftio->d_buf, ftio->d_start); if (n < 0) { fterr_warn("writen()"); goto ftio_close_out; } if (n == 0) { fterr_warnx("writen(): EOF"); goto ftio_close_out; } ftio->d_start = 0; nbytes += n; ret = 0; } /* buffer not empty */ ret = 0; } /* compression */ } /* io stream enabled for write */ ftio_close_out: if (ftio->flags & FT_IO_FLAG_WRITE) { if (ftio->flags & FT_IO_FLAG_ZINIT) { deflateEnd(&ftio->zs); ftio->flags &= ~FT_IO_FLAG_ZINIT; free(ftio->z_buf); } else { free (ftio->d_buf); } } /* FT_IO_FLAG_WRITE */ /* don't lose error condition if close() is a success */ if (ret < 0) ret = close(ftio->fd); else close(ftio->fd); /* no error and writing? then return bytes written */ if ((ftio->flags & FT_IO_FLAG_WRITE) && (ret >= 0)) ret = nbytes; return ret; } /* ftio_close */ /* * function: ftio_zstat_print * * Print resources utilization associated with ftio zlib usage * * returns: <0 error * >= 0 okay */ void ftio_zstat_print(struct ftio *ftio, FILE *std) { double d; d = ((double)ftio->zs.total_out) / ((double)ftio->zs.total_in); fprintf(std, "compression: total_in=%lu total_out=%lu %3.3f:1\n", ftio->zs.total_in, ftio->zs.total_out, d); } /* * function: ftio_read * * Return the next fts3rec_* in the ftio stream, or 0L for EOF * * Record is returned in host byte order * * Stream must be first initialized with ftio_init() * */ void *ftio_read(struct ftio *ftio) { int n, err; void *ret; struct fts1rec_compat *compat; u_int32 bleft, boff; ret = (void*)0L; #if HAVE_MMAP /* mmap enabled? */ if (ftio->flags & FT_IO_FLAG_MMAP) { /* compressed ? */ if (ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) { /* EOF? */ if (!ftio->zs.avail_in) goto ftio_read_out; err = inflate(&ftio->zs, Z_SYNC_FLUSH); if ((err != Z_OK) && (err != Z_STREAM_END)) { fterr_warnx("inflate(): failed"); goto ftio_read_out; } /* if avail_out == 0, then a full record was inflated -- return it */ if (!ftio->zs.avail_out) { /* XXX check for interrupt record */ /* reset zlib for next call */ ftio->zs.avail_out = ftio->rec_size; ftio->zs.next_out = (Bytef*)ftio->d_buf; ret = (void*)ftio->d_buf; goto ftio_read_out; } else { /* should never happen - partial decode */ if (ftio->zs.avail_out != ftio->rec_size) fterr_warnx("Warning, partial inflated record before EOF"); /* signal EOF to caller */ goto ftio_read_out; } /* ftio->zs.avail_out */ /* not compressed */ } else { /* bytes left */ bleft = ftio->d_end - ftio->d_start; /* enough bytes in d_buf to return a record? */ if (bleft >= ftio->rec_size) { boff = ftio->d_start; ftio->d_start += ftio->rec_size; ret = (char*)ftio->mr+boff; goto ftio_read_out; } /* signal EOF? */ if (!bleft) goto ftio_read_out; /* shouldn't happen */ fterr_warnx("Warning, partial record before EOF"); goto ftio_read_out; } /* not compressed and mmap */ } /* mmap */ #endif /* HAVE_MMAP */ /* processed compressed stream */ if (ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) { while (1) { /* * if the inflate buffer is empty, perform a read() */ if (!ftio->zs.avail_in) { n = read(ftio->fd, (char*)ftio->z_buf, FT_Z_BUFSIZE); /* EOF and inflate buffer is empty -- done. */ if (!n) { /* * check for partial record inflated. This would never * happen on a uncorrupted stream */ if (ftio->zs.avail_out != ftio->rec_size) fterr_warnx("Warning, partial inflated record before EOF"); /* signal EOF to caller */ goto ftio_read_out; } /* read error -- done. */ if (n == -1) { fterr_warn("read()"); goto ftio_read_out; } ftio->zs.avail_in = n; ftio->zs.next_in = (Bytef*)ftio->z_buf; } /* if inflate buffer empty */ /* * inflate stream, attempt to get a record */ err = inflate(&ftio->zs, Z_SYNC_FLUSH); if ((err != Z_OK) && (err != Z_STREAM_END)) { fterr_warnx("inflate(): failed"); goto ftio_read_out; } /* if avail_out == 0, then a full record was inflated -- return it */ if (!ftio->zs.avail_out) { /* XXX check for interrupt record */ /* reset zlib for next call */ ftio->zs.avail_out = ftio->rec_size; ftio->zs.next_out = (Bytef*)ftio->d_buf; ret = (void*)ftio->d_buf; goto ftio_read_out; } /* bytes available for inflate */ } /* while 1 */ } /* compressed stream */ /* * uncompressed stream */ /* * if there are not enough bytes between the start pointer and the end * of d_buf for a full record, perform a read() */ /* while(1) loop to optimize for normal case of returning bytes from d_buf */ while (1) { bleft = ftio->d_end - ftio->d_start; /* enough bytes in d_buf to return a record? */ if (bleft >= ftio->rec_size) { boff = ftio->d_start; ftio->d_start += ftio->rec_size; /* XXX check for interrupt record */ /* ftio_interrupt(ftio); */ /* continue */ ret = (char*)ftio->d_buf+boff; goto ftio_read_out; /* no, perform a read() to try for more */ } else { /* move trailing partial record to top of buffer */ if (bleft) bcopy(ftio->d_buf+ftio->d_start, ftio->d_buf, bleft); ftio->d_end = bleft; ftio->d_start = 0; n = read(ftio->fd, (char*)ftio->d_buf+ftio->d_end, FT_D_BUFSIZE - ftio->d_end); /* read failed? */ if (n < 0) { fterr_warn("read()"); goto ftio_read_out; } /* eof? */ if (n == 0) { if (ftio->d_start) fterr_warnx("Warning, partial record before EOF"); goto ftio_read_out; } ftio->d_end += n; } /* need a read() */ } /* while 1 */ ftio_read_out: if (ret) { /* fix byte ordering */ #if BYTE_ORDER == BIG_ENDIAN if (ftio->fth.byte_order == FT_HEADER_LITTLE_ENDIAN) ftio->swapf((void*)ret); #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (ftio->fth.byte_order == FT_HEADER_BIG_ENDIAN) ftio->swapf((void*)ret); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ /* increment total records processed */ ftio->rec_total ++; /* * backwards compatability hack. Map the stream version 1 into * a stream version 2 */ if (ftio->fth.s_version == 1) { if (ftio->fth.d_version == 1) { compat = ret; ftio->compat_v1.sysUpTime = 0; ftio->compat_v1.unix_secs = compat->unix_secs; ftio->compat_v1.unix_nsecs = compat->unix_msecs * 1000000; ftio->compat_v1.srcaddr = compat->srcaddr; ftio->compat_v1.dstaddr = compat->dstaddr; ftio->compat_v1.nexthop = compat->nexthop; ftio->compat_v1.input = compat->input; ftio->compat_v1.output = compat->output; ftio->compat_v1.dPkts = compat->dPkts; ftio->compat_v1.dOctets = compat->dOctets; ftio->compat_v1.Last = compat->Last; ftio->compat_v1.First = compat->First; ftio->compat_v1.srcport = compat->srcport; ftio->compat_v1.dstport = compat->dstport; ftio->compat_v1.prot = compat->prot; ftio->compat_v1.tos = compat->tos; ftio->compat_v1.tcp_flags = compat->flags; ret = (void*)&ftio->compat_v1; } else if (ftio->fth.d_version == 5) { compat = ret; ftio->compat_v5.sysUpTime = 0; ftio->compat_v5.unix_secs = compat->unix_secs; ftio->compat_v5.unix_nsecs = compat->unix_msecs * 1000000; ftio->compat_v5.srcaddr = compat->srcaddr; ftio->compat_v5.dstaddr = compat->dstaddr; ftio->compat_v5.nexthop = compat->nexthop; ftio->compat_v5.input = compat->input; ftio->compat_v5.output = compat->output; ftio->compat_v5.dPkts = compat->dPkts; ftio->compat_v5.dOctets = compat->dOctets; ftio->compat_v5.Last = compat->Last; ftio->compat_v5.First = compat->First; ftio->compat_v5.srcport = compat->srcport; ftio->compat_v5.dstport = compat->dstport; ftio->compat_v5.prot = compat->prot; ftio->compat_v5.tos = compat->tos; ftio->compat_v5.tcp_flags = compat->flags; ftio->compat_v5.src_as = compat->src_as; ftio->compat_v5.dst_as = compat->dst_as; ftio->compat_v5.src_mask = compat->src_mask; ftio->compat_v5.dst_mask = compat->dst_mask; ret = (void*)&ftio->compat_v5; } /* v5 compat */ } /* need compat hack */ } /* ret is set */ return ret; } /* * function: ftio_write_header * * A ftio stream consists of a header and n records. ftio_write_header() * must be called before ftio_write() to output the header portion of * the stream * * Stream must be first initialized with ftio_init() * * returns: <0 error * >= 0 okay * */ int ftio_write_header(struct ftio *ftio) { struct ftheader_gen head_gen; struct ftmap_ifname *ftmin; struct ftmap_ifalias *ftmia; u_int32 head_off_d; int n, ret, restore, flip, len; char *enc_buf; ret = -1; restore = 0; enc_buf = (char*)0L; /* if this is not the first time, rewind */ if (ftio->flags & FT_IO_FLAG_HEADER_DONE) { if (lseek(ftio->fd, (off_t)0L, SEEK_SET) == -1) { fterr_warn("lseek()"); goto ftio_write_header_out; } /* flag to seek back to end of file */ restore = 1; /* mark the file as complete. Assume that the second call to write_header * is actually the last */ ftio->fth.flags |= FT_HEADER_FLAG_DONE; } ftio->fth.magic1 = FT_HEADER_MAGIC1; ftio->fth.magic2 = FT_HEADER_MAGIC2; ftio->fth.s_version = 3; if ((!ftio->fth.d_version) || (!ftio->fth.byte_order)) { fterr_warnx("Set d_version and byte_order first"); goto ftio_write_header_out; } if (!(ftio->flags & FT_IO_FLAG_WRITE)) { fterr_warnx("Stream not initialized for writing"); goto ftio_write_header_out; } #if BYTE_ORDER == BIG_ENDIAN if (ftio->fth.byte_order == FT_HEADER_LITTLE_ENDIAN) flip = 1; else flip = 0; #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (ftio->fth.byte_order == FT_HEADER_BIG_ENDIAN) flip = 1; else flip = 0; #endif /* BYTE_ORDER == LITTLE_ENDIAN */ /* max header size */ len = FT_IO_MAXHEADER; /* allocate encode buffer + extra 4 bytes to guarantee alignment */ if (!(enc_buf = (char*)malloc(len+4))) { fterr_warn("malloc()"); goto ftio_write_header_out; } /* clear encode buffer */ bzero(enc_buf, len+4); head_gen.magic1 = ftio->fth.magic1; head_gen.magic2 = ftio->fth.magic2; head_gen.byte_order = ftio->fth.byte_order; head_gen.s_version = ftio->fth.s_version; /* encode generic header */ bcopy(&head_gen, enc_buf, sizeof head_gen); /* leave room to encode head_off_d later */ head_off_d = sizeof head_gen + sizeof head_off_d; /* * encode each TLV */ if (ftio->fth.fields & FT_FIELD_VENDOR) { if ((n = fttlv_enc_uint8(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_VENDOR, ftio->fth.vendor)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_EX_VER) { if ((n = fttlv_enc_uint16(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_EX_VER, ftio->fth.d_version)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_AGG_VER) { if ((n = fttlv_enc_uint8(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_AGG_VER, ftio->fth.agg_version)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_AGG_METHOD) { if ((n = fttlv_enc_uint8(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_AGG_METHOD, ftio->fth.agg_method)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_EXPORTER_IP) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_EXPORTER_IP, ftio->fth.exporter_ip)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_CAP_START) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_CAP_START, ftio->fth.cap_start)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_CAP_END) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_CAP_END, ftio->fth.cap_end)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_HEADER_FLAGS) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_HEADER_FLAGS, ftio->fth.flags)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_ROT_SCHEDULE) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_ROT_SCHEDULE, ftio->fth.rotation)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_FLOW_COUNT) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_FLOW_COUNT, ftio->fth.flows_count)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_FLOW_LOST) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_FLOW_LOST, ftio->fth.flows_lost)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_FLOW_MISORDERED) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_FLOW_MISORDERED, ftio->fth.flows_misordered)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_PKT_CORRUPT) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_PKT_CORRUPT, ftio->fth.pkts_corrupt)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_SEQ_RESET) { if ((n = fttlv_enc_uint32(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_SEQ_RESET, ftio->fth.seq_reset)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_CAP_HOSTNAME) { if ((n = fttlv_enc_str(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_CAP_HOSTNAME, ftio->fth.cap_hostname)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_COMMENTS) { if ((n = fttlv_enc_str(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_COMMENTS, ftio->fth.comments)) < 0) goto ftio_write_header_out; else head_off_d += n; } if (ftio->fth.fields & FT_FIELD_IF_NAME) { FT_LIST_FOREACH(ftmin, &ftio->fth.ftmap->ifname, chain) { if ((n = fttlv_enc_ifname(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_IF_NAME, ftmin->ip, ftmin->ifIndex, ftmin->name)) < 0) goto ftio_write_header_out; else head_off_d += n; } } if (ftio->fth.fields & FT_FIELD_IF_ALIAS) { FT_LIST_FOREACH(ftmia, &ftio->fth.ftmap->ifalias, chain) { if ((n = fttlv_enc_ifalias(enc_buf+head_off_d, len-head_off_d, flip, FT_TLV_IF_ALIAS, ftmia->ip, ftmia->ifIndex_list, ftmia->entries, ftmia->name)) < 0) goto ftio_write_header_out; else head_off_d += n; } } /* head_off_d must be longword aligned */ if (head_off_d & 0x00000003) head_off_d = (head_off_d & 0xFFFFFFFC) + 4; /* if rewriting, ensure header area has not grown or shrunk */ if (restore) { if (head_off_d != ftio->fth.size) { fterr_warnx("Header size change during rewrite not supported"); goto ftio_write_header_out; } } /* byte order of target */ if (flip) SWAPINT32(head_off_d); /* encode offset to data */ bcopy(&head_off_d, enc_buf+sizeof head_gen, sizeof head_off_d); /* restore */ if (flip) SWAPINT32(head_off_d); n = writen(ftio->fd, enc_buf, head_off_d); if (n < 0) { fterr_warn("writen()"); goto ftio_write_header_out; } if (n == 0) { fterr_warnx("writen(): EOF"); goto ftio_write_header_out; } /* flag header has been written */ ftio->flags |= FT_IO_FLAG_HEADER_DONE; /* save write size */ ftio->fth.size = head_off_d; ret = n; ftio_write_header_out: if (restore) { if (lseek(ftio->fd, (off_t)0L, SEEK_END) == -1) { fterr_warn("lseek()"); } } if (enc_buf) free(enc_buf); return ret; } /* * function: ftio_write * * Schedule fts3rec_* for output. ftio_write_header() must be called * on a stream before ftio_write(). If ftio_close() is not called * records may not be written. * * Stream must be first initialized with ftio_init() * * returns: <0 error * >= 0 okay * */ int ftio_write(struct ftio *ftio, void *data) { int ret, n, nbytes; ret = -1; nbytes = 0; if (!(ftio->flags & FT_IO_FLAG_NO_SWAP)) { #if BYTE_ORDER == BIG_ENDIAN if (ftio->fth.byte_order == FT_HEADER_LITTLE_ENDIAN) ftio->swapf((void*)data); #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (ftio->fth.byte_order == FT_HEADER_BIG_ENDIAN) ftio->swapf((void*)data); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ } /* compressed stream? */ if (ftio->fth.flags & FT_HEADER_FLAG_COMPRESS) { ftio->zs.next_in = (Bytef*)data; ftio->zs.avail_in = ftio->rec_size; while (1) { if (deflate(&ftio->zs, Z_NO_FLUSH) != Z_OK) { fterr_warnx("deflate(): failed"); goto ftio_write_out; } /* need to flush */ if (!ftio->zs.avail_out) { n = writen(ftio->fd, ftio->z_buf, FT_Z_BUFSIZE); if (n < 0) { fterr_warn("writen()"); goto ftio_write_out; } if (n == 0) { fterr_warnx("writen(): EOF"); goto ftio_write_out; } ftio->zs.next_out = (Bytef*)ftio->z_buf; ftio->zs.avail_out = FT_Z_BUFSIZE; nbytes += n; ret = 0; /* success */ } else { ret = 0; /* success */ break; } } /* deflating */ /* no, uncompressed stream */ } else { /* flush full buffer */ if ((ftio->d_start + ftio->rec_size) > ftio->d_end) { n = writen(ftio->fd, ftio->d_buf, ftio->d_start); if (n < 0) { fterr_warn("writen()"); goto ftio_write_out; } if (n == 0) { fterr_warnx("writen(): EOF"); goto ftio_write_out; } ftio->d_start = 0; nbytes += n; } bcopy(data, ftio->d_buf+ftio->d_start, ftio->rec_size); ftio->d_start += ftio->rec_size; ret = 0; /* success */ } ftio_write_out: if (!(ftio->flags & FT_IO_FLAG_NO_SWAP)) { #if BYTE_ORDER == BIG_ENDIAN if (ftio->fth.byte_order == FT_HEADER_LITTLE_ENDIAN) ftio->swapf((void*)data); #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (ftio->fth.byte_order == FT_HEADER_BIG_ENDIAN) ftio->swapf((void*)data); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ } if (ret < 0) return ret; else return nbytes; } /* ftio_write */ /* * function: ftio_header_print * * Dump ftio header in readable format * * Stream must be first initialized with ftio_init() * */ void ftio_header_print(struct ftio *ftio, FILE *std, char cc) { struct ftiheader *fth; struct ftmap_ifname *ftmin; struct ftmap_ifalias *ftmia; char agg_ver, agg_method; char *agg_name; char fmt_buf[32]; u_int32 flags, fields; u_long period; int n, streaming2; fth = &ftio->fth; fields = ftio->fth.fields; if (fields & FT_FIELD_HEADER_FLAGS) flags = ftio->fth.flags; else flags = 0; streaming2 = (flags & FT_HEADER_FLAG_STREAMING); if (flags & FT_HEADER_FLAG_PRELOADED) streaming2 = 0; if (flags & FT_HEADER_FLAG_STREAMING) fprintf(std, "%c\n%c mode: streaming\n", cc, cc); else fprintf(std, "%c\n%c mode: normal\n", cc, cc); if (flags & FT_HEADER_FLAG_XLATE) fprintf(std, "%c translated: yes\n", cc); if (!(flags & FT_HEADER_FLAG_STREAMING)) if (fields & FT_FIELD_CAP_HOSTNAME) fprintf(std, "%c capture hostname: %s\n", cc, fth->cap_hostname); if (!(flags & FT_HEADER_FLAG_STREAMING)) { if (fields & FT_FIELD_EXPORTER_IP) { fmt_ipv4(fmt_buf, fth->exporter_ip, FMT_JUST_LEFT); fprintf(std, "%c exporter IP address: %s\n", cc, fmt_buf); } } if (!streaming2) if (fields & FT_FIELD_CAP_START) fprintf(std, "%c capture start: %s", cc, ctime((time_t*)&fth->cap_start)); if (!streaming2) { if ((flags & FT_HEADER_FLAG_DONE) || (flags & FT_HEADER_FLAG_PRELOADED)) { if (fields & FT_FIELD_CAP_END) fprintf(std, "%c capture end: %s", cc, ctime((time_t*)&fth->cap_end)); period = fth->cap_end - fth->cap_start; if ((fields & FT_FIELD_CAP_END) && (fields & FT_FIELD_CAP_START)) fprintf(std, "%c capture period: %lu seconds\n", cc, period); } } fprintf(std, "%c compress: %s\n", cc, (flags & FT_HEADER_FLAG_COMPRESS) ? "on" : "off"); fprintf(std, "%c byte order: ", cc); if (fth->byte_order == FT_HEADER_LITTLE_ENDIAN) fprintf(std, "little\n"); else if (fth->byte_order == FT_HEADER_BIG_ENDIAN) fprintf(std, "big\n"); else fprintf(std, "BROKEN\n"); /* if (!(flags & FT_HEADER_FLAG_STREAMING)) fprintf(std, "%c multiple pdu types: %s\n", cc, (fth->flags & FT_HEADER_FLAG_MULT_PDU) ? "yes" : "no"); */ fprintf(std, "%c stream version: %u\n", cc, (int)fth->s_version); if (fields & FT_FIELD_EX_VER) fprintf(std, "%c export version: %u\n", cc, (int)fth->d_version); if ((fields & FT_FIELD_EX_VER) && (fields & FT_FIELD_AGG_METHOD)) { if (fth->d_version == 8) { agg_ver = ftio->fth.agg_version; agg_method = ftio->fth.agg_method; switch (agg_method) { case 1: agg_name = "AS"; break; case 2: agg_name = "Protocol Port"; break; case 3: agg_name = "Source Prefix"; break; case 4: agg_name = "Destination Prefix"; break; case 5: agg_name = "Prefix"; break; case 6: agg_name = "Destination"; break; case 7: agg_name = "Source Destination"; break; case 8: agg_name = "Full Flow"; break; case 9: agg_name = "ToS AS"; break; case 10: agg_name = "ToS Proto Port"; break; case 11: agg_name = "ToS Source Prefix"; break; case 12: agg_name = "ToS Destination Prefix"; break; case 13: agg_name = "ToS Prefix"; break; case 14: agg_name = "ToS Prefix Port"; break; default: agg_name = "Unknown"; } /* switch */ if (fields & FT_FIELD_AGG_VER) fprintf(std, "%c export agg_version: %u\n", cc, (int)agg_ver); fprintf(std, "%c export agg_method: %u (%s)\n", cc, (int)agg_method, agg_name); } } if (!streaming2) if (fields & FT_FIELD_FLOW_LOST) fprintf(std, "%c lost flows: %lu\n", cc, (u_long)fth->flows_lost); if (!streaming2) if (fields & FT_FIELD_FLOW_MISORDERED) fprintf(std, "%c misordered flows: %lu\n", cc, (u_long)fth->flows_misordered); if (!streaming2) if (fields & FT_FIELD_PKT_CORRUPT) fprintf(std, "%c corrupt packets: %lu\n", cc, (u_long)fth->pkts_corrupt); if (!streaming2) if (fields & FT_FIELD_SEQ_RESET) fprintf(std, "%c sequencer resets: %lu\n", cc, (u_long)fth->seq_reset); if (fields & FT_FIELD_COMMENTS) fprintf(std, "%c comments: %s\n", cc, fth->comments); if (!streaming2) { if ((flags & FT_HEADER_FLAG_DONE) || (flags & FT_HEADER_FLAG_PRELOADED)) { if (fields & FT_FIELD_FLOW_COUNT) fprintf(std, "%c capture flows: %lu\n", cc, (unsigned long)fth->flows_count); } else fprintf(std, "%c note, incomplete flow file\n", cc); } if (fields & FT_FIELD_IF_NAME) { fprintf(std, "%c\n", cc); FT_LIST_FOREACH(ftmin, &fth->ftmap->ifname, chain) { fmt_ipv4(fmt_buf, ftmin->ip, FMT_JUST_LEFT); fprintf(std, "%c ifname %s %d %s\n", cc, fmt_buf, (int)ftmin->ifIndex, ftmin->name); } } /* FT_FIELD_IF_NAME */ if (fields & FT_FIELD_IF_ALIAS) { fprintf(std, "%c\n", cc); FT_LIST_FOREACH(ftmia, &fth->ftmap->ifalias, chain) { fmt_ipv4(fmt_buf, ftmia->ip, FMT_JUST_LEFT); fprintf(std, "%c ifalias %s ", cc, fmt_buf); for (n = 0; n < ftmia->entries; ++n) fprintf(std, "%d ", (int)ftmia->ifIndex_list[n]); fprintf(std, "%s\n", ftmia->name); } } /* FT_FIELD_IF_ALIAS */ fprintf(std, "%c\n", cc); } /* ftio_header_print */ /* * function: ftio_rec_swapfunc * * Return the function required to swap a record. Used to create * jump table based on the d_version and agg_method * */ void *ftio_rec_swapfunc(struct ftio *ftio) { u_int8 s_ver, d_ver, agg_ver, agg_method; void *ret; s_ver = ftio->fth.s_version; d_ver = ftio->fth.d_version; agg_ver = ftio->fth.agg_version; agg_method = ftio->fth.agg_method; switch (s_ver) { case 1: ret = fts1rec_swap_compat; break; case 3: switch (ftio->fth.d_version) { case 1: ret = fts3rec_swap_v1; break; case 5: ret = fts3rec_swap_v5; break; case 6: ret = fts3rec_swap_v6; break; case 7: ret = fts3rec_swap_v7; break; case 8: if (agg_ver != 2) { fterr_warnx("Unsupported agg_version %d", (int)agg_ver); ret = (void*)0L; break; } switch (agg_method) { case 1: ret = fts3rec_swap_v8_1; break; case 2: ret = fts3rec_swap_v8_2; break; case 3: ret = fts3rec_swap_v8_3; break; case 4: ret = fts3rec_swap_v8_4; break; case 5: ret = fts3rec_swap_v8_5; break; case 6: ret = fts3rec_swap_v8_6; break; case 7: ret = fts3rec_swap_v8_7; break; case 8: ret = fts3rec_swap_v8_8; break; case 9: ret = fts3rec_swap_v8_9; break; case 10: ret = fts3rec_swap_v8_10; break; case 11: ret = fts3rec_swap_v8_11; break; case 12: ret = fts3rec_swap_v8_12; break; case 13: ret = fts3rec_swap_v8_13; break; case 14: ret = fts3rec_swap_v8_14; break; default: fterr_warnx("Unsupported agg_method %d", (int)agg_method); ret = (void*)0L; break; } /* switch agg_method */ break; case 1005: ret = fts3rec_swap_v1005; break; default: fterr_warnx("Unsupported d_version %d", (int)ftio->fth.d_version); ret = (void*)0L; break; } /* switch v8 export */ break; default: fterr_warnx("Unsupported s_version %d", (int)s_ver); ret = (void*)0L; break; } /* switch s_version */ return ret; } /* * function: ftrec_size * * Return the size of a fts3rec_* based on the d_version and agg_method * */ int ftrec_size(struct ftver *ver) { int ret; switch (ver->s_version) { case 1: ret = sizeof (struct fts1rec_compat); break; case 3: switch (ver->d_version) { case 1: ret = sizeof (struct fts3rec_v1); break; case 5: ret = sizeof (struct fts3rec_v5); break; case 6: ret = sizeof (struct fts3rec_v6); break; case 7: ret = sizeof (struct fts3rec_v7); break; case 8: if (ver->agg_version != 2) { fterr_warnx("Unsupported agg_version %d", (int)ver->agg_version); ret = -1; break; } switch (ver->agg_method) { case 1: ret = sizeof (struct fts3rec_v8_1); break; case 2: ret = sizeof (struct fts3rec_v8_2); break; case 3: ret = sizeof (struct fts3rec_v8_3); break; case 4: ret = sizeof (struct fts3rec_v8_4); break; case 5: ret = sizeof (struct fts3rec_v8_5); break; case 6: ret = sizeof (struct fts3rec_v8_6); break; case 7: ret = sizeof (struct fts3rec_v8_7); break; case 8: ret = sizeof (struct fts3rec_v8_8); break; case 9: ret = sizeof (struct fts3rec_v8_9); break; case 10: ret = sizeof (struct fts3rec_v8_10); break; case 11: ret = sizeof (struct fts3rec_v8_11); break; case 12: ret = sizeof (struct fts3rec_v8_12); break; case 13: ret = sizeof (struct fts3rec_v8_13); break; case 14: ret = sizeof (struct fts3rec_v8_14); break; default: fterr_warnx("Unsupported agg_method %d", (int)ver->agg_method); ret = -1; break; } /* switch agg_method */ break; case 1005: ret = sizeof (struct fts3rec_v1005); break; default: fterr_warnx("Unsupported d_version %d", (int)ver->d_version); ret = -1; break; } /* switch v8 export */ break; default: fterr_warnx("Unsupported s_version %d", (int)ver->s_version); ret = -1; break; } /* switch s_version */ return ret; } /* * function: ftrec_xfield * * Return the FT_XFIELD* based on the d_version and agg_method * */ u_int64 ftrec_xfield(struct ftver *ver) { u_int64 ret; switch (ver->d_version) { case 1: ret = FT_XFIELD_V1_MASK; break; case 5: ret = FT_XFIELD_V5_MASK; break; case 6: ret = FT_XFIELD_V6_MASK; break; case 7: ret = FT_XFIELD_V7_MASK; break; case 8: if (ver->agg_version != 2) { fterr_warnx("Unsupported agg_version %d", (int)ver->agg_version); ret = -1; break; } switch (ver->agg_method) { case 1: ret = FT_XFIELD_V8_1_MASK; break; case 2: ret = FT_XFIELD_V8_2_MASK; break; case 3: ret = FT_XFIELD_V8_3_MASK; break; case 4: ret = FT_XFIELD_V8_4_MASK; break; case 5: ret = FT_XFIELD_V8_5_MASK; break; case 6: ret = FT_XFIELD_V8_6_MASK; break; case 7: ret = FT_XFIELD_V8_7_MASK; break; case 8: ret = FT_XFIELD_V8_8_MASK; break; case 9: ret = FT_XFIELD_V8_9_MASK; break; case 10: ret = FT_XFIELD_V8_10_MASK; break; case 11: ret = FT_XFIELD_V8_11_MASK; break; case 12: ret = FT_XFIELD_V8_12_MASK; break; case 13: ret = FT_XFIELD_V8_13_MASK; break; case 14: ret = FT_XFIELD_V8_14_MASK; break; default: fterr_warnx("Unsupported agg_method %d", (int)ver->agg_method); ret = -1; break; } /* switch agg_method */ break; case 1005: ret = FT_XFIELD_V1005_MASK; break; default: fterr_warnx("Unsupported d_version %d", (int)ver->d_version); ret = -1; break; } /* switch v8 export */ return ret; } /* ftrec_xfield */ /* * function: ftio_xfield * * Return the FT_XFIELD* * */ u_int64 ftio_xfield(struct ftio *ftio) { struct ftver ver; ver.d_version = ftio->fth.d_version; ver.s_version = ftio->fth.s_version; ver.agg_method = ftio->fth.agg_method; ver.agg_version = ftio->fth.agg_version; return ftrec_xfield(&ver); } /* * function: ftio_rec_size * * Return the size of a fts3rec_* based on the initialized ftio * stream. * */ int ftio_rec_size(struct ftio *ftio) { struct ftver ver; ver.d_version = ftio->fth.d_version; ver.s_version = ftio->fth.s_version; ver.agg_method = ftio->fth.agg_method; ver.agg_version = ftio->fth.agg_version; return ftrec_size(&ver); } /* ftio_rec_size */ /* * function: readn * * read()'s n bytes from fd * returns # of butes read, or -1 for error */ int readn(register int fd, register void *ptr, register int nbytes) { int nleft, nread; nleft = nbytes; while (nleft > 0) { nread = read(fd, ptr, nleft); if (nread < 0) return nread; else if (nread == 0) break; nleft -= nread; (char*)ptr += nread; } return (nbytes - nleft); } /* readn */ /* From Stevens * * function: writen * * write()'s n bytes to fd. * returns # of bytes written, or -1 for error */ int writen(register int fd, register void *ptr, register int nbytes) { int nleft, nwritten; nleft = nbytes; while (nleft > 0) { nwritten = write(fd, ptr, nleft); if (nwritten <= 0) return(nwritten); /* error */ nleft -= nwritten; (char*)ptr += nwritten; } return(nbytes - nleft); } /* writen */ /* * function: ftiheader_read * * load a ftheader, possibly converting from an older version * * header is returned in host byte order * * returns: <0 error * >= 0 okay */ int ftiheader_read(int fd, struct ftiheader *ihead) { struct fts1header *h1; struct ftheader_gen head_gen; struct fttlv tlv; struct ftmap_ifname *ftmin; struct ftmap_ifalias *ftmia; int n, ret, len_read, len_buf, off, flip, left; u_int32 ip; u_int16 entries, ifIndex, *ifIndex_list; u_int32 head_off_d; char *dp, *c, *enc_buf; ret = -1; enc_buf = (char*)0L; ifIndex_list = (u_int16*)0L; bzero(ihead, sizeof (struct ftiheader)); /* read the stream header version area */ if ((n = readn(fd, (char*)&head_gen, sizeof head_gen)) < 0) { fterr_warn("read()"); goto ftiheader_read_out; } if (n != sizeof head_gen) { fterr_warnx( "ftiheader_read(): Warning, short read while loading header top."); goto ftiheader_read_out; } /* verify magic */ if ((head_gen.magic1 != FT_HEADER_MAGIC1) || (head_gen.magic2 != FT_HEADER_MAGIC2)) { fterr_warnx("ftiheader_read(): Warning, bad magic number"); goto ftiheader_read_out; } #if BYTE_ORDER == BIG_ENDIAN if (head_gen.byte_order == FT_HEADER_LITTLE_ENDIAN) flip = 1; else flip = 0; #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (head_gen.byte_order == FT_HEADER_BIG_ENDIAN) flip = 1; else flip = 0; #endif /* BYTE_ORDER == LITTLE_ENDIAN */ /* determine how many bytes to read */ if (head_gen.s_version == 1) { /* v1 header size static */ len_read = (sizeof (struct fts1header)) - sizeof head_gen; len_buf = sizeof (struct fts1header); } else if (head_gen.s_version == 3) { /* read the version 3 index */ if ((n = readn(fd, (char*)&head_off_d, sizeof head_off_d)) < 0) { fterr_warn("read()"); goto ftiheader_read_out; } if (n != sizeof head_off_d) { fterr_warnx( "ftiheader_read(): Error, short read while loading header data offset."); goto ftiheader_read_out; } /* data offset must be in host byte order */ if (flip) SWAPINT32(head_off_d); /* v3 dynamic header size */ len_read = head_off_d - sizeof head_gen - sizeof head_off_d; len_buf = len_read + sizeof head_gen + sizeof head_off_d; } else { fterr_warnx("Stream format must be 1 or 3, not %d", (int)head_gen.s_version); goto ftiheader_read_out; } /* allocate storage for decode */ if (!(enc_buf = (char*)malloc(len_buf))) { fterr_warn("malloc()"); goto ftiheader_read_out; } ihead->enc_len = len_buf; /* insert the generic part to the top of the buffer */ bcopy(&head_gen, enc_buf, sizeof head_gen); off = sizeof head_gen; /* for version 3 insert the data offset */ if (head_gen.s_version == 3) { bcopy(&head_off_d, enc_buf+off, sizeof head_off_d); off += sizeof head_off_d; } /* read the rest of the header */ if ((n = readn(fd, (char*)enc_buf+off, len_read)) < 0) { fterr_warn("read()"); goto ftiheader_read_out; } if (n != len_read) { fterr_warnx("Short read while loading header"); goto ftiheader_read_out; } /* v1 header? yes, convert it directly to internal format */ if (head_gen.s_version == 1) { h1 = (struct fts1header*) enc_buf; ihead->magic1 = h1->magic1; ihead->magic2 = h1->magic2; ihead->byte_order = h1->byte_order; ihead->s_version = h1->s_version; ihead->d_version = h1->d_version; ihead->cap_start = h1->start; ihead->cap_end = h1->end; ihead->flags = h1->flags; ihead->rotation = h1->rotation; ihead->flows_count = h1->nflows; ihead->flows_lost = h1->pdu_drops; ihead->flows_misordered = h1->pdu_misordered; /* translated from v1 */ ihead->flags |= FT_HEADER_FLAG_XLATE; ihead->fields = FT_FIELD_VENDOR | FT_FIELD_EX_VER | FT_TLV_CAP_START | FT_TLV_CAP_END | FT_FIELD_HEADER_FLAGS | FT_FIELD_ROT_SCHEDULE | FT_FIELD_FLOW_COUNT; /* convert to host byte order */ if (flip) { SWAPINT16(ihead->d_version); SWAPINT32(ihead->cap_start); SWAPINT32(ihead->cap_end); SWAPINT32(ihead->flags); SWAPINT32(ihead->rotation); SWAPINT32(ihead->flows_count); SWAPINT32(ihead->exporter_ip); SWAPINT32(ihead->flows_lost); SWAPINT32(ihead->flows_misordered); SWAPINT32(ihead->pkts_corrupt); SWAPINT32(ihead->seq_reset); } /* flip */ if (h1->hostname[0]) { if (!(ihead->cap_hostname = (char*)malloc(FT_HEADER1_HN_LEN))) { fterr_warn("malloc()"); goto ftiheader_read_out; } strcpy(ihead->cap_hostname, h1->hostname); ihead->fields |= FT_FIELD_CAP_HOSTNAME; } if (h1->comments[0]) { if (!(ihead->comments = (char*)malloc(FT_HEADER1_CMNT_LEN))) { fterr_warn("malloc()"); goto ftiheader_read_out; } strcpy(ihead->comments, h1->comments); ihead->fields |= FT_FIELD_COMMENTS; } } else if (head_gen.s_version == 3) { /* set decode pointer to first tlv */ dp = enc_buf + sizeof head_gen + sizeof head_off_d; left = len_read; /* copy generic header to internal */ ihead->magic1 = head_gen.magic1; ihead->magic2 = head_gen.magic2; ihead->byte_order = head_gen.byte_order; ihead->s_version = head_gen.s_version; /* smallest TLV is 2+2+0 (null TLV). Don't try to read padding added * for alignment. */ while (left >= 4) { /* parse type, store in host byte order */ bcopy(dp, &tlv.t, 2); if (flip) SWAPINT16(tlv.t); dp += 2; left -= 2; /* parse len, store in host byte order */ bcopy(dp, &tlv.l, 2); if (flip) SWAPINT16(tlv.l); dp += 2; left -= 2; /* parse val */ tlv.v = dp; /* point decode buf at next tlv */ dp += tlv.l; left -= tlv.l; /* TLV length sane? */ if (left < 0) break; switch (tlv.t) { case FT_TLV_NULL: break; case FT_TLV_VENDOR: bcopy(tlv.v, &ihead->vendor, 2); if (flip) SWAPINT16(ihead->vendor); ihead->fields |= FT_FIELD_VENDOR; break; case FT_TLV_EX_VER: bcopy(tlv.v, &ihead->d_version, 2); if (flip) SWAPINT16(ihead->d_version); ihead->fields |= FT_FIELD_EX_VER; break; case FT_TLV_AGG_VER: bcopy(tlv.v, &ihead->agg_version, 1); ihead->fields |= FT_FIELD_AGG_VER; break; case FT_TLV_AGG_METHOD: bcopy(tlv.v, &ihead->agg_method, 1); ihead->fields |= FT_FIELD_AGG_METHOD; break; case FT_TLV_EXPORTER_IP: bcopy(tlv.v, &ihead->exporter_ip, 4); if (flip) SWAPINT32(ihead->exporter_ip); ihead->fields |= FT_FIELD_EXPORTER_IP; break; case FT_TLV_CAP_START: bcopy(tlv.v, &ihead->cap_start, 4); if (flip) SWAPINT32(ihead->cap_start); ihead->fields |= FT_FIELD_CAP_START; break; case FT_TLV_CAP_END: bcopy(tlv.v, &ihead->cap_end, 4); if (flip) SWAPINT32(ihead->cap_end); ihead->fields |= FT_FIELD_CAP_END; break; case FT_TLV_HEADER_FLAGS: bcopy(tlv.v, &ihead->flags, 4); if (flip) SWAPINT32(ihead->flags); ihead->fields |= FT_FIELD_HEADER_FLAGS; break; case FT_TLV_ROT_SCHEDULE: bcopy(tlv.v, &ihead->rotation, 4); if (flip) SWAPINT32(ihead->rotation); ihead->fields |= FT_FIELD_ROT_SCHEDULE; break; case FT_TLV_FLOW_COUNT: bcopy(tlv.v, &ihead->flows_count, 4); if (flip) SWAPINT32(ihead->flows_count); ihead->fields |= FT_FIELD_FLOW_COUNT; break; case FT_TLV_FLOW_LOST: bcopy(tlv.v, &ihead->flows_lost, 4); if (flip) SWAPINT32(ihead->flows_lost); ihead->fields |= FT_FIELD_FLOW_LOST; break; case FT_TLV_FLOW_MISORDERED: bcopy(tlv.v, &ihead->flows_misordered, 4); if (flip) SWAPINT32(ihead->flows_misordered); ihead->fields |= FT_FIELD_FLOW_MISORDERED; break; case FT_TLV_PKT_CORRUPT: bcopy(tlv.v, &ihead->pkts_corrupt, 4); if (flip) SWAPINT32(ihead->pkts_corrupt); ihead->fields |= FT_FIELD_PKT_CORRUPT; break; case FT_TLV_SEQ_RESET: bcopy(tlv.v, &ihead->seq_reset, 4); if (flip) SWAPINT32(ihead->seq_reset); ihead->fields |= FT_FIELD_SEQ_RESET; break; case FT_TLV_CAP_HOSTNAME: if (!(ihead->cap_hostname = (char*)malloc(tlv.l))) { fterr_warn("malloc()"); goto ftiheader_read_out; } strcpy(ihead->cap_hostname, tlv.v); ihead->fields |= FT_FIELD_CAP_HOSTNAME; break; case FT_TLV_COMMENTS: if (!(ihead->comments = (char*)malloc(tlv.l))) { fterr_warn("malloc()"); goto ftiheader_read_out; } strcpy(ihead->comments, tlv.v); ihead->fields |= FT_FIELD_COMMENTS; break; case FT_TLV_IF_NAME: if (!ihead->ftmap) { if (!(ihead->ftmap = ftmap_new())) { fterr_warnx("ftmap_new(): failed"); goto ftiheader_read_out; } } ihead->fields |= FT_FIELD_IF_NAME; /* decode the value */ bcopy(tlv.v, &ip, 4); if (flip) SWAPINT32(ip); bcopy(tlv.v+4, &ifIndex, 2); if (flip) SWAPINT32(ifIndex); c = tlv.v+6; /* allocate space for a ifname */ if (!(ftmin = ftmap_ifname_new(ip, ifIndex, c))) { fterr_warnx("ftmap_ifname_new(): failed"); goto ftiheader_read_out; } /* and link it in */ FT_LIST_INSERT_HEAD(&ihead->ftmap->ifname, ftmin, chain); break; case FT_TLV_IF_ALIAS: if (!ihead->ftmap) { if (!(ihead->ftmap = ftmap_new())) { fterr_warnx("ftmap_new(): failed"); goto ftiheader_read_out; } } ihead->fields |= FT_FIELD_IF_ALIAS; /* decode the value */ bcopy(tlv.v, &ip, 4); if (flip) SWAPINT32(ip); bcopy(tlv.v+4, &entries, 2); if (flip) SWAPINT32(entries); c = tlv.v+6 + (entries*2); if (!(ifIndex_list = (u_int16*)malloc(entries*2))) { fterr_warn("malloc()"); goto ftiheader_read_out; } bcopy(tlv.v+6, ifIndex_list, entries*2); /* allocate space for a ifname */ if (!(ftmia = ftmap_ifalias_new(ip, ifIndex_list, entries, c))) { fterr_warnx("ftmap_ifalias_new(): failed"); goto ftiheader_read_out; } free(ifIndex_list); ifIndex_list = (u_int16*)0L; /* and link it in */ FT_LIST_INSERT_HEAD(&ihead->ftmap->ifalias, ftmia, chain); break; default: break; } /* switch */ } /* while */ } /* s_version == 3 */ ret = 0; ftiheader_read_out: if (ifIndex_list) free(ifIndex_list); if (enc_buf) free(enc_buf); return ret; } /* ftiheader_read */ /* * function: ftio_check_generic * * check if this io stream can be used with the ftstrec_gen * pseudo record. fts3rec_gen overlays the common fields of * v1, v5, v6, and v7 formats * * returns: <0 error * >= 0 okay */ int ftio_check_generic(struct ftio *ftio) { struct ftver ver; ftio_get_ver(ftio, &ver); if ((ver.d_version != 1) && (ver.d_version != 5) && (ver.d_version != 6) && (ver.d_version != 7)) { fterr_warnx("Export version %d not supported by format", (int)ver.d_version); return -1; } return 0; } /* ftio_check_generic */ /* * function: ftio_check_generic5 * * check if this io stream can be used with the ftstrec_gen * pseudo record. fts3rec_gen overlays the common fields of * v5, v6, and v7 formats * * returns: <0 error * >= 0 okay */ int ftio_check_generic5(struct ftio *ftio) { struct ftver ver; ftio_get_ver(ftio, &ver); if ((ver.d_version != 5) && (ver.d_version != 6) && (ver.d_version != 7)) { fterr_warnx("Export version %d not supported by format", (int)ver.d_version); return -1; } return 0; } /* ftio_check_generic5 */ /* * function: ftltime * * Flow exports represent time with a combination of uptime of the * router, real time, and offsets from the router uptime. ftltime * converts from the PDU to a standard unix seconds/milliseconds * representation * * returns: struct fttime */ struct fttime ftltime(u_int32 sys, u_int32 secs, u_int32 nsecs, u_int32 t) { u_int32 sys_s, sys_m; struct fttime ftt; /* sysUpTime is in milliseconds, convert to seconds/milliseconds */ sys_s = sys / 1000; sys_m = sys % 1000; /* unix seconds/nanoseconds to seconds/milliseconds */ ftt.secs = secs; ftt.msecs = nsecs / 1000000L; /* subtract sysUpTime from unix seconds */ ftt.secs -= sys_s; /* borrow a second? */ if (sys_m > ftt.msecs) { -- ftt.secs; ftt.msecs += 1000; } ftt.msecs -= sys_m; /* add offset which is in milliseconds */ ftt.secs += t / 1000; ftt.msecs += t % 1000; /* fix if milliseconds >= 1000 */ if (ftt.msecs >= 1000) { ftt.msecs -= 1000; ftt.secs += 1; } return ftt; } /* ftltime */ /* * function: ftset_init * * initialize default settings * * returns: initialized ftset */ void ftset_init(struct ftset *ftset, int z_level) { bzero(ftset, sizeof (struct ftset)); ftset->z_level = z_level; #if BYTE_ORDER == BIG_ENDIAN ftset->byte_order = FT_HEADER_BIG_ENDIAN; #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN ftset->byte_order = FT_HEADER_LITTLE_ENDIAN; #endif /* BYTE_ORDER == LITTLE_ENDIAN */ } /* ftset_init */ int ftio_map_load(struct ftio *ftio, char *fname, u_int32 ip) { /* load the map */ if (!(ftio->fth.ftmap = ftmap_load(fname, ip))) { fterr_warnx("ftmap_load(): failed"); return -1; } ftio->fth.fields |= FT_FIELD_IF_NAME | FT_FIELD_IF_ALIAS; return 0; } /* ftio_map_load */ int ftio_interrupt(struct ftio *ftio, u_int32 fields) { struct ftmap_ifname *ftmin; struct ftmap_ifalias *ftmia; u_int32 offset, oflag; char *enc_buf, *rec_buf; int len, n, ret, flip; enc_buf = rec_buf = (char*)0L; ret = -1; /* disable ftio_write() from swapping bytes */ oflag = ftio->flags; ftio->flags |= FT_IO_FLAG_NO_SWAP; /* allocate space for TLV's */ if (!(enc_buf = (char*)malloc(FT_IO_MAXHEADER))) { fterr_warnx("malloc()"); goto ftio_interrupt_out; } /* allocate space for fake flow record */ if (!(rec_buf = (char*)malloc(ftio->rec_size))) { fterr_warnx("malloc()"); goto ftio_interrupt_out; } #if BYTE_ORDER == BIG_ENDIAN if (ftio->fth.byte_order == FT_HEADER_LITTLE_ENDIAN) flip = 1; else flip = 0; #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (ftio->fth.byte_order == FT_HEADER_BIG_ENDIAN) flip = 1; else flip = 0; #endif /* BYTE_ORDER == LITTLE_ENDIAN */ offset = 0; len = FT_IO_MAXHEADER; if (fields & FT_FIELD_IF_NAME) { FT_LIST_FOREACH(ftmin, &ftio->fth.ftmap->ifname, chain) { if ((n = fttlv_enc_ifname(enc_buf+offset, len-offset, flip, FT_TLV_IF_NAME, ftmin->ip, ftmin->ifIndex, ftmin->name)) < 0) goto ftio_interrupt_out; else offset += n; } } if (fields & FT_FIELD_IF_ALIAS) { FT_LIST_FOREACH(ftmia, &ftio->fth.ftmap->ifalias, chain) { if ((n = fttlv_enc_ifalias(enc_buf+offset, len-offset, flip, FT_TLV_IF_ALIAS, ftmia->ip, ftmia->ifIndex_list, ftmia->entries, ftmia->name)) < 0) goto ftio_interrupt_out; else offset += n; } } if (ftio->fth.fields & FT_FIELD_INTERRUPT) { if ((n = fttlv_enc_uint8(enc_buf+offset, len-offset, flip, FT_TLV_INTERRUPT, (u_int8)0)) < 0) goto ftio_interrupt_out; else offset += n; } /* bytes 0-15 are 0xFF */ memset(enc_buf, 0xFF, (size_t)16); if (flip) SWAPINT32(offset); /* bytes 16-20 of interrupt flow record are the bytes to follow */ bcopy(enc_buf+16, &offset, 4); if (flip) SWAPINT32(offset); /* schedule the interrupt record for writing */ if (ftio_write(ftio, rec_buf) < 0) { fterr_warnx("ftio_write(): failed"); goto ftio_interrupt_out; } ret = 0; ftio_interrupt_out: /* restore ftio->flags */ ftio->flags = oflag; if (enc_buf) free(enc_buf); if (rec_buf) free(rec_buf); return ret; } /* ftio_interrupt */ /* * function: ftio_check_xfield * * Check if xfield_need bits are available in stream * * returns: 0 ok * != fail - a field required is not available. */ int ftio_check_xfield(struct ftio *ftio, u_int64 xfield_need) { if ((xfield_need & ftio->xfield) != xfield_need) return -1; else return 0; } /* ftio_xfields */ flow-tools-0.68/lib/ftlib.h0000644000076600007660000036122010240154205011265 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftlib.h,v 1.94 2005/05/10 15:51:33 maf Exp $ */ #ifndef FTLIB_H #define FTLIB_H #include #include #include #include #include #include #include #include #include #include #include #include #ifndef BIG_ENDIAN #define BIG_ENDIAN 4321 #endif #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN 1234 #endif #ifndef BYTE_ORDER #define BYTE_ORDER BIG_ENDIAN #endif #define SWAPINT32(y) y = \ ((((y)&0xff)<<24) | (((y)&0xff00)<<8) | (((y)&0xff0000)>>8) | (((y)>>24)&0xff)); #define SWAPINT16(y) y = \ ( (((y)&0xff)<<8) | (((y)&0xff00)>>8) ); /* a 64 bit quantity */ #define u_int64 unsigned long long #define int64 long long /* a 32 bit quantity */ #define u_int32 unsigned int #define int32 int /* a 16 bit quantity */ #define u_int16 unsigned short #define int16 short /* a 8 bit quantity */ #define u_int8 unsigned char #define int8 char #define u_int unsigned int #define u_long unsigned long #define u_short unsigned short #include "ftqueue.h" #include "ftpaths.h" #include "radix.h" /* * compatability */ struct mymsghdr { void *msg_name; /* optional address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* # elements in msg_iov */ void *msg_control; /* ancillary data, see below */ int msg_controllen; /* ancillary data buffer len */ int msg_flags; /* flags on received message */ }; /* * misc */ #define FT_OPT_PERCENT 0x1 #define FT_OPT_NAMES 0x2 #define FT_OPT_NOBUF 0x4 #define FT_OPT_TALLY 0x8 #define FT_OPT_WIDE 0x10 /* * stream header flags and options */ #define FT_HEADER_LITTLE_ENDIAN 1 /* stream data is little endian */ #define FT_HEADER_BIG_ENDIAN 2 /* stream data is big endian */ #define FT_HEADER_FLAG_DONE 0x1 /* complete, safe to read */ #define FT_HEADER_FLAG_COMPRESS 0x2 /* compression enabled */ #define FT_HEADER_FLAG_MULT_PDU 0x4 /* multiple PDU's XXX not used */ #define FT_HEADER_FLAG_STREAMING 0x8 /* stream ie flow-cat */ #define FT_HEADER_FLAG_XLATE 0x10 /* stream translated from old fmt */ #define FT_HEADER_FLAG_PRELOADED 0x20 /* streaming & preloaded header */ #define FT_HEADER_D_VERSION_UNKNOWN 0xFFFF /* unknown export format */ #define FT_HEADER_MAGIC1 0xCF /* magic number of stream */ #define FT_HEADER_MAGIC2 0x10 #define FT_HEADER1_CMNT_LEN 256 /* length of comment buffer */ #define FT_HEADER1_HN_LEN 68 /* length of hostname buffer */ #define FT_HOSTNAME_LEN 256 /* stream flags */ #define FT_IO_FLAG_ZINIT 0x1 /* compression initialized */ #define FT_IO_FLAG_NO_SWAP 0x2 /* do not swap on write */ #define FT_IO_FLAG_READ 0x4 /* stream is open for reading */ #define FT_IO_FLAG_WRITE 0x8 /* stream is open for writing */ #define FT_IO_FLAG_HEADER_DONE 0x10 /* header written */ #define FT_IO_FLAG_MMAP 0x20 /* use mmap() for reading */ #define FT_PDU_V1_MAXFLOWS 24 /* max records in V1 packet */ #define FT_PDU_V5_MAXFLOWS 30 /* max records in V5 packet */ #define FT_PDU_V6_MAXFLOWS 27 /* max records in V6 packet */ #define FT_PDU_V7_MAXFLOWS 27 /* max records in V7 packet */ #define FT_PDU_V8_1_MAXFLOWS 51 /* max records in V8 AS packet */ #define FT_PDU_V8_2_MAXFLOWS 51 /* max records in V8 PROTO PORT packet */ #define FT_PDU_V8_3_MAXFLOWS 44 /* max records in V8 SRC PREFIX packet */ #define FT_PDU_V8_4_MAXFLOWS 44 /* max records in V8 DST PREFIX packet */ #define FT_PDU_V8_5_MAXFLOWS 35 /* max records in V8 PREFIX packet */ #define FT_PDU_V8_6_MAXFLOWS 44 /* max records in V8 DESTONLY packet */ #define FT_PDU_V8_7_MAXFLOWS 35 /* max records in V8 SRC_DEST packet */ #define FT_PDU_V8_8_MAXFLOWS 32 /* max records in V8 FULL_FLOW packet */ #define FT_PDU_V8_9_MAXFLOWS 44 /* max records in V8 AS_TOS packet */ #define FT_PDU_V8_10_MAXFLOWS 44 /* max records in V8 PROT_PORT_TOS packet */ #define FT_PDU_V8_11_MAXFLOWS 44 /* max records in V8 SRC_PREFIX_TOS packet */ #define FT_PDU_V8_12_MAXFLOWS 44 /* max records in V8 DST_PREFIX_TOS packet */ #define FT_PDU_V8_13_MAXFLOWS 35 /* max records in V8 PREFIX_TOS packet */ #define FT_PDU_V8_14_MAXFLOWS 35 /* max records in V8 PREFIX_PORT_TOS packet */ #define FT_PDU_V8_1_VERSION 2 /* version of AS packet */ #define FT_PDU_V8_2_VERSION 2 /* version of PROTO PORT packet */ #define FT_PDU_V8_3_VERSION 2 /* version of SRC PREFIX packet */ #define FT_PDU_V8_4_VERSION 2 /* version of DST PREFIX packet */ #define FT_PDU_V8_5_VERSION 2 /* version of PREFIX packet */ #define FT_PDU_V8_6_VERSION 2 /* version of DESTONLY packet */ #define FT_PDU_V8_7_VERSION 2 /* version of SRC_DEST packet */ #define FT_PDU_V8_8_VERSION 2 /* version of FULL_FLOW packet */ #define FT_PDU_V8_9_VERSION 2 /* version of AS_TOS packet */ #define FT_PDU_V8_10_VERSION 2 /* version of PROT_PORT_TOS packet */ #define FT_PDU_V8_11_VERSION 2 /* version of SRC_PREFIX_TOS packet */ #define FT_PDU_V8_12_VERSION 2 /* version of DST_PREFIX_TOS packet */ #define FT_PDU_V8_13_VERSION 2 /* version of PREFIX_TOS packet */ #define FT_PDU_V8_14_VERSION 2 /* version of PREFIX_PORT_TOS packet */ #define FT_PORT 9991 /* default listen port */ #define FT_IO_NBUFS 256 /* buffers to read/write */ #define FT_Z_BUFSIZE 16384 /* inflate/deflate buffer size */ #define FT_D_BUFSIZE 32768 /* stream data buffer size */ #define FT_RCV_BUFSIZE 2048 /* enough to handle largest export */ #define FT_SO_SND_BUFSIZE 1500 /* UDP send socket buffer size */ #define FT_SO_RCV_BUFSIZE (4*1024*1024) /* UDP recv socket buffer size */ #define FT_IO_SVERSION 3 /* stream version */ #define FT_IO_MAXREC 512 /* >= max size of a flow record fts3_* */ #define FT_IO_MAXDECODE 4096 /* must be >= max possible size a pdu * could expand into stream records. For * example 27 v7 streams at 60 bytes * is 1620 bytes */ #define FT_IO_MAXENCODE 4096 /* must be >= max possible size a pdu * could be. really * MAX(sizeof(ftpdu_*)) + size of * ip+udp header (20+8) */ #define FT_IO_MAXHEADER 16384 /* max size of header */ #define FT_SEQ_RESET 1000 /* maximum number of sequence numbers * that will be counted as lost before * assuming reset. */ #define FT_ENC_FLAGS_IPHDR 0x1 /* leave room for IP header */ #define FT_ENC_IPHDR_LEN 28 /* IP + UDP header length */ #define FT_FILE_SORT 0x1 /* sort entries */ #define FT_FILE_INIT 0x2 /* initialize */ #define FT_FILE_SKIPTMP 0x4 /* skip tmp files */ #define FT_FILE_CHECKNAMES 0x8 /* check filenames for sanity */ #define FT_LP_MAXLINE 1024 /* maximum length of line */ /* TLV_ - stream value * DEC_ - bit in internal header to indicate successful decode */ #define FT_TLV_NULL 0x0 /* 0 : null */ #define FT_TLV_VENDOR 0x1 /* u_int8 : vendor (1=cisco) */ #define FT_FIELD_VENDOR 0x00000001L #define FT_TLV_EX_VER 0x2 /* u_int16 : export version */ #define FT_FIELD_EX_VER 0x00000002L #define FT_TLV_AGG_VER 0x3 /* u_int8 : aggregation version */ #define FT_FIELD_AGG_VER 0x00000004L #define FT_TLV_AGG_METHOD 0x4 /* u_int8 : aggregation method */ #define FT_FIELD_AGG_METHOD 0x00000008L #define FT_TLV_EXPORTER_IP 0x5 /* u_int32 : IP of exporter */ #define FT_FIELD_EXPORTER_IP 0x00000010L #define FT_TLV_CAP_START 0x6 /* u_int32 : capture start time */ #define FT_FIELD_CAP_START 0x00000020L #define FT_TLV_CAP_END 0x7 /* u_int32 : capture end time */ #define FT_FIELD_CAP_END 0x00000040L #define FT_TLV_HEADER_FLAGS 0x8 /* u_int32 : FT_HEADER_FLAG_* */ #define FT_FIELD_HEADER_FLAGS 0x00000080L #define FT_TLV_ROT_SCHEDULE 0x9 /* u_int32 : rotation schedule */ #define FT_FIELD_ROT_SCHEDULE 0x00000100L #define FT_TLV_FLOW_COUNT 0xA /* u_int32 : num flows */ #define FT_FIELD_FLOW_COUNT 0x00000200L #define FT_TLV_FLOW_LOST 0xB /* u_int32 : lost flows */ #define FT_FIELD_FLOW_LOST 0x00000400L #define FT_TLV_FLOW_MISORDERED 0xC /* u_int32 : misordered flows */ #define FT_FIELD_FLOW_MISORDERED 0x00000800L #define FT_TLV_PKT_CORRUPT 0xD /* u_int32 : corrupt packets */ #define FT_FIELD_PKT_CORRUPT 0x00001000L #define FT_TLV_SEQ_RESET 0xE /* u_int32 : times sequence # was so * far off lost/misordered * state could not be * determined */ #define FT_FIELD_SEQ_RESET 0x00002000L #define FT_TLV_CAP_HOSTNAME 0xF /* string : hostname of capture dev */ #define FT_FIELD_CAP_HOSTNAME 0x00004000L #define FT_TLV_COMMENTS 0x10 /* string : comments */ #define FT_FIELD_COMMENTS 0x00008000L #define FT_TLV_IF_NAME 0x11 /* u_int32 u_int16 string * IP address of device * ifIndex of interface * interface name */ #define FT_FIELD_IF_NAME 0x00010000L #define FT_TLV_IF_ALIAS 0x12 /* u_int32 u_int16 u_int16 string * IP address of device * ifIndex count * ifIndex of interface (count times) * alias name */ #define FT_FIELD_IF_ALIAS 0x00020000L #define FT_TLV_INTERRUPT 0x13 /* u_int8 : interrupt processing * code for interrupt (0) */ #define FT_FIELD_INTERRUPT 0x00040000L #define FT_VENDOR_CISCO 0x1 /* Cisco exporter */ #define FT_CHASH_SORTED 0x1 #define FT_CHASH_SORT_ASCENDING 0x2 #define FT_CHASH_SORT_16 0x4 #define FT_CHASH_SORT_32 0x8 #define FT_CHASH_SORT_40 0x10 #define FT_CHASH_SORT_64 0x20 #define FT_CHASH_SORT_DOUBLE 0x40 #define FT_CHASH_SORT_8 0x80 /* possible fields in export */ #define FT_XFIELD_UNIX_SECS 0x0000000000000001LL #define FT_XFIELD_UNIX_NSECS 0x0000000000000002LL #define FT_XFIELD_SYSUPTIME 0x0000000000000004LL #define FT_XFIELD_EXADDR 0x0000000000000008LL #define FT_XFIELD_DFLOWS 0x0000000000000010LL #define FT_XFIELD_DPKTS 0x0000000000000020LL #define FT_XFIELD_DOCTETS 0x0000000000000040LL #define FT_XFIELD_FIRST 0x0000000000000080LL #define FT_XFIELD_LAST 0x0000000000000100LL #define FT_XFIELD_ENGINE_TYPE 0x0000000000000200LL #define FT_XFIELD_ENGINE_ID 0x0000000000000400LL #define FT_XFIELD_SRCADDR 0x0000000000001000LL #define FT_XFIELD_DSTADDR 0x0000000000002000LL #define FT_XFIELD_NEXTHOP 0x0000000000010000LL #define FT_XFIELD_INPUT 0x0000000000020000LL #define FT_XFIELD_OUTPUT 0x0000000000040000LL #define FT_XFIELD_SRCPORT 0x0000000000080000LL #define FT_XFIELD_DSTPORT 0x0000000000100000LL #define FT_XFIELD_PROT 0x0000000000200000LL #define FT_XFIELD_TOS 0x0000000000400000LL #define FT_XFIELD_TCP_FLAGS 0x0000000000800000LL #define FT_XFIELD_SRC_MASK 0x0000000001000000LL #define FT_XFIELD_DST_MASK 0x0000000002000000LL #define FT_XFIELD_SRC_AS 0x0000000004000000LL #define FT_XFIELD_DST_AS 0x0000000008000000LL #define FT_XFIELD_IN_ENCAPS 0x0000000010000000LL #define FT_XFIELD_OUT_ENCAPS 0x0000000020000000LL #define FT_XFIELD_PEER_NEXTHOP 0x0000000040000000LL #define FT_XFIELD_ROUTER_SC 0x0000000080000000LL #define FT_XFIELD_EXTRA_PKTS 0x0000000100000000LL #define FT_XFIELD_MARKED_TOS 0x0000000200000000LL #define FT_XFIELD_SRC_TAG 0x0000000400000000LL #define FT_XFIELD_DST_TAG 0x0000000800000000LL #define FT_XFIELD_V1_MASK 0x0000000000FF31EFLL #define FT_XFIELD_V5_MASK 0x000000000FFF37EFLL #define FT_XFIELD_V6_MASK 0x000000007FFF37EFLL #define FT_XFIELD_V7_MASK 0x000000008FFF37EFLL #define FT_XFIELD_V8_1_MASK 0x000000000C0607FFLL #define FT_XFIELD_V8_2_MASK 0x00000000003807FFLL #define FT_XFIELD_V8_3_MASK 0x00000000050217FFLL #define FT_XFIELD_V8_4_MASK 0x000000000A0427FFLL #define FT_XFIELD_V8_5_MASK 0x000000000F0637FFLL #define FT_XFIELD_V8_6_MASK 0x00000003804427EFLL #define FT_XFIELD_V8_7_MASK 0x00000003804637EFLL #define FT_XFIELD_V8_8_MASK 0x00000003807E37EFLL #define FT_XFIELD_V8_9_MASK 0x000000000C4607FFLL #define FT_XFIELD_V8_10_MASK 0x00000000007807FFLL #define FT_XFIELD_V8_11_MASK 0x00000000054217FFLL #define FT_XFIELD_V8_12_MASK 0x000000000A4427FFLL #define FT_XFIELD_V8_13_MASK 0x000000000F4637FFLL #define FT_XFIELD_V8_14_MASK 0x00000000037E37FFLL #define FT_XFIELD_V1005_MASK 0x0000000C0FFF37EFLL #define FT_XFIELD_TAGGING_MASK 0x000000000FFF37EFLL #define FT_XFIELD_ASC_UNIX_SECS "unix_secs" #define FT_XFIELD_ASC_UNIX_NSECS "unix_nsecs" #define FT_XFIELD_ASC_SYSUPTIME "sysuptime" #define FT_XFIELD_ASC_EXADDR "exaddr" #define FT_XFIELD_ASC_DFLOWS "dflows" #define FT_XFIELD_ASC_DPKTS "dpkts" #define FT_XFIELD_ASC_DOCTETS "doctets" #define FT_XFIELD_ASC_FIRST "first" #define FT_XFIELD_ASC_LAST "last" #define FT_XFIELD_ASC_ENGINE_TYPE "engine_type" #define FT_XFIELD_ASC_ENGINE_ID "engine_id" #define FT_XFIELD_ASC_SRCADDR "srcaddr" #define FT_XFIELD_ASC_DSTADDR "dstaddr" #define FT_XFIELD_ASC_NEXTHOP "nexthop" #define FT_XFIELD_ASC_INPUT "input" #define FT_XFIELD_ASC_OUTPUT "output" #define FT_XFIELD_ASC_SRCPORT "srcport" #define FT_XFIELD_ASC_DSTPORT "dstport" #define FT_XFIELD_ASC_PROT "prot" #define FT_XFIELD_ASC_TOS "tos" #define FT_XFIELD_ASC_TCP_FLAGS "tcp_flags" #define FT_XFIELD_ASC_SRC_MASK "src_mask" #define FT_XFIELD_ASC_DST_MASK "dst_mask" #define FT_XFIELD_ASC_SRC_AS "src_as" #define FT_XFIELD_ASC_DST_AS "dst_as" #define FT_XFIELD_ASC_IN_ENCAPS "in_encaps" #define FT_XFIELD_ASC_OUT_ENCAPS "out_encaps" #define FT_XFIELD_ASC_PEER_NEXTHOP "peer_nexthop" #define FT_XFIELD_ASC_ROUTER_SC "router_sc" #define FT_XFIELD_ASC_MARKED_TOS "marked_tos" #define FT_XFIELD_ASC_EXTRA_PKTS "extra_pkts" #define FT_XFIELD_ASC_SRC_TAG "src_tag" #define FT_XFIELD_ASC_DST_TAG "dst_tag" struct ftipmask { u_int32 src_mask; u_int32 dst_mask; u_int32 mcast_mask; u_int32 mcast_val; }; struct fttlv { u_int16 t, l; /* type, length */ char *v; /* value */ }; struct ftprof { struct timeval t0; /* start time */ struct timeval t1; /* end time */ struct rusage r0; /* system resources used */ u_int64 nflows; /* total # of flows processed */ }; struct ftset { int byte_order; int z_level; char *hostname; char *comments; char hnbuf[FT_HOSTNAME_LEN]; u_int16 as_sub; }; struct fttime { u_int32 secs; u_int32 msecs; }; struct ftver { u_int8 s_version; u_int8 agg_version; u_int8 agg_method; u_int8 set; u_int16 d_version; }; struct ftdecode { char buf[FT_IO_MAXDECODE]; /* buffer PDU decoded into - num records */ int count; /* number of stream records */ int rec_size; /* size of stream record */ int byte_order; /* byte order to decode to */ u_int32 exporter_ip; /* ip address of exporter */ u_int16 as_sub; /* replace AS0 with this */ }; struct ftencode { char buf[FT_IO_MAXENCODE]; /* buffer stream encodes into */ char *buf_enc; /* actual encode buffer, will not be &buf if FT_ENC_FLAGS_IPHDR is set */ int buf_size; /* bytes used in buf_enc */ struct ftver ver; /* version of stream encoding */ u_int32 seq_next[65536]; /* sequence number for each engine_type & id */ int flags; /* FT_ENC_FLAGS */ int d_sum; /* data checksum for buf_enc */ }; struct ftpdu { char buf[FT_RCV_BUFSIZE]; /* raw packet */ int bused; /* length of buf used */ struct ftver ftv; /* version of PDU */ struct ftdecode ftd; /* decoded records */ int (*decodef) /* decode function */ (struct ftpdu *ftpdu); }; struct ftseq { u_int32 seq[65536]; /* sequence number for each engine_type & id */ u_int8 seq_set[65536]; /* initial sequence number received? */ u_int32 seq_rcv, seq_exp, seq_lost; /* sequence # received / expecting / lost */ }; struct ftheader_gen { u_int8 magic1; /* 0xCF */ u_int8 magic2; /* 0x10 (cisco flow) */ u_int8 byte_order; /* 1 for little endian (VAX) */ /* 2 for big endian (Motorolla) */ u_int8 s_version; /* flow stream format version 1 or 3 */ }; struct ftnet { struct sockaddr_in loc_addr; /* local side */ struct sockaddr_in rem_addr; /* remote side (exporter) */ u_int32 loc_ip; /* local IP */ u_int32 rem_ip; /* remote IP */ u_int16 dst_port; /* exporter UDP destination port */ int fd; /* fd receiving flows on */ struct mymsghdr msg; /* recvmsg data */ struct { struct cmsghdr hdr; #ifdef IP_RECVDSTADDR struct in_addr ip; #else #ifdef IP_PKTINFO struct in_pktinfo pktinfo; #endif /* else */ #endif /* IP RECVDSTADDR */ } msgip; struct iovec iov[1]; /* msg buffer */ }; struct ftmap_ifalias { u_int32 ip; u_int16 entries; u_int16 *ifIndex_list; char *name; FT_LIST_ENTRY (ftmap_ifalias) chain; }; struct ftmap_ifname { u_int32 ip; u_int16 ifIndex; char *name; FT_LIST_ENTRY (ftmap_ifname) chain; }; struct ftmap { FT_LIST_HEAD(ftmap_ifaliash, ftmap_ifalias) ifalias; FT_LIST_HEAD(ftmap_ifnameh, ftmap_ifname) ifname; }; #define FT_TAG_TYPE_MATCH_SRC_AS 0x1 #define FT_TAG_TYPE_MATCH_DST_AS 0x2 #define FT_TAG_TYPE_MATCH_AS 0x3 #define FT_TAG_TYPE_MATCH_TOS 0x4 #define FT_TAG_TYPE_MATCH_NEXTHOP 0x8 #define FT_TAG_TYPE_MATCH_SRC_PREFIX 0x10 #define FT_TAG_TYPE_MATCH_DST_PREFIX 0x20 #define FT_TAG_TYPE_MATCH_PREFIX 0x30 #define FT_TAG_TYPE_MATCH_ANY 0x40 #define FT_TAG_TYPE_MATCH_EXPORTER 0x80 #define FT_TAG_TYPE_MATCH_SRC_TCP_PORT 0x100 #define FT_TAG_TYPE_MATCH_DST_TCP_PORT 0x200 #define FT_TAG_TYPE_MATCH_TCP_PORT 0x300 #define FT_TAG_TYPE_MATCH_SRC_IP 0x400 #define FT_TAG_TYPE_MATCH_DST_IP 0x800 #define FT_TAG_TYPE_MATCH_IP 0xC00 #define FT_TAG_TYPE_MATCH_SRC_UDP_PORT 0x1000 #define FT_TAG_TYPE_MATCH_DST_UDP_PORT 0x2000 #define FT_TAG_TYPE_MATCH_UDP_PORT 0x3000 #define FT_TAG_TYPE_MATCH_IN_INTERFACE 0x4000 #define FT_TAG_TYPE_MATCH_OUT_INTERFACE 0x8000 #define FT_TAG_TYPE_MATCH_INTERFACE 0xC000 #define FT_TAG_DEF_FILTER_EXPORTER 0x1 #define FT_TAG_DEF_FILTER_INPUT 0x2 #define FT_TAG_DEF_FILTER_OUTPUT 0x4 #define FT_TAG_DEF_ACTIVE_DEFAULT 0x8 /* default_defs list is not empty */ #define FT_TAG_DEF_ACTIVE_HASH 0x10 /* exp_hash is not empty */ #define FT_TAG_SET_DST_TAG 0x001 #define FT_TAG_SET_SRC_TAG 0x002 #define FT_TAG_SET_TAG 0x003 #define FT_TAG_OR_DST_TAG 0x004 #define FT_TAG_OR_SRC_TAG 0x008 #define FT_TAG_OR_TAG 0x00C struct fttag { FT_SLIST_HEAD(defshead, fttag_def) defs; /* list of definitions */ FT_SLIST_HEAD(acthead, fttag_action) actions; /* list of actions */ int flags; }; struct fttag_prefix_look { struct radix_node rt_nodes[2]; /* radix tree glue */ struct radix_sockaddr_in addr; u_int8 masklen; u_int16 set_flags; u_int32 src_tag; u_int32 dst_tag; }; struct fttag_as_look { u_int16 set_flags_lookup[65536]; u_int32 src_tag_lookup[65536]; u_int32 dst_tag_lookup[65536]; }; struct fttag_port_look { u_int16 set_flags_lookup[65536]; u_int32 src_tag_lookup[65536]; u_int32 dst_tag_lookup[65536]; }; struct fttag_tos_look { u_int16 set_flags_lookup[256]; u_int32 src_tag_lookup[256]; u_int32 dst_tag_lookup[256]; }; struct fttag_interface_look { u_int16 set_flags_lookup[65536]; u_int32 src_tag_lookup[65536]; u_int32 dst_tag_lookup[65536]; }; struct fttag_any_look { u_int16 set_flags; u_int32 src_tag; u_int32 dst_tag; }; struct fttag_next_hop_look { FT_SLIST_ENTRY(fttag_next_hop_look) chain; u_int32 addr; /* key */ u_int16 set_flags; u_int32 src_tag; u_int32 dst_tag; }; struct fttag_exporter_look { FT_SLIST_ENTRY(fttag_exporter_look) chain; u_int32 addr; /* key */ u_int16 set_flags; u_int32 src_tag; u_int32 dst_tag; }; struct fttag_ip_look { FT_SLIST_ENTRY(fttag_ip_look) chain; u_int32 addr; /* key */ u_int16 set_flags; u_int32 src_tag; u_int32 dst_tag; }; struct ftxfield_table { char *name; u_int64 val; }; /* internal representation of header */ struct ftiheader { u_int32 size; /* size of header written */ u_int32 fields; /* decoded fields - FT_FIELD_* */ u_int8 magic1; /* 0xCF */ u_int8 magic2; /* 0xL0 (cisco flow) */ u_int8 byte_order; /* 1 for little endian (VAX) */ /* 2 for big endian (Motorolla) */ u_int8 s_version; /* flow stream format version 1 or 2 */ u_int16 d_version; /* 1 or 5 - stream version 1 */ /* 1,5,7,8 - stream version 2 */ u_int8 agg_version; /* v8 aggregation version */ u_int8 agg_method; /* v8 aggregation method */ u_int32 exporter_ip; /* IP address of exporter */ u_int32 cap_start; /* start time of flow capture */ u_int32 cap_end; /* end time of flow capture */ u_int32 flags; /* FT_HEADER_FLAG_* */ u_int32 rotation; /* rotation schedule */ u_int32 flows_count; /* # flows */ u_int32 flows_lost; /* # lost flows */ u_int32 flows_misordered; /* # misordered flows */ u_int32 pkts_corrupt; /* # corrupt packets */ u_int32 seq_reset; /* # times sequence # was so far off * lost/misordered state could not be * guessed */ u_int8 vendor; /* vendor ID FT_VENDOR */ u_int8 filler1; u_int16 filler2; char *cap_hostname; /* hostname of capture device */ char *comments; /* comments */ struct ftmap *ftmap; /* mappings */ u_int32 enc_len; /* length of encoded header */ }; struct fts1header { /* * following four 4 fields are not byte order dependent */ u_int8 magic1; /* 0xCF */ u_int8 magic2; /* 0xL0 (cisco flow) */ u_int8 byte_order; /* 1 for little endian (VAX) */ /* 2 for big endian (Motorolla) */ u_int8 s_version; /* flow stream format version 1 or 2 */ /* * byte order specified by byte_order */ u_int16 d_version; /* 1 or 5 - stream version 1 */ /* 1,5,7,8 - stream version 2 */ u_int32 start; /* start time of flow capture */ u_int32 end; /* end time of flow capture */ u_int32 flags; /* FT_HEADER_FLAG_* */ u_int32 rotation; /* rotation schedule */ u_int32 nflows; /* # of flows */ u_int32 pdu_drops; /* # of dropped pdu's detected */ u_int32 pdu_misordered; /* # of detected misordered packets */ char hostname[FT_HEADER1_HN_LEN]; /* 0 terminated name of capture device */ char comments[FT_HEADER1_CMNT_LEN]; /* 0 terminated ascii comments */ }; /* offsets to all possible entries in export structure */ struct fts3rec_offsets { struct ftver ftv; u_int64 xfields; u_int16 unix_secs; u_int16 unix_nsecs; u_int16 sysUpTime; u_int16 exaddr; u_int16 srcaddr; u_int16 dstaddr; u_int16 nexthop; u_int16 input; u_int16 output; u_int16 dFlows; u_int16 dPkts; u_int16 dOctets; u_int16 First; u_int16 Last; u_int16 srcport; u_int16 dstport; u_int16 prot; u_int16 tos; u_int16 tcp_flags; u_int16 pad; u_int16 engine_type; u_int16 engine_id; u_int16 src_mask; u_int16 dst_mask; u_int16 src_as; u_int16 dst_as; u_int16 in_encaps; u_int16 out_encaps; u_int16 peer_nexthop; u_int16 router_sc; u_int16 src_tag; u_int16 dst_tag; u_int16 extra_pkts; u_int16 marked_tos; }; /* "all" fields */ struct fts3rec_all { u_int32 *unix_secs; u_int32 *unix_nsecs; u_int32 *sysUpTime; u_int32 *exaddr; u_int32 *srcaddr; u_int32 *dstaddr; u_int32 *nexthop; u_int16 *input; u_int16 *output; u_int32 *dFlows; u_int32 *dPkts; u_int32 *dOctets; u_int32 *First; u_int32 *Last; u_int16 *srcport; u_int16 *dstport; u_int8 *prot; u_int8 *tos; u_int8 *tcp_flags; u_int8 *engine_type; u_int8 *engine_id; u_int8 *src_mask; u_int8 *dst_mask; u_int16 *src_as; u_int16 *dst_as; u_int8 *in_encaps; u_int8 *out_encaps; u_int32 *peer_nexthop; u_int32 *router_sc; u_int32 *src_tag; u_int32 *dst_tag; u_int32 *extra_pkts; u_int8 *marked_tos; }; /* "all" fields */ struct fts3rec_all2 { u_int64 dFlows64; u_int64 dPkts64; u_int64 dOctets64; u_int32 unix_secs; u_int32 unix_nsecs; u_int32 sysUpTime; u_int32 exaddr; u_int32 srcaddr; u_int32 dstaddr; u_int32 nexthop; u_int16 input; u_int16 output; u_int32 dFlows; u_int32 dPkts; u_int32 dOctets; u_int32 First; u_int32 Last; u_int16 srcport; u_int16 dstport; u_int8 prot; u_int8 tos; u_int8 tcp_flags; u_int8 engine_type; u_int8 engine_id; u_int8 src_mask; u_int8 dst_mask; u_int16 src_as; u_int16 dst_as; u_int8 in_encaps; u_int8 out_encaps; u_int32 peer_nexthop; u_int32 router_sc; u_int32 src_tag; u_int32 dst_tag; u_int32 extra_pkts; u_int8 marked_tos; }; #define FT_RECGET_UNIX_SECS(A,B,C) A.unix_secs =\ *((u_int32*)(B+(C).unix_secs)); #define FT_RECGET_UNIX_NSECS(A,B,C) A.unix_nsecs =\ *((u_int32*)(B+(C).unix_nsecs)); #define FT_RECGET_SYSUPTIME(A,B,C) A.sysUpTime =\ *((u_int32*)(B+(C).sysUpTime)); #define FT_RECGET_EXADDR(A,B,C) A.exaddr =\ *((u_int32*)(B+(C).exaddr)); #define FT_RECGET_DFLOWS(A,B,C) A.dFlows =\ *((u_int32*)(B+(C).dFlows)); #define FT_RECGET64_DFLOWS(A,B,C) A.dFlows64 =\ *((u_int32*)(B+(C).dFlows)); #define FT_RECGET_DPKTS(A,B,C) A.dPkts =\ *((u_int32*)(B+(C).dPkts)); #define FT_RECGET64_DPKTS(A,B,C) A.dPkts64 =\ *((u_int32*)(B+(C).dPkts)); #define FT_RECGET_DOCTETS(A,B,C) A.dOctets =\ *((u_int32*)(B+(C).dOctets)); #define FT_RECGET64_DOCTETS(A,B,C) A.dOctets64 =\ *((u_int32*)(B+(C).dOctets)); #define FT_RECGET_FIRST(A,B,C) A.First =\ *((u_int32*)(B+(C).First)); #define FT_RECGET_LAST(A,B,C) A.Last =\ *((u_int32*)(B+(C).Last)); #define FT_RECGET_ENGINE_TYPE(A,B,C) A.engine_type =\ *((u_int8*)(B+(C).engine_type)); #define FT_RECGET_ENGINE_ID(A,B,C) A.engine_id =\ *((u_int8*)(B+(C).engine_id)); #define FT_RECGET_SRCADDR(A,B,C) A.srcaddr =\ *((u_int32*)(B+(C).srcaddr)); #define FT_RECGET_DSTADDR(A,B,C) A.dstaddr =\ *((u_int32*)(B+(C).dstaddr)); #define FT_RECGET_NEXTHOP(A,B,C) A.nexthop =\ *((u_int32*)(B+(C).nexthop)); #define FT_RECGET_INPUT(A,B,C) A.input =\ *((u_int16*)(B+(C).input)); #define FT_RECGET_OUTPUT(A,B,C) A.output =\ *((u_int16*)(B+(C).output)); #define FT_RECGET_SRCPORT(A,B,C) A.srcport =\ *((u_int16*)(B+(C).srcport)); #define FT_RECGET_DSTPORT(A,B,C) A.dstport =\ *((u_int16*)(B+(C).dstport)); #define FT_RECGET_PROT(A,B,C) A.prot =\ *((u_int8*)(B+(C).prot)); #define FT_RECGET_TOS(A,B,C) A.tos =\ *((u_int8*)(B+(C).tos)); #define FT_RECGET_TCP_FLAGS(A,B,C) A.tcp_flags =\ *((u_int8*)(B+(C).tcp_flags)); #define FT_RECGET_SRC_MASK(A,B,C) A.src_mask =\ *((u_int8*)(B+(C).src_mask)); #define FT_RECGET_DST_MASK(A,B,C) A.dst_mask =\ *((u_int8*)(B+(C).dst_mask)); #define FT_RECGET_SRC_AS(A,B,C) A.src_as =\ *((u_int16*)(B+(C).src_as)); #define FT_RECGET_DST_AS(A,B,C) A.dst_as =\ *((u_int16*)(B+(C).dst_as)); #define FT_RECGET_IN_ENCAPS(A,B,C) A.in_encaps =\ *((u_int8*)(B+(C).in_encaps)); #define FT_RECGET_OUT_ENCAPS(A,B,C) A.out_encaps =\ *((u_int8*)(B+(C).out_encaps)); #define FT_RECGET_PEER_NEXTHOP(A,B,C) A.peer_nexthop =\ *((u_int32*)(B+(C).peer_nexthop)); #define FT_RECGET_EXTRA_PKTS(A,B,C) A.extra_pkts =\ *((u_int32*)(B+(C).extra_pkts)); #define FT_RECGET_MARKED_TOS(A,B,C) A.marked_tos =\ *((u_int8*)(B+(C).marked_tos)); #define FT_RECGET_SRC_TAG(A,B,C) A.src_tag =\ *((u_int32*)(B+(C).src_tag)); #define FT_RECGET_DST_TAG(A,B,C) A.dst_tag =\ *((u_int32*)(B+(C).dst_tag)); struct fts3rec_gen { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 pad; }; struct fts3rec_v5_gen { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 pad; u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 src_mask; /* mask length of source address */ u_int8 dst_mask; /* mask length of destination address */ u_int16 src_as; /* AS of source address */ u_int16 dst_as; /* AS of destination address */ }; struct fts3rec_v1 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 pad; u_int32 reserved; }; /* note the v5 struct is a subset of v6 and v7. v6 and v7 are assumed * to be in the same order so the engine_* src_mask, dst_mask, src_as and * dst_as are in the same place. v5 is like a generic v5, v6, v7 */ struct fts3rec_v5 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 pad; u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 src_mask; /* mask length of source address */ u_int8 dst_mask; /* mask length of destination address */ u_int16 src_as; /* AS of source address */ u_int16 dst_as; /* AS of destination address */ }; struct fts3rec_v6 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 pad; u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 src_mask; /* mask length of source address */ u_int8 dst_mask; /* mask length of destination address */ u_int16 src_as; /* AS of source address */ u_int16 dst_as; /* AS of destination address */ u_int8 in_encaps; /* size in bytes of the input encapsulation */ u_int8 out_encaps; /* size in bytes of the output encapsulation */ u_int16 pad2; u_int32 peer_nexthop; /* IP address of the next hop within the peer */ }; struct fts3rec_v7 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 flags; /* Reason flow discarded, etc */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 src_mask; /* mask length of source address */ u_int8 dst_mask; /* mask length of destination address */ u_int16 src_as; /* AS of source address */ u_int16 dst_as; /* AS of destination address */ u_int32 router_sc; /* ID of router shortcut by switch */ }; struct fts3rec_v8_1 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int16 input; /* input interface index */ u_int16 output; /* output interface index */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 pad; }; struct fts3rec_v8_2 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int8 prot; /* IP protocol */ u_int8 pad; u_int16 reserved; u_int16 srcport; /* TCP/UDP source port number of equivalent */ u_int16 dstport; /* TCP/UDP dst port number of equivalent */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 pad2; }; struct fts3rec_v8_3 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 exaddr; /* Exporter IP address */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 srcaddr; u_int8 src_mask; u_int8 pad; u_int16 src_as; u_int16 input; u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ }; struct fts3rec_v8_4 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dstaddr; u_int8 dst_mask; u_int8 pad; u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 dst_as; u_int16 output; }; struct fts3rec_v8_5 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 srcaddr; u_int32 dstaddr; u_int8 dst_mask; u_int8 src_mask; u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 src_as; u_int16 dst_as; u_int16 input; u_int16 output; }; struct fts3rec_v8_6 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dstaddr; /* destination IP address */ u_int32 extra_pkts; /* packets that exceed the contract */ u_int32 router_sc; /* IP address of the router being shortcut */ u_int16 output; /* output interface index */ u_int16 pad; u_int8 tos; /* tos */ u_int8 marked_tos; /* tos of pkts that exceeded the contract */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ }; struct fts3rec_v8_7 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dstaddr; /* destination IP address */ u_int32 srcaddr; /* source IP address */ u_int32 extra_pkts; /* packets that exceed the contract */ u_int32 router_sc; /* IP address of the router being shortcut */ u_int16 output; /* output interface index */ u_int16 input; /* input interface index */ u_int8 tos; /* tos */ u_int8 marked_tos; /* tos of pkts that exceeded the contract */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ }; struct fts3rec_v8_8 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dstaddr; /* destination IP address */ u_int32 srcaddr; /* source IP address */ u_int32 extra_pkts; /* packets that exceed the contract */ u_int32 router_sc; /* IP address of the router being shortcut */ u_int16 dstport; /* TCP/UDP destination port */ u_int16 srcport; /* TCP/UDP source port */ u_int16 output; /* output interface index */ u_int16 input; /* input interface index */ u_int8 tos; /* tos */ u_int8 marked_tos; /* tos of pkts that exceeded the contract */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 prot; /* IP protocol */ u_int8 pad1; u_int16 pad2; }; struct fts3rec_v8_9 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int16 input; /* input interface index */ u_int16 output; /* output interface index */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 tos; /* ToS */ u_int8 pad; }; struct fts3rec_v8_10 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number of equivalent */ u_int16 dstport; /* TCP/UDP dst port number of equivalent */ u_int16 input; /* input interface index */ u_int16 output; /* output interface index */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 prot; /* IP protocol */ u_int8 tos; /* ToS */ }; struct fts3rec_v8_11 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 exaddr; /* Exporter IP address */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 srcaddr; /* Source Prefix */ u_int8 src_mask; /* Source Prefix mask length */ u_int8 tos; /* ToS */ u_int16 src_as; /* Source AS */ u_int16 input; /* input interface index */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ }; struct fts3rec_v8_12 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 exaddr; /* Exporter IP address */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dstaddr; /* Destination Prefix */ u_int16 output; /* output interface index */ u_int16 dst_as; /* Destination AS */ u_int8 dst_mask; /* Destination Prefix mask length */ u_int8 tos; /* ToS */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ }; struct fts3rec_v8_13 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 srcaddr; /* Source Prefix */ u_int32 dstaddr; /* Destination Prefix */ u_int16 src_as; /* Source AS */ u_int16 dst_as; /* Destination AS */ u_int16 input; /* input interface */ u_int16 output; /* output interface */ u_int8 dst_mask; /* Destination Prefix mask length */ u_int8 src_mask; /* Source Prefix mask length */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 tos; /* ToS */ u_int8 pad1; u_int16 pad2; }; struct fts3rec_v8_14 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 srcaddr; /* Source Prefix */ u_int32 dstaddr; /* Destination Prefix */ u_int16 srcport; /* Source Port */ u_int16 dstport; /* Destination Port */ u_int16 input; /* input interface */ u_int16 output; /* output interface */ u_int8 dst_mask; /* Destination Prefix mask length */ u_int8 src_mask; /* Source Prefix mask length */ u_int8 engine_type;/* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 tos; /* ToS */ u_int8 prot; /* IP protocol */ u_int16 pad2; }; /* * internal formats */ /* tagged v5 */ struct fts3rec_v1005 { u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 exaddr; /* Exporter IP address */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 tcp_flags; /* OR of TCP header bits */ u_int8 pad; u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 src_mask; /* mask length of source address */ u_int8 dst_mask; /* mask length of destination address */ u_int16 src_as; /* AS of source address */ u_int16 dst_as; /* AS of destination address */ u_int32 src_tag; /* Local TAG for source address */ u_int32 dst_tag; /* Local TAG for destination address */ }; struct fts1rec_compat { u_int32 unix_secs; /* offset from real time the flow started */ u_int32 unix_msecs; /* "" */ u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int16 pad; u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 flags; /* Reason flow was discarded, etc... */ u_int8 tcp_retx_cnt; /* Number of mis-seq with delay > 1sec */ u_int8 tcp_retx_secs; /* Cumulative secs between mis-sequenced pkts */ u_int8 tcp_misseq_cnt; /* Number of mis-sequenced tcp pkts seen */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int8 src_mask; /* source address prefix mask bits */ u_int8 dst_mask; /* destination address prefix mask bits */ u_int16 drops; /* ?? */ }; struct ftio { caddr_t mr; /* mmap region */ size_t mr_size; /* size of mmap'd region */ int rec_size; /* size of stream record */ struct ftiheader fth; /* header */ char *d_buf; /* records */ u_long d_start; /* offset to next byte in d_buf */ u_long d_end; /* available bytes in d_buf */ char *z_buf; /* zlib inflate/deflate buffer */ int z_level; /* compression level */ z_stream zs; /* zlib io */ int flags; /* FT_IO_FLAG_* */ int fd; /* file description of stream */ u_int64 xfield; /* FT_XFIELD* available when reading */ void (*swapf)(struct ftio *ftio); /* swap function */ u_int64 rec_total; /* records read/written */ struct fts3rec_v1 compat_v1; /* backwards compatability */ struct fts3rec_v5 compat_v5; /* backwards compatability */ struct fts3rec_offsets fo; /* offsets to fields */ int debug; }; struct ftpdu_header_small { u_int16 version; /* 1 for now. */ u_int16 count; /* The number of records in the PDU */ }; struct ftpdu_header { /* common header for everything except v1 */ u_int16 version; /* 1 for now. */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ }; struct ftpdu_v1 { /* 16 byte header */ u_int16 version; /* 1 for now. */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ /* 48 byte payload */ struct ftrec_v1 { u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int16 pad; u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int8 flags; /* Reason flow was discarded, etc... */ u_int8 tcp_retx_cnt; /* Number of mis-seq with delay > 1sec */ u_int8 tcp_retx_secs; /* Cumulative secs between mis-sequenced pkts */ u_int8 tcp_misseq_cnt; /* Number of mis-sequenced tcp pkts seen */ u_int32 reserved; } records[FT_PDU_V1_MAXFLOWS]; }; struct ftpdu_v5 { /* 24 byte header */ u_int16 version; /* 5 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 reserved; /* 48 byte payload */ struct ftrec_v5 { u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 pad; u_int8 tcp_flags; /* Cumulative OR of tcp flags */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int8 src_mask; /* source address prefix mask bits */ u_int8 dst_mask; /* destination address prefix mask bits */ u_int16 drops; } records[FT_PDU_V5_MAXFLOWS]; }; struct ftpdu_v6 { /* 24 byte header */ u_int16 version; /* 6 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 reserved; /* 48 byte payload */ struct ftrec_v6 { u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 pad; u_int8 tcp_flags; /* Cumulative OR of tcp flags */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int8 src_mask; /* source address prefix mask bits */ u_int8 dst_mask; /* destination address prefix mask bits */ u_int8 in_encaps; /* size in bytes of the input encapsulation */ u_int8 out_encaps; /* size in bytes of the output encapsulation */ u_int32 peer_nexthop; /* IP address of the next hop within the peer */ } records[FT_PDU_V6_MAXFLOWS]; }; struct ftpdu_v7 { /* 24 byte header */ u_int16 version; /* 7 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int16 reserved; /* 48 byte payload */ struct ftrec_v7 { u_int32 srcaddr; /* Source IP Address */ u_int32 dstaddr; /* Destination IP Address */ u_int32 nexthop; /* Next hop router's IP Address */ u_int16 input; /* Input interface index */ u_int16 output; /* Output interface index */ u_int32 dPkts; /* Packets sent in Duration */ u_int32 dOctets; /* Octets sent in Duration. */ u_int32 First; /* SysUptime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 srcport; /* TCP/UDP source port number or equivalent */ u_int16 dstport; /* TCP/UDP destination port number or equiv */ u_int8 pad; u_int8 tcp_flags; /* Cumulative OR of tcp flags */ u_int8 prot; /* IP protocol, e.g., 6=TCP, 17=UDP, ... */ u_int8 tos; /* IP Type-of-Service */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int8 src_mask; /* source address prefix mask bits */ u_int8 dst_mask; /* destination address prefix mask bits */ u_int16 drops; u_int32 router_sc; /* Router which is shortcut by switch */ } records[FT_PDU_V7_MAXFLOWS]; }; /* Generic v8 pdu */ struct ftpdu_v8_gen { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; }; struct ftpdu_v8_1 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 28 byte payload */ struct ftrec_v8_1 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int16 input; /* input interface index */ u_int16 output; /* output interface index */ } records[FT_PDU_V8_1_MAXFLOWS]; }; struct ftpdu_v8_2 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 28 byte payload */ struct ftrec_v8_2 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int8 prot; /* IP protocol */ u_int8 pad; u_int16 reserved; u_int16 srcport; /* TCP/UDP source port number of equivalent */ u_int16 dstport; /* TCP/UDP dst port number of equivalent */ } records[FT_PDU_V8_2_MAXFLOWS]; }; struct ftpdu_v8_3 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_3 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 src_prefix; u_int8 src_mask; u_int8 pad; u_int16 src_as; u_int16 input; u_int16 reserved; } records[FT_PDU_V8_3_MAXFLOWS]; }; struct ftpdu_v8_4 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_4 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dst_prefix; u_int8 dst_mask; u_int8 pad; u_int16 dst_as; u_int16 output; u_int16 reserved; } records[FT_PDU_V8_4_MAXFLOWS]; }; struct ftpdu_v8_5 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 40 byte payload */ struct ftrec_v8_5 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 src_prefix; u_int32 dst_prefix; u_int8 dst_mask; u_int8 src_mask; u_int16 reserved; u_int16 src_as; u_int16 dst_as; u_int16 input; u_int16 output; } records[FT_PDU_V8_5_MAXFLOWS]; }; struct ftpdu_v8_6 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_6 { u_int32 dstaddr; /* destination IP address */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 output; /* output interface index */ u_int8 tos; /* tos */ u_int8 marked_tos; /* tos of pkts that exceeded the contract */ u_int32 extra_pkts; /* packets that exceed the contract */ u_int32 router_sc; /* IP address of the router being shortcut */ } records[FT_PDU_V8_6_MAXFLOWS]; }; struct ftpdu_v8_7 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 40 byte payload */ struct ftrec_v8_7 { u_int32 dstaddr; /* destination IP address */ u_int32 srcaddr; /* source address */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 output; /* output interface index */ u_int16 input; /* input interface index */ u_int8 tos; /* tos */ u_int8 marked_tos; /* tos of pkts that exceeded the contract */ u_int16 reserved; u_int32 extra_pkts; /* packets that exceed the contract */ u_int32 router_sc; /* IP address of the router being shortcut */ } records[FT_PDU_V8_7_MAXFLOWS]; }; struct ftpdu_v8_8 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 44 byte payload */ struct ftrec_v8_8 { u_int32 dstaddr; /* destination IP address */ u_int32 srcaddr; /* source IP address */ u_int16 dstport; /* TCP/UDP destination port */ u_int16 srcport; /* TCP/UDP source port */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 output; /* output interface index */ u_int16 input; /* input interface index */ u_int8 tos; /* tos */ u_int8 prot; /* protocol */ u_int8 marked_tos; /* tos of pkts that exceeded the contract */ u_int8 reserved; u_int32 extra_pkts; /* packets that exceed the contract */ u_int32 router_sc; /* IP address of the router being shortcut */ } records[FT_PDU_V8_8_MAXFLOWS]; }; struct ftpdu_v8_9 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_9 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int16 src_as; /* originating AS of source address */ u_int16 dst_as; /* originating AS of destination address */ u_int16 input; /* input interface index */ u_int16 output; /* output interface index */ u_int8 tos; /* tos */ u_int8 pad; u_int16 reserved; } records[FT_PDU_V8_9_MAXFLOWS]; }; struct ftpdu_v8_10 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_10 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int8 prot; /* IP protocol */ u_int8 tos; /* tos */ u_int16 reserved; u_int16 srcport; /* TCP/UDP source port number of equivalent */ u_int16 dstport; /* TCP/UDP dst port number of equivalent */ u_int16 input; /* input interface */ u_int16 output; /* output interface index */ } records[FT_PDU_V8_10_MAXFLOWS]; }; struct ftpdu_v8_11 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_11 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 src_prefix; /* Source Prefix */ u_int8 src_mask; /* Source Prefix mask length */ u_int8 tos; /* tos */ u_int16 src_as; /* Source AS */ u_int16 input; /* input interface */ u_int16 reserved; } records[FT_PDU_V8_11_MAXFLOWS]; }; struct ftpdu_v8_12 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 32 byte payload */ struct ftrec_v8_12 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 dst_prefix; /* Destination Prefix */ u_int8 dst_mask; /* Destination Prefix mask length */ u_int8 tos; /* tos */ u_int16 dst_as; /* Destination AS */ u_int16 output; /* output interface */ u_int16 reserved; } records[FT_PDU_V8_12_MAXFLOWS]; }; struct ftpdu_v8_13 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 40 byte payload */ struct ftrec_v8_13 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 src_prefix; /* Source Prefix */ u_int32 dst_prefix; /* Destination Prefix */ u_int8 dst_mask; /* Destination Prefix mask length */ u_int8 src_mask; /* Source Prefix mask length */ u_int8 tos; /* tos */ u_int8 pad; u_int16 src_as; /* Source AS */ u_int16 dst_as; /* Destination AS */ u_int16 input; /* input interface */ u_int16 output; /* output interface */ } records[FT_PDU_V8_13_MAXFLOWS]; }; struct ftpdu_v8_14 { /* 28 byte header */ u_int16 version; /* 8 */ u_int16 count; /* The number of records in the PDU */ u_int32 sysUpTime; /* Current time in millisecs since router booted */ u_int32 unix_secs; /* Current seconds since 0000 UTC 1970 */ u_int32 unix_nsecs; /* Residual nanoseconds since 0000 UTC 1970 */ u_int32 flow_sequence; /* Seq counter of total flows seen */ u_int8 engine_type; /* Type of flow switching engine (RP,VIP,etc.) */ u_int8 engine_id; /* Slot number of the flow switching engine */ u_int8 aggregation; /* Aggregation method being used */ u_int8 agg_version; /* Version of the aggregation export */ u_int32 reserved; /* 40 byte payload */ struct ftrec_v8_14 { u_int32 dFlows; /* Number of flows */ u_int32 dPkts; /* Packets sent in duration */ u_int32 dOctets; /* Octets sent in duration */ u_int32 First; /* SysUpTime at start of flow */ u_int32 Last; /* and of last packet of flow */ u_int32 src_prefix; /* Source Prefix */ u_int32 dst_prefix; /* Destination Prefix */ u_int8 dst_mask; /* Destination Prefix mask length */ u_int8 src_mask; /* Source Prefix mask length */ u_int8 tos; /* tos */ u_int8 prot; /* protocol */ u_int16 srcport; /* Source port */ u_int16 dstport; /* Destination port */ u_int16 input; /* input interface */ u_int16 output; /* output interface */ } records[FT_PDU_V8_14_MAXFLOWS]; }; enum ftfil_mode { FT_FIL_MODE_UNSET, FT_FIL_MODE_PERMIT, FT_FIL_MODE_DENY }; enum ftfil_primitive_type { FT_FIL_PRIMITIVE_TYPE_UNSET, FT_FIL_PRIMITIVE_TYPE_AS, FT_FIL_PRIMITIVE_TYPE_IP_PREFIX, FT_FIL_PRIMITIVE_TYPE_IP_ADDRESS, FT_FIL_PRIMITIVE_TYPE_IP_MASK, FT_FIL_PRIMITIVE_TYPE_IP_PROTOCOL, FT_FIL_PRIMITIVE_TYPE_IP_PORT, FT_FIL_PRIMITIVE_TYPE_IP_PREFIX_LEN, FT_FIL_PRIMITIVE_TYPE_IP_TOS, FT_FIL_PRIMITIVE_TYPE_IP_TCP_FLAGS, FT_FIL_PRIMITIVE_TYPE_IF_INDEX, FT_FIL_PRIMITIVE_TYPE_COUNTER, FT_FIL_PRIMITIVE_TYPE_TIME_DATE, FT_FIL_PRIMITIVE_TYPE_ENGINE, FT_FIL_PRIMITIVE_TYPE_TAG, FT_FIL_PRIMITIVE_TYPE_TAG_MASK, FT_FIL_PRIMITIVE_TYPE_TIME, FT_FIL_PRIMITIVE_TYPE_DOUBLE, FT_FIL_PRIMITIVE_TYPE_RATE, }; struct ftfil_match_item { FT_STAILQ_ENTRY(ftfil_match_item) chain; /* list (AND) */ void *lookup; /* data for evaluator */ int (*eval)(void *lookup, void *rec, struct fts3rec_offsets *fo); char *tmp_type; /* temporary pointer to FT_FIL_DEFINITION_MATCH_* word */ char *tmp_primitive; /* temporary pointer to primitive name */ }; struct ftfil_match { FT_STAILQ_ENTRY(ftfil_match) chain; /* list (OR) */ FT_STAILQ_HEAD(filmatihead, ftfil_match_item) items; /* list (AND) */ }; struct ftfil_def { FT_SLIST_ENTRY(ftfil_def) chain; /* list */ FT_STAILQ_HEAD(filmathead, ftfil_match) matches; char *name; /* name of the def */ u_int64 xfields; /* required flow fields - FT_XFIELD_* */ int invert; /* invert the PERMIT/DENY? */ }; struct ftfil_primitive { FT_SLIST_ENTRY(ftfil_primitive) chain; /* list */ enum ftfil_primitive_type type; /* FT_FIL_PRIMITIVE_TYPE_* */ char *name; /* name of the filter */ void *lookup; /* data associated with filter */ }; struct ftfil { FT_SLIST_HEAD(fildefshead, ftfil_def) defs; /* definitions */ FT_SLIST_HEAD(filprimhead, ftfil_primitive) primitives; /* primitives */ struct ftfil_def *active_def; }; struct ftmask_prefix_rec { struct radix_node rt_nodes[2]; /* radix tree glue */ struct radix_sockaddr_in addr; u_int8 new_mask; u_int8 masklen; }; struct ftmask_def { FT_SLIST_ENTRY(ftmask_def) chain; /* list */ struct radix_node_head *rhead; char *name; /* name of the def */ }; struct ftmask { FT_SLIST_HEAD(maskdefshead, ftmask_def) defs; /* definitions */ struct ftmask_def *active_def; }; int ftmask_load(struct ftmask *ftmask, char *fname); void ftmask_free(struct ftmask *ftmask); struct ftmask_def *ftmask_def_find(struct ftmask *ftmask, char *name); int ftmask_def_eval(struct ftmask_def *active_def, char *rec, struct fts3rec_offsets *fo); /* ftxlate */ struct ftxlate { FT_SLIST_HEAD(xdefshead, ftxlate_def) defs; /* list of definitions */ FT_SLIST_HEAD(xacthead, ftxlate_action) actions; /* list of actions */ struct ftfil ftfil; int ftfil_init; /* ftfil initialized? */ char *filter_fname; int flags; struct ftvar *ftvar; }; /* area of struct generic to v1, v5, v6, v7 formats */ struct ftfile_entry { char *name; off_t size; u_int32 start; int skip; /* skip this during processing */ FT_TAILQ_ENTRY(ftfile_entry) chain; }; struct ftfile_entries { FT_TAILQ_HEAD(talkqhead, ftfile_entry) head; u_int64 num_bytes; /* space used by all flow files except current */ u_int64 max_bytes; /* min space before removing files 0=disable */ u_int32 max_files; /* max num of files to keep before removing 0=disable */ u_int32 num_files; /* number of files in the queue */ int expiring; /* expiring in use? */ }; struct ftchash_chunk { void *base; /* base pointer */ u_int32 next; /* offset to next free record */ FT_SLIST_ENTRY(ftchash_chunk) chain; /* next */ }; struct ftchash { u_int h_size; /* hash_table_size */ u_int d_size; /* data entry size */ u_int key_size; /* size of key */ int chunk_size; /* chunk size (entries * d_size */ u_int64 entries; /* entries in hash table */ void *traverse_rec; /* record when traversing */ struct ftchash_chunk *traverse_chunk; /* chunk when traversing */ u_int64 traverse_srec; /* sorted rec when traversing */ struct ftchash_chunk *active_chunk; /* currently active chunk */ /* memory chunk list */ FT_SLIST_HEAD(ftchash_chunkh, ftchash_chunk) chunk_list; /* hash table buckets */ FT_SLIST_HEAD(ftchash_bhead, ftchash_rec_gen) *buckets; struct ftchash_rec_gen **sorted_recs; /* array of pointers to sorted records */ int sort_flags; /* sorted version available? */ }; struct ftchash_rec_gen { FT_SLIST_ENTRY(ftchash_rec_gen) chain; u_int32 data; }; struct ftchash_rec_prefixs { FT_SLIST_ENTRY(ftchash_rec_ips) chain; u_int32 prefix; u_int8 mask; /* mask */ u_int8 fil1; u_int16 fil2; }; struct ftchash_rec_tags { FT_SLIST_ENTRY(ftchash_rec_ips) chain; u_int32 tag; }; struct ftps { double avg_pps, avg_bps; /* packets/bytes per second */ double max_pps, max_bps; /* packets/bytes per second */ double min_pps, min_bps; /* packets/bytes per second */ }; struct ftchash_rec_prefixh { FT_SLIST_ENTRY(ftchash_rec_prefix) chain; u_int32 prefix; /* prefix */ u_int8 mask; /* mask */ u_int8 fil1; u_int16 fil2; u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ u_int64 nprefixes; /* number of prefixes seen */ struct ftchash *ftch; /* second list */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_c32 { FT_SLIST_ENTRY(ftchash_rec_c32) chain; u_int32 c32; /* 32 bit quantity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_c64 { FT_SLIST_ENTRY(ftchash_rec_c64) chain; u_int64 c64; /* 64 bit quantity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_c322 { FT_SLIST_ENTRY(ftchash_rec_c322) chain; u_int32 c32a; /* 32 bit quantity */ u_int32 c32b; /* 32 bit quantity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix16 { FT_SLIST_ENTRY(ftchash_rec_prefix16) chain; u_int32 prefix; /* 32 bit quantity */ u_int8 mask; /* 8 bit quantity */ u_int8 fill; /* 8 bit quantity */ u_int16 c16; /* 16 bit quantity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix162 { FT_SLIST_ENTRY(ftchash_rec_prefix16) chain; u_int32 prefix; /* 32 bit quantity */ u_int8 mask; /* 8 bit quantity */ u_int8 fill; /* 8 bit quantity */ u_int16 c16a; /* 16 bit quantity */ u_int16 c16b; /* 16 bit quantity */ u_int16 fill2; /* 16 bit quanity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix216 { FT_SLIST_ENTRY(ftchash_rec_prefix216) chain; u_int32 src_prefix; /* 32 bit quantity */ u_int8 src_mask; /* 8 bit quantity */ u_int8 fill; /* 8 bit quantity */ u_int16 c16; /* 16 bit quantity */ u_int32 dst_prefix; /* 32 bit quantity */ u_int8 dst_mask; /* 8 bit quantity */ u_int8 fill2; /* 8 bit quantity */ u_int16 fill3; /* 16 bit quantity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix2162 { FT_SLIST_ENTRY(ftchash_rec_prefix2162) chain; u_int32 src_prefix; /* 32 bit quantity */ u_int8 src_mask; /* 8 bit quantity */ u_int8 fill; /* 8 bit quantity */ u_int16 c16a; /* 16 bit quantity */ u_int32 dst_prefix; /* 32 bit quantity */ u_int8 dst_mask; /* 8 bit quantity */ u_int8 fill2; /* 8 bit quantity */ u_int16 c16b; /* 16 bit quantity */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_ip { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 addr; /* ip address */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_ip2 { FT_SLIST_ENTRY(ftchash_rec_ip2) chain; u_int32 src_addr; /* ip address */ u_int32 dst_addr; /* ip address */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_c162 { FT_SLIST_ENTRY(ftchash_rec_162) chain; u_int16 c16a; /* 16 bit quantity # */ u_int16 c16b; /* 16 bit quantity # */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_c163 { FT_SLIST_ENTRY(ftchash_rec_163) chain; u_int16 c16a; /* 16 bit quantity # */ u_int16 c16b; /* 16 bit quantity # */ u_int16 c16c; /* 16 bit quantity # */ u_int16 fill; /* 16 bit quantity # */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_c164 { FT_SLIST_ENTRY(ftchash_rec_164) chain; u_int16 c16a; /* 16 bit quantity # */ u_int16 c16b; /* 16 bit quantity # */ u_int16 c16c; /* 16 bit quantity # */ u_int16 c16d; /* 16 bit quantity # */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_as2 { FT_SLIST_ENTRY(ftchash_rec_as2) chain; u_int16 src_as; /* AS # */ u_int16 dst_as; /* AS # */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_if2 { FT_SLIST_ENTRY(ftchash_rec_if2) chain; u_int16 input; /* interface ifIndex */ u_int16 output; /* interface ifIndex */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 prefix; /* prefix */ u_int8 mask; /* mask */ u_int8 fil1; u_int16 fil2; u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix_tag { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 prefix; /* prefix */ u_int8 mask; /* mask */ u_int8 fil1; u_int16 fil2; u_int32 tag; /* tag */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix2 { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 src_prefix; /* prefix */ u_int8 src_mask; /* mask */ u_int8 fil1; u_int16 fil2; u_int32 dst_prefix; /* prefix */ u_int8 dst_mask; /* mask */ u_int8 fil3; u_int16 fil4; u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_prefix2tag2 { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 src_prefix; /* prefix */ u_int8 src_mask; /* mask */ u_int8 fil1; u_int16 fil2; u_int32 dst_prefix; /* prefix */ u_int8 dst_mask; /* mask */ u_int8 fil3; u_int16 fil4; u_int32 src_tag; /* source tag */ u_int32 dst_tag; /* destination tag */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_flow1 { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 src_prefix; /* prefix */ u_int8 src_mask; /* mask */ u_int8 prot; /* protocol */ u_int16 src_port; /* source port */ u_int32 dst_prefix; /* prefix */ u_int8 dst_mask; /* mask */ u_int8 tos; /* type of service */ u_int16 dst_port; /* destination port */ u_int64 nrecs; /* flow records */ u_int64 nflows; /* flows */ u_int64 noctets; /* octets */ u_int64 npackets; /* packets */ u_int64 etime; /* duration */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_int { FT_SLIST_ENTRY(ftchash_rec_int) chain; u_int32 time; /* unix seconds */ u_int64 nrecs; /* flow records */ double nflows; /* flows */ double noctets; /* octets */ double npackets; /* packets */ struct ftps ps; /* per second counters */ }; struct ftchash_rec_exp { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 src_ip; /* exporter src IP */ u_int32 dst_ip; /* exporter dst IP (us) */ u_int16 d_version; /* data version */ u_int16 dst_port; /* destination port (FUTURE) */ u_int32 packets; /* packets received from this exporter */ u_int32 flows; /* flows received from this exporter */ u_int32 filtered_flows; /* flows filtered and dropped from this exporter */ u_int32 lost; /* flows lost */ u_int32 reset; /* sequence number resets */ struct ftseq ftseq; /* sequence numbers for this exporter */ void (*xlate)(void *in_rec, void *out_rec); /* translation function */ }; struct ftchash_rec_sym { FT_SLIST_ENTRY(ftchash_rec_ip) chain; u_int32 val; /* string value */ char *str; /* string */ }; struct ftchash_rec_fil_c32 { FT_SLIST_ENTRY(ftchash_rec_fil_ip) chain; u_int32 c32; /* 32 bit quantity */ int mode; /* mode */ }; struct ftchash_rec_split { FT_SLIST_ENTRY(ftchash_rec_fil_ip) chain; u_int32 tag; /* key */ struct ftio ftio; int fd, id; u_int32 total_flows; u_int32 cap_start, cap_end; int newfile; }; struct ftsym { char *fbuf; /* file buffer */ struct ftchash *ftch; /* hash table for value field */ }; int ftio_init(struct ftio *ftio, int fd, int flag); int ftio_interrupt(struct ftio *ftio, u_int32 fields); void ftio_set_preloaded(struct ftio *ftio, int flag); void ftio_set_streaming(struct ftio *ftio, int flag); int ftio_set_ver(struct ftio *ftio, struct ftver *ver); void ftio_set_byte_order(struct ftio *ftio, int byte_order); void ftio_set_z_level(struct ftio *ftio, int z_level); void ftio_set_debug(struct ftio *ftio, int debug); int ftio_set_comment(struct ftio *ftio, char *comment); int ftio_set_cap_hostname(struct ftio *ftio, char *hostname); void ftio_set_cap_time(struct ftio *ftio, u_int32 start, u_int32 end); void ftio_set_cap_time_start(struct ftio *ftio, u_int32 start); void ftio_set_flows_count(struct ftio *ftio, u_int32 n); void ftio_set_corrupt(struct ftio *ftio, u_int32 n); void ftio_set_lost(struct ftio *ftio, u_int32 n); void ftio_set_reset(struct ftio *ftio, u_int32 n); void ftio_set_xip(struct ftio *ftio, u_int32 ip); void ftio_get_ver(struct ftio *ftio, struct ftver *ver); u_int32 ftio_get_cap_start(struct ftio *ftio); u_int32 ftio_get_cap_end(struct ftio *ftio); u_int64 ftio_get_rec_total(struct ftio *ftio); int ftio_get_debug(struct ftio *ftio); u_int32 ftio_get_corrupt(struct ftio *ftio); u_int32 ftio_get_lost(struct ftio *ftio); u_int32 ftio_get_flows_count(struct ftio *ftio); char *ftio_get_hostname(struct ftio *ftio); char *ftio_get_comment(struct ftio *ftio); int ftio_close(struct ftio *ftio); void *ftio_read(struct ftio *ftio); int ftio_write(struct ftio *ftio, void *data); int ftio_write_header(struct ftio *ftio); void *ftio_rec_swapfunc(struct ftio *ftio); int ftio_rec_size(struct ftio *ftio); void ftio_header_swap(struct ftio *ftio); void ftio_header_print(struct ftio *ftio, FILE *std, char cc); void ftio_zstat_print(struct ftio *ftio, FILE *std); int ftio_check_generic(struct ftio *ftio); int ftio_check_generic5(struct ftio *ftio); int ftio_check_xfield(struct ftio *ftio, u_int64 xfield_need); int ftio_map_load(struct ftio *ftio, char *fname, u_int32 ip); u_int64 ftio_xfield(struct ftio *ftio); int ftrec_size(struct ftver *ver); u_int64 ftrec_xfield(struct ftver *ver); void fts3rec_swap_v1(struct fts3rec_v1 *rec); void fts3rec_swap_v5(struct fts3rec_v5 *rec); void fts3rec_swap_v6(struct fts3rec_v6 *rec); void fts3rec_swap_v7(struct fts3rec_v7 *rec); void fts3rec_swap_v8_1(struct fts3rec_v8_1 *rec); void fts3rec_swap_v8_2(struct fts3rec_v8_2 *rec); void fts3rec_swap_v8_3(struct fts3rec_v8_3 *rec); void fts3rec_swap_v8_4(struct fts3rec_v8_4 *rec); void fts3rec_swap_v8_5(struct fts3rec_v8_5 *rec); void fts3rec_swap_v8_6(struct fts3rec_v8_6 *rec); void fts3rec_swap_v8_7(struct fts3rec_v8_7 *rec); void fts3rec_swap_v8_8(struct fts3rec_v8_8 *rec); void fts3rec_swap_v8_9(struct fts3rec_v8_9 *rec); void fts3rec_swap_v8_10(struct fts3rec_v8_10 *rec); void fts3rec_swap_v8_11(struct fts3rec_v8_11 *rec); void fts3rec_swap_v8_12(struct fts3rec_v8_12 *rec); void fts3rec_swap_v8_13(struct fts3rec_v8_13 *rec); void fts3rec_swap_v8_14(struct fts3rec_v8_14 *rec); void fts1rec_swap_compat(struct fts1rec_compat *rec); void fts3rec_swap_v1005(struct fts3rec_v1005 *rec); int fts3rec_pdu_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v1_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v5_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v6_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v7_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_1_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_2_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_3_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_4_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_5_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_6_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_7_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_8_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_9_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_10_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_11_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_12_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_13_decode(struct ftpdu *ftpdu); int fts3rec_pdu_v8_14_decode(struct ftpdu *ftpdu); int fts3rec_pdu_encode(struct ftencode *enc, void *rec); int fts3rec_pdu_v1_encode(struct ftencode *enc, struct fts3rec_v1 *rec_v1); int fts3rec_pdu_v5_encode(struct ftencode *enc, struct fts3rec_v5 *rec_v5); int fts3rec_pdu_v6_encode(struct ftencode *enc, struct fts3rec_v6 *rec_v6); int fts3rec_pdu_v7_encode(struct ftencode *enc, struct fts3rec_v7 *rec_v7); int fts3rec_pdu_v8_1_encode(struct ftencode *enc, struct fts3rec_v8_1 *rec_v8_1); int fts3rec_pdu_v8_2_encode(struct ftencode *enc, struct fts3rec_v8_2 *rec_v8_2); int fts3rec_pdu_v8_3_encode(struct ftencode *enc, struct fts3rec_v8_3 *rec_v8_3); int fts3rec_pdu_v8_4_encode(struct ftencode *enc, struct fts3rec_v8_4 *rec_v8_4); int fts3rec_pdu_v8_5_encode(struct ftencode *enc, struct fts3rec_v8_5 *rec_v8_5); int fts3rec_pdu_v8_6_encode(struct ftencode *enc, struct fts3rec_v8_6 *rec_v8_6); int fts3rec_pdu_v8_7_encode(struct ftencode *enc, struct fts3rec_v8_7 *rec_v8_7); int fts3rec_pdu_v8_8_encode(struct ftencode *enc, struct fts3rec_v8_8 *rec_v8_8); int fts3rec_pdu_v8_9_encode(struct ftencode *enc, struct fts3rec_v8_9 *rec_v8_9); int fts3rec_pdu_v8_10_encode(struct ftencode *enc, struct fts3rec_v8_10 *rec_v8_10); int fts3rec_pdu_v8_11_encode(struct ftencode *enc, struct fts3rec_v8_11 *rec_v8_11); int fts3rec_pdu_v8_12_encode(struct ftencode *enc, struct fts3rec_v8_12 *rec_v8_12); int fts3rec_pdu_v8_13_encode(struct ftencode *enc, struct fts3rec_v8_13 *rec_v8_13); int fts3rec_pdu_v8_14_encode(struct ftencode *enc, struct fts3rec_v8_14 *rec_v8_14); int ftprof_start(struct ftprof *ftp); int ftprof_end(struct ftprof *ftp, u_int64 nflows); int ftprof_print(struct ftprof *ftp, char *prog, FILE *std); int ftiheader_read(int fd, struct ftiheader *h); struct fttime ftltime(u_int32 sys, u_int32 secs, u_int32 nsecs, u_int32 t); void ftencode_init(struct ftencode *enc, int flags); void ftencode_reset(struct ftencode *enc); void ftencode_sum_data(struct ftencode *enc); void ftpdu_swap(void *pdu, int cur); void ftpdu_v1_swap(struct ftpdu_v1 *pdu, int cur); void ftpdu_v5_swap(struct ftpdu_v5 *pdu, int cur); void ftpdu_v6_swap(struct ftpdu_v6 *pdu, int cur); void ftpdu_v7_swap(struct ftpdu_v7 *pdu, int cur); void ftpdu_v8_1_swap(struct ftpdu_v8_1 *pdu, int cur); void ftpdu_v8_2_swap(struct ftpdu_v8_2 *pdu, int cur); void ftpdu_v8_3_swap(struct ftpdu_v8_3 *pdu, int cur); void ftpdu_v8_4_swap(struct ftpdu_v8_4 *pdu, int cur); void ftpdu_v8_5_swap(struct ftpdu_v8_5 *pdu, int cur); void ftpdu_v8_6_swap(struct ftpdu_v8_6 *pdu, int cur); void ftpdu_v8_7_swap(struct ftpdu_v8_7 *pdu, int cur); void ftpdu_v8_8_swap(struct ftpdu_v8_8 *pdu, int cur); void ftpdu_v8_9_swap(struct ftpdu_v8_9 *pdu, int cur); void ftpdu_v8_10_swap(struct ftpdu_v8_10 *pdu, int cur); void ftpdu_v8_11_swap(struct ftpdu_v8_11 *pdu, int cur); void ftpdu_v8_12_swap(struct ftpdu_v8_12 *pdu, int cur); void ftpdu_v8_13_swap(struct ftpdu_v8_13 *pdu, int cur); void ftpdu_v8_14_swap(struct ftpdu_v8_14 *pdu, int cur); int ftpdu_verify(struct ftpdu *pdu); int ftpdu_check_seq(struct ftpdu *pdu, struct ftseq *ftseq); int fttlv_enc_uint32(void *buf, int buf_size, int flip, u_int16 t, u_int32 v); int fttlv_enc_uint16(void *buf, int buf_size, int flip, u_int16 t, u_int16 v); int fttlv_enc_uint8(void *buf, int buf_size, int flip, u_int16 t, u_int8 v); int fttlv_enc_str(void *buf, int buf_size, int flip, u_int16 t, char *v); int fttlv_enc_ifname(void *buf, int buf_size, int flip, u_int16 t, u_int32 ip, u_int16 ifIndex, char *name); int fttlv_enc_ifalias(void *buf, int buf_size, int flip, u_int16 t, u_int32 ip, u_int16 *ifIndex_list, u_int16 entries, char *name); /* XXX -> support.c? */ int writen(register int fd, register void *ptr, register int nbytes); void ftfile_free(struct ftfile_entries *fte); int ftfile_loadfile(struct ftfile_entries *fte, char *fname, int sort); int ftfile_loaddir(struct ftfile_entries *fte, char *dir, int sort); int ftfile_add_tail(struct ftfile_entries *fte, char *fname, off_t size, u_int32 start); int ftfile_expire (struct ftfile_entries *fte, int doit, int curbytes); int ftfile_dump(struct ftfile_entries *fte); struct ftfile_entry *ftfile_entry_new(int len); void ftfile_entry_free(struct ftfile_entry *entry); int ftfile_mkpath(u_int32 ftime, int nest); void ftfile_pathname(char *buf, int bsize, int nest, struct ftver ftv, int done, u_int32 ftime); void ftset_init(struct ftset *ftset, int z_level); struct ftmap *ftmap_load(char *fname, u_int32 ip); void ftmap_free(struct ftmap *ftmap); struct ftmap *ftmap_new(void); struct ftmap_ifalias *ftmap_ifalias_new(u_int32 ip, u_int16 *ifIndex_list, u_int16 entries, char *name); struct ftmap_ifname *ftmap_ifname_new(u_int32 ip, u_int16 ifIndex, char *name); /* fterr */ void fterr_setid(char *id); void fterr_setfile(int enable, void *fp); void fterr_setsyslog(int enable, int logopt, int facility); void fterr_setexit(void (*f)(int)); void fterr_warn(const char *fmt, ...); void fterr_warnx(const char *fmt, ...); void fterr_err(int code, const char *fmt, ...); void fterr_errx(int code, const char *fmt, ...); void fterr_info(const char *fmt, ...); int ftrec_mask_ip(void *rec, struct ftver *ftv, struct ftipmask *m); void ftrec_compute_mask(struct ftipmask *m, u_int32 src, u_int32 dst, int byte_order); /* ftvar */ struct ftvar_entry { FT_SLIST_ENTRY(ftvar_entry) chain; /* list */ char *name, *val; }; struct ftvar { FT_SLIST_HEAD(ftvarhead, ftvar_entry) entries; /* variables */ }; /* ftchash_ */ struct ftchash *ftchash_new(int h_size, int d_size, int key_size, int chunk_entries); void *ftchash_lookup(struct ftchash *ftch, void *key, u_int32 hash); void ftchash_free(struct ftchash *ftch); void *ftchash_update(struct ftchash *ftch, void *newrec, u_int32 hash); void *ftchash_alloc_rec(struct ftchash *ftch); void *ftchash_foreach(struct ftchash *ftch); void ftchash_first(struct ftchash *ftch); int ftchash_sort(struct ftchash *ftch, int offset, int flags); void ftrec_xlate(void *in_rec, struct ftver *in_ftv, void *out_rec, struct ftver *out_ftv); void *ftrec_xlate_func(struct ftver *in_ftv, struct ftver *out_ftv); int fts3rec_compute_offsets(struct fts3rec_offsets *o, struct ftver *ftv); struct ftsym *ftsym_new(char *fname); void ftsym_free(struct ftsym *ftsym); int ftsym_findbyname(struct ftsym *ftsym, char *name, u_int32 *val); int ftsym_findbyval(struct ftsym *ftsym, u_int32 val, char **name); /* fttag */ int fttag_load(struct fttag *fttag, struct ftvar *ftvar, char *fname); void fttag_free(struct fttag *fttag); int fttag_def_eval(struct fttag_def *ftd, struct fts3rec_v1005 *rec_out); struct fttag_def *fttag_def_find(struct fttag *fttag, char *name); /* ftxlate */ int ftxlate_load(struct ftxlate *ftxlate, struct ftvar *ftvar, char *fname); void ftxlate_free(struct ftxlate *ftxlate); int ftxlate_def_eval(struct ftxlate_def *ftd, char *rec, struct fts3rec_offsets *fo); struct ftxlate_def *ftxlate_def_find(struct ftxlate *ftxlate, char *name); int ftxlate_def_test_xfields(struct ftxlate_def *active_def, u_int64 test); /* ftfil */ struct ftfil_def *ftfil_def_find(struct ftfil *ftfil, char *name); int ftfil_def_eval(struct ftfil_def *active_def, char *rec, struct fts3rec_offsets *fo); void ftfil_free(struct ftfil *ftfil); int ftfil_load(struct ftfil *ftfil, struct ftvar *ftvar, char *fname); int ftfil_def_test_xfields(struct ftfil_def *active_def, u_int64 test); enum ftstat_rpt_format {FT_STAT_FMT_UNSET, FT_STAT_FMT_ASCII, FT_STAT_FMT_BINARY}; enum ftstat_rpt_time { FT_STAT_TIME_UNSET, FT_STAT_TIME_NOW, FT_STAT_TIME_START, FT_STAT_TIME_END, FT_STAT_TIME_MID }; struct ftstat_rpt { FT_SLIST_ENTRY(ftstat_rpt) chain; /* list */ FT_STAILQ_HEAD(ftstatrptouthead, ftstat_rpt_out) outs; struct ftstat_rpt_out *out; /* current output */ enum ftstat_rpt_format format; /* FT_STAT_FMT* */ char *name; /* name of the report */ char *format_name; /* name of format */ u_int32 scale; /* scale data by? 0=no scaling */ u_int32 tag_mask_src, tag_mask_dst; /* enabled with FT_STAT_OPT_TAG_MASK */ int options; /* options FT_STAT_OPT_* default to 0 */ int allowed_options; /* options supported by report */ int allowed_fields; /* fields supported by report */ u_int32 all_fields; /* all of out->fields */ struct ftfil_def *ftfd; /* filter definition */ u_int64 xfields; /* FT_XFIELD_* */ void *data; /* ftstat_rpt_n */ void* (*f_new)(struct ftstat_rpt *ftsrpt); /* ftstat_rpt_n_new */ void* (*f_accum)(struct ftstat_rpt *ftsrpt, char *rec, struct fts3rec_offsets *fo); /* ftstat_rpt_n_accum */ void* (*f_calc)(struct ftstat_rpt *ftsrpt); /* ftstat_rpt_n_calc */ void* (*f_free)(void *data); /* ftstat_rpt_n_free */ void* (*f_dump)(FILE *fp, struct ftio *ftio, struct ftstat_rpt *ftsrpt); /* ftstat_rpt_n_dump */ /* totals */ u_int64 t_ignores, t_recs, t_flows, t_octets, t_packets, t_duration; u_int64 t_count; double avg_pps, min_pps, max_pps; double avg_bps, min_bps, max_bps; u_int32 time_start; /* real time of earliest flow */ u_int32 time_end; /* real time of latest flow */ u_int64 recs; /* records in report */ u_int64 idx; }; struct ftstat_rpt_out { FT_STAILQ_ENTRY(ftstat_rpt_out) chain; /* list */ u_int64 records; /* report records 0=all */ u_int32 tally; /* tally lines 0=none */ int options; /* options FT_STAT_OPT_* default to 0 */ u_int32 fields; /* FT_STAT_FIELD_* - default to allowed_fields */ int sort_field; /* field to sort on FT_STAT_FIELD_* */ int sort_order; /* FT_STAT_FIELD_SORT_* */ enum ftstat_rpt_time time; /* where to derive clock for output path */ char *path; /* pathname of output */ void* (*f_dump)(FILE *fp, struct ftio *ftio, struct ftstat_rpt *ftsrpt); /* ftstat_rpt_n_dump */ }; struct ftstat_rpt_item { FT_STAILQ_ENTRY(ftstat_rpt_item) chain; /* list */ char *tmp_report; /* temporary pointer to report name */ struct ftstat_rpt *rpt; }; struct ftstat_def { FT_SLIST_ENTRY(ftstat_def) chain; /* list */ FT_STAILQ_HEAD(ftstatrptihead, ftstat_rpt_item) items; char *name; /* name of the def */ struct ftfil_def *ftfd; /* filter definition */ struct fttag_def *ftd; /* tag definition */ struct ftmask_def *ftmd; /* tag definition */ struct ftstat *ftstat; /* back pointer */ u_int32 max_time; /* maximum seconds for report definition */ u_int32 start_time; /* start seconds */ u_int32 interval; /* time series interval */ u_int64 xfields; /* required flow fields - FT_XFIELD_* */ }; struct ftstat { FT_SLIST_HEAD(statrpthead, ftstat_rpt) rpts; /* reports */ FT_SLIST_HEAD(statdefhead, ftstat_def) defs; /* defs */ struct fttag fttag; struct ftfil ftfil; struct ftmask ftmask; int fttag_init; /* fttag initialized? */ int ftfil_init; /* ftfil initialized? */ int ftmask_init; /* ftmask initialized? */ char *tag_fname, *filter_fname, *mask_fname; struct ftvar *ftvar; }; /* ftstat */ int ftstat_load(struct ftstat *ftstat, struct ftvar *ftvar, char *fname); void ftstat_free(struct ftstat *ftstat); struct ftstat_def *ftstat_def_find(struct ftstat *ftstat, char *name); int ftstat_def_test_xfields(struct ftstat_def *active_def, u_int64 test); int ftstat_def_new(struct ftstat_def *active_def); int ftstat_def_accum(struct ftstat_def *active_def, char *rec, struct fts3rec_offsets *fo); int ftstat_def_calc(struct ftstat_def *active_def); int ftstat_def_dump(struct ftio *ftio, struct ftstat_def *active_def); int ftstat_def_free(struct ftstat_def *active_def); int ftstat_def_reset(struct ftstat_def *active_def); void ftstat_list_reports(FILE *out); /* fttag */ struct fttag_action { FT_SLIST_ENTRY(fttag_action) chain; /* list of all actions */ int type; /* FT_TAG_TYPE_MATCH_* */ char *name; void *look; void (*eval)(struct fttag_action *fta, struct fts3rec_v1005 *rec); }; struct fttag_def_term { FT_STAILQ_ENTRY(fttag_def_term) chain; /* list of terms */ FT_STAILQ_HEAD(actdhead, fttag_def_term_actions) actions; /* actions */ int type; /* FT_TAG_TYPE_MATCH_* */ int flags; /* FT_TAG_DEF_ */ u_int32 exporter_ip; /* exporter filter */ char in_tbl[65536]; /* input filter */ char out_tbl[65536]; /* output filter */ }; struct fttag_def_term_actions { FT_STAILQ_ENTRY(fttag_def_term_actions) chain; /* all actions */ struct fttag_action *action; /* filled in by resolve_actions */ char *name; /* temporary, invalid after config file is closed */ }; struct fttag_def { FT_SLIST_ENTRY(fttag_def) chain; FT_STAILQ_HEAD(dthead, fttag_def_term) terms; /* terms */ char *name; }; int ftvar_new(struct ftvar *ftvar); void ftvar_free(struct ftvar *ftvar); int ftvar_set(struct ftvar *ftvar, char *name, char *val); struct ftvar_entry *ftvar_find(struct ftvar *ftvar, char *name); void ftvar_clear(struct ftvar *ftvar, char *name); int ftvar_pset(struct ftvar *ftvar, char *binding); int ftvar_evalstr(struct ftvar *ftvar, char *src, char *dst, int dstlen); struct ftpeeri { u_int32 loc_ip; /* local ip address */ u_int32 rem_ip; /* remote ip address */ u_int16 dst_port; /* destination port */ u_int8 ttl; /* ttl */ }; struct ip_prefix { u_int32 addr; u_int8 len; }; void print_3float(float f); void print_3float2(float f); int load_lookup(char *s, int size, char *list); u_long scan_ip(char *s); int64 scan_size(char *val); int udp_cksum(struct ip *ip, struct udphdr *up, int len); int unlink_pidfile(int pid, char *file, u_int16 port); int write_pidfile(int pid, char *file, u_int16 port); struct ftpeeri scan_peeri(char *input); struct ip_prefix scan_ip_prefix(char *input); #ifdef POSIX_SIGNALS #define signal mysignal void *mysignal(int signo, void *func); #endif /* POSIX_SIGNALS */ int get_gmtoff(time_t t); u_int32 ipv4_len2mask(u_int8 len); int bigsockbuf(int fd, int dir, int size); int mkpath(const char *path, mode_t mode); time_t get_date (const char *p, const time_t *now); struct bit1024 { u_int32 n[32]; }; void bit1024_store(int d, struct bit1024 *old); void bit1024_print(FILE *FP, struct bit1024 *b); int bit1024_count(struct bit1024 *b); #define FMT_UINT64 21 /* 18446744073709551615 + \0 */ #define FMT_UINT32 11 /* 4294967295 + \0 */ #define FMT_UINT16 6 /* 65535 + \0 */ #define FMT_UINT8 4 /* 256 + \0 */ #define FMT_IPV4 16 /* 111.111.111.111 + \0 */ #define FMT_IPV4_PREFIX 19 /* 111.111.111.111/32 + \0 */ #define FMT_PAD_LEFT 0 #define FMT_PAD_RIGHT 1 #define FMT_JUST_LEFT 2 #define FMT_JUST_RIGHT FMT_PAD_LEFT #define FMT_SYM 4 unsigned int fmt_uint8(register char *s, register u_int8 u, int format); unsigned int fmt_uint16(register char *s, register u_int16 u, int format); unsigned int fmt_uint32(register char *s, register u_int32 u, int format); unsigned int fmt_uint64(register char *s, register u_int64 u, int format); unsigned int fmt_ipv4(register char *s, register u_int32 u, int format); unsigned int fmt_ipv4s(register char *s, register u_int32 u, int len, int format); unsigned int fmt_ipv4prefix(register char *s, register u_int32 u, u_char mask, int format); unsigned int fmt_ipv4prefixs(register char *s, register u_int32 u, u_char mask, int len, int format); unsigned int fmt_uint8s(struct ftsym *ftsym, int max, char *s, u_int8 u, int format); unsigned int fmt_uint16s(struct ftsym *ftsym, int max, char *s, u_int16 u, int format); unsigned int fmt_uint32s(struct ftsym *ftsym, int max, char *s, u_int32 u, int format); void *mysignal(int signo, void *func); /* ftxfield */ int ftxfield_parse(char *line, u_int64 *xfields); #ifndef IN_CLASSD_SSM #define IN_CLASSD_SSM(i) (((u_int32_t)(i) & 0xff000000) == 0xe8000000) #endif /* IN_CLASSD_SSM */ /* MACHINE DEPENDANT */ #define fmt_uint fmt_uint32 #endif /* FTLIB_H */ flow-tools-0.68/lib/ftmap.c0000644000076600007660000002776707622602462011323 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftmap.c,v 1.7 2003/02/13 02:38:42 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif static struct ftmap_ifname *parse_ifname(char **buf2); static struct ftmap_ifalias *parse_ifalias(char **buf2); static struct ftmap_ifname *ftmap_ifname_new2(char *ip, char *ifIndex, char *name); struct ftmap_ifalias *ftmap_ifalias_new2(char *ip, char *ifIndex_list, char *name); static void ftmap_ifalias_free(struct ftmap_ifalias *ftmia); static void ftmap_ifname_free(struct ftmap_ifname *ftmin); /* function: ftmap_new * * allocate and initialize struct ftmap * * returns allocated ftmap or NULL for error * */ struct ftmap *ftmap_new(void) { struct ftmap *ftmap; if (!(ftmap = malloc(sizeof (struct ftmap)))) return ftmap; bzero(ftmap, sizeof (struct ftmap)); FT_LIST_INIT(&ftmap->ifalias); FT_LIST_INIT(&ftmap->ifname); return ftmap; } /* ftmap_new */ /* * function: ftmap_ifalias_new2 * * Allocate and initialize a ftmap_ifalias. Free this with * ftmap_ifalias_free(). Used internally to convert from char* * * returns allocated structure, or NULL for error. */ struct ftmap_ifalias *ftmap_ifalias_new2(char *ip, char *ifIndex_list, char *name) { struct ftmap_ifalias *ftmia; u_int32 bip; u_int16 *list, entries; int n; char *c, *buf; entries = 0; /* count entries in list */ for (n = 1, c = ifIndex_list; *c; ++c) if (*c == ',') ++entries; if (!(list = malloc(entries * sizeof (u_int16)))) return (struct ftmap_ifalias*)0L; buf = ifIndex_list; n = 0; for (;;) { c = strsep(&buf, ","); if (!c) break; list[n++] = atoi(c); } bip = scan_ip(ip); ftmia = ftmap_ifalias_new(bip, list, entries, name); free (list); return ftmia; } /* ftmap_ifalias_new2 */ /* * function: ftmap_ifalias_new * * Allocate and initialize a ftmap_ifalias. Free this with * ftmap_ifalias_free() * * returns allocated structure, or NULL for error. */ struct ftmap_ifalias *ftmap_ifalias_new(u_int32 ip, u_int16 *ifIndex_list, u_int16 entries, char *name) { struct ftmap_ifalias *ftmia; int ret, n; ret = -1; ftmia = (struct ftmap_ifalias*)0L; if (!(ftmia = malloc(sizeof (struct ftmap_ifalias)))) goto ftmap_ifalias_new_out; bzero(ftmia, sizeof (struct ftmap_ifalias)); n = strlen(name); if (!(ftmia->name = malloc(n))) goto ftmap_ifalias_new_out; if (!(ftmia->ifIndex_list = malloc(entries * sizeof (u_int16)))) goto ftmap_ifalias_new_out; ftmia->ip = ip; ftmia->entries = entries; strcpy(ftmia->name, name); for (n = 0; n < entries; ++n) ftmia->ifIndex_list[n] = ifIndex_list[n]; ret = 0; ftmap_ifalias_new_out: if (ret == -1) { if (ftmia->name) free(ftmia->name); if (ftmia->ifIndex_list) free(ftmia->ifIndex_list); if (ftmia) free (ftmia); } return ftmia; } /* ftmap_ifalias_new */ /* * function: ftmap_ifalias_free * * Free resources allocated by ftmap_ifalias_new() */ static void ftmap_ifalias_free(struct ftmap_ifalias *ftmia) { if (ftmia) { if (ftmia->name) free(ftmia->name); if (ftmia->ifIndex_list) free(ftmia->ifIndex_list); free (ftmia); } } /* ftmap_ifalias_free */ /* * function: ftmap_ifname_new2 * * Allocate and initialize a ftmap_ifname. Free this with * ftmap_ifname_free(). Used internally to convert from char values. * * returns allocated structure, or NULL for error. */ struct ftmap_ifname *ftmap_ifname_new2(char *ip, char *ifIndex, char *name) { u_int32 bip; u_int16 bifIndex; bip = scan_ip(ip); bifIndex = atoi(ifIndex); return ftmap_ifname_new(bip, bifIndex, name); } /* ftmap_ifname_new2 */ /* * function: ftmap_ifname_new * * Allocate and initialize a ftmap_ifname. Free this with * ftmap_ifname_free() * * returns allocated structure, or NULL for error. */ struct ftmap_ifname *ftmap_ifname_new(u_int32 ip, u_int16 ifIndex, char *name) { struct ftmap_ifname *ftmin; int ret, n; ret = -1; ftmin = (struct ftmap_ifname*)0L; if (!(ftmin = malloc(sizeof (struct ftmap_ifname)))) goto ftmap_ifname_new_out; bzero(ftmin, sizeof (struct ftmap_ifname)); n = strlen(name); if (!(ftmin->name = malloc(n))) goto ftmap_ifname_new_out; ftmin->ip = ip; ftmin->ifIndex = ifIndex; strcpy(ftmin->name, name); ret = 0; ftmap_ifname_new_out: if (ret == -1) { if (ftmin->name) free(ftmin->name); if (ftmin) free (ftmin); } return ftmin; } /* ftmap_ifname_new */ /* * function: ftmap_ifname_free * * Free resources allocated by ftmap_ifname_new() */ static void ftmap_ifname_free(struct ftmap_ifname *ftmin) { if (ftmin) { if (ftmin->name) free(ftmin->name); free(ftmin); } } /* ftmap_ifname_free */ /* * function: ftmap_load * * Allocate a struct ftmap, open fname, read and parse the file. * Free resources allocated with ftmap_free(). Only entries with ip * are returned if ip != 0. * * returns initalized ftmap with entries loaded from fname or NULL on error. * */ struct ftmap *ftmap_load(char *fname, u_int32 ip) { struct stat sb; struct ftmap *ftmap; struct ftmap_ifname *ftmin; struct ftmap_ifalias *ftmia; int fd, ret; char *buf, *buf2, *c; ret = -1; fd = -1; buf = NULL; if (!(ftmap = ftmap_new())) goto ftmap_load_out; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto ftmap_load_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto ftmap_load_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto ftmap_load_out; } /* * file format * * ifmap 1.2.3.4 99 FastEthernet0/0 * ifmap 1.2.3.4 100 ATM0/0/0 * * ifalias 1.2.3.4 6,7,8,9 outside * */ /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(): short"); goto ftmap_load_out; } /* null terminate file */ buf[sb.st_size] = 0; buf2 = buf; for (;;) { for (;;) { c = strsep(&buf2, " \t\n"); if ((c && *c != 0) || (!c)) break; } /* no more tokens to parse */ if (!c) break; if (c && !strcmp(c, "ifname")) { ftmin = parse_ifname(&buf2); if (ftmin) { /* add to list */ if (!ip || (ip && ftmin->ip == ip)) FT_LIST_INSERT_HEAD(&ftmap->ifname, ftmin, chain); else free(ftmin); } else { /* error */ goto ftmap_load_out; } } else if (c && !strcmp(c, "ifalias")) { ftmia = parse_ifalias(&buf2); if (ftmia) { /* add to list */ if (!ip || (ip && ftmia->ip == ip)) FT_LIST_INSERT_HEAD(&ftmap->ifalias, ftmia, chain); else free(ftmia); } else { /* error */ goto ftmap_load_out; } } else if (c && (*c == '#')) { /* comment line */ continue; } else { fterr_warnx("Unexpected token: %s", c); goto ftmap_load_out; } /* allow # comments */ /* end of file */ if (buf2 >= (buf+sb.st_size)) break; } ret = 0; ftmap_load_out: if (fd != -1) close (fd); if (buf) free(buf); if (ret == -1) { ftmap_free(ftmap); ftmap = (struct ftmap*)0L; } return ftmap; } /* ftmap_load */ /* * function: ftmap_free * * frees resources allocated with ftmap_load() * */ void ftmap_free(struct ftmap *ftmap) { struct ftmap_ifalias *ftmia, *ftmia2; struct ftmap_ifname *ftmin, *ftmin2; if (!ftmap) return; /* running down the ifalias list free all entries */ FT_LIST_FOREACH(ftmin, &ftmap->ifname, chain) { FT_LIST_REMOVE(ftmin, chain); ftmin2 = ftmin; if (!(ftmin = FT_LIST_NEXT(ftmin, chain))) break; ftmap_ifname_free(ftmin2); } /* running down the ifname list free all entries */ FT_LIST_FOREACH(ftmia, &ftmap->ifalias, chain) { FT_LIST_REMOVE(ftmia, chain); ftmia2 = ftmia; if (!(ftmia = FT_LIST_NEXT(ftmia, chain))) break; /* XXX memory leak? */ ftmap_ifalias_free(ftmia2); } free(ftmap); } /* ftmap_free */ /* * function: parse_ifname() * * Parse a single line terminted with 0 or \n. Allocate a * struct ftmap_ifname initialized with elements from the parsed * line. If the line ends in \n, that \n will be replaced by a 0. * * returns struct ftmap_ifname allocated and initialized, or NULL for error. * */ struct ftmap_ifname *parse_ifname(char **buf2) { struct ftmap_ifname *ftmin; char *c, *ip, *ifIndex, *ifName; ftmin = (struct ftmap_ifname*)0L; for (;;) { c = strsep(buf2, " \t"); if ((c && *c != 0) || (!c)) break; } if (!c) { fterr_warnx("Expecting IP Address"); return ftmin; } ip = c; for (;;) { c = strsep(buf2, " \t"); if ((c && *c != 0) || (!c)) break; } if (!c) { fterr_warnx("Expecting ifIndex"); return ftmin; } ifIndex = c; for (;;) { c = strsep(buf2, " \t\n"); if ((c && *c != 0) || (!c)) break; } if (!c) { fterr_warnx("Expecting ifName"); return ftmin; } ifName = c; ftmin = ftmap_ifname_new2(ip, ifIndex, ifName); return ftmin; } /* parse_ifname */ /* * function: parse_ifalias() * * Parse a single line terminted with 0 or \n. Allocate a * struct ftmap_ifalias initialized with elements from the parsed * line. If the line ends in \n, that \n will be replaced by a 0. * * returns struct ftmap_ifalias allocated and initialized, or NULL for error. * */ struct ftmap_ifalias *parse_ifalias(char **buf2) { struct ftmap_ifalias *ftmia; char *c, *ip, *index_list, *name; ftmia = (struct ftmap_ifalias*)0L; for (;;) { c = strsep(buf2, " \t"); if ((c && *c != 0) || (!c)) break; } if (!c) { fterr_warnx("Expecting IP Address"); return ftmia; } ip = c; for (;;) { c = strsep(buf2, " \t"); if ((c && *c != 0) || (!c)) break; } if (!c) { fterr_warnx("Expecting ifIndex list"); return ftmia; } index_list = c; for (;;) { c = strsep(buf2, " \t\n"); if ((c && *c != 0) || (!c)) break; } if (!c) { fterr_warnx("Expecting Alias"); return ftmia; } name = c; ftmia = ftmap_ifalias_new2(ip, index_list, name); return ftmia; } /* parse_ifalias */ flow-tools-0.68/lib/ftmask.c0000644000076600007660000003056407622602462011466 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftmask.c,v 1.3 2003/02/13 02:38:42 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif extern int max_keylen; extern u_int32 mask_lookup[]; static int rn_init_called; static struct radix_node_head *rhead; enum ftmask_parse_state { PARSE_STATE_UNSET, PARSE_STATE_DEFINITION }; struct line_parser { enum ftmask_parse_state state; struct ftmask_def *cur_def; int lineno; char *buf, *fname, *word; }; static int walk_free(struct radix_node *rn, struct walkarg *UNUSED); static int parse_definition(struct line_parser *lp, struct ftmask *ftmask); static int parse_definition_prefix(struct line_parser *lp, struct ftmask *ftmask); #define NEXT_WORD(A,B)\ for (;;) {\ B = strsep(A, " \t");\ if ((B && *B != 0) || (!B))\ break;\ }\ struct jump { char *name; enum ftmask_parse_state state; int (*func)(struct line_parser *lp, struct ftmask *ftmask); }; static struct jump pjump[] = { {"mask-definition", 0, parse_definition}, {"prefix", PARSE_STATE_DEFINITION, parse_definition_prefix}, {0, 0, 0}, }; /* * data structures: * * Each definition is stored in a linked list of struct ftmask_def. The * head is in struct ftmask.defs. * * Each definition stores a radix trie which provides a new mask for * the prefix. * * ftmask_eval() will do the substitutions if the field exists in the * flow record. * */ /* ************************************************************************* public ftmask_* ************************************************************************* */ /* * function: ftmask_load * * Process fname into ftmask. * * returns: 0 ok * <0 fail */ int ftmask_load(struct ftmask *ftmask, char *fname) { struct stat sb; struct jump *jmp; struct line_parser lp; int fd, ret, found; char *buf, *buf2, *c; ret = -1; buf = (char*)0L; bzero(&lp, sizeof lp); bzero(ftmask, sizeof *ftmask); if (!rn_init_called) { max_keylen = sizeof(struct radix_sockaddr_in); rn_init(); rn_init_called = 1; } FT_SLIST_INIT(&ftmask->defs); lp.fname = fname; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto load_mask_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto load_mask_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto load_mask_out; } /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(%s): short", fname); goto load_mask_out; } /* null terminate file */ buf[sb.st_size] = 0; buf2 = buf; for (;;) { /* rip a line */ for (;;) { c = strsep(&buf2, "\n"); ++lp.lineno; if ((c && *c != 0) || (!c)) break; } /* no more lines */ if (!c) { goto load_mask_done; } lp.buf = c; /* first word */ NEXT_WORD(&lp.buf, c); /* whitespace only line */ if (!c) { continue; } /* comment line */ if (c && *c == '#') continue; for (jmp = pjump; jmp->name; ++jmp) { found = 0; if (((!jmp->state) || (jmp->state & lp.state)) && (!strcasecmp(c, jmp->name))) { found = 1; if (jmp->func(&lp, ftmask)) goto load_mask_out; NEXT_WORD(&lp.buf, c); if (c) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_mask_out;; } break; } } /* test each word */ if (!found) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_mask_out; } } /* more lines */ load_mask_done: ret = 0; load_mask_out: if (fd != -1) close(fd); if (buf) free(buf); if (ret == -1) ftmask_free(ftmask); return ret; } /* ftmask_load */ void ftmask_free(struct ftmask *ftmask) { struct ftmask_def *ftmd; /* walk the definition list, free each entry */ while (!FT_SLIST_EMPTY(&ftmask->defs)) { ftmd = FT_SLIST_FIRST(&ftmask->defs); if (ftmd->name) free (ftmd->name); if (ftmd->rhead) { rhead = ftmd->rhead; rhead->rnh_walktree(rhead, walk_free, 0); } FT_SLIST_REMOVE_HEAD(&ftmask->defs, chain); } /* ftmask->defs */ } /* ftmask_free */ struct ftmask_def *ftmask_def_find(struct ftmask *ftmask, char *name) { struct ftmask_def *ftmd; int found; found = 0; FT_SLIST_FOREACH(ftmd, &ftmask->defs, chain) { if (!strcasecmp(name, ftmd->name)) return ftmd; } /* ftmd */ return (struct ftmask_def*)0L; } /* ftmask_def_find */ /* * function: ftmask_def_eval * * Evaluate a flow with a mask definition * * returns: FT_FIL_MODE_PERMIT or FT_FIL_MODE_DENY * <0 fail */ int ftmask_def_eval(struct ftmask_def *active_def, char *rec, struct fts3rec_offsets *fo) { struct radix_node_head *rhead; struct radix_sockaddr_in sock1; struct ftmask_prefix_rec *prefix_rec; if ((fo->xfields & FT_XFIELD_SRCADDR) && (fo->xfields & FT_XFIELD_SRC_MASK)) { rhead = active_def->rhead; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->srcaddr)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; if ((prefix_rec = (struct ftmask_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) { *((u_int8*)(rec+fo->src_mask)) = prefix_rec->new_mask; } } if ((fo->xfields & FT_XFIELD_DSTADDR) && (fo->xfields & FT_XFIELD_DST_MASK)) { rhead = active_def->rhead; sock1.sin_addr.s_addr = *((u_int32*)(rec+fo->dstaddr)); sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; if ((prefix_rec = (struct ftmask_prefix_rec*)rhead->rnh_matchaddr( &sock1, rhead))) { *((u_int8*)(rec+fo->dst_mask)) = prefix_rec->new_mask; } } return 0; } /* ftmask_def_eval */ /* ************************************************************************* parse_definition_* ************************************************************************* */ /* * function: parse_definition * * process the 'mask-definition' line. Each primitive has a unique name * which is added to the ftmask->definitions linked list. The current * definition is updated in lp. * * returns: 0 ok * <0 fail */ int parse_definition(struct line_parser *lp, struct ftmask *ftmask) { char *c; struct ftmask_def *ftmd; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftmd, &ftmask->defs, chain) { if (!strcasecmp(c, ftmd->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(ftmd = (struct ftmask_def*)malloc(sizeof (struct ftmask_def)))) { fterr_warn("malloc()"); return -1; } bzero(ftmd, sizeof *ftmd); if (!(ftmd->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftmd); return -1; } strcpy(ftmd->name, c); if (rn_inithead((void**)&ftmd->rhead, 32) < 0) { fterr_warnx("rn_inithead(): failed"); free(ftmd->name); free(ftmd); return -1; } FT_SLIST_INSERT_HEAD(&ftmask->defs, ftmd, chain); lp->state = PARSE_STATE_DEFINITION; lp->cur_def = ftmd; return 0; } /* parse_definition */ /* * function: parse_definition_prefix * * process the definition prefix lines * * returns: 0 ok * <0 fail */ static int parse_definition_prefix(struct line_parser *lp, struct ftmask *ftmask) { struct radix_sockaddr_in sock1, sock2; struct ip_prefix ipp; struct ftmask_prefix_rec *prefix_rec; u_int8 new_mask; char *prefix; int new; if (!lp->cur_def) { fterr_warnx("%s line %d: Not in definition mode.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); prefix = lp->word; if (!lp->word) { fterr_warnx("%s line %d: Expecting prefix.", lp->fname, lp->lineno); return -1; } bzero(&sock1, sizeof sock1); bzero(&sock2, sizeof sock2); sock1.sin_family = AF_INET; sock1.sin_len = sizeof (struct radix_sockaddr_in); sock2.sin_family = AF_INET; sock2.sin_len = sizeof (struct radix_sockaddr_in); ipp = scan_ip_prefix(lp->word); sock1.sin_addr.s_addr = ipp.addr; sock2.sin_addr.s_addr = (!ipp.len) ? 0 : mask_lookup[ipp.len]; rhead = lp->cur_def->rhead; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting mask.", lp->fname, lp->lineno); return -1; } new_mask = atoi(lp->word); /* try to retrieve from trie */ prefix_rec = (struct ftmask_prefix_rec*)rhead->rnh_lookup(&sock1, &sock2, rhead); new = 1; /* if it exists, then invalid */ if (prefix_rec && (prefix_rec->addr.sin_addr.s_addr == ipp.addr) && (prefix_rec->masklen == ipp.len)) { fterr_warnx("%s line %d: Only one match.", lp->fname, lp->lineno); return -1; } /* allocate a new prefix rec */ if (new) { if (!(prefix_rec = (struct ftmask_prefix_rec*)malloc(sizeof (struct ftmask_prefix_rec)))) { fterr_warn("malloc(prefix_rec)"); return -1; } bzero(prefix_rec, sizeof *prefix_rec); prefix_rec->rt_nodes->rn_key = (caddr_t)&prefix_rec->addr; prefix_rec->addr.sin_addr.s_addr = ipp.addr; prefix_rec->addr.sin_len = sizeof (struct radix_sockaddr_in); prefix_rec->addr.sin_family = AF_INET; sock1.sin_addr.s_addr = (!ipp.len) ? 0 : mask_lookup[ipp.len]; prefix_rec->masklen = ipp.len; prefix_rec->new_mask = new_mask; /* add it to the trie */ if (!rhead->rnh_addaddr(&prefix_rec->addr, &sock1, rhead, prefix_rec->rt_nodes)) { free(prefix_rec); fterr_warnx("rnh_addaddr(): failed for %s", prefix); return -1; } } /* new */ return 0; } /* parse_definition_prefix */ static int walk_free(struct radix_node *rn, struct walkarg *UNUSED) { struct ftmask_prefix_rec *r; struct radix_sockaddr_in sock1, sock2; r = (struct ftmask_prefix_rec*)rn; bzero(&sock1, sizeof sock1); bzero(&sock2, sizeof sock2); sock1.sin_addr.s_addr = r->addr.sin_addr.s_addr; sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; sock2.sin_addr.s_addr = (!r->masklen) ? 0: mask_lookup[r->masklen]; sock2.sin_len = sizeof sock2; sock2.sin_family = AF_INET; if (r != (struct ftmask_prefix_rec*)rhead->rnh_deladdr(&sock1, &sock2, rhead)) fterr_errx(1, "rn_deladdr(): failed."); else free(r); return 0; } /* walk_free */ flow-tools-0.68/lib/ftpaths.h0000644000076600007660000000443610240412030011632 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftpaths.h.in,v 1.9 2003/11/11 16:49:14 maf Exp $ */ #ifndef FTPATHS_H #define FTPATHS_H #define FT_PATH_CFG_MAP "/usr/local/netflow/var/cfg/map.cfg" #define FT_PATH_CFG_TAG "/usr/local/netflow/var/cfg/tag.cfg" #define FT_PATH_CFG_FILTER "/usr/local/netflow/var/cfg/filter.cfg" #define FT_PATH_CFG_STAT "/usr/local/netflow/var/cfg/stat.cfg" #define FT_PATH_CFG_MASK "/usr/local/netflow/var/cfg/mask.cfg" #define FT_PATH_CFG_XLATE "/usr/local/netflow/var/cfg/xlate.cfg" #define FT_PATH_SYM_IP_PROT "/usr/local/netflow/var/sym/ip-prot.sym" #define FT_PATH_SYM_IP_TYPE "/usr/local/netflow/var/sym/ip-type.sym" #define FT_PATH_SYM_TCP_PORT "/usr/local/netflow/var/sym/tcp-port.sym" #define FT_PATH_SYM_ASN "/usr/local/netflow/var/sym/asn.sym" #define FT_PATH_SYM_TAG "/usr/local/netflow/var/sym/tag.sym" #endif /* FTPATHS_H */ flow-tools-0.68/lib/ftpaths.h.in0000644000076600007660000000432107754211412012251 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftpaths.h.in,v 1.9 2003/11/11 16:49:14 maf Exp $ */ #ifndef FTPATHS_H #define FTPATHS_H #define FT_PATH_CFG_MAP "@localstatedir@/cfg/map.cfg" #define FT_PATH_CFG_TAG "@localstatedir@/cfg/tag.cfg" #define FT_PATH_CFG_FILTER "@localstatedir@/cfg/filter.cfg" #define FT_PATH_CFG_STAT "@localstatedir@/cfg/stat.cfg" #define FT_PATH_CFG_MASK "@localstatedir@/cfg/mask.cfg" #define FT_PATH_CFG_XLATE "@localstatedir@/cfg/xlate.cfg" #define FT_PATH_SYM_IP_PROT "@localstatedir@/sym/ip-prot.sym" #define FT_PATH_SYM_IP_TYPE "@localstatedir@/sym/ip-type.sym" #define FT_PATH_SYM_TCP_PORT "@localstatedir@/sym/tcp-port.sym" #define FT_PATH_SYM_ASN "@localstatedir@/sym/asn.sym" #define FT_PATH_SYM_TAG "@localstatedir@/sym/tag.sym" #endif /* FTPATHS_H */ flow-tools-0.68/lib/ftprof.c0000644000076600007660000000637707622602462011506 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftprof.c,v 1.7 2003/02/13 02:38:42 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif /* * function: ftprof_start * * Call before flow processing to initialize profiling. * * returns: < 0 error * >= 0 ok */ int ftprof_start(struct ftprof *ftp) { bzero (ftp, sizeof (struct ftprof)); return gettimeofday(&ftp->t0, (struct timezone*)0L); } /* * function: ftprof_end * * Call after flow processing to finish profiling. * * returns: < 0 error * >= 0 ok */ int ftprof_end(struct ftprof *ftp, u_int64 nflows) { int ret; if ((ret = gettimeofday(&ftp->t1, (struct timezone*)0L)) == -1) return -1; if ((ret = getrusage(RUSAGE_SELF, &ftp->r0)) == -1) return -1; ftp->nflows = nflows; return 0; } /* * function: ftprof_print * * Dump ftprof contents to std * * returns: < 0 error * >= 0 ok */ int ftprof_print(struct ftprof *ftp, char *prog, FILE *std) { char fmt_buf[256]; u_long usec, sec; double fps; fmt_uint64(fmt_buf, ftp->nflows, FMT_JUST_LEFT); usec = ftp->r0.ru_utime.tv_usec + ftp->r0.ru_stime.tv_usec; sec = ftp->r0.ru_utime.tv_sec + ftp->r0.ru_stime.tv_sec; if (usec > 1000000) usec -= 1000000, ++sec; fps = (double)ftp->nflows / ((double)sec + ((double)usec/1000000)); fprintf(std, "%s: processed %s flows\n", prog, fmt_buf); fprintf(std, " sys: seconds=%lu.%-3.3lu flows/second=%f\n", sec, usec/1000, fps); if (ftp->t1.tv_usec < ftp->t0.tv_usec) ftp->t1.tv_usec += 1000000, --ftp->t1.tv_sec; usec = ftp->t1.tv_usec - ftp->t0.tv_usec; sec = ftp->t1.tv_sec - ftp->t0.tv_sec; fps = (double)ftp->nflows / ((double)sec + ((double)usec/1000000)); fprintf(std, " wall: seconds=%lu.%-3.3lu flows/second=%f\n", sec, usec/1000, fps); return 0; } flow-tools-0.68/lib/ftqueue.h0000644000076600007660000004142107264065345011663 /* * Copyright (c) 1991, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * modified for flow-tools to prevent conflicts with sys/queue.h on some * systems. * * @(#)queue.h 8.5 (Berkeley) 8/20/94 * $Id: ftqueue.h,v 1.2 2001/04/08 13:43:01 maf Exp $ */ #ifndef _FT_QUEUE_H_ #define _FT_QUEUE_H_ /* * This file defines five types of data structures: singly-linked lists, * slingly-linked tail queues, lists, tail queues, and circular queues. * * A singly-linked list is headed by a single forward pointer. The elements * are singly linked for minimum space and pointer manipulation overhead at * the expense of O(n) removal for arbitrary elements. New elements can be * added to the list after an existing element or at the head of the list. * Elements being removed from the head of the list should use the explicit * macro for this purpose for optimum efficiency. A singly-linked list may * only be traversed in the forward direction. Singly-linked lists are ideal * for applications with large datasets and few or no removals or for * implementing a LIFO queue. * * A singly-linked tail queue is headed by a pair of pointers, one to the * head of the list and the other to the tail of the list. The elements are * singly linked for minimum space and pointer manipulation overhead at the * expense of O(n) removal for arbitrary elements. New elements can be added * to the list after an existing element, at the head of the list, or at the * end of the list. Elements being removed from the head of the tail queue * should use the explicit macro for this purpose for optimum efficiency. * A singly-linked tail queue may only be traversed in the forward direction. * Singly-linked tail queues are ideal for applications with large datasets * and few or no removals or for implementing a FIFO queue. * * A list is headed by a single forward pointer (or an array of forward * pointers for a hash table header). The elements are doubly linked * so that an arbitrary element can be removed without a need to * traverse the list. New elements can be added to the list before * or after an existing element or at the head of the list. A list * may only be traversed in the forward direction. * * A tail queue is headed by a pair of pointers, one to the head of the * list and the other to the tail of the list. The elements are doubly * linked so that an arbitrary element can be removed without a need to * traverse the list. New elements can be added to the list before or * after an existing element, at the head of the list, or at the end of * the list. A tail queue may only be traversed in the forward direction. * * A circle queue is headed by a pair of pointers, one to the head of the * list and the other to the tail of the list. The elements are doubly * linked so that an arbitrary element can be removed without a need to * traverse the list. New elements can be added to the list before or after * an existing element, at the head of the list, or at the end of the list. * A circle queue may be traversed in either direction, but has a more * complex end of list detection. * * For details on the use of these macros, see the queue(3) manual page. * * * SLIST LIST STAILQ TAILQ CIRCLEQ * _HEAD + + + + + * _ENTRY + + + + + * _INIT + + + + + * _EMPTY + + + + + * _FIRST + + - + + * _NEXT + + - + + * _PREV - - - + + * _LAST - - - + + * _FOREACH + + - + - * _INSERT_HEAD + + + + + * _INSERT_BEFORE - + - + + * _INSERT_AFTER + + + + + * _INSERT_TAIL - - + + + * _REMOVE_HEAD + - + - - * _REMOVE + + + + + * */ /* * Singly-linked List definitions. */ #define FT_SLIST_HEAD(name, type) \ struct name { \ struct type *slh_first; /* first element */ \ } #define FT_SLIST_ENTRY(type) \ struct { \ struct type *sle_next; /* next element */ \ } /* * Singly-linked List functions. */ #define FT_SLIST_EMPTY(head) ((head)->slh_first == NULL) #define FT_SLIST_FIRST(head) ((head)->slh_first) #define FT_SLIST_FOREACH(var, head, field) \ for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next) #define FT_SLIST_INIT(head) { \ (head)->slh_first = NULL; \ } #define FT_SLIST_INSERT_AFTER(slistelm, elm, field) do { \ (elm)->field.sle_next = (slistelm)->field.sle_next; \ (slistelm)->field.sle_next = (elm); \ } while (0) #define FT_SLIST_INSERT_HEAD(head, elm, field) do { \ (elm)->field.sle_next = (head)->slh_first; \ (head)->slh_first = (elm); \ } while (0) #define FT_SLIST_NEXT(elm, field) ((elm)->field.sle_next) #define FT_SLIST_REMOVE_HEAD(head, field) do { \ (head)->slh_first = (head)->slh_first->field.sle_next; \ } while (0) #define FT_SLIST_REMOVE(head, elm, type, field) do { \ if ((head)->slh_first == (elm)) { \ FT_SLIST_REMOVE_HEAD((head), field); \ } \ else { \ struct type *curelm = (head)->slh_first; \ while( curelm->field.sle_next != (elm) ) \ curelm = curelm->field.sle_next; \ curelm->field.sle_next = \ curelm->field.sle_next->field.sle_next; \ } \ } while (0) /* * Singly-linked Tail queue definitions. */ #define FT_STAILQ_HEAD(name, type) \ struct name { \ struct type *stqh_first;/* first element */ \ struct type **stqh_last;/* addr of last next element */ \ } #define FT_STAILQ_ENTRY(type) \ struct { \ struct type *stqe_next; /* next element */ \ } /* * Singly-linked Tail queue functions. */ #define FT_STAILQ_EMPTY(head) ((head)->stqh_first == NULL) #define FT_STAILQ_INIT(head) do { \ (head)->stqh_first = NULL; \ (head)->stqh_last = &(head)->stqh_first; \ } while (0) #define FT_STAILQ_FIRST(head) ((head)->stqh_first) #define FT_STAILQ_LAST(head) (*(head)->stqh_last) #define FT_STAILQ_INSERT_HEAD(head, elm, field) do { \ if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ (head)->stqh_last = &(elm)->field.stqe_next; \ (head)->stqh_first = (elm); \ } while (0) #define FT_STAILQ_INSERT_TAIL(head, elm, field) do { \ (elm)->field.stqe_next = NULL; \ *(head)->stqh_last = (elm); \ (head)->stqh_last = &(elm)->field.stqe_next; \ } while (0) #define FT_STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ if (((elm)->field.stqe_next = (tqelm)->field.stqe_next) == NULL)\ (head)->stqh_last = &(elm)->field.stqe_next; \ (tqelm)->field.stqe_next = (elm); \ } while (0) #define FT_STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) #define FT_STAILQ_FOREACH(var, head, field) \ for (var = FT_STAILQ_FIRST(head); var; var = FT_STAILQ_NEXT(var, field)) #define FT_STAILQ_REMOVE_HEAD(head, field) do { \ if (((head)->stqh_first = \ (head)->stqh_first->field.stqe_next) == NULL) \ (head)->stqh_last = &(head)->stqh_first; \ } while (0) #define FT_STAILQ_REMOVE(head, elm, type, field) do { \ if ((head)->stqh_first == (elm)) { \ FT_STAILQ_REMOVE_HEAD(head, field); \ } \ else { \ struct type *curelm = (head)->stqh_first; \ while( curelm->field.stqe_next != (elm) ) \ curelm = curelm->field.stqe_next; \ if((curelm->field.stqe_next = \ curelm->field.stqe_next->field.stqe_next) == NULL) \ (head)->stqh_last = &(curelm)->field.stqe_next; \ } \ } while (0) /* * List definitions. */ #define FT_LIST_HEAD(name, type) \ struct name { \ struct type *lh_first; /* first element */ \ } #define FT_LIST_ENTRY(type) \ struct { \ struct type *le_next; /* next element */ \ struct type **le_prev; /* address of previous next element */ \ } /* * List functions. */ #define FT_LIST_EMPTY(head) ((head)->lh_first == NULL) #define FT_LIST_FIRST(head) ((head)->lh_first) #define FT_LIST_FOREACH(var, head, field) \ for((var) = (head)->lh_first; (var); (var) = (var)->field.le_next) #define FT_LIST_INIT(head) do { \ (head)->lh_first = NULL; \ } while (0) #define FT_LIST_INSERT_AFTER(listelm, elm, field) do { \ if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ (listelm)->field.le_next->field.le_prev = \ &(elm)->field.le_next; \ (listelm)->field.le_next = (elm); \ (elm)->field.le_prev = &(listelm)->field.le_next; \ } while (0) #define FT_LIST_INSERT_BEFORE(listelm, elm, field) do { \ (elm)->field.le_prev = (listelm)->field.le_prev; \ (elm)->field.le_next = (listelm); \ *(listelm)->field.le_prev = (elm); \ (listelm)->field.le_prev = &(elm)->field.le_next; \ } while (0) #define FT_LIST_INSERT_HEAD(head, elm, field) do { \ if (((elm)->field.le_next = (head)->lh_first) != NULL) \ (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ (head)->lh_first = (elm); \ (elm)->field.le_prev = &(head)->lh_first; \ } while (0) #define FT_LIST_NEXT(elm, field) ((elm)->field.le_next) #define FT_LIST_REMOVE(elm, field) do { \ if ((elm)->field.le_next != NULL) \ (elm)->field.le_next->field.le_prev = \ (elm)->field.le_prev; \ *(elm)->field.le_prev = (elm)->field.le_next; \ } while (0) /* * Tail queue definitions. */ #define FT_TAILQ_HEAD(name, type) \ struct name { \ struct type *tqh_first; /* first element */ \ struct type **tqh_last; /* addr of last next element */ \ } #define FT_TAILQ_HEAD_INITIALIZER(head) \ { NULL, &(head).tqh_first } #define FT_TAILQ_ENTRY(type) \ struct { \ struct type *tqe_next; /* next element */ \ struct type **tqe_prev; /* address of previous next element */ \ } /* * Tail queue functions. */ #define FT_TAILQ_EMPTY(head) ((head)->tqh_first == NULL) #define FT_TAILQ_FOREACH(var, head, field) \ for (var = FT_TAILQ_FIRST(head); var; var = FT_TAILQ_NEXT(var, field)) #define FT_TAILQ_FIRST(head) ((head)->tqh_first) #define FT_TAILQ_LAST(head, headname) \ (*(((struct headname *)((head)->tqh_last))->tqh_last)) #define FT_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) #define FT_TAILQ_PREV(elm, headname, field) \ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) #define FT_TAILQ_INIT(head) do { \ (head)->tqh_first = NULL; \ (head)->tqh_last = &(head)->tqh_first; \ } while (0) #define FT_TAILQ_INSERT_HEAD(head, elm, field) do { \ if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ (head)->tqh_first->field.tqe_prev = \ &(elm)->field.tqe_next; \ else \ (head)->tqh_last = &(elm)->field.tqe_next; \ (head)->tqh_first = (elm); \ (elm)->field.tqe_prev = &(head)->tqh_first; \ } while (0) #define FT_TAILQ_INSERT_TAIL(head, elm, field) do { \ (elm)->field.tqe_next = NULL; \ (elm)->field.tqe_prev = (head)->tqh_last; \ *(head)->tqh_last = (elm); \ (head)->tqh_last = &(elm)->field.tqe_next; \ } while (0) #define FT_TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ (elm)->field.tqe_next->field.tqe_prev = \ &(elm)->field.tqe_next; \ else \ (head)->tqh_last = &(elm)->field.tqe_next; \ (listelm)->field.tqe_next = (elm); \ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ } while (0) #define FT_TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ (elm)->field.tqe_next = (listelm); \ *(listelm)->field.tqe_prev = (elm); \ (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ } while (0) #define FT_TAILQ_REMOVE(head, elm, field) do { \ if (((elm)->field.tqe_next) != NULL) \ (elm)->field.tqe_next->field.tqe_prev = \ (elm)->field.tqe_prev; \ else \ (head)->tqh_last = (elm)->field.tqe_prev; \ *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ } while (0) /* * Circular queue definitions. */ #define FT_CIRCLEQ_HEAD(name, type) \ struct name { \ struct type *cqh_first; /* first element */ \ struct type *cqh_last; /* last element */ \ } #define FT_CIRCLEQ_ENTRY(type) \ struct { \ struct type *cqe_next; /* next element */ \ struct type *cqe_prev; /* previous element */ \ } /* * Circular queue functions. */ #define FT_CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) #define FT_CIRCLEQ_FIRST(head) ((head)->cqh_first) #define FT_CIRCLEQ_FOREACH(var, head, field) \ for((var) = (head)->cqh_first; \ (var) != (void *)(head); \ (var) = (var)->field.cqe_next) #define FT_CIRCLEQ_INIT(head) do { \ (head)->cqh_first = (void *)(head); \ (head)->cqh_last = (void *)(head); \ } while (0) #define FT_CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ (elm)->field.cqe_next = (listelm)->field.cqe_next; \ (elm)->field.cqe_prev = (listelm); \ if ((listelm)->field.cqe_next == (void *)(head)) \ (head)->cqh_last = (elm); \ else \ (listelm)->field.cqe_next->field.cqe_prev = (elm); \ (listelm)->field.cqe_next = (elm); \ } while (0) #define FT_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ (elm)->field.cqe_next = (listelm); \ (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ if ((listelm)->field.cqe_prev == (void *)(head)) \ (head)->cqh_first = (elm); \ else \ (listelm)->field.cqe_prev->field.cqe_next = (elm); \ (listelm)->field.cqe_prev = (elm); \ } while (0) #define FT_CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ (elm)->field.cqe_next = (head)->cqh_first; \ (elm)->field.cqe_prev = (void *)(head); \ if ((head)->cqh_last == (void *)(head)) \ (head)->cqh_last = (elm); \ else \ (head)->cqh_first->field.cqe_prev = (elm); \ (head)->cqh_first = (elm); \ } while (0) #define FT_CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ (elm)->field.cqe_next = (void *)(head); \ (elm)->field.cqe_prev = (head)->cqh_last; \ if ((head)->cqh_first == (void *)(head)) \ (head)->cqh_first = (elm); \ else \ (head)->cqh_last->field.cqe_next = (elm); \ (head)->cqh_last = (elm); \ } while (0) #define FT_CIRCLEQ_LAST(head) ((head)->cqh_last) #define FT_CIRCLEQ_NEXT(elm,field) ((elm)->field.cqe_next) #define FT_CIRCLEQ_PREV(elm,field) ((elm)->field.cqe_prev) #define FT_CIRCLEQ_REMOVE(head, elm, field) do { \ if ((elm)->field.cqe_next == (void *)(head)) \ (head)->cqh_last = (elm)->field.cqe_prev; \ else \ (elm)->field.cqe_next->field.cqe_prev = \ (elm)->field.cqe_prev; \ if ((elm)->field.cqe_prev == (void *)(head)) \ (head)->cqh_first = (elm)->field.cqe_next; \ else \ (elm)->field.cqe_prev->field.cqe_next = \ (elm)->field.cqe_next; \ } while (0) #ifdef KERNEL /* * XXX insque() and remque() are an old way of handling certain queues. * They bogusly assumes that all queue heads look alike. */ struct quehead { struct quehead *qh_link; struct quehead *qh_rlink; }; #ifdef __GNUC__ static __inline void insque(void *a, void *b) { struct quehead *element = a, *head = b; element->qh_link = head->qh_link; element->qh_rlink = head; head->qh_link = element; element->qh_link->qh_rlink = element; } static __inline void remque(void *a) { struct quehead *element = a; element->qh_link->qh_rlink = element->qh_rlink; element->qh_rlink->qh_link = element->qh_link; element->qh_rlink = 0; } #else /* !__GNUC__ */ void insque __P((void *a, void *b)); void remque __P((void *a)); #endif /* __GNUC__ */ #endif /* KERNEL */ #endif /* !_FT_QUEUE_H_ */ flow-tools-0.68/lib/ftrec.c0000644000076600007660000011541707762472655011323 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftrec.c,v 1.13 2003/11/30 22:56:45 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #define FT_OFFSET(A,B)\ o->A = offsetof(struct B, A); void ftrec_xlate_1to5(struct fts3rec_v1 *rec_v1, struct fts3rec_v5 *rec_v5); void ftrec_xlate_1to6(struct fts3rec_v1 *rec_v1, struct fts3rec_v6 *rec_v6); void ftrec_xlate_1to7(struct fts3rec_v1 *rec_v1, struct fts3rec_v7 *rec_v7); void ftrec_xlate_1to1005(struct fts3rec_v1 *rec_v1, struct fts3rec_v1005 *rec_v1005); void ftrec_xlate_5to1(struct fts3rec_v5 *rec_v5, struct fts3rec_v1 *rec_v1); void ftrec_xlate_5to6(struct fts3rec_v5 *rec_v5, struct fts3rec_v6 *rec_v6); void ftrec_xlate_5to7(struct fts3rec_v5 *rec_v5, struct fts3rec_v7 *rec_v7); void ftrec_xlate_5to1005(struct fts3rec_v5 *rec_v5, struct fts3rec_v1005 *rec_v1005); void ftrec_xlate_6to1(struct fts3rec_v6 *rec_v6, struct fts3rec_v1 *rec_v1); void ftrec_xlate_6to5(struct fts3rec_v6 *rec_v6, struct fts3rec_v5 *rec_v5); void ftrec_xlate_6to7(struct fts3rec_v6 *rec_v6, struct fts3rec_v7 *rec_v7); void ftrec_xlate_6to1005(struct fts3rec_v6 *rec_v6, struct fts3rec_v1005 *rec_v1005); void ftrec_xlate_7to1(struct fts3rec_v7 *rec_v7, struct fts3rec_v1 *rec_v1); void ftrec_xlate_7to5(struct fts3rec_v7 *rec_v7, struct fts3rec_v5 *rec_v5); void ftrec_xlate_7to6(struct fts3rec_v7 *rec_v7, struct fts3rec_v6 *rec_v6); void ftrec_xlate_7to1005(struct fts3rec_v7 *rec_v7, struct fts3rec_v1005 *rec_v1005); void ftrec_xlate_1005to5(struct fts3rec_v1005 *rec_v1005, struct fts3rec_v5 *rec_v5); /* * function ftrec_compute_mask * * configure ftipmask for given byte order * * used to precompute mask and test to avoid byte swapping * in certain code paths * */ void ftrec_compute_mask(struct ftipmask *m, u_int32 src, u_int32 dst, int byte_order) { m->src_mask = src; m->dst_mask = dst; m->mcast_mask = 0xf0000000; m->mcast_val = 0xe0000000; #if BYTE_ORDER == BIG_ENDIAN if (byte_order == FT_HEADER_LITTLE_ENDIAN) { SWAPINT32(m->src_mask); SWAPINT32(m->dst_mask); SWAPINT32(m->mcast_mask); SWAPINT32(m->mcast_val); } #endif /* BYTE_ORDER == BIG_ENDIAN */ #if BYTE_ORDER == LITTLE_ENDIAN if (byte_order == FT_HEADER_BIG_ENDIAN) { SWAPINT32(m->src_mask); SWAPINT32(m->dst_mask); SWAPINT32(m->mcast_mask); SWAPINT32(m->mcast_val); } #endif /* BYTE_ORDER == LITTLE_ENDIAN */ } /* ftrec_compute_mask */ /* * function: ftrec_mask_ip * * AND non multicast IP addresses in a flow record with mask * * mask and record must be in the same byte order * * returns -1 on error, 0 otherwise. */ int ftrec_mask_ip(void *rec, struct ftver *ftv, struct ftipmask *m) { int ret; struct fts3rec_gen *rec_gen; ret = -1; switch (ftv->d_version) { case 1: case 5: case 6: case 7: case 1005: rec_gen = rec; if (!((rec_gen->dstaddr & m->mcast_mask) == m->mcast_val)) { rec_gen->srcaddr &= m->src_mask; rec_gen->dstaddr &= m->dst_mask; } ret = 0; break; } /* switch */ return ret; } /* ftrec_mask_ip */ /* * function: ftrec_xlate_func * * return function to translate among v1, v5, v6, and v7 formats * */ void *ftrec_xlate_func(struct ftver *in_ftv, struct ftver *out_ftv) { if (in_ftv->d_version == 1) { if (out_ftv->d_version == 5) return ftrec_xlate_1to5; else if (out_ftv->d_version == 6) return ftrec_xlate_1to6; else if (out_ftv->d_version == 7) return ftrec_xlate_1to7; else if (out_ftv->d_version == 1) return (void*)0L; else if (out_ftv->d_version == 1005) return ftrec_xlate_5to1005; } else if (in_ftv->d_version == 5) { if (out_ftv->d_version == 1) return ftrec_xlate_5to1; else if (out_ftv->d_version == 6) return ftrec_xlate_5to6; else if (out_ftv->d_version == 7) return ftrec_xlate_5to7; else if (out_ftv->d_version == 1005) return ftrec_xlate_5to1005; else if (out_ftv->d_version == 5) return (void*)0L; } else if (in_ftv->d_version == 6) { if (out_ftv->d_version == 1) return ftrec_xlate_6to1; else if (out_ftv->d_version == 5) return ftrec_xlate_6to5; else if (out_ftv->d_version == 7) return ftrec_xlate_6to7; else if (out_ftv->d_version == 6) return (void*)0L; else if (out_ftv->d_version == 1005) return ftrec_xlate_6to1005; } else if (in_ftv->d_version == 7) { if (out_ftv->d_version == 1) return ftrec_xlate_7to1; else if (out_ftv->d_version == 5) return ftrec_xlate_7to5; else if (out_ftv->d_version == 6) return ftrec_xlate_7to6; else if (out_ftv->d_version == 7) return (void*)0L; else if (out_ftv->d_version == 1005) return ftrec_xlate_7to1005; } else if (in_ftv->d_version == 1005) { if (out_ftv->d_version == 5) return ftrec_xlate_1005to5; } return (void*)0L; } /* ftrec_xlate_func */ /* * function: ftrec_xlate * * translate among v1, v5, v6, and v7 formats * */ void ftrec_xlate(void *in_rec, struct ftver *in_ftv, void *out_rec, struct ftver *out_ftv) { void (*func)(void *in_rec, void *out_rec); func = ftrec_xlate_func(in_ftv, out_ftv); if (!func) return; /* XXX: should provide a return code */ func(in_rec, out_rec); } /* ftrec_xlate */ void ftrec_xlate_5to1(struct fts3rec_v5 *rec_v5, struct fts3rec_v1 *rec_v1) { bzero(rec_v1, sizeof (struct fts3rec_v1)); rec_v1->unix_secs = rec_v5->unix_secs; rec_v1->unix_nsecs = rec_v5->unix_nsecs; rec_v1->sysUpTime = rec_v5->sysUpTime; rec_v1->exaddr = rec_v5->exaddr; rec_v1->srcaddr = rec_v5->srcaddr; rec_v1->dstaddr = rec_v5->dstaddr; rec_v1->nexthop = rec_v5->nexthop; rec_v1->input = rec_v5->input; rec_v1->output = rec_v5->output; rec_v1->dPkts = rec_v5->dPkts; rec_v1->dOctets = rec_v5->dOctets; rec_v1->First = rec_v5->First; rec_v1->Last = rec_v5->Last; rec_v1->srcport = rec_v5->srcport; rec_v1->dstport = rec_v5->dstport; rec_v1->prot = rec_v5->prot; rec_v1->tos = rec_v5->tos; rec_v1->tcp_flags = rec_v5->tcp_flags; } /* ftrec_xlate_5to1 */ void ftrec_xlate_5to6(struct fts3rec_v5 *rec_v5, struct fts3rec_v6 *rec_v6) { bzero(rec_v6, sizeof (struct fts3rec_v6)); rec_v6->unix_secs = rec_v5->unix_secs; rec_v6->unix_nsecs = rec_v5->unix_nsecs; rec_v6->sysUpTime = rec_v5->sysUpTime; rec_v6->exaddr = rec_v5->exaddr; rec_v6->srcaddr = rec_v5->srcaddr; rec_v6->dstaddr = rec_v5->dstaddr; rec_v6->nexthop = rec_v5->nexthop; rec_v6->input = rec_v5->input; rec_v6->output = rec_v5->output; rec_v6->dPkts = rec_v5->dPkts; rec_v6->dOctets = rec_v5->dOctets; rec_v6->First = rec_v5->First; rec_v6->Last = rec_v5->Last; rec_v6->srcport = rec_v5->srcport; rec_v6->dstport = rec_v5->dstport; rec_v6->prot = rec_v5->prot; rec_v6->tos = rec_v5->tos; rec_v6->tcp_flags = rec_v5->tcp_flags; rec_v6->engine_type = rec_v5->engine_type; rec_v6->engine_id = rec_v5->engine_id; rec_v6->src_mask = rec_v5->src_mask; rec_v6->dst_mask = rec_v5->dst_mask; rec_v6->src_as = rec_v5->src_as; rec_v6->dst_as = rec_v5->dst_as; } /* ftrec_xlate_5to6 */ void ftrec_xlate_5to1005(struct fts3rec_v5 *rec_v5, struct fts3rec_v1005 *rec_v1005) { bzero(rec_v1005, sizeof (struct fts3rec_v1005)); rec_v1005->unix_secs = rec_v5->unix_secs; rec_v1005->unix_nsecs = rec_v5->unix_nsecs; rec_v1005->sysUpTime = rec_v5->sysUpTime; rec_v1005->exaddr = rec_v5->exaddr; rec_v1005->srcaddr = rec_v5->srcaddr; rec_v1005->dstaddr = rec_v5->dstaddr; rec_v1005->nexthop = rec_v5->nexthop; rec_v1005->input = rec_v5->input; rec_v1005->output = rec_v5->output; rec_v1005->dPkts = rec_v5->dPkts; rec_v1005->dOctets = rec_v5->dOctets; rec_v1005->First = rec_v5->First; rec_v1005->Last = rec_v5->Last; rec_v1005->srcport = rec_v5->srcport; rec_v1005->dstport = rec_v5->dstport; rec_v1005->prot = rec_v5->prot; rec_v1005->tos = rec_v5->tos; rec_v1005->tcp_flags = rec_v5->tcp_flags; rec_v1005->engine_type = rec_v5->engine_type; rec_v1005->engine_id = rec_v5->engine_id; rec_v1005->src_mask = rec_v5->src_mask; rec_v1005->dst_mask = rec_v5->dst_mask; rec_v1005->src_as = rec_v5->src_as; rec_v1005->dst_as = rec_v5->dst_as; } /* ftrec_xlate_5to1005 */ void ftrec_xlate_5to7(struct fts3rec_v5 *rec_v5, struct fts3rec_v7 *rec_v7) { bzero(rec_v7, sizeof (struct fts3rec_v7)); rec_v7->unix_secs = rec_v5->unix_secs; rec_v7->unix_nsecs = rec_v5->unix_nsecs; rec_v7->sysUpTime = rec_v5->sysUpTime; rec_v7->exaddr = rec_v5->exaddr; rec_v7->srcaddr = rec_v5->srcaddr; rec_v7->dstaddr = rec_v5->dstaddr; rec_v7->nexthop = rec_v5->nexthop; rec_v7->input = rec_v5->input; rec_v7->output = rec_v5->output; rec_v7->dPkts = rec_v5->dPkts; rec_v7->dOctets = rec_v5->dOctets; rec_v7->First = rec_v5->First; rec_v7->Last = rec_v5->Last; rec_v7->srcport = rec_v5->srcport; rec_v7->dstport = rec_v5->dstport; rec_v7->prot = rec_v5->prot; rec_v7->tos = rec_v5->tos; rec_v7->tcp_flags = rec_v5->tcp_flags; rec_v7->engine_type = rec_v5->engine_type; rec_v7->engine_id = rec_v5->engine_id; rec_v7->src_mask = rec_v5->src_mask; rec_v7->dst_mask = rec_v5->dst_mask; rec_v7->src_as = rec_v5->src_as; rec_v7->dst_as = rec_v5->dst_as; } /* ftrec_xlate_5to7 */ void ftrec_xlate_1to5(struct fts3rec_v1 *rec_v1, struct fts3rec_v5 *rec_v5) { bzero(rec_v5, sizeof (struct fts3rec_v5)); rec_v5->unix_secs = rec_v1->unix_secs; rec_v5->unix_nsecs = rec_v1->unix_nsecs; rec_v5->sysUpTime = rec_v1->sysUpTime; rec_v5->exaddr = rec_v1->exaddr; rec_v5->srcaddr = rec_v1->srcaddr; rec_v5->dstaddr = rec_v1->dstaddr; rec_v5->nexthop = rec_v1->nexthop; rec_v5->input = rec_v1->input; rec_v5->output = rec_v5->output; rec_v5->dPkts = rec_v1->dPkts; rec_v5->dOctets = rec_v1->dOctets; rec_v5->First = rec_v1->First; rec_v5->Last = rec_v1->Last; rec_v5->srcport = rec_v1->srcport; rec_v5->dstport = rec_v1->dstport; rec_v5->prot = rec_v1->prot; rec_v5->tos = rec_v1->tos; rec_v5->tcp_flags = rec_v1->tcp_flags; } /* ftrec_xlate_1to5 */ void ftrec_xlate_1to6(struct fts3rec_v1 *rec_v1, struct fts3rec_v6 *rec_v6) { bzero(rec_v6, sizeof (struct fts3rec_v6)); rec_v6->unix_secs = rec_v1->unix_secs; rec_v6->unix_nsecs = rec_v1->unix_nsecs; rec_v6->sysUpTime = rec_v1->sysUpTime; rec_v6->exaddr = rec_v1->exaddr; rec_v6->srcaddr = rec_v1->srcaddr; rec_v6->dstaddr = rec_v1->dstaddr; rec_v6->nexthop = rec_v1->nexthop; rec_v6->input = rec_v1->input; rec_v6->output = rec_v6->output; rec_v6->dPkts = rec_v1->dPkts; rec_v6->dOctets = rec_v1->dOctets; rec_v6->First = rec_v1->First; rec_v6->Last = rec_v1->Last; rec_v6->srcport = rec_v1->srcport; rec_v6->dstport = rec_v1->dstport; rec_v6->prot = rec_v1->prot; rec_v6->tos = rec_v1->tos; rec_v6->tcp_flags = rec_v1->tcp_flags; } /* ftrec_xlate_1to6 */ void ftrec_xlate_1to7(struct fts3rec_v1 *rec_v1, struct fts3rec_v7 *rec_v7) { bzero(rec_v7, sizeof (struct fts3rec_v7)); rec_v7->unix_secs = rec_v1->unix_secs; rec_v7->unix_nsecs = rec_v1->unix_nsecs; rec_v7->sysUpTime = rec_v1->sysUpTime; rec_v7->exaddr = rec_v1->exaddr; rec_v7->srcaddr = rec_v1->srcaddr; rec_v7->dstaddr = rec_v1->dstaddr; rec_v7->nexthop = rec_v1->nexthop; rec_v7->input = rec_v1->input; rec_v7->output = rec_v7->output; rec_v7->dPkts = rec_v1->dPkts; rec_v7->dOctets = rec_v1->dOctets; rec_v7->First = rec_v1->First; rec_v7->Last = rec_v1->Last; rec_v7->srcport = rec_v1->srcport; rec_v7->dstport = rec_v1->dstport; rec_v7->prot = rec_v1->prot; rec_v7->tos = rec_v1->tos; rec_v7->tcp_flags = rec_v1->tcp_flags; } /* ftrec_xlate_1to7 */ void ftrec_xlate_1to1005(struct fts3rec_v1 *rec_v1, struct fts3rec_v1005 *rec_v1005) { bzero(rec_v1005, sizeof (struct fts3rec_v1005)); rec_v1005->unix_secs = rec_v1->unix_secs; rec_v1005->unix_nsecs = rec_v1->unix_nsecs; rec_v1005->sysUpTime = rec_v1->sysUpTime; rec_v1005->exaddr = rec_v1->exaddr; rec_v1005->srcaddr = rec_v1->srcaddr; rec_v1005->dstaddr = rec_v1->dstaddr; rec_v1005->nexthop = rec_v1->nexthop; rec_v1005->input = rec_v1->input; rec_v1005->output = rec_v1->output; rec_v1005->dPkts = rec_v1->dPkts; rec_v1005->dOctets = rec_v1->dOctets; rec_v1005->First = rec_v1->First; rec_v1005->Last = rec_v1->Last; rec_v1005->srcport = rec_v1->srcport; rec_v1005->dstport = rec_v1->dstport; rec_v1005->prot = rec_v1->prot; rec_v1005->tos = rec_v1->tos; rec_v1005->tcp_flags = rec_v1->tcp_flags; } /* ftrec_xlate_1to1005 */ void ftrec_xlate_6to1(struct fts3rec_v6 *rec_v6, struct fts3rec_v1 *rec_v1) { bzero(rec_v1, sizeof (struct fts3rec_v1)); rec_v1->unix_secs = rec_v6->unix_secs; rec_v1->unix_nsecs = rec_v6->unix_nsecs; rec_v1->sysUpTime = rec_v6->sysUpTime; rec_v1->exaddr = rec_v6->exaddr; rec_v1->srcaddr = rec_v6->srcaddr; rec_v1->dstaddr = rec_v6->dstaddr; rec_v1->nexthop = rec_v6->nexthop; rec_v1->input = rec_v6->input; rec_v1->output = rec_v6->output; rec_v1->dPkts = rec_v6->dPkts; rec_v1->dOctets = rec_v6->dOctets; rec_v1->First = rec_v6->First; rec_v1->Last = rec_v6->Last; rec_v1->srcport = rec_v6->srcport; rec_v1->dstport = rec_v6->dstport; rec_v1->prot = rec_v6->prot; rec_v1->tos = rec_v6->tos; rec_v1->tcp_flags = rec_v6->tcp_flags; } /* ftrec_xlate_6to1 */ void ftrec_xlate_6to5(struct fts3rec_v6 *rec_v6, struct fts3rec_v5 *rec_v5) { bzero(rec_v5, sizeof (struct fts3rec_v5)); rec_v5->unix_secs = rec_v6->unix_secs; rec_v5->unix_nsecs = rec_v6->unix_nsecs; rec_v5->sysUpTime = rec_v6->sysUpTime; rec_v5->exaddr = rec_v6->exaddr; rec_v5->srcaddr = rec_v6->srcaddr; rec_v5->dstaddr = rec_v6->dstaddr; rec_v5->nexthop = rec_v6->nexthop; rec_v5->input = rec_v6->input; rec_v5->output = rec_v6->output; rec_v5->dPkts = rec_v6->dPkts; rec_v5->dOctets = rec_v6->dOctets; rec_v5->First = rec_v6->First; rec_v5->Last = rec_v6->Last; rec_v5->srcport = rec_v6->srcport; rec_v5->dstport = rec_v6->dstport; rec_v5->prot = rec_v6->prot; rec_v5->tos = rec_v6->tos; rec_v5->tcp_flags = rec_v6->tcp_flags; rec_v5->engine_type = rec_v6->engine_type; rec_v5->engine_id = rec_v6->engine_id; rec_v5->src_mask = rec_v6->src_mask; rec_v5->dst_mask = rec_v6->dst_mask; rec_v5->src_as = rec_v6->src_as; rec_v5->dst_as = rec_v6->dst_as; } /* ftrec_xlate_6to5 */ void ftrec_xlate_6to7(struct fts3rec_v6 *rec_v6, struct fts3rec_v7 *rec_v7) { bzero(rec_v7, sizeof (struct fts3rec_v7)); rec_v7->unix_secs = rec_v6->unix_secs; rec_v7->unix_nsecs = rec_v6->unix_nsecs; rec_v7->sysUpTime = rec_v6->sysUpTime; rec_v7->exaddr = rec_v6->exaddr; rec_v7->srcaddr = rec_v6->srcaddr; rec_v7->dstaddr = rec_v6->dstaddr; rec_v7->nexthop = rec_v6->nexthop; rec_v7->input = rec_v6->input; rec_v7->output = rec_v6->output; rec_v7->dPkts = rec_v6->dPkts; rec_v7->dOctets = rec_v6->dOctets; rec_v7->First = rec_v6->First; rec_v7->Last = rec_v6->Last; rec_v7->srcport = rec_v6->srcport; rec_v7->dstport = rec_v6->dstport; rec_v7->prot = rec_v6->prot; rec_v7->tos = rec_v6->tos; rec_v7->tcp_flags = rec_v6->tcp_flags; rec_v7->engine_type = rec_v6->engine_type; rec_v7->engine_id = rec_v6->engine_id; rec_v7->src_mask = rec_v6->src_mask; rec_v7->dst_mask = rec_v6->dst_mask; rec_v7->src_as = rec_v6->src_as; rec_v7->dst_as = rec_v6->dst_as; } /* ftrec_xlate_6to7 */ void ftrec_xlate_6to1005(struct fts3rec_v6 *rec_v6, struct fts3rec_v1005 *rec_v1005) { bzero(rec_v1005, sizeof (struct fts3rec_v1005)); rec_v1005->unix_secs = rec_v6->unix_secs; rec_v1005->unix_nsecs = rec_v6->unix_nsecs; rec_v1005->sysUpTime = rec_v6->sysUpTime; rec_v1005->exaddr = rec_v6->exaddr; rec_v1005->srcaddr = rec_v6->srcaddr; rec_v1005->dstaddr = rec_v6->dstaddr; rec_v1005->nexthop = rec_v6->nexthop; rec_v1005->input = rec_v6->input; rec_v1005->output = rec_v6->output; rec_v1005->dPkts = rec_v6->dPkts; rec_v1005->dOctets = rec_v6->dOctets; rec_v1005->First = rec_v6->First; rec_v1005->Last = rec_v6->Last; rec_v1005->srcport = rec_v6->srcport; rec_v1005->dstport = rec_v6->dstport; rec_v1005->prot = rec_v6->prot; rec_v1005->tos = rec_v6->tos; rec_v1005->tcp_flags = rec_v6->tcp_flags; rec_v1005->engine_type = rec_v6->engine_type; rec_v1005->engine_id = rec_v6->engine_id; rec_v1005->src_mask = rec_v6->src_mask; rec_v1005->dst_mask = rec_v6->dst_mask; rec_v1005->src_as = rec_v6->src_as; rec_v1005->dst_as = rec_v6->dst_as; } /* ftrec_xlate_6to1005 */ void ftrec_xlate_7to1(struct fts3rec_v7 *rec_v7, struct fts3rec_v1 *rec_v1) { bzero(rec_v1, sizeof (struct fts3rec_v1)); rec_v1->unix_secs = rec_v7->unix_secs; rec_v1->unix_nsecs = rec_v7->unix_nsecs; rec_v1->sysUpTime = rec_v7->sysUpTime; rec_v1->exaddr = rec_v7->exaddr; rec_v1->srcaddr = rec_v7->srcaddr; rec_v1->dstaddr = rec_v7->dstaddr; rec_v1->nexthop = rec_v7->nexthop; rec_v1->input = rec_v7->input; rec_v1->output = rec_v7->output; rec_v1->dPkts = rec_v7->dPkts; rec_v1->dOctets = rec_v7->dOctets; rec_v1->First = rec_v7->First; rec_v1->Last = rec_v7->Last; rec_v1->srcport = rec_v7->srcport; rec_v1->dstport = rec_v7->dstport; rec_v1->prot = rec_v7->prot; rec_v1->tos = rec_v7->tos; rec_v1->tcp_flags = rec_v7->tcp_flags; } /* ftrec_xlate_7to1 */ void ftrec_xlate_7to5(struct fts3rec_v7 *rec_v7, struct fts3rec_v5 *rec_v5) { bzero(rec_v5, sizeof (struct fts3rec_v5)); rec_v5->unix_secs = rec_v7->unix_secs; rec_v5->unix_nsecs = rec_v7->unix_nsecs; rec_v5->sysUpTime = rec_v7->sysUpTime; rec_v5->exaddr = rec_v7->exaddr; rec_v5->srcaddr = rec_v7->srcaddr; rec_v5->dstaddr = rec_v7->dstaddr; rec_v5->nexthop = rec_v7->nexthop; rec_v5->input = rec_v7->input; rec_v5->output = rec_v7->output; rec_v5->dPkts = rec_v7->dPkts; rec_v5->dOctets = rec_v7->dOctets; rec_v5->First = rec_v7->First; rec_v5->Last = rec_v7->Last; rec_v5->srcport = rec_v7->srcport; rec_v5->dstport = rec_v7->dstport; rec_v5->prot = rec_v7->prot; rec_v5->tos = rec_v7->tos; rec_v5->tcp_flags = rec_v7->tcp_flags; rec_v5->engine_type = rec_v7->engine_type; rec_v5->engine_id = rec_v7->engine_id; rec_v5->src_mask = rec_v7->src_mask; rec_v5->dst_mask = rec_v7->dst_mask; rec_v5->src_as = rec_v7->src_as; rec_v5->dst_as = rec_v7->dst_as; } /* ftrec_xlate_7to5 */ void ftrec_xlate_7to6(struct fts3rec_v7 *rec_v7, struct fts3rec_v6 *rec_v6) { bzero(rec_v6, sizeof (struct fts3rec_v6)); rec_v6->unix_secs = rec_v7->unix_secs; rec_v6->unix_nsecs = rec_v7->unix_nsecs; rec_v6->sysUpTime = rec_v7->sysUpTime; rec_v6->exaddr = rec_v7->exaddr; rec_v6->srcaddr = rec_v7->srcaddr; rec_v6->dstaddr = rec_v7->dstaddr; rec_v6->nexthop = rec_v7->nexthop; rec_v6->input = rec_v7->input; rec_v6->output = rec_v7->output; rec_v6->dPkts = rec_v7->dPkts; rec_v6->dOctets = rec_v7->dOctets; rec_v6->First = rec_v7->First; rec_v6->Last = rec_v7->Last; rec_v6->srcport = rec_v7->srcport; rec_v6->dstport = rec_v7->dstport; rec_v6->prot = rec_v7->prot; rec_v6->tos = rec_v7->tos; rec_v6->tcp_flags = rec_v7->tcp_flags; rec_v6->engine_type = rec_v7->engine_type; rec_v6->engine_id = rec_v7->engine_id; rec_v6->src_mask = rec_v7->src_mask; rec_v6->dst_mask = rec_v7->dst_mask; rec_v6->src_as = rec_v7->src_as; rec_v6->dst_as = rec_v7->dst_as; } /* ftrec_xlate_7to6 */ void ftrec_xlate_7to1005(struct fts3rec_v7 *rec_v7, struct fts3rec_v1005 *rec_v1005) { bzero(rec_v1005, sizeof (struct fts3rec_v1005)); rec_v1005->unix_secs = rec_v7->unix_secs; rec_v1005->unix_nsecs = rec_v7->unix_nsecs; rec_v1005->sysUpTime = rec_v7->sysUpTime; rec_v1005->exaddr = rec_v7->exaddr; rec_v1005->srcaddr = rec_v7->srcaddr; rec_v1005->dstaddr = rec_v7->dstaddr; rec_v1005->nexthop = rec_v7->nexthop; rec_v1005->input = rec_v7->input; rec_v1005->output = rec_v7->output; rec_v1005->dPkts = rec_v7->dPkts; rec_v1005->dOctets = rec_v7->dOctets; rec_v1005->First = rec_v7->First; rec_v1005->Last = rec_v7->Last; rec_v1005->srcport = rec_v7->srcport; rec_v1005->dstport = rec_v7->dstport; rec_v1005->prot = rec_v7->prot; rec_v1005->tos = rec_v7->tos; rec_v1005->tcp_flags = rec_v7->tcp_flags; rec_v1005->engine_type = rec_v7->engine_type; rec_v1005->engine_id = rec_v7->engine_id; rec_v1005->src_mask = rec_v7->src_mask; rec_v1005->dst_mask = rec_v7->dst_mask; rec_v1005->src_as = rec_v7->src_as; rec_v1005->dst_as = rec_v7->dst_as; } /* ftrec_xlate_7to1005 */ void ftrec_xlate_1005to5(struct fts3rec_v1005 *rec_v1005, struct fts3rec_v5 *rec_v5) { bzero(rec_v5, sizeof (struct fts3rec_v5)); rec_v5->unix_secs = rec_v1005->unix_secs; rec_v5->unix_nsecs = rec_v1005->unix_nsecs; rec_v5->sysUpTime = rec_v1005->sysUpTime; rec_v5->exaddr = rec_v1005->exaddr; rec_v5->srcaddr = rec_v1005->srcaddr; rec_v5->dstaddr = rec_v1005->dstaddr; rec_v5->nexthop = rec_v1005->nexthop; rec_v5->input = rec_v1005->input; rec_v5->output = rec_v1005->output; rec_v5->dPkts = rec_v1005->dPkts; rec_v5->dOctets = rec_v1005->dOctets; rec_v5->First = rec_v1005->First; rec_v5->Last = rec_v1005->Last; rec_v5->srcport = rec_v1005->srcport; rec_v5->dstport = rec_v1005->dstport; rec_v5->prot = rec_v1005->prot; rec_v5->tos = rec_v1005->tos; rec_v5->tcp_flags = rec_v1005->tcp_flags; rec_v5->engine_type = rec_v1005->engine_type; rec_v5->engine_id = rec_v1005->engine_id; rec_v5->src_mask = rec_v1005->src_mask; rec_v5->dst_mask = rec_v1005->dst_mask; rec_v5->src_as = rec_v1005->src_as; rec_v5->dst_as = rec_v1005->dst_as; } /* flow_xlate_1005to5 */ /* * function fts3rec_compute_offsets * * populate a fts3rec_offset structure with structure offsets appropriate * for the version in ftv. * * returns 0 for success, < 0 otherwise. */ int fts3rec_compute_offsets(struct fts3rec_offsets *o, struct ftver *ftv) { int ret; ret = -1; switch (ftv->d_version) { case 1: FT_OFFSET(unix_secs, fts3rec_v1) FT_OFFSET(unix_nsecs, fts3rec_v1) FT_OFFSET(sysUpTime, fts3rec_v1) FT_OFFSET(exaddr, fts3rec_v1) FT_OFFSET(srcaddr, fts3rec_v1) FT_OFFSET(dstaddr, fts3rec_v1) FT_OFFSET(nexthop, fts3rec_v1) FT_OFFSET(input, fts3rec_v1) FT_OFFSET(output, fts3rec_v1) FT_OFFSET(dPkts, fts3rec_v1) FT_OFFSET(dOctets, fts3rec_v1) FT_OFFSET(First, fts3rec_v1) FT_OFFSET(Last, fts3rec_v1) FT_OFFSET(srcport, fts3rec_v1) FT_OFFSET(dstport, fts3rec_v1) FT_OFFSET(prot, fts3rec_v1) FT_OFFSET(tos, fts3rec_v1) FT_OFFSET(tcp_flags, fts3rec_v1) ret = 0; break; case 5: FT_OFFSET(unix_secs, fts3rec_v5) FT_OFFSET(unix_nsecs, fts3rec_v5) FT_OFFSET(sysUpTime, fts3rec_v5) FT_OFFSET(exaddr, fts3rec_v5) FT_OFFSET(srcaddr, fts3rec_v5) FT_OFFSET(dstaddr, fts3rec_v5) FT_OFFSET(nexthop, fts3rec_v5) FT_OFFSET(input, fts3rec_v5) FT_OFFSET(output, fts3rec_v5) FT_OFFSET(dPkts, fts3rec_v5) FT_OFFSET(dOctets, fts3rec_v5) FT_OFFSET(First, fts3rec_v5) FT_OFFSET(Last, fts3rec_v5) FT_OFFSET(srcport, fts3rec_v5) FT_OFFSET(dstport, fts3rec_v5) FT_OFFSET(prot, fts3rec_v5) FT_OFFSET(tos, fts3rec_v5) FT_OFFSET(tcp_flags, fts3rec_v5) FT_OFFSET(engine_type, fts3rec_v5) FT_OFFSET(engine_id, fts3rec_v5) FT_OFFSET(src_mask, fts3rec_v5) FT_OFFSET(dst_mask, fts3rec_v5) FT_OFFSET(src_as, fts3rec_v5) FT_OFFSET(dst_as, fts3rec_v5) ret = 0; break; case 6: FT_OFFSET(unix_secs, fts3rec_v6) FT_OFFSET(unix_nsecs, fts3rec_v6) FT_OFFSET(sysUpTime, fts3rec_v6) FT_OFFSET(exaddr, fts3rec_v6) FT_OFFSET(srcaddr, fts3rec_v6) FT_OFFSET(dstaddr, fts3rec_v6) FT_OFFSET(nexthop, fts3rec_v6) FT_OFFSET(input, fts3rec_v6) FT_OFFSET(output, fts3rec_v6) FT_OFFSET(dPkts, fts3rec_v6) FT_OFFSET(dOctets, fts3rec_v6) FT_OFFSET(First, fts3rec_v6) FT_OFFSET(Last, fts3rec_v6) FT_OFFSET(srcport, fts3rec_v6) FT_OFFSET(dstport, fts3rec_v6) FT_OFFSET(prot, fts3rec_v6) FT_OFFSET(tos, fts3rec_v6) FT_OFFSET(tcp_flags, fts3rec_v6) FT_OFFSET(engine_type, fts3rec_v6) FT_OFFSET(engine_id, fts3rec_v6) FT_OFFSET(src_mask, fts3rec_v6) FT_OFFSET(dst_mask, fts3rec_v6) FT_OFFSET(src_as, fts3rec_v6) FT_OFFSET(dst_as, fts3rec_v6) FT_OFFSET(in_encaps, fts3rec_v6) FT_OFFSET(out_encaps, fts3rec_v6) FT_OFFSET(peer_nexthop, fts3rec_v6) ret = 0; break; case 7: FT_OFFSET(unix_secs, fts3rec_v7) FT_OFFSET(unix_nsecs, fts3rec_v7) FT_OFFSET(sysUpTime, fts3rec_v7) FT_OFFSET(exaddr, fts3rec_v7) FT_OFFSET(srcaddr, fts3rec_v7) FT_OFFSET(dstaddr, fts3rec_v7) FT_OFFSET(nexthop, fts3rec_v7) FT_OFFSET(input, fts3rec_v7) FT_OFFSET(output, fts3rec_v7) FT_OFFSET(dPkts, fts3rec_v7) FT_OFFSET(dOctets, fts3rec_v7) FT_OFFSET(First, fts3rec_v7) FT_OFFSET(Last, fts3rec_v7) FT_OFFSET(srcport, fts3rec_v7) FT_OFFSET(dstport, fts3rec_v7) FT_OFFSET(prot, fts3rec_v7) FT_OFFSET(tos, fts3rec_v7) FT_OFFSET(tcp_flags, fts3rec_v7) FT_OFFSET(engine_type, fts3rec_v7) FT_OFFSET(engine_id, fts3rec_v7) FT_OFFSET(src_mask, fts3rec_v7) FT_OFFSET(dst_mask, fts3rec_v7) FT_OFFSET(src_as, fts3rec_v7) FT_OFFSET(dst_as, fts3rec_v7) FT_OFFSET(router_sc, fts3rec_v7) ret = 0; break; case 8: switch (ftv->agg_method) { case 1: FT_OFFSET(unix_secs, fts3rec_v8_1) FT_OFFSET(unix_nsecs, fts3rec_v8_1) FT_OFFSET(sysUpTime, fts3rec_v8_1) FT_OFFSET(exaddr, fts3rec_v8_1) FT_OFFSET(dFlows, fts3rec_v8_1) FT_OFFSET(dOctets, fts3rec_v8_1) FT_OFFSET(dPkts, fts3rec_v8_1) FT_OFFSET(First, fts3rec_v8_1) FT_OFFSET(Last, fts3rec_v8_1) FT_OFFSET(src_as, fts3rec_v8_1) FT_OFFSET(dst_as, fts3rec_v8_1) FT_OFFSET(input, fts3rec_v8_1) FT_OFFSET(output, fts3rec_v8_1) FT_OFFSET(engine_id, fts3rec_v8_1) FT_OFFSET(engine_type, fts3rec_v8_1) ret = 0; break; case 2: FT_OFFSET(unix_secs, fts3rec_v8_2) FT_OFFSET(unix_nsecs, fts3rec_v8_2) FT_OFFSET(sysUpTime, fts3rec_v8_2) FT_OFFSET(exaddr, fts3rec_v8_2) FT_OFFSET(dFlows, fts3rec_v8_2) FT_OFFSET(dOctets, fts3rec_v8_2) FT_OFFSET(dPkts, fts3rec_v8_2) FT_OFFSET(First, fts3rec_v8_2) FT_OFFSET(Last, fts3rec_v8_2) FT_OFFSET(prot, fts3rec_v8_2) FT_OFFSET(srcport, fts3rec_v8_2) FT_OFFSET(dstport, fts3rec_v8_2) FT_OFFSET(engine_id, fts3rec_v8_2) FT_OFFSET(engine_type, fts3rec_v8_2) ret = 0; break; case 3: FT_OFFSET(unix_secs, fts3rec_v8_3) FT_OFFSET(unix_nsecs, fts3rec_v8_3) FT_OFFSET(sysUpTime, fts3rec_v8_3) FT_OFFSET(exaddr, fts3rec_v8_3) FT_OFFSET(dFlows, fts3rec_v8_3) FT_OFFSET(dOctets, fts3rec_v8_3) FT_OFFSET(dPkts, fts3rec_v8_3) FT_OFFSET(First, fts3rec_v8_3) FT_OFFSET(Last, fts3rec_v8_3) FT_OFFSET(srcaddr, fts3rec_v8_3) FT_OFFSET(src_mask, fts3rec_v8_3) FT_OFFSET(src_as, fts3rec_v8_3) FT_OFFSET(input, fts3rec_v8_3) FT_OFFSET(engine_id, fts3rec_v8_3) FT_OFFSET(engine_type, fts3rec_v8_3) ret = 0; break; case 4: FT_OFFSET(unix_secs, fts3rec_v8_4) FT_OFFSET(unix_nsecs, fts3rec_v8_4) FT_OFFSET(sysUpTime, fts3rec_v8_4) FT_OFFSET(exaddr, fts3rec_v8_4) FT_OFFSET(dFlows, fts3rec_v8_4) FT_OFFSET(dOctets, fts3rec_v8_4) FT_OFFSET(dPkts, fts3rec_v8_4) FT_OFFSET(First, fts3rec_v8_4) FT_OFFSET(Last, fts3rec_v8_4) FT_OFFSET(dstaddr, fts3rec_v8_4) FT_OFFSET(dst_mask, fts3rec_v8_4) FT_OFFSET(dst_as, fts3rec_v8_4) FT_OFFSET(output, fts3rec_v8_4) FT_OFFSET(engine_id, fts3rec_v8_4) FT_OFFSET(engine_type, fts3rec_v8_4) ret = 0; break; case 5: FT_OFFSET(unix_secs, fts3rec_v8_5) FT_OFFSET(unix_nsecs, fts3rec_v8_5) FT_OFFSET(sysUpTime, fts3rec_v8_5) FT_OFFSET(exaddr, fts3rec_v8_5) FT_OFFSET(dFlows, fts3rec_v8_5) FT_OFFSET(dOctets, fts3rec_v8_5) FT_OFFSET(dPkts, fts3rec_v8_5) FT_OFFSET(First, fts3rec_v8_5) FT_OFFSET(Last, fts3rec_v8_5) FT_OFFSET(srcaddr, fts3rec_v8_5) FT_OFFSET(src_mask, fts3rec_v8_5) FT_OFFSET(src_as, fts3rec_v8_5) FT_OFFSET(dstaddr, fts3rec_v8_5) FT_OFFSET(dst_mask, fts3rec_v8_5) FT_OFFSET(dst_as, fts3rec_v8_5) FT_OFFSET(input, fts3rec_v8_5) FT_OFFSET(output, fts3rec_v8_5) FT_OFFSET(engine_id, fts3rec_v8_5) FT_OFFSET(engine_type, fts3rec_v8_5) ret = 0; break; case 6: FT_OFFSET(unix_secs, fts3rec_v8_6) FT_OFFSET(unix_nsecs, fts3rec_v8_6) FT_OFFSET(sysUpTime, fts3rec_v8_6) FT_OFFSET(exaddr, fts3rec_v8_6) FT_OFFSET(dPkts, fts3rec_v8_6) FT_OFFSET(dOctets, fts3rec_v8_6) FT_OFFSET(First, fts3rec_v8_6) FT_OFFSET(Last, fts3rec_v8_6) FT_OFFSET(dstaddr, fts3rec_v8_6) FT_OFFSET(extra_pkts, fts3rec_v8_6) FT_OFFSET(router_sc, fts3rec_v8_6) FT_OFFSET(output, fts3rec_v8_6) FT_OFFSET(tos, fts3rec_v8_6) FT_OFFSET(marked_tos, fts3rec_v8_6) FT_OFFSET(engine_type, fts3rec_v8_6) FT_OFFSET(engine_id, fts3rec_v8_6) ret = 0; break; case 7: FT_OFFSET(unix_secs, fts3rec_v8_7) FT_OFFSET(unix_nsecs, fts3rec_v8_7) FT_OFFSET(sysUpTime, fts3rec_v8_7) FT_OFFSET(exaddr, fts3rec_v8_7) FT_OFFSET(dPkts, fts3rec_v8_7) FT_OFFSET(dOctets, fts3rec_v8_7) FT_OFFSET(First, fts3rec_v8_7) FT_OFFSET(Last, fts3rec_v8_7) FT_OFFSET(dstaddr, fts3rec_v8_7) FT_OFFSET(srcaddr, fts3rec_v8_7) FT_OFFSET(extra_pkts, fts3rec_v8_7) FT_OFFSET(router_sc, fts3rec_v8_7) FT_OFFSET(output, fts3rec_v8_7) FT_OFFSET(input, fts3rec_v8_7) FT_OFFSET(tos, fts3rec_v8_7) FT_OFFSET(marked_tos, fts3rec_v8_7) FT_OFFSET(engine_type, fts3rec_v8_7) FT_OFFSET(engine_id, fts3rec_v8_7) ret = 0; break; case 8: FT_OFFSET(unix_secs, fts3rec_v8_8) FT_OFFSET(unix_nsecs, fts3rec_v8_8) FT_OFFSET(sysUpTime, fts3rec_v8_8) FT_OFFSET(exaddr, fts3rec_v8_8) FT_OFFSET(dPkts, fts3rec_v8_8) FT_OFFSET(dOctets, fts3rec_v8_8) FT_OFFSET(First, fts3rec_v8_8) FT_OFFSET(Last, fts3rec_v8_8) FT_OFFSET(dstaddr, fts3rec_v8_8) FT_OFFSET(srcaddr, fts3rec_v8_8) FT_OFFSET(extra_pkts, fts3rec_v8_8) FT_OFFSET(router_sc, fts3rec_v8_8) FT_OFFSET(srcport, fts3rec_v8_8) FT_OFFSET(dstport, fts3rec_v8_8) FT_OFFSET(output, fts3rec_v8_8) FT_OFFSET(input, fts3rec_v8_8) FT_OFFSET(tos, fts3rec_v8_8) FT_OFFSET(marked_tos, fts3rec_v8_8) FT_OFFSET(engine_type, fts3rec_v8_8) FT_OFFSET(engine_id, fts3rec_v8_8) FT_OFFSET(prot, fts3rec_v8_8) ret = 0; break; case 9: FT_OFFSET(unix_secs, fts3rec_v8_9) FT_OFFSET(unix_nsecs, fts3rec_v8_9) FT_OFFSET(sysUpTime, fts3rec_v8_9) FT_OFFSET(exaddr, fts3rec_v8_9) FT_OFFSET(dFlows, fts3rec_v8_9) FT_OFFSET(dPkts, fts3rec_v8_9) FT_OFFSET(dOctets, fts3rec_v8_9) FT_OFFSET(First, fts3rec_v8_9) FT_OFFSET(Last, fts3rec_v8_9) FT_OFFSET(src_as, fts3rec_v8_9) FT_OFFSET(dst_as, fts3rec_v8_9) FT_OFFSET(input, fts3rec_v8_9) FT_OFFSET(output, fts3rec_v8_9) FT_OFFSET(engine_type, fts3rec_v8_9) FT_OFFSET(engine_id, fts3rec_v8_9) FT_OFFSET(tos, fts3rec_v8_9) ret = 0; break; case 10: FT_OFFSET(unix_secs, fts3rec_v8_10) FT_OFFSET(unix_nsecs, fts3rec_v8_10) FT_OFFSET(sysUpTime, fts3rec_v8_10) FT_OFFSET(exaddr, fts3rec_v8_10) FT_OFFSET(dFlows, fts3rec_v8_10) FT_OFFSET(dPkts, fts3rec_v8_10) FT_OFFSET(dOctets, fts3rec_v8_10) FT_OFFSET(First, fts3rec_v8_10) FT_OFFSET(Last, fts3rec_v8_10) FT_OFFSET(srcport, fts3rec_v8_10) FT_OFFSET(dstport, fts3rec_v8_10) FT_OFFSET(input, fts3rec_v8_10) FT_OFFSET(output, fts3rec_v8_10) FT_OFFSET(engine_type, fts3rec_v8_10) FT_OFFSET(engine_id, fts3rec_v8_10) FT_OFFSET(prot, fts3rec_v8_10) FT_OFFSET(tos, fts3rec_v8_10) ret = 0; break; case 11: FT_OFFSET(unix_secs, fts3rec_v8_11) FT_OFFSET(unix_nsecs, fts3rec_v8_11) FT_OFFSET(sysUpTime, fts3rec_v8_11) FT_OFFSET(exaddr, fts3rec_v8_11) FT_OFFSET(dFlows, fts3rec_v8_11) FT_OFFSET(dPkts, fts3rec_v8_11) FT_OFFSET(dOctets, fts3rec_v8_11) FT_OFFSET(First, fts3rec_v8_11) FT_OFFSET(Last, fts3rec_v8_11) FT_OFFSET(srcaddr, fts3rec_v8_11) FT_OFFSET(src_mask, fts3rec_v8_11) FT_OFFSET(tos, fts3rec_v8_11) FT_OFFSET(src_as, fts3rec_v8_11) FT_OFFSET(input, fts3rec_v8_11) FT_OFFSET(engine_type, fts3rec_v8_11) FT_OFFSET(engine_id, fts3rec_v8_11) ret = 0; break; case 12: FT_OFFSET(unix_secs, fts3rec_v8_12) FT_OFFSET(unix_nsecs, fts3rec_v8_12) FT_OFFSET(sysUpTime, fts3rec_v8_12) FT_OFFSET(exaddr, fts3rec_v8_12) FT_OFFSET(dFlows, fts3rec_v8_12) FT_OFFSET(dPkts, fts3rec_v8_12) FT_OFFSET(dOctets, fts3rec_v8_12) FT_OFFSET(First, fts3rec_v8_12) FT_OFFSET(Last, fts3rec_v8_12) FT_OFFSET(dstaddr, fts3rec_v8_12) FT_OFFSET(output, fts3rec_v8_12) FT_OFFSET(dst_as, fts3rec_v8_12) FT_OFFSET(dst_mask, fts3rec_v8_12) FT_OFFSET(tos, fts3rec_v8_12) FT_OFFSET(engine_type, fts3rec_v8_12) FT_OFFSET(engine_id, fts3rec_v8_12) ret = 0; break; case 13: FT_OFFSET(unix_secs, fts3rec_v8_13) FT_OFFSET(unix_nsecs, fts3rec_v8_13) FT_OFFSET(sysUpTime, fts3rec_v8_13) FT_OFFSET(exaddr, fts3rec_v8_13) FT_OFFSET(dFlows, fts3rec_v8_13) FT_OFFSET(dPkts, fts3rec_v8_13) FT_OFFSET(dOctets, fts3rec_v8_13) FT_OFFSET(First, fts3rec_v8_13) FT_OFFSET(Last, fts3rec_v8_13) FT_OFFSET(srcaddr, fts3rec_v8_13) FT_OFFSET(dstaddr, fts3rec_v8_13) FT_OFFSET(src_as, fts3rec_v8_13) FT_OFFSET(dst_as, fts3rec_v8_13) FT_OFFSET(input, fts3rec_v8_13) FT_OFFSET(output, fts3rec_v8_13) FT_OFFSET(dst_mask, fts3rec_v8_13) FT_OFFSET(src_mask, fts3rec_v8_13) FT_OFFSET(engine_type, fts3rec_v8_13) FT_OFFSET(engine_id, fts3rec_v8_13) FT_OFFSET(tos, fts3rec_v8_13) ret = 0; break; case 14: FT_OFFSET(unix_secs, fts3rec_v8_14) FT_OFFSET(unix_nsecs, fts3rec_v8_14) FT_OFFSET(sysUpTime, fts3rec_v8_14) FT_OFFSET(exaddr, fts3rec_v8_14) FT_OFFSET(dFlows, fts3rec_v8_14) FT_OFFSET(dPkts, fts3rec_v8_14) FT_OFFSET(dOctets, fts3rec_v8_14) FT_OFFSET(First, fts3rec_v8_14) FT_OFFSET(Last, fts3rec_v8_14) FT_OFFSET(srcaddr, fts3rec_v8_14) FT_OFFSET(dstaddr, fts3rec_v8_14) FT_OFFSET(srcport, fts3rec_v8_14) FT_OFFSET(dstport, fts3rec_v8_14) FT_OFFSET(input, fts3rec_v8_14) FT_OFFSET(output, fts3rec_v8_14) FT_OFFSET(dst_mask, fts3rec_v8_14) FT_OFFSET(src_mask, fts3rec_v8_14) FT_OFFSET(engine_type, fts3rec_v8_14) FT_OFFSET(engine_id, fts3rec_v8_14) FT_OFFSET(tos, fts3rec_v8_14) FT_OFFSET(prot, fts3rec_v8_14) ret = 0; break; } break; case 1005: FT_OFFSET(unix_secs, fts3rec_v1005) FT_OFFSET(unix_nsecs, fts3rec_v1005) FT_OFFSET(sysUpTime, fts3rec_v1005) FT_OFFSET(exaddr, fts3rec_v1005) FT_OFFSET(srcaddr, fts3rec_v1005) FT_OFFSET(dstaddr, fts3rec_v1005) FT_OFFSET(nexthop, fts3rec_v1005) FT_OFFSET(input, fts3rec_v1005) FT_OFFSET(output, fts3rec_v1005) FT_OFFSET(dPkts, fts3rec_v1005) FT_OFFSET(dOctets, fts3rec_v1005) FT_OFFSET(First, fts3rec_v1005) FT_OFFSET(Last, fts3rec_v1005) FT_OFFSET(srcport, fts3rec_v1005) FT_OFFSET(dstport, fts3rec_v1005) FT_OFFSET(prot, fts3rec_v1005) FT_OFFSET(tos, fts3rec_v1005) FT_OFFSET(tcp_flags, fts3rec_v1005) FT_OFFSET(engine_type, fts3rec_v1005) FT_OFFSET(engine_id, fts3rec_v1005) FT_OFFSET(src_mask, fts3rec_v1005) FT_OFFSET(dst_mask, fts3rec_v1005) FT_OFFSET(src_as, fts3rec_v1005) FT_OFFSET(dst_as, fts3rec_v1005) FT_OFFSET(src_tag, fts3rec_v1005) FT_OFFSET(dst_tag, fts3rec_v1005) ret = 0; break; } /* switch */ o->xfields = ftrec_xfield(ftv); bcopy(ftv, &o->ftv, sizeof *ftv); return ret; } /* fts3rec_compute_offsets */ flow-tools-0.68/lib/ftstat.c0000644000076600007660000137755410240153674011520 /* * Copyright (c) 2002 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftstat.c,v 1.44 2005/05/10 15:48:12 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif #if HAVE_LL_STRTOUL #define strtoull strtoul #endif /* HAVE_LL_STRTOULL */ #define FMT_SYM_LEN 64 /* * **** Datastructures and other implementation notes *** * * Each report requires * * struct ftstat_rpt_n which is allocated dynamically at run time. * * ftstat_rpt_n_new() - allocated ftstat_rpt_n * ftstat_rpt_n_accum() - called for each flow * ftstat_rpt_n_calc() - final calculations after all flows * ftstat_rpt_n_dump() - report to file * ftstat_rpt_n_free() - free storage allocated by ftstat_rpt_n_new() * and others during the report run. * * The reports are grouped by a definition. Typically the caller will * invoke all reports in a group by calling ftstat_def_new(), * ftstat_def_accum(), ftstat_def_calc(), ftstat_def_dump(), and * ftstat_def_free(). * * The reports in the configuration file are stored in a linked * list of ftstat_rpt with the head in struct ftstat. * * The definitions in the configuration file are stored in a linked * list of ftstat_def with the head in struct ftstat. * * Each definition contains a linked list of ftstat_rpt_item * which points to a report (struct ftstat_rpt). * * Definitions reference reports. Initially the report name is stored * in the definition and then when EOF is reached resolve_reports() * is called to fill in the pointers. * * The config file can reference a filter file and a tag file. These * are loaded when the first tag or filter is specified. * * Each report can have a filter and a definition can have a filter * for all the reports. Configuration of both is allowed. * * Each definition can invoke a tag definition. (add tags) * * Each definition can invoke a mask definition. (replace masks) * * Each report type is defined by the enum ftstat_rpt_type * and then the struct typelookup (tlookup) is used to configure * all the other report specific data items such as its ASCII * name, fields required, function pointers to the report specific * functions, options supported, etc. * * Special note for the *ps (ie min_pps, max_pps, avg_pps, min_bps, * max_bps, avg_bps) calculations. A memory optimization exists that * removes the sizeof struct ftps bytes from the end of all the hash * and bucket allocations (for bucket, they're not allocated). This * means that struct _must_ exist or the subtraction bytes will end * up trashing real data. An example is ftchash_rec_int where the * ftps would never be used, yet it's there so the code that subtracts * it off works properly. * */ static struct fts3rec_offsets nfo; static u_int64 *sort_i64; static double *sort_idouble; #define DUMP_STD_OUT()\ if (rpt->out->fields & FT_STAT_FIELD_INDEX) {\ len += fmt_uint64(fmt_buf, rpt->idx++, FMT_JUST_LEFT);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_FIRST) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint32(fmt_buf+len, rpt->time_start, FMT_JUST_LEFT);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_LAST) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint32(fmt_buf+len, rpt->time_end, FMT_JUST_LEFT);\ comma = 1;\ }\ #define CHASH_DUMP_INIT(A,B)\ struct A *B;\ struct tally tally;\ char fmt_buf1[32], fmt_buf[1024];\ int len, fmt, sort_flags, sort_offset, comma;\ fmt = FMT_JUST_LEFT;\ fmt_buf1[0] = fmt_buf[0] = 0;\ bzero(&tally, sizeof tally);\ tally.t_recs = ftch->entries;\ if (rpt->out->options & FT_STAT_OPT_NAMES)\ fmt |= FMT_SYM;\ #define CHASH_DUMP_STD_SORT(A) \ if (rpt->out->sort_field == FT_STAT_FIELD_FLOWS) {\ sort_offset = offsetof(struct A, nflows);\ sort_flags |= FT_CHASH_SORT_64;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_OCTETS) {\ sort_offset = offsetof(struct A, noctets);\ sort_flags |= FT_CHASH_SORT_64;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_PACKETS) {\ sort_offset = offsetof(struct A, npackets);\ sort_flags |= FT_CHASH_SORT_64;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_DURATION) {\ sort_offset = offsetof(struct A, etime);\ sort_flags |= FT_CHASH_SORT_64;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_AVG_PPS) {\ sort_offset = offsetof(struct A, ps.avg_pps);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_MIN_PPS) {\ sort_offset = offsetof(struct A, ps.min_pps);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_MAX_PPS) {\ sort_offset = offsetof(struct A, ps.max_pps);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_AVG_BPS) {\ sort_offset = offsetof(struct A, ps.avg_bps);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_MIN_BPS) {\ sort_offset = offsetof(struct A, ps.min_bps);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_MAX_BPS) {\ sort_offset = offsetof(struct A, ps.max_bps);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else {\ fterr_errx(1,"chash_xxx_dump(): internal error");\ } #define CHASH_STD_OUT(A,B)\ if ((rpt->out->options & FT_STAT_OPT_TALLY) && tally.rt_recs &&\ (!(tally.rt_recs % rpt->out->tally))) {\ if (rpt->all_fields & FT_STAT_FIELD_PS)\ fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f %%avg-bps=%3.3f %%avg-pps=%3.3f\n",\ ((double)tally.rt_recs/(double)tally.t_recs)*100,\ ((double)tally.rt_flows/(double)rpt->t_flows)*100,\ ((double)tally.rt_octets/(double)rpt->t_octets)*100,\ ((double)tally.rt_packets/(double)rpt->t_packets)*100,\ (((double)tally.ravg_bps/(double)tally.rt_frecs)/\ (double)rpt->avg_bps)*100,\ (((double)tally.ravg_pps/(double)tally.rt_frecs)/\ (double)rpt->avg_pps)*100);\ else\ fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f\n",\ ((double)tally.rt_recs/(double)tally.t_recs)*100,\ ((double)tally.rt_flows/(double)rpt->t_flows)*100,\ ((double)tally.rt_octets/(double)rpt->t_octets)*100,\ ((double)tally.rt_packets/(double)rpt->t_packets)*100);\ \ } /* tally */\ tally.rt_flows += A->nflows;\ tally.rt_octets += A->noctets;\ tally.rt_packets += A->npackets;\ tally.rt_recs ++;\ tally.rt_frecs += A->nrecs;\ if (rpt->all_fields & FT_STAT_FIELD_PS) {\ tally.ravg_bps += A->ps.avg_bps * A->nrecs;\ tally.ravg_pps += A->ps.avg_pps * A->nrecs;\ }\ \ if (rpt->out->fields & FT_STAT_FIELD_FLOWS) {\ if (B) fmt_buf[len++] = ',';\ len += fmt_uint64(fmt_buf+len, A->nflows, FMT_JUST_LEFT);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_OCTETS) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint64(fmt_buf+len, A->noctets, FMT_JUST_LEFT);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_PACKETS) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint64(fmt_buf+len, A->npackets, FMT_JUST_LEFT);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_DURATION) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint64(fmt_buf+len, A->etime, FMT_JUST_LEFT);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_AVG_BPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f", A->ps.avg_bps);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MIN_BPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f", A->ps.min_bps);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MAX_BPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f", A->ps.max_bps);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_AVG_PPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f", A->ps.avg_pps);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MIN_PPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f", A->ps.min_pps);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MAX_PPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f", A->ps.max_pps);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_FRECS) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint64(fmt_buf+len, A->nrecs, FMT_JUST_LEFT);\ comma = 1;\ }\ fmt_buf[len++] = '\n';\ fmt_buf[len] = 0;\ fputs(fmt_buf, fp);\ if (rpt->out->records && (tally.rt_recs == rpt->out->records)) {\ fprintf(fp, "# stop, hit record limit.\n");\ break;\ } #define CHASH_STDP_OUT(A,B)\ if ((rpt->out->options & FT_STAT_OPT_TALLY) && tally.rt_recs &&\ (!(tally.rt_recs % rpt->out->tally))) {\ if (rpt->all_fields & FT_STAT_FIELD_PS)\ fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f %%avg-bps=%3.3f %%avg-pps=%3.3f\n",\ ((double)tally.rt_recs/(double)tally.t_recs)*100,\ ((double)tally.rt_flows/(double)rpt->t_flows)*100,\ ((double)tally.rt_octets/(double)rpt->t_octets)*100,\ ((double)tally.rt_packets/(double)rpt->t_packets)*100,\ (((double)tally.ravg_bps/(double)tally.rt_frecs)/\ (double)rpt->avg_bps)*100,\ (((double)tally.ravg_pps/(double)tally.rt_frecs)/\ (double)rpt->avg_pps)*100);\ else\ fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f\n",\ ((double)tally.rt_recs/(double)tally.t_recs)*100,\ ((double)tally.rt_flows/(double)rpt->t_flows)*100,\ ((double)tally.rt_octets/(double)rpt->t_octets)*100,\ ((double)tally.rt_packets/(double)rpt->t_packets)*100);\ \ } /* tally */\ tally.rt_flows += A->nflows;\ tally.rt_octets += A->noctets;\ tally.rt_packets += A->npackets;\ tally.ravg_bps += A->ps.avg_bps * A->nrecs;\ tally.ravg_pps += A->ps.avg_pps * A->nrecs;\ tally.rt_recs ++;\ tally.rt_frecs += A->nrecs;\ \ if (rpt->out->fields & FT_STAT_FIELD_FLOWS) {\ if (B) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->nflows / (double)rpt->t_flows)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_OCTETS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->noctets / (double)rpt->t_octets)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_PACKETS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->npackets / (double)rpt->t_packets)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_DURATION) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->etime / (double)rpt->t_duration)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_AVG_BPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->ps.avg_bps / (double)rpt->avg_bps)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MIN_BPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->ps.min_bps / (double)rpt->min_bps)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MAX_BPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->ps.max_bps / (double)rpt->max_bps)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_AVG_PPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->ps.avg_pps / (double)rpt->avg_pps)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MIN_PPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->ps.min_pps / (double)rpt->min_pps)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_MAX_PPS) {\ if (comma) fmt_buf[len++] = ',';\ len += sprintf(fmt_buf+len, "%f",\ ((double)A->ps.max_pps / (double)rpt->max_pps)*100.0);\ comma = 1;\ }\ if (rpt->out->fields & FT_STAT_FIELD_FRECS) {\ if (comma) fmt_buf[len++] = ',';\ len += fmt_uint64(fmt_buf+len, A->nrecs, FMT_JUST_LEFT);\ comma = 1;\ }\ fmt_buf[len++] = '\n';\ fmt_buf[len] = 0;\ fputs(fmt_buf, fp);\ if (rpt->out->records && (tally.rt_recs == rpt->out->records)) {\ fprintf(fp, "# stop, hit record limit.\n");\ break;\ } #define NEXT_WORD(A,B)\ for (;;) {\ B = strsep(A, " \t");\ if ((B && *B != 0) || (!B))\ break;\ }\ /* * A = ftstat_rpt_n (struct to allocate) * B = rptn (local var name for A) * C = hash bits * D = size of hash record (passed to sizeof (struct) * E = size of hash key * F = num hash recs in a chunk * */ #define STD_NEW_HASH(A,B,C,D,E,F)\ struct A *B;\ int slen;\ if (!(B = (struct A*)malloc(sizeof (*B)))) {\ fterr_warnx("malloc(rpt): failed");\ return (struct A*)0L;\ }\ bzero(B, sizeof *B);\ if (rpt->all_fields & FT_STAT_FIELD_PS)\ slen = sizeof (struct D);\ else\ slen = sizeof (struct D) - sizeof (struct ftps);\ if (!(B->ftch = ftchash_new(C, slen, E, F))) {\ free(B);\ fterr_warnx("ftchash_new(): failed");\ return (struct A*)0L;\ }\ return B;\ /* * A = ftstat_rpt_n (struct to allocate) * B = rptn (local var name for A) * C = bucket size * */ #define STD_NEW_BUCKET(A,B,C,D)\ struct A *B;\ if (!(B = (struct A*)malloc(sizeof (*B)))) {\ fterr_warnx("malloc(rpt): failed");\ return (struct A*)0L;\ }\ bzero(B, sizeof *B);\ if (bucket_alloc(&B->bucket, (u_int32)C, D)) {\ fterr_warnx("bucket_alloc(): failed");\ free(B);\ return (struct A*)0L;\ }\ return B;\ #define STD_CALC_BUCKET(A,B,C)\ struct A *B;\ register int i;\ if (rpt->t_recs)\ rpt->avg_pps /= (double)rpt->t_recs;\ if (rpt->t_recs)\ rpt->avg_bps /= (double)rpt->t_recs;\ B = rpt->data;\ for (i = 0; i < C; ++i) {\ if ((B->bucket.duration[i]) && (rpt->all_fields & FT_STAT_FIELD_PS)) {\ B->bucket.avg_pps[i] /= (double)B->bucket.recs[i];\ B->bucket.avg_bps[i] /= (double)B->bucket.recs[i];\ }\ if (B->bucket.packets[i])\ rpt->recs ++;\ }\ return 0;\ /* * A = ftstat_rpt_n * B = rptn (local var name for A) * C = ftchash_rec_x * D = ftch_recn (local var name for C) * note rpt_66, 67 have this expanded by hand */ #define STD_CALC_HASH(A,B,C,D)\ struct C *D;\ struct A *B;\ B = rpt->data;\ if (rpt->t_recs)\ rpt->avg_pps /= (double)rpt->t_recs;\ if (rpt->t_recs)\ rpt->avg_bps /= (double)rpt->t_recs;\ rpt->recs = B->ftch->entries;\ if (rpt->all_fields & FT_STAT_FIELD_PS) {\ ftchash_first(B->ftch);\ while ((D = ftchash_foreach(B->ftch))) {\ if (D->etime) {\ D->ps.avg_pps /= (double)D->nrecs;\ D->ps.avg_bps /= (double)D->nrecs;\ }\ }\ }\ return 0; #define STD_FREE_BUCKET(A)\ if (A) {\ bucket_free(&A->bucket);\ free(A);\ }\ #define STD_FREE_HASH(A)\ if (A) {\ if (A->ftch)\ ftchash_free(A->ftch);\ free (A);\ }\ /* * A = ftstat_rpt_n * B = rptn (local var name for A) * D = size of bucket * KEY* = ascii key name */ #define STD_DUMP_BUCKET(A,B,C,SYM,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4,KEY5,KEY6);\ bucket_dump1(fp, rpt, &B->bucket, C, SYM);\ return 0;\ /* * A = ftstat_rpt_n * B = rptn (local var name for A) * C = hash dump function * KEY* = ascii key name */ #define STD_DUMP_HASH0(A,B,C,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch);\ return 0; #define STD_DUMP_HASH0P(A,B,C,D,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, D);\ return 0; #define STD_DUMP_HASH1(A,B,C,SYM1,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, SYM1);\ return 0; #define STD_DUMP_HASH1P(A,B,C,D,SYM1,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, SYM1, D);\ return 0; #define STD_DUMP_HASH2(A,B,C,SYM1,SYM2,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, SYM1, SYM2);\ return 0; #define STD_DUMP_HASH2P(A,B,C,D,SYM1,SYM2,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, SYM1, SYM2, D);\ return 0; #define STD_DUMP_HASH3(A,B,C,SYM1,SYM2,SYM3,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, SYM1, SYM2, SYM3);\ return 0; #define STD_DUMP_HASH4(A,B,C,SYM1,SYM2,SYM3,SYM4,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6)\ struct A *B;\ B = rpt->data;\ recn_dump(fp, rpt->out->fields, KEY, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6);\ C(fp, rpt, B->ftch, SYM1, SYM2, SYM3,SYM4);\ return 0; #define STD_ACCUM\ cur.dFlows64 = 1;\ FT_RECGET_LAST(cur,rec,*fo);\ FT_RECGET_FIRST(cur,rec,*fo);\ FT_RECGET64_DPKTS(cur,rec,*fo);\ FT_RECGET64_DOCTETS(cur,rec,*fo);\ FT_RECGET_UNIX_SECS(cur,rec,*fo);\ if (fo->xfields & FT_XFIELD_DFLOWS) {\ FT_RECGET64_DFLOWS(cur,rec,*fo);\ } else {\ cur.dFlows64 = 1;\ }\ if (rpt->scale) {\ cur.dPkts64 *= rpt->scale;\ cur.dOctets64 *= rpt->scale;\ }\ if (!cur.dPkts64) {\ rpt->t_ignores ++;\ return 0;\ }\ if (cur.unix_secs > rpt->time_end)\ rpt->time_end = cur.unix_secs;\ if (cur.unix_secs < rpt->time_start)\ rpt->time_start = cur.unix_secs;\ {\ duration_tmp = (cur.Last - cur.First);\ if (duration_tmp) {\ rpt->t_recs ++;\ rpt->t_duration += duration_tmp;\ if (rpt->all_fields & FT_STAT_FIELD_PS) {\ pps_tmp = (double)cur.dPkts64/((double)(duration_tmp)/1000.0);\ bps_tmp = (double)cur.dOctets64*8/((double)(duration_tmp)/1000.0);\ if (pps_tmp > rpt->max_pps)\ rpt->max_pps = pps_tmp;\ if ((pps_tmp < rpt->min_pps) || (!rpt->min_pps))\ rpt->min_pps = pps_tmp;\ rpt->avg_pps += pps_tmp;\ if (bps_tmp > rpt->max_bps)\ rpt->max_bps = bps_tmp;\ if ((bps_tmp < rpt->min_bps) || (!rpt->min_bps))\ rpt->min_bps = bps_tmp;\ rpt->avg_bps += bps_tmp;\ }\ }\ }\ rpt->t_flows += cur.dFlows64;\ rpt->t_octets += cur.dOctets64;\ rpt->t_packets += cur.dPkts64;\ #define STD_ACCUM_BUCKET1(A,B)\ struct fts3rec_all2 cur;\ struct A *B;\ u_int32 duration_tmp;\ double bps_tmp, pps_tmp;\ B = rpt->data;\ STD_ACCUM; #define STD_ACCUM_BUCKET2(A,B)\ if (duration_tmp) {\ A.duration[B] += duration_tmp;\ A.recs[B] ++;\ if (rpt->all_fields & FT_STAT_FIELD_PS) {\ if (pps_tmp > A.max_pps[B])\ A.max_pps[B] = pps_tmp;\ if ((pps_tmp < A.min_pps[B]) || (!A.min_pps[B]))\ A.min_pps[B] = pps_tmp;\ A.avg_pps[B] += pps_tmp;\ if (bps_tmp > A.max_bps[B])\ A.max_bps[B] = bps_tmp;\ if ((bps_tmp < A.min_bps[B]) || (!A.min_bps[B]))\ A.min_bps[B] = bps_tmp;\ A.avg_bps[B] += bps_tmp;\ }\ }\ A.flows[B] += cur.dFlows64;\ A.octets[B] += cur.dOctets64;\ A.packets[B] += cur.dPkts64;\ #define STD_ACCUM_HASH1(A,B,C,D,E)\ struct fts3rec_all2 cur;\ struct C D, *E;\ struct A *B;\ u_int32 hash;\ u_int32 duration_tmp;\ double bps_tmp, pps_tmp;\ bzero(&D, sizeof D);\ B = rpt->data;\ STD_ACCUM; #define STD_ACCUM_HASH2(A,B,C)\ if (!(C = ftchash_update(A->ftch, &B, hash))) {\ fterr_warnx("ftch_update(): failed");\ return -1;\ }\ STD_ACCUM_INCP(C);\ #define STD_ACCUM_INCP(A)\ if (duration_tmp) {\ A->etime += (duration_tmp);\ A->nrecs ++;\ if (rpt->all_fields & FT_STAT_FIELD_PS) {\ if (pps_tmp > A->ps.max_pps)\ A->ps.max_pps = pps_tmp;\ if ((pps_tmp < A->ps.min_pps) || (!A->ps.min_pps))\ A->ps.min_pps = pps_tmp;\ A->ps.avg_pps += pps_tmp;\ if (bps_tmp > A->ps.max_bps)\ A->ps.max_bps = bps_tmp;\ if ((bps_tmp < A->ps.min_bps) || (!A->ps.min_bps))\ A->ps.min_bps = bps_tmp;\ A->ps.avg_bps += bps_tmp;\ }\ }\ A->nflows += cur.dFlows64;\ A->noctets += cur.dOctets64;\ A->npackets += cur.dPkts64;\ #define STD_CALC\ if (rpt->t_recs)\ rpt->avg_pps /= (double)rpt->t_recs;\ if (rpt->t_recs)\ rpt->avg_bps /= (double)rpt->t_recs; #define STD_DUMP_TOTALS_HEADER\ if (ftsrpt->all_fields & FT_STAT_FIELD_PS)\ fprintf(fp, "# rec1: records,ignores,flows,octets,packets,duration,avg_bps,min_bps,max_bps,avg_pps,min_pps,max_pps\n");\ else\ fprintf(fp, "# rec1: records,ignores,flows,octets,packets,duration\n");\ #define STD_DUMP_TOTALS_VAL\ fmt_uint64(fmt_buf, ftsrpt->recs, FMT_JUST_LEFT);\ strcat(fmt_buf, ",");\ fmt_uint64(fmt_tmp, ftsrpt->t_ignores, FMT_JUST_LEFT);\ strcat(fmt_buf, fmt_tmp);\ strcat(fmt_buf, ",");\ fmt_uint64(fmt_tmp, ftsrpt->t_flows, FMT_JUST_LEFT);\ strcat(fmt_buf, fmt_tmp);\ strcat(fmt_buf, ",");\ fmt_uint64(fmt_tmp, ftsrpt->t_octets, FMT_JUST_LEFT);\ strcat(fmt_buf, fmt_tmp);\ strcat(fmt_buf, ",");\ fmt_uint64(fmt_tmp, ftsrpt->t_packets, FMT_JUST_LEFT);\ strcat(fmt_buf, fmt_tmp);\ strcat(fmt_buf, ",");\ fmt_uint64(fmt_tmp, ftsrpt->t_duration, FMT_JUST_LEFT);\ strcat(fmt_buf, fmt_tmp);\ if (ftsrpt->all_fields & FT_STAT_FIELD_PS) {\ fprintf(fp, "%s,%f,%f,%f,%f,%f,%f\n", fmt_buf,\ ftsrpt->avg_bps, ftsrpt->min_bps, ftsrpt->max_bps,\ ftsrpt->avg_pps, ftsrpt->min_pps, ftsrpt->max_pps);\ } else {\ fprintf(fp, "%s\n", fmt_buf);\ }\ enum ftstat_parse_state { PARSE_STATE_UNSET, PARSE_STATE_REPORT, PARSE_STATE_DEFINITION, PARSE_STATE_OUTPUT }; #define FT_STAT_OPT_PERCENT 0x001 #define FT_STAT_OPT_NAMES 0x002 #define FT_STAT_OPT_SORT 0x004 #define FT_STAT_OPT_HEADER 0x008 #define FT_STAT_OPT_XHEADER 0x010 #define FT_STAT_OPT_TOTALS 0x020 #define FT_STAT_OPT_TALLY 0x080 #define FT_STAT_OPT_TAG_MASK 0x100 #define FT_STAT_OPT_SRC_PREFIX_LEN 0x200 #define FT_STAT_OPT_SRC_PREFIX_MASK 0x400 #define FT_STAT_OPT_DST_PREFIX_LEN 0x800 #define FT_STAT_OPT_DST_PREFIX_MASK 0x1000 #define FT_STAT_OPT_ALL 0x16FF #define FT_STAT_OPT_GENERIC 0x00FF #define FT_STAT_OPT_GENERIC_IP_ADDR 0x07FF #define FT_STAT_OPT_NONE 0x0 #define FT_STAT_FIELD_INDEX 0x00000001 #define FT_STAT_FIELD_FIRST 0x00000002 #define FT_STAT_FIELD_LAST 0x00000004 #define FT_STAT_FIELD_FLOWS 0x00000010 #define FT_STAT_FIELD_OCTETS 0x00000020 #define FT_STAT_FIELD_PACKETS 0x00000040 #define FT_STAT_FIELD_DURATION 0x00000080 #define FT_STAT_FIELD_AVG_PPS 0x00000100 #define FT_STAT_FIELD_AVG_BPS 0x00000200 #define FT_STAT_FIELD_MAX_PPS 0x00000400 #define FT_STAT_FIELD_MAX_BPS 0x00000800 #define FT_STAT_FIELD_MIN_PPS 0x00001000 #define FT_STAT_FIELD_MIN_BPS 0x00002000 #define FT_STAT_FIELD_OTHER 0x00004000 #define FT_STAT_FIELD_KEY 0x00008000 /* reports with a single key */ #define FT_STAT_FIELD_KEY1 0x00010000 #define FT_STAT_FIELD_KEY2 0x00020000 #define FT_STAT_FIELD_KEY3 0x00040000 #define FT_STAT_FIELD_KEY4 0x00080000 #define FT_STAT_FIELD_KEY5 0x00100000 #define FT_STAT_FIELD_KEY6 0x00200000 #define FT_STAT_FIELD_COUNT 0x01000000 /* reports that do a count */ #define FT_STAT_FIELD_FRECS 0x02000000 /* flow records in report line */ #define FT_STAT_FIELD_PPS 0x00001500 /* any *_PPS */ #define FT_STAT_FIELD_BPS 0x00002A00 /* any *_BPS */ #define FT_STAT_FIELD_PS (FT_STAT_FIELD_PPS|FT_STAT_FIELD_BPS) #define FT_STAT_FIELD_GENERIC 0x0200FFF7 /* most reports */ #define FT_STAT_FIELD_GENERIC2 0x02037FF7 /* reports with 2 key fields */ #define FT_STAT_FIELD_GENERIC3 0x02077FF7 /* reports with 3 key fields */ #define FT_STAT_FIELD_GENERIC4 0x020F7FF7 /* reports with 4 key fields */ #define FT_STAT_FIELD_GENERIC5 0x021F7FF7 /* reports with 5 key fields */ #define FT_STAT_FIELD_GENERIC6 0x023F7FF7 /* reports with 6 key fields */ #define FT_STAT_SORT_ASCEND 0x1 #define FT_STAT_SORT_DESCEND 0x2 struct tally { u_int64 rt_flows, rt_octets, rt_packets, rt_recs, t_recs; double ravg_bps, ravg_pps, rt_frecs; }; struct flow_bucket { u_int64 *recs, *flows, *octets, *packets, *duration; double *avg_pps, *avg_bps; double *min_pps, *min_bps; double *max_pps, *max_bps; u_int32 *index; }; /* flow_bucket */ struct line_parser { enum ftstat_parse_state state; struct ftstat_rpt *cur_rpt; struct ftstat_def *cur_def; struct ftstat_rpt_out *cur_rpt_out; int lineno; char *buf, *fname, *word; }; struct jump { char *name; enum ftstat_parse_state state; int (*func)(struct line_parser *lp, struct ftstat *ftstat); }; struct typelookup { char *name; void* (*f_new)(); void* (*f_accum)(); void* (*f_calc)(); void* (*f_dump)(); void* (*f_free)(); int allowed_fields; /* FT_STAT_FIELD_* */ int allowed_options;/* FT_STAT_OPT_* */ u_int64 xfields; /* FT_XFIELD_* */ }; struct ftstat_rpt_1 { u_int64 time; /* total time in 1/1000 of flows */ double aflowtime; /* average time of flow */ double aps; /* average packet size */ double afs; /* average flow size */ double apf; /* average packets per flow */ double fps; /* average flows per second */ double fps_real; /* average flows per second (realtime) */ u_int64 start; /* earliest flow time */ u_int64 end; /* latest flow time */ u_int32 time_start; /* earliest flow (realtime) */ u_int32 time_end; /* last flow (realtime) */ u_int32 time_real; /* realtime duration */ /* average packet sizes */ u_int64 psize32; /* bytes/packet 1 <= p <= 32 */ u_int64 psize64; /* bytes/packet 32 < p <= 64 */ u_int64 psize96; u_int64 psize128; u_int64 psize160; u_int64 psize192; u_int64 psize224; u_int64 psize256; u_int64 psize288; u_int64 psize320; u_int64 psize352; u_int64 psize384; u_int64 psize416; u_int64 psize448; u_int64 psize480; u_int64 psize512; u_int64 psize544; u_int64 psize576; u_int64 psize1024; u_int64 psize1536; u_int64 psize2048; u_int64 psize2560; u_int64 psize3072; u_int64 psize3584; u_int64 psize4096; u_int64 psize4608; /* packets per flow */ u_int64 fpsize1; /* packets/flow = 1 */ u_int64 fpsize2; /* packets/flow = 2 */ u_int64 fpsize4; /* packets/flow 2 < p <= 4 */ u_int64 fpsize8; /* packets/flow 4 < p <= 8 */ u_int64 fpsize12; u_int64 fpsize16; u_int64 fpsize20; u_int64 fpsize24; u_int64 fpsize28; u_int64 fpsize32; u_int64 fpsize36; u_int64 fpsize40; u_int64 fpsize44; u_int64 fpsize48; u_int64 fpsize52; u_int64 fpsize60; u_int64 fpsize100; u_int64 fpsize200; u_int64 fpsize300; u_int64 fpsize400; u_int64 fpsize500; u_int64 fpsize600; u_int64 fpsize700; u_int64 fpsize800; u_int64 fpsize900; u_int64 fpsize_other; /* packets/flow 200 < p */ /* octets per flow */ u_int64 fosize32; /* octets/flow 1 <= p <= 32 */ u_int64 fosize64; /* octets/flow 32 < p <= 64 */ u_int64 fosize128; /* octets/flow 64 < p <= 128 */ u_int64 fosize256; /* octets/flow 128 < p <= 256 */ u_int64 fosize512; u_int64 fosize1280; u_int64 fosize2048; u_int64 fosize2816; u_int64 fosize3584; u_int64 fosize4352; u_int64 fosize5120; u_int64 fosize5888; u_int64 fosize6656; u_int64 fosize7424; u_int64 fosize8192; u_int64 fosize8960; u_int64 fosize9728; u_int64 fosize10496; u_int64 fosize11264; u_int64 fosize12032; u_int64 fosize12800; u_int64 fosize13568; u_int64 fosize14336; u_int64 fosize15104; u_int64 fosize15872; u_int64 fosize_other; /* octets/flow 15872 < p */ /* time per flow */ u_int64 ftime10; /* time/flow 1 <= p <= 10 */ u_int64 ftime50; /* time/flow 10 < p <= 50 */ u_int64 ftime100; u_int64 ftime200; u_int64 ftime500; u_int64 ftime1000; u_int64 ftime2000; u_int64 ftime3000; u_int64 ftime4000; u_int64 ftime5000; u_int64 ftime6000; u_int64 ftime7000; u_int64 ftime8000; u_int64 ftime9000; u_int64 ftime10000; u_int64 ftime12000; u_int64 ftime14000; u_int64 ftime16000; u_int64 ftime18000; u_int64 ftime20000; u_int64 ftime22000; u_int64 ftime24000; u_int64 ftime26000; u_int64 ftime28000; u_int64 ftime30000; u_int64 ftime_other; /* time/flow 2000 < p */ }; struct ftstat_rpt_2 { int foo; /* malloc place holder */ }; struct ftstat_rpt_3 { struct ftchash *ftch; }; struct ftstat_rpt_4 { struct ftchash *ftch; }; struct ftstat_rpt_5 { struct ftchash *ftch; }; struct ftstat_rpt_6 { struct flow_bucket bucket; }; struct ftstat_rpt_7 { struct flow_bucket bucket; }; struct ftstat_rpt_8 { struct ftchash *ftch; }; struct ftstat_rpt_9 { struct ftchash *ftch; }; struct ftstat_rpt_10 { struct ftchash *ftch; }; struct ftstat_rpt_11 { struct flow_bucket bucket; }; struct ftstat_rpt_12 { struct flow_bucket bucket; }; struct ftstat_rpt_13 { struct flow_bucket bucket; }; struct ftstat_rpt_14 { struct ftchash *ftch; }; struct ftstat_rpt_15 { struct ftchash *ftch; }; struct ftstat_rpt_16 { struct ftchash *ftch; }; struct ftstat_rpt_17 { struct ftchash *ftch; }; struct ftstat_rpt_18 { struct ftchash *ftch; }; struct ftstat_rpt_19 { struct flow_bucket bucket; }; struct ftstat_rpt_20 { struct flow_bucket bucket; }; struct ftstat_rpt_21 { struct ftchash *ftch; }; struct ftstat_rpt_22 { struct flow_bucket bucket; }; struct ftstat_rpt_23 { struct flow_bucket bucket; }; struct ftstat_rpt_24 { struct ftchash *ftch; }; struct ftstat_rpt_25 { struct ftchash *ftch; }; struct ftstat_rpt_26 { struct ftchash *ftch; }; struct ftstat_rpt_27 { struct ftchash *ftch; }; struct ftstat_rpt_28 { struct ftchash *ftch; }; struct ftstat_rpt_29 { struct ftchash *ftch; }; struct ftstat_rpt_30 { struct ftchash *ftch; }; struct ftstat_rpt_31 { struct ftchash *ftch; }; struct ftstat_rpt_32 { struct ftchash *ftch; }; struct ftstat_rpt_33 { struct ftchash *ftch; }; struct ftstat_rpt_34 { struct ftchash *ftch; }; struct ftstat_rpt_35 { struct ftchash *ftch; }; struct ftstat_rpt_36 { struct ftchash *ftch; }; struct ftstat_rpt_37 { struct ftchash *ftch; }; struct ftstat_rpt_38 { struct ftchash *ftch; }; struct ftstat_rpt_39 { struct ftchash *ftch; }; struct ftstat_rpt_40 { struct ftchash *ftch; }; struct ftstat_rpt_41 { struct ftchash *ftch; }; struct ftstat_rpt_42 { struct ftchash *ftch; }; struct ftstat_rpt_43 { struct ftchash *ftch; }; struct ftstat_rpt_44 { struct ftchash *ftch; }; struct ftstat_rpt_45 { struct ftchash *ftch; }; struct ftstat_rpt_46 { struct flow_bucket bucket; }; struct ftstat_rpt_47 { struct flow_bucket bucket; }; struct ftstat_rpt_48 { struct ftchash *ftch; }; struct ftstat_rpt_49 { struct ftchash *ftch; }; struct ftstat_rpt_50 { struct ftchash *ftch; }; struct ftstat_rpt_51 { struct ftchash *ftch; }; struct ftstat_rpt_52 { struct ftchash *ftch; }; struct ftstat_rpt_53 { struct ftchash *ftch; }; struct ftstat_rpt_54 { struct ftchash *ftch; }; struct ftstat_rpt_55 { struct ftchash *ftch; }; struct ftstat_rpt_56 { struct ftchash *ftch; }; struct ftstat_rpt_57 { struct ftchash *ftch; }; struct ftstat_rpt_58 { struct ftchash *ftch; }; struct ftstat_rpt_59 { struct ftchash *ftch; }; struct ftstat_rpt_60 { struct ftchash *ftch; }; struct ftstat_rpt_61 { struct ftchash *ftch; }; struct ftstat_rpt_62 { struct ftchash *ftch; }; struct ftstat_rpt_63 { struct ftchash *ftch; }; struct ftstat_rpt_64 { struct ftchash *ftch; }; struct ftstat_rpt_65 { struct flow_bucket bucket; }; struct ftstat_rpt_66 { struct ftchash *ftch; }; struct ftstat_rpt_67 { struct ftchash *ftch; }; struct ftstat_rpt_68 { struct ftchash *ftch; }; struct ftstat_rpt_69 { struct ftchash *ftch; }; struct ftstat_rpt_70 { struct ftchash *ftch; }; struct ftstat_rpt_71 { struct ftchash *ftch; }; struct ftstat_rpt_72 { struct ftchash *ftch; }; struct ftstat_rpt_73 { struct ftchash *ftch; }; struct ftstat_rpt_74 { struct ftchash *ftch; }; struct ftstat_rpt_75 { struct ftchash *ftch; }; struct ftstat_rpt_76 { struct ftchash *ftch; }; struct ftstat_rpt_77 { struct ftchash *ftch; }; struct ftstat_rpt_78 { struct ftchash *ftch; }; int parse_rpt(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_type(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_filter(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_scale(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_tag_mask(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_ip_src_addr_fmt(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_ip_dst_addr_fmt(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_output(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_options(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_sort(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_fields(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_format(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_path(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_records(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_tally(struct line_parser *lp, struct ftstat *ftstat); int parse_rpt_out_time(struct line_parser *lp, struct ftstat *ftstat); int parse_def(struct line_parser *lp, struct ftstat *ftstat); int parse_def_mask(struct line_parser *lp, struct ftstat *ftstat); int parse_def_tag(struct line_parser *lp, struct ftstat *ftstat); int parse_def_filter(struct line_parser *lp, struct ftstat *ftstat); int parse_def_report(struct line_parser *lp, struct ftstat *ftstat); int parse_def_time_series(struct line_parser *lp, struct ftstat *ftstat); int parse_include_tag(struct line_parser *lp, struct ftstat *ftstat); int parse_include_filter(struct line_parser *lp, struct ftstat *ftstat); int parse_include_mask(struct line_parser *lp, struct ftstat *ftstat); void ftstat_free(struct ftstat *ftstat); static int load_masks(struct ftstat *ftstat); static int load_filters(struct ftstat *ftstat); static int load_tags(struct ftstat *ftstat); static int resolve_reports(struct ftstat *ftstat); static int dump_ascii_header(FILE *fp, struct ftio *ftio, struct ftstat_def *active_def, struct ftstat_rpt *rpt); static int recn_dump(FILE *fp, int fields, char *key, char *key1, char *key2, char *key3, char *key4, char *key5, char *key6); static int sort_cmp64(const void *a, const void *b); static int sort_cmp_double(const void *a, const void *b); void bucket_free(struct flow_bucket *b); int bucket_alloc(struct flow_bucket *b, u_int32 n, struct ftstat_rpt *rpt); static int bucket_dump1(FILE *fp, struct ftstat_rpt *rpt, struct flow_bucket *b, u_int32 nindex, char *symfile); static int chash_c64_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch); static int chash_c32_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1); static int chash_c322_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2); static int chash_c162_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2); static int chash_c163_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2, char *sym3); static int chash_c164_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2, char *sym3, char *sym4); static int chash_ip_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch); static int chash_prefix_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, int f1); static int chash_prefix2_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch); static int chash_prefix16_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, int f1); static int chash_prefix162_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2, int f1 ); static int chash_prefix216_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1); static int chash_prefix2162_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2); static int chash_flow1_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2); static int chash_flow12_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1); static int chash_prefixh_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, int f1); static int chash_prefix_tag_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, int f1); static int chash_prefix2tag2_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1); static int chash_int_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch); struct ftstat_rpt_1 *ftstat_rpt_1_new(struct ftstat_rpt *rpt); int ftstat_rpt_1_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_1_calc(struct ftstat_rpt *rpt); int ftstat_rpt_1_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_1_free(struct ftstat_rpt_1 *rpt); struct ftstat_rpt_2 *ftstat_rpt_2_new(struct ftstat_rpt *rpt); int ftstat_rpt_2_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_2_calc(struct ftstat_rpt *rpt); int ftstat_rpt_2_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_2_free(struct ftstat_rpt_2 *rpt); struct ftstat_rpt_3 *ftstat_rpt_3_new(struct ftstat_rpt *rpt); int ftstat_rpt_3_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_3_calc(struct ftstat_rpt *rpt); int ftstat_rpt_3_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_3_free(struct ftstat_rpt_3 *rpt); struct ftstat_rpt_4 *ftstat_rpt_4_new(struct ftstat_rpt *rpt); int ftstat_rpt_4_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_4_calc(struct ftstat_rpt *rpt); int ftstat_rpt_4_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_4_free(struct ftstat_rpt_4 *rpt); struct ftstat_rpt_5 *ftstat_rpt_5_new(struct ftstat_rpt *rpt); int ftstat_rpt_5_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_5_calc(struct ftstat_rpt *rpt); int ftstat_rpt_5_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_5_free(struct ftstat_rpt_5 *rpt); struct ftstat_rpt_6 *ftstat_rpt_6_new(struct ftstat_rpt *rpt); int ftstat_rpt_6_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_6_calc(struct ftstat_rpt *rpt); int ftstat_rpt_6_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_6_free(struct ftstat_rpt_6 *rpt); struct ftstat_rpt_7 *ftstat_rpt_7_new(struct ftstat_rpt *rpt); int ftstat_rpt_7_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_7_calc(struct ftstat_rpt *rpt); int ftstat_rpt_7_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_7_free(struct ftstat_rpt_7 *rpt); struct ftstat_rpt_8 *ftstat_rpt_8_new(struct ftstat_rpt *rpt); int ftstat_rpt_8_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_8_calc(struct ftstat_rpt *rpt); int ftstat_rpt_8_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_8_free(struct ftstat_rpt_8 *rpt); struct ftstat_rpt_9 *ftstat_rpt_9_new(struct ftstat_rpt *rpt); int ftstat_rpt_9_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_9_calc(struct ftstat_rpt *rpt); int ftstat_rpt_9_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_9_free(struct ftstat_rpt_9 *rpt); struct ftstat_rpt_10 *ftstat_rpt_10_new(struct ftstat_rpt *rpt); int ftstat_rpt_10_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_10_calc(struct ftstat_rpt *rpt); int ftstat_rpt_10_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_10_free(struct ftstat_rpt_10 *rpt); struct ftstat_rpt_11 *ftstat_rpt_11_new(struct ftstat_rpt *rpt); int ftstat_rpt_11_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_11_calc(struct ftstat_rpt *rpt); int ftstat_rpt_11_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_11_free(struct ftstat_rpt_11 *rpt); struct ftstat_rpt_12 *ftstat_rpt_12_new(struct ftstat_rpt *rpt); int ftstat_rpt_12_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_12_calc(struct ftstat_rpt *rpt); int ftstat_rpt_12_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_12_free(struct ftstat_rpt_12 *rpt); struct ftstat_rpt_13 *ftstat_rpt_13_new(struct ftstat_rpt *rpt); int ftstat_rpt_13_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_13_calc(struct ftstat_rpt *rpt); int ftstat_rpt_13_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_13_free(struct ftstat_rpt_13 *rpt); struct ftstat_rpt_14 *ftstat_rpt_14_new(struct ftstat_rpt *rpt); int ftstat_rpt_14_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_14_calc(struct ftstat_rpt *rpt); int ftstat_rpt_14_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_14_free(struct ftstat_rpt_14 *rpt); struct ftstat_rpt_15 *ftstat_rpt_15_new(struct ftstat_rpt *rpt); int ftstat_rpt_15_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_15_calc(struct ftstat_rpt *rpt); int ftstat_rpt_15_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_15_free(struct ftstat_rpt_15 *rpt); struct ftstat_rpt_16 *ftstat_rpt_16_new(struct ftstat_rpt *rpt); int ftstat_rpt_16_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_16_calc(struct ftstat_rpt *rpt); int ftstat_rpt_16_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_16_free(struct ftstat_rpt_16 *rpt); struct ftstat_rpt_17 *ftstat_rpt_17_new(struct ftstat_rpt *rpt); int ftstat_rpt_17_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_17_calc(struct ftstat_rpt *rpt); int ftstat_rpt_17_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_17_free(struct ftstat_rpt_17 *rpt); struct ftstat_rpt_18 *ftstat_rpt_18_new(struct ftstat_rpt *rpt); int ftstat_rpt_18_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_18_calc(struct ftstat_rpt *rpt); int ftstat_rpt_18_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_18_free(struct ftstat_rpt_18 *rpt); struct ftstat_rpt_19 *ftstat_rpt_19_new(struct ftstat_rpt *rpt); int ftstat_rpt_19_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_19_calc(struct ftstat_rpt *rpt); int ftstat_rpt_19_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_19_free(struct ftstat_rpt_19 *rpt); struct ftstat_rpt_20 *ftstat_rpt_20_new(struct ftstat_rpt *rpt); int ftstat_rpt_20_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_20_calc(struct ftstat_rpt *rpt); int ftstat_rpt_20_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_20_free(struct ftstat_rpt_20 *rpt); struct ftstat_rpt_21 *ftstat_rpt_21_new(struct ftstat_rpt *rpt); int ftstat_rpt_21_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_21_calc(struct ftstat_rpt *rpt); int ftstat_rpt_21_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_21_free(struct ftstat_rpt_21 *rpt); struct ftstat_rpt_22 *ftstat_rpt_22_new(struct ftstat_rpt *rpt); int ftstat_rpt_22_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_22_calc(struct ftstat_rpt *rpt); int ftstat_rpt_22_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_22_free(struct ftstat_rpt_22 *rpt); struct ftstat_rpt_23 *ftstat_rpt_23_new(struct ftstat_rpt *rpt); int ftstat_rpt_23_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_23_calc(struct ftstat_rpt *rpt); int ftstat_rpt_23_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_23_free(struct ftstat_rpt_23 *rpt); struct ftstat_rpt_24 *ftstat_rpt_24_new(struct ftstat_rpt *rpt); int ftstat_rpt_24_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_24_calc(struct ftstat_rpt *rpt); int ftstat_rpt_24_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_24_free(struct ftstat_rpt_24 *rpt); struct ftstat_rpt_25 *ftstat_rpt_25_new(struct ftstat_rpt *rpt); int ftstat_rpt_25_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_25_calc(struct ftstat_rpt *rpt); int ftstat_rpt_25_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_25_free(struct ftstat_rpt_25 *rpt); struct ftstat_rpt_26 *ftstat_rpt_26_new(struct ftstat_rpt *rpt); int ftstat_rpt_26_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_26_calc(struct ftstat_rpt *rpt); int ftstat_rpt_26_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_26_free(struct ftstat_rpt_26 *rpt); struct ftstat_rpt_27 *ftstat_rpt_27_new(struct ftstat_rpt *rpt); int ftstat_rpt_27_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_27_calc(struct ftstat_rpt *rpt); int ftstat_rpt_27_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_27_free(struct ftstat_rpt_27 *rpt); struct ftstat_rpt_28 *ftstat_rpt_28_new(struct ftstat_rpt *rpt); int ftstat_rpt_28_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_28_calc(struct ftstat_rpt *rpt); int ftstat_rpt_28_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_28_free(struct ftstat_rpt_28 *rpt); struct ftstat_rpt_29 *ftstat_rpt_29_new(struct ftstat_rpt *rpt); int ftstat_rpt_29_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_29_calc(struct ftstat_rpt *rpt); int ftstat_rpt_29_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_29_free(struct ftstat_rpt_29 *rpt); struct ftstat_rpt_30 *ftstat_rpt_30_new(struct ftstat_rpt *rpt); int ftstat_rpt_30_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_30_calc(struct ftstat_rpt *rpt); int ftstat_rpt_30_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_30_free(struct ftstat_rpt_30 *rpt); struct ftstat_rpt_31 *ftstat_rpt_31_new(struct ftstat_rpt *rpt); int ftstat_rpt_31_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_31_calc(struct ftstat_rpt *rpt); int ftstat_rpt_31_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_31_free(struct ftstat_rpt_31 *rpt); struct ftstat_rpt_32 *ftstat_rpt_32_new(struct ftstat_rpt *rpt); int ftstat_rpt_32_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_32_calc(struct ftstat_rpt *rpt); int ftstat_rpt_32_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_32_free(struct ftstat_rpt_32 *rpt); struct ftstat_rpt_33 *ftstat_rpt_33_new(struct ftstat_rpt *rpt); int ftstat_rpt_33_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_33_calc(struct ftstat_rpt *rpt); int ftstat_rpt_33_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_33_free(struct ftstat_rpt_33 *rpt); struct ftstat_rpt_34 *ftstat_rpt_34_new(struct ftstat_rpt *rpt); int ftstat_rpt_34_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_34_calc(struct ftstat_rpt *rpt); int ftstat_rpt_34_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_34_free(struct ftstat_rpt_34 *rpt); struct ftstat_rpt_35 *ftstat_rpt_35_new(struct ftstat_rpt *rpt); int ftstat_rpt_35_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_35_calc(struct ftstat_rpt *rpt); int ftstat_rpt_35_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_35_free(struct ftstat_rpt_35 *rpt); struct ftstat_rpt_36 *ftstat_rpt_36_new(struct ftstat_rpt *rpt); int ftstat_rpt_36_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_36_calc(struct ftstat_rpt *rpt); int ftstat_rpt_36_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_36_free(struct ftstat_rpt_36 *rpt); struct ftstat_rpt_37 *ftstat_rpt_37_new(struct ftstat_rpt *rpt); int ftstat_rpt_37_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_37_calc(struct ftstat_rpt *rpt); int ftstat_rpt_37_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_37_free(struct ftstat_rpt_37 *rpt); struct ftstat_rpt_38 *ftstat_rpt_38_new(struct ftstat_rpt *rpt); int ftstat_rpt_38_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_38_calc(struct ftstat_rpt *rpt); int ftstat_rpt_38_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_38_free(struct ftstat_rpt_38 *rpt); struct ftstat_rpt_39 *ftstat_rpt_39_new(struct ftstat_rpt *rpt); int ftstat_rpt_39_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_39_calc(struct ftstat_rpt *rpt); int ftstat_rpt_39_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_39_free(struct ftstat_rpt_39 *rpt); struct ftstat_rpt_40 *ftstat_rpt_40_new(struct ftstat_rpt *rpt); int ftstat_rpt_40_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_40_calc(struct ftstat_rpt *rpt); int ftstat_rpt_40_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_40_free(struct ftstat_rpt_40 *rpt); struct ftstat_rpt_41 *ftstat_rpt_41_new(struct ftstat_rpt *rpt); int ftstat_rpt_41_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_41_calc(struct ftstat_rpt *rpt); int ftstat_rpt_41_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_41_free(struct ftstat_rpt_41 *rpt); struct ftstat_rpt_42 *ftstat_rpt_42_new(struct ftstat_rpt *rpt); int ftstat_rpt_42_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_42_calc(struct ftstat_rpt *rpt); int ftstat_rpt_42_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_42_free(struct ftstat_rpt_42 *rpt); struct ftstat_rpt_43 *ftstat_rpt_43_new(struct ftstat_rpt *rpt); int ftstat_rpt_43_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_43_calc(struct ftstat_rpt *rpt); int ftstat_rpt_43_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_43_free(struct ftstat_rpt_43 *rpt); struct ftstat_rpt_44 *ftstat_rpt_44_new(struct ftstat_rpt *rpt); int ftstat_rpt_44_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_44_calc(struct ftstat_rpt *rpt); int ftstat_rpt_44_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_44_free(struct ftstat_rpt_44 *rpt); struct ftstat_rpt_45 *ftstat_rpt_45_new(struct ftstat_rpt *rpt); int ftstat_rpt_45_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_45_calc(struct ftstat_rpt *rpt); int ftstat_rpt_45_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_45_free(struct ftstat_rpt_45 *rpt); struct ftstat_rpt_46 *ftstat_rpt_46_new(struct ftstat_rpt *rpt); int ftstat_rpt_46_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_46_calc(struct ftstat_rpt *rpt); int ftstat_rpt_46_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_46_free(struct ftstat_rpt_46 *rpt); struct ftstat_rpt_47 *ftstat_rpt_47_new(struct ftstat_rpt *rpt); int ftstat_rpt_47_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_47_calc(struct ftstat_rpt *rpt); int ftstat_rpt_47_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_47_free(struct ftstat_rpt_47 *rpt); struct ftstat_rpt_48 *ftstat_rpt_48_new(struct ftstat_rpt *rpt); int ftstat_rpt_48_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_48_calc(struct ftstat_rpt *rpt); int ftstat_rpt_48_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_48_free(struct ftstat_rpt_48 *rpt); struct ftstat_rpt_49 *ftstat_rpt_49_new(struct ftstat_rpt *rpt); int ftstat_rpt_49_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_49_calc(struct ftstat_rpt *rpt); int ftstat_rpt_49_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_49_free(struct ftstat_rpt_49 *rpt); struct ftstat_rpt_50 *ftstat_rpt_50_new(struct ftstat_rpt *rpt); int ftstat_rpt_50_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_50_calc(struct ftstat_rpt *rpt); int ftstat_rpt_50_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_50_free(struct ftstat_rpt_50 *rpt); struct ftstat_rpt_51 *ftstat_rpt_51_new(struct ftstat_rpt *rpt); int ftstat_rpt_51_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_51_calc(struct ftstat_rpt *rpt); int ftstat_rpt_51_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_51_free(struct ftstat_rpt_51 *rpt); struct ftstat_rpt_52 *ftstat_rpt_52_new(struct ftstat_rpt *rpt); int ftstat_rpt_52_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_52_calc(struct ftstat_rpt *rpt); int ftstat_rpt_52_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_52_free(struct ftstat_rpt_52 *rpt); struct ftstat_rpt_53 *ftstat_rpt_53_new(struct ftstat_rpt *rpt); int ftstat_rpt_53_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_53_calc(struct ftstat_rpt *rpt); int ftstat_rpt_53_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_53_free(struct ftstat_rpt_53 *rpt); struct ftstat_rpt_54 *ftstat_rpt_54_new(struct ftstat_rpt *rpt); int ftstat_rpt_54_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_54_calc(struct ftstat_rpt *rpt); int ftstat_rpt_54_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_54_free(struct ftstat_rpt_54 *rpt); struct ftstat_rpt_55 *ftstat_rpt_55_new(struct ftstat_rpt *rpt); int ftstat_rpt_55_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_55_calc(struct ftstat_rpt *rpt); int ftstat_rpt_55_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_55_free(struct ftstat_rpt_55 *rpt); struct ftstat_rpt_56 *ftstat_rpt_56_new(struct ftstat_rpt *rpt); int ftstat_rpt_56_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_56_calc(struct ftstat_rpt *rpt); int ftstat_rpt_56_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_56_free(struct ftstat_rpt_56 *rpt); struct ftstat_rpt_57 *ftstat_rpt_57_new(struct ftstat_rpt *rpt); int ftstat_rpt_57_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_57_calc(struct ftstat_rpt *rpt); int ftstat_rpt_57_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_57_free(struct ftstat_rpt_57 *rpt); struct ftstat_rpt_58 *ftstat_rpt_58_new(struct ftstat_rpt *rpt); int ftstat_rpt_58_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_58_calc(struct ftstat_rpt *rpt); int ftstat_rpt_58_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_58_free(struct ftstat_rpt_58 *rpt); struct ftstat_rpt_59 *ftstat_rpt_59_new(struct ftstat_rpt *rpt); int ftstat_rpt_59_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_59_calc(struct ftstat_rpt *rpt); int ftstat_rpt_59_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_59_free(struct ftstat_rpt_59 *rpt); struct ftstat_rpt_60 *ftstat_rpt_60_new(struct ftstat_rpt *rpt); int ftstat_rpt_60_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_60_calc(struct ftstat_rpt *rpt); int ftstat_rpt_60_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_60_free(struct ftstat_rpt_60 *rpt); struct ftstat_rpt_61 *ftstat_rpt_61_new(struct ftstat_rpt *rpt); int ftstat_rpt_61_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_61_calc(struct ftstat_rpt *rpt); int ftstat_rpt_61_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_61_free(struct ftstat_rpt_61 *rpt); struct ftstat_rpt_62 *ftstat_rpt_62_new(struct ftstat_rpt *rpt); int ftstat_rpt_62_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_62_calc(struct ftstat_rpt *rpt); int ftstat_rpt_62_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_62_free(struct ftstat_rpt_62 *rpt); struct ftstat_rpt_63 *ftstat_rpt_63_new(struct ftstat_rpt *rpt); int ftstat_rpt_63_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_63_calc(struct ftstat_rpt *rpt); int ftstat_rpt_63_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_63_free(struct ftstat_rpt_63 *rpt); struct ftstat_rpt_64 *ftstat_rpt_64_new(struct ftstat_rpt *rpt); int ftstat_rpt_64_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_64_calc(struct ftstat_rpt *rpt); int ftstat_rpt_64_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_64_free(struct ftstat_rpt_64 *rpt); struct ftstat_rpt_65 *ftstat_rpt_65_new(struct ftstat_rpt *rpt); int ftstat_rpt_65_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_65_calc(struct ftstat_rpt *rpt); int ftstat_rpt_65_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_65_free(struct ftstat_rpt_65 *rpt); struct ftstat_rpt_66 *ftstat_rpt_66_new(struct ftstat_rpt *rpt); int ftstat_rpt_66_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_66_calc(struct ftstat_rpt *rpt); int ftstat_rpt_66_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_66_free(struct ftstat_rpt_66 *rpt); struct ftstat_rpt_67 *ftstat_rpt_67_new(struct ftstat_rpt *rpt); int ftstat_rpt_67_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_67_calc(struct ftstat_rpt *rpt); int ftstat_rpt_67_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_67_free(struct ftstat_rpt_67 *rpt); struct ftstat_rpt_68 *ftstat_rpt_68_new(struct ftstat_rpt *rpt); int ftstat_rpt_68_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_68_calc(struct ftstat_rpt *rpt); int ftstat_rpt_68_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_68_free(struct ftstat_rpt_68 *rpt); struct ftstat_rpt_69 *ftstat_rpt_69_new(struct ftstat_rpt *rpt); int ftstat_rpt_69_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_69_calc(struct ftstat_rpt *rpt); int ftstat_rpt_69_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_69_free(struct ftstat_rpt_69 *rpt); struct ftstat_rpt_70 *ftstat_rpt_70_new(struct ftstat_rpt *rpt); int ftstat_rpt_70_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_70_calc(struct ftstat_rpt *rpt); int ftstat_rpt_70_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_70_free(struct ftstat_rpt_70 *rpt); struct ftstat_rpt_71 *ftstat_rpt_71_new(struct ftstat_rpt *rpt); int ftstat_rpt_71_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_71_calc(struct ftstat_rpt *rpt); int ftstat_rpt_71_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_71_free(struct ftstat_rpt_71 *rpt); struct ftstat_rpt_72 *ftstat_rpt_72_new(struct ftstat_rpt *rpt); int ftstat_rpt_72_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_72_calc(struct ftstat_rpt *rpt); int ftstat_rpt_72_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_72_free(struct ftstat_rpt_72 *rpt); struct ftstat_rpt_73 *ftstat_rpt_73_new(struct ftstat_rpt *rpt); int ftstat_rpt_73_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_73_calc(struct ftstat_rpt *rpt); int ftstat_rpt_73_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_73_free(struct ftstat_rpt_73 *rpt); struct ftstat_rpt_74 *ftstat_rpt_74_new(struct ftstat_rpt *rpt); int ftstat_rpt_74_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_74_calc(struct ftstat_rpt *rpt); int ftstat_rpt_74_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_74_free(struct ftstat_rpt_74 *rpt); struct ftstat_rpt_75 *ftstat_rpt_75_new(struct ftstat_rpt *rpt); int ftstat_rpt_75_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_75_calc(struct ftstat_rpt *rpt); int ftstat_rpt_75_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_75_free(struct ftstat_rpt_75 *rpt); struct ftstat_rpt_76 *ftstat_rpt_76_new(struct ftstat_rpt *rpt); int ftstat_rpt_76_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_76_calc(struct ftstat_rpt *rpt); int ftstat_rpt_76_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_76_free(struct ftstat_rpt_76 *rpt); struct ftstat_rpt_77 *ftstat_rpt_77_new(struct ftstat_rpt *rpt); int ftstat_rpt_77_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_77_calc(struct ftstat_rpt *rpt); int ftstat_rpt_77_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_77_free(struct ftstat_rpt_77 *rpt); struct ftstat_rpt_78 *ftstat_rpt_78_new(struct ftstat_rpt *rpt); int ftstat_rpt_78_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo); int ftstat_rpt_78_calc(struct ftstat_rpt *rpt); int ftstat_rpt_78_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt); void ftstat_rpt_78_free(struct ftstat_rpt_78 *rpt); struct typelookup tlookup[] = { {"summary-detail", (void*)ftstat_rpt_1_new, (void*)ftstat_rpt_1_accum, (void*)ftstat_rpt_1_calc, (void*)ftstat_rpt_1_dump, (void*)ftstat_rpt_1_free, FT_STAT_FIELD_OTHER|FT_STAT_FIELD_PS, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"summary-counters", (void*)ftstat_rpt_2_new, (void*)ftstat_rpt_2_accum, (void*)ftstat_rpt_2_calc, (void*)ftstat_rpt_2_dump, (void*)ftstat_rpt_2_free, FT_STAT_FIELD_PS, FT_STAT_OPT_HEADER|FT_STAT_OPT_XHEADER|FT_STAT_OPT_TOTALS, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"packet-size", (void*)ftstat_rpt_3_new, (void*)ftstat_rpt_3_accum, (void*)ftstat_rpt_3_calc, (void*)ftstat_rpt_3_dump, (void*)ftstat_rpt_3_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"octets", (void*)ftstat_rpt_4_new, (void*)ftstat_rpt_4_accum, (void*)ftstat_rpt_4_calc, (void*)ftstat_rpt_4_dump, (void*)ftstat_rpt_4_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"packets", (void*)ftstat_rpt_5_new, (void*)ftstat_rpt_5_accum, (void*)ftstat_rpt_5_calc, (void*)ftstat_rpt_5_dump, (void*)ftstat_rpt_5_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"ip-source-port", (void*)ftstat_rpt_6_new, (void*)ftstat_rpt_6_accum, (void*)ftstat_rpt_6_calc, (void*)ftstat_rpt_6_dump, (void*)ftstat_rpt_6_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCPORT}, {"ip-destination-port", (void*)ftstat_rpt_7_new, (void*)ftstat_rpt_7_accum, (void*)ftstat_rpt_7_calc, (void*)ftstat_rpt_7_dump, (void*)ftstat_rpt_7_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTPORT}, {"ip-source/destination-port", (void*)ftstat_rpt_8_new, (void*)ftstat_rpt_8_accum, (void*)ftstat_rpt_8_calc, (void*)ftstat_rpt_8_dump, (void*)ftstat_rpt_8_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCPORT| FT_XFIELD_DSTPORT}, {"bps", (void*)ftstat_rpt_9_new, (void*)ftstat_rpt_9_accum, (void*)ftstat_rpt_9_calc, (void*)ftstat_rpt_9_dump, (void*)ftstat_rpt_9_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"pps", (void*)ftstat_rpt_10_new, (void*)ftstat_rpt_10_accum, (void*)ftstat_rpt_10_calc, (void*)ftstat_rpt_10_dump, (void*)ftstat_rpt_10_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"ip-destination-address-type", (void*)ftstat_rpt_11_new, (void*)ftstat_rpt_11_accum, (void*)ftstat_rpt_11_calc, (void*)ftstat_rpt_11_dump, (void*)ftstat_rpt_11_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR}, {"ip-protocol", (void*)ftstat_rpt_12_new, (void*)ftstat_rpt_12_accum, (void*)ftstat_rpt_12_calc, (void*)ftstat_rpt_12_dump, (void*)ftstat_rpt_12_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_PROT}, {"ip-tos", (void*)ftstat_rpt_13_new, (void*)ftstat_rpt_13_accum, (void*)ftstat_rpt_13_calc, (void*)ftstat_rpt_13_dump, (void*)ftstat_rpt_13_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_TOS}, {"ip-next-hop-address", (void*)ftstat_rpt_14_new, (void*)ftstat_rpt_14_accum, (void*)ftstat_rpt_14_calc, (void*)ftstat_rpt_14_dump, (void*)ftstat_rpt_14_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_NEXTHOP}, {"ip-source-address", (void*)ftstat_rpt_15_new, (void*)ftstat_rpt_15_accum, (void*)ftstat_rpt_15_calc, (void*)ftstat_rpt_15_dump, (void*)ftstat_rpt_15_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR}, {"ip-destination-address", (void*)ftstat_rpt_16_new, (void*)ftstat_rpt_16_accum, (void*)ftstat_rpt_16_calc, (void*)ftstat_rpt_16_dump, (void*)ftstat_rpt_16_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR}, {"ip-source/destination-address", (void*)ftstat_rpt_17_new, (void*)ftstat_rpt_17_accum, (void*)ftstat_rpt_17_calc, (void*)ftstat_rpt_17_dump, (void*)ftstat_rpt_17_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_DSTADDR}, {"ip-exporter-address", (void*)ftstat_rpt_18_new, (void*)ftstat_rpt_18_accum, (void*)ftstat_rpt_18_calc, (void*)ftstat_rpt_18_dump, (void*)ftstat_rpt_18_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_EXADDR}, {"input-interface", (void*)ftstat_rpt_19_new, (void*)ftstat_rpt_19_accum, (void*)ftstat_rpt_19_calc, (void*)ftstat_rpt_19_dump, (void*)ftstat_rpt_19_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT}, {"output-interface", (void*)ftstat_rpt_20_new, (void*)ftstat_rpt_20_accum, (void*)ftstat_rpt_20_calc, (void*)ftstat_rpt_20_dump, (void*)ftstat_rpt_20_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT}, {"input/output-interface", (void*)ftstat_rpt_21_new, (void*)ftstat_rpt_21_accum, (void*)ftstat_rpt_21_calc, (void*)ftstat_rpt_21_dump, (void*)ftstat_rpt_21_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_OUTPUT}, {"source-as", (void*)ftstat_rpt_22_new, (void*)ftstat_rpt_22_accum, (void*)ftstat_rpt_22_calc, (void*)ftstat_rpt_22_dump, (void*)ftstat_rpt_22_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_AS}, {"destination-as", (void*)ftstat_rpt_23_new, (void*)ftstat_rpt_23_accum, (void*)ftstat_rpt_23_calc, (void*)ftstat_rpt_23_dump, (void*)ftstat_rpt_23_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DST_AS}, {"source/destination-as", (void*)ftstat_rpt_24_new, (void*)ftstat_rpt_24_accum, (void*)ftstat_rpt_24_calc, (void*)ftstat_rpt_24_dump, (void*)ftstat_rpt_24_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_AS| FT_XFIELD_DST_AS}, {"ip-source-address/source-as", (void*)ftstat_rpt_25_new, (void*)ftstat_rpt_25_accum, (void*)ftstat_rpt_25_calc, (void*)ftstat_rpt_25_dump, (void*)ftstat_rpt_25_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_AS| FT_XFIELD_SRCADDR}, {"ip-destination-address/source-as", (void*)ftstat_rpt_26_new, (void*)ftstat_rpt_26_accum, (void*)ftstat_rpt_26_calc, (void*)ftstat_rpt_26_dump, (void*)ftstat_rpt_26_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_AS| FT_XFIELD_DSTADDR}, {"ip-source-address/destination-as", (void*)ftstat_rpt_27_new, (void*)ftstat_rpt_27_accum, (void*)ftstat_rpt_27_calc, (void*)ftstat_rpt_27_dump, (void*)ftstat_rpt_27_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DST_AS| FT_XFIELD_SRCADDR}, {"ip-destination-address/destination-as", (void*)ftstat_rpt_28_new, (void*)ftstat_rpt_28_accum, (void*)ftstat_rpt_28_calc, (void*)ftstat_rpt_28_dump, (void*)ftstat_rpt_28_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DST_AS| FT_XFIELD_DSTADDR}, {"ip-source/destination-address/source-as", (void*)ftstat_rpt_29_new, (void*)ftstat_rpt_29_accum, (void*)ftstat_rpt_29_calc, (void*)ftstat_rpt_29_dump, (void*)ftstat_rpt_29_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_AS| FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR}, {"ip-source/destination-address/destination-as", (void*)ftstat_rpt_30_new, (void*)ftstat_rpt_30_accum, (void*)ftstat_rpt_30_calc, (void*)ftstat_rpt_30_dump, (void*)ftstat_rpt_30_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DST_AS| FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR}, {"ip-source/destination-address/source/destination-as", (void*)ftstat_rpt_31_new, (void*)ftstat_rpt_31_accum, (void*)ftstat_rpt_31_calc, (void*)ftstat_rpt_31_dump, (void*)ftstat_rpt_31_free, FT_STAT_FIELD_GENERIC4, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_AS| FT_XFIELD_DST_AS|FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR}, {"ip-source-address/input-interface", (void*)ftstat_rpt_32_new, (void*)ftstat_rpt_32_accum, (void*)ftstat_rpt_32_calc, (void*)ftstat_rpt_32_dump, (void*)ftstat_rpt_32_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_SRCADDR}, {"ip-destination-address/input-interface", (void*)ftstat_rpt_33_new, (void*)ftstat_rpt_33_accum, (void*)ftstat_rpt_33_calc, (void*)ftstat_rpt_33_dump, (void*)ftstat_rpt_33_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_DSTADDR}, {"ip-source-address/output-interface", (void*)ftstat_rpt_34_new, (void*)ftstat_rpt_34_accum, (void*)ftstat_rpt_34_calc, (void*)ftstat_rpt_34_dump, (void*)ftstat_rpt_34_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT| FT_XFIELD_SRCADDR}, {"ip-destination-address/output-interface", (void*)ftstat_rpt_35_new, (void*)ftstat_rpt_35_accum, (void*)ftstat_rpt_35_calc, (void*)ftstat_rpt_35_dump, (void*)ftstat_rpt_35_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT| FT_XFIELD_DSTADDR}, {"ip-source/destination-address/input-interface", (void*)ftstat_rpt_36_new, (void*)ftstat_rpt_36_accum, (void*)ftstat_rpt_36_calc, (void*)ftstat_rpt_36_dump, (void*)ftstat_rpt_36_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR}, {"ip-source/destination-address/output-interface", (void*)ftstat_rpt_37_new, (void*)ftstat_rpt_37_accum, (void*)ftstat_rpt_37_calc, (void*)ftstat_rpt_37_dump, (void*)ftstat_rpt_37_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT| FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR}, {"ip-source/destination-address/input/output-interface", (void*)ftstat_rpt_38_new, (void*)ftstat_rpt_38_accum, (void*)ftstat_rpt_38_calc, (void*)ftstat_rpt_38_dump, (void*)ftstat_rpt_38_free, FT_STAT_FIELD_GENERIC4, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_OUTPUT|FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR}, {"input-interface/source-as", (void*)ftstat_rpt_39_new, (void*)ftstat_rpt_39_accum, (void*)ftstat_rpt_39_calc, (void*)ftstat_rpt_39_dump, (void*)ftstat_rpt_39_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_SRC_AS}, {"input-interface/destination-as", (void*)ftstat_rpt_40_new, (void*)ftstat_rpt_40_accum, (void*)ftstat_rpt_40_calc, (void*)ftstat_rpt_40_dump, (void*)ftstat_rpt_40_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_DST_AS}, {"output-interface/source-as", (void*)ftstat_rpt_41_new, (void*)ftstat_rpt_41_accum, (void*)ftstat_rpt_41_calc, (void*)ftstat_rpt_41_dump, (void*)ftstat_rpt_41_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT| FT_XFIELD_SRC_AS}, {"output-interface/destination-as", (void*)ftstat_rpt_42_new, (void*)ftstat_rpt_42_accum, (void*)ftstat_rpt_42_calc, (void*)ftstat_rpt_42_dump, (void*)ftstat_rpt_42_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT| FT_XFIELD_DST_AS}, {"input-interface/source/destination-as", (void*)ftstat_rpt_43_new, (void*)ftstat_rpt_43_accum, (void*)ftstat_rpt_43_calc, (void*)ftstat_rpt_43_dump, (void*)ftstat_rpt_43_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_SRC_AS|FT_XFIELD_DST_AS}, {"output-interface/source/destination-as", (void*)ftstat_rpt_44_new, (void*)ftstat_rpt_44_accum, (void*)ftstat_rpt_44_calc, (void*)ftstat_rpt_44_dump, (void*)ftstat_rpt_44_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_OUTPUT| FT_XFIELD_SRC_AS|FT_XFIELD_DST_AS}, {"input/output-interface/source/destination-as", (void*)ftstat_rpt_45_new, (void*)ftstat_rpt_45_accum, (void*)ftstat_rpt_45_calc, (void*)ftstat_rpt_45_dump, (void*)ftstat_rpt_45_free, FT_STAT_FIELD_GENERIC4, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_INPUT| FT_XFIELD_OUTPUT|FT_XFIELD_SRC_AS|FT_XFIELD_DST_AS}, {"engine-id", (void*)ftstat_rpt_46_new, (void*)ftstat_rpt_46_accum, (void*)ftstat_rpt_46_calc, (void*)ftstat_rpt_46_dump, (void*)ftstat_rpt_46_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_ENGINE_ID}, {"engine-type", (void*)ftstat_rpt_47_new, (void*)ftstat_rpt_47_accum, (void*)ftstat_rpt_47_calc, (void*)ftstat_rpt_47_dump, (void*)ftstat_rpt_47_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_ENGINE_TYPE}, {"source-tag", (void*)ftstat_rpt_48_new, (void*)ftstat_rpt_48_accum, (void*)ftstat_rpt_48_calc, (void*)ftstat_rpt_48_dump, (void*)ftstat_rpt_48_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_TAG}, {"destination-tag", (void*)ftstat_rpt_49_new, (void*)ftstat_rpt_49_accum, (void*)ftstat_rpt_49_calc, (void*)ftstat_rpt_49_dump, (void*)ftstat_rpt_49_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DST_TAG}, {"source/destination-tag", (void*)ftstat_rpt_50_new, (void*)ftstat_rpt_50_accum, (void*)ftstat_rpt_50_calc, (void*)ftstat_rpt_50_dump, (void*)ftstat_rpt_50_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRC_TAG| FT_XFIELD_DST_TAG}, {"ip-source-address/ip-source-port", (void*)ftstat_rpt_51_new, (void*)ftstat_rpt_51_accum, (void*)ftstat_rpt_51_calc, (void*)ftstat_rpt_51_dump, (void*)ftstat_rpt_51_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_SRCPORT}, {"ip-source-address/ip-destination-port", (void*)ftstat_rpt_52_new, (void*)ftstat_rpt_52_accum, (void*)ftstat_rpt_52_calc, (void*)ftstat_rpt_52_dump, (void*)ftstat_rpt_52_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_DSTPORT}, {"ip-destination-address/ip-source-port", (void*)ftstat_rpt_53_new, (void*)ftstat_rpt_53_accum, (void*)ftstat_rpt_53_calc, (void*)ftstat_rpt_53_dump, (void*)ftstat_rpt_53_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCPORT}, {"ip-destination-address/ip-destination-port", (void*)ftstat_rpt_54_new, (void*)ftstat_rpt_54_accum, (void*)ftstat_rpt_54_calc, (void*)ftstat_rpt_54_dump, (void*)ftstat_rpt_54_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_DSTPORT}, {"ip-source-address/ip-source/destination-port", (void*)ftstat_rpt_55_new, (void*)ftstat_rpt_55_accum, (void*)ftstat_rpt_55_calc, (void*)ftstat_rpt_55_dump, (void*)ftstat_rpt_55_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_SRCPORT|FT_XFIELD_DSTPORT}, {"ip-destination-address/ip-source/destination-port", (void*)ftstat_rpt_56_new, (void*)ftstat_rpt_56_accum, (void*)ftstat_rpt_56_calc, (void*)ftstat_rpt_56_dump, (void*)ftstat_rpt_56_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCPORT|FT_XFIELD_DSTPORT}, {"ip-source/destination-address/ip-source-port", (void*)ftstat_rpt_57_new, (void*)ftstat_rpt_57_accum, (void*)ftstat_rpt_57_calc, (void*)ftstat_rpt_57_dump, (void*)ftstat_rpt_57_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_DSTADDR|FT_XFIELD_DSTPORT}, {"ip-source/destination-address/ip-destination-port", (void*)ftstat_rpt_58_new, (void*)ftstat_rpt_58_accum, (void*)ftstat_rpt_58_calc, (void*)ftstat_rpt_58_dump, (void*)ftstat_rpt_58_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_DSTADDR|FT_XFIELD_DSTPORT}, {"ip-source/destination-address/ip-source/destination-port", (void*)ftstat_rpt_59_new, (void*)ftstat_rpt_59_accum, (void*)ftstat_rpt_59_calc, (void*)ftstat_rpt_59_dump, (void*)ftstat_rpt_59_free, FT_STAT_FIELD_GENERIC4, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_DSTADDR|FT_XFIELD_SRCPORT|FT_XFIELD_DSTPORT}, {"ip-source-address/input/output-interface", (void*)ftstat_rpt_60_new, (void*)ftstat_rpt_60_accum, (void*)ftstat_rpt_60_calc, (void*)ftstat_rpt_60_dump, (void*)ftstat_rpt_60_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_INPUT|FT_XFIELD_OUTPUT}, {"ip-destination-address/input/output-interface", (void*)ftstat_rpt_61_new, (void*)ftstat_rpt_61_accum, (void*)ftstat_rpt_61_calc, (void*)ftstat_rpt_61_dump, (void*)ftstat_rpt_61_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_INPUT|FT_XFIELD_OUTPUT}, {"ip-source-address/source/destination-as", (void*)ftstat_rpt_62_new, (void*)ftstat_rpt_62_accum, (void*)ftstat_rpt_62_calc, (void*)ftstat_rpt_62_dump, (void*)ftstat_rpt_62_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_SRC_AS|FT_XFIELD_DST_AS}, {"ip-destination-address/source/destination-as", (void*)ftstat_rpt_63_new, (void*)ftstat_rpt_63_accum, (void*)ftstat_rpt_63_calc, (void*)ftstat_rpt_63_dump, (void*)ftstat_rpt_63_free, FT_STAT_FIELD_GENERIC3, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRC_AS|FT_XFIELD_DST_AS}, {"ip-address", (void*)ftstat_rpt_64_new, (void*)ftstat_rpt_64_accum, (void*)ftstat_rpt_64_calc, (void*)ftstat_rpt_64_dump, (void*)ftstat_rpt_64_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCADDR}, {"ip-port", (void*)ftstat_rpt_65_new, (void*)ftstat_rpt_65_accum, (void*)ftstat_rpt_65_calc, (void*)ftstat_rpt_65_dump, (void*)ftstat_rpt_65_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTPORT| FT_XFIELD_SRCPORT}, {"ip-source-address-destination-count", (void*)ftstat_rpt_66_new, (void*)ftstat_rpt_66_accum, (void*)ftstat_rpt_66_calc, (void*)ftstat_rpt_66_dump, (void*)ftstat_rpt_66_free, FT_STAT_FIELD_GENERIC|FT_STAT_FIELD_COUNT, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCADDR}, {"ip-destination-address-source-count", (void*)ftstat_rpt_67_new, (void*)ftstat_rpt_67_accum, (void*)ftstat_rpt_67_calc, (void*)ftstat_rpt_67_dump, (void*)ftstat_rpt_67_free, FT_STAT_FIELD_GENERIC|FT_STAT_FIELD_COUNT, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCADDR}, {"ip-source/destination-address/ip-protocol/ip-tos/ip-source/destination-port", (void*)ftstat_rpt_68_new, (void*)ftstat_rpt_68_accum, (void*)ftstat_rpt_68_calc, (void*)ftstat_rpt_68_dump, (void*)ftstat_rpt_68_free, FT_STAT_FIELD_GENERIC6, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCADDR|FT_XFIELD_PROT|FT_XFIELD_TOS|FT_XFIELD_SRCPORT| FT_XFIELD_DSTPORT}, {"ip-source/destination-address/ip-protocol/ip-tos", (void*)ftstat_rpt_69_new, (void*)ftstat_rpt_69_accum, (void*)ftstat_rpt_69_calc, (void*)ftstat_rpt_69_dump, (void*)ftstat_rpt_69_free, FT_STAT_FIELD_GENERIC4, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCADDR|FT_XFIELD_PROT|FT_XFIELD_TOS}, {"ip-source-address/source-tag", (void*)ftstat_rpt_70_new, (void*)ftstat_rpt_70_accum, (void*)ftstat_rpt_70_calc, (void*)ftstat_rpt_70_dump, (void*)ftstat_rpt_70_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_SRC_TAG}, {"ip-source-address/destination-tag", (void*)ftstat_rpt_71_new, (void*)ftstat_rpt_71_accum, (void*)ftstat_rpt_71_calc, (void*)ftstat_rpt_71_dump, (void*)ftstat_rpt_71_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SRCADDR| FT_XFIELD_DST_TAG}, {"ip-destination-address/source-tag", (void*)ftstat_rpt_72_new, (void*)ftstat_rpt_72_accum, (void*)ftstat_rpt_72_calc, (void*)ftstat_rpt_72_dump, (void*)ftstat_rpt_72_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRC_TAG}, {"ip-destination-address/destination-tag", (void*)ftstat_rpt_73_new, (void*)ftstat_rpt_73_accum, (void*)ftstat_rpt_73_calc, (void*)ftstat_rpt_73_dump, (void*)ftstat_rpt_73_free, FT_STAT_FIELD_GENERIC2, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_DST_TAG}, {"ip-source/destination-address/source/destination-tag", (void*)ftstat_rpt_74_new, (void*)ftstat_rpt_74_accum, (void*)ftstat_rpt_74_calc, (void*)ftstat_rpt_74_dump, (void*)ftstat_rpt_74_free, FT_STAT_FIELD_GENERIC4, FT_STAT_OPT_GENERIC_IP_ADDR, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_DSTADDR| FT_XFIELD_SRCADDR|FT_XFIELD_SRC_TAG|FT_XFIELD_DST_TAG}, {"linear-interpolated-flows-octets-packets", (void*)ftstat_rpt_75_new, (void*)ftstat_rpt_75_accum, (void*)ftstat_rpt_75_calc, (void*)ftstat_rpt_75_dump, (void*)ftstat_rpt_75_free, FT_STAT_FIELD_FLOWS|FT_STAT_FIELD_OCTETS|FT_STAT_FIELD_PACKETS| FT_STAT_FIELD_KEY, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"first", (void*)ftstat_rpt_76_new, (void*)ftstat_rpt_76_accum, (void*)ftstat_rpt_76_calc, (void*)ftstat_rpt_76_dump, (void*)ftstat_rpt_76_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"last", (void*)ftstat_rpt_77_new, (void*)ftstat_rpt_77_accum, (void*)ftstat_rpt_77_calc, (void*)ftstat_rpt_77_dump, (void*)ftstat_rpt_77_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {"duration", (void*)ftstat_rpt_78_new, (void*)ftstat_rpt_78_accum, (void*)ftstat_rpt_78_calc, (void*)ftstat_rpt_78_dump, (void*)ftstat_rpt_78_free, FT_STAT_FIELD_GENERIC, FT_STAT_OPT_GENERIC, FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS|FT_XFIELD_FIRST|FT_XFIELD_LAST| FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS}, {(char*)0L, 0, (void*)0L}, }; static struct jump pjump[] = { {"include-mask", 0, parse_include_mask}, {"include-tag", 0, parse_include_tag}, {"include-filter", 0, parse_include_filter}, {"stat-report", 0, parse_rpt}, {"type", PARSE_STATE_REPORT, parse_rpt_type}, {"filter", PARSE_STATE_REPORT, parse_rpt_filter}, {"scale", PARSE_STATE_REPORT, parse_rpt_scale}, {"output", PARSE_STATE_REPORT, parse_rpt_output}, {"tag-mask", PARSE_STATE_REPORT, parse_rpt_tag_mask}, {"ip-source-address-format", PARSE_STATE_REPORT, parse_rpt_ip_src_addr_fmt}, {"ip-destination-address-format", PARSE_STATE_REPORT, parse_rpt_ip_dst_addr_fmt}, {"format", PARSE_STATE_OUTPUT, parse_rpt_out_format}, {"sort", PARSE_STATE_OUTPUT, parse_rpt_out_sort}, {"records", PARSE_STATE_OUTPUT, parse_rpt_out_records}, {"tally", PARSE_STATE_OUTPUT, parse_rpt_out_tally}, {"fields", PARSE_STATE_OUTPUT, parse_rpt_out_fields}, {"options", PARSE_STATE_OUTPUT, parse_rpt_out_options}, {"path", PARSE_STATE_OUTPUT, parse_rpt_out_path}, {"time", PARSE_STATE_OUTPUT, parse_rpt_out_time}, {"stat-definition", 0, parse_def}, {"filter", PARSE_STATE_DEFINITION, parse_def_filter}, {"tag", PARSE_STATE_DEFINITION, parse_def_tag}, {"mask", PARSE_STATE_DEFINITION, parse_def_mask}, {"report", PARSE_STATE_DEFINITION, parse_def_report}, {"time-series", PARSE_STATE_DEFINITION, parse_def_time_series}, {0, 0, 0}, }; /* ************************************************************************* public ftstat_* ************************************************************************* */ /* * function: ftstat_load * * Process fname into ftstat. * * returns: 0 ok * <0 fail */ int ftstat_load(struct ftstat *ftstat, struct ftvar *ftvar, char *fname) { struct stat sb; struct jump *jmp; struct line_parser lp; int fd, ret, found; char *buf, *buf2, *c; char sbuf[FT_LP_MAXLINE]; ret = -1; buf = (char*)0L; bzero(&lp, sizeof lp); bzero(ftstat, sizeof *ftstat); FT_SLIST_INIT(&ftstat->defs); FT_SLIST_INIT(&ftstat->rpts); ftstat->ftvar = ftvar; lp.fname = fname; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto load_stat_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto load_stat_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto load_stat_out; } /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(%s): short", fname); goto load_stat_out; } /* null terminate file */ buf[sb.st_size] = 0; buf2 = buf; for (;;) { /* rip a line */ for (;;) { c = strsep(&buf2, "\n"); ++lp.lineno; if ((c && *c != 0) || (!c)) break; } /* no more lines */ if (!c) { goto load_stat_done; } /* do variable substitutions first */ if (ftvar) { if (ftvar_evalstr(ftvar, c, sbuf, sizeof(sbuf)) < 0) { fterr_warnx("ftvar_evalstr(): failed"); goto load_stat_done; } } else { strncpy(sbuf, c, sizeof(sbuf)); sbuf[sizeof(sbuf)-1] = 0; } lp.buf = sbuf; /* first word */ NEXT_WORD(&lp.buf, c); /* whitespace only line */ if (!c) { continue; } /* comment line */ if (c && *c == '#') continue; for (jmp = pjump; jmp->name; ++jmp) { found = 0; if (((!jmp->state) || (jmp->state & lp.state)) && (!strcasecmp(c, jmp->name))) { found = 1; if (jmp->func(&lp, ftstat)) goto load_stat_out; NEXT_WORD(&lp.buf, c); if (c) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_stat_out; } break; } } /* test each word */ if (!found) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_stat_out; } } /* more lines */ load_stat_done: if (resolve_reports(ftstat)) { fterr_warnx("resolve_reports(): failed"); goto load_stat_out; } ret = 0; load_stat_out: if (fd != -1) close(fd); if (buf) free(buf); if (ret == -1) ftstat_free(ftstat); return ret; } /* ftstat_load */ void ftstat_free(struct ftstat *ftstat) { struct ftstat_def *ftsd; struct ftstat_rpt *ftsr; struct ftstat_rpt_out *ftsro; struct ftstat_rpt_item *ftsrpti; if (ftstat->ftfil_init) ftfil_free(&ftstat->ftfil); if (ftstat->fttag_init) fttag_free(&ftstat->fttag); if (ftstat->ftmask_init) ftmask_free(&ftstat->ftmask); if (ftstat->filter_fname) free(ftstat->filter_fname); if (ftstat->tag_fname) free(ftstat->tag_fname); if (ftstat->mask_fname) free(ftstat->mask_fname); /* free each definition */ while (!FT_SLIST_EMPTY(&ftstat->defs)) { ftsd = FT_SLIST_FIRST(&ftstat->defs); FT_SLIST_REMOVE_HEAD(&ftstat->defs, chain); /* free each item in the definition */ while (!FT_STAILQ_EMPTY(&ftsd->items)) { ftsrpti = FT_STAILQ_FIRST(&ftsd->items); FT_STAILQ_REMOVE_HEAD(&ftsd->items, chain); free(ftsrpti->tmp_report); free(ftsrpti); } free(ftsd->name); free(ftsd); } /* definitions */ /* free each report */ while (!FT_SLIST_EMPTY(&ftstat->rpts)) { ftsr = FT_SLIST_FIRST(&ftstat->rpts); FT_SLIST_REMOVE_HEAD(&ftstat->rpts, chain); /* free each output in the report */ while (!FT_STAILQ_EMPTY(&ftsr->outs)) { ftsro = FT_STAILQ_FIRST(&ftsr->outs); FT_STAILQ_REMOVE_HEAD(&ftsr->outs, chain); if (ftsro->path) free(ftsro->path); free(ftsro); } free(ftsr->name); free(ftsr); } /* reports */ } /* ftstat_free */ struct ftstat_def *ftstat_def_find(struct ftstat *ftstat, char *name) { struct ftstat_def *ftsd; int found; found = 0; FT_SLIST_FOREACH(ftsd, &ftstat->defs, chain) { if (!strcasecmp(name, ftsd->name)) return ftsd; } /* ftsd */ return (struct ftstat_def*)0L; } /* ftstat_def_find */ /* * function: ftstat_def_test_xfields * * Check if fields in current flow are valid for a stat definition -- ie * the filter does not reference a field not contained in the flow. * * returns: 0 okay * 1 fail */ int ftstat_def_test_xfields(struct ftstat_def *active_def, u_int64 test) { /* if the definition has tagging enabled _accum() will add the tags */ if (active_def->ftd) test |= FT_XFIELD_SRC_TAG|FT_XFIELD_DST_TAG; if ((active_def->xfields & test) != active_def->xfields) return 1; else return 0; } /* ftstat_def_test_xfields */ /* * function: ftstat_def_new * * Call the new method for each report. * * returns: 0 okay * 1 fail */ int ftstat_def_new(struct ftstat_def *active_def) { struct ftstat_rpt *ftsrpt; struct ftstat_rpt_item *ftsrpti; struct ftstat_rpt_out *ftsro; int ret; ret = 1; /* err */ /* foreach report in the definition */ FT_STAILQ_FOREACH(ftsrpti, &active_def->items, chain) { ftsrpt = ftsrpti->rpt; /* initialize */ ftsrpt->t_ignores = 0; ftsrpt->t_recs = 0; ftsrpt->t_flows = 0; ftsrpt->t_octets = 0; ftsrpt->t_packets = 0; ftsrpt->t_duration = 0; ftsrpt->t_count = 0; ftsrpt->time_start = 0xFFFFFFFF; ftsrpt->time_end = 0; ftsrpt->recs = 0; ftsrpt->avg_pps = 0; ftsrpt->avg_bps = 0; ftsrpt->max_pps = 0; ftsrpt->max_bps = 0; ftsrpt->min_pps = 0; ftsrpt->min_bps = 0; ftsrpt->all_fields = 0; /* foreach output in the report, sum the fields */ FT_STAILQ_FOREACH(ftsro, &ftsrpt->outs, chain) { ftsrpt->all_fields |= ftsro->fields; /* could sort and not display */ ftsrpt->all_fields |= ftsro->sort_field; } /* run the new function */ if (!(ftsrpt->data = ftsrpt->f_new(ftsrpt))) { fterr_warnx("f_new(%s): failed.", ftsrpt->name); goto out; } } ret = 0; out: return ret; } /* ftstat_def_new */ /* * function: ftstat_def_accum * * Call the accum method for each report. * * returns: 0 okay * <0 fail * 1 next report. */ int ftstat_def_accum(struct ftstat_def *active_def, char *rec, struct fts3rec_offsets *fo) { struct ftver ftv; struct ftstat_rpt *ftsrpt; struct ftstat_rpt_item *ftsrpti; struct fts3rec_all2 cur; char xl_rec[FT_IO_MAXREC]; int ret; FT_RECGET_UNIX_SECS(cur,rec,*fo); if (!active_def->start_time) active_def->start_time = cur.unix_secs; /* time series split? */ if ((active_def->max_time && (cur.unix_secs > active_def->start_time) && (cur.unix_secs - active_def->start_time) > active_def->max_time)) { active_def->start_time = cur.unix_secs; return 1; } ret = -1; /* err */ /* if mask replacement is enabled, do it */ if (active_def->ftmd) ftmask_def_eval(active_def->ftmd, rec, fo); /* if tagging is enabled, translate and tag */ if (active_def->ftd) { /* translate to 1005 is not allready */ if (fo->ftv.d_version != 1005) { ftv.d_version = 1005; ftrec_xlate(rec, &fo->ftv, &xl_rec, &ftv); rec = (char*)&xl_rec; fo = &nfo; } fttag_def_eval(active_def->ftd, (void*)rec); } /* if a filter is defined, evaluate it first */ if (active_def->ftfd) if (ftfil_def_eval(active_def->ftfd, rec, fo) == FT_FIL_MODE_DENY) goto done; /* foreach report in the definition */ FT_STAILQ_FOREACH(ftsrpti, &active_def->items, chain) { ftsrpt = ftsrpti->rpt; /* * if the tag mask option is set apply the masks, not this can only * be set if the tags exist. * */ if (ftsrpt->options & FT_STAT_OPT_TAG_MASK) { /* preserve tags */ FT_RECGET_SRC_TAG(cur,rec,*fo); FT_RECGET_DST_TAG(cur,rec,*fo); *((u_int32*)(rec+(*fo).src_tag)) &= ftsrpt->tag_mask_src; *((u_int32*)(rec+(*fo).dst_tag)) &= ftsrpt->tag_mask_dst; } /* if a filter is defined, evaluate */ if (ftsrpt->ftfd) if (ftfil_def_eval(ftsrpt->ftfd, rec, fo) == FT_FIL_MODE_DENY) goto restore_tag; /* run the accum function */ if (ftsrpt->f_accum(ftsrpt, rec, fo)) { fterr_warnx("f_accum(%s): failed.", ftsrpt->name); goto out; } /* restore tags */ restore_tag: if (ftsrpt->options & FT_STAT_OPT_TAG_MASK) { *((u_int32*)(rec+(*fo).src_tag)) = cur.src_tag; *((u_int32*)(rec+(*fo).dst_tag)) = cur.dst_tag; } } done: ret = 0; out: return ret; } /* ftstat_def_accum */ /* * function: ftstat_def_calc * * Call the calc method for each report. * * returns: 0 okay * 1 fail */ int ftstat_def_calc(struct ftstat_def *active_def) { struct ftstat_rpt *ftsrpt; struct ftstat_rpt_item *ftsrpti; int ret; ret = 1; /* err */ /* foreach report in the definition */ FT_STAILQ_FOREACH(ftsrpti, &active_def->items, chain) { ftsrpt = ftsrpti->rpt; /* run the new function */ if (ftsrpt->f_calc(ftsrpt)) { fterr_warnx("f_calc(%s): failed.", ftsrpt->name); goto out; } } ret = 0; out: return ret; } /* ftstat_def_calc */ /* * function: ftstat_def_dump * * Call the dump method for each report. * * returns: 0 okay * 1 fail */ int ftstat_def_dump(struct ftio *ftio, struct ftstat_def *active_def) { struct tm *tm; time_t now; FILE *fp; struct ftstat_rpt *ftsrpt; struct ftstat_rpt_item *ftsrpti; struct ftstat_rpt_out *ftsro; int ret, noclose, pipe, status; char fmt_tmp[64], fmt_buf[1024], path_buf[1024], *path_run; char *mode; noclose = 0; /* fclose fp */ ret = 1; /* err */ fp = (FILE*)0L; /* foreach report in the definition */ FT_STAILQ_FOREACH(ftsrpti, &active_def->items, chain) { ftsrpt = ftsrpti->rpt; /* foreach output listed */ FT_STAILQ_FOREACH(ftsro, &ftsrpt->outs, chain) { /* current output is this one */ ftsrpt->out = ftsro; if (ftsro->path) { strncpy(fmt_buf, ftsro->path, sizeof(fmt_buf)); fmt_buf[sizeof(fmt_buf)-1] = 0; if (ftsro->time == FT_STAT_TIME_NOW) now = time((time_t*)0L); else if (ftsro->time == FT_STAT_TIME_START) now = ftsrpt->time_start; else if (ftsro->time == FT_STAT_TIME_END) now = ftsrpt->time_end; else if (ftsro->time == FT_STAT_TIME_MID) now = ftsrpt->time_start + (ftsrpt->time_end - ftsrpt->time_start)/2; tm = localtime(&now); if (!(strftime(path_buf, sizeof path_buf, fmt_buf, tm))) { fterr_warnx("strftime(): failed"); goto out; } if (path_buf[0] == '|') { pipe = 1; path_run = path_buf+1; } else { pipe = 0; path_run = path_buf; } if (!pipe) { if (mkpath(path_run, 0755) < 0) { fterr_warnx("mkpath(%s): failed", path_run); goto out; } /* write first interval, append the rest */ if (!active_def->interval) mode = "w"; else mode = "a"; if (!(fp = fopen(path_run, mode))) { fterr_warn("fopen(%s)", path_run); goto out; } noclose = 0; } else { /* pipe */ if (!(fp = popen(path_run, "w"))) { fterr_warn("popen(%s)", path_run); goto out; } noclose = 0; } /* !pipe */ } else { /* path specified */ fp = stdout; pipe = 0; noclose = 1; } /* display header bits */ dump_ascii_header(fp, ftio, active_def, ftsrpt); /* display totals? */ if (ftsro->options & FT_STAT_OPT_TOTALS) { STD_DUMP_TOTALS_HEADER; STD_DUMP_TOTALS_VAL; } /* run the dump function */ if (ftsro->f_dump(fp, ftio, ftsrpt)) { fterr_warnx("f_dump(%s): failed.", path_run); goto out; } if ((!noclose) && fp) { if (!pipe) { if (fclose(fp)) fterr_warn("fclose(%s)", path_run); } else { status = pclose(fp); if (status == -1) fterr_warn("pclose(%s)", path_run); if (WIFEXITED(status)) if (WEXITSTATUS(status) != 0) fterr_warnx("pclose(%s): failed exit code=%d.", path_run, WEXITSTATUS(status)); } } /* !noclose && fp */ } /* foreach output */ } /* foreach report */ ret = 0; out: return ret; } /* ftstat_def_dump */ /* * function: ftstat_def_free * * Call the free method for each report. * * returns: 0 okay * 1 fail */ int ftstat_def_free(struct ftstat_def *active_def) { struct ftstat_rpt *ftsrpt; struct ftstat_rpt_item *ftsrpti; /* foreach report in the definition */ FT_STAILQ_FOREACH(ftsrpti, &active_def->items, chain) { ftsrpt = ftsrpti->rpt; /* run the free function */ ftsrpt->f_free(ftsrpt->data); } return 0; } /* ftstat_def_free */ /* * function: ftstat_def_reset * * Reset reports between time series intervals * * returns: 0 okay * 1 fail */ int ftstat_def_reset(struct ftstat_def *active_def) { if (ftstat_def_free(active_def)) { fterr_warnx("ftstat_def_free(%s): failed.", active_def->name); return -1; } if (ftstat_def_new(active_def)) { fterr_warnx("ftstat_def_new(%s): failed.", active_def->name); return -1; } ++active_def->interval; return 0; } /* ftstat_def_reset */ /* * function: ftstat_list_reports * * List available reports * */ void ftstat_list_reports(FILE *out) { struct typelookup *tl; for (tl = tlookup; tl->name; ++tl) fprintf(out, " %s\n", tl->name); } /* ftstat_list_reports */ /* ************************************************************************* parse_rpt_* ************************************************************************* */ /* * function: parse_rpt * * process the 'stat-report' line. Each report has a unique name * which is added to the ftstat->rpts linked list. The current * report is updated in lp. Reports by themself do nothing, * they must be invoked by a definition. * * returns: 0 ok * <0 fail */ int parse_rpt(struct line_parser *lp, struct ftstat *ftstat) { char *c; struct ftstat_rpt *ftsr; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftsr, &ftstat->rpts, chain) { if (!strcasecmp(c, ftsr->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(ftsr = (struct ftstat_rpt*)malloc(sizeof *ftsr))) { fterr_warn("malloc()"); return -1; } bzero(ftsr, sizeof *ftsr); FT_STAILQ_INIT(&ftsr->outs); if (!(ftsr->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftsr); return -1; } strcpy(ftsr->name, c); FT_SLIST_INSERT_HEAD(&ftstat->rpts, ftsr, chain); lp->state = PARSE_STATE_REPORT; lp->cur_rpt = ftsr; lp->cur_rpt_out = (struct ftstat_rpt_out*)0L; return 0; } /* parse_rpt */ /* * function: parse_rpt_type * * process the 'type' line. * * returns: 0 ok * <0 fail */ int parse_rpt_type(struct line_parser *lp, struct ftstat *ftstat) { struct typelookup *tl; int found; if (!lp->cur_rpt) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting type.", lp->fname, lp->lineno); return -1; } if (lp->cur_rpt->f_new) { fterr_warnx("%s line %d: Type previously defined.", lp->fname, lp->lineno); return -1; } found = 0; for (tl = tlookup; tl->name; ++tl) { if (!strcasecmp(lp->word, tl->name)) { lp->cur_rpt->allowed_fields = tl->allowed_fields; lp->cur_rpt->allowed_options = tl->allowed_options; lp->cur_rpt->xfields = tl->xfields; lp->cur_rpt->f_new = tl->f_new; lp->cur_rpt->f_accum = tl->f_accum; lp->cur_rpt->f_calc = tl->f_calc; lp->cur_rpt->f_dump = tl->f_dump; lp->cur_rpt->f_free = tl->f_free; lp->cur_rpt->format_name = tl->name; found = 1; break; } } /* for */ if (!found) { fterr_warnx("%s line %d: Unrecognized type.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_rpt_type */ /* * function: parse_rpt_filter * * process the 'filter' line. * * returns: 0 ok * <0 fail */ int parse_rpt_filter(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting filter name.", lp->fname, lp->lineno); return -1; } if (lp->cur_rpt->ftfd) { fterr_warnx("%s line %d: Filter previously defined for report .", lp->fname, lp->lineno); return -1; } /* delay loading the filters until one is requested */ if (load_filters(ftstat)) { fterr_warnx("%s line %d: Filters not loaded.", lp->fname, lp->lineno); return -1; } if (!(lp->cur_rpt->ftfd = ftfil_def_find(&ftstat->ftfil, lp->word))) { fterr_warnx("%s line %d: Filter definition not found.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_rpt_filter */ /* * function: parse_rpt_tag_mask * * process the 'output' line. * * returns: 0 ok * <0 fail */ int parse_rpt_tag_mask(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting source mask.", lp->fname, lp->lineno); return -1; } lp->cur_rpt->tag_mask_src = strtoul(lp->word, (char**)0L, 0); NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting destination mask.", lp->fname, lp->lineno); return -1; } lp->cur_rpt->tag_mask_dst = strtoul(lp->word, (char**)0L, 0); lp->cur_rpt->options |= FT_STAT_OPT_TAG_MASK; lp->cur_rpt->xfields |= FT_XFIELD_SRC_TAG|FT_XFIELD_DST_TAG; return 0; } /* parse_rpt_tag_mask */ /* * function: parse_rpt_scale * * process the 'scale' line. * * returns: 0 ok * <0 fail */ int parse_rpt_scale(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting scaling factor.", lp->fname, lp->lineno); return -1; } lp->cur_rpt->scale = atoi(lp->word); return 0; } /* parse_rpt_scale */ /* * function: parse_rpt_ip_src_addr_fmt * * process the 'ip-source-address-format' line. * * returns: 0 ok * <0 fail */ int parse_rpt_ip_src_addr_fmt(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt) { fterr_warnx("%s line %d: Not in report.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting address format.", lp->fname, lp->lineno); return -1; } if (!(strcasecmp(lp->word, "prefix-len"))) lp->cur_rpt->options |= FT_STAT_OPT_SRC_PREFIX_LEN; else if (!(strcasecmp(lp->word, "prefix-mask"))) lp->cur_rpt->options |= FT_STAT_OPT_SRC_PREFIX_MASK; else if (!(strcasecmp(lp->word, "address"))) lp->cur_rpt->options &= ~(FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN); else { fterr_warnx("%s line %d: Invalid address format.", lp->fname, lp->lineno); return -1; } /* * if the PREFIX_LEN or PREFIX_MASK option is set then this report * requires the FT_XFIELD_XXX_MASK bits. */ if (lp->cur_rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { if (lp->cur_rpt->xfields & FT_XFIELD_SRCADDR) lp->cur_rpt->xfields |= FT_XFIELD_SRC_MASK; } else { lp->cur_rpt->xfields &= ~ FT_XFIELD_SRC_MASK; } /* OPT_PREFIX_* */ return 0; } /* parse_rpt_ip_src_addr_fmt */ /* * function: parse_rpt_ip_dst_addr_fmt * * process the 'ip-address-format' line. * * returns: 0 ok * <0 fail */ int parse_rpt_ip_dst_addr_fmt(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt) { fterr_warnx("%s line %d: Not in report.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting address format.", lp->fname, lp->lineno); return -1; } if (!(strcasecmp(lp->word, "prefix-len"))) lp->cur_rpt->options |= FT_STAT_OPT_DST_PREFIX_LEN; else if (!(strcasecmp(lp->word, "prefix-mask"))) lp->cur_rpt->options |= FT_STAT_OPT_DST_PREFIX_MASK; else if (!(strcasecmp(lp->word, "address"))) lp->cur_rpt->options &= ~(FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN); else { fterr_warnx("%s line %d: Invalid address format.", lp->fname, lp->lineno); return -1; } /* * if the PREFIX_LEN or PREFIX_MASK option is set then this report * requires the FT_XFIELD_XXX_MASK bits. */ if (lp->cur_rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { if (lp->cur_rpt->xfields & FT_XFIELD_DSTADDR) lp->cur_rpt->xfields |= FT_XFIELD_DST_MASK; } else { lp->cur_rpt->xfields &= ~ FT_XFIELD_DST_MASK; } /* OPT_PREFIX_* */ return 0; } /* parse_rpt_ip_dst_addr_fmt */ /* ************************************************************************* parse_rpt_output and friends ************************************************************************* */ /* * function: parse_rpt_output * * process the 'output' line. * * returns: 0 ok * <0 fail */ int parse_rpt_output(struct line_parser *lp, struct ftstat *ftstat) { struct ftstat_rpt_out *ftsro; if (!lp->cur_rpt) { fterr_warnx("%s line %d: Not in a report.", lp->fname, lp->lineno); return -1; } /* add a new entry to the list */ if (!(ftsro = (struct ftstat_rpt_out*)malloc(sizeof *ftsro))) { fterr_warn("malloc()"); return -1; } bzero(ftsro, sizeof *ftsro); ftsro->f_dump = lp->cur_rpt->f_dump; ftsro->fields = lp->cur_rpt->allowed_fields; ftsro->fields &= ~(FT_STAT_FIELD_FRECS| FT_STAT_FIELD_INDEX| FT_STAT_FIELD_FIRST| FT_STAT_FIELD_LAST| FT_STAT_FIELD_PPS| FT_STAT_FIELD_BPS); /* default some off */ ftsro->time = FT_STAT_TIME_MID; lp->cur_rpt_out = ftsro; FT_STAILQ_INSERT_TAIL(&lp->cur_rpt->outs, ftsro, chain); return 0; } /* parse_rpt_output */ /* * function: parse_rpt_out_format * * process the 'format' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_format(struct line_parser *lp, struct ftstat *ftstat) { enum ftstat_rpt_format format; if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting format.", lp->fname, lp->lineno); return -1; } if (!(strcasecmp(lp->word, "ascii"))) format = FT_STAT_FMT_ASCII; else if (!(strcasecmp(lp->word, "binary"))) format = FT_STAT_FMT_BINARY; else { fterr_warnx("%s line %d: Unrecognized format.", lp->fname, lp->lineno); return -1; } lp->cur_rpt->format = format; return 0; } /* parse_rpt_out_format */ /* * function: parse_rpt_out_sort * * process the 'sort' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_sort(struct line_parser *lp, struct ftstat *ftstat) { int sort_field, sort_order; char *c; if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting sort field.", lp->fname, lp->lineno); return -1; } c = lp->word; if (*c == '+') sort_order = FT_STAT_SORT_ASCEND; else if (*c == '-') sort_order = FT_STAT_SORT_DESCEND; else { fterr_warnx("%s line %d: Expecting + or -.", lp->fname, lp->lineno); return -1; } ++c; if (!(strcasecmp(c, "key"))) sort_field = FT_STAT_FIELD_KEY; else if (!(strcasecmp(c, "key1"))) sort_field = FT_STAT_FIELD_KEY1; else if (!(strcasecmp(c, "key2"))) sort_field = FT_STAT_FIELD_KEY2; else if (!(strcasecmp(c, "key3"))) sort_field = FT_STAT_FIELD_KEY3; else if (!(strcasecmp(c, "key4"))) sort_field = FT_STAT_FIELD_KEY4; else if (!(strcasecmp(c, "key5"))) sort_field = FT_STAT_FIELD_KEY5; else if (!(strcasecmp(c, "key6"))) sort_field = FT_STAT_FIELD_KEY6; else if (!(strcasecmp(c, "flows"))) sort_field = FT_STAT_FIELD_FLOWS; else if (!(strcasecmp(c, "octets"))) sort_field = FT_STAT_FIELD_OCTETS; else if (!(strcasecmp(c, "packets"))) sort_field = FT_STAT_FIELD_PACKETS; else if (!(strcasecmp(c, "duration"))) sort_field = FT_STAT_FIELD_DURATION; else if (!(strcasecmp(c, "avg-pps"))) sort_field = FT_STAT_FIELD_AVG_PPS; else if (!(strcasecmp(c, "min-pps"))) sort_field = FT_STAT_FIELD_MIN_PPS; else if (!(strcasecmp(c, "max-pps"))) sort_field = FT_STAT_FIELD_MAX_PPS; else if (!(strcasecmp(c, "avg-bps"))) sort_field = FT_STAT_FIELD_AVG_BPS; else if (!(strcasecmp(c, "min-bps"))) sort_field = FT_STAT_FIELD_MIN_BPS; else if (!(strcasecmp(c, "max-bps"))) sort_field = FT_STAT_FIELD_MAX_BPS; else if (!(strcasecmp(c, "other"))) sort_field = FT_STAT_FIELD_OTHER; else if (!(strcasecmp(c, "count"))) sort_field = FT_STAT_FIELD_COUNT; else if (!(strcasecmp(c, ""))) sort_field = 0; else { fterr_warnx("%s line %d: Unrecognized field.", lp->fname, lp->lineno); return -1; } if (sort_field) { /* make sure that the field selected is valid for this report type */ if ((lp->cur_rpt->allowed_fields & sort_field) != sort_field) { fterr_warnx("%s line %d: field \"%s\" selected not available for report.", lp->fname, lp->lineno, c); return -1; } lp->cur_rpt_out->sort_field = sort_field; lp->cur_rpt_out->sort_order = sort_order; lp->cur_rpt_out->options |= FT_STAT_OPT_SORT; } return 0; } /* parse_rpt_out_sort */ /* * function: parse_rpt_out_records * * process the 'records' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_records(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting num records.", lp->fname, lp->lineno); return -1; } lp->cur_rpt_out->records = strtoull(lp->word, (char**)0L, 0); return 0; } /* parse_rpt_out_records */ /* * function: parse_rpt_out_tally * * process the 'tally' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_tally(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting tally increment.", lp->fname, lp->lineno); return -1; } lp->cur_rpt_out->tally = strtoul(lp->word, (char**)0L, 0); if (lp->cur_rpt_out->tally) lp->cur_rpt_out->options |= FT_STAT_OPT_TALLY; else lp->cur_rpt_out->options &= ~FT_STAT_OPT_TALLY; return 0; } /* parse_rpt_out_tally */ /* * function: parse_rpt_out_fields * * process the 'fields' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_fields(struct line_parser *lp, struct ftstat *ftstat) { char *c, op; u_int32 nfields; if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } if (!lp->buf) { fterr_warnx("%s line %d: Expecting display fields.", lp->fname, lp->lineno); return -1; } c = lp->buf; while (c) { for (;;) { c = strsep(&lp->buf, " ,"); if ((c && *c) || (!c)) break; } if (!c) break; /* + to select, - to remove */ op = *c++; if ((op != '+') && (op != '-')) { fterr_warnx("%s line %d: Expecting +field or -field.", lp->fname, lp->lineno); return -1; } nfields = 0; if (!(strcasecmp(c, "index"))) nfields |= FT_STAT_FIELD_INDEX; else if (!(strcasecmp(c, "first"))) nfields |= FT_STAT_FIELD_FIRST; else if (!(strcasecmp(c, "last"))) nfields |= FT_STAT_FIELD_LAST; else if (!(strcasecmp(c, "key"))) nfields |= FT_STAT_FIELD_KEY; else if (!(strcasecmp(c, "key1"))) nfields |= FT_STAT_FIELD_KEY1; else if (!(strcasecmp(c, "key2"))) nfields |= FT_STAT_FIELD_KEY2; else if (!(strcasecmp(c, "key3"))) nfields |= FT_STAT_FIELD_KEY3; else if (!(strcasecmp(c, "key4"))) nfields |= FT_STAT_FIELD_KEY4; else if (!(strcasecmp(c, "key5"))) nfields |= FT_STAT_FIELD_KEY5; else if (!(strcasecmp(c, "key6"))) nfields |= FT_STAT_FIELD_KEY6; else if (!(strcasecmp(c, "flows"))) nfields |= FT_STAT_FIELD_FLOWS; else if (!(strcasecmp(c, "octets"))) nfields |= FT_STAT_FIELD_OCTETS; else if (!(strcasecmp(c, "packets"))) nfields |= FT_STAT_FIELD_PACKETS; else if (!(strcasecmp(c, "duration"))) nfields |= FT_STAT_FIELD_DURATION; else if (!(strcasecmp(c, "pps"))) nfields |= FT_STAT_FIELD_PPS; else if (!(strcasecmp(c, "avg-pps"))) nfields |= FT_STAT_FIELD_AVG_PPS; else if (!(strcasecmp(c, "min-pps"))) nfields |= FT_STAT_FIELD_MIN_PPS; else if (!(strcasecmp(c, "max-pps"))) nfields |= FT_STAT_FIELD_MAX_PPS; else if (!(strcasecmp(c, "bps"))) nfields |= FT_STAT_FIELD_BPS; else if (!(strcasecmp(c, "avg-bps"))) nfields |= FT_STAT_FIELD_AVG_BPS; else if (!(strcasecmp(c, "min-bps"))) nfields |= FT_STAT_FIELD_MIN_BPS; else if (!(strcasecmp(c, "max-bps"))) nfields |= FT_STAT_FIELD_MAX_BPS; else if (!(strcasecmp(c, "other"))) nfields |= FT_STAT_FIELD_OTHER; else if (!(strcasecmp(c, "generic"))) nfields |= FT_STAT_FIELD_GENERIC; else if (!(strcasecmp(c, "count"))) nfields |= FT_STAT_FIELD_COUNT; else if (!(strcasecmp(c, "frecs"))) nfields |= FT_STAT_FIELD_FRECS; else if (!(strcasecmp(c, ""))) nfields |= 0; else { fterr_warnx("%s line %d: Unrecognized field.", lp->fname, lp->lineno); return -1; } /* make sure that the field is valid for this report type */ if ((lp->cur_rpt->allowed_fields & nfields) != nfields) { fterr_warnx( "%s line %d: field \"%s\" selected not available for report.", lp->fname, lp->lineno, c); return -1; } if (op == '+') lp->cur_rpt_out->fields |= nfields; else if (op == '-') lp->cur_rpt_out->fields &= ~nfields; nfields = 0; } /* c */ return 0; } /* parse_rpt_out_fields */ /* * function: parse_rpt_out_options * * process the 'options' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_options(struct line_parser *lp, struct ftstat *ftstat) { int options; char *c, op; if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } if (!lp->buf) { fterr_warnx("%s line %d: Expecting options.", lp->fname, lp->lineno); return -1; } c = lp->buf; while (c) { for (;;) { c = strsep(&lp->buf, " ,"); if ((c && *c) || (!c)) break; } if (!c) break; /* + to select, - to remove */ op = *c++; if ((op != '+') && (op != '-')) { fterr_warnx("%s line %d: Expecting +option or -option.", lp->fname, lp->lineno); return -1; } options = 0; if (!(strcasecmp(c, "percent-total"))) options |= FT_STAT_OPT_PERCENT; else if (!(strcasecmp(c, "names"))) options |= FT_STAT_OPT_NAMES; else if (!(strcasecmp(c, "header"))) options |= FT_STAT_OPT_HEADER; else if (!(strcasecmp(c, "xheader"))) options |= FT_STAT_OPT_XHEADER; else if (!(strcasecmp(c, "totals"))) options |= FT_STAT_OPT_TOTALS; else { fterr_warnx("%s line %d: Unrecognized option.", lp->fname, lp->lineno); return -1; } /* make sure that the option is valid for this report type */ if ((lp->cur_rpt->allowed_options & options) != options) { fterr_warnx("%s line %d: option selected not available for report.", lp->fname, lp->lineno); return -1; } if (op == '+') lp->cur_rpt_out->options |= options; else if (op == '-') lp->cur_rpt_out->options &= ~options; options = 0; } /* c */ return 0; } /* parse_rpt_out_options */ /* * function: parse_rpt_out_path * * process the 'path' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_path(struct line_parser *lp, struct ftstat *ftstat) { char *c; int len; if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } if (!lp->buf) { fterr_warnx("%s line %d: Expecting pathname.", lp->fname, lp->lineno); return -1; } len = strlen(lp->buf); if (!(c = malloc(len+1))) { fterr_warn("malloc()"); return -1; } strcpy(c, lp->buf); lp->cur_rpt_out->path = c; /* eat the line */ for (; *(lp->buf); ++lp->buf); return 0; } /* parse_rpt_out_path */ /* * function: parse_rpt_out_time * * process the 'time' line. * * returns: 0 ok * <0 fail */ int parse_rpt_out_time(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_rpt_out) { fterr_warnx("%s line %d: Not in report output.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting time specifier.", lp->fname, lp->lineno); return -1; } if (!(strcasecmp(lp->word, "now"))) lp->cur_rpt_out->time = FT_STAT_TIME_NOW; else if (!(strcasecmp(lp->word, "start"))) lp->cur_rpt_out->time = FT_STAT_TIME_START; else if (!(strcasecmp(lp->word, "end"))) lp->cur_rpt_out->time = FT_STAT_TIME_END; else if (!(strcasecmp(lp->word, "mid"))) lp->cur_rpt_out->time = FT_STAT_TIME_MID; else { fterr_warnx("%s line %d: Invalid time specifier.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_rpt_out_time */ /* ************************************************************************* parse_def_* ************************************************************************* */ /* * function: parse_def * * process the 'stat-definition' line. Each definition has a unique name * which is added to the ftstat->defs linked list. The current * definition is updated in lp. Definitions reference reports * * returns: 0 ok * <0 fail */ int parse_def(struct line_parser *lp, struct ftstat *ftstat) { char *c; struct ftstat_def *ftsd; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftsd, &ftstat->defs, chain) { if (!strcasecmp(c, ftsd->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(ftsd = (struct ftstat_def*)malloc(sizeof *ftsd))) { fterr_warn("malloc()"); return -1; } bzero(ftsd, sizeof *ftsd); FT_STAILQ_INIT(&ftsd->items); if (!(ftsd->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftsd); return -1; } strcpy(ftsd->name, c); ftsd->ftstat = ftstat; FT_SLIST_INSERT_HEAD(&ftstat->defs, ftsd, chain); lp->state = PARSE_STATE_DEFINITION; lp->cur_def = ftsd; return 0; } /* parse_def */ /* * function: parse_def_filter * * process the 'filter' line. * * returns: 0 ok * <0 fail */ int parse_def_filter(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting filter name.", lp->fname, lp->lineno); return -1; } if (lp->cur_def->ftfd) { fterr_warnx("%s line %d: Filter previously defined for definition.", lp->fname, lp->lineno); return -1; } /* delay loading the filters until one is requested */ if (load_filters(ftstat)) { fterr_warnx("%s line %d: Filters not loaded.", lp->fname, lp->lineno); return -1; } if (!(lp->cur_def->ftfd = ftfil_def_find(&ftstat->ftfil, lp->word))) { fterr_warnx("%s line %d: Filter definition not found.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_def_filter */ /* * function: parse_def_tag * * process the 'tag' line. * * returns: 0 ok * <0 fail */ int parse_def_tag(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting tag name.", lp->fname, lp->lineno); return -1; } if (lp->cur_def->ftd) { fterr_warnx("%s line %d: Tag previously defined for definition.", lp->fname, lp->lineno); return -1; } /* delay loading the tags until one is requested */ if (load_tags(ftstat)) { fterr_warnx("%s line %d: Tags not loaded.", lp->fname, lp->lineno); return -1; } if (!(lp->cur_def->ftd = fttag_def_find(&ftstat->fttag, lp->word))) { fterr_warnx("%s line %d: Tag definition not found.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_def_tag */ /* * function: parse_def_mask * * process the 'mask' line. * * returns: 0 ok * <0 fail */ int parse_def_mask(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting mask name.", lp->fname, lp->lineno); return -1; } if (lp->cur_def->ftd) { fterr_warnx("%s line %d: Mask previously defined for definition.", lp->fname, lp->lineno); return -1; } /* delay loading the tags until one is requested */ if (load_masks(ftstat)) { fterr_warnx("%s line %d: Masks not loaded.", lp->fname, lp->lineno); return -1; } if (!(lp->cur_def->ftmd = ftmask_def_find(&ftstat->ftmask, lp->word))) { fterr_warnx("%s line %d: Mask definition not found.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_def_mask */ /* * function: parse_def_time_series * * process the 'time-series' line. * * returns: 0 ok * <0 fail */ int parse_def_time_series(struct line_parser *lp, struct ftstat *ftstat) { if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting time in seconds.", lp->fname, lp->lineno); return -1; } if (lp->cur_def->max_time) { fterr_warnx("%s line %d: Time previously defined for definition.", lp->fname, lp->lineno); return -1; } lp->cur_def->max_time = strtoul(lp->word, (char**)0L, 0); lp->cur_def->xfields |= FT_XFIELD_UNIX_SECS; return 0; } /* parse_def_time_series */ /* * function: parse_def_report * * process the 'report' line. * * resolve_reports() _must_ be called after the configuration file has * been parsed and before the parse buffer is released. * * returns: 0 ok * <0 fail */ int parse_def_report(struct line_parser *lp, struct ftstat *ftstat) { struct ftstat_rpt_item *ftsrpti; int n; if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting report name.", lp->fname, lp->lineno); return -1; } /* make sure this report is only added once */ FT_STAILQ_FOREACH(ftsrpti, &lp->cur_def->items, chain) { if (!(strcasecmp(lp->word, ftsrpti->tmp_report))) { fterr_warnx("%s line %d: Duplicate report in definition.", lp->fname, lp->lineno); return -1; } } /* add this report to the list */ if (!(ftsrpti = (struct ftstat_rpt_item*)malloc (sizeof *ftsrpti))) { fterr_warn("malloc()"); return -1; } bzero(ftsrpti, sizeof *ftsrpti); /* resolve this later in resolve_reports(); */ n = strlen(lp->word); if (!(ftsrpti->tmp_report = malloc(n+1))) fterr_errx(1, "malloc(tmp_report): failed"); strcpy(ftsrpti->tmp_report, lp->word); FT_STAILQ_INSERT_TAIL(&lp->cur_def->items, ftsrpti, chain); return 0; } /* parse_def_report */ /* * function: parse_include_tag * * process the 'include-tag' line. Allow the default tag location * to be changed. * * returns: 0 ok * <0 fail */ int parse_include_tag(struct line_parser *lp, struct ftstat *ftstat) { NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting pathname.", lp->fname, lp->lineno); return -1; } if (ftstat->tag_fname) { fterr_warnx("%s line %d: Tag pathname previously specified.", lp->fname, lp->lineno); return -1; } if (!(ftstat->tag_fname = malloc(strlen(lp->word)+1))) fterr_errx(1, "malloc(tag_fname): failed"); strcpy(ftstat->tag_fname, lp->word); return 0; } /* parse_include_tag */ /* * function: parse_include_filter * * process the 'include-filter' line. Allow the default filter location * to be changed. * * returns: 0 ok * <0 fail */ int parse_include_filter(struct line_parser *lp, struct ftstat *ftstat) { NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting pathname.", lp->fname, lp->lineno); return -1; } if (ftstat->filter_fname) { fterr_warnx("%s line %d: Filter pathname previously specified.", lp->fname, lp->lineno); return -1; } if (!(ftstat->filter_fname = malloc(strlen(lp->word)+1))) fterr_errx(1, "malloc(filter_fname): failed"); strcpy(ftstat->filter_fname, lp->word); return 0; } /* parse_include_filter */ /* * function: parse_include_mask * * process the 'include-mask' line. Allow the default mask location * to be changed. * * returns: 0 ok * <0 fail */ int parse_include_mask(struct line_parser *lp, struct ftstat *ftstat) { NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting pathname.", lp->fname, lp->lineno); return -1; } if (ftstat->mask_fname) { fterr_warnx("%s line %d: Mask pathname previously specified.", lp->fname, lp->lineno); return -1; } if (!(ftstat->mask_fname = malloc(strlen(lp->word)+1))) fterr_errx(1, "malloc(mask_fname): failed"); strcpy(ftstat->mask_fname, lp->word); return 0; } /* parse_include_mask */ /* ************************************************************************* ftstat_rpt_*_new/free/accum/dump ************************************************************************* */ /* function: ftstat_rpt_1_new * * Allocate and initialize data structures for rpt 1. * * returns allocated struct or 0L for error */ struct ftstat_rpt_1 *ftstat_rpt_1_new(struct ftstat_rpt *rpt) { struct ftstat_rpt_1 *rpt1; if (!(rpt1 = (struct ftstat_rpt_1*)malloc(sizeof (*rpt1)))) { fterr_warnx("malloc(rpt1): failed"); return (struct ftstat_rpt_1*)0L; } bzero(rpt1, sizeof *rpt1); return rpt1; } /* ftstat_rpt_1_new */ /* function: ftstat_rpt_1_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_1_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { struct ftstat_rpt_1 *rpt1; struct fts3rec_all2 cur; u_int32 time_tmp, duration_tmp; double pps_tmp, bps_tmp; u_long p; STD_ACCUM; rpt1 = rpt->data; time_tmp = cur.unix_secs; if (time_tmp < rpt1->time_start) rpt1->time_start = time_tmp; if (time_tmp > rpt1->time_end) rpt1->time_end = time_tmp; if (cur.First < rpt1->start) rpt1->start = cur.First; if (cur.Last > rpt1->end) rpt1->end = cur.Last; p = cur.dOctets64 / cur.dPkts64; if (p <= 32) ++ rpt1->psize32; else if (p <= 64) ++ rpt1->psize64; else if (p <= 96) ++ rpt1->psize96; else if (p <= 128) ++ rpt1->psize128; else if (p <= 160) ++ rpt1->psize160; else if (p <= 192) ++ rpt1->psize192; else if (p <= 224) ++ rpt1->psize224; else if (p <= 256) ++ rpt1->psize256; else if (p <= 288) ++ rpt1->psize288; else if (p <= 320) ++ rpt1->psize320; else if (p <= 352) ++ rpt1->psize352; else if (p <= 384) ++ rpt1->psize384; else if (p <= 416) ++ rpt1->psize416; else if (p <= 448) ++ rpt1->psize448; else if (p <= 480) ++ rpt1->psize480; else if (p <= 512) ++ rpt1->psize512; else if (p <= 544) ++ rpt1->psize544; else if (p <= 576) ++ rpt1->psize576; else if (p <= 1024) ++ rpt1->psize1024; else if (p <= 1536) ++ rpt1->psize1536; else if (p <= 2048) ++ rpt1->psize2048; else if (p <= 2560) ++ rpt1->psize2560; else if (p <= 3072) ++ rpt1->psize3072; else if (p <= 3584) ++ rpt1->psize3584; else if (p <= 4096) ++ rpt1->psize4096; else if (p <= 4608) ++ rpt1->psize4608; p = cur.dPkts64; if (p <= 1) ++ rpt1->fpsize1; else if (p <= 2) ++ rpt1->fpsize2; else if (p <= 4) ++ rpt1->fpsize4; else if (p <= 8) ++ rpt1->fpsize8; else if (p <= 12) ++ rpt1->fpsize12; else if (p <= 16) ++ rpt1->fpsize16; else if (p <= 20) ++ rpt1->fpsize20; else if (p <= 24) ++ rpt1->fpsize24; else if (p <= 28) ++ rpt1->fpsize28; else if (p <= 32) ++ rpt1->fpsize32; else if (p <= 36) ++ rpt1->fpsize36; else if (p <= 40) ++ rpt1->fpsize40; else if (p <= 44) ++ rpt1->fpsize44; else if (p <= 48) ++ rpt1->fpsize48; else if (p <= 52) ++ rpt1->fpsize52; else if (p <= 60) ++ rpt1->fpsize60; else if (p <= 100) ++ rpt1->fpsize100; else if (p <= 200) ++ rpt1->fpsize200; else if (p <= 300) ++ rpt1->fpsize300; else if (p <= 400) ++ rpt1->fpsize400; else if (p <= 500) ++ rpt1->fpsize500; else if (p <= 600) ++ rpt1->fpsize600; else if (p <= 700) ++ rpt1->fpsize700; else if (p <= 800) ++ rpt1->fpsize800; else if (p <= 900) ++ rpt1->fpsize900; else ++ rpt1->fpsize_other; p = cur.dOctets64; if (p <= 32) ++ rpt1->fosize32; else if (p <= 64) ++ rpt1->fosize64; else if (p <= 128) ++ rpt1->fosize128; else if (p <= 256) ++ rpt1->fosize256; else if (p <= 512) ++ rpt1->fosize512; else if (p <= 1280) ++ rpt1->fosize1280; else if (p <= 2048) ++ rpt1->fosize2048; else if (p <= 2816) ++ rpt1->fosize2816; else if (p <= 3584) ++ rpt1->fosize3584; else if (p <= 4352) ++ rpt1->fosize4352; else if (p <= 5120) ++ rpt1->fosize5120; else if (p <= 5888) ++ rpt1->fosize5888; else if (p <= 6656) ++ rpt1->fosize6656; else if (p <= 7424) ++ rpt1->fosize7424; else if (p <= 8192) ++ rpt1->fosize8192; else if (p <= 8960) ++ rpt1->fosize8960; else if (p <= 9728) ++ rpt1->fosize9728; else if (p <= 10496) ++ rpt1->fosize10496; else if (p <= 11264) ++ rpt1->fosize11264; else if (p <= 12032) ++ rpt1->fosize12032; else if (p <= 12800) ++ rpt1->fosize12800; else if (p <= 13568) ++ rpt1->fosize13568; else if (p <= 14336) ++ rpt1->fosize14336; else if (p <= 15104) ++ rpt1->fosize15104; else if (p <= 15872) ++ rpt1->fosize15872; else ++ rpt1->fosize_other; p = cur.Last - cur.First; rpt1->time += p; if (p <= 10) ++ rpt1->ftime10; else if (p <= 50) ++ rpt1->ftime50; else if (p <= 100) ++ rpt1->ftime100; else if (p <= 200) ++ rpt1->ftime200; else if (p <= 500) ++ rpt1->ftime500; else if (p <= 1000) ++ rpt1->ftime1000; else if (p <= 2000) ++ rpt1->ftime2000; else if (p <= 3000) ++ rpt1->ftime3000; else if (p <= 4000) ++ rpt1->ftime4000; else if (p <= 5000) ++ rpt1->ftime5000; else if (p <= 6000) ++ rpt1->ftime6000; else if (p <= 7000) ++ rpt1->ftime7000; else if (p <= 8000) ++ rpt1->ftime8000; else if (p <= 9000) ++ rpt1->ftime9000; else if (p <= 10000) ++ rpt1->ftime10000; else if (p <= 12000) ++ rpt1->ftime12000; else if (p <= 14000) ++ rpt1->ftime14000; else if (p <= 16000) ++ rpt1->ftime16000; else if (p <= 18000) ++ rpt1->ftime18000; else if (p <= 20000) ++ rpt1->ftime20000; else if (p <= 22000) ++ rpt1->ftime22000; else if (p <= 24000) ++ rpt1->ftime24000; else if (p <= 26000) ++ rpt1->ftime26000; else if (p <= 28000) ++ rpt1->ftime28000; else if (p <= 30000) ++ rpt1->ftime30000; else ++ rpt1->ftime_other; return 0; } /* ftstat_rpt_1_accum */ /* function: ftstat_rpt_1_calc * * Perform final calculations for rpt1 * * returns allocated struct or 0L for error */ int ftstat_rpt_1_calc(struct ftstat_rpt *rpt) { struct ftstat_rpt_1 *rpt1; u_int32 dif; rpt1 = rpt->data; STD_CALC; rpt1->time_real = rpt1->time_end - rpt1->time_start; dif = rpt1->end - rpt1->start; if (rpt->t_flows) { rpt1->aflowtime = rpt1->time / rpt->t_flows; rpt1->afs = rpt->t_octets / rpt->t_flows; rpt1->apf = rpt->t_packets / rpt->t_flows; } if (rpt->t_packets) rpt1->aps = rpt->t_octets / rpt->t_packets; if (dif) rpt1->fps = (double)rpt->t_flows / (dif / 1000.0); if (rpt1->time_real) rpt1->fps_real = (double)rpt->t_flows / (double)rpt1->time_real; return 0; } /* ftstat_rpt_1_calc */ /* function: ftstat_rpt_1_dump * * Dump data for report. * */ int ftstat_rpt_1_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { struct ftstat_rpt_1 *rpt1; char fmt_buf[1024]; rpt1 = rpt->data; fprintf(fp, "# rec2: time_real,aflowtime,aps,afs,apf,fps,fps_real,"); fprintf(fp, "psize32,psize64,psize96,psize128,psize160,psize192,psize224,psize256,psize288,psize320,psize352,psize384,psize416,psize448,psize480,psize512,psize544,psize576,psize1024,psize1536,psize2048,psize2560,psize3072,psize3584,>psize4096,psize4608,"); fprintf(fp, "fpsize1,fpsize2,fpsize4,fpsize8,fpsize12,fpsize16,fpsize20,fpsize24,fpsize28,fpsize32,fpsize36,fpsize40,fpsize44,fpsize48,fpsize52,fpsize60,fpsize100,fpsize200,fpsize300,fpsize400,fpsize500,fpsize600,fpsize700,fpsize800,fpsize900,fpsize_other,"); fprintf(fp, "fosize32,fosize64,fosize128,fosize256,fosize512,fosize1280,fosize2048,fosize2816,fosize3584,fosize4352,fosize5120,fosize5888,fosize6656,fosize7424,fosize8192,fosize8960,fosize9728,fosize10496,fosize11264,fosize12032,fosize12800,fosize13568,fosize14336,fosize15104,fosize15872,fosize_other,"); fprintf(fp, "ftime10,ftime50,ftime100,ftime200,ftime500,ftime1000,ftime2000,ftime3000,ftime4000,ftime5000,ftime6000,ftime7000,ftime8000,ftime9000,ftime10000,ftime12000,ftime14000,ftime16000,ftime18000,ftime20000,ftime22000,ftime24000,ftime26000,ftime28000,ftime30000,ftime_other\n"); fmt_uint64(fmt_buf, rpt1->time_real, FMT_JUST_LEFT); fprintf(fp, "%s,%f,%f,%f,%f,%f,%f,", fmt_buf, rpt1->aflowtime, rpt1->aps, rpt1->afs, rpt1->apf, rpt1->fps, rpt1->fps_real); fprintf(fp, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,", (double)rpt1->psize32 / (double)rpt->t_flows, (double)rpt1->psize64 / (double)rpt->t_flows, (double)rpt1->psize96 / (double)rpt->t_flows, (double)rpt1->psize128 / (double)rpt->t_flows, (double)rpt1->psize160 / (double)rpt->t_flows, (double)rpt1->psize192 / (double)rpt->t_flows, (double)rpt1->psize224 / (double)rpt->t_flows, (double)rpt1->psize256 / (double)rpt->t_flows, (double)rpt1->psize288 / (double)rpt->t_flows, (double)rpt1->psize320 / (double)rpt->t_flows, (double)rpt1->psize352 / (double)rpt->t_flows, (double)rpt1->psize384 / (double)rpt->t_flows, (double)rpt1->psize416 / (double)rpt->t_flows, (double)rpt1->psize448 / (double)rpt->t_flows, (double)rpt1->psize480 / (double)rpt->t_flows, (double)rpt1->psize512 / (double)rpt->t_flows, (double)rpt1->psize544 / (double)rpt->t_flows, (double)rpt1->psize576 / (double)rpt->t_flows, (double)rpt1->psize1024 / (double)rpt->t_flows, (double)rpt1->psize1536 / (double)rpt->t_flows, (double)rpt1->psize2048 / (double)rpt->t_flows, (double)rpt1->psize2560 / (double)rpt->t_flows, (double)rpt1->psize3072 / (double)rpt->t_flows, (double)rpt1->psize3584 / (double)rpt->t_flows, (double)rpt1->psize4096 / (double)rpt->t_flows, (double)rpt1->psize4608 / (double)rpt->t_flows); fprintf(fp, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,", (double)rpt1->fpsize1 / (double)rpt->t_flows, (double)rpt1->fpsize2 / (double)rpt->t_flows, (double)rpt1->fpsize4 / (double)rpt->t_flows, (double)rpt1->fpsize8 / (double)rpt->t_flows, (double)rpt1->fpsize12 / (double)rpt->t_flows, (double)rpt1->fpsize16 / (double)rpt->t_flows, (double)rpt1->fpsize20 / (double)rpt->t_flows, (double)rpt1->fpsize24 / (double)rpt->t_flows, (double)rpt1->fpsize28 / (double)rpt->t_flows, (double)rpt1->fpsize32 / (double)rpt->t_flows, (double)rpt1->fpsize36 / (double)rpt->t_flows, (double)rpt1->fpsize40 / (double)rpt->t_flows, (double)rpt1->fpsize44 / (double)rpt->t_flows, (double)rpt1->fpsize48 / (double)rpt->t_flows, (double)rpt1->fpsize52 / (double)rpt->t_flows, (double)rpt1->fpsize60 / (double)rpt->t_flows, (double)rpt1->fpsize100 / (double)rpt->t_flows, (double)rpt1->fpsize200 / (double)rpt->t_flows, (double)rpt1->fpsize300 / (double)rpt->t_flows, (double)rpt1->fpsize400 / (double)rpt->t_flows, (double)rpt1->fpsize500 / (double)rpt->t_flows, (double)rpt1->fpsize600 / (double)rpt->t_flows, (double)rpt1->fpsize700 / (double)rpt->t_flows, (double)rpt1->fpsize800 / (double)rpt->t_flows, (double)rpt1->fpsize900 / (double)rpt->t_flows, (double)rpt1->fpsize_other / (double)rpt->t_flows); fprintf(fp, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,", (double)rpt1->fosize32 / (double)rpt->t_flows, (double)rpt1->fosize64 / (double)rpt->t_flows, (double)rpt1->fosize128 / (double)rpt->t_flows, (double)rpt1->fosize256 / (double)rpt->t_flows, (double)rpt1->fosize512 / (double)rpt->t_flows, (double)rpt1->fosize1280 / (double)rpt->t_flows, (double)rpt1->fosize2048 / (double)rpt->t_flows, (double)rpt1->fosize2816 / (double)rpt->t_flows, (double)rpt1->fosize3584 / (double)rpt->t_flows, (double)rpt1->fosize4352 / (double)rpt->t_flows, (double)rpt1->fosize5120 / (double)rpt->t_flows, (double)rpt1->fosize5888 / (double)rpt->t_flows, (double)rpt1->fosize6656 / (double)rpt->t_flows, (double)rpt1->fosize7424 / (double)rpt->t_flows, (double)rpt1->fosize8192 / (double)rpt->t_flows, (double)rpt1->fosize8960 / (double)rpt->t_flows, (double)rpt1->fosize9728 / (double)rpt->t_flows, (double)rpt1->fosize10496 / (double)rpt->t_flows, (double)rpt1->fosize11264 / (double)rpt->t_flows, (double)rpt1->fosize12032 / (double)rpt->t_flows, (double)rpt1->fosize12800 / (double)rpt->t_flows, (double)rpt1->fosize13568 / (double)rpt->t_flows, (double)rpt1->fosize14336 / (double)rpt->t_flows, (double)rpt1->fosize15104 / (double)rpt->t_flows, (double)rpt1->fosize15872 / (double)rpt->t_flows, (double)rpt1->fosize_other / (double)rpt->t_flows); fprintf(fp, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n", (double)rpt1->ftime10 / (double)rpt->t_flows, (double)rpt1->ftime50 / (double)rpt->t_flows, (double)rpt1->ftime100 / (double)rpt->t_flows, (double)rpt1->ftime200 / (double)rpt->t_flows, (double)rpt1->ftime500 / (double)rpt->t_flows, (double)rpt1->ftime1000 / (double)rpt->t_flows, (double)rpt1->ftime2000 / (double)rpt->t_flows, (double)rpt1->ftime3000 / (double)rpt->t_flows, (double)rpt1->ftime4000 / (double)rpt->t_flows, (double)rpt1->ftime5000 / (double)rpt->t_flows, (double)rpt1->ftime6000 / (double)rpt->t_flows, (double)rpt1->ftime7000 / (double)rpt->t_flows, (double)rpt1->ftime8000 / (double)rpt->t_flows, (double)rpt1->ftime9000 / (double)rpt->t_flows, (double)rpt1->ftime10000 / (double)rpt->t_flows, (double)rpt1->ftime12000 / (double)rpt->t_flows, (double)rpt1->ftime14000 / (double)rpt->t_flows, (double)rpt1->ftime16000 / (double)rpt->t_flows, (double)rpt1->ftime18000 / (double)rpt->t_flows, (double)rpt1->ftime20000 / (double)rpt->t_flows, (double)rpt1->ftime22000 / (double)rpt->t_flows, (double)rpt1->ftime24000 / (double)rpt->t_flows, (double)rpt1->ftime26000 / (double)rpt->t_flows, (double)rpt1->ftime28000 / (double)rpt->t_flows, (double)rpt1->ftime30000 / (double)rpt->t_flows, (double)rpt1->ftime_other / (double)rpt->t_flows); return 0; } /* ftstat_rpt_1_dump */ /* function: ftstat_rpt_1_free * * Free data structures for report allocated by ftstat_rpt_1_new * */ void ftstat_rpt_1_free(struct ftstat_rpt_1 *rpt1) { if (rpt1) free(rpt1); } /* ftstat_rpt_1_free */ /* function: ftstat_rpt_2_new * * Allocate and initialize data structures for rpt 2. * * returns allocated struct or 0L for error */ struct ftstat_rpt_2 *ftstat_rpt_2_new(struct ftstat_rpt *rpt) { struct ftstat_rpt_2 *rpt2; if (!(rpt2 = (struct ftstat_rpt_2*)malloc(sizeof (*rpt2)))) { fterr_warnx("malloc(rpt2): failed"); return (struct ftstat_rpt_2*)0L; } bzero(rpt2, sizeof *rpt2); return rpt2; } /* ftstat_rpt_2_new */ /* function: ftstat_rpt_2_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_2_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { struct fts3rec_all2 cur; u_int32 duration_tmp; double pps_tmp, bps_tmp; STD_ACCUM; return 0; } /* ftstat_rpt_2_accum */ /* function: ftstat_rpt_2_calc * * Perform final calculations for rpt2 * * returns allocated struct or 0L for error */ int ftstat_rpt_2_calc(struct ftstat_rpt *rpt) { STD_CALC; return 0; } /* ftstat_rpt_2_calc */ /* function: ftstat_rpt_2_dump * * Dump data for report. * */ int ftstat_rpt_2_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { return 0; } /* ftstat_rpt_2_dump */ /* function: ftstat_rpt_2_free * * Free data structures for report allocated by ftstat_rpt_2_new * */ void ftstat_rpt_2_free(struct ftstat_rpt_2 *rpt2) { if (rpt2) free(rpt2); } /* ftstat_rpt_2_free */ /* function: ftstat_rpt_3_new * * Allocate and initialize data structures for rpt 3. * * returns allocated struct or 0L for error */ struct ftstat_rpt_3 *ftstat_rpt_3_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_3, rpt3, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_3_new */ /* function: ftstat_rpt_3_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_3_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_3, rpt3, ftchash_rec_c32, ftch_recc32, ftch_recc32p); ftch_recc32.c32 = cur.dOctets64 / cur.dPkts64; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt3, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_3_accum */ /* function: ftstat_rpt_3_calc * * Perform final calculations for rpt3 * * returns allocated struct or 0L for error */ int ftstat_rpt_3_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_3, rpt3, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_3_calc */ /* function: ftstat_rpt_3_dump * * Dump data for report. * */ int ftstat_rpt_3_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_3, rpt3, chash_c32_dump, (char*)0L, "packet size/flow", "", "", "", "", "", ""); } /* ftstat_rpt_3_dump */ /* function: ftstat_rpt_3_free * * Free data structures for report allocated by ftstat_rpt_3_new * */ void ftstat_rpt_3_free(struct ftstat_rpt_3 *rpt3) { STD_FREE_HASH(rpt3); } /* ftstat_rpt_3_free */ /* function: ftstat_rpt_4_new * * Allocate and initialize data structures for rpt 4. * * returns allocated struct or 0L for error */ struct ftstat_rpt_4 *ftstat_rpt_4_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_4, rpt4, 65536, ftchash_rec_c64, 8, 65536); } /* ftstat_rpt_4_new */ /* function: ftstat_rpt_4_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_4_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_4, rpt4, ftchash_rec_c64, ftch_recc64, ftch_recc64p); ftch_recc64.c64 = cur.dOctets64; hash = ftch_recc64.c64 & 0x000000FFFFFFLL; hash = (hash>>16) ^ (hash & 0xFFFF); STD_ACCUM_HASH2(rpt4, ftch_recc64, ftch_recc64p); return 0; } /* ftstat_rpt_4_accum */ /* function: ftstat_rpt_4_calc * * Perform final calculations for rpt4 * * returns allocated struct or 0L for error */ int ftstat_rpt_4_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_4, rpt4, ftchash_rec_c64, ftch_recc64); } /* ftstat_rpt_4_calc */ /* function: ftstat_rpt_4_dump * * Dump data for report. * */ int ftstat_rpt_4_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_4, rpt4, chash_c64_dump, "octets/flow", "", "", "", "", "", ""); } /* ftstat_rpt_4_dump */ /* function: ftstat_rpt_4_free * * Free data structures for report allocated by ftstat_rpt_4_new * */ void ftstat_rpt_4_free(struct ftstat_rpt_4 *rpt4) { STD_FREE_HASH(rpt4); } /* ftstat_rpt_4_free */ /* function: ftstat_rpt_5_new * * Allocate and initialize data structures for rpt 5. * * returns allocated struct or 0L for error */ struct ftstat_rpt_5 *ftstat_rpt_5_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_5, rpt5, 65536, ftchash_rec_c64, 8, 65536); } /* ftstat_rpt_5_new */ /* function: ftstat_rpt_5_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_5_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_5, rpt5, ftchash_rec_c64, ftch_recc64, ftch_recc64p); ftch_recc64.c64 = cur.dPkts64; hash = ftch_recc64.c64 & 0x000000FFFFFFLL; hash = (hash>>16) ^ (hash & 0xFFFF); STD_ACCUM_HASH2(rpt5, ftch_recc64, ftch_recc64p); return 0; } /* ftstat_rpt_5_accum */ /* function: ftstat_rpt_5_calc * * Perform final calculations for rpt5 * * returns allocated struct or 0L for error */ int ftstat_rpt_5_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_5, rpt5, ftchash_rec_c64, ftch_recc64); } /* ftstat_rpt_5_calc */ /* function: ftstat_rpt_5_dump * * Dump data for report. * */ int ftstat_rpt_5_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_5, rpt5, chash_c64_dump, "packets/flow", "", "", "", "", "", ""); } /* ftstat_rpt_5_dump */ /* function: ftstat_rpt_5_free * * Free data structures for report allocated by ftstat_rpt_5_new * */ void ftstat_rpt_5_free(struct ftstat_rpt_5 *rpt5) { STD_FREE_HASH(rpt5); } /* ftstat_rpt_5_free */ /* function: ftstat_rpt_6_new * * Allocate and initialize data structures for rpt 6. * * returns allocated struct or 0L for error */ struct ftstat_rpt_6 *ftstat_rpt_6_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_6, rpt6, 65536, rpt); } /* ftstat_rpt_6_new */ /* function: ftstat_rpt_6_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_6_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_6, rpt6); FT_RECGET_SRCPORT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt6->bucket, cur.srcport); return 0; } /* ftstat_rpt_6_accum */ /* function: ftstat_rpt_6_calc * * Perform final calculations for rpt6 * * returns allocated struct or 0L for error */ int ftstat_rpt_6_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_6, rpt6, 65536); } /* ftstat_rpt_6_calc */ /* function: ftstat_rpt_6_dump * * Dump data for report. * */ int ftstat_rpt_6_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_6, rpt6, 65536, FT_PATH_SYM_TCP_PORT, "ip-source-port", "", "", "", "", "", ""); } /* ftstat_rpt_6_dump */ /* function: ftstat_rpt_6_free * * Free data structures for report allocated by ftstat_rpt_6_new * */ void ftstat_rpt_6_free(struct ftstat_rpt_6 *rpt6) { STD_FREE_BUCKET(rpt6); } /* ftstat_rpt_6_free */ /* function: ftstat_rpt_7_new * * Allocate and initialize data structures for rpt 7. * * returns allocated struct or 0L for error */ struct ftstat_rpt_7 *ftstat_rpt_7_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_7, rpt7, 65536, rpt); } /* ftstat_rpt_7_new */ /* function: ftstat_rpt_7_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_7_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_7, rpt7); FT_RECGET_DSTPORT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt7->bucket, cur.dstport); return 0; } /* ftstat_rpt_7_accum */ /* function: ftstat_rpt_7_calc * * Perform final calculations for rpt7 * * returns allocated struct or 0L for error */ int ftstat_rpt_7_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_7, rpt7, 65536); } /* ftstat_rpt_7_calc */ /* function: ftstat_rpt_7_dump * * Dump data for report. * */ int ftstat_rpt_7_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_7, rpt7, 65536, FT_PATH_SYM_TCP_PORT, "ip-destination-port", "", "", "", "", "", ""); } /* ftstat_rpt_7_dump */ /* function: ftstat_rpt_7_free * * Free data structures for report allocated by ftstat_rpt_7_new * */ void ftstat_rpt_7_free(struct ftstat_rpt_7 *rpt7) { } /* ftstat_rpt_7_free */ /* function: ftstat_rpt_8_new * * Allocate and initialize data structures for rpt 8. * * returns allocated struct or 0L for error */ struct ftstat_rpt_8 *ftstat_rpt_8_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_8, rpt8, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_8_new */ /* function: ftstat_rpt_8_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_8_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_8, rpt8, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_SRCPORT(cur,rec,*fo); ftch_recc162.c16a = cur.srcport; ftch_recc162.c16b = cur.dstport; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt8, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_8_accum */ /* function: ftstat_rpt_8_calc * * Perform final calculations for rpt8 * * returns allocated struct or 0L for error */ int ftstat_rpt_8_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_8, rpt8, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_8_calc */ /* function: ftstat_rpt_8_dump * * Dump data for report. * */ int ftstat_rpt_8_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_8, rpt8, chash_c162_dump, FT_PATH_SYM_TCP_PORT, FT_PATH_SYM_TCP_PORT, "", "ip-source-port", "ip-destination-port", "", "", "", ""); } /* ftstat_rpt_8_dump */ /* function: ftstat_rpt_8_free * * Free data structures for report allocated by ftstat_rpt_8_new * */ void ftstat_rpt_8_free(struct ftstat_rpt_8 *rpt8) { STD_FREE_HASH(rpt8); } /* ftstat_rpt_8_free */ /* function: ftstat_rpt_9_new * * Allocate and initialize data structures for rpt 9. * * returns allocated struct or 0L for error */ struct ftstat_rpt_9 *ftstat_rpt_9_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_9, rpt9, 65536, ftchash_rec_c64, 8, 65536); } /* ftstat_rpt_9_new */ /* function: ftstat_rpt_9_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_9_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_9, rpt9, ftchash_rec_c64, ftch_recc64, ftch_recc64p); ftch_recc64.c64 = (duration_tmp) ? (double)cur.dOctets64*8/((double)(duration_tmp)/1000.0) : 0; hash = ftch_recc64.c64 & 0x000000FFFFFFLL; hash = (hash>>16) ^ (hash & 0xFFFF); STD_ACCUM_HASH2(rpt9, ftch_recc64, ftch_recc64p); return 0; } /* ftstat_rpt_9_accum */ /* function: ftstat_rpt_9_calc * * Perform final calculations for rpt9 * * returns allocated struct or 0L for error */ int ftstat_rpt_9_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_9, rpt9, ftchash_rec_c64, ftch_recc64); } /* ftstat_rpt_9_calc */ /* function: ftstat_rpt_9_dump * * Dump data for report. * */ int ftstat_rpt_9_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_9, rpt9, chash_c64_dump, "bps/flow", "", "", "", "", "", ""); } /* ftstat_rpt_9_dump */ /* function: ftstat_rpt_9_free * * Free data structures for report allocated by ftstat_rpt_9_new * */ void ftstat_rpt_9_free(struct ftstat_rpt_9 *rpt9) { STD_FREE_HASH(rpt9); } /* ftstat_rpt_9_free */ /* function: ftstat_rpt_10_new * * Allocate and initialize data structures for rpt 10. * * returns allocated struct or 0L for error */ struct ftstat_rpt_10 *ftstat_rpt_10_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_10, rpt10, 65536, ftchash_rec_c64, 8, 65536); } /* ftstat_rpt_10_new */ /* function: ftstat_rpt_10_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_10_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_10, rpt10, ftchash_rec_c64, ftch_recc64, ftch_recc64p); ftch_recc64.c64 = (duration_tmp) ? (double)cur.dPkts64/((double)(duration_tmp)/1000.0) : 0; hash = ftch_recc64.c64 & 0x000000FFFFFFLL; hash = (hash>>16) ^ (hash & 0xFFFF); STD_ACCUM_HASH2(rpt10, ftch_recc64, ftch_recc64p); return 0; } /* ftstat_rpt_10_accum */ /* function: ftstat_rpt_10_calc * * Perform final calculations for rpt10 * * returns allocated struct or 0L for error */ int ftstat_rpt_10_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_10, rpt10, ftchash_rec_c64, ftch_recc64); } /* ftstat_rpt_10_calc */ /* function: ftstat_rpt_10_dump * * Dump data for report. * */ int ftstat_rpt_10_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_10, rpt10, chash_c64_dump, "pps/flow", "", "", "", "", "", ""); } /* ftstat_rpt_10_dump */ /* function: ftstat_rpt_10_free * * Free data structures for report allocated by ftstat_rpt_10_new * */ void ftstat_rpt_10_free(struct ftstat_rpt_10 *rpt10) { STD_FREE_HASH(rpt10); } /* ftstat_rpt_10_free */ /* function: ftstat_rpt_11_new * * Allocate and initialize data structures for rpt 11. * * returns allocated struct or 0L for error */ struct ftstat_rpt_11 *ftstat_rpt_11_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_11, rpt11, 7, rpt); } /* ftstat_rpt_11_new */ /* function: ftstat_rpt_11_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_11_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { u_int16 tmp; STD_ACCUM_BUCKET1(ftstat_rpt_11, rpt11); FT_RECGET_DSTADDR(cur,rec,*fo); if ((cur.dstaddr & 0xf0000000) == 0xf0000000) tmp = 5; /* Class E Reserved */ else if ((cur.dstaddr & 0xff000000) == 0xe8000000) tmp = 4; /* Class D Multicast-SSM */ else if ((cur.dstaddr & 0xf0000000) == 0xe0000000) tmp = 3; /* Class D Multicast-ASM */ else if ((cur.dstaddr & 0xe0000000) == 0xc0000000) tmp = 2; /* Class C Unicast */ else if ((cur.dstaddr & 0xc0000000) == 0x80000000) tmp = 1; /* Class B Unicast */ else if ((cur.dstaddr & 0x80000000) == 0x00000000) tmp = 0; /* Class A Unicast */ else tmp = 6; /* not reached */ STD_ACCUM_BUCKET2(rpt11->bucket, tmp); return 0; } /* ftstat_rpt_11_accum */ /* function: ftstat_rpt_11_calc * * Perform final calculations for rpt11 * * returns allocated struct or 0L for error */ int ftstat_rpt_11_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_11, rpt11, 7); } /* ftstat_rpt_11_calc */ /* function: ftstat_rpt_11_dump * * Dump data for report. * */ int ftstat_rpt_11_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_11, rpt11, 7, FT_PATH_SYM_IP_TYPE, "ip-destination-address-type", "", "", "", "", "", ""); } /* ftstat_rpt_11_dump */ /* function: ftstat_rpt_11_free * * Free data structures for report allocated by ftstat_rpt_11_new * */ void ftstat_rpt_11_free(struct ftstat_rpt_11 *rpt11) { STD_FREE_BUCKET(rpt11); } /* ftstat_rpt_11_free */ /* function: ftstat_rpt_12_new * * Allocate and initialize data structures for rpt 12. * * returns allocated struct or 0L for error */ struct ftstat_rpt_12 *ftstat_rpt_12_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_12, rpt12, 256, rpt); } /* ftstat_rpt_12_new */ /* function: ftstat_rpt_12_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_12_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_12, rpt12); FT_RECGET_PROT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt12->bucket, cur.prot); return 0; } /* ftstat_rpt_12_accum */ /* function: ftstat_rpt_12_calc * * Perform final calculations for rpt12 * * returns allocated struct or 0L for error */ int ftstat_rpt_12_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_12, rpt12, 256); } /* ftstat_rpt_12_calc */ /* function: ftstat_rpt_12_dump * * Dump data for report. * */ int ftstat_rpt_12_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_12, rpt12, 256, FT_PATH_SYM_IP_PROT, "ip-protocol", "", "", "", "", "", ""); } /* ftstat_rpt_12_dump */ /* function: ftstat_rpt_12_free * * Free data structures for report allocated by ftstat_rpt_12_new * */ void ftstat_rpt_12_free(struct ftstat_rpt_12 *rpt12) { STD_FREE_BUCKET(rpt12); } /* ftstat_rpt_12_free */ /* function: ftstat_rpt_13_new * * Allocate and initialize data structures for rpt 13. * * returns allocated struct or 0L for error */ struct ftstat_rpt_13 *ftstat_rpt_13_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_13, rpt13, 256, rpt); } /* ftstat_rpt_13_new */ /* function: ftstat_rpt_13_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_13_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_13, rpt13); FT_RECGET_TOS(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt13->bucket, cur.tos); return 0; } /* ftstat_rpt_13_accum */ /* function: ftstat_rpt_13_calc * * Perform final calculations for rpt13 * * returns allocated struct or 0L for error */ int ftstat_rpt_13_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_13, rpt13, 256); } /* ftstat_rpt_13_calc */ /* function: ftstat_rpt_13_dump * * Dump data for report. * */ int ftstat_rpt_13_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_13, rpt13, 256, (char*)0L, "ip-tos", "", "", "", "", "", ""); } /* ftstat_rpt_13_dump */ /* function: ftstat_rpt_13_free * * Free data structures for report allocated by ftstat_rpt_13_new * */ void ftstat_rpt_13_free(struct ftstat_rpt_13 *rpt13) { STD_FREE_BUCKET(rpt13); } /* ftstat_rpt_13_free */ /* function: ftstat_rpt_14_new * * Allocate and initialize data structures for rpt 14. * * returns allocated struct or 0L for error */ struct ftstat_rpt_14 *ftstat_rpt_14_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_14, rpt14, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_14_new */ /* function: ftstat_rpt_14_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_14_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_14, rpt14, ftchash_rec_c32, ftch_recc32, ftch_recc32p); FT_RECGET_NEXTHOP(cur,rec,*fo); ftch_recc32.c32 = cur.nexthop; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt14, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_14_accum */ /* function: ftstat_rpt_14_calc * * Perform final calculations for rpt14 * * returns allocated struct or 0L for error */ int ftstat_rpt_14_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_14, rpt14, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_14_calc */ /* function: ftstat_rpt_14_dump * * Dump data for report. * */ int ftstat_rpt_14_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_14, rpt14, chash_ip_dump, "ip-next-hop-address", "", "", "", "", "", ""); } /* ftstat_rpt_14_dump */ /* function: ftstat_rpt_14_free * * Free data structures for report allocated by ftstat_rpt_14_new * */ void ftstat_rpt_14_free(struct ftstat_rpt_14 *rpt14) { STD_FREE_HASH(rpt14); } /* ftstat_rpt_14_free */ /* function: ftstat_rpt_15_new * * Allocate and initialize data structures for rpt 15. * * returns allocated struct or 0L for error */ struct ftstat_rpt_15 *ftstat_rpt_15_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_15, rpt15, 65536, ftchash_rec_prefix, 5, 65536); } /* ftstat_rpt_15_new */ /* function: ftstat_rpt_15_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_15_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_15, rpt15, ftchash_rec_prefix, ftch_recprefix, ftch_recprefixp); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix.prefix = cur.srcaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix.prefix &= ipv4_len2mask(ftch_recprefix.mask); hash = (ftch_recprefix.prefix>>16) ^ (ftch_recprefix.prefix & 0xFFFF); hash = hash ^ (ftch_recprefix.mask); STD_ACCUM_HASH2(rpt15, ftch_recprefix, ftch_recprefixp); return 0; } /* ftstat_rpt_15_accum */ /* function: ftstat_rpt_15_calc * * Perform final calculations for rpt15 * * returns allocated struct or 0L for error */ int ftstat_rpt_15_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_15, rpt15, ftchash_rec_prefix, ftch_recprefix); } /* ftstat_rpt_15_calc */ /* function: ftstat_rpt_15_dump * * Dump data for report. * */ int ftstat_rpt_15_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0P(ftstat_rpt_15, rpt15, chash_prefix_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, "ip-source-address", "", "", "", "", "", ""); } /* ftstat_rpt_15_dump */ /* function: ftstat_rpt_15_free * * Free data structures for report allocated by ftstat_rpt_15_new * */ void ftstat_rpt_15_free(struct ftstat_rpt_15 *rpt15) { STD_FREE_HASH(rpt15); } /* ftstat_rpt_15_free */ /* function: ftstat_rpt_16_new * * Allocate and initialize data structures for rpt 16. * * returns allocated struct or 0L for error */ struct ftstat_rpt_16 *ftstat_rpt_16_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_16, rpt16, 65536, ftchash_rec_prefix, 5, 65536); } /* ftstat_rpt_16_new */ /* function: ftstat_rpt_16_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_16_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_16, rpt16, ftchash_rec_prefix, ftch_recprefix, ftch_recprefixp); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix.prefix = cur.dstaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix.prefix &= ipv4_len2mask(ftch_recprefix.mask); hash = (ftch_recprefix.prefix>>16) ^ (ftch_recprefix.prefix & 0xFFFF); hash = hash ^ (ftch_recprefix.mask); STD_ACCUM_HASH2(rpt16, ftch_recprefix, ftch_recprefixp); return 0; } /* ftstat_rpt_16_accum */ /* function: ftstat_rpt_16_calc * * Perform final calculations for rpt16 * * returns allocated struct or 0L for error */ int ftstat_rpt_16_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_16, rpt16, ftchash_rec_prefix, ftch_recprefix); } /* ftstat_rpt_16_calc */ /* function: ftstat_rpt_16_dump * * Dump data for report. * */ int ftstat_rpt_16_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0P(ftstat_rpt_16, rpt16, chash_prefix_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, "ip-destination-address", "", "", "", "", "", ""); } /* ftstat_rpt_16_dump */ /* function: ftstat_rpt_16_free * * Free data structures for report allocated by ftstat_rpt_16_new * */ void ftstat_rpt_16_free(struct ftstat_rpt_16 *rpt16) { STD_FREE_HASH(rpt16); } /* ftstat_rpt_16_free */ /* function: ftstat_rpt_17_new * * Allocate and initialize data structures for rpt 17. * * returns allocated struct or 0L for error */ struct ftstat_rpt_17 *ftstat_rpt_17_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_17, rpt17, 65536, ftchash_rec_prefix2, 16, 65536); } /* ftstat_rpt_17_new */ /* function: ftstat_rpt_17_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_17_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_17, rpt17, ftchash_rec_prefix2, ftch_recprefix2, ftch_recprefix2p); FT_RECGET_DSTADDR(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix2.src_prefix = cur.srcaddr; ftch_recprefix2.dst_prefix = cur.dstaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix2.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix2.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix2.src_prefix &= ipv4_len2mask(ftch_recprefix2.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix2.dst_prefix &= ipv4_len2mask(ftch_recprefix2.dst_mask); } hash = (ftch_recprefix2.src_prefix>>16)^ (ftch_recprefix2.src_prefix & 0xFFFF)^ (ftch_recprefix2.dst_prefix>>16)^ (ftch_recprefix2.dst_prefix & 0xFFFF)^ (ftch_recprefix2.src_mask)^ (u_int32)(ftch_recprefix2.dst_mask<<8); STD_ACCUM_HASH2(rpt17, ftch_recprefix2, ftch_recprefix2p); return 0; } /* ftstat_rpt_17_accum */ /* function: ftstat_rpt_17_calc * * Perform final calculations for rpt17 * * returns allocated struct or 0L for error */ int ftstat_rpt_17_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_17, rpt17, ftchash_rec_prefix2, ftch_recprefix2); } /* ftstat_rpt_17_calc */ /* function: ftstat_rpt_17_dump * * Dump data for report. * */ int ftstat_rpt_17_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_17, rpt17, chash_prefix2_dump, "", "ip-source-address", "ip-destination-address", "", "", "", ""); } /* ftstat_rpt_17_dump */ /* function: ftstat_rpt_17_free * * Free data structures for report allocated by ftstat_rpt_17_new * */ void ftstat_rpt_17_free(struct ftstat_rpt_17 *rpt17) { } /* ftstat_rpt_17_free */ /* function: ftstat_rpt_18_new * * Allocate and initialize data structures for rpt 18. * * returns allocated struct or 0L for error */ struct ftstat_rpt_18 *ftstat_rpt_18_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_18, rpt18, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_18_new */ /* function: ftstat_rpt_18_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_18_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_18, rpt18, ftchash_rec_c32, ftch_recc32, ftch_recc32p); FT_RECGET_EXADDR(cur,rec,*fo); ftch_recc32.c32 = cur.exaddr; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt18, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_18_accum */ /* function: ftstat_rpt_18_calc * * Perform final calculations for rpt18 * * returns allocated struct or 0L for error */ int ftstat_rpt_18_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_18, rpt18, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_18_calc */ /* function: ftstat_rpt_18_dump * * Dump data for report. * */ int ftstat_rpt_18_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_18, rpt18, chash_ip_dump, "ip-exporter-address", "", "", "", "", "", ""); } /* ftstat_rpt_18_dump */ /* function: ftstat_rpt_18_free * * Free data structures for report allocated by ftstat_rpt_18_new * */ void ftstat_rpt_18_free(struct ftstat_rpt_18 *rpt18) { STD_FREE_HASH(rpt18); } /* ftstat_rpt_18_free */ /* function: ftstat_rpt_19_new * * Allocate and initialize data structures for rpt 19. * * returns allocated struct or 0L for error */ struct ftstat_rpt_19 *ftstat_rpt_19_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_19, rpt19, 65536, rpt); } /* ftstat_rpt_19_new */ /* function: ftstat_rpt_19_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_19_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_19, rpt19); FT_RECGET_INPUT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt19->bucket, cur.input); return 0; } /* ftstat_rpt_19_accum */ /* function: ftstat_rpt_19_calc * * Perform final calculations for rpt19 * * returns allocated struct or 0L for error */ int ftstat_rpt_19_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_19, rpt19, 65536); } /* ftstat_rpt_19_calc */ /* function: ftstat_rpt_19_dump * * Dump data for report. * */ int ftstat_rpt_19_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_19, rpt19, 65536, (char*)0L, "input-interface", "", "", "", "", "", ""); } /* ftstat_rpt_19_dump */ /* function: ftstat_rpt_19_free * * Free data structures for report allocated by ftstat_rpt_19_new * */ void ftstat_rpt_19_free(struct ftstat_rpt_19 *rpt19) { STD_FREE_BUCKET(rpt19); } /* ftstat_rpt_19_free */ /* function: ftstat_rpt_20_new * * Allocate and initialize data structures for rpt 20. * * returns allocated struct or 0L for error */ struct ftstat_rpt_20 *ftstat_rpt_20_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_20, rpt20, 65536, rpt); } /* ftstat_rpt_20_new */ /* function: ftstat_rpt_20_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_20_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_20, rpt20); FT_RECGET_OUTPUT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt20->bucket, cur.output); return 0; } /* ftstat_rpt_20_accum */ /* function: ftstat_rpt_20_calc * * Perform final calculations for rpt20 * * returns allocated struct or 0L for error */ int ftstat_rpt_20_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_20, rpt20, 65536); } /* ftstat_rpt_20_calc */ /* function: ftstat_rpt_20_dump * * Dump data for report. * */ int ftstat_rpt_20_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_20, rpt20, 65536, (char*)0L, "output-interface", "", "", "", "", "", ""); } /* ftstat_rpt_20_dump */ /* function: ftstat_rpt_20_free * * Free data structures for report allocated by ftstat_rpt_20_new * */ void ftstat_rpt_20_free(struct ftstat_rpt_20 *rpt20) { } /* ftstat_rpt_20_free */ /* function: ftstat_rpt_21_new * * Allocate and initialize data structures for rpt 21. * * returns allocated struct or 0L for error */ struct ftstat_rpt_21 *ftstat_rpt_21_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_21, rpt21, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_21_new */ /* function: ftstat_rpt_21_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_21_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_21, rpt21, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_OUTPUT(cur,rec,*fo); ftch_recc162.c16a = cur.input; ftch_recc162.c16b = cur.output; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt21, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_21_accum */ /* function: ftstat_rpt_21_calc * * Perform final calculations for rpt21 * * returns allocated struct or 0L for error */ int ftstat_rpt_21_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_21, rpt21, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_21_calc */ /* function: ftstat_rpt_21_dump * * Dump data for report. * */ int ftstat_rpt_21_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_21, rpt21, chash_c162_dump, (char*)0L, (char*)0L, "", "input-interface", "output-interface", "", "", "", ""); } /* ftstat_rpt_21_dump */ /* function: ftstat_rpt_21_free * * Free data structures for report allocated by ftstat_rpt_21_new * */ void ftstat_rpt_21_free(struct ftstat_rpt_21 *rpt21) { STD_FREE_HASH(rpt21); } /* ftstat_rpt_21_free */ /* function: ftstat_rpt_22_new * * Allocate and initialize data structures for rpt 22. * * returns allocated struct or 0L for error */ struct ftstat_rpt_22 *ftstat_rpt_22_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_22, rpt22, 65536, rpt); } /* ftstat_rpt_22_new */ /* function: ftstat_rpt_22_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_22_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_22, rpt22); FT_RECGET_SRC_AS(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt22->bucket, cur.src_as); return 0; } /* ftstat_rpt_22_accum */ /* function: ftstat_rpt_22_calc * * Perform final calculations for rpt22 * * returns allocated struct or 0L for error */ int ftstat_rpt_22_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_22, rpt22, 65536); } /* ftstat_rpt_22_calc */ /* function: ftstat_rpt_22_dump * * Dump data for report. * */ int ftstat_rpt_22_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_22, rpt22, 65536, FT_PATH_SYM_ASN, "source-as", "", "", "", "", "", ""); } /* ftstat_rpt_22_dump */ /* function: ftstat_rpt_22_free * * Free data structures for report allocated by ftstat_rpt_22_new * */ void ftstat_rpt_22_free(struct ftstat_rpt_22 *rpt22) { STD_FREE_BUCKET(rpt22); } /* ftstat_rpt_22_free */ /* function: ftstat_rpt_23_new * * Allocate and initialize data structures for rpt 23. * * returns allocated struct or 0L for error */ struct ftstat_rpt_23 *ftstat_rpt_23_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_23, rpt23, 65536, rpt); } /* ftstat_rpt_23_new */ /* function: ftstat_rpt_23_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_23_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_23, rpt23); FT_RECGET_DST_AS(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt23->bucket, cur.dst_as); return 0; } /* ftstat_rpt_23_accum */ /* function: ftstat_rpt_23_calc * * Perform final calculations for rpt23 * * returns allocated struct or 0L for error */ int ftstat_rpt_23_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_23, rpt23, 65536); } /* ftstat_rpt_23_calc */ /* function: ftstat_rpt_23_dump * * Dump data for report. * */ int ftstat_rpt_23_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_23, rpt23, 65536, FT_PATH_SYM_ASN, "destination-as", "", "", "", "", "", ""); } /* ftstat_rpt_23_dump */ /* function: ftstat_rpt_23_free * * Free data structures for report allocated by ftstat_rpt_23_new * */ void ftstat_rpt_23_free(struct ftstat_rpt_23 *rpt23) { STD_FREE_BUCKET(rpt23); } /* ftstat_rpt_23_free */ /* function: ftstat_rpt_24_new * * Allocate and initialize data structures for rpt 24. * * returns allocated struct or 0L for error */ struct ftstat_rpt_24 *ftstat_rpt_24_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_24, rpt24, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_24_new */ /* function: ftstat_rpt_24_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_24_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_24, rpt24, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); ftch_recc162.c16a = cur.src_as; ftch_recc162.c16b = cur.dst_as; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt24, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_24_accum */ /* function: ftstat_rpt_24_calc * * Perform final calculations for rpt24 * * returns allocated struct or 0L for error */ int ftstat_rpt_24_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_24, rpt24, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_24_calc */ /* function: ftstat_rpt_24_dump * * Dump data for report. * */ int ftstat_rpt_24_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_24, rpt24, chash_c162_dump, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "source-as", "destination-AS", "", "", "", ""); } /* ftstat_rpt_24_dump */ /* function: ftstat_rpt_24_free * * Free data structures for report allocated by ftstat_rpt_24_new * */ void ftstat_rpt_24_free(struct ftstat_rpt_24 *rpt24) { STD_FREE_HASH(rpt24); } /* ftstat_rpt_24_free */ /* function: ftstat_rpt_25_new * * Allocate and initialize data structures for rpt 25. * * returns allocated struct or 0L for error */ struct ftstat_rpt_25 *ftstat_rpt_25_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_25, rpt25, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_25_new */ /* function: ftstat_rpt_25_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_25_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_25, rpt25, ftchash_rec_prefix16, ftch_recprefix16, ftch_prefix16p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.srcaddr; ftch_recprefix16.c16 = cur.src_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt25, ftch_recprefix16, ftch_prefix16p); return 0; } /* ftstat_rpt_25_accum */ /* function: ftstat_rpt_25_calc * * Perform final calculations for rpt25 * * returns allocated struct or 0L for error */ int ftstat_rpt_25_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_25, rpt25, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_25_calc */ /* function: ftstat_rpt_25_dump * * Dump data for report. * */ int ftstat_rpt_25_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_25, rpt25, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_ASN, "", "ip-source-address", "source-as", "", "", "", ""); } /* ftstat_rpt_25_dump */ /* function: ftstat_rpt_25_free * * Free data structures for report allocated by ftstat_rpt_25_new * */ void ftstat_rpt_25_free(struct ftstat_rpt_25 *rpt25) { STD_FREE_HASH(rpt25); } /* ftstat_rpt_25_free */ /* function: ftstat_rpt_26_new * * Allocate and initialize data structures for rpt 26. * * returns allocated struct or 0L for error */ struct ftstat_rpt_26 *ftstat_rpt_26_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_26, rpt26, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_26_new */ /* function: ftstat_rpt_26_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_26_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_26, rpt26, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.dstaddr; ftch_recprefix16.c16 = cur.src_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt26, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_26_accum */ /* function: ftstat_rpt_26_calc * * Perform final calculations for rpt26 * * returns allocated struct or 0L for error */ int ftstat_rpt_26_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_26, rpt26, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_26_calc */ /* function: ftstat_rpt_26_dump * * Dump data for report. * */ int ftstat_rpt_26_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_26, rpt26, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_ASN, "", "ip-source-address", "destination-as", "", "", "", ""); } /* ftstat_rpt_26_dump */ /* function: ftstat_rpt_26_free * * Free data structures for report allocated by ftstat_rpt_26_new * */ void ftstat_rpt_26_free(struct ftstat_rpt_26 *rpt26) { STD_FREE_HASH(rpt26); } /* ftstat_rpt_26_free */ /* function: ftstat_rpt_27_new * * Allocate and initialize data structures for rpt 27. * * returns allocated struct or 0L for error */ struct ftstat_rpt_27 *ftstat_rpt_27_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_27, rpt27, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_27_new */ /* function: ftstat_rpt_27_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_27_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_26, rpt26, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_DST_AS(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.srcaddr; ftch_recprefix16.c16 = cur.dst_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt26, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_27_accum */ /* function: ftstat_rpt_27_calc * * Perform final calculations for rpt27 * * returns allocated struct or 0L for error */ int ftstat_rpt_27_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_27, rpt27, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_27_calc */ /* function: ftstat_rpt_27_dump * * Dump data for report. * */ int ftstat_rpt_27_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_27, rpt27, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_ASN, "", "ip-source-address", "destination-as", "", "", "", ""); } /* ftstat_rpt_27_dump */ /* function: ftstat_rpt_27_free * * Free data structures for report allocated by ftstat_rpt_27_new * */ void ftstat_rpt_27_free(struct ftstat_rpt_27 *rpt27) { STD_FREE_HASH(rpt27); } /* ftstat_rpt_27_free */ /* function: ftstat_rpt_28_new * * Allocate and initialize data structures for rpt 28. * * returns allocated struct or 0L for error */ struct ftstat_rpt_28 *ftstat_rpt_28_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_28, rpt28, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_28_new */ /* function: ftstat_rpt_28_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_28_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_28, rpt28, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_DST_AS(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.dstaddr; ftch_recprefix16.c16 = cur.dst_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt28, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_28_accum */ /* function: ftstat_rpt_28_calc * * Perform final calculations for rpt28 * * returns allocated struct or 0L for error */ int ftstat_rpt_28_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_28, rpt28, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_28_calc */ /* function: ftstat_rpt_28_dump * * Dump data for report. * */ int ftstat_rpt_28_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_28, rpt28, chash_prefix16_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_ASN, "", "ip-destination-address", "source-as", "", "", "", ""); } /* ftstat_rpt_28_dump */ /* function: ftstat_rpt_28_free * * Free data structures for report allocated by ftstat_rpt_28_new * */ void ftstat_rpt_28_free(struct ftstat_rpt_28 *rpt28) { STD_FREE_HASH(rpt28); } /* ftstat_rpt_28_free */ /* function: ftstat_rpt_29_new * * Allocate and initialize data structures for rpt 29. * * returns allocated struct or 0L for error */ struct ftstat_rpt_29 *ftstat_rpt_29_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_29, rpt29, 65536, ftchash_rec_prefix216, 13, 65536); } /* ftstat_rpt_29_new */ /* function: ftstat_rpt_29_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_29_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_29, rpt29, ftchash_rec_prefix216, ftch_recprefix216, ftch_recprefix216p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix216.src_prefix = cur.srcaddr; ftch_recprefix216.dst_prefix = cur.dstaddr; ftch_recprefix216.c16 = cur.src_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix216.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix216.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix216.src_prefix &= ipv4_len2mask(ftch_recprefix216.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix216.dst_prefix &= ipv4_len2mask(ftch_recprefix216.dst_mask); } hash = (ftch_recprefix216.src_prefix>>16)^ (ftch_recprefix216.src_prefix & 0xFFFF)^ (ftch_recprefix216.dst_prefix>>16)^ (ftch_recprefix216.dst_prefix & 0xFFFF)^ (ftch_recprefix216.c16)^ (ftch_recprefix216.src_mask)^ (u_int32)(ftch_recprefix216.dst_mask<<8); STD_ACCUM_HASH2(rpt29, ftch_recprefix216, ftch_recprefix216p); return 0; } /* ftstat_rpt_29_accum */ /* function: ftstat_rpt_29_calc * * Perform final calculations for rpt29 * * returns allocated struct or 0L for error */ int ftstat_rpt_29_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_29, rpt29, ftchash_rec_prefix216, ftch_recprefix216); } /* ftstat_rpt_29_calc */ /* function: ftstat_rpt_29_dump * * Dump data for report. * */ int ftstat_rpt_29_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_29, rpt29, chash_prefix216_dump, FT_PATH_SYM_ASN, "", "ip-source-address", "ip-destination-address", "source-as", "", "", ""); } /* ftstat_rpt_29_dump */ /* function: ftstat_rpt_29_free * * Free data structures for report allocated by ftstat_rpt_29_new * */ void ftstat_rpt_29_free(struct ftstat_rpt_29 *rpt29) { STD_FREE_HASH(rpt29); } /* ftstat_rpt_29_free */ /* function: ftstat_rpt_30_new * * Allocate and initialize data structures for rpt 30. * * returns allocated struct or 0L for error */ struct ftstat_rpt_30 *ftstat_rpt_30_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_30, rpt30, 65536, ftchash_rec_prefix216, 13, 65536); } /* ftstat_rpt_30_new */ /* function: ftstat_rpt_30_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_30_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_30, rpt30, ftchash_rec_prefix216, ftch_recprefix216, ftch_recprefix216p); FT_RECGET_DST_AS(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix216.src_prefix = cur.srcaddr; ftch_recprefix216.dst_prefix = cur.dstaddr; ftch_recprefix216.c16 = cur.dst_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix216.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix216.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix216.src_prefix &= ipv4_len2mask(ftch_recprefix216.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix216.dst_prefix &= ipv4_len2mask(ftch_recprefix216.dst_mask); } hash = (ftch_recprefix216.src_prefix>>16)^ (ftch_recprefix216.src_prefix & 0xFFFF)^ (ftch_recprefix216.dst_prefix>>16)^ (ftch_recprefix216.dst_prefix & 0xFFFF)^ (ftch_recprefix216.c16)^ (ftch_recprefix216.src_mask)^ (u_int32)(ftch_recprefix216.dst_mask<<8); STD_ACCUM_HASH2(rpt30, ftch_recprefix216, ftch_recprefix216p); return 0; } /* ftstat_rpt_30_accum */ /* function: ftstat_rpt_30_calc * * Perform final calculations for rpt30 * * returns allocated struct or 0L for error */ int ftstat_rpt_30_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_30, rpt30, ftchash_rec_prefix216, ftch_recprefix216); } /* ftstat_rpt_30_calc */ /* function: ftstat_rpt_30_dump * * Dump data for report. * */ int ftstat_rpt_30_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_30, rpt30, chash_prefix216_dump, FT_PATH_SYM_ASN, "", "ip-source-address", "ip-destination-address", "destination-as", "", "", ""); } /* ftstat_rpt_30_dump */ /* function: ftstat_rpt_30_free * * Free data structures for report allocated by ftstat_rpt_30_new * */ void ftstat_rpt_30_free(struct ftstat_rpt_30 *rpt30) { STD_FREE_HASH(rpt30); } /* ftstat_rpt_30_free */ /* function: ftstat_rpt_31_new * * Allocate and initialize data structures for rpt 31. * * returns allocated struct or 0L for error */ struct ftstat_rpt_31 *ftstat_rpt_31_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_31, rpt31, 65536, ftchash_rec_prefix2162, 16, 65536); } /* ftstat_rpt_31_new */ /* function: ftstat_rpt_31_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_31_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_31, rpt31, ftchash_rec_prefix2162, ftch_recprefix2162, ftch_recprefix2162p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix2162.src_prefix = cur.srcaddr; ftch_recprefix2162.dst_prefix = cur.dstaddr; ftch_recprefix2162.c16a = cur.src_as; ftch_recprefix2162.c16b = cur.dst_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix2162.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix2162.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix2162.src_prefix &= ipv4_len2mask(ftch_recprefix2162.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix2162.dst_prefix &= ipv4_len2mask(ftch_recprefix2162.dst_mask); } hash = (ftch_recprefix2162.src_prefix>>16)^ (ftch_recprefix2162.src_prefix & 0xFFFF)^ (ftch_recprefix2162.dst_prefix>>16)^ (ftch_recprefix2162.dst_prefix & 0xFFFF)^ (ftch_recprefix2162.c16b)^ (ftch_recprefix2162.c16a)^ (ftch_recprefix2162.src_mask)^ (u_int32)(ftch_recprefix2162.dst_mask<<8); STD_ACCUM_HASH2(rpt31, ftch_recprefix2162, ftch_recprefix2162p); return 0; } /* ftstat_rpt_31_accum */ /* function: ftstat_rpt_31_calc * * Perform final calculations for rpt31 * * returns allocated struct or 0L for error */ int ftstat_rpt_31_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_31, rpt31, ftchash_rec_prefix2162, ftch_recprefix2162); } /* ftstat_rpt_31_calc */ /* function: ftstat_rpt_31_dump * * Dump data for report. * */ int ftstat_rpt_31_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_31, rpt31, chash_prefix2162_dump, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "ip-source-address", "ip-destination-address", "source-as", "destination-as", "", ""); } /* ftstat_rpt_31_dump */ /* function: ftstat_rpt_31_free * * Free data structures for report allocated by ftstat_rpt_31_new * */ void ftstat_rpt_31_free(struct ftstat_rpt_31 *rpt31) { STD_FREE_HASH(rpt31); } /* ftstat_rpt_31_free */ /* function: ftstat_rpt_32_new * * Allocate and initialize data structures for rpt 32. * * returns allocated struct or 0L for error */ struct ftstat_rpt_32 *ftstat_rpt_32_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_32, rpt32, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_32_new */ /* function: ftstat_rpt_32_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_32_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_32, rpt32, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.srcaddr; ftch_recprefix16.c16 = cur.input; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt32, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_32_accum */ /* function: ftstat_rpt_32_calc * * Perform final calculations for rpt32 * * returns allocated struct or 0L for error */ int ftstat_rpt_32_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_32, rpt32, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_32_calc */ /* function: ftstat_rpt_32_dump * * Dump data for report. * */ int ftstat_rpt_32_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_32, rpt32, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, (char*)0L, "", "ip-source-address", "input-interface", "", "", "", ""); } /* ftstat_rpt_32_dump */ /* function: ftstat_rpt_32_free * * Free data structures for report allocated by ftstat_rpt_32_new * */ void ftstat_rpt_32_free(struct ftstat_rpt_32 *rpt32) { STD_FREE_HASH(rpt32); } /* ftstat_rpt_32_free */ /* function: ftstat_rpt_33_new * * Allocate and initialize data structures for rpt 33. * * returns allocated struct or 0L for error */ struct ftstat_rpt_33 *ftstat_rpt_33_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_33, rpt33, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_33_new */ /* function: ftstat_rpt_33_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_33_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_33, rpt33, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.dstaddr; ftch_recprefix16.c16 = cur.input; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt33, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_33_accum */ /* function: ftstat_rpt_33_calc * * Perform final calculations for rpt33 * * returns allocated struct or 0L for error */ int ftstat_rpt_33_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_33, rpt33, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_33_calc */ /* function: ftstat_rpt_33_dump * * Dump data for report. * */ int ftstat_rpt_33_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_33, rpt33, chash_prefix16_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, (char*)0L, "", "ip-destination-address", "input-interface", "", "", "", ""); } /* ftstat_rpt_33_dump */ /* function: ftstat_rpt_33_free * * Free data structures for report allocated by ftstat_rpt_33_new * */ void ftstat_rpt_33_free(struct ftstat_rpt_33 *rpt33) { } /* ftstat_rpt_33_free */ /* function: ftstat_rpt_34_new * * Allocate and initialize data structures for rpt 34. * * returns allocated struct or 0L for error */ struct ftstat_rpt_34 *ftstat_rpt_34_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_34, rpt34, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_34_new */ /* function: ftstat_rpt_34_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_34_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_33, rpt33, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.srcaddr; ftch_recprefix16.c16 = cur.output; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt33, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_34_accum */ /* function: ftstat_rpt_34_calc * * Perform final calculations for rpt34 * * returns allocated struct or 0L for error */ int ftstat_rpt_34_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_34, rpt34, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_34_calc */ /* function: ftstat_rpt_34_dump * * Dump data for report. * */ int ftstat_rpt_34_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_28, rpt28, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, (char*)0L, "", "ip-source-address", "output-interface", "", "", "", ""); } /* ftstat_rpt_34_dump */ /* function: ftstat_rpt_34_free * * Free data structures for report allocated by ftstat_rpt_34_new * */ void ftstat_rpt_34_free(struct ftstat_rpt_34 *rpt34) { STD_FREE_HASH(rpt34); } /* ftstat_rpt_34_free */ /* function: ftstat_rpt_35_new * * Allocate and initialize data structures for rpt 35. * * returns allocated struct or 0L for error */ struct ftstat_rpt_35 *ftstat_rpt_35_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_35, rpt35, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_35_new */ /* function: ftstat_rpt_35_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_35_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_35, rpt35, ftchash_rec_prefix16, ftch_recprefix16, ftch_recprefix16p); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.dstaddr; ftch_recprefix16.c16 = cur.output; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt35, ftch_recprefix16, ftch_recprefix16p); return 0; } /* ftstat_rpt_35_accum */ /* function: ftstat_rpt_35_calc * * Perform final calculations for rpt35 * * returns allocated struct or 0L for error */ int ftstat_rpt_35_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_35, rpt35, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_35_calc */ /* function: ftstat_rpt_35_dump * * Dump data for report. * */ int ftstat_rpt_35_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_35, rpt35, chash_prefix16_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, (char*)0L, "", "ip-destination-address", "output-interface", "", "", "", ""); } /* ftstat_rpt_35_dump */ /* function: ftstat_rpt_35_free * * Free data structures for report allocated by ftstat_rpt_35_new * */ void ftstat_rpt_35_free(struct ftstat_rpt_35 *rpt35) { STD_FREE_HASH(rpt35); } /* ftstat_rpt_35_free */ /* function: ftstat_rpt_36_new * * Allocate and initialize data structures for rpt 36. * * returns allocated struct or 0L for error */ struct ftstat_rpt_36 *ftstat_rpt_36_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_36, rpt36, 65536, ftchash_rec_prefix216, 13, 65536); } /* ftstat_rpt_36_new */ /* function: ftstat_rpt_36_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_36_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_36, rpt36, ftchash_rec_prefix216, ftch_recprefix216, ftch_recprefix216p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix216.src_prefix = cur.srcaddr; ftch_recprefix216.dst_prefix = cur.dstaddr; ftch_recprefix216.c16 = cur.input; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix216.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix216.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix216.src_prefix &= ipv4_len2mask(ftch_recprefix216.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix216.dst_prefix &= ipv4_len2mask(ftch_recprefix216.dst_mask); } hash = (ftch_recprefix216.src_prefix>>16)^ (ftch_recprefix216.src_prefix & 0xFFFF)^ (ftch_recprefix216.dst_prefix>>16)^ (ftch_recprefix216.dst_prefix & 0xFFFF)^ (ftch_recprefix216.c16)^ (ftch_recprefix216.src_mask)^ (u_int32)(ftch_recprefix216.dst_mask<<8); STD_ACCUM_HASH2(rpt36, ftch_recprefix216, ftch_recprefix216p); return 0; } /* ftstat_rpt_36_accum */ /* function: ftstat_rpt_36_calc * * Perform final calculations for rpt36 * * returns allocated struct or 0L for error */ int ftstat_rpt_36_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_36, rpt36, ftchash_rec_prefix216, ftch_recprefix216); } /* ftstat_rpt_36_calc */ /* function: ftstat_rpt_36_dump * * Dump data for report. * */ int ftstat_rpt_36_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_36, rpt36, chash_prefix216_dump, (char*)0L, "", "ip-source-address", "ip-destination-address", "input-interface", "", "", ""); } /* ftstat_rpt_36_dump */ /* function: ftstat_rpt_36_free * * Free data structures for report allocated by ftstat_rpt_36_new * */ void ftstat_rpt_36_free(struct ftstat_rpt_36 *rpt36) { STD_FREE_HASH(rpt36); } /* ftstat_rpt_36_free */ /* function: ftstat_rpt_37_new * * Allocate and initialize data structures for rpt 37. * * returns allocated struct or 0L for error */ struct ftstat_rpt_37 *ftstat_rpt_37_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_37, rpt37, 65536, ftchash_rec_prefix216, 13, 65536); } /* ftstat_rpt_37_new */ /* function: ftstat_rpt_37_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_37_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_37, rpt37, ftchash_rec_prefix216, ftch_recprefix216, ftch_recprefix216p); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix216.src_prefix = cur.srcaddr; ftch_recprefix216.dst_prefix = cur.dstaddr; ftch_recprefix216.c16 = cur.output; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix216.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix216.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix216.src_prefix &= ipv4_len2mask(ftch_recprefix216.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix216.dst_prefix &= ipv4_len2mask(ftch_recprefix216.dst_mask); } hash = (ftch_recprefix216.src_prefix>>16)^ (ftch_recprefix216.src_prefix & 0xFFFF)^ (ftch_recprefix216.dst_prefix>>16)^ (ftch_recprefix216.dst_prefix & 0xFFFF)^ (ftch_recprefix216.c16)^ (ftch_recprefix216.src_mask)^ (u_int32)(ftch_recprefix216.dst_mask<<8); STD_ACCUM_HASH2(rpt37, ftch_recprefix216, ftch_recprefix216p); return 0; } /* ftstat_rpt_37_accum */ /* function: ftstat_rpt_37_calc * * Perform final calculations for rpt37 * * returns allocated struct or 0L for error */ int ftstat_rpt_37_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_37, rpt37, ftchash_rec_prefix216, ftch_recprefix216); } /* ftstat_rpt_37_calc */ /* function: ftstat_rpt_37_dump * * Dump data for report. * */ int ftstat_rpt_37_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_37, rpt37, chash_prefix216_dump, (char*)0L, "", "ip-source-address", "ip-destination-address", "output-interface", "", "", ""); } /* ftstat_rpt_37_dump */ /* function: ftstat_rpt_37_free * * Free data structures for report allocated by ftstat_rpt_37_new * */ void ftstat_rpt_37_free(struct ftstat_rpt_37 *rpt37) { STD_FREE_HASH(rpt37); } /* ftstat_rpt_37_free */ /* function: ftstat_rpt_38_new * * Allocate and initialize data structures for rpt 38. * * returns allocated struct or 0L for error */ struct ftstat_rpt_38 *ftstat_rpt_38_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_38, rpt38, 65536, ftchash_rec_prefix2162, 16, 65536); } /* ftstat_rpt_38_new */ /* function: ftstat_rpt_38_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_38_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_38, rpt38, ftchash_rec_prefix2162, ftch_recprefix2162, ftch_recprefix2162p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix2162.src_prefix = cur.srcaddr; ftch_recprefix2162.dst_prefix = cur.dstaddr; ftch_recprefix2162.c16a = cur.input; ftch_recprefix2162.c16b = cur.output; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix2162.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix2162.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix2162.src_prefix &= ipv4_len2mask(ftch_recprefix2162.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix2162.dst_prefix &= ipv4_len2mask(ftch_recprefix2162.dst_mask); } hash = (ftch_recprefix2162.src_prefix>>16)^ (ftch_recprefix2162.src_prefix & 0xFFFF)^ (ftch_recprefix2162.dst_prefix>>16)^ (ftch_recprefix2162.dst_prefix & 0xFFFF)^ (ftch_recprefix2162.c16b)^ (ftch_recprefix2162.c16a)^ (ftch_recprefix2162.src_mask)^ (u_int32)(ftch_recprefix2162.dst_mask<<8); STD_ACCUM_HASH2(rpt38, ftch_recprefix2162, ftch_recprefix2162p); return 0; } /* ftstat_rpt_38_accum */ /* function: ftstat_rpt_38_calc * * Perform final calculations for rpt38 * * returns allocated struct or 0L for error */ int ftstat_rpt_38_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_38, rpt38, ftchash_rec_prefix2162, ftch_recprefix2162); } /* ftstat_rpt_38_calc */ /* function: ftstat_rpt_38_dump * * Dump data for report. * */ int ftstat_rpt_38_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_31, rpt31, chash_prefix2162_dump, (char*)0L, (char*)0L, "", "ip-source-address", "ip-destination-address", "input-interface", "output-interface", "", ""); } /* ftstat_rpt_38_dump */ /* function: ftstat_rpt_38_free * * Free data structures for report allocated by ftstat_rpt_38_new * */ void ftstat_rpt_38_free(struct ftstat_rpt_38 *rpt38) { STD_FREE_HASH(rpt38); } /* ftstat_rpt_38_free */ /* function: ftstat_rpt_39_new * * Allocate and initialize data structures for rpt 39. * * returns allocated struct or 0L for error */ struct ftstat_rpt_39 *ftstat_rpt_39_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_39, rpt39, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_39_new */ /* function: ftstat_rpt_39_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_39_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_39, rpt39, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_SRC_AS(cur,rec,*fo); ftch_recc162.c16a = cur.input; ftch_recc162.c16b = cur.src_as; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt39, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_39_accum */ /* function: ftstat_rpt_39_calc * * Perform final calculations for rpt39 * * returns allocated struct or 0L for error */ int ftstat_rpt_39_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_39, rpt39, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_39_calc */ /* function: ftstat_rpt_39_dump * * Dump data for report. * */ int ftstat_rpt_39_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_8, rpt8, chash_c162_dump, (char*)0L, FT_PATH_SYM_ASN, "", "input-interface", "source-as", "", "", "", ""); } /* ftstat_rpt_39_dump */ /* function: ftstat_rpt_39_free * * Free data structures for report allocated by ftstat_rpt_39_new * */ void ftstat_rpt_39_free(struct ftstat_rpt_39 *rpt39) { STD_FREE_HASH(rpt39); } /* ftstat_rpt_39_free */ /* function: ftstat_rpt_40_new * * Allocate and initialize data structures for rpt 40. * * returns allocated struct or 0L for error */ struct ftstat_rpt_40 *ftstat_rpt_40_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_40, rpt40, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_40_new */ /* function: ftstat_rpt_40_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_40_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_40, rpt40, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); ftch_recc162.c16a = cur.input; ftch_recc162.c16b = cur.dst_as; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt40, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_40_accum */ /* function: ftstat_rpt_40_calc * * Perform final calculations for rpt40 * * returns allocated struct or 0L for error */ int ftstat_rpt_40_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_40, rpt40, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_40_calc */ /* function: ftstat_rpt_40_dump * * Dump data for report. * */ int ftstat_rpt_40_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_40, rpt40, chash_c162_dump, (char*)0L, FT_PATH_SYM_ASN, "", "input-interface", "destination-as", "", "", "", ""); } /* ftstat_rpt_40_dump */ /* function: ftstat_rpt_40_free * * Free data structures for report allocated by ftstat_rpt_40_new * */ void ftstat_rpt_40_free(struct ftstat_rpt_40 *rpt40) { STD_FREE_HASH(rpt40); } /* ftstat_rpt_40_free */ /* function: ftstat_rpt_41_new * * Allocate and initialize data structures for rpt 41. * * returns allocated struct or 0L for error */ struct ftstat_rpt_41 *ftstat_rpt_41_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_41, rpt41, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_41_new */ /* function: ftstat_rpt_41_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_41_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_41, rpt41, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRC_AS(cur,rec,*fo); ftch_recc162.c16a = cur.output; ftch_recc162.c16b = cur.src_as; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt41, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_41_accum */ /* function: ftstat_rpt_41_calc * * Perform final calculations for rpt41 * * returns allocated struct or 0L for error */ int ftstat_rpt_41_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_41, rpt41, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_41_calc */ /* function: ftstat_rpt_41_dump * * Dump data for report. * */ int ftstat_rpt_41_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_41, rpt41, chash_c162_dump, (char*)0L, FT_PATH_SYM_ASN, "", "output-interface", "source-as", "", "", "", ""); } /* ftstat_rpt_41_dump */ /* function: ftstat_rpt_41_free * * Free data structures for report allocated by ftstat_rpt_41_new * */ void ftstat_rpt_41_free(struct ftstat_rpt_41 *rpt41) { STD_FREE_HASH(rpt41); } /* ftstat_rpt_41_free */ /* function: ftstat_rpt_42_new * * Allocate and initialize data structures for rpt 42. * * returns allocated struct or 0L for error */ struct ftstat_rpt_42 *ftstat_rpt_42_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_42, rpt42, 65536, ftchash_rec_c162, 4, 65536); } /* ftstat_rpt_42_new */ /* function: ftstat_rpt_42_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_42_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_42, rpt42, ftchash_rec_c162, ftch_recc162, ftch_recc162p); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); ftch_recc162.c16a = cur.output; ftch_recc162.c16b = cur.dst_as; hash = (ftch_recc162.c16a>>16) ^ (ftch_recc162.c16a & 0xFFFF) ^ (ftch_recc162.c16b>>16) ^ (ftch_recc162.c16b & 0xFFFF); STD_ACCUM_HASH2(rpt42, ftch_recc162, ftch_recc162p); return 0; } /* ftstat_rpt_42_accum */ /* function: ftstat_rpt_42_calc * * Perform final calculations for rpt42 * * returns allocated struct or 0L for error */ int ftstat_rpt_42_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_42, rpt42, ftchash_rec_c162, ftch_recc162); } /* ftstat_rpt_42_calc */ /* function: ftstat_rpt_42_dump * * Dump data for report. * */ int ftstat_rpt_42_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_42, rpt42, chash_c162_dump, (char*)0L, FT_PATH_SYM_ASN, "", "output-interface", "destination-as", "", "", "", ""); } /* ftstat_rpt_42_dump */ /* function: ftstat_rpt_42_free * * Free data structures for report allocated by ftstat_rpt_42_new * */ void ftstat_rpt_42_free(struct ftstat_rpt_42 *rpt42) { STD_FREE_HASH(rpt42); } /* ftstat_rpt_42_free */ /* function: ftstat_rpt_43_new * * Allocate and initialize data structures for rpt 43. * * returns allocated struct or 0L for error */ struct ftstat_rpt_43 *ftstat_rpt_43_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_43, rpt43, 65536, ftchash_rec_c163, 6, 65536); } /* ftstat_rpt_43_new */ /* function: ftstat_rpt_43_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_43_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_43, rpt43, ftchash_rec_c163, ftch_recc163, ftch_recc163p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); ftch_recc163.c16a = cur.input; ftch_recc163.c16b = cur.src_as; ftch_recc163.c16c = cur.dst_as; hash = ftch_recc163.c16a ^ ftch_recc163.c16b ^ ftch_recc163.c16c; STD_ACCUM_HASH2(rpt43, ftch_recc163, ftch_recc163p); return 0; } /* ftstat_rpt_43_accum */ /* function: ftstat_rpt_43_calc * * Perform final calculations for rpt43 * * returns allocated struct or 0L for error */ int ftstat_rpt_43_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_43, rpt43, ftchash_rec_c163, ftch_recc163); } /* ftstat_rpt_43_calc */ /* function: ftstat_rpt_43_dump * * Dump data for report. * */ int ftstat_rpt_43_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH3(ftstat_rpt_43, rpt43, chash_c163_dump, (char*)0L, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "input-interface", "source-as", "destination-as", "", "", ""); } /* ftstat_rpt_43_dump */ /* function: ftstat_rpt_43_free * * Free data structures for report allocated by ftstat_rpt_43_new * */ void ftstat_rpt_43_free(struct ftstat_rpt_43 *rpt43) { STD_FREE_HASH(rpt43); } /* ftstat_rpt_43_free */ /* function: ftstat_rpt_44_new * * Allocate and initialize data structures for rpt 44. * * returns allocated struct or 0L for error */ struct ftstat_rpt_44 *ftstat_rpt_44_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_44, rpt44, 65536, ftchash_rec_c163, 6, 65536); } /* ftstat_rpt_44_new */ /* function: ftstat_rpt_44_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_44_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_44, rpt44, ftchash_rec_c163, ftch_recc163, ftch_recc163p); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); ftch_recc163.c16a = cur.output; ftch_recc163.c16b = cur.src_as; ftch_recc163.c16c = cur.dst_as; hash = ftch_recc163.c16a ^ ftch_recc163.c16b ^ ftch_recc163.c16c; STD_ACCUM_HASH2(rpt44, ftch_recc163, ftch_recc163p); return 0; } /* ftstat_rpt_44_accum */ /* function: ftstat_rpt_44_calc * * Perform final calculations for rpt44 * * returns allocated struct or 0L for error */ int ftstat_rpt_44_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_44, rpt44, ftchash_rec_c163, ftch_recc163); } /* ftstat_rpt_44_calc */ /* function: ftstat_rpt_44_dump * * Dump data for report. * */ int ftstat_rpt_44_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH3(ftstat_rpt_44, rpt44, chash_c163_dump, (char*)0L, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "output-interface", "source-as", "destination-as", "", "", ""); } /* ftstat_rpt_44_dump */ /* function: ftstat_rpt_44_free * * Free data structures for report allocated by ftstat_rpt_44_new * */ void ftstat_rpt_44_free(struct ftstat_rpt_44 *rpt44) { STD_FREE_HASH(rpt44); } /* ftstat_rpt_44_free */ /* function: ftstat_rpt_45_new * * Allocate and initialize data structures for rpt 45. * * returns allocated struct or 0L for error */ struct ftstat_rpt_45 *ftstat_rpt_45_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_45, rpt45, 65536, ftchash_rec_c164, 8, 65536); } /* ftstat_rpt_45_new */ /* function: ftstat_rpt_45_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_45_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_45, rpt45, ftchash_rec_c164, ftch_recc164, ftch_recc164p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); ftch_recc164.c16a = cur.input; ftch_recc164.c16b = cur.output; ftch_recc164.c16c = cur.src_as; ftch_recc164.c16d = cur.dst_as; hash = ftch_recc164.c16a ^ ftch_recc164.c16b ^ ftch_recc164.c16c ^ ftch_recc164.c16c;; STD_ACCUM_HASH2(rpt45, ftch_recc164, ftch_recc164p); return 0; } /* ftstat_rpt_45_accum */ /* function: ftstat_rpt_45_calc * * Perform final calculations for rpt45 * * returns allocated struct or 0L for error */ int ftstat_rpt_45_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_45, rpt45, ftchash_rec_c164, ftch_recc164); } /* ftstat_rpt_45_calc */ /* function: ftstat_rpt_45_dump * * Dump data for report. * */ int ftstat_rpt_45_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH4(ftstat_rpt_45, rpt45, chash_c164_dump, (char*)0L, (char*)0L, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "input-interface", "output-interface", "source-as", "destination-as", "", ""); } /* ftstat_rpt_45_dump */ /* function: ftstat_rpt_45_free * * Free data structures for report allocated by ftstat_rpt_45_new * */ void ftstat_rpt_45_free(struct ftstat_rpt_45 *rpt45) { STD_FREE_HASH(rpt45); } /* ftstat_rpt_45_free */ /* function: ftstat_rpt_46_new * * Allocate and initialize data structures for rpt 46. * * returns allocated struct or 0L for error */ struct ftstat_rpt_46 *ftstat_rpt_46_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_46, rpt46, 256, rpt); } /* ftstat_rpt_46_new */ /* function: ftstat_rpt_46_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_46_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_46, rpt46); FT_RECGET_ENGINE_ID(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt46->bucket, cur.engine_id); return 0; } /* ftstat_rpt_46_accum */ /* function: ftstat_rpt_46_calc * * Perform final calculations for rpt46 * * returns allocated struct or 0L for error */ int ftstat_rpt_46_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_46, rpt46, 256); } /* ftstat_rpt_46_calc */ /* function: ftstat_rpt_46_dump * * Dump data for report. * */ int ftstat_rpt_46_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_46, rpt46, 256, (char*)0L, "engine-id", "", "", "", "", "", ""); } /* ftstat_rpt_46_dump */ /* function: ftstat_rpt_46_free * * Free data structures for report allocated by ftstat_rpt_46_new * */ void ftstat_rpt_46_free(struct ftstat_rpt_46 *rpt46) { STD_FREE_BUCKET(rpt46); } /* ftstat_rpt_46_free */ /* function: ftstat_rpt_47_new * * Allocate and initialize data structures for rpt 47. * * returns allocated struct or 0L for error */ struct ftstat_rpt_47 *ftstat_rpt_47_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_47, rpt47, 256, rpt); } /* ftstat_rpt_47_new */ /* function: ftstat_rpt_47_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_47_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_47, rpt47); FT_RECGET_ENGINE_TYPE(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt47->bucket, cur.engine_type); return 0; } /* ftstat_rpt_47_accum */ /* function: ftstat_rpt_47_calc * * Perform final calculations for rpt47 * * returns allocated struct or 0L for error */ int ftstat_rpt_47_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_47, rpt47, 256); } /* ftstat_rpt_47_calc */ /* function: ftstat_rpt_47_dump * * Dump data for report. * */ int ftstat_rpt_47_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_47, rpt47, 256, (char*)0L, "engine-type", "", "", "", "", "", ""); } /* ftstat_rpt_47_dump */ /* function: ftstat_rpt_47_free * * Free data structures for report allocated by ftstat_rpt_47_new * */ void ftstat_rpt_47_free(struct ftstat_rpt_47 *rpt47) { STD_FREE_BUCKET(rpt47); } /* ftstat_rpt_47_free */ /* function: ftstat_rpt_48_new * * Allocate and initialize data structures for rpt 48. * * returns allocated struct or 0L for error */ struct ftstat_rpt_48 *ftstat_rpt_48_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_48, rpt48, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_48_new */ /* function: ftstat_rpt_48_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_48_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_48, rpt48, ftchash_rec_c32, ftch_recc32, ftch_recc32p); FT_RECGET_SRC_TAG(cur,rec,*fo); ftch_recc32.c32 = cur.src_tag; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt48, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_48_accum */ /* function: ftstat_rpt_48_calc * * Perform final calculations for rpt48 * * returns allocated struct or 0L for error */ int ftstat_rpt_48_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_48, rpt48, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_48_calc */ /* function: ftstat_rpt_48_dump * * Dump data for report. * */ int ftstat_rpt_48_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_48, rpt48, chash_c32_dump, FT_PATH_SYM_TAG, "source-tag", "", "", "", "", "", ""); } /* ftstat_rpt_48_dump */ /* function: ftstat_rpt_48_free * * Free data structures for report allocated by ftstat_rpt_48_new * */ void ftstat_rpt_48_free(struct ftstat_rpt_48 *rpt48) { STD_FREE_HASH(rpt48); } /* ftstat_rpt_48_free */ /* function: ftstat_rpt_49_new * * Allocate and initialize data structures for rpt 49. * * returns allocated struct or 0L for error */ struct ftstat_rpt_49 *ftstat_rpt_49_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_49, rpt49, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_49_new */ /* function: ftstat_rpt_49_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_49_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_49, rpt49, ftchash_rec_c32, ftch_recc32, ftch_recc32p); FT_RECGET_DST_TAG(cur,rec,*fo); ftch_recc32.c32 = cur.dst_tag; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt49, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_49_accum */ /* function: ftstat_rpt_49_calc * * Perform final calculations for rpt49 * * returns allocated struct or 0L for error */ int ftstat_rpt_49_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_49, rpt49, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_49_calc */ /* function: ftstat_rpt_49_dump * * Dump data for report. * */ int ftstat_rpt_49_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_49, rpt49, chash_c32_dump, FT_PATH_SYM_TAG, "destination-tag", "", "", "", "", "", ""); } /* ftstat_rpt_49_dump */ /* function: ftstat_rpt_49_free * * Free data structures for report allocated by ftstat_rpt_49_new * */ void ftstat_rpt_49_free(struct ftstat_rpt_49 *rpt49) { STD_FREE_HASH(rpt49); } /* ftstat_rpt_49_free */ /* function: ftstat_rpt_50_new * * Allocate and initialize data structures for rpt 50. * * returns allocated struct or 0L for error */ struct ftstat_rpt_50 *ftstat_rpt_50_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_50, rpt50, 65536, ftchash_rec_c322, 8, 65536); } /* ftstat_rpt_50_new */ /* function: ftstat_rpt_50_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_50_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_50, rpt50, ftchash_rec_c322, ftch_recc322, ftch_recc322p); FT_RECGET_DST_TAG(cur,rec,*fo); FT_RECGET_SRC_TAG(cur,rec,*fo); ftch_recc322.c32a = cur.src_tag; ftch_recc322.c32b = cur.dst_tag; hash = (ftch_recc322.c32a>>16) ^ (ftch_recc322.c32a & 0xFFFF) ^ (ftch_recc322.c32b>>16) ^ (ftch_recc322.c32b & 0xFFFF); STD_ACCUM_HASH2(rpt50, ftch_recc322, ftch_recc322p); return 0; } /* ftstat_rpt_50_accum */ /* function: ftstat_rpt_50_calc * * Perform final calculations for rpt50 * * returns allocated struct or 0L for error */ int ftstat_rpt_50_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_50, rpt50, ftchash_rec_c322, ftch_recc322); } /* ftstat_rpt_50_calc */ /* function: ftstat_rpt_50_dump * * Dump data for report. * */ int ftstat_rpt_50_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_50, rpt50, chash_c322_dump, FT_PATH_SYM_TAG, FT_PATH_SYM_TAG, "", "source-tag", "destination-tag", "", "", "", ""); } /* ftstat_rpt_50_dump */ /* function: ftstat_rpt_50_free * * Free data structures for report allocated by ftstat_rpt_50_new * */ void ftstat_rpt_50_free(struct ftstat_rpt_50 *rpt50) { STD_FREE_HASH(rpt50); } /* ftstat_rpt_50_free */ /* function: ftstat_rpt_51_new * * Allocate and initialize data structures for rpt 51. * * returns allocated struct or 0L for error */ struct ftstat_rpt_51 *ftstat_rpt_51_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_51, rpt51, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_51_new */ /* function: ftstat_rpt_51_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_51_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_51, rpt51, ftchash_rec_prefix16, ftch_recprefix16, ftch_prefix16p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.srcaddr; ftch_recprefix16.c16 = cur.srcport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt51, ftch_recprefix16, ftch_prefix16p); return 0; } /* ftstat_rpt_51_accum */ /* function: ftstat_rpt_51_calc * * Perform final calculations for rpt51 * * returns allocated struct or 0L for error */ int ftstat_rpt_51_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_51, rpt51, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_51_calc */ /* function: ftstat_rpt_51_dump * * Dump data for report. * */ int ftstat_rpt_51_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_51, rpt51, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_TCP_PORT, "", "ip-source-address", "ip-source-port", "", "", "", ""); } /* ftstat_rpt_51_dump */ /* function: ftstat_rpt_51_free * * Free data structures for report allocated by ftstat_rpt_51_new * */ void ftstat_rpt_51_free(struct ftstat_rpt_51 *rpt51) { STD_FREE_HASH(rpt51); } /* ftstat_rpt_51_free */ /* function: ftstat_rpt_52_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_52 *ftstat_rpt_52_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_52, rpt52, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_52_new */ /* function: ftstat_rpt_52_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_52_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_52, rpt52, ftchash_rec_prefix16, ftch_recprefix16, ftch_prefix16p); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.srcaddr; ftch_recprefix16.c16 = cur.dstport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt52, ftch_recprefix16, ftch_prefix16p); return 0; } /* ftstat_rpt_52_accum */ /* function: ftstat_rpt_52_calc * * Perform final calculations for rpt52 * * returns allocated struct or 0L for error */ int ftstat_rpt_52_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_52, rpt52, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_52_calc */ /* function: ftstat_rpt_52_dump * * Dump data for report. * */ int ftstat_rpt_52_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_51, rpt51, chash_prefix16_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_TCP_PORT, "", "ip-source-address", "ip-destination-port", "", "", "", ""); } /* ftstat_rpt_52_dump */ /* function: ftstat_rpt_52_free * * Free data structures for report allocated by ftstat_rpt_52_new * */ void ftstat_rpt_52_free(struct ftstat_rpt_52 *rpt52) { STD_FREE_HASH(rpt52); } /* ftstat_rpt_52_free */ /* function: ftstat_rpt_53_new * * Allocate and initialize data structures for rpt 53. * * returns allocated struct or 0L for error */ struct ftstat_rpt_53 *ftstat_rpt_53_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_53, rpt53, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_53_new */ /* function: ftstat_rpt_53_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_53_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_53, rpt53, ftchash_rec_prefix16, ftch_recprefix16, ftch_prefix16p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.dstaddr; ftch_recprefix16.c16 = cur.srcport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt53, ftch_recprefix16, ftch_prefix16p); return 0; } /* ftstat_rpt_53_accum */ /* function: ftstat_rpt_53_calc * * Perform final calculations for rpt53 * * returns allocated struct or 0L for error */ int ftstat_rpt_53_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_53, rpt53, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_53_calc */ /* function: ftstat_rpt_53_dump * * Dump data for report. * */ int ftstat_rpt_53_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_53, rpt53, chash_prefix16_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_TCP_PORT, "", "ip-destination-address", "ip-source-port", "", "", "", ""); } /* ftstat_rpt_53_dump */ /* function: ftstat_rpt_53_free * * Free data structures for report allocated by ftstat_rpt_53_new * */ void ftstat_rpt_53_free(struct ftstat_rpt_53 *rpt53) { STD_FREE_HASH(rpt53); } /* ftstat_rpt_53_free */ /* function: ftstat_rpt_54_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_54 *ftstat_rpt_54_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_54, rpt54, 65536, ftchash_rec_prefix16, 8, 65536); } /* ftstat_rpt_54_new */ /* function: ftstat_rpt_54_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_54_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_54, rpt54, ftchash_rec_prefix16, ftch_recprefix16, ftch_prefix16p); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix16.prefix = cur.dstaddr; ftch_recprefix16.c16 = cur.dstport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix16.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix16.prefix &= ipv4_len2mask(ftch_recprefix16.mask); hash = (ftch_recprefix16.prefix>>16) ^ (ftch_recprefix16.prefix & 0xFFFF) ^ (ftch_recprefix16.mask) ^ (ftch_recprefix16.c16); STD_ACCUM_HASH2(rpt54, ftch_recprefix16, ftch_prefix16p); return 0; } /* ftstat_rpt_54_accum */ /* function: ftstat_rpt_54_calc * * Perform final calculations for rpt54 * * returns allocated struct or 0L for error */ int ftstat_rpt_54_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_54, rpt54, ftchash_rec_prefix16, ftch_recprefix16); } /* ftstat_rpt_54_calc */ /* function: ftstat_rpt_54_dump * * Dump data for report. * */ int ftstat_rpt_54_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_54, rpt54, chash_prefix16_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_TCP_PORT, "", "ip-destination-address", "ip-destination-port", "", "", "", ""); } /* ftstat_rpt_54_dump */ /* function: ftstat_rpt_54_free * * Free data structures for report allocated by ftstat_rpt_54_new * */ void ftstat_rpt_54_free(struct ftstat_rpt_54 *rpt54) { STD_FREE_HASH(rpt54); } /* ftstat_rpt_54_free */ /* function: ftstat_rpt_55_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_55 *ftstat_rpt_55_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_55, rpt55, 65536, ftchash_rec_prefix162, 10, 65536); } /* ftstat_rpt_55_new */ /* function: ftstat_rpt_55_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_55_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_55, rpt55, ftchash_rec_prefix162, ftch_recprefix162, ftch_prefix162p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix162.prefix = cur.srcaddr; ftch_recprefix162.c16a = cur.srcport; ftch_recprefix162.c16b = cur.dstport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix162.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix162.prefix &= ipv4_len2mask(ftch_recprefix162.mask); hash = (ftch_recprefix162.prefix>>16) ^ (ftch_recprefix162.prefix & 0xFFFF) ^ (ftch_recprefix162.mask) ^ (ftch_recprefix162.c16a) ^ (ftch_recprefix162.c16b); STD_ACCUM_HASH2(rpt55, ftch_recprefix162, ftch_prefix162p); return 0; } /* ftstat_rpt_55_accum */ /* function: ftstat_rpt_55_calc * * Perform final calculations for rpt55 * * returns allocated struct or 0L for error */ int ftstat_rpt_55_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_55, rpt55, ftchash_rec_prefix162, ftch_recprefix162); } /* ftstat_rpt_55_calc */ /* function: ftstat_rpt_55_dump * * Dump data for report. * */ int ftstat_rpt_55_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2P(ftstat_rpt_55, rpt55, chash_prefix162_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_TCP_PORT, FT_PATH_SYM_TCP_PORT, "", "ip-source-address", "ip-source-port", "ip-destination-port", "", "", ""); } /* ftstat_rpt_55_dump */ /* function: ftstat_rpt_55_free * * Free data structures for report allocated by ftstat_rpt_55_new * */ void ftstat_rpt_55_free(struct ftstat_rpt_55 *rpt55) { STD_FREE_HASH(rpt55); } /* ftstat_rpt_55_free */ /* function: ftstat_rpt_56_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_56 *ftstat_rpt_56_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_56, rpt56, 65536, ftchash_rec_prefix162, 10, 65536); } /* ftstat_rpt_56_new */ /* function: ftstat_rpt_56_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_56_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_56, rpt56, ftchash_rec_prefix162, ftch_recprefix162, ftch_prefix162p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix162.prefix = cur.dstaddr; ftch_recprefix162.c16a = cur.srcport; ftch_recprefix162.c16b = cur.dstport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix162.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix162.prefix &= ipv4_len2mask(ftch_recprefix162.mask); hash = (ftch_recprefix162.prefix>>16) ^ (ftch_recprefix162.prefix & 0xFFFF) ^ (ftch_recprefix162.mask) ^ (ftch_recprefix162.c16a) ^ (ftch_recprefix162.c16b); STD_ACCUM_HASH2(rpt56, ftch_recprefix162, ftch_prefix162p); return 0; } /* ftstat_rpt_56_accum */ /* function: ftstat_rpt_56_calc * * Perform final calculations for rpt56 * * returns allocated struct or 0L for error */ int ftstat_rpt_56_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_56, rpt56, ftchash_rec_prefix162, ftch_recprefix162); } /* ftstat_rpt_56_calc */ /* function: ftstat_rpt_56_dump * * Dump data for report. * */ int ftstat_rpt_56_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2P(ftstat_rpt_56, rpt56, chash_prefix162_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_TCP_PORT, FT_PATH_SYM_TCP_PORT, "", "ip-destination-address", "ip-source-port", "ip-destination-port", "", "", ""); } /* ftstat_rpt_56_dump */ /* function: ftstat_rpt_56_free * * Free data structures for report allocated by ftstat_rpt_56_new * */ void ftstat_rpt_56_free(struct ftstat_rpt_56 *rpt56) { STD_FREE_HASH(rpt56); } /* ftstat_rpt_56_free */ /* function: ftstat_rpt_57_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_57 *ftstat_rpt_57_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_57, rpt57, 65536, ftchash_rec_prefix216, 13, 65536); } /* ftstat_rpt_57_new */ /* function: ftstat_rpt_57_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_57_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_57, rpt57, ftchash_rec_prefix216, ftch_recprefix216, ftch_recprefix216p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix216.src_prefix = cur.srcaddr; ftch_recprefix216.dst_prefix = cur.dstaddr; ftch_recprefix216.c16 = cur.srcport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix216.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix216.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix216.src_prefix &= ipv4_len2mask(ftch_recprefix216.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix216.dst_prefix &= ipv4_len2mask(ftch_recprefix216.dst_mask); } hash = (ftch_recprefix216.src_prefix>>16)^ (ftch_recprefix216.src_prefix & 0xFFFF)^ (ftch_recprefix216.dst_prefix>>16)^ (ftch_recprefix216.dst_prefix & 0xFFFF)^ (ftch_recprefix216.c16)^ (ftch_recprefix216.src_mask)^ (u_int32)(ftch_recprefix216.dst_mask<<8); STD_ACCUM_HASH2(rpt57, ftch_recprefix216, ftch_recprefix216p); return 0; } /* ftstat_rpt_57_accum */ /* function: ftstat_rpt_57_calc * * Perform final calculations for rpt57 * * returns allocated struct or 0L for error */ int ftstat_rpt_57_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_57, rpt57, ftchash_rec_prefix216, ftch_recprefix216); } /* ftstat_rpt_57_calc */ /* function: ftstat_rpt_57_dump * * Dump data for report. * */ int ftstat_rpt_57_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_57, rpt57, chash_prefix216_dump, FT_PATH_SYM_TCP_PORT, "", "ip-source-address", "ip-destination-address", "ip-source-port", "", "", ""); } /* ftstat_rpt_57_dump */ /* function: ftstat_rpt_57_free * * Free data structures for report allocated by ftstat_rpt_57_new * */ void ftstat_rpt_57_free(struct ftstat_rpt_57 *rpt57) { STD_FREE_HASH(rpt57); } /* ftstat_rpt_57_free */ /* function: ftstat_rpt_58_new * * Allocate and initialize data structures for rpt 58. * * returns allocated struct or 0L for error */ struct ftstat_rpt_58 *ftstat_rpt_58_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_58, rpt58, 65536, ftchash_rec_prefix216, 13, 65536); } /* ftstat_rpt_58_new */ /* function: ftstat_rpt_58_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_58_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_58, rpt58, ftchash_rec_prefix216, ftch_recprefix216, ftch_recprefix216p); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix216.src_prefix = cur.srcaddr; ftch_recprefix216.dst_prefix = cur.dstaddr; ftch_recprefix216.c16 = cur.dstport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix216.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix216.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix216.src_prefix &= ipv4_len2mask(ftch_recprefix216.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix216.dst_prefix &= ipv4_len2mask(ftch_recprefix216.dst_mask); } hash = (ftch_recprefix216.src_prefix>>16)^ (ftch_recprefix216.src_prefix & 0xFFFF)^ (ftch_recprefix216.dst_prefix>>16)^ (ftch_recprefix216.dst_prefix & 0xFFFF)^ (ftch_recprefix216.c16)^ (ftch_recprefix216.src_mask)^ (u_int32)(ftch_recprefix216.dst_mask<<8); STD_ACCUM_HASH2(rpt58, ftch_recprefix216, ftch_recprefix216p); return 0; } /* ftstat_rpt_58_accum */ /* function: ftstat_rpt_58_calc * * Perform final calculations for rpt58 * * returns allocated struct or 0L for error */ int ftstat_rpt_58_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_58, rpt58, ftchash_rec_prefix216, ftch_recprefix216); } /* ftstat_rpt_58_calc */ /* function: ftstat_rpt_58_dump * * Dump data for report. * */ int ftstat_rpt_58_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_58, rpt58, chash_prefix216_dump, FT_PATH_SYM_TCP_PORT, "", "ip-source-address", "ip-destination-address", "ip-destination-port", "", "", ""); } /* ftstat_rpt_58_dump */ /* function: ftstat_rpt_58_free * * Free data structures for report allocated by ftstat_rpt_58_new * */ void ftstat_rpt_58_free(struct ftstat_rpt_58 *rpt58) { STD_FREE_HASH(rpt58); } /* ftstat_rpt_58_free */ /* function: ftstat_rpt_59_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_59 *ftstat_rpt_59_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_59, rpt59, 65536, ftchash_rec_prefix2162, 16, 65536); } /* ftstat_rpt_59_new */ /* function: ftstat_rpt_59_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_59_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_59, rpt59, ftchash_rec_prefix2162, ftch_recprefix2162, ftch_recprefix2162p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix2162.src_prefix = cur.srcaddr; ftch_recprefix2162.dst_prefix = cur.dstaddr; ftch_recprefix2162.c16a = cur.srcport; ftch_recprefix2162.c16b = cur.dstport; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix2162.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix2162.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recprefix2162.src_prefix &= ipv4_len2mask(ftch_recprefix2162.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recprefix2162.dst_prefix &= ipv4_len2mask(ftch_recprefix2162.dst_mask); } hash = (ftch_recprefix2162.src_prefix>>16)^ (ftch_recprefix2162.src_prefix & 0xFFFF)^ (ftch_recprefix2162.dst_prefix>>16)^ (ftch_recprefix2162.dst_prefix & 0xFFFF)^ (ftch_recprefix2162.c16b)^ (ftch_recprefix2162.c16a)^ (ftch_recprefix2162.src_mask)^ (u_int32)(ftch_recprefix2162.dst_mask<<8); STD_ACCUM_HASH2(rpt59, ftch_recprefix2162, ftch_recprefix2162p); return 0; } /* ftstat_rpt_59_accum */ /* function: ftstat_rpt_59_calc * * Perform final calculations for rpt59 * * returns allocated struct or 0L for error */ int ftstat_rpt_59_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_59, rpt59, ftchash_rec_prefix2162, ftch_recprefix2162); } /* ftstat_rpt_59_calc */ /* function: ftstat_rpt_59_dump * * Dump data for report. * */ int ftstat_rpt_59_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_31, rpt31, chash_prefix2162_dump, FT_PATH_SYM_TCP_PORT, FT_PATH_SYM_TCP_PORT, "", "ip-source-address", "ip-destination-address", "ip-source-port", "ip-destination-port", "", ""); } /* ftstat_rpt_59_dump */ /* function: ftstat_rpt_59_free * * Free data structures for report allocated by ftstat_rpt_59_new * */ void ftstat_rpt_59_free(struct ftstat_rpt_59 *rpt59) { STD_FREE_HASH(rpt59); } /* ftstat_rpt_59_free */ /* function: ftstat_rpt_60_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_60 *ftstat_rpt_60_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_60, rpt60, 65536, ftchash_rec_prefix162, 10, 65536); } /* ftstat_rpt_60_new */ /* function: ftstat_rpt_60_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_60_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_60, rpt60, ftchash_rec_prefix162, ftch_recprefix162, ftch_prefix162p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix162.prefix = cur.srcaddr; ftch_recprefix162.c16a = cur.input; ftch_recprefix162.c16b = cur.output; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix162.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix162.prefix &= ipv4_len2mask(ftch_recprefix162.mask); hash = (ftch_recprefix162.prefix>>16) ^ (ftch_recprefix162.prefix & 0xFFFF) ^ (ftch_recprefix162.mask) ^ (ftch_recprefix162.c16a) ^ (ftch_recprefix162.c16b); STD_ACCUM_HASH2(rpt60, ftch_recprefix162, ftch_prefix162p); return 0; } /* ftstat_rpt_60_accum */ /* function: ftstat_rpt_60_calc * * Perform final calculations for rpt60 * * returns allocated struct or 0L for error */ int ftstat_rpt_60_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_60, rpt60, ftchash_rec_prefix162, ftch_recprefix162); } /* ftstat_rpt_60_calc */ /* function: ftstat_rpt_60_dump * * Dump data for report. * */ int ftstat_rpt_60_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2P(ftstat_rpt_60, rpt60, chash_prefix162_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, (char*)0L, (char*)0L, "", "ip-source-address", "input-interface", "output-interface", "", "", ""); } /* ftstat_rpt_60_dump */ /* function: ftstat_rpt_60_free * * Free data structures for report allocated by ftstat_rpt_60_new * */ void ftstat_rpt_60_free(struct ftstat_rpt_60 *rpt60) { STD_FREE_HASH(rpt60); } /* ftstat_rpt_60_free */ /* function: ftstat_rpt_61_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_61 *ftstat_rpt_61_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_61, rpt61, 65536, ftchash_rec_prefix162, 10, 65536); } /* ftstat_rpt_61_new */ /* function: ftstat_rpt_61_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_61_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_61, rpt61, ftchash_rec_prefix162, ftch_recprefix162, ftch_prefix162p); FT_RECGET_INPUT(cur,rec,*fo); FT_RECGET_OUTPUT(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix162.prefix = cur.dstaddr; ftch_recprefix162.c16a = cur.input; ftch_recprefix162.c16b = cur.output; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix162.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix162.prefix &= ipv4_len2mask(ftch_recprefix162.mask); hash = (ftch_recprefix162.prefix>>16) ^ (ftch_recprefix162.prefix & 0xFFFF) ^ (ftch_recprefix162.mask) ^ (ftch_recprefix162.c16a) ^ (ftch_recprefix162.c16b); STD_ACCUM_HASH2(rpt61, ftch_recprefix162, ftch_prefix162p); return 0; } /* ftstat_rpt_61_accum */ /* function: ftstat_rpt_61_calc * * Perform final calculations for rpt61 * * returns allocated struct or 0L for error */ int ftstat_rpt_61_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_61, rpt61, ftchash_rec_prefix162, ftch_recprefix162); } /* ftstat_rpt_61_calc */ /* function: ftstat_rpt_61_dump * * Dump data for report. * */ int ftstat_rpt_61_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2P(ftstat_rpt_61, rpt61, chash_prefix162_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, (char*)0L, (char*)0L, "", "ip-destination-address", "input-interface", "output-interface", "", "", ""); } /* ftstat_rpt_61_dump */ /* function: ftstat_rpt_61_free * * Free data structures for report allocated by ftstat_rpt_61_new * */ void ftstat_rpt_61_free(struct ftstat_rpt_61 *rpt61) { STD_FREE_HASH(rpt61); } /* ftstat_rpt_61_free */ /* function: ftstat_rpt_62_new * * Allocate and initialize data structures for rpt 52. * * returns allocated struct or 0L for error */ struct ftstat_rpt_62 *ftstat_rpt_62_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_62, rpt62, 65536, ftchash_rec_prefix162, 10, 65536); } /* ftstat_rpt_62_new */ /* function: ftstat_rpt_62_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_62_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_62, rpt62, ftchash_rec_prefix162, ftch_recprefix162, ftch_prefix162p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix162.prefix = cur.srcaddr; ftch_recprefix162.c16a = cur.src_as; ftch_recprefix162.c16b = cur.dst_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix162.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix162.prefix &= ipv4_len2mask(ftch_recprefix162.mask); hash = (ftch_recprefix162.prefix>>16) ^ (ftch_recprefix162.prefix & 0xFFFF) ^ (ftch_recprefix162.mask) ^ (ftch_recprefix162.c16a) ^ (ftch_recprefix162.c16b); STD_ACCUM_HASH2(rpt62, ftch_recprefix162, ftch_prefix162p); return 0; } /* ftstat_rpt_62_accum */ /* function: ftstat_rpt_62_calc * * Perform final calculations for rpt62 * * returns allocated struct or 0L for error */ int ftstat_rpt_62_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_62, rpt55, ftchash_rec_prefix162, ftch_recprefix162); } /* ftstat_rpt_62_calc */ /* function: ftstat_rpt_62_dump * * Dump data for report. * */ int ftstat_rpt_62_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2P(ftstat_rpt_62, rpt62, chash_prefix162_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "ip-source-address", "source-as", "destination-as", "", "", ""); } /* ftstat_rpt_62_dump */ /* function: ftstat_rpt_62_free * * Free data structures for report allocated by ftstat_rpt_62_new * */ void ftstat_rpt_62_free(struct ftstat_rpt_62 *rpt62) { STD_FREE_HASH(rpt62); } /* ftstat_rpt_62_free */ /* function: ftstat_rpt_63_new * * Allocate and initialize data structures for rpt 63 * * returns allocated struct or 0L for error */ struct ftstat_rpt_63 *ftstat_rpt_63_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_63, rpt63, 65536, ftchash_rec_prefix162, 10, 65536); } /* ftstat_rpt_63_new */ /* function: ftstat_rpt_63_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_63_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_63, rpt63, ftchash_rec_prefix162, ftch_recprefix162, ftch_prefix162p); FT_RECGET_SRC_AS(cur,rec,*fo); FT_RECGET_DST_AS(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix162.prefix = cur.dstaddr; ftch_recprefix162.c16a = cur.src_as; ftch_recprefix162.c16b = cur.dst_as; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix162.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix162.prefix &= ipv4_len2mask(ftch_recprefix162.mask); hash = (ftch_recprefix162.prefix>>16) ^ (ftch_recprefix162.prefix & 0xFFFF) ^ (ftch_recprefix162.mask) ^ (ftch_recprefix162.c16a) ^ (ftch_recprefix162.c16b); STD_ACCUM_HASH2(rpt63, ftch_recprefix162, ftch_prefix162p); return 0; } /* ftstat_rpt_63_accum */ /* function: ftstat_rpt_63_calc * * Perform final calculations for rpt63 * * returns allocated struct or 0L for error */ int ftstat_rpt_63_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_63, rpt55, ftchash_rec_prefix162, ftch_recprefix162); } /* ftstat_rpt_63_calc */ /* function: ftstat_rpt_63_dump * * Dump data for report. * */ int ftstat_rpt_63_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2P(ftstat_rpt_63, rpt63, chash_prefix162_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_ASN, FT_PATH_SYM_ASN, "", "ip-destination-address", "source-as", "destination-as", "", "", ""); } /* ftstat_rpt_63_dump */ /* function: ftstat_rpt_63_free * * Free data structures for report allocated by ftstat_rpt_62_new * */ void ftstat_rpt_63_free(struct ftstat_rpt_63 *rpt63) { STD_FREE_HASH(rpt63); } /* ftstat_rpt_63_free */ /* function: ftstat_rpt_64_new * * Allocate and initialize data structures for rpt 15. * * returns allocated struct or 0L for error */ struct ftstat_rpt_64 *ftstat_rpt_64_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_64, rpt64, 65536, ftchash_rec_prefix, 5, 65536); } /* ftstat_rpt_64_new */ /* function: ftstat_rpt_64_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_64_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_64, rpt64, ftchash_rec_prefix, ftch_recprefix, ftch_recprefixp); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefix.prefix = cur.srcaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix.prefix &= ipv4_len2mask(ftch_recprefix.mask); hash = (ftch_recprefix.prefix>>16) ^ (ftch_recprefix.prefix & 0xFFFF); hash = hash ^ (ftch_recprefix.mask); STD_ACCUM_HASH2(rpt64, ftch_recprefix, ftch_recprefixp); bzero(&ftch_recprefix, sizeof ftch_recprefix); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefix.prefix = cur.dstaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix.prefix &= ipv4_len2mask(ftch_recprefix.mask); hash = (ftch_recprefix.prefix>>16) ^ (ftch_recprefix.prefix & 0xFFFF); hash = hash ^ (ftch_recprefix.mask); STD_ACCUM_HASH2(rpt64, ftch_recprefix, ftch_recprefixp); return 0; } /* ftstat_rpt_64_accum */ /* function: ftstat_rpt_64_calc * * Perform final calculations for rpt64 * * returns allocated struct or 0L for error */ int ftstat_rpt_64_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_64, rpt64, ftchash_rec_prefix, ftch_recprefix); } /* ftstat_rpt_64_calc */ /* function: ftstat_rpt_64_dump * * Dump data for report. * */ int ftstat_rpt_64_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0P(ftstat_rpt_64, rpt64, chash_prefix_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK| FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, "ip-address", "", "", "", "", "", ""); } /* ftstat_rpt_64_dump */ /* function: ftstat_rpt_64_free * * Free data structures for report allocated by ftstat_rpt_64_new * */ void ftstat_rpt_64_free(struct ftstat_rpt_64 *rpt64) { STD_FREE_HASH(rpt64); } /* ftstat_rpt_64_free */ /* function: ftstat_rpt_65_new * * Allocate and initialize data structures for rpt 6. * * returns allocated struct or 0L for error */ struct ftstat_rpt_65 *ftstat_rpt_65_new(struct ftstat_rpt *rpt) { STD_NEW_BUCKET(ftstat_rpt_65, rpt65, 65536, rpt); } /* ftstat_rpt_65_new */ /* function: ftstat_rpt_65_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_65_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_BUCKET1(ftstat_rpt_65, rpt65); FT_RECGET_SRCPORT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt65->bucket, cur.srcport); FT_RECGET_DSTPORT(cur,rec,*fo); STD_ACCUM_BUCKET2(rpt65->bucket, cur.dstport); return 0; } /* ftstat_rpt_65_accum */ /* function: ftstat_rpt_65_calc * * Perform final calculations for rpt65 * * returns allocated struct or 0L for error */ int ftstat_rpt_65_calc(struct ftstat_rpt *rpt) { STD_CALC_BUCKET(ftstat_rpt_65, rpt65, 65536); } /* ftstat_rpt_65_calc */ /* function: ftstat_rpt_65_dump * * Dump data for report. * */ int ftstat_rpt_65_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_BUCKET(ftstat_rpt_65, rpt65, 65536, FT_PATH_SYM_TCP_PORT, "ip-port", "", "", "", "", "", ""); } /* ftstat_rpt_65_dump */ /* function: ftstat_rpt_65_free * * Free data structures for report allocated by ftstat_rpt_65_new * */ void ftstat_rpt_65_free(struct ftstat_rpt_65 *rpt65) { STD_FREE_BUCKET(rpt65); } /* ftstat_rpt_65_free */ /* function: ftstat_rpt_66_new * * Allocate and initialize data structures for rpt 15. * * returns allocated struct or 0L for error */ struct ftstat_rpt_66 *ftstat_rpt_66_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_66, rpt66, 65536, ftchash_rec_prefixh, 5, 65536); } /* ftstat_rpt_66_new */ /* function: ftstat_rpt_66_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_66_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_prefixs *ftch_recprefixsp, ftch_recprefixs; STD_ACCUM_HASH1(ftstat_rpt_66, rpt66, ftchash_rec_prefixh, ftch_recprefixh, ftch_recprefixhp); FT_RECGET_SRCADDR(cur,rec,*fo); ftch_recprefixh.prefix = cur.srcaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefixh.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefixh.prefix &= ipv4_len2mask(ftch_recprefixh.mask); hash = (ftch_recprefixh.prefix>>16) ^ (ftch_recprefixh.prefix & 0xFFFF); hash = hash ^ (ftch_recprefixh.mask); STD_ACCUM_HASH2(rpt66, ftch_recprefixh, ftch_recprefixhp); /* new second hash */ if (!ftch_recprefixhp->ftch) { if (!(ftch_recprefixhp->ftch = ftchash_new(256, sizeof (struct ftchash_rec_prefixs), 5, 64))) { fterr_warnx("ftchash_new(): failed"); return -1; } } FT_RECGET_DSTADDR(cur,rec,*fo); bzero(&ftch_recprefixs, sizeof ftch_recprefixs); ftch_recprefixs.prefix = cur.dstaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefixs.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefixs.prefix &= ipv4_len2mask(ftch_recprefixs.mask); hash = (ftch_recprefixs.prefix>>16) ^ (ftch_recprefixs.prefix & 0xFFFF); hash = hash ^ (ftch_recprefixs.mask); hash = (hash >> 8) ^ (hash & 0xFF); if (!(ftch_recprefixsp = ftchash_update(ftch_recprefixhp->ftch, &ftch_recprefixs, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } return 0; } /* ftstat_rpt_66_accum */ /* function: ftstat_rpt_66_calc * * Perform final calculations for rpt66 * * returns allocated struct or 0L for error */ int ftstat_rpt_66_calc(struct ftstat_rpt *rpt) { struct ftchash_rec_prefixh *ftch_recprefixh; struct ftstat_rpt_66 *rpt66; rpt66 = rpt->data; STD_CALC; rpt->recs = rpt66->ftch->entries; ftchash_first(rpt66->ftch); while ((ftch_recprefixh = ftchash_foreach(rpt66->ftch))) { if (ftch_recprefixh->etime) { if (rpt->all_fields & FT_STAT_FIELD_PS) { ftch_recprefixh->ps.avg_pps /= (double)ftch_recprefixh->nrecs; ftch_recprefixh->ps.avg_bps /= (double)ftch_recprefixh->nrecs; } } ftch_recprefixh->nprefixes = ftch_recprefixh->ftch->entries; rpt->t_count += ftch_recprefixh->ftch->entries; } return 0; } /* ftstat_rpt_66_calc */ /* function: ftstat_rpt_66_dump * * Dump data for report. * */ int ftstat_rpt_66_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0P(ftstat_rpt_66, rpt66, chash_prefixh_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, "ip-source-address", "ip-destination-address-count", "", "", "", "", ""); } /* ftstat_rpt_66_dump */ /* function: ftstat_rpt_66_free * * Free data structures for report allocated by ftstat_rpt_66_new * */ void ftstat_rpt_66_free(struct ftstat_rpt_66 *rpt66) { struct ftchash_rec_prefixh *ftch_recprefixh; if (rpt66) { if (rpt66->ftch) { ftchash_first(rpt66->ftch); while ((ftch_recprefixh = ftchash_foreach(rpt66->ftch))) { if (ftch_recprefixh->ftch) ftchash_free(ftch_recprefixh->ftch); } ftchash_free(rpt66->ftch); } free (rpt66); } } /* ftstat_rpt_66_free */ /* function: ftstat_rpt_67_new * * Allocate and initialize data structures for rpt 15. * * returns allocated struct or 0L for error */ struct ftstat_rpt_67 *ftstat_rpt_67_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_67, rpt67, 65536, ftchash_rec_prefixh, 5, 65536); } /* ftstat_rpt_67_new */ /* function: ftstat_rpt_67_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_67_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { struct ftchash_rec_prefixs *ftch_recprefixsp, ftch_recprefixs; STD_ACCUM_HASH1(ftstat_rpt_67, rpt67, ftchash_rec_prefixh, ftch_recprefixh, ftch_recprefixhp); FT_RECGET_DSTADDR(cur,rec,*fo); ftch_recprefixh.prefix = cur.dstaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefixh.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefixh.prefix &= ipv4_len2mask(ftch_recprefixh.mask); hash = (ftch_recprefixh.prefix>>16) ^ (ftch_recprefixh.prefix & 0xFFFF); hash = hash ^ (ftch_recprefixh.mask); STD_ACCUM_HASH2(rpt67, ftch_recprefixh, ftch_recprefixhp); /* new second hash */ if (!ftch_recprefixhp->ftch) { if (!(ftch_recprefixhp->ftch = ftchash_new(256, sizeof (struct ftchash_rec_prefixs), 5, 64))) { fterr_warnx("ftchash_new(): failed"); return -1; } } FT_RECGET_SRCADDR(cur,rec,*fo); bzero(&ftch_recprefixs, sizeof ftch_recprefixs); ftch_recprefixs.prefix = cur.srcaddr; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefixs.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefixs.prefix &= ipv4_len2mask(ftch_recprefixs.mask); hash = (ftch_recprefixs.prefix>>16) ^ (ftch_recprefixs.prefix & 0xFFFF); hash = hash ^ (ftch_recprefixs.mask); hash = (hash >> 8) ^ (hash & 0xFF); if (!(ftch_recprefixsp = ftchash_update(ftch_recprefixhp->ftch, &ftch_recprefixs, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } return 0; } /* ftstat_rpt_67_accum */ /* function: ftstat_rpt_67_calc * * Perform final calculations for rpt67 * * returns allocated struct or 0L for error */ int ftstat_rpt_67_calc(struct ftstat_rpt *rpt) { struct ftchash_rec_prefixh *ftch_recprefixh; struct ftstat_rpt_67 *rpt67; rpt67 = rpt->data; STD_CALC; rpt->recs = rpt67->ftch->entries; ftchash_first(rpt67->ftch); while ((ftch_recprefixh = ftchash_foreach(rpt67->ftch))) { if (ftch_recprefixh->etime) { if (rpt->all_fields & FT_STAT_FIELD_PS) { ftch_recprefixh->ps.avg_pps /= (double)ftch_recprefixh->nrecs; ftch_recprefixh->ps.avg_bps /= (double)ftch_recprefixh->nrecs; } } ftch_recprefixh->nprefixes = ftch_recprefixh->ftch->entries; rpt->t_count += ftch_recprefixh->ftch->entries; } return 0; } /* ftstat_rpt_67_calc */ /* function: ftstat_rpt_67_dump * * Dump data for report. * */ int ftstat_rpt_67_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0P(ftstat_rpt_67, rpt67, chash_prefixh_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, "ip-destination-address", "ip-source-address-count", "", "", "", "", ""); } /* ftstat_rpt_67_dump */ /* function: ftstat_rpt_67_free * * Free data structures for report allocated by ftstat_rpt_67_new * */ void ftstat_rpt_67_free(struct ftstat_rpt_67 *rpt67) { struct ftchash_rec_prefixh *ftch_recprefixh; if (rpt67) { if (rpt67->ftch) { ftchash_first(rpt67->ftch); while ((ftch_recprefixh = ftchash_foreach(rpt67->ftch))) { if (ftch_recprefixh->ftch) ftchash_free(ftch_recprefixh->ftch); } ftchash_free(rpt67->ftch); } free (rpt67); } } /* ftstat_rpt_67_free */ /* function: ftstat_rpt_68_new * * Allocate and initialize data structures for rpt 68. * * returns allocated struct or 0L for error */ struct ftstat_rpt_68 *ftstat_rpt_68_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_68, rpt68, 65536, ftchash_rec_flow1, 16, 65536); } /* ftstat_rpt_68_new */ /* function: ftstat_rpt_68_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_68_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_68, rpt68, ftchash_rec_flow1, ftch_recflow1, ftch_recflow1p); FT_RECGET_SRCPORT(cur,rec,*fo); FT_RECGET_DSTPORT(cur,rec,*fo); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); FT_RECGET_TOS(cur,rec,*fo); FT_RECGET_PROT(cur,rec,*fo); ftch_recflow1.src_prefix = cur.srcaddr; ftch_recflow1.dst_prefix = cur.dstaddr; ftch_recflow1.src_port = cur.srcport; ftch_recflow1.dst_port = cur.dstport; ftch_recflow1.tos = cur.tos; ftch_recflow1.prot = cur.prot; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recflow1.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recflow1.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recflow1.src_prefix &= ipv4_len2mask(ftch_recflow1.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recflow1.dst_prefix &= ipv4_len2mask(ftch_recflow1.dst_mask); } hash = (ftch_recflow1.src_prefix>>16)^ (ftch_recflow1.src_prefix & 0xFFFF)^ (ftch_recflow1.dst_prefix>>16)^ (ftch_recflow1.dst_prefix & 0xFFFF)^ (ftch_recflow1.src_port)^ (ftch_recflow1.dst_port)^ (ftch_recflow1.src_mask)^ (ftch_recflow1.tos)^ (ftch_recflow1.prot)^ (u_int32)(ftch_recflow1.dst_mask<<8); STD_ACCUM_HASH2(rpt68, ftch_recflow1, ftch_recflow1p); return 0; } /* ftstat_rpt_68_accum */ /* function: ftstat_rpt_68_calc * * Perform final calculations for rpt68 * * returns allocated struct or 0L for error */ int ftstat_rpt_68_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_68, rpt68, ftchash_rec_flow1, ftch_recflow1); } /* ftstat_rpt_68_calc */ /* function: ftstat_rpt_68_dump * * Dump data for report. * */ int ftstat_rpt_68_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH2(ftstat_rpt_68, rpt68, chash_flow1_dump, FT_PATH_SYM_TCP_PORT, FT_PATH_SYM_IP_PROT, "", "ip-source-address", "ip-destination-address", "ip-source-port", "ip-destination-port", "ip-protocol", "ip-tos"); } /* ftstat_rpt_68_dump */ /* function: ftstat_rpt_68_free * * Free data structures for report allocated by ftstat_rpt_68_new * */ void ftstat_rpt_68_free(struct ftstat_rpt_68 *rpt68) { STD_FREE_HASH(rpt68); } /* ftstat_rpt_68_free */ /* function: ftstat_rpt_69_new * * Allocate and initialize data structures for rpt 69. * * returns allocated struct or 0L for error */ struct ftstat_rpt_69 *ftstat_rpt_69_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_69, rpt69, 65536, ftchash_rec_flow1, 16, 65536); } /* ftstat_rpt_69_new */ /* function: ftstat_rpt_69_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_69_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_69, rpt69, ftchash_rec_flow1, ftch_recflow1, ftch_recflow1p); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); FT_RECGET_TOS(cur,rec,*fo); FT_RECGET_PROT(cur,rec,*fo); ftch_recflow1.src_prefix = cur.srcaddr; ftch_recflow1.dst_prefix = cur.dstaddr; ftch_recflow1.tos = cur.tos; ftch_recflow1.prot = cur.prot; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recflow1.src_mask = cur.src_mask; } if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recflow1.dst_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) { ftch_recflow1.src_prefix &= ipv4_len2mask(ftch_recflow1.src_mask); } if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) { ftch_recflow1.dst_prefix &= ipv4_len2mask(ftch_recflow1.dst_mask); } hash = (ftch_recflow1.src_prefix>>16)^ (ftch_recflow1.src_prefix & 0xFFFF)^ (ftch_recflow1.dst_prefix>>16)^ (ftch_recflow1.dst_prefix & 0xFFFF)^ (ftch_recflow1.src_mask)^ (ftch_recflow1.tos)^ (ftch_recflow1.prot)^ (u_int32)(ftch_recflow1.dst_mask<<8); STD_ACCUM_HASH2(rpt69, ftch_recflow1, ftch_recflow1p); return 0; } /* ftstat_rpt_69_accum */ /* function: ftstat_rpt_69_calc * * Perform final calculations for rpt69 * * returns allocated struct or 0L for error */ int ftstat_rpt_69_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_69, rpt69, ftchash_rec_flow1, ftch_recflow1); } /* ftstat_rpt_69_calc */ /* function: ftstat_rpt_69_dump * * Dump data for report. * */ int ftstat_rpt_69_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_69, rpt69, chash_flow12_dump, FT_PATH_SYM_IP_PROT, "", "ip-source-address", "ip-destination-address", "ip-protocol", "ip-tos", "", ""); } /* ftstat_rpt_69_dump */ /* function: ftstat_rpt_69_free * * Free data structures for report allocated by ftstat_rpt_69_new * */ void ftstat_rpt_69_free(struct ftstat_rpt_69 *rpt69) { STD_FREE_HASH(rpt69); } /* ftstat_rpt_69_free */ /* function: ftstat_rpt_70_new * * Allocate and initialize data structures for rpt 70. * * returns allocated struct or 0L for error */ struct ftstat_rpt_70 *ftstat_rpt_70_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_70, rpt70, 65536, ftchash_rec_prefix_tag, 12, 65536); } /* ftstat_rpt_70_new */ /* function: ftstat_rpt_70_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_70_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_70, rpt70, ftchash_rec_prefix_tag, ftch_recprefix_tag, ftch_recprefix_tagp); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_SRC_TAG(cur,rec,*fo); ftch_recprefix_tag.prefix = cur.srcaddr; ftch_recprefix_tag.tag = cur.src_tag; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix_tag.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix_tag.prefix &= ipv4_len2mask(ftch_recprefix_tag.mask); hash = (ftch_recprefix_tag.tag>>16) ^ (ftch_recprefix_tag.tag & 0xFFFF) ^ (ftch_recprefix_tag.prefix>>16) ^ (ftch_recprefix_tag.prefix & 0xFFFF) ^ (ftch_recprefix_tag.mask); STD_ACCUM_HASH2(rpt70, ftch_recprefix_tag, ftch_recprefix_tagp); return 0; } /* ftstat_rpt_70_accum */ /* function: ftstat_rpt_70_calc * * Perform final calculations for rpt70 * * returns allocated struct or 0L for error */ int ftstat_rpt_70_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_70, rpt70, ftchash_rec_prefix_tag, ftch_recprefix_tag); } /* ftstat_rpt_70_calc */ /* function: ftstat_rpt_70_dump * * Dump data for report. * */ int ftstat_rpt_70_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_70, rpt70, chash_prefix_tag_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_TAG, "", "ip-source-address", "source-tag", "", "", "", ""); } /* ftstat_rpt_70_dump */ /* function: ftstat_rpt_70_free * * Free data structures for report allocated by ftstat_rpt_70_new * */ void ftstat_rpt_70_free(struct ftstat_rpt_70 *rpt70) { STD_FREE_HASH(rpt70); } /* ftstat_rpt_70_free */ /* function: ftstat_rpt_71_new * * Allocate and initialize data structures for rpt 71. * * returns allocated struct or 0L for error */ struct ftstat_rpt_71 *ftstat_rpt_71_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_71, rpt71, 65536, ftchash_rec_prefix_tag, 12, 65536); } /* ftstat_rpt_71_new */ /* function: ftstat_rpt_71_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_71_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_71, rpt71, ftchash_rec_prefix_tag, ftch_recprefix_tag, ftch_recprefix_tagp); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DST_TAG(cur,rec,*fo); ftch_recprefix_tag.prefix = cur.srcaddr; ftch_recprefix_tag.tag = cur.dst_tag; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix_tag.mask = cur.src_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix_tag.prefix &= ipv4_len2mask(ftch_recprefix_tag.mask); hash = (ftch_recprefix_tag.tag>>16) ^ (ftch_recprefix_tag.tag & 0xFFFF) ^ (ftch_recprefix_tag.prefix>>16) ^ (ftch_recprefix_tag.prefix & 0xFFFF) ^ (ftch_recprefix_tag.mask); STD_ACCUM_HASH2(rpt71, ftch_recprefix_tag, ftch_recprefix_tagp); return 0; } /* ftstat_rpt_71_accum */ /* function: ftstat_rpt_71_calc * * Perform final calculations for rpt71 * * returns allocated struct or 0L for error */ int ftstat_rpt_71_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_71, rpt71, ftchash_rec_prefix_tag, ftch_recprefix_tag); } /* ftstat_rpt_71_calc */ /* function: ftstat_rpt_71_dump * * Dump data for report. * */ int ftstat_rpt_71_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_71, rpt71, chash_prefix_tag_dump, FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK, FT_PATH_SYM_TAG, "", "ip-source-address", "destination-tag", "", "", "", ""); } /* ftstat_rpt_71_dump */ /* function: ftstat_rpt_71_free * * Free data structures for report allocated by ftstat_rpt_71_new * */ void ftstat_rpt_71_free(struct ftstat_rpt_71 *rpt71) { STD_FREE_HASH(rpt71); } /* ftstat_rpt_71_free */ /* function: ftstat_rpt_72_new * * Allocate and initialize data structures for rpt 72. * * returns allocated struct or 0L for error */ struct ftstat_rpt_72 *ftstat_rpt_72_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_72, rpt72, 65536, ftchash_rec_prefix_tag, 12, 65536); } /* ftstat_rpt_72_new */ /* function: ftstat_rpt_72_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_72_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_72, rpt72, ftchash_rec_prefix_tag, ftch_recprefix_tag, ftch_recprefix_tagp); FT_RECGET_DSTADDR(cur,rec,*fo); FT_RECGET_DST_TAG(cur,rec,*fo); ftch_recprefix_tag.prefix = cur.dstaddr; ftch_recprefix_tag.tag = cur.dst_tag; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix_tag.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix_tag.prefix &= ipv4_len2mask(ftch_recprefix_tag.mask); hash = (ftch_recprefix_tag.tag>>16) ^ (ftch_recprefix_tag.tag & 0xFFFF) ^ (ftch_recprefix_tag.prefix>>16) ^ (ftch_recprefix_tag.prefix & 0xFFFF) ^ (ftch_recprefix_tag.mask); STD_ACCUM_HASH2(rpt72, ftch_recprefix_tag, ftch_recprefix_tagp); return 0; } /* ftstat_rpt_72_accum */ /* function: ftstat_rpt_72_calc * * Perform final calculations for rpt72 * * returns allocated struct or 0L for error */ int ftstat_rpt_72_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_72, rpt72, ftchash_rec_prefix_tag, ftch_recprefix_tag); } /* ftstat_rpt_72_calc */ /* function: ftstat_rpt_72_dump * * Dump data for report. * */ int ftstat_rpt_72_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_72, rpt72, chash_prefix_tag_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_TAG, "", "ip-destination-address", "source-tag", "", "", "", ""); } /* ftstat_rpt_72_dump */ /* function: ftstat_rpt_72_free * * Free data structures for report allocated by ftstat_rpt_72_new * */ void ftstat_rpt_72_free(struct ftstat_rpt_72 *rpt72) { STD_FREE_HASH(rpt72); } /* ftstat_rpt_72_free */ /* function: ftstat_rpt_73_new * * Allocate and initialize data structures for rpt 73. * * returns allocated struct or 0L for error */ struct ftstat_rpt_73 *ftstat_rpt_73_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_73, rpt73, 65536, ftchash_rec_prefix_tag, 12, 65536); } /* ftstat_rpt_73_new */ /* function: ftstat_rpt_73_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_73_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_73, rpt73, ftchash_rec_prefix_tag, ftch_recprefix_tag, ftch_recprefix_tagp); FT_RECGET_DSTADDR(cur,rec,*fo); FT_RECGET_DST_TAG(cur,rec,*fo); ftch_recprefix_tag.prefix = cur.dstaddr; ftch_recprefix_tag.tag = cur.dst_tag; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix_tag.mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix_tag.prefix &= ipv4_len2mask(ftch_recprefix_tag.mask); hash = (ftch_recprefix_tag.tag>>16) ^ (ftch_recprefix_tag.tag & 0xFFFF) ^ (ftch_recprefix_tag.prefix>>16) ^ (ftch_recprefix_tag.prefix & 0xFFFF) ^ (ftch_recprefix_tag.mask); STD_ACCUM_HASH2(rpt73, ftch_recprefix_tag, ftch_recprefix_tagp); return 0; } /* ftstat_rpt_73_accum */ /* function: ftstat_rpt_73_calc * * Perform final calculations for rpt73 * * returns allocated struct or 0L for error */ int ftstat_rpt_73_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_73, rpt73, ftchash_rec_prefix_tag, ftch_recprefix_tag); } /* ftstat_rpt_73_calc */ /* function: ftstat_rpt_73_dump * * Dump data for report. * */ int ftstat_rpt_73_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1P(ftstat_rpt_73, rpt73, chash_prefix_tag_dump, FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK, FT_PATH_SYM_TAG, "", "ip-destination-address", "destination-tag", "", "", "", ""); } /* ftstat_rpt_73_dump */ /* function: ftstat_rpt_73_free * * Free data structures for report allocated by ftstat_rpt_73_new * */ void ftstat_rpt_73_free(struct ftstat_rpt_73 *rpt73) { STD_FREE_HASH(rpt73); } /* ftstat_rpt_73_free */ /* function: ftstat_rpt_74_new * * Allocate and initialize data structures for rpt 74. * * returns allocated struct or 0L for error */ struct ftstat_rpt_74 *ftstat_rpt_74_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_74, rpt74, 65536, ftchash_rec_prefix2tag2, 24, 65536); } /* ftstat_rpt_74_new */ /* function: ftstat_rpt_74_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_74_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_74, rpt74, ftchash_rec_prefix2tag2, ftch_recprefix2tag2, ftch_recprefix2tag2p); FT_RECGET_SRCADDR(cur,rec,*fo); FT_RECGET_DSTADDR(cur,rec,*fo); FT_RECGET_SRC_TAG(cur,rec,*fo); FT_RECGET_DST_TAG(cur,rec,*fo); ftch_recprefix2tag2.src_prefix = cur.srcaddr; ftch_recprefix2tag2.src_tag = cur.src_tag; ftch_recprefix2tag2.dst_prefix = cur.dstaddr; ftch_recprefix2tag2.dst_tag = cur.dst_tag; /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_MASK|FT_STAT_OPT_SRC_PREFIX_LEN)) { FT_RECGET_SRC_MASK(cur,rec,*fo); ftch_recprefix2tag2.src_mask = cur.src_mask; } /* only use mask if option set */ if (rpt->options & (FT_STAT_OPT_DST_PREFIX_MASK|FT_STAT_OPT_DST_PREFIX_LEN)) { FT_RECGET_DST_MASK(cur,rec,*fo); ftch_recprefix2tag2.src_mask = cur.dst_mask; } /* remove host bits */ if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) ftch_recprefix2tag2.src_prefix &= ipv4_len2mask(ftch_recprefix2tag2.src_mask); /* remove host bits */ if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) ftch_recprefix2tag2.dst_prefix &= ipv4_len2mask(ftch_recprefix2tag2.dst_mask); hash = (ftch_recprefix2tag2.src_tag>>16) ^ (ftch_recprefix2tag2.src_tag & 0xFFFF) ^ (ftch_recprefix2tag2.dst_tag>>16) ^ (ftch_recprefix2tag2.dst_tag & 0xFFFF) ^ (ftch_recprefix2tag2.src_prefix>>16) ^ (ftch_recprefix2tag2.src_prefix & 0xFFFF) ^ (ftch_recprefix2tag2.dst_prefix>>16) ^ (ftch_recprefix2tag2.dst_prefix & 0xFFFF) ^ (ftch_recprefix2tag2.src_mask) ^ (ftch_recprefix2tag2.dst_mask); STD_ACCUM_HASH2(rpt74, ftch_recprefix2tag2, ftch_recprefix2tag2p); return 0; } /* ftstat_rpt_74_accum */ /* function: ftstat_rpt_74_calc * * Perform final calculations for rpt74 * * returns allocated struct or 0L for error */ int ftstat_rpt_74_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_74, rpt74, ftchash_rec_prefix2tag2, ftch_recprefix2tag2); } /* ftstat_rpt_74_calc */ /* function: ftstat_rpt_74_dump * * Dump data for report. * */ int ftstat_rpt_74_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_74, rpt74, chash_prefix2tag2_dump, FT_PATH_SYM_TAG, "", "ip-source-address", "ip-destination-address", "source-tag", "destination-tag", "", ""); } /* ftstat_rpt_74_dump */ /* function: ftstat_rpt_74_free * * Free data structures for report allocated by ftstat_rpt_74_new * */ void ftstat_rpt_74_free(struct ftstat_rpt_74 *rpt74) { STD_FREE_HASH(rpt74); } /* ftstat_rpt_74_free */ /* function: ftstat_rpt_75_new * * Allocate and initialize data structures for rpt 75. * * returns allocated struct or 0L for error */ struct ftstat_rpt_75 *ftstat_rpt_75_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_75, rpt75, 65536, ftchash_rec_int, 4, 65536); } /* ftstat_rpt_75_new */ /* function: ftstat_rpt_75_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_75_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { struct fttime start, end; u_int32 i; double p_flows, p_octets, p_packets, d; STD_ACCUM_HASH1(ftstat_rpt_75, rpt75, ftchash_rec_int, ftch_recint, ftch_recintp); FT_RECGET_SYSUPTIME(cur,rec,*fo); FT_RECGET_UNIX_SECS(cur,rec,*fo); FT_RECGET_UNIX_NSECS(cur,rec,*fo); FT_RECGET_FIRST(cur,rec,*fo); FT_RECGET_LAST(cur,rec,*fo); start = ftltime(cur.sysUpTime, cur.unix_secs, cur.unix_nsecs, cur.First); end = ftltime(cur.sysUpTime, cur.unix_secs, cur.unix_nsecs, cur.Last); d = (end.secs - start.secs) + 1; p_flows = (double)cur.dFlows64 / d; p_octets = (double)cur.dOctets64 / d; p_packets = (double)cur.dPkts64 / d; for (i = start.secs; i <= end.secs; ++i) { ftch_recint.time = i; hash = (i>>16) ^ (i & 0xFFFF); if (!(ftch_recintp = ftchash_update(rpt75->ftch, &ftch_recint, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } ftch_recintp->nflows += p_flows; ftch_recintp->noctets += p_octets; ftch_recintp->npackets += p_packets; } return 0; } /* ftstat_rpt_75_accum */ /* function: ftstat_rpt_75_calc * * Perform final calculations for rpt75 * * returns allocated struct or 0L for error */ int ftstat_rpt_75_calc(struct ftstat_rpt *rpt) { struct ftstat_rpt_75 *rpt75; rpt75 = rpt->data; STD_CALC; rpt->recs = rpt75->ftch->entries; return 0; } /* ftstat_rpt_75_calc */ /* function: ftstat_rpt_75_dump * * Dump data for report. * */ int ftstat_rpt_75_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH0(ftstat_rpt_75, rpt75, chash_int_dump, "unix-secs", "", "", "", "", "", ""); } /* ftstat_rpt_75_dump */ /* function: ftstat_rpt_75_free * * Free data structures for report allocated by ftstat_rpt_75_new * */ void ftstat_rpt_75_free(struct ftstat_rpt_75 *rpt75) { STD_FREE_HASH(rpt75); } /* ftstat_rpt_75_free */ /* function: ftstat_rpt_76_new * * Allocate and initialize data structures for rpt 76. * * returns allocated struct or 0L for error */ struct ftstat_rpt_76 *ftstat_rpt_76_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_76, rpt76, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_76_new */ /* function: ftstat_rpt_76_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_76_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_76, rpt76, ftchash_rec_c32, ftch_recc32, ftch_recc32p); ftch_recc32.c32 = cur.First; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt76, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_76_accum */ /* function: ftstat_rpt_76_calc * * Perform final calculations for rpt76 * * returns allocated struct or 0L for error */ int ftstat_rpt_76_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_76, rpt76, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_76_calc */ /* function: ftstat_rpt_76_dump * * Dump data for report. * */ int ftstat_rpt_76_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_76, rpt76, chash_c32_dump, (char*)0L, "First", "", "", "", "", "", ""); } /* ftstat_rpt_76_dump */ /* function: ftstat_rpt_76_free * * Free data structures for report allocated by ftstat_rpt_76_new * */ void ftstat_rpt_76_free(struct ftstat_rpt_76 *rpt76) { STD_FREE_HASH(rpt76); } /* ftstat_rpt_76_free */ /* function: ftstat_rpt_77_new * * Allocate and initialize data structures for rpt 77. * * returns allocated struct or 0L for error */ struct ftstat_rpt_77 *ftstat_rpt_77_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_77, rpt77, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_77_new */ /* function: ftstat_rpt_77_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_77_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_77, rpt77, ftchash_rec_c32, ftch_recc32, ftch_recc32p); ftch_recc32.c32 = cur.Last; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt77, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_77_accum */ /* function: ftstat_rpt_77_calc * * Perform final calculations for rpt77 * * returns allocated struct or 0L for error */ int ftstat_rpt_77_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_77, rpt77, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_77_calc */ /* function: ftstat_rpt_77_dump * * Dump data for report. * */ int ftstat_rpt_77_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_77, rpt77, chash_c32_dump, (char*)0L, "Last", "", "", "", "", "", ""); } /* ftstat_rpt_77_dump */ /* function: ftstat_rpt_77_free * * Free data structures for report allocated by ftstat_rpt_77_new * */ void ftstat_rpt_77_free(struct ftstat_rpt_77 *rpt77) { STD_FREE_HASH(rpt77); } /* ftstat_rpt_77_free */ /* function: ftstat_rpt_78_new * * Allocate and initialize data structures for rpt 78. * * returns allocated struct or 0L for error */ struct ftstat_rpt_78 *ftstat_rpt_78_new(struct ftstat_rpt *rpt) { STD_NEW_HASH(ftstat_rpt_78, rpt78, 65536, ftchash_rec_c32, 4, 65536); } /* ftstat_rpt_78_new */ /* function: ftstat_rpt_78_accum * * Accumulate counters for report by processing flow. * * returns 0: ok * !0: error */ int ftstat_rpt_78_accum(struct ftstat_rpt *rpt, char *rec, struct fts3rec_offsets *fo) { STD_ACCUM_HASH1(ftstat_rpt_78, rpt78, ftchash_rec_c32, ftch_recc32, ftch_recc32p); ftch_recc32.c32 = cur.Last - cur.First; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); STD_ACCUM_HASH2(rpt78, ftch_recc32, ftch_recc32p); return 0; } /* ftstat_rpt_78_accum */ /* function: ftstat_rpt_78_calc * * Perform final calculations for rpt78 * * returns allocated struct or 0L for error */ int ftstat_rpt_78_calc(struct ftstat_rpt *rpt) { STD_CALC_HASH(ftstat_rpt_78, rpt78, ftchash_rec_c32, ftch_recc32); } /* ftstat_rpt_78_calc */ /* function: ftstat_rpt_78_dump * * Dump data for report. * */ int ftstat_rpt_78_dump(FILE *fp, struct ftio *ftio, struct ftstat_rpt *rpt) { STD_DUMP_HASH1(ftstat_rpt_78, rpt78, chash_c32_dump, (char*)0L, "Duration", "", "", "", "", "", ""); } /* ftstat_rpt_78_dump */ /* function: ftstat_rpt_78_free * * Free data structures for report allocated by ftstat_rpt_78_new * */ void ftstat_rpt_78_free(struct ftstat_rpt_78 *rpt78) { STD_FREE_HASH(rpt78); } /* ftstat_rpt_78_free */ /* * function: resolve_reports * * resolve the dangling pointers to rpts in definitions -- * allows definitions to be defined before reports. * * _must_ be called after work done by parse_def_report * * returns: 0 ok * <0 fail */ static int resolve_reports(struct ftstat *ftstat) { struct ftstat_rpt_item *ftsrpti; struct ftstat_def *ftsd; struct ftstat_rpt *ftsrpt; int found; /* foreach definition */ FT_SLIST_FOREACH(ftsd, &ftstat->defs, chain) { /* foreach report in the definition */ FT_STAILQ_FOREACH(ftsrpti, &ftsd->items, chain) { /* find the report */ found = 0; FT_SLIST_FOREACH(ftsrpt, &ftstat->rpts, chain) { if (!strcasecmp(ftsrpti->tmp_report, ftsrpt->name)) { found = 1; break; } /* if */ } /* ftsrpt */ if (!found) { fterr_warnx( "Unable to resolve report \"%s\" in stat-definition \"%s\".", ftsrpti->tmp_report, ftsd->name); return -1; } /* !found */ /* report found */ ftsrpti->rpt = ftsrpt; ftsd->xfields |= ftsrpt->xfields; } /* ftsrpti */ } /* ftsd */ return 0; } /* resolve_reports */ static int dump_ascii_header(FILE *fp, struct ftio *ftio, struct ftstat_def *active_def, struct ftstat_rpt *rpt) { int comma, sort_field; char *buf, fmt_buf[32]; time_t now; /* shortcut */ if (!(rpt->out->options & FT_STAT_OPT_HEADER)) return 0; if (!active_def->interval) { fprintf(fp, "# --- ---- ---- Report Information --- --- ---\n"); fprintf(fp, "# build-version: flow-tools %s\n", VERSION); fprintf(fp, "# name: %s\n", rpt->name); fprintf(fp, "# type: %s\n", rpt->format_name); if (rpt->scale) fprintf(fp, "# scale: %lu\n", (unsigned long)rpt->scale); if (rpt->out->options) { fprintf(fp, "# options: "); comma = 0; if (rpt->out->options & FT_STAT_OPT_PERCENT) { fprintf(fp, "+percent-total"); comma=1; } if (rpt->out->options & FT_STAT_OPT_NAMES) { fprintf(fp, "%snames", comma ? ",+" : "+"); comma=1; } if (rpt->out->options & FT_STAT_OPT_HEADER) { fprintf(fp, "%sheader", comma ? ",+" : "+"); comma=1; } if (rpt->out->options & FT_STAT_OPT_XHEADER) { fprintf(fp, "%sxheader", comma ? ",+" : "+"); comma=1; } if (rpt->out->options & FT_STAT_OPT_TOTALS) { fprintf(fp, "%stotals", comma ? ",+" : "+"); comma=1; } fprintf(fp, "\n"); } /* options */ if (rpt->xfields & FT_XFIELD_SRCADDR) { fprintf(fp, "# ip-src-addr-type: "); if (rpt->options & FT_STAT_OPT_SRC_PREFIX_LEN) fprintf(fp, "prefix-len\n"); else if (rpt->options & FT_STAT_OPT_SRC_PREFIX_MASK) fprintf(fp, "prefix-mask\n"); else fprintf(fp, "address\n"); } if (rpt->xfields & FT_XFIELD_DSTADDR) { fprintf(fp, "# ip-dst-addr-type: "); if (rpt->options & FT_STAT_OPT_DST_PREFIX_LEN) fprintf(fp, "prefix-len\n"); else if (rpt->options & FT_STAT_OPT_DST_PREFIX_MASK) fprintf(fp, "prefix-mask\n"); else fprintf(fp, "address\n"); } if (rpt->out->options & FT_STAT_OPT_SORT) { sort_field = rpt->out->sort_field; if (sort_field < 0) sort_field *= -1; if (sort_field & FT_STAT_FIELD_KEY) buf = "key"; else if (sort_field & FT_STAT_FIELD_KEY1) buf = "key1"; else if (sort_field & FT_STAT_FIELD_KEY2) buf = "key2"; else if (sort_field & FT_STAT_FIELD_KEY3) buf = "key3"; else if (sort_field & FT_STAT_FIELD_KEY4) buf = "key4"; else if (sort_field & FT_STAT_FIELD_KEY5) buf = "key5"; else if (sort_field & FT_STAT_FIELD_KEY6) buf = "key6"; else if (sort_field & FT_STAT_FIELD_FLOWS) buf = "flows"; else if (sort_field & FT_STAT_FIELD_OCTETS) buf = "octets"; else if (sort_field & FT_STAT_FIELD_PACKETS) buf = "packets"; else if (sort_field & FT_STAT_FIELD_DURATION) buf = "duration"; else if (sort_field & FT_STAT_FIELD_AVG_PPS) buf = "avg-pps"; else if (sort_field & FT_STAT_FIELD_MIN_PPS) buf = "min-pps"; else if (sort_field & FT_STAT_FIELD_MAX_PPS) buf = "max-pps"; else if (sort_field & FT_STAT_FIELD_AVG_BPS) buf = "avg-bps"; else if (sort_field & FT_STAT_FIELD_MIN_BPS) buf = "min-bps"; else if (sort_field & FT_STAT_FIELD_MAX_BPS) buf = "max-bps"; else if (sort_field & FT_STAT_FIELD_OTHER) buf = "other"; else if (sort_field & FT_STAT_FIELD_COUNT) buf = "count"; else buf = "error"; fprintf(fp, "# sort_field: %c%s\n", (rpt->out->sort_field < 0) ? '-' : '+', buf); } /* FT_STAT_OPT_SORT */ if (rpt->out->fields) { fprintf(fp, "# fields: "); comma = 0; if (rpt->out->fields & FT_STAT_FIELD_KEY) { fprintf(fp, "+key"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY1) { fprintf(fp, "%skey1", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { fprintf(fp, "%skey2", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { fprintf(fp, "%skey3", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY4) { fprintf(fp, "%skey4", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY5) { fprintf(fp, "%skey5", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY6) { fprintf(fp, "%skey6", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FLOWS) { fprintf(fp, "%sflows", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_OCTETS) { fprintf(fp, "%soctets", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_PACKETS) { fprintf(fp, "%spackets", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_DURATION) { fprintf(fp, "%sduration", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_AVG_PPS) { fprintf(fp, "%savg-pps", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MIN_PPS) { fprintf(fp, "%smin-pps", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MAX_PPS) { fprintf(fp, "%smax-pps", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_AVG_BPS) { fprintf(fp, "%savg-bps", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MIN_BPS) { fprintf(fp, "%smin-bps", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MAX_BPS) { fprintf(fp, "%smax-bps", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FRECS) { fprintf(fp, "%sfrecs", comma ? ",+" : "+"); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_OTHER) { fprintf(fp, "%sother", comma ? ",+" : "+"); comma = 1; } fprintf(fp, "\n"); } /* rpt->out->fields */ if (rpt->out->options & FT_STAT_OPT_TALLY) fprintf(fp, "# tally: %lu\n", (unsigned long)rpt->out->tally); if (active_def->ftd) fprintf(fp, "# tag: %s\n", active_def->ftd->name); if (active_def->ftfd) fprintf(fp, "# pre-filter: %s\n", active_def->ftfd->name); if (rpt->ftfd) fprintf(fp, "# filter: %s\n", rpt->ftfd->name); } /* !active_def->interval */ fmt_uint64(fmt_buf, rpt->recs, FMT_JUST_LEFT); fprintf(fp, "# records: %s\n", fmt_buf); if (rpt->out->records) { fmt_uint64(fmt_buf, rpt->out->records, FMT_JUST_LEFT); fprintf(fp, "# records_shown: %s\n", fmt_buf); } fprintf(fp, "# first-flow: %lu %s", (unsigned long)rpt->time_start, ctime((time_t*)&rpt->time_start)); fprintf(fp, "# last-flow: %lu %s", (unsigned long)rpt->time_end, ctime((time_t*)&rpt->time_end)); now = time((time_t*)0L); fprintf(fp, "# now: %lu %s", (unsigned long)now, ctime(&now)); if (active_def->max_time) fprintf(fp, "# time-series: %lu seconds / interval %lu\n", (unsigned long)active_def->max_time, (unsigned long)active_def->interval); if (!active_def->interval) { if (rpt->out->options & FT_STAT_OPT_XHEADER) ftio_header_print(ftio, fp, '#'); } /* !active_def->interval */ return 0; } /* dump_ascii_header */ static int chash_c32_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1) { struct ftsym *ftsym1; CHASH_DUMP_INIT(ftchash_rec_c32, ftch_recc32); ftsym1 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) ftsym1 = ftsym_new(sym1); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { sort_offset = offsetof(struct ftchash_rec_c32, c32); sort_flags |= FT_CHASH_SORT_32; } else CHASH_DUMP_STD_SORT(ftchash_rec_c32); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc32 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recc32->c32, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc32, comma); } else { CHASH_STD_OUT(ftch_recc32, comma); } } if (ftsym1) ftsym_free(ftsym1); return 0; } /* chash_c32_dump */ static int chash_c322_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2) { struct ftsym *ftsym1, *ftsym2; CHASH_DUMP_INIT(ftchash_rec_c322, ftch_recc322); ftsym1 = ftsym2 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_c322, c32a); sort_flags |= FT_CHASH_SORT_32; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_c322, c32b); sort_flags |= FT_CHASH_SORT_32; } else CHASH_DUMP_STD_SORT(ftchash_rec_c322); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc322 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recc322->c32a, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recc322->c32b, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc322, comma); } else { CHASH_STD_OUT(ftch_recc322, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); return 0; } /* chash_c322_dump */ static int chash_c162_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2) { struct ftsym *ftsym1, *ftsym2; CHASH_DUMP_INIT(ftchash_rec_c162, ftch_recc162); ftsym1 = ftsym2 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_c162, c16a); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_c162, c16b); sort_flags |= FT_CHASH_SORT_16; } else CHASH_DUMP_STD_SORT(ftchash_rec_c162); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc162 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT() if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recc162->c16a, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recc162->c16b, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc162, comma); } else { CHASH_STD_OUT(ftch_recc162, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); return 0; } /* chash_c162_dump */ static int chash_c163_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2, char *sym3) { struct ftsym *ftsym1, *ftsym2, *ftsym3; CHASH_DUMP_INIT(ftchash_rec_c163, ftch_recc163); ftsym1 = ftsym2 = ftsym3 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); ftsym3 = ftsym_new(sym3); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_c163, c16a); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_c163, c16b); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_c163, c16c); sort_flags |= FT_CHASH_SORT_16; } else CHASH_DUMP_STD_SORT(ftchash_rec_c163); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc163 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT() if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recc163->c16a, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recc163->c16b, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym3, FMT_SYM_LEN, fmt_buf+len, ftch_recc163->c16c, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc163, comma); } else { CHASH_STD_OUT(ftch_recc163, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); if (ftsym3) ftsym_free(ftsym3); return 0; } /* chash_c163_dump */ static int chash_c164_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2, char *sym3, char *sym4) { struct ftsym *ftsym1, *ftsym2, *ftsym3, *ftsym4; CHASH_DUMP_INIT(ftchash_rec_c164, ftch_recc164); ftsym1 = ftsym2 = ftsym3 = ftsym4 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); ftsym3 = ftsym_new(sym3); ftsym4 = ftsym_new(sym4); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_c164, c16a); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_c164, c16b); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_c164, c16c); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY4) { sort_offset = offsetof(struct ftchash_rec_c164, c16d); sort_flags |= FT_CHASH_SORT_16; } else CHASH_DUMP_STD_SORT(ftchash_rec_c164); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc164 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recc164->c16a, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recc164->c16b, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym3, FMT_SYM_LEN, fmt_buf+len, ftch_recc164->c16c, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY4) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym4, FMT_SYM_LEN, fmt_buf+len, ftch_recc164->c16d, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc164, comma); } else { CHASH_STD_OUT(ftch_recc164, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); if (ftsym3) ftsym_free(ftsym3); if (ftsym4) ftsym_free(ftsym4); return 0; } /* chash_c163_dump */ static int chash_ip_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch) { CHASH_DUMP_INIT(ftchash_rec_c32, ftch_recc32); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { sort_offset = offsetof(struct ftchash_rec_c32, c32); sort_flags |= FT_CHASH_SORT_32; } else CHASH_DUMP_STD_SORT(ftchash_rec_c32); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc32 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; len += fmt_ipv4s(fmt_buf+len, ftch_recc32->c32, 64, fmt); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc32, comma); } else { CHASH_STD_OUT(ftch_recc32, comma); } } return 0; } /* chash_ip_dump */ static int chash_prefix_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, int f1) { CHASH_DUMP_INIT(ftchash_rec_prefix, ftch_recprefix); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { sort_offset = offsetof(struct ftchash_rec_prefix, prefix); sort_flags |= FT_CHASH_SORT_40; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; if (rpt->options & f1) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix->prefix, ftch_recprefix->mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix->prefix, 64, fmt); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix, comma); } else { CHASH_STD_OUT(ftch_recprefix, comma); } } return 0; } /* chash_prefix_dump */ static int chash_prefix_tag_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, int f1) { struct ftsym *ftsym1; CHASH_DUMP_INIT(ftchash_rec_prefix_tag, ftch_recprefix_tag); ftsym1 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) ftsym1 = ftsym_new(sym1); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix_tag, prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix_tag, tag); sort_flags |= FT_CHASH_SORT_32; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix_tag); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix_tag = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & f1) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix_tag->prefix, ftch_recprefix_tag->mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix_tag->prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix_tag->tag, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix_tag, comma); } else { CHASH_STD_OUT(ftch_recprefix_tag, comma); } } if (ftsym1) ftsym_free(ftsym1); return 0; } /* chash_prefix_tag_dump */ static int chash_prefix2tag2_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1) { struct ftsym *ftsym1; CHASH_DUMP_INIT(ftchash_rec_prefix2tag2, ftch_recprefix2tag2); ftsym1 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) ftsym1 = ftsym_new(sym1); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix2tag2, src_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix2tag2, dst_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_prefix2tag2, src_tag); sort_flags |= FT_CHASH_SORT_32; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY4) { sort_offset = offsetof(struct ftchash_rec_prefix2tag2, dst_tag); sort_flags |= FT_CHASH_SORT_32; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix2tag2); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix2tag2 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix2tag2->src_prefix, ftch_recprefix2tag2->src_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix2tag2->src_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix2tag2->dst_prefix, ftch_recprefix2tag2->dst_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix2tag2->dst_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix2tag2->src_tag, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY4) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix2tag2->dst_tag, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix2tag2, comma); } else { CHASH_STD_OUT(ftch_recprefix2tag2, comma); } } if (ftsym1) ftsym_free(ftsym1); return 0; } /* chash_prefix2tag2_dump */ static int chash_prefixh_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, int f1) { CHASH_DUMP_INIT(ftchash_rec_prefixh, ftch_recprefixh); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { sort_offset = offsetof(struct ftchash_rec_prefixh, prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_COUNT) { sort_offset = offsetof(struct ftchash_rec_prefixh, nprefixes); sort_flags |= FT_CHASH_SORT_64; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefixh); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefixh = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; if (rpt->options & f1) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefixh->prefix, ftch_recprefixh->mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefixh->prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_COUNT) { if (rpt->out->options & FT_STAT_OPT_PERCENT) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)ftch_recprefixh->nprefixes / rpt->t_count)*100.0); comma = 1; } else { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, ftch_recprefixh->nprefixes, FMT_JUST_LEFT); comma = 1; } } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefixh, comma); } else { CHASH_STD_OUT(ftch_recprefixh, comma); } } return 0; } /* chash_prefixh_dump */ static int chash_prefix2_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch) { CHASH_DUMP_INIT(ftchash_rec_prefix2, ftch_recprefix2); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix2, src_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix2, dst_prefix); sort_flags |= FT_CHASH_SORT_40; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix2); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix2 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix2->src_prefix, ftch_recprefix2->src_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix2->src_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix2->dst_prefix, ftch_recprefix2->dst_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix2->dst_prefix, 64, fmt); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix2, comma); } else { CHASH_STD_OUT(ftch_recprefix2, comma); } } return 0; } /* chash_prefix2_dump */ static int chash_prefix16_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, int f1) { struct ftsym *ftsym1; CHASH_DUMP_INIT(ftchash_rec_prefix16, ftch_recprefix16); ftsym1 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) ftsym1 = ftsym_new(sym1); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix16, c16); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix16, prefix); sort_flags |= FT_CHASH_SORT_40; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix16); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix16 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & f1) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix16->prefix, ftch_recprefix16->mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix16->prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix16->c16, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix16, comma); } else { CHASH_STD_OUT(ftch_recprefix16, comma); } } if (ftsym1) ftsym_free(ftsym1); return 0; } /* chash_prefix16_dump */ static int chash_prefix162_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2, int f1) { struct ftsym *ftsym1, *ftsym2; CHASH_DUMP_INIT(ftchash_rec_prefix162, ftch_recprefix162); ftsym1 = ftsym2 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_prefix162, c16b); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix162, c16a); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix162, prefix); sort_flags |= FT_CHASH_SORT_40; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix162); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix162 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & f1) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix162->prefix, ftch_recprefix162->mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix162->prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix162->c16a, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix162->c16b, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix162, comma); } else { CHASH_STD_OUT(ftch_recprefix162, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); return 0; } /* chash_prefix162_dump */ static int chash_prefix216_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1) { struct ftsym *ftsym1; CHASH_DUMP_INIT(ftchash_rec_prefix216, ftch_recprefix216); ftsym1 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) ftsym1 = ftsym_new(sym1); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_prefix216, c16); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix216, src_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix216, dst_prefix); sort_flags |= FT_CHASH_SORT_40; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix216); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix216 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix216->src_prefix, ftch_recprefix216->src_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix216->src_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix216->dst_prefix, ftch_recprefix216->dst_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix216->dst_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix216->c16, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix216, comma); } else { CHASH_STD_OUT(ftch_recprefix216, comma); } } if (ftsym1) ftsym_free(ftsym1); return 0; } /* chash_prefix216_dump */ static int chash_prefix2162_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2) { struct ftsym *ftsym1, *ftsym2; CHASH_DUMP_INIT(ftchash_rec_prefix2162, ftch_recprefix2162); ftsym1 = ftsym2 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_prefix2162, c16a); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY4) { sort_offset = offsetof(struct ftchash_rec_prefix2162, c16b); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_prefix2162, src_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_prefix2162, dst_prefix); sort_flags |= FT_CHASH_SORT_40; } else CHASH_DUMP_STD_SORT(ftchash_rec_prefix2162); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recprefix2162 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix2162->src_prefix, ftch_recprefix2162->src_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix2162->src_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recprefix2162->dst_prefix, ftch_recprefix2162->dst_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recprefix2162->dst_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix2162->c16a, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY4) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recprefix2162->c16b, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recprefix2162, comma); } else { CHASH_STD_OUT(ftch_recprefix2162, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); return 0; } /* chash_prefix2162_dump */ static int chash_c64_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch) { CHASH_DUMP_INIT(ftchash_rec_c64, ftch_recc64); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { sort_offset = offsetof(struct ftchash_rec_c64, c64); sort_flags |= FT_CHASH_SORT_64; } else CHASH_DUMP_STD_SORT(ftchash_rec_c64); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recc64 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, ftch_recc64->c64, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recc64, comma); } else { CHASH_STD_OUT(ftch_recc64, comma); } } return 0; } /* chash_c64_dump */ static int chash_int_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch) { CHASH_DUMP_INIT(ftchash_rec_int, ftch_recint); if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { sort_offset = offsetof(struct ftchash_rec_int, time); sort_flags |= FT_CHASH_SORT_32; } else if (rpt->out->sort_field == FT_STAT_FIELD_FLOWS) {\ sort_offset = offsetof(struct ftchash_rec_int, nflows);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_OCTETS) {\ sort_offset = offsetof(struct ftchash_rec_int, noctets);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } else if (rpt->out->sort_field == FT_STAT_FIELD_PACKETS) {\ sort_offset = offsetof(struct ftchash_rec_int, npackets);\ sort_flags |= FT_CHASH_SORT_DOUBLE;\ } ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recint = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, ftch_recint->time, FMT_JUST_LEFT); comma = 1; } /* XXX percent totals? */ if (rpt->out->fields & FT_STAT_FIELD_FLOWS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ftch_recint->nflows);\ comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_OCTETS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ftch_recint->noctets);\ comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_PACKETS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ftch_recint->npackets);\ comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FRECS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, ftch_recint->nrecs, FMT_JUST_LEFT); comma = 1;\ } fmt_buf[len++] = '\n'; fmt_buf[len] = 0; fputs(fmt_buf, fp); if (rpt->out->records && (tally.rt_recs == rpt->out->records)) { fprintf(fp, "# stop, hit record limit.\n"); break; } } return 0; } /* chash_int_dump */ static int chash_flow1_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1, char *sym2) { struct ftsym *ftsym1, *ftsym2; CHASH_DUMP_INIT(ftchash_rec_flow1, ftch_recflow1); ftsym1 = ftsym2 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); ftsym2 = ftsym_new(sym2); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_flow1, src_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_flow1, dst_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_flow1, src_port); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY4) { sort_offset = offsetof(struct ftchash_rec_flow1, dst_port); sort_flags |= FT_CHASH_SORT_16; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY5) { sort_offset = offsetof(struct ftchash_rec_flow1, prot); sort_flags |= FT_CHASH_SORT_8; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY6) { sort_offset = offsetof(struct ftchash_rec_flow1, tos); sort_flags |= FT_CHASH_SORT_8; } else CHASH_DUMP_STD_SORT(ftchash_rec_flow1); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recflow1 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recflow1->src_prefix, ftch_recflow1->src_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recflow1->src_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recflow1->dst_prefix, ftch_recflow1->dst_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recflow1->dst_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recflow1->src_port, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY4) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recflow1->dst_port, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY5) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8s(ftsym2, FMT_SYM_LEN, fmt_buf+len, ftch_recflow1->prot, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY6) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, ftch_recflow1->tos, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recflow1, comma); } else { CHASH_STD_OUT(ftch_recflow1, comma); } } if (ftsym1) ftsym_free(ftsym1); if (ftsym2) ftsym_free(ftsym2); return 0; } /* chash_flow1_dump */ static int chash_flow12_dump(FILE *fp, struct ftstat_rpt *rpt, struct ftchash *ftch, char *sym1) { struct ftsym *ftsym1; CHASH_DUMP_INIT(ftchash_rec_flow1, ftch_recflow1); ftsym1 = (struct ftsym*)0L; if (rpt->out->options & FT_STAT_OPT_NAMES) { ftsym1 = ftsym_new(sym1); } if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) sort_flags = FT_CHASH_SORT_ASCENDING; else sort_flags = 0; if (rpt->out->sort_field == FT_STAT_FIELD_KEY1) { sort_offset = offsetof(struct ftchash_rec_flow1, src_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY2) { sort_offset = offsetof(struct ftchash_rec_flow1, dst_prefix); sort_flags |= FT_CHASH_SORT_40; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY3) { sort_offset = offsetof(struct ftchash_rec_flow1, prot); sort_flags |= FT_CHASH_SORT_8; } else if (rpt->out->sort_field == FT_STAT_FIELD_KEY4) { sort_offset = offsetof(struct ftchash_rec_flow1, tos); sort_flags |= FT_CHASH_SORT_8; } else CHASH_DUMP_STD_SORT(ftchash_rec_flow1); ftchash_sort(ftch, sort_offset, sort_flags); } /* FT_STAT_OPT_SORT */ ftchash_first(ftch); while ((ftch_recflow1 = ftchash_foreach(ftch))) { len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY1) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_SRC_PREFIX_LEN|FT_STAT_OPT_SRC_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recflow1->src_prefix, ftch_recflow1->src_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recflow1->src_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY2) { if (comma) fmt_buf[len++] = ','; if (rpt->options & (FT_STAT_OPT_DST_PREFIX_LEN|FT_STAT_OPT_DST_PREFIX_MASK)) len += fmt_ipv4prefixs(fmt_buf+len, ftch_recflow1->dst_prefix, ftch_recflow1->dst_mask, 64, fmt); else len += fmt_ipv4s(fmt_buf+len, ftch_recflow1->dst_prefix, 64, fmt); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY3) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8s(ftsym1, FMT_SYM_LEN, fmt_buf+len, ftch_recflow1->prot, FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_KEY4) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, ftch_recflow1->tos, FMT_JUST_LEFT); comma = 1; } if (rpt->out->options & FT_STAT_OPT_PERCENT) { CHASH_STDP_OUT(ftch_recflow1, comma); } else { CHASH_STD_OUT(ftch_recflow1, comma); } } if (ftsym1) ftsym_free(ftsym1); return 0; } /* chash_flow12_dump */ static int bucket_dump1(FILE *fp, struct ftstat_rpt *rpt, struct flow_bucket *b, u_int32 nindex, char *symfile) { struct ftsym *ftsym; struct tally tally; char fmt_buf1[32], fmt_buf[1024]; int len, comma; int32 i, start, end, increment; u_int32 *index; ftsym = (struct ftsym*)0L; fmt_buf1[0] = fmt_buf[0] = 0; index = b->index; bzero(&tally, sizeof tally); if (rpt->out->options & FT_STAT_OPT_NAMES) ftsym = ftsym_new(symfile); start = 0; end = nindex, increment = 1; if (rpt->out->options & FT_STAT_OPT_SORT) { if (rpt->out->sort_order & FT_STAT_SORT_ASCEND) start = nindex - 1, end = -1, increment = -1; if (rpt->out->sort_field == FT_STAT_FIELD_KEY) { ; /* sorted by default */ } else if (rpt->out->sort_field == FT_STAT_FIELD_FLOWS) { sort_i64 = b->flows; qsort(b->index, nindex, sizeof (u_int32), sort_cmp64); } else if (rpt->out->sort_field == FT_STAT_FIELD_OCTETS) { sort_i64 = b->octets; qsort(b->index, nindex, sizeof (u_int32), sort_cmp64); } else if (rpt->out->sort_field == FT_STAT_FIELD_PACKETS) { sort_i64 = b->packets; qsort(b->index, nindex, sizeof (u_int32), sort_cmp64); } else if (rpt->out->sort_field == FT_STAT_FIELD_DURATION) { sort_i64 = b->duration; qsort(b->index, nindex, sizeof (u_int32), sort_cmp64); } else if (rpt->out->sort_field == FT_STAT_FIELD_AVG_PPS) { sort_idouble = b->avg_pps; qsort(b->index, nindex, sizeof (u_int32), sort_cmp_double); } else if (rpt->out->sort_field == FT_STAT_FIELD_MIN_PPS) { sort_idouble = b->min_pps; qsort(b->index, nindex, sizeof (u_int32), sort_cmp_double); } else if (rpt->out->sort_field == FT_STAT_FIELD_MAX_PPS) { sort_idouble = b->max_pps; qsort(b->index, nindex, sizeof (u_int32), sort_cmp_double); } else if (rpt->out->sort_field == FT_STAT_FIELD_AVG_BPS) { sort_idouble = b->avg_bps; qsort(b->index, nindex, sizeof (u_int32), sort_cmp_double); } else if (rpt->out->sort_field == FT_STAT_FIELD_MIN_BPS) { sort_idouble = b->min_bps; qsort(b->index, nindex, sizeof (u_int32), sort_cmp_double); } else if (rpt->out->sort_field == FT_STAT_FIELD_MAX_BPS) { sort_idouble = b->max_bps; qsort(b->index, nindex, sizeof (u_int32), sort_cmp_double); } else { fterr_errx(1,"bucket_dump1(): internal error"); } } /* FT_STAT_OPT_SORT */ /* need to know the total number of records first */ if (rpt->out->options & FT_STAT_OPT_TALLY) { for (i = start; i != end; i += increment) { if (!b->flows[index[i]]) continue; ++tally.t_recs; } } if (rpt->out->options & FT_STAT_OPT_PERCENT) { for (i = start; i != end; i += increment) { if (!b->flows[index[i]]) continue; if ((rpt->out->options & FT_STAT_OPT_TALLY) && tally.rt_recs && (!(tally.rt_recs % rpt->out->tally))) { if (rpt->all_fields & FT_STAT_FIELD_PS) fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f %%avg-bps=%3.3f %%avg-pps=%3.3f\n", ((double)tally.rt_recs/(double)tally.t_recs)*100, ((double)tally.rt_flows/(double)rpt->t_flows)*100, ((double)tally.rt_octets/(double)rpt->t_octets)*100, ((double)tally.rt_packets/(double)rpt->t_packets)*100, (((double)tally.ravg_bps/(double)tally.rt_frecs)/ (double)rpt->avg_bps)*100, (((double)tally.ravg_pps/(double)tally.rt_frecs)/ (double)rpt->avg_pps)*100); else fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f\n", ((double)tally.rt_recs/(double)tally.t_recs)*100, ((double)tally.rt_flows/(double)rpt->t_flows)*100, ((double)tally.rt_octets/(double)rpt->t_octets)*100, ((double)tally.rt_packets/(double)rpt->t_packets)*100); } /* tally */ tally.rt_flows += b->flows[index[i]]; tally.rt_octets += b->octets[index[i]]; tally.rt_packets += b->packets[index[i]]; tally.rt_frecs += b->recs[index[i]]; tally.rt_recs ++; if (rpt->all_fields & FT_STAT_FIELD_PS) { tally.ravg_bps += b->avg_bps[index[i]] * b->recs[index[i]]; tally.ravg_pps += b->avg_pps[index[i]] * b->recs[index[i]]; } len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym, FMT_SYM_LEN, fmt_buf+len, b->index[i], FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FLOWS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->flows[index[i]] / (double)rpt->t_flows)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_OCTETS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->octets[index[i]] / (double)rpt->t_octets)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_PACKETS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->packets[index[i]] / (double)rpt->t_packets)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_DURATION) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->duration[index[i]] / (double)rpt->t_duration)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_AVG_BPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->avg_bps[index[i]] / (double)rpt->avg_bps)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MIN_BPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->min_bps[index[i]] / (double)rpt->min_bps)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MAX_BPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->max_bps[index[i]] / (double)rpt->max_bps)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_AVG_PPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->avg_pps[index[i]] / (double)rpt->avg_pps)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MIN_PPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->min_pps[index[i]] / (double)rpt->min_pps)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MAX_PPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", ((double)b->max_pps[index[i]] / (double)rpt->max_pps)*100.0); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FRECS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, b->recs[index[i]], FMT_JUST_LEFT);\ comma = 1; } fmt_buf[len++] = '\n'; fmt_buf[len] = 0; fputs(fmt_buf, fp); if (rpt->out->records && (tally.rt_recs == rpt->out->records)) { fprintf(fp, "# stop, hit record limit.\n"); break; } } } else { for (i = start; i != end; i += increment) { if (!b->flows[index[i]]) continue; if ((rpt->out->options & FT_STAT_OPT_TALLY) && tally.rt_recs && (!(tally.rt_recs % rpt->out->tally))) { if (rpt->all_fields & FT_STAT_FIELD_PS) fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f %%avg-bps=%3.3f %%avg-pps=%3.3f\n", ((double)tally.rt_recs/(double)tally.t_recs)*100, ((double)tally.rt_flows/(double)rpt->t_flows)*100, ((double)tally.rt_octets/(double)rpt->t_octets)*100, ((double)tally.rt_packets/(double)rpt->t_packets)*100, (((double)tally.ravg_bps/(double)tally.rt_frecs)/ (double)rpt->avg_bps)*100, (((double)tally.ravg_pps/(double)tally.rt_frecs)/ (double)rpt->avg_pps)*100); else fprintf(fp, "#TALLY %%recs=%3.3f %%flows=%3.3f %%octets=%3.3f %%packets=%3.3f\n", ((double)tally.rt_recs/(double)tally.t_recs)*100, ((double)tally.rt_flows/(double)rpt->t_flows)*100, ((double)tally.rt_octets/(double)rpt->t_octets)*100, ((double)tally.rt_packets/(double)rpt->t_packets)*100); } /* tally */ tally.rt_flows += b->flows[index[i]]; tally.rt_octets += b->octets[index[i]]; tally.rt_packets += b->packets[index[i]]; tally.rt_recs ++; tally.rt_frecs += b->recs[index[i]]; if (rpt->all_fields & FT_STAT_FIELD_PS) { tally.ravg_bps += b->avg_bps[index[i]] * b->recs[index[i]]; tally.ravg_pps += b->avg_pps[index[i]] * b->recs[index[i]]; } len = comma = 0; DUMP_STD_OUT(); if (rpt->out->fields & FT_STAT_FIELD_KEY) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32s(ftsym, FMT_SYM_LEN, fmt_buf+len, b->index[i], FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FLOWS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, b->flows[index[i]], FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_OCTETS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, b->octets[index[i]], FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_PACKETS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, b->packets[index[i]], FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_DURATION) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, b->duration[index[i]], FMT_JUST_LEFT); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_AVG_BPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", b->avg_bps[index[i]]); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MIN_BPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", b->min_bps[index[i]]); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MAX_BPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", b->max_bps[index[i]]); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_AVG_PPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", b->avg_pps[index[i]]); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MIN_PPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", b->min_pps[index[i]]); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_MAX_PPS) { if (comma) fmt_buf[len++] = ','; len += sprintf(fmt_buf+len, "%f", b->max_pps[index[i]]); comma = 1; } if (rpt->out->fields & FT_STAT_FIELD_FRECS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint64(fmt_buf+len, b->recs[index[i]], FMT_JUST_LEFT);\ comma = 1; } fmt_buf[len++] = '\n'; fmt_buf[len] = 0; fputs(fmt_buf, fp); if (rpt->out->records && (tally.rt_recs == rpt->out->records)) { fprintf(fp, "# stop, hit record limit.\n"); break; } } /* foreach record */ } /* totals */ if (ftsym) ftsym_free(ftsym); return 0; } /* bucket_dump1 */ static int recn_dump(FILE *fp, int fields, char *key, char *key1, char *key2, char *key3, char *key4, char *key5, char *key6) { int comma; fprintf(fp, "# recn: "); comma = 0; if (fields & FT_STAT_FIELD_INDEX) { fprintf(fp, "%sindex", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_FIRST) { fprintf(fp, "%sfirst", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_LAST) { fprintf(fp, "%slast", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_KEY) { fprintf(fp, "%s%s*", comma ? "," : "", key); comma = 1; } if (fields & FT_STAT_FIELD_KEY1) { fprintf(fp, "%s%s*", comma ? "," : "", key1); comma = 1; } if (fields & FT_STAT_FIELD_KEY2) { fprintf(fp, "%s%s*", comma ? "," : "", key2); comma = 1; } if (fields & FT_STAT_FIELD_KEY3) { fprintf(fp, "%s%s*", comma ? "," : "", key3); comma = 1; } if (fields & FT_STAT_FIELD_KEY4) { fprintf(fp, "%s%s*", comma ? "," : "", key4); comma = 1; } if (fields & FT_STAT_FIELD_KEY5) { fprintf(fp, "%s%s*", comma ? "," : "", key5); comma = 1; } if (fields & FT_STAT_FIELD_KEY6) { fprintf(fp, "%s%s*", comma ? "," : "", key6); comma = 1; } if (fields & FT_STAT_FIELD_COUNT) { fprintf(fp, "%s%s", comma ? "," : "", key1); comma = 1; } if (fields & FT_STAT_FIELD_FLOWS) { fprintf(fp, "%sflows", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_OCTETS) { fprintf(fp, "%soctets", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_PACKETS) { fprintf(fp, "%spackets", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_DURATION) { fprintf(fp, "%sduration", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_AVG_BPS) { fprintf(fp, "%savg-bps", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_MIN_BPS) { fprintf(fp, "%smin-bps", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_MAX_BPS) { fprintf(fp, "%smax-bps", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_AVG_PPS) { fprintf(fp, "%savg-pps", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_MIN_PPS) { fprintf(fp, "%smin-pps", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_MAX_PPS) { fprintf(fp, "%smax-pps", comma ? "," : ""); comma = 1; } if (fields & FT_STAT_FIELD_FRECS) { fprintf(fp, "%sfrecs", comma ? "," : ""); comma = 1; } fprintf(fp, "\n"); return 0; } /* recn_dump */ int bucket_alloc(struct flow_bucket *b, u_int32 n, struct ftstat_rpt *rpt) { register int i; bzero(b, sizeof (*b)); if (!(b->recs = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(b->recs):"); return -1; } if (!(b->flows = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(b->flows):"); return -1; } if (!(b->octets = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(fopdi):"); bucket_free(b); return -1; } if (!(b->packets = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(b->packets):"); bucket_free(b); return -1; } if (!(b->duration = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(b->duration):"); bucket_free(b); return -1; } if (!(b->index = (u_int32*)malloc(n*sizeof(u_int32)))) { fterr_warn("malloc(b->index):"); bucket_free(b); return -1; } if (rpt->all_fields & FT_STAT_FIELD_PS) { if (!(b->avg_pps = (double*)malloc(n*sizeof(double)))) { fterr_warn("malloc(b->avg_pps):"); bucket_free(b); return -1; } if (!(b->min_pps = (double*)malloc(n*sizeof(double)))) { fterr_warn("malloc(b->min_pps):"); bucket_free(b); return -1; } if (!(b->max_pps = (double*)malloc(n*sizeof(double)))) { fterr_warn("malloc(b->max_pps):"); bucket_free(b); return -1; } if (!(b->avg_bps = (double*)malloc(n*sizeof(double)))) { fterr_warn("malloc(b->avg_bps):"); bucket_free(b); return -1; } if (!(b->min_bps = (double*)malloc(n*sizeof(double)))) { fterr_warn("malloc(b->min_bps):"); bucket_free(b); return -1; } if (!(b->max_bps = (double*)malloc(n*sizeof(double)))) { fterr_warn("malloc(b->max_bps):"); bucket_free(b); return -1; } bzero(b->avg_pps, n*sizeof(double)); bzero(b->min_pps, n*sizeof(double)); bzero(b->max_pps, n*sizeof(double)); bzero(b->avg_bps, n*sizeof(double)); bzero(b->min_bps, n*sizeof(double)); bzero(b->max_bps, n*sizeof(double)); } bzero(b->recs, n*sizeof(u_int64)); bzero(b->flows, n*sizeof(u_int64)); bzero(b->octets, n*sizeof(u_int64)); bzero(b->packets, n*sizeof(u_int64)); bzero(b->duration, n*sizeof(u_int64)); for (i = 0; i < n; ++i) b->index[i] = i; return 0; } /* bucket_alloc */ void bucket_free(struct flow_bucket *b) { if (b->recs) free(b->recs); if (b->flows) free(b->flows); if (b->octets) free(b->octets); if (b->packets) free(b->packets); if (b->duration) free(b->duration); if (b->avg_pps) free(b->avg_pps); if (b->min_pps) free(b->min_pps); if (b->max_pps) free(b->max_pps); if (b->avg_bps) free(b->avg_bps); if (b->min_bps) free(b->min_bps); if (b->max_bps) free(b->max_bps); if (b->index) free(b->index); bzero(b, sizeof (*b)); } /* bucket_free */ static int sort_cmp64(const void *a, const void *b) { u_int32 l, r; l = *(u_int32*)a; r = *(u_int32*)b; if (sort_i64[l] < sort_i64[r]) return -1; if (sort_i64[l] > sort_i64[r]) return 1; return 0; } /* sort_cmp64 */ static int sort_cmp_double(const void *a, const void *b) { u_int32 l, r; l = *(u_int32*)a; r = *(u_int32*)b; if (sort_idouble[l] < sort_idouble[r]) return -1; if (sort_idouble[l] > sort_idouble[r]) return 1; return 0; } /* sort_cmp_double */ /* * function: load_tags * * load the filter definitions if they have not been loaded * * return value of fttag_load() * */ static int load_tags(struct ftstat *ftstat) { struct ftver ftv; /* work to do? */ if (ftstat->fttag_init) return 0; if (fttag_load(&ftstat->fttag, ftstat->ftvar, (ftstat->tag_fname) ? ftstat->tag_fname : FT_PATH_CFG_TAG)) { return 1; } /* required later by accum when tags are enabled */ ftv.d_version = 1005; fts3rec_compute_offsets(&nfo, &ftv); ftstat->fttag_init = 1; return 0; } /* load_tags */ /* * function: load_masks * * load the mask definitions if they have not been loaded * * return value of ftmask_load() * */ static int load_masks(struct ftstat *ftstat) { /* work to do? */ if (ftstat->ftmask_init) return 0; if (ftmask_load(&ftstat->ftmask, (ftstat->mask_fname) ? ftstat->mask_fname : FT_PATH_CFG_MASK)) { return 1; } ftstat->ftmask_init = 1; return 0; } /* load_masks */ /* * function: load_filters * * load the filter definitions if they have not been loaded * * return value of ftfil_load() * */ static int load_filters(struct ftstat *ftstat) { /* work to do? */ if (ftstat->ftfil_init) return 0; if (ftfil_load(&ftstat->ftfil, ftstat->ftvar, (ftstat->filter_fname) ? ftstat->filter_fname : FT_PATH_CFG_FILTER)) { return 1; } ftstat->ftfil_init = 1; return 0; } /* load_filters */ flow-tools-0.68/lib/ftswap.c0000644000076600007660000010065407622602462011503 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftswap.c,v 1.14 2003/02/13 02:38:42 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" /* * function: ftpdu_swap * * Swap bytes in any PDU structure. cur is the current * byte order of the PDU * */ void ftpdu_swap(void *pdu, int cur) { struct ftpdu_header *ph; int16 i; char agg_method, agg_version; ph = pdu; i = ph->version; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ switch (i) { case 1: ftpdu_v1_swap(pdu, cur); break; case 5: ftpdu_v5_swap(pdu, cur); break; case 6: ftpdu_v6_swap(pdu, cur); break; case 7: ftpdu_v7_swap(pdu, cur); break; case 8: agg_method = *((char*)pdu+22); agg_version = *((char*)pdu+23); switch (agg_method) { case 1: ftpdu_v8_1_swap(pdu, cur); break; case 2: ftpdu_v8_2_swap(pdu, cur); break; case 3: ftpdu_v8_3_swap(pdu, cur); break; case 4: ftpdu_v8_4_swap(pdu, cur); break; case 5: ftpdu_v8_5_swap(pdu, cur); break; case 6: ftpdu_v8_6_swap(pdu, cur); break; case 7: ftpdu_v8_7_swap(pdu, cur); break; case 8: ftpdu_v8_8_swap(pdu, cur); break; case 9: ftpdu_v8_9_swap(pdu, cur); break; case 10: ftpdu_v8_10_swap(pdu, cur); break; case 11: ftpdu_v8_11_swap(pdu, cur); break; case 12: ftpdu_v8_12_swap(pdu, cur); break; case 13: ftpdu_v8_13_swap(pdu, cur); break; case 14: ftpdu_v8_14_swap(pdu, cur); break; default: fterr_warnx("Internal error agg_method=%d", (int)agg_method); break; } /* switch */ break; default: fterr_warnx("Internal error i=%d", (int)i); break; } /* switch */ } /* ftpdu_swap */ /* * function: ftpdu_v1_swap * * Swap bytes in a V1 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v1_swap(struct ftpdu_v1 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].srcaddr); SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].nexthop); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].dstport); SWAPINT16(pdu->records[i].srcport); } } /* ftpdu_v1_swap */ void ftpdu_v5_swap(struct ftpdu_v5 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].srcaddr); SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].nexthop); SWAPINT16(pdu->records[i].input) ; SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].dstport); SWAPINT16(pdu->records[i].srcport); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].drops); } } /* ftpdu_v5_swap */ /* * function: ftpdu_v6_swap * * Swap bytes in a V6 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v6_swap(struct ftpdu_v6 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].srcaddr); SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].nexthop); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].dstport); SWAPINT16(pdu->records[i].srcport); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT32(pdu->records[i].peer_nexthop); } } /* ftpdu_v6_swap */ /* * function: ftpdu_v7_swap * * Swap bytes in a V7 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v7_swap(struct ftpdu_v7 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].srcaddr); SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].nexthop); SWAPINT16(pdu->records[i].input) ; SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].dstport); SWAPINT16(pdu->records[i].srcport); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].drops); SWAPINT32(pdu->records[i].router_sc); } } /* ftpdu_v7_swap */ /* * function: ftpdu_v8_1_swap * * Swap bytes in a V8 agg method 1 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_1_swap(struct ftpdu_v8_1 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_1_swap */ /* * function: ftpdu_v8_2_swap * * Swap bytes in a V8 agg method 2 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_2_swap(struct ftpdu_v8_2 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].srcport); SWAPINT16(pdu->records[i].dstport); } } /* ftpdu_v8_2_swap */ /* * function: ftpdu_v8_3_swap * * Swap bytes in a V8 agg method 3 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_3_swap(struct ftpdu_v8_3 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].src_prefix); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].input); } } /* ftpdu_v8_3_swap */ /* * function: ftpdu_v8_4_swap * * Swap bytes in a V8 agg method 4 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_4_swap(struct ftpdu_v8_4 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].dst_prefix); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_4_swap */ /* * function: ftpdu_v8_5_swap * * Swap bytes in a V8 agg method 5 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_5_swap(struct ftpdu_v8_5 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].src_prefix); SWAPINT32(pdu->records[i].dst_prefix); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_5_swap */ /* * function: ftpdu_v8_6_swap * * Swap bytes in a V8 agg method 6 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_6_swap(struct ftpdu_v8_6 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].extra_pkts); SWAPINT32(pdu->records[i].router_sc); } } /* ftpdu_v8_6_swap */ /* * function: ftpdu_v8_7_swap * * Swap bytes in a V8 agg method 7 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_7_swap(struct ftpdu_v8_7 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].srcaddr); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].extra_pkts); SWAPINT32(pdu->records[i].router_sc); } } /* ftpdu_v8_7_swap */ /* * function: ftpdu_v8_8_swap * * Swap bytes in a V8 agg method 7 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_8_swap(struct ftpdu_v8_8 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dstaddr); SWAPINT32(pdu->records[i].srcaddr); SWAPINT16(pdu->records[i].dstport); SWAPINT16(pdu->records[i].srcport); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); SWAPINT32(pdu->records[i].extra_pkts); SWAPINT32(pdu->records[i].router_sc); } } /* ftpdu_v8_8_swap */ /* * function: ftpdu_v8_9_swap * * Swap bytes in a V8 agg method 9 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_9_swap(struct ftpdu_v8_9 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_9_swap */ /* * function: ftpdu_v8_10_swap * * Swap bytes in a V8 agg method 10 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_10_swap(struct ftpdu_v8_10 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].srcport); SWAPINT32(pdu->records[i].dstport); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_10_swap */ /* * function: ftpdu_v8_11_swap * * Swap bytes in a V8 agg method 11 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_11_swap(struct ftpdu_v8_11 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].src_prefix); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].input); } } /* ftpdu_v8_11_swap */ /* * function: ftpdu_v8_12_swap * * Swap bytes in a V8 agg method 12 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_12_swap(struct ftpdu_v8_12 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].dst_prefix); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_12_swap */ /* * function: ftpdu_v8_13_swap * * Swap bytes in a V8 agg method 13 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_13_swap(struct ftpdu_v8_13 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].src_prefix); SWAPINT32(pdu->records[i].dst_prefix); SWAPINT16(pdu->records[i].src_as); SWAPINT16(pdu->records[i].dst_as); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_13_swap */ /* * function: ftpdu_v8_14_swap * * Swap bytes in a V8 agg method 14 PDU. cur is the current * byte order of the PDU * */ void ftpdu_v8_14_swap(struct ftpdu_v8_14 *pdu, int cur) { int16 i; i = pdu->count; #if BYTE_ORDER == LITTLE_ENDIAN if (cur == BIG_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #if BYTE_ORDER == BIG_ENDIAN if (cur == LITTLE_ENDIAN) SWAPINT16(i); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ SWAPINT16(pdu->version); SWAPINT16(pdu->count); SWAPINT32(pdu->sysUpTime); SWAPINT32(pdu->unix_secs); SWAPINT32(pdu->unix_nsecs); SWAPINT32(pdu->flow_sequence); for (--i; i >= 0; --i) { SWAPINT32(pdu->records[i].dFlows); SWAPINT32(pdu->records[i].dPkts); SWAPINT32(pdu->records[i].dOctets); SWAPINT32(pdu->records[i].First); SWAPINT32(pdu->records[i].Last); SWAPINT32(pdu->records[i].src_prefix); SWAPINT32(pdu->records[i].dst_prefix); SWAPINT16(pdu->records[i].srcport); SWAPINT16(pdu->records[i].dstport); SWAPINT16(pdu->records[i].input); SWAPINT16(pdu->records[i].output); } } /* ftpdu_v8_14_swap */ /* * function: fts3rec_swap_v1 * * Swap bytes in a fts3rec_v1 struct * */ void fts3rec_swap_v1(struct fts3rec_v1 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT32(rec->nexthop); SWAPINT16(rec->input); SWAPINT16(rec->output); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); } /* * function: fts3rec_swap_v5 * * Swap bytes in a fts3rec_v5 struct * */ void fts3rec_swap_v5(struct fts3rec_v5 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT32(rec->nexthop); SWAPINT16(rec->input); SWAPINT16(rec->output); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); } /* * function: fts3rec_swap_v6 * * Swap bytes in a fts3rec_v6 struct * */ void fts3rec_swap_v6(struct fts3rec_v6 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT32(rec->nexthop); SWAPINT16(rec->input); SWAPINT16(rec->output); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT32(rec->peer_nexthop); } /* * function: fts3rec_swap_v7 * * Swap bytes in a fts3rec_v7 struct * */ void fts3rec_swap_v7(struct fts3rec_v7 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT32(rec->nexthop); SWAPINT16(rec->input); SWAPINT16(rec->output); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT32(rec->router_sc); } /* * function: fts3rec_swap_v8_1 * * Swap bytes in a fts3rec_v8_1 struct * */ void fts3rec_swap_v8_1(struct fts3rec_v8_1 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_2 * * Swap bytes in a fts3rec_v8_2 struct * */ void fts3rec_swap_v8_2(struct fts3rec_v8_2 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); } /* * function: fts3rec_swap_v8_3 * * Swap bytes in a fts3rec_v8_3 struct * */ void fts3rec_swap_v8_3(struct fts3rec_v8_3 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->srcaddr); SWAPINT16(rec->src_as); SWAPINT16(rec->input); } /* * function: fts3rec_swap_v8_4 * * Swap bytes in a fts3rec_v8_4 struct * */ void fts3rec_swap_v8_4(struct fts3rec_v8_4 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->dstaddr); SWAPINT16(rec->dst_as); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_5 * * Swap bytes in a fts3rec_v8_5 struct * */ void fts3rec_swap_v8_5(struct fts3rec_v8_5 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_6 * * Swap bytes in a fts3rec_v8_6 struct * */ void fts3rec_swap_v8_6(struct fts3rec_v8_6 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->dstaddr); SWAPINT32(rec->extra_pkts); SWAPINT32(rec->router_sc); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_7 * * Swap bytes in a fts3rec_v8_7 struct * */ void fts3rec_swap_v8_7(struct fts3rec_v8_7 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->dstaddr); SWAPINT32(rec->srcaddr); SWAPINT32(rec->extra_pkts); SWAPINT32(rec->router_sc); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_8 * * Swap bytes in a fts3rec_v8_8 struct * */ void fts3rec_swap_v8_8(struct fts3rec_v8_8 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->dstaddr); SWAPINT32(rec->srcaddr); SWAPINT32(rec->extra_pkts); SWAPINT32(rec->router_sc); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_9 * * Swap bytes in a fts3rec_v8_9 struct * */ void fts3rec_swap_v8_9(struct fts3rec_v8_9 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_10 * * Swap bytes in a fts3rec_v8_10 struct * */ void fts3rec_swap_v8_10(struct fts3rec_v8_10 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_11 * * Swap bytes in a fts3rec_v8_11 struct * */ void fts3rec_swap_v8_11(struct fts3rec_v8_11 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->srcaddr); SWAPINT16(rec->src_as); SWAPINT16(rec->input); } /* * function: fts3rec_swap_v8_12 * * Swap bytes in a fts3rec_v8_12 struct * */ void fts3rec_swap_v8_12(struct fts3rec_v8_12 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->dstaddr); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_13 * * Swap bytes in a fts3rec_v8_13 struct * */ void fts3rec_swap_v8_13(struct fts3rec_v8_13 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v8_14 * * Swap bytes in a fts3rec_v8_14 struct * */ void fts3rec_swap_v8_14(struct fts3rec_v8_14 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->exaddr); SWAPINT32(rec->dFlows); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->input); SWAPINT16(rec->output); } /* * function: fts3rec_swap_v1005 * * Swap bytes in a fts3rec_v1005 struct * */ void fts3rec_swap_v1005(struct fts3rec_v1005 *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_nsecs); SWAPINT32(rec->sysUpTime); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT32(rec->nexthop); SWAPINT16(rec->input); SWAPINT16(rec->output); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT16(rec->src_tag); SWAPINT16(rec->dst_tag); } /* * function: fts3rec_swap_compat * * Swap bytes in a fts3rec_compat struct * */ void fts1rec_swap_compat(struct fts1rec_compat *rec) { SWAPINT32(rec->unix_secs); SWAPINT32(rec->unix_msecs); SWAPINT32(rec->srcaddr); SWAPINT32(rec->dstaddr); SWAPINT32(rec->nexthop); SWAPINT16(rec->input); SWAPINT16(rec->output); SWAPINT32(rec->dPkts); SWAPINT32(rec->dOctets); SWAPINT32(rec->First); SWAPINT32(rec->Last); SWAPINT16(rec->srcport); SWAPINT16(rec->dstport); SWAPINT16(rec->pad); SWAPINT16(rec->src_as); SWAPINT16(rec->dst_as); SWAPINT16(rec->drops); } flow-tools-0.68/lib/ftsym.c0000644000076600007660000001414007652374403011337 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftsym.c,v 1.5 2003/04/26 03:12:03 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif /* * function: ftsym_new * * allocate and initialize new symbol table structure * * fname - filename to load ASCII table * returns allocated structure or 0L for error. * */ struct ftsym *ftsym_new(char *fname) { struct stat sb; struct ftsym *ftsym; struct ftchash_rec_sym ftch_recsym, *ftch_recsymp; char *c, *buf, *end; int fd, ret; u_int32 hash; /* no filename? */ if (!fname) return (struct ftsym*)0L; fd = -1; ret = -1; /* allocate ftsym structure */ if (!(ftsym = (struct ftsym*)malloc(sizeof (struct ftsym)))) { fterr_warn("malloc(struct ftsym)"); goto ftsym_new_out; } /* init */ bzero(ftsym, sizeof (struct ftsym)); bzero(&ftch_recsym, sizeof ftch_recsym); if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto ftsym_new_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto ftsym_new_out; } /* allocate storage for file */ if (!(ftsym->fbuf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto ftsym_new_out; } /* * file format: * * valuesymbol\n * # comment\n */ /* read in file */ if (read(fd, ftsym->fbuf, sb.st_size) != sb.st_size) { fterr_warnx("read(): short"); goto ftsym_new_out; } /* null terminate file */ ftsym->fbuf[sb.st_size] = 0; /* init hash table */ if (!(ftsym->ftch = ftchash_new(4096, sizeof (struct ftchash_rec_sym), 4, 256))) { fterr_warnx("ftchash_new(): failed"); goto ftsym_new_out; } buf = ftsym->fbuf; c = buf; for (;;) { /* skip to first char */ for (; *buf && isspace((int)*buf); ++buf); /* done? */ if (!*buf) break; /* comment line */ if (*buf == '#') { for (; *buf && *buf != '\n'; ++buf); continue; } /* at first token (value), null terminate it */ c = buf; for (; *c && !isspace((int)*c); ++c); if (!*c) { fterr_warnx("Missing field"); goto ftsym_new_out; } *c = 0; ftch_recsym.val = strtoul(buf, (char **)0L, 0); /* compute hash */ hash = ((ftch_recsym.val>>16) ^ (ftch_recsym.val & 0xFFFF)) & 0x0FFF; /* store it in hash table */ if (!(ftch_recsymp = ftchash_update(ftsym->ftch, &ftch_recsym, hash))) { fterr_warnx("ftch_update(): failed"); goto ftsym_new_out; } buf = ++c; /* skip past white space */ for (; *buf && ((*buf == ' ') || (*buf == '\t')); ++buf); if (!*buf) { fterr_warnx("Missing field"); goto ftsym_new_out; } c = buf; /* skip to next token (name), null terminate it */ for (; *c && (*c != '\n'); ++c); /* prime for next line */ end = c; if (*end) ++end; *c = 0; /* backup over trailing white space */ --c; for (; isspace((int)*c);--c); /* update hash rec to point at string */ ftch_recsymp->str = buf; buf = end; } ret = 0; /* good */ ftsym_new_out: if (fd != -1) close(fd); if (ret != 0) { if (ftsym) { if (ftsym->fbuf) free(ftsym->fbuf); if (ftsym->ftch) ftchash_free(ftsym->ftch); free(ftsym); ftsym = (struct ftsym*)0L; } } return ftsym; } /* ftsym_new */ /* * function: ftsym_findbyname * * lookup entry by name (linear search) * * returns pointer to record found or null if not found. */ int ftsym_findbyname(struct ftsym *ftsym, char *name, u_int32 *val) { struct ftchash_rec_sym *ftch_recsymp; if (!ftsym) return 0; ftchash_first(ftsym->ftch); while ((ftch_recsymp = ftchash_foreach(ftsym->ftch))) { if (!strcasecmp(ftch_recsymp->str, name)) { *val = ftch_recsymp->val; return 1; } } return 0; } /* ftsym_findbyname */ /* * function: ftsym_findbyval * * lookup entry by value (hashed search) * * returns pointer to record found or null if not found. */ int ftsym_findbyval(struct ftsym *ftsym, u_int32 val, char **name) { struct ftchash_rec_sym *ftch_recsymp; u_int32 hash; if (!ftsym) return 0; hash = ((val>>16) ^ (val & 0xFFFF)) & 0x0FFF; if (!(ftch_recsymp = ftchash_lookup(ftsym->ftch, &val, hash))) return 0; *name = ftch_recsymp->str; return 1; } /* ftsym_findbyval */ /* * function: ftsym_free * * free resources allocated by ftsym_init * */ void ftsym_free(struct ftsym *ftsym) { if (ftsym) { if (ftsym->fbuf) free(ftsym->fbuf); if (ftsym->ftch) ftchash_free(ftsym->ftch); free(ftsym); } } /* ftsym_free */ flow-tools-0.68/lib/fttag.c0000644000076600007660000016077707776322431011325 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: fttag.c,v 1.19 2004/01/05 17:55:37 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif extern int max_keylen; extern u_int32 mask_lookup[]; static struct radix_node_head *rhead; struct line_parser { struct fttag_action *cur_action; struct fttag_def *cur_def; struct fttag_def_term *cur_def_term; int state, type; int lineno; char *buf, *fname; }; #define FT_TAG_OR_SRCDST (FT_TAG_OR_SRC_TAG|FT_TAG_OR_DST_TAG) #define FT_TAG_SET_SRCDST (FT_TAG_SET_SRC_TAG|FT_TAG_SET_DST_TAG) static int parse_action(struct line_parser *lp, struct fttag *fttag); static int parse_action_type(struct line_parser *lp, struct fttag *fttag); static int parse_action_match(struct line_parser *lp, struct fttag *fttag); static int parse_def(struct line_parser *lp, struct fttag *fttag); static int parse_def_exporter(struct line_parser *lp, struct fttag *fttag); static int parse_def_term(struct line_parser *lp, struct fttag *fttag); static int parse_def_input_filter(struct line_parser *lp, struct fttag *fttag); static int parse_def_output_filter(struct line_parser *lp, struct fttag *fttag); static int parse_def_action(struct line_parser *lp, struct fttag *fttag); static int resolve_actions(struct fttag *fttag); static int walk_free(struct radix_node *rn, struct walkarg *UNUSED); static inline void eval_match_src_as(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_dst_as(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_src_prefix(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_dst_prefix(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_nexthop(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_as(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_prefix(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_tcp_src_port(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_tcp_dst_port(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_tcp_port(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_udp_src_port(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_udp_dst_port(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_udp_port(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_tos(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_any(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_in_interface(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_out_interface(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_interface(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_exporter(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_src_ip(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_dst_ip(struct fttag_action *fta, struct fts3rec_v1005 *rec); static inline void eval_match_ip(struct fttag_action *fta, struct fts3rec_v1005 *rec); #define PARSE_STATE_ACTION 0x1 #define PARSE_STATE_DEFINITION 0x2 #define NEXT_WORD(A,B)\ for (;;) {\ B = strsep(A, " \t");\ if ((B && *B != 0) || (!B))\ break;\ }\ struct jump { char *name; int state; int (*func)(struct line_parser *lp, struct fttag *fttag); }; static struct jump pjump[] = {{"tag-action", 0, parse_action}, {"type", PARSE_STATE_ACTION, parse_action_type}, {"match", PARSE_STATE_ACTION, parse_action_match}, {"tag-definition", 0, parse_def}, {"exporter", PARSE_STATE_DEFINITION, parse_def_exporter}, {"term", PARSE_STATE_DEFINITION, parse_def_term}, {"input-filter", PARSE_STATE_DEFINITION, parse_def_input_filter}, {"output-filter", PARSE_STATE_DEFINITION, parse_def_output_filter}, {"action", PARSE_STATE_DEFINITION, parse_def_action}, {0, 0, 0}, }; /* * data structures: * * * fttag holds the head pointers to a list of actions, and definitions. * * Each definition holds a list of terms. A term is a combination of * an input filter, output filter and list of actions. * * struct fttag_def : linked list of definitions * struct fttag_action : linked list of actions * struct fttag_def_term : each term in a definition * struct fttag_def_term_actions : each action in a term * * actions contain one of the following: * * struct fttag_prefix_look : prefix radix trie lookup entry * struct fttag_as_look : AS table lookup * struct fttag_port_look : port table lookup * struct fttag_tos_look : tos table lookup * struct fttag_next_hop_look : next hop hash lookup entry * struct fttag_interface_look : interface table lookup entry * struct fttag_exporter : exporter hash lookup entry * struct fttag_ip_look : IP address hash lookup entry * * struct fftag_exp_hash : hash table mapping exporter_ip * to list of definitions. Used * when processing flows. ie, lookup * by exporter, test input/output * filter then use action to add * tags. * */ /* * function: fttag_load * * Process fname into fttag. * * returns: 0 ok * <0 fail */ int fttag_load(struct fttag *fttag, struct ftvar *ftvar, char *fname) { static int rn_init_called; struct stat sb; struct jump *jmp; struct line_parser lp; int fd, ret, found; char *buf, *buf2, *c; char sbuf[FT_LP_MAXLINE]; ret = -1; buf = (char*)0L; bzero(&lp, sizeof lp); bzero(fttag, sizeof *fttag); if (!rn_init_called) { max_keylen = sizeof(struct radix_sockaddr_in); rn_init(); rn_init_called = 1; } FT_SLIST_INIT(&fttag->defs); FT_SLIST_INIT(&fttag->actions); lp.fname = fname; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto load_tags_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto load_tags_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto load_tags_out; } /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(%s): short", fname); goto load_tags_out; } /* null terminate file */ buf[sb.st_size] = 0; buf2 = buf; for (;;) { /* rip a line */ for (;;) { c = strsep(&buf2, "\n"); ++lp.lineno; if ((c && *c != 0) || (!c)) break; } /* no more lines */ if (!c) { goto load_tags_done; } /* do variable substitutions first */ if (ftvar) { if (ftvar_evalstr(ftvar, c, sbuf, sizeof(sbuf)) < 0) { fterr_warnx("ftvar_evalstr(): failed"); goto load_tags_done; } } else { strncpy(sbuf, c, sizeof(sbuf)); sbuf[sizeof(sbuf)-1] = 0; } lp.buf = sbuf; /* first word */ NEXT_WORD(&lp.buf, c); /* whitespace only line */ if (!c) { continue; } /* comment line */ if (c && *c == '#') continue; for (jmp = pjump; jmp->name; ++jmp) { found = 0; if (((!jmp->state) || (jmp->state & lp.state)) && (!strcasecmp(c, jmp->name))) { found = 1; if (jmp->func(&lp, fttag)) goto load_tags_out; NEXT_WORD(&lp.buf, c); if (c) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_tags_out; } break; } } /* test each word */ if (!found) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_tags_out; } } /* more lines */ load_tags_done: if (resolve_actions(fttag)) goto load_tags_out; ret = 0; load_tags_out: if (fd != -1) close(fd); if (buf) free(buf); if (ret == -1) fttag_free(fttag); return ret; } /* fttag_load */ /* * function: fttag_defintion_find * * Return a pointer to a fttag_def_lookup for use later with * fttag_def_eval * * Note this allocates storage and precomputes a hash table * to speed up the eval phase. Storage is freed by fttag_free() * * returns : pointer to fttag_def_lookup or null if not found or error. * */ struct fttag_def *fttag_def_find(struct fttag *fttag, char *name) { struct fttag_def *ftd; /* foreach definition */ FT_SLIST_FOREACH(ftd, &fttag->defs, chain) { if (!(strcasecmp(ftd->name, name))) return ftd; } return (struct fttag_def*)0L; } /* fttag_def_find */ /* * function: parse_action * * process the 'action' line. Each action has a unique name which * is added to the fttag->actions linked list. The current action is * updated in lp. Actions by themself do nothing, they must be pointed * to by a definition. * * returns: 0 ok * <0 fail */ int parse_action(struct line_parser *lp, struct fttag *fttag) { char *c; struct fttag_action *fta; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(fta, &fttag->actions, chain) { if (!strcasecmp(c, fta->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(fta = (struct fttag_action*)malloc(sizeof (struct fttag_action)))) { fterr_warn("malloc()"); return -1; } bzero(fta, sizeof *fta); if (!(fta->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(fta); return -1; } strcpy(fta->name, c); FT_SLIST_INSERT_HEAD(&fttag->actions, fta, chain); lp->state = PARSE_STATE_ACTION; lp->cur_action = fta; return 0; } /* parse_action */ /* * function: parse_action_type * * process the 'type' line. When the type is set the initial storage * (table/hash/radix trie) is allocated. * * returns: 0 ok * <0 fail */ int parse_action_type(struct line_parser *lp, struct fttag *fttag) { char *c; if (!lp->cur_action) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting type.", lp->fname, lp->lineno); return -1; } if (lp->cur_action->type) { fterr_warnx("%s line %d: Type previously defined.", lp->fname, lp->lineno); return -1; } if (!strcasecmp(c, "src-prefix")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_PREFIX; lp->cur_action->eval = eval_match_src_prefix; } else if (!strcasecmp(c, "source-prefix")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_PREFIX; lp->cur_action->eval = eval_match_src_prefix; } else if (!strcasecmp(c, "dst-prefix")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_PREFIX; lp->cur_action->eval = eval_match_dst_prefix; } else if (!strcasecmp(c, "destination-prefix")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_PREFIX; lp->cur_action->eval = eval_match_dst_prefix; } else if (!strcasecmp(c, "prefix")) { lp->cur_action->eval = eval_match_prefix; lp->cur_action->type = FT_TAG_TYPE_MATCH_PREFIX; } else if (!strcasecmp(c, "next-hop")) { lp->cur_action->eval = eval_match_nexthop; lp->cur_action->type = FT_TAG_TYPE_MATCH_NEXTHOP; } else if (!strcasecmp(c, "src-as")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_AS; lp->cur_action->eval = eval_match_src_as; } else if (!strcasecmp(c, "source-as")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_AS; lp->cur_action->eval = eval_match_src_as; } else if (!strcasecmp(c, "dst-as")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_AS; lp->cur_action->eval = eval_match_dst_as; } else if (!strcasecmp(c, "destination-as")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_AS; lp->cur_action->eval = eval_match_dst_as; } else if (!strcasecmp(c, "as")) { lp->cur_action->eval = eval_match_as; lp->cur_action->type = FT_TAG_TYPE_MATCH_AS; } else if (!strcasecmp(c, "tcp-src-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_TCP_PORT; lp->cur_action->eval = eval_match_tcp_src_port; } else if (!strcasecmp(c, "tcp-source-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_TCP_PORT; lp->cur_action->eval = eval_match_tcp_src_port; } else if (!strcasecmp(c, "tcp-dst-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_TCP_PORT; lp->cur_action->eval = eval_match_tcp_dst_port; } else if (!strcasecmp(c, "tcp-destination-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_TCP_PORT; lp->cur_action->eval = eval_match_tcp_dst_port; } else if (!strcasecmp(c, "tcp-port")) { lp->cur_action->eval = eval_match_tcp_port; lp->cur_action->type = FT_TAG_TYPE_MATCH_TCP_PORT; } else if (!strcasecmp(c, "udp-src-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_UDP_PORT; lp->cur_action->eval = eval_match_udp_src_port; } else if (!strcasecmp(c, "udp-source-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_UDP_PORT; lp->cur_action->eval = eval_match_udp_src_port; } else if (!strcasecmp(c, "udp-dst-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_UDP_PORT; lp->cur_action->eval = eval_match_udp_dst_port; } else if (!strcasecmp(c, "udp-destination-port")) { lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_UDP_PORT; lp->cur_action->eval = eval_match_udp_dst_port; } else if (!strcasecmp(c, "udp-port")) { lp->cur_action->eval = eval_match_udp_port; lp->cur_action->type = FT_TAG_TYPE_MATCH_TCP_PORT; } else if (!strcasecmp(c, "tos")) { lp->cur_action->eval = eval_match_tos; lp->cur_action->type = FT_TAG_TYPE_MATCH_TOS; } else if (!strcasecmp(c, "any")) { lp->cur_action->eval = eval_match_any; lp->cur_action->type = FT_TAG_TYPE_MATCH_ANY; } else if (!strcasecmp(c, "src-ip")) { lp->cur_action->eval = eval_match_src_ip; lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_IP; } else if (!strcasecmp(c, "source-ip-address")) { lp->cur_action->eval = eval_match_src_ip; lp->cur_action->type = FT_TAG_TYPE_MATCH_SRC_IP; } else if (!strcasecmp(c, "dst-ip")) { lp->cur_action->eval = eval_match_dst_ip; lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_IP; } else if (!strcasecmp(c, "destination-ip-address")) { lp->cur_action->eval = eval_match_dst_ip; lp->cur_action->type = FT_TAG_TYPE_MATCH_DST_IP; } else if (!strcasecmp(c, "ip")) { lp->cur_action->eval = eval_match_ip; lp->cur_action->type = FT_TAG_TYPE_MATCH_IP; } else if (!strcasecmp(c, "exporter")) { lp->cur_action->eval = eval_match_exporter; lp->cur_action->type = FT_TAG_TYPE_MATCH_EXPORTER; } else if (!strcasecmp(c, "input-interface")) { lp->cur_action->eval = eval_match_in_interface; lp->cur_action->type = FT_TAG_TYPE_MATCH_IN_INTERFACE; } else if (!strcasecmp(c, "output-interface")) { lp->cur_action->eval = eval_match_out_interface; lp->cur_action->type = FT_TAG_TYPE_MATCH_OUT_INTERFACE; } else if (!strcasecmp(c, "interface")) { lp->cur_action->eval = eval_match_interface; lp->cur_action->type = FT_TAG_TYPE_MATCH_INTERFACE; } else { fterr_warnx("%s line %d: Unrecognized type.", lp->fname, lp->lineno); return -1; } /* allocate storage for lookup */ if ((lp->cur_action->type & FT_TAG_TYPE_MATCH_AS)) { if (!(lp->cur_action->look = malloc(sizeof (struct fttag_as_look)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->look, sizeof (struct fttag_as_look)); } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_TOS) { if (!(lp->cur_action->look = malloc(sizeof (struct fttag_tos_look)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->look, sizeof (struct fttag_tos_look)); } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_ANY) { if (!(lp->cur_action->look = malloc(sizeof (struct fttag_any_look)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->look, sizeof (struct fttag_any_look)); } else if (lp->cur_action->type & (FT_TAG_TYPE_MATCH_TCP_PORT|FT_TAG_TYPE_MATCH_UDP_PORT)) { if (!(lp->cur_action->look = malloc(sizeof (struct fttag_port_look)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->look, sizeof (struct fttag_port_look)); } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_PREFIX) { if (rn_inithead((void**)&lp->cur_action->look, 32) < 0) { fterr_warnx("rn_inithead(): failed"); return -1; } } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_NEXTHOP) { if (!(lp->cur_action->look = ftchash_new(256, sizeof (struct fttag_next_hop_look), 4, 16))) { fterr_warnx("ftchash_new(): failed"); return -1; } } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_EXPORTER) { if (!(lp->cur_action->look = ftchash_new(256, sizeof (struct fttag_exporter_look), 4, 16))) { fterr_warnx("ftchash_new(): failed"); return -1; } } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_IP) { if (!(lp->cur_action->look = ftchash_new(256, sizeof (struct fttag_ip_look), 4, 16))) { fterr_warnx("ftchash_new(): failed"); return -1; } } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_INTERFACE) { if (!(lp->cur_action->look = malloc(sizeof (struct fttag_interface_look)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->look, sizeof (struct fttag_interface_look)); } return 0; } /* parse_action_type */ /* * function: parse_action_match * * process the 'match/set' line. The match action depends on the type which * must be configured first. An AS match is added to a table, a next-hop * is added to a hash (chash_*) and a prefix is added to a radix trie, etc. * * returns: 0 ok * <0 fail */ int parse_action_match(struct line_parser *lp, struct fttag *fttag) { struct radix_sockaddr_in sock1, sock2; struct fttag_as_look *as_look; struct fttag_next_hop_look *nh_look, nh_look2; struct fttag_prefix_look *prefix_look; struct fttag_port_look *port_look; struct fttag_tos_look *tos_look; struct fttag_interface_look *interface_look; struct fttag_exporter_look *exporter_look, exporter_look2; struct fttag_ip_look *ip_look, ip_look2; struct fttag_any_look *any_look; struct ip_prefix ipp; struct radix_node_head *rhead; u_int32 tag, hash, ipaddr; u_int16 as, port, interface; u_int8 tos; int sflag, new, tflag2, tmpflag, tflag; char *c, *match; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } bzero(&sock1, sizeof sock1); bzero(&sock2, sizeof sock2); sock1.sin_family = AF_INET; sock1.sin_len = sizeof (struct radix_sockaddr_in); sock2.sin_family = AF_INET; sock2.sin_len = sizeof (struct radix_sockaddr_in); as_look = lp->cur_action->look; nh_look = lp->cur_action->look; prefix_look = lp->cur_action->look; port_look = lp->cur_action->look; tos_look = lp->cur_action->look; any_look = lp->cur_action->look; interface_look = lp->cur_action->look; ip_look = lp->cur_action->look; exporter_look = lp->cur_action->look; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting match data.", lp->fname, lp->lineno); return -1; } match = c; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting [set|or]-[source|destination].", lp->fname, lp->lineno); return -1; } if (!strcasecmp(c, "set-src")) { sflag = FT_TAG_SET_SRC_TAG; tflag = FT_TAG_SET_SRC_TAG; tflag2 = FT_TAG_OR_SRC_TAG; } else if (!strcasecmp(c, "set-source")) { sflag = FT_TAG_SET_SRC_TAG; tflag = FT_TAG_SET_SRC_TAG; tflag2 = FT_TAG_OR_SRC_TAG; } else if (!strcasecmp(c, "set-dst")) { sflag = FT_TAG_SET_DST_TAG; tflag = FT_TAG_SET_DST_TAG; tflag2 = FT_TAG_OR_DST_TAG; } else if (!strcasecmp(c, "set-destination")) { sflag = FT_TAG_SET_DST_TAG; tflag = FT_TAG_SET_DST_TAG; tflag2 = FT_TAG_OR_DST_TAG; } else if (!strcasecmp(c, "or-src")) { sflag = FT_TAG_OR_SRC_TAG; tflag = FT_TAG_SET_SRC_TAG; tflag2 = 0; } else if (!strcasecmp(c, "or-source")) { sflag = FT_TAG_OR_SRC_TAG; tflag = FT_TAG_SET_SRC_TAG; tflag2 = 0; } else if (!strcasecmp(c, "or-dst")) { sflag = FT_TAG_OR_DST_TAG; tflag = FT_TAG_SET_DST_TAG; tflag2 = 0; } else if (!strcasecmp(c, "or-destination")) { sflag = FT_TAG_OR_DST_TAG; tflag = FT_TAG_SET_DST_TAG; tflag2 = 0; } else { fterr_warnx("%s line %d: Expecting [set|or]-[source|destination].", lp->fname, lp->lineno); return -1; } /* * The data structure allows one SET or multiple OR's per * source/destination tag. Enforce this in the config parser * * Error conditions * current sflag * ------------------------ * SET_SRC and SET_SRC * SET_DST and SET_DST * or * SET_SRC and OR_SRC * SET_DST and OR_DST * or * OR_SRC and SET_SRC * OR_DST and SET_DST */ NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting set data.", lp->fname, lp->lineno); return -1; } tag = strtoul(c, (char **)0L, 0); if (lp->cur_action->type & FT_TAG_TYPE_MATCH_AS) { as = atoi(match); tmpflag = as_look->set_flags_lookup[as]; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } as_look->set_flags_lookup[as] |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) as_look->src_tag_lookup[as] = tag; if (sflag & FT_TAG_OR_SRC_TAG) as_look->src_tag_lookup[as] |= tag; if (sflag & FT_TAG_SET_DST_TAG) as_look->dst_tag_lookup[as] = tag; if (sflag & FT_TAG_OR_DST_TAG) as_look->dst_tag_lookup[as] |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_INTERFACE) { interface = atoi(match); tmpflag = interface_look->set_flags_lookup[interface]; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } interface_look->set_flags_lookup[interface] |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) interface_look->src_tag_lookup[interface] = tag; if (sflag & FT_TAG_OR_SRC_TAG) interface_look->src_tag_lookup[interface] |= tag; if (sflag & FT_TAG_SET_DST_TAG) interface_look->dst_tag_lookup[interface] = tag; if (sflag & FT_TAG_OR_DST_TAG) interface_look->dst_tag_lookup[interface] |= tag; } else if (lp->cur_action->type & (FT_TAG_TYPE_MATCH_TCP_PORT|FT_TAG_TYPE_MATCH_UDP_PORT)) { port = atoi(match); tmpflag = port_look->set_flags_lookup[port]; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } port_look->set_flags_lookup[port] |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) port_look->src_tag_lookup[port] = tag; if (sflag & FT_TAG_OR_SRC_TAG) port_look->src_tag_lookup[port] |= tag; if (sflag & FT_TAG_SET_DST_TAG) port_look->dst_tag_lookup[port] = tag; if (sflag & FT_TAG_OR_DST_TAG) port_look->dst_tag_lookup[port] |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_TOS) { tos = atoi(match); tmpflag = tos_look->set_flags_lookup[tos]; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } tos_look->set_flags_lookup[tos] |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) tos_look->src_tag_lookup[tos] = tag; if (sflag & FT_TAG_OR_SRC_TAG) tos_look->src_tag_lookup[tos] |= tag; if (sflag & FT_TAG_SET_DST_TAG) tos_look->dst_tag_lookup[tos] = tag; if (sflag & FT_TAG_OR_DST_TAG) tos_look->dst_tag_lookup[tos] |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_ANY) { if (strcasecmp(match, "any")) { fterr_warnx("%s line %d: Match must be any.", lp->fname, lp->lineno); return -1; } tmpflag = any_look->set_flags; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } any_look->set_flags |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) any_look->src_tag = tag; if (sflag & FT_TAG_OR_SRC_TAG) any_look->src_tag |= tag; if (sflag & FT_TAG_SET_DST_TAG) any_look->dst_tag = tag; if (sflag & FT_TAG_OR_DST_TAG) any_look->dst_tag |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_PREFIX) { ipp = scan_ip_prefix(match); sock1.sin_addr.s_addr = ipp.addr; sock2.sin_addr.s_addr = (!ipp.len) ? 0 : mask_lookup[ipp.len]; rhead = lp->cur_action->look; /* try to retrieve from trie */ prefix_look = (struct fttag_prefix_look*)rhead->rnh_lookup(&sock1, &sock2, rhead); new = 1; /* if it exists, make sure not a duplicate set */ if (prefix_look && (prefix_look->addr.sin_addr.s_addr == ipp.addr) && (prefix_look->masklen == ipp.len)) { tmpflag = prefix_look->set_flags; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } else { new = 0; } } /* allocate a new prefix lookup */ if (new) { if (!(prefix_look = (struct fttag_prefix_look*)malloc(sizeof (struct fttag_prefix_look)))) { fterr_warn("malloc(prefix_look)"); return -1; } bzero(prefix_look, sizeof *prefix_look); prefix_look->rt_nodes->rn_key = (caddr_t)&prefix_look->addr; prefix_look->addr.sin_addr.s_addr = ipp.addr; prefix_look->addr.sin_len = sizeof (struct radix_sockaddr_in); prefix_look->addr.sin_family = AF_INET; sock1.sin_addr.s_addr = (!ipp.len) ? 0 : mask_lookup[ipp.len]; prefix_look->masklen = ipp.len; /* add it to the trie */ if (!rhead->rnh_addaddr(&prefix_look->addr, &sock1, rhead, prefix_look->rt_nodes)) { free(prefix_look); fterr_warnx("rnh_addaddr(): failed for %s",match); return -1; } } /* new */ /* finish filling in */ prefix_look->set_flags |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) prefix_look->src_tag = tag; if (sflag & FT_TAG_OR_SRC_TAG) prefix_look->src_tag |= tag; if (sflag & FT_TAG_SET_DST_TAG) prefix_look->dst_tag = tag; if (sflag & FT_TAG_OR_DST_TAG) prefix_look->dst_tag |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_NEXTHOP) { ipaddr = scan_ip(match); hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); nh_look = ftchash_lookup(lp->cur_action->look, &ipaddr, hash); new = 1; /* if it exists, make sure not a duplicate set */ if (nh_look) { tmpflag = nh_look->set_flags; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } else { new = 0; } } if (new) { bzero(&nh_look2, sizeof nh_look2); nh_look2.addr = ipaddr; if (!(nh_look = ftchash_update(lp->cur_action->look, &nh_look2, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } } /* finish filling in fields */ nh_look->set_flags |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) nh_look->src_tag = tag; if (sflag & FT_TAG_OR_SRC_TAG) nh_look->src_tag |= tag; if (sflag & FT_TAG_SET_DST_TAG) nh_look->dst_tag = tag; if (sflag & FT_TAG_OR_DST_TAG) nh_look->dst_tag |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_EXPORTER) { ipaddr = scan_ip(match); hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); exporter_look = ftchash_lookup(lp->cur_action->look, &ipaddr, hash); new = 1; /* if it exists, make sure not a duplicate set */ if (exporter_look) { tmpflag = exporter_look->set_flags; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } else { new = 0; } } if (new) { bzero(&exporter_look2, sizeof exporter_look2); exporter_look2.addr = ipaddr; if (!(exporter_look = ftchash_update(lp->cur_action->look, &exporter_look2, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } } /* finish filling in fields */ exporter_look->set_flags |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) exporter_look->src_tag = tag; if (sflag & FT_TAG_OR_SRC_TAG) exporter_look->src_tag |= tag; if (sflag & FT_TAG_SET_DST_TAG) exporter_look->dst_tag = tag; if (sflag & FT_TAG_OR_DST_TAG) exporter_look->dst_tag |= tag; } else if (lp->cur_action->type & FT_TAG_TYPE_MATCH_IP) { ipaddr = scan_ip(match); hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); ip_look = ftchash_lookup(lp->cur_action->look, &ipaddr, hash); new = 1; /* if it exists, make sure not a duplicate set */ if (ip_look) { tmpflag = ip_look->set_flags; if (((tmpflag & FT_TAG_SET_SRCDST) & tflag) || ((tmpflag & FT_TAG_OR_SRCDST) & tflag2)) { fterr_warnx( "%s line %d: Only one set per source/destination per match.", lp->fname, lp->lineno); return -1; } else { new = 0; } } if (new) { bzero(&ip_look2, sizeof ip_look2); ip_look2.addr = ipaddr; if (!(ip_look = ftchash_update(lp->cur_action->look, &ip_look2, hash))) { fterr_warnx("ftch_update(): failed"); return -1; } } /* finish filling in fields */ ip_look->set_flags |= sflag; if (sflag & FT_TAG_SET_SRC_TAG) ip_look->src_tag = tag; if (sflag & FT_TAG_OR_SRC_TAG) ip_look->src_tag |= tag; if (sflag & FT_TAG_SET_DST_TAG) ip_look->dst_tag = tag; if (sflag & FT_TAG_OR_DST_TAG) ip_look->dst_tag |= tag; } return 0; } /* parse_action_match */ /* * function: parse_def * * process the 'definition' line. Each definition has a unique name which * is added to the fttag->defs linked list. The current definition is * updated in lp. * * returns: 0 ok * <0 fail */ int parse_def(struct line_parser *lp, struct fttag *fttag) { char *c; struct fttag_def *ftd; NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftd, &fttag->defs, chain) { if (!strcasecmp(c, ftd->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, c); return -1; } } /* no, add a new entry to the list */ if (!(ftd = (struct fttag_def*)malloc(sizeof (struct fttag_def)))) { fterr_warn("malloc()"); return -1; } bzero(ftd, sizeof *ftd); FT_STAILQ_INIT(&ftd->terms); if (!(ftd->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftd); return -1; } strcpy(ftd->name, c); FT_SLIST_INSERT_HEAD(&fttag->defs, ftd, chain); lp->state = PARSE_STATE_DEFINITION; lp->cur_def = ftd; return 0; } /* parse_def */ /* * function: parse_def_term * * process the term line. Each definition has a list of terms, the * terms have a common input, output, and exporter IP filter and * may have one or more actions. Without an action a term has * no purpose. * * returns: 0 ok * <0 fail */ int parse_def_term(struct line_parser *lp, struct fttag *fttag) { struct fttag_def_term *ftdt; if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } /* no, add a new term entry to this definition */ if (!(ftdt = (struct fttag_def_term*)malloc(sizeof *ftdt))) { fterr_warn("malloc()"); return -1; } bzero(ftdt, sizeof *ftdt); FT_STAILQ_INIT(&ftdt->actions); FT_STAILQ_INSERT_TAIL(&lp->cur_def->terms, ftdt, chain); lp->cur_def_term = ftdt; return 0; } /* parse_def_term */ /* * function: parse_def_exporter * * process the 'exporter' line. * * returns: 0 ok * <0 fail */ int parse_def_exporter(struct line_parser *lp, struct fttag *fttag) { char *c; if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting exporter.", lp->fname, lp->lineno); return -1; } if (lp->cur_def_term->flags & FT_TAG_DEF_FILTER_EXPORTER) { fterr_warnx("%s line %d: Exporter previously defined.", lp->fname, lp->lineno); return -1; } lp->cur_def_term->exporter_ip = scan_ip(c); lp->cur_def_term->flags |= FT_TAG_DEF_FILTER_EXPORTER; return 0; } /* parse_def_exporter */ /* * function: parse_def_input_filter * * process the 'input-filter' line. * * returns: 0 ok * <0 fail */ int parse_def_input_filter(struct line_parser *lp, struct fttag *fttag) { char *c; if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting filter list.", lp->fname, lp->lineno); return -1; } if (lp->cur_def_term->flags & FT_TAG_DEF_FILTER_INPUT) { fterr_warnx("%s line %d: Input filter previously defined.", lp->fname, lp->lineno); return -1; } if (load_lookup(c, 65536, lp->cur_def_term->in_tbl)) { fterr_warnx("load_lookup(): failed"); return -1; } lp->cur_def_term->flags |= FT_TAG_DEF_FILTER_INPUT; return 0; } /* parse_def_input_filter */ /* * function: parse_def_output_filter * * process the 'output-filter' line. * * returns: 0 ok * <0 fail */ int parse_def_output_filter(struct line_parser *lp, struct fttag *fttag) { char *c; if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting filter list.", lp->fname, lp->lineno); return -1; } if (lp->cur_def_term->flags & FT_TAG_DEF_FILTER_OUTPUT) { fterr_warnx("%s line %d: Output filter previously defined.", lp->fname, lp->lineno); return -1; } if (load_lookup(c, 65536, lp->cur_def_term->out_tbl)) { fterr_warnx("load_lookup(): failed"); return -1; } lp->cur_def_term->flags |= FT_TAG_DEF_FILTER_OUTPUT; return 0; } /* parse_def_output_filter */ /* * function: parse_def_action * * foreach action listed, add it to a linked list of actions for the * definition. Note resolve_actions() must be called before the actions * are valid. * * returns: 0 ok * <0 fail */ int parse_def_action(struct line_parser *lp, struct fttag *fttag) { struct fttag_def_term_actions *ftdta; char *c; if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, c); if (!c) { fterr_warnx("%s line %d: Expecting action.", lp->fname, lp->lineno); return -1; } /* add a new entry to the list */ if (!(ftdta = (struct fttag_def_term_actions*)malloc(sizeof *ftdta))) { fterr_warn("malloc()"); return -1; } bzero(ftdta, sizeof *ftdta); if (!(ftdta->name = (char*)malloc(strlen(c)+1))) { fterr_warn("malloc()"); free(ftdta); return -1; } strcpy(ftdta->name, c); FT_STAILQ_INSERT_TAIL(&lp->cur_def_term->actions, ftdta, chain); /* resolve the ftdta->action later in resolve_actions */ return 0; } /* parse_def_action */ /* * function: resolve_actions * * The parser points to the name of the action in the definition to allow * for definitions to be defined before actions in the config file. This * fixes the pointers so the definitions point to the actions * * returns: 0 ok * <0 fail (an action could not be resolved) */ int resolve_actions(struct fttag *fttag) { struct fttag_def *ftd; struct fttag_def_term *ftdt; struct fttag_def_term_actions *ftdta; struct fttag_action *fta; int i, found; /* foreach definition */ FT_SLIST_FOREACH(ftd, &fttag->defs, chain) { /* foreach term in the definition */ FT_STAILQ_FOREACH(ftdt, &ftd->terms, chain) { /* * pre-init filter to all 1's to minimize test in eval later */ if (!(ftdt->flags & FT_TAG_DEF_FILTER_INPUT)) for (i = 0; i < 65536; ++i) ftdt->in_tbl[i] = 1; if (!(ftdt->flags & FT_TAG_DEF_FILTER_OUTPUT)) for (i = 0; i < 65536; ++i) ftdt->out_tbl[i] = 1; /* foreach action in the term */ FT_STAILQ_FOREACH(ftdta, &ftdt->actions, chain) { found = 0; /* foreach action */ FT_SLIST_FOREACH(fta, &fttag->actions, chain) { if (!(strcasecmp(fta->name, ftdta->name))) { ftdta->action = fta; found = 1; break; } } } if (!found) { fterr_warnx("Unable to resolve action \"%s\" in tag-definition \"%s\".", ftdta->name, ftd->name); return -1; } } } return 0; } /* resolve actions */ /* * function: fttag_free * * free resources allocated by fttag_load() * */ void fttag_free(struct fttag *fttag) { struct fttag_action *fta; struct fttag_def *ftd; struct fttag_def_term *ftdt; struct fttag_def_term_actions *ftdta; /* foreach action, remove the action and associated storge */ while (!FT_SLIST_EMPTY(&fttag->actions)) { fta = FT_SLIST_FIRST(&fttag->actions); FT_SLIST_REMOVE_HEAD(&fttag->actions, chain); if (fta->type & FT_TAG_TYPE_MATCH_AS) free(fta->look); else if (fta->type & FT_TAG_TYPE_MATCH_NEXTHOP) ftchash_free(fta->look); else if (fta->type & FT_TAG_TYPE_MATCH_EXPORTER) ftchash_free(fta->look); else if (fta->type & FT_TAG_TYPE_MATCH_IP) ftchash_free(fta->look); else if (fta->type & FT_TAG_TYPE_MATCH_PREFIX) { rhead = fta->look; rhead->rnh_walktree(rhead, walk_free, 0); } free(fta->name); free(fta); } /* while */ /* foreach definition, remove the definition and associated storage */ while (!FT_SLIST_EMPTY(&fttag->defs)) { ftd = FT_SLIST_FIRST(&fttag->defs); FT_SLIST_REMOVE_HEAD(&fttag->defs, chain); /* foreach term in the definition */ while (!FT_STAILQ_EMPTY(&ftd->terms)) { ftdt = FT_STAILQ_FIRST(&ftd->terms); while (!FT_STAILQ_EMPTY(&ftdt->actions)) { ftdta = FT_STAILQ_FIRST(&ftdt->actions); if (ftdta->name) free(ftdta->name); FT_STAILQ_REMOVE_HEAD(&ftdt->actions, chain); free(ftdta); } FT_STAILQ_REMOVE_HEAD(&ftd->terms, chain); free (ftdt); } free(ftd->name); free(ftd); } /* while */ } /* fttag_free */ /* * function: fttag_def_eval * * perform tag actions on a flow * * run down each term in the definition * evaluate the filter, if okay * run every action * * the filter is activated by * FT_TAG_DEF_FILTER_INPUT - check input * FT_TAG_DEF_FILTER_OUTPUT check output * FT_TAG_DEF_FILTER_EXPORTER check exporter * * * returns 0 */ inline int fttag_def_eval(struct fttag_def *ftd, struct fts3rec_v1005 *rec) { struct fttag_def_term *ftdt; struct fttag_def_term_actions *ftdta; struct fttag_action *fta; /* foreach term in the definition */ FT_STAILQ_FOREACH(ftdt, &ftd->terms, chain) { /* in_tbl is preloaded with "permit any" so don't check the flags bit */ if (!ftdt->in_tbl[rec->input]) continue; /* out_tbl is preloaded with "permit any" so don't check the flags bit */ if (!ftdt->out_tbl[rec->output]) continue; if (ftdt->flags & FT_TAG_DEF_FILTER_EXPORTER) if (ftdt->exporter_ip != rec->exaddr) continue; /* for every action chained to this term */ FT_STAILQ_FOREACH(ftdta, &ftdt->actions, chain) { /* the action */ fta = ftdta->action; /* based on the type do the action if a match is made */ fta->eval(fta, rec); } /* foreach action references by the term */ } /* foreach term */ return 0; } /* fttag_def_eval */ inline void eval_match_src_as(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_as_look *as_look; u_int16 set_tmp; as_look = fta->look; set_tmp = as_look->set_flags_lookup[rec->src_as]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = as_look->dst_tag_lookup[rec->src_as]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= as_look->dst_tag_lookup[rec->src_as]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = as_look->src_tag_lookup[rec->src_as]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= as_look->src_tag_lookup[rec->src_as]; } /* eval_match_src_as */ inline void eval_match_dst_as(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_as_look *as_look; u_int16 set_tmp; as_look = fta->look; set_tmp = as_look->set_flags_lookup[rec->dst_as]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = as_look->dst_tag_lookup[rec->dst_as]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= as_look->dst_tag_lookup[rec->dst_as]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = as_look->src_tag_lookup[rec->dst_as]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= as_look->src_tag_lookup[rec->dst_as]; } /* eval_match_dst_as */ inline void eval_match_src_prefix(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct radix_sockaddr_in dst_sock; struct fttag_prefix_look *prefix_look; struct radix_node_head *rhead; u_int16 set_tmp; rhead = fta->look; dst_sock.sin_addr.s_addr = rec->srcaddr; dst_sock.sin_len = sizeof (struct radix_sockaddr_in); dst_sock.sin_family = AF_INET; prefix_look = (struct fttag_prefix_look *) rhead->rnh_matchaddr(&dst_sock, rhead); if (prefix_look) { set_tmp = prefix_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = prefix_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= prefix_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = prefix_look->src_tag; else if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= prefix_look->src_tag; } } /* eval_match_src_prefix */ inline void eval_match_dst_prefix(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct radix_sockaddr_in dst_sock; struct fttag_prefix_look *prefix_look; struct radix_node_head *rhead; u_int16 set_tmp; rhead = fta->look; dst_sock.sin_addr.s_addr = rec->dstaddr; dst_sock.sin_len = sizeof (struct radix_sockaddr_in); dst_sock.sin_family = AF_INET; prefix_look = (struct fttag_prefix_look *) rhead->rnh_matchaddr(&dst_sock, rhead); if (prefix_look) { set_tmp = prefix_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = prefix_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= prefix_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = prefix_look->src_tag; else if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= prefix_look->src_tag; } } /* eval_match_dst_prefix */ inline void eval_match_nexthop(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct ftchash *ftch; u_int32 hash, ipaddr; struct fttag_next_hop_look *nh_look; u_int16 set_tmp; ftch = fta->look; ipaddr = rec->nexthop; hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); /* lookup next hop */ nh_look = ftchash_lookup(ftch, &ipaddr, hash); if (nh_look) { set_tmp = nh_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = nh_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= nh_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = nh_look->src_tag; else if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= nh_look->src_tag; } } /* eval_match_nexthop */ inline void eval_match_exporter(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct ftchash *ftch; u_int32 hash, ipaddr; struct fttag_exporter_look *exporter_look; u_int16 set_tmp; ftch = fta->look; ipaddr = rec->exaddr; hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); /* lookup next hop */ exporter_look = ftchash_lookup(ftch, &ipaddr, hash); if (exporter_look) { set_tmp = exporter_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = exporter_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= exporter_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = exporter_look->src_tag; else if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= exporter_look->src_tag; } } /* eval_match_exporter */ inline void eval_match_src_ip(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct ftchash *ftch; u_int32 hash, ipaddr; struct fttag_ip_look *ip_look; u_int16 set_tmp; ftch = fta->look; ipaddr = rec->srcaddr; hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); /* lookup next hop */ ip_look = ftchash_lookup(ftch, &ipaddr, hash); if (ip_look) { set_tmp = ip_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = ip_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= ip_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = ip_look->src_tag; else if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= ip_look->src_tag; } } /* eval_match_src_ip */ inline void eval_match_dst_ip(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct ftchash *ftch; u_int32 hash, ipaddr; struct fttag_ip_look *ip_look; u_int16 set_tmp; ftch = fta->look; ipaddr = rec->dstaddr; hash = (ipaddr>>16) ^ (ipaddr & 0xFFFF); hash = (hash>>8) ^ (hash & 0xFF); /* lookup next hop */ ip_look = ftchash_lookup(ftch, &ipaddr, hash); if (ip_look) { set_tmp = ip_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = ip_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= ip_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = ip_look->src_tag; else if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= ip_look->src_tag; } } /* eval_match_dst_ip */ inline void eval_match_prefix(struct fttag_action *fta, struct fts3rec_v1005 *rec) { eval_match_src_prefix(fta, rec); eval_match_dst_prefix(fta, rec); } /* eval_match_prefix */ inline void eval_match_as(struct fttag_action *fta, struct fts3rec_v1005 *rec) { eval_match_src_as(fta, rec); eval_match_dst_as(fta, rec); } /* eval_match_as */ inline void eval_match_tcp_src_port(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_port_look *port_look; u_int16 set_tmp; port_look = fta->look; /* only TCP here */ if (rec->prot != 6) return; set_tmp = port_look->set_flags_lookup[rec->srcport]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = port_look->dst_tag_lookup[rec->srcport]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= port_look->dst_tag_lookup[rec->srcport]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = port_look->src_tag_lookup[rec->srcport]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= port_look->src_tag_lookup[rec->srcport]; } /* eval_match_tcp_src_port */ inline void eval_match_tcp_dst_port(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_port_look *port_look; u_int16 set_tmp; port_look = fta->look; /* only TCP here */ if (rec->prot != 6) return; set_tmp = port_look->set_flags_lookup[rec->dstport]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = port_look->dst_tag_lookup[rec->dstport]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= port_look->dst_tag_lookup[rec->dstport]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = port_look->src_tag_lookup[rec->dstport]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= port_look->src_tag_lookup[rec->dstport]; } /* eval_match_tcp_dst_port */ inline void eval_match_udp_src_port(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_port_look *port_look; u_int16 set_tmp; port_look = fta->look; /* only UDP here */ if (rec->prot != 17) return; set_tmp = port_look->set_flags_lookup[rec->srcport]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = port_look->dst_tag_lookup[rec->srcport]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= port_look->dst_tag_lookup[rec->srcport]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = port_look->src_tag_lookup[rec->srcport]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= port_look->src_tag_lookup[rec->srcport]; } /* eval_match_udp_src_port */ inline void eval_match_udp_dst_port(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_port_look *port_look; u_int16 set_tmp; port_look = fta->look; /* only UDP here */ if (rec->prot != 17) return; set_tmp = port_look->set_flags_lookup[rec->dstport]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = port_look->dst_tag_lookup[rec->dstport]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= port_look->dst_tag_lookup[rec->dstport]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = port_look->src_tag_lookup[rec->dstport]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= port_look->src_tag_lookup[rec->dstport]; } /* eval_match_udp_dst_port */ inline void eval_match_tcp_port(struct fttag_action *fta, struct fts3rec_v1005 *rec) { eval_match_tcp_src_port(fta, rec); eval_match_tcp_dst_port(fta, rec); } /* eval_match_tcp_port */ inline void eval_match_udp_port(struct fttag_action *fta, struct fts3rec_v1005 *rec) { eval_match_udp_src_port(fta, rec); eval_match_udp_dst_port(fta, rec); } /* eval_match_udp_port */ inline void eval_match_in_interface(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_interface_look *interface_look; u_int16 set_tmp; interface_look = fta->look; set_tmp = interface_look->set_flags_lookup[rec->input]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = interface_look->dst_tag_lookup[rec->input]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= interface_look->dst_tag_lookup[rec->input]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = interface_look->src_tag_lookup[rec->input]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= interface_look->src_tag_lookup[rec->input]; } /* eval_match_in_interface */ inline void eval_match_out_interface(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_interface_look *interface_look; u_int16 set_tmp; interface_look = fta->look; set_tmp = interface_look->set_flags_lookup[rec->output]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = interface_look->dst_tag_lookup[rec->output]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= interface_look->dst_tag_lookup[rec->output]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = interface_look->src_tag_lookup[rec->output]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= interface_look->src_tag_lookup[rec->output]; } /* eval_match_out_interface */ inline void eval_match_interface(struct fttag_action *fta, struct fts3rec_v1005 *rec) { eval_match_in_interface(fta, rec); eval_match_out_interface(fta, rec); } /* eval_match_interface */ inline void eval_match_ip(struct fttag_action *fta, struct fts3rec_v1005 *rec) { eval_match_src_ip(fta, rec); eval_match_dst_ip(fta, rec); } /* eval_match_ip */ inline void eval_match_tos(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_tos_look *tos_look; u_int16 set_tmp; tos_look = fta->look; set_tmp = tos_look->set_flags_lookup[rec->tos]; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = tos_look->dst_tag_lookup[rec->tos]; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= tos_look->dst_tag_lookup[rec->tos]; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = tos_look->src_tag_lookup[rec->tos]; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= tos_look->src_tag_lookup[rec->tos]; } /* eval_match_tos */ inline void eval_match_any(struct fttag_action *fta, struct fts3rec_v1005 *rec) { struct fttag_any_look *any_look; u_int16 set_tmp; any_look = fta->look; set_tmp = any_look->set_flags; if (set_tmp & FT_TAG_SET_DST_TAG) rec->dst_tag = any_look->dst_tag; else if (set_tmp & FT_TAG_OR_DST_TAG) rec->dst_tag |= any_look->dst_tag; if (set_tmp & FT_TAG_SET_SRC_TAG) rec->src_tag = any_look->src_tag; if (set_tmp & FT_TAG_OR_SRC_TAG) rec->src_tag |= any_look->src_tag; } /* eval_match_any */ static int walk_free(struct radix_node *rn, struct walkarg *UNUSED) { struct fttag_prefix_look *r; struct radix_sockaddr_in sock1, sock2; r = (struct fttag_prefix_look*)rn; bzero(&sock1, sizeof sock1); bzero(&sock2, sizeof sock2); sock1.sin_addr.s_addr = r->addr.sin_addr.s_addr; sock1.sin_len = sizeof sock1; sock1.sin_family = AF_INET; sock2.sin_addr.s_addr = (!r->masklen) ? 0: mask_lookup[r->masklen]; sock2.sin_len = sizeof sock2; sock2.sin_family = AF_INET; if (r != (struct fttag_prefix_look*)rhead->rnh_deladdr(&sock1, &sock2, rhead)) fterr_errx(1, "rn_deladdr(): failed."); else free(r); return 0; } /* walk_free */ flow-tools-0.68/lib/fttlv.c0000644000076600007660000001431007622602463011330 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: fttlv.c,v 1.6 2003/02/13 02:38:43 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif /* * function: fttlv_enc_uint32 * * encode a u_int32 TLV into buf * buf buffer to encode to * buf_size available bytes in buf * flip swap byte order * t TLV type * v TLV value * * returns: -1 if buffer is not large enough, else bytes used. */ int fttlv_enc_uint32(void *buf, int buf_size, int flip, u_int16 t, u_int32 v) { u_int16 len; if (buf_size < 8) return -1; len = 4; if (flip) { SWAPINT16(t); SWAPINT16(len); SWAPINT32(v); } bcopy(&t, buf, 2); (char*)buf+= 2; bcopy(&len, buf, 2); (char*)buf+= 2; bcopy(&v, buf, 4); return 8; } /* fttlv_enc_uint32 */ /* * function: fttlv_enc_uint16 * * encode a u_int16 TLV into buf * buf buffer to encode to * buf_size available bytes in buf * flip swap byte order * t TLV type * v TLV value * * returns: -1 if buffer is not large enough, else bytes used. */ int fttlv_enc_uint16(void *buf, int buf_size, int flip, u_int16 t, u_int16 v) { u_int16 len; if (buf_size < 6) return -1; len = 2; if (flip) { SWAPINT16(t); SWAPINT16(len); SWAPINT16(v); } bcopy(&t, buf, 2); (char*)buf+= 2; bcopy(&len, buf, 2); (char*)buf+= 2; bcopy(&v, buf, 2); return 6; } /* fttlv_enc_uint16 */ /* * function: fttlv_enc_uint8 * * encode a u_int8 TLV into buf * buf buffer to encode to * buf_size available bytes in buf * flip swap byte order * t TLV type * v TLV value * * returns: -1 if buffer is not large enough, else bytes used. */ int fttlv_enc_uint8(void *buf, int buf_size, int flip, u_int16 t, u_int8 v) { u_int16 len; if (buf_size < 5) return -1; len = 1; if (flip) { SWAPINT16(t); SWAPINT16(len); } bcopy(&t, buf, 2); (char*)buf+= 2; bcopy(&len, buf, 2); (char*)buf+= 2; bcopy(&v, buf, 1); return 5; } /* fttlv_enc_uint8 */ /* * function: fttlv_enc_str * * encode a C string TLV into buf * buf buffer to encode to * buf_size available bytes in buf * flip swap byte order * t TLV type * v TLV value * * returns: -1 if buffer is not large enough, else bytes used. */ int fttlv_enc_str(void *buf, int buf_size, int flip, u_int16 t, char *v) { u_int16 len, len2; len = len2 = strlen(v)+1; if (buf_size < 4+len) return -1; if (flip) { SWAPINT16(t); SWAPINT16(len); } bcopy(&t, buf, 2); (char*)buf+= 2; bcopy(&len, buf, 2); (char*)buf+= 2; bcopy(v, buf, len); return 4+len2; } /* fttlv_enc_str */ /* * function: fttlv_enc_ifname * * encode a ftmap_ifname TLV into buf * buf buffer to encode to * buf_size available bytes in buf * flip swap byte order * t TLV type * ip ip address * ifIndex ifIndex * name interface name * * returns: -1 if buffer is not large enough, else bytes used. */ int fttlv_enc_ifname(void *buf, int buf_size, int flip, u_int16 t, u_int32 ip, u_int16 ifIndex, char *name) { u_int16 len, len2; int n; n = strlen(name)+1; len = len2 = n+2+4; if (flip) { SWAPINT16(t); SWAPINT16(len); SWAPINT32(ip); SWAPINT16(ifIndex); } if (buf_size < 4+len) return -1; bcopy(&t, buf, 2); (char*)buf+= 2; bcopy(&len, buf, 2); (char*)buf+= 2; bcopy(&ip, buf, 4); (char*)buf += 4; bcopy(&ifIndex, buf, 2); (char*)buf += 2; bcopy(name, buf, n); return 4+len2; } /* fttlv_enc_ifname */ /* * function: fttlv_enc_ifalias * * encode a ftmap_ifalias TLV into buf * buf buffer to encode to * buf_size available bytes in buf * flip swap byte order * t TLV type * ip ip address * ifIndex_list list of ifIndexes * entries # of entries in ifIndex_list * name alias name * * returns: -1 if buffer is not large enough, else bytes used. */ int fttlv_enc_ifalias(void *buf, int buf_size, int flip, u_int16 t, u_int32 ip, u_int16 *ifIndex_list, u_int16 entries, char *name) { u_int16 len, len2; int n,i,esize; n = strlen(name)+1; esize = (entries*2); len = len2 = n+2+4+esize; if (buf_size < 4+len) return -1; if (flip) { SWAPINT16(t); SWAPINT16(len); SWAPINT32(ip); for (i = 0; i < entries; ++i) { SWAPINT16(ifIndex_list[i]); } SWAPINT16(entries); } bcopy(&t, buf, 2); (char*)buf+= 2; bcopy(&len, buf, 2); (char*)buf+= 2; bcopy(&ip, buf, 4); (char*)buf += 4; bcopy(&entries, buf, 2); (char*)buf += 2; bcopy(ifIndex_list, buf, esize); (char*)buf += esize; bcopy(name, buf, n); return 4+len2; } /* fttlv_enc_ifalias */ flow-tools-0.68/lib/ftvar.c0000644000076600007660000002126507776322503011326 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftvar.c,v 1.5 2004/01/05 17:56:19 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif /* * function: ftvar_new() * * Create a new variable set. * * Caller must call ftvar_free() to release memory. * * returns: initialized struct * */ int ftvar_new(struct ftvar *ftvar) { bzero(ftvar, sizeof *ftvar); FT_SLIST_INIT(&ftvar->entries); return 0; } /* ftvar_new */ /* * function: ftvar_free() * * Free storage created by ftvar_new() and calls to ftvar_set() * */ void ftvar_free(struct ftvar *ftvar) { struct ftvar_entry *ftve; while (!FT_SLIST_EMPTY(&ftvar->entries)) { ftve = FT_SLIST_FIRST(&ftvar->entries); if (ftve->name) free(ftve->name); if (ftve->val); free(ftve->val); FT_SLIST_REMOVE_HEAD(&ftvar->entries, chain); free(ftve); } } /* ftvar_free */ /* * function: ftvar_pset() * * Parse variable binding in form VAR=VALUE and perform a set * * returns <0 error * >=0 ok */ int ftvar_pset(struct ftvar *ftvar, char *binding) { char *sm, *n, *v; int ret; ret = -1; /* preserve source string */ if (!(sm = (char*)malloc(strlen(binding)+1))) { fterr_warnx("malloc(%d)", strlen(binding)+1); return -1; } strcpy(sm, binding); for (v = sm; *v && (*v != '='); ++v); /* end of string reached? */ if (!*v) goto out; /* terminate name */ *v = 0; /* value is rest */ v++; /* name is start */ n = sm; ret = ftvar_set(ftvar, n, v); out: free(sm); return ret; } /* ftvar_pset */ /* * function: ftvar_set() * * Add or update variable name with value. * * returns <0 error * >=0 ok */ int ftvar_set(struct ftvar *ftvar, char *name, char *val) { struct ftvar_entry *ftve; int new; new = 0; if ((!*name) || (!name[0])) return -1; if ((!*val) || (!val[0])) return -1; /* if the entry exists then this is an update */ if ((ftve = ftvar_find(ftvar, name))) { free(ftve->val); ftve->val = (char*)0L; } else { new = 1; if (!(ftve = (struct ftvar_entry*)malloc(sizeof *ftve))) { fterr_warnx("malloc(ftve)"); return -1; } bzero(ftve, sizeof *ftve); if (!(ftve->name = (char*)malloc(strlen(name)+1))) { fterr_warnx("malloc(ftve->name)"); free(ftve); return -1; } strcpy(ftve->name, name); } /* always allocate the new value */ if (!(ftve->val = (char*)malloc(strlen(val)+1))) { fterr_warnx("malloc(ftve->val)"); free(ftve->name); free(ftve); return -1; } strcpy(ftve->val, val); if (new) FT_SLIST_INSERT_HEAD(&ftvar->entries, ftve, chain); return 0; } /* ftvar_set */ /* * function: ftvar_find() * * Find an entry by name * * returns entry or 0L if not found */ struct ftvar_entry *ftvar_find(struct ftvar *ftvar, char *name) { struct ftvar_entry *ftve; FT_SLIST_FOREACH(ftve, &ftvar->entries, chain) { if (!strcmp(ftve->name, name)) return ftve; } return (struct ftvar_entry*)0L; } /* ftvar_find */ /* * function: ftvar_clear() * * Clear/Remove a variable. Variables which are cleared that do not * exist will not produce an error. * */ void ftvar_clear(struct ftvar *ftvar, char *name) { struct ftvar_entry *ftve; if ((ftve = ftvar_find(ftvar, name))) { if (ftve->name) free(ftve->name); if (ftve->val) free(ftve->val); FT_SLIST_REMOVE(&ftvar->entries, ftve, ftvar_entry, chain); free(ftve); } } /* ftvar_clear */ /* * function: ftvar_evalstr() * * Perform variable substitution on string. Variables start with * @ and end with a non alphanumeric character, ie @TEST. * * If the variable set contains TEST=foo then the evaluated string * "This is a @TEST." will result in "This is a foo." * */ int ftvar_evalstr(struct ftvar *ftvar, char *src, char *dst, int dstlen) { struct ftvar_entry *ftve; char *s, *d, *v, *ve, *sm, *tmp; int len, ret, inbrace, x; char *vexp, *varname, *def; d = dst; len = 0; ret = -1; inbrace = 0; vexp = (char*)0L; sm = (char*)0L; def = (char*)0L; /* preserve source string */ if (!(sm = (char*)malloc(strlen(src)+1))) { fterr_warnx("ftvar: malloc(%d)", strlen(src)+1); return -1; } s = sm; strcpy(s, src); while (1) { /* end of source string? */ if (!*s) { ret = 0; goto done; } /* end of dst buf? */ if ((len+1) == dstlen) goto done; /* start of var? */ if (*s == '@') { /* variable starts after the @ */ v = ++s; /* end of variable initialized to start */ ve = v; /* is variable in a brace? yes then must end on a brace */ if (*v && (*v == '{')) { inbrace = 1; while (*ve && (*ve != '}')) ++ve; if (*ve != '}') fterr_errx(1, "ftvar: %s: Missing }", v); ++ve; /* else it ends on the first non alphanumeric char */ } else { while (*ve && isalnum(*ve)) ++ve; } /* copy out the variable expression, braces and all */ x = ve - v; if (!(vexp = (char*)malloc(x+1))) fterr_errx(1, "ftvar: malloc(%d)", x+1); strncpy(vexp, v, x); vexp[x] = 0; /* * either have form !inbrace VARIABLE * or * inbrace VARIABLE:-foo * * if it's the former can just proceed with substitution. * * The latter requires checking for the :, processing the * command (now only -) if the variable substitution fails * * there's also a special case of @{VAR} */ varname = vexp; if (inbrace) { /* skip over opening brace */ ++varname; /* find the first non alphanumeric */ tmp = varname; while (*tmp && isalnum(*tmp)) ++tmp; /* if its an end brace then done with special processing */ if (*tmp == '}') { *tmp = 0; goto skipspecial; } /* better be a : */ if (*tmp != ':') fterr_errx(1, "ftvar: %s: missing :", vexp); /* : to null so the variable name is null terminated */ *tmp++ = 0; /* only special type is - (default) */ if (*tmp != '-') fterr_errx(1, "ftvar: %s: expecting -", vexp); /* default expression is after the - */ def = ++tmp; /* drop the trailing } */ while (*tmp && *tmp != '}') ++tmp; *tmp = 0; } skipspecial: /* lookup var */ if ((ftve = ftvar_find(ftvar, varname))) tmp = ftve->val; /* found it, copy in the value */ else tmp = (def) ? def : (char*)0L; /* got a substitution */ if (tmp) while (*tmp && ((len+1) != dstlen)) d[len++] = *tmp++; /* end of dst buf? */ if ((len+1) == dstlen) goto done; /* skip variable name in original string */ s = ve; /* reset */ inbrace = 0; def = (char*)0L; if (vexp) free(vexp); vexp = (char*)0L; } else { d[len++] = *s++; /* no, copy */ /* end of dst buf? */ if ((len+1) == dstlen) goto done; } } ret = 0; done: dst[len] = 0; if (sm) free(sm); if (vexp) free(vexp); return ret; } /* ftvar_evalstr */ flow-tools-0.68/lib/ftxfield.c0000644000076600007660000001130107622602463011773 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftxfield.c,v 1.2 2003/02/13 02:38:43 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif struct ftxfield_table ftxfield_table[] = { {FT_XFIELD_ASC_UNIX_SECS, FT_XFIELD_UNIX_SECS}, {FT_XFIELD_ASC_UNIX_NSECS, FT_XFIELD_UNIX_NSECS}, {FT_XFIELD_ASC_SYSUPTIME, FT_XFIELD_SYSUPTIME}, {FT_XFIELD_ASC_EXADDR, FT_XFIELD_EXADDR}, {FT_XFIELD_ASC_DFLOWS, FT_XFIELD_DFLOWS}, {FT_XFIELD_ASC_DPKTS, FT_XFIELD_DPKTS}, {FT_XFIELD_ASC_DOCTETS, FT_XFIELD_DOCTETS}, {FT_XFIELD_ASC_FIRST, FT_XFIELD_FIRST}, {FT_XFIELD_ASC_LAST, FT_XFIELD_LAST}, {FT_XFIELD_ASC_ENGINE_TYPE, FT_XFIELD_ENGINE_TYPE}, {FT_XFIELD_ASC_ENGINE_ID, FT_XFIELD_ENGINE_ID}, {FT_XFIELD_ASC_SRCADDR, FT_XFIELD_SRCADDR}, {FT_XFIELD_ASC_DSTADDR, FT_XFIELD_DSTADDR}, {FT_XFIELD_ASC_NEXTHOP, FT_XFIELD_NEXTHOP}, {FT_XFIELD_ASC_INPUT, FT_XFIELD_INPUT}, {FT_XFIELD_ASC_OUTPUT, FT_XFIELD_OUTPUT}, {FT_XFIELD_ASC_SRCPORT, FT_XFIELD_SRCPORT}, {FT_XFIELD_ASC_DSTPORT, FT_XFIELD_DSTPORT}, {FT_XFIELD_ASC_PROT, FT_XFIELD_PROT}, {FT_XFIELD_ASC_TOS, FT_XFIELD_TOS}, {FT_XFIELD_ASC_TCP_FLAGS, FT_XFIELD_TCP_FLAGS}, {FT_XFIELD_ASC_SRC_MASK, FT_XFIELD_SRC_MASK}, {FT_XFIELD_ASC_DST_MASK, FT_XFIELD_DST_MASK}, {FT_XFIELD_ASC_SRC_AS, FT_XFIELD_SRC_AS}, {FT_XFIELD_ASC_DST_AS, FT_XFIELD_DST_AS}, {FT_XFIELD_ASC_IN_ENCAPS, FT_XFIELD_IN_ENCAPS}, {FT_XFIELD_ASC_OUT_ENCAPS, FT_XFIELD_OUT_ENCAPS}, {FT_XFIELD_ASC_PEER_NEXTHOP, FT_XFIELD_PEER_NEXTHOP}, {FT_XFIELD_ASC_ROUTER_SC, FT_XFIELD_ROUTER_SC}, {FT_XFIELD_ASC_MARKED_TOS, FT_XFIELD_MARKED_TOS}, {FT_XFIELD_ASC_EXTRA_PKTS, FT_XFIELD_EXTRA_PKTS}, {FT_XFIELD_ASC_SRC_TAG, FT_XFIELD_SRC_TAG}, {FT_XFIELD_ASC_DST_TAG, FT_XFIELD_DST_TAG}, {(char*)0L, 0LL}, }; /* * function: parse_xfield * * convert an ascii xfield representation to binary * * returns 0 ok * <0 fail */ int ftxfield_parse(char *line, u_int64 *xfields) { extern struct ftxfield_table ftxfield_table[]; char *c, *p, *save; int i, ret, match; ret = -1; *xfields = 0L; save = (char*)0L; /* make a local copy of the string since it will be modified */ if (!(p = malloc(strlen(line)+1))) { fterr_warnx("malloc()"); goto parse_xfield_out; } strcpy(p, line); c = save = p; while (c) { c = strsep(&p, ","); if (!c) break; for (i = match = 0; ftxfield_table[i].name; ++i) { if (!strcasecmp(c, ftxfield_table[i].name)) { /* implication other code can output the fields twice */ if (ftxfield_table[i].val & *xfields) { fterr_warnx("Duplicate field: %s", c); goto parse_xfield_out; } /* * specifying these out of order implies they would be displayed as * such which is not the case. */ if (ftxfield_table[i].val < *xfields) { fterr_warnx("Out of order field: %s", c); goto parse_xfield_out; } *xfields |= ftxfield_table[i].val; match = 1; break; } } /* for */ if (!match) { fterr_warnx("Unrecognized field: %s", c); goto parse_xfield_out; } } /* while */ ret = 0; parse_xfield_out: if (save) free(save); return ret; } /* ftxfield_parse */ flow-tools-0.68/lib/ftxlate.c0000644000076600007660000015447710240410262011643 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: ftxlate.c,v 1.6 2005/05/11 14:03:30 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #ifdef HAVE_OPENSSL #define free_func ssl_free_func /* hack, zlib uses free_func also */ #include #include #undef free_func #endif /* HAVE_OPENSSL */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif struct cryptopan { u_int8_t m_key[16]; /* 128 bit secret key */ u_int8_t m_pad[16]; /* 128 bit secret pad */ #ifdef HAVE_OPENSSL EVP_CIPHER_CTX *cipher_ctx; /* openssl cipher context */ #endif /* HAVE_OPENSSL */ }; static int cryptopan_anon(struct cryptopan *cp, u_int32_t orig_addr, u_int32_t *new_addr); static int cryptopan_free(struct cryptopan *cp); static int cryptopan_init(struct cryptopan *cp, unsigned char *key); static int load_key_file(char *fname, unsigned char *key); struct line_parser { struct ftxlate_action *cur_action; struct ftxlate_def *cur_def; struct ftxlate_def_term *cur_def_term; int state, type; int lineno; char *buf, *fname, *word; }; #define FT_XLATE_TYPE_IP_SRC_ADDR2NET 0x1 #define FT_XLATE_TYPE_IP_DST_ADDR2NET 0x2 #define FT_XLATE_TYPE_IP_SRC_ADDR2CNET 0x3 #define FT_XLATE_TYPE_IP_DST_ADDR2CNET 0x4 #define FT_XLATE_TYPE_IP_ADDR_PRIV_MASK 0x5 #define FT_XLATE_TYPE_TAG_MASK 0x6 #define FT_XLATE_TYPE_SCALE 0x7 #define FT_XLATE_TYPE_SRC_AS 0x8 #define FT_XLATE_TYPE_DST_AS 0x9 #define FT_XLATE_TYPE_IP_PORT_PRIV_MASK 0xA #define FT_XLATE_TYPE_IP_ADDR_ANON 0xB #define FT_XLATE_TYPE_IP_SRC_ADDR_ANON 0xC #define FT_XLATE_TYPE_IP_DST_ADDR_ANON 0xD #define FT_XLATE_FLAG_STOP 0x1 #define FT_XLATE_ALG_CRYPTOPAN_AES128 0x1 struct ftxlate_action { FT_SLIST_ENTRY(ftxlate_action) chain; /* list of all actions */ int type; /* FT_XLATE_TYPE_MATCH_* */ char *name; void *action; void (*eval)(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); u_int64 xfields; }; struct ftxlate_def_term { FT_STAILQ_ENTRY(ftxlate_def_term) chain; /* list of terms */ FT_STAILQ_HEAD(xactdhead, ftxlate_def_term_actions) actions; /* actions */ int type; /* FT_XLATE_TYPE_MATCH_* */ struct ftfil_def *ftfd; /* filter definition */ int flags; u_int64 xfields; }; struct ftxlate_def_term_actions { FT_STAILQ_ENTRY(ftxlate_def_term_actions) chain; /* all actions */ struct ftxlate_action *action; /* filled in by resolve_actions */ char *name; /* temporary, invalid after config file is closed */ }; struct ftxlate_def { FT_SLIST_ENTRY(ftxlate_def) chain; FT_STAILQ_HEAD(xdthead, ftxlate_def_term) terms; /* terms */ char *name; u_int64 xfields; }; struct ftxlate_act_scale { int scale; }; struct ftxlate_act_asn { u_int16 as; }; struct ftxlate_act_tag_mask { u_int32 src_mask; u_int32 dst_mask; }; struct ftxlate_act_ip_addr_priv_mask { u_int32 src_mask; u_int32 dst_mask; }; struct ftxlate_act_ip_port_priv_mask { u_int16 src_mask; u_int16 dst_mask; }; struct ftxlate_act_ip_addr_anon { int init; int algorithm; /* algorithm - cryptopan only for now */ char *key_fname; /* file containing a key, null if not used */ char key[32]; /* key */ time_t key_refresh_next; /* next key refresh */ time_t key_refresh_interval; /* key refresh check rate */ struct cryptopan cp; /* cryptopan context */ }; static int parse_action(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_type(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_mask(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_scale(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_asn(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_algorithm(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_key(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_key_file(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_action_key_refresh(struct line_parser *lp, struct ftxlate *ftxlate); static int decode_hex(char *in, int in_len, unsigned char *out, int out_len); static int parse_def(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_def_term(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_def_filter(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_def_action(struct line_parser *lp, struct ftxlate *ftxlate); static int parse_def_stop(struct line_parser *lp, struct ftxlate *ftxlate); static int resolve_actions(struct ftxlate *ftxlate); static int parse_include_filter(struct line_parser *lp, struct ftxlate *ftxlate); static int load_filters(struct ftxlate *ftxlate); static void eval_ip_src_addr2net(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_dst_addr2net(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_src_addr2cnet(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_dst_addr2cnet(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_addr_privacy_mask(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_port_privacy_mask(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_scale(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_tag_mask(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_src_asn(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_dst_asn(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_src_addr_anon(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_dst_addr_anon(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); static void eval_ip_addr_anon(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo); #define PARSE_STATE_ACTION 0x1 #define PARSE_STATE_DEFINITION 0x2 #define NEXT_WORD(A,B)\ for (;;) {\ B = strsep(A, " \t");\ if ((B && *B != 0) || (!B))\ break;\ }\ struct jump { char *name; int state; int (*func)(struct line_parser *lp, struct ftxlate *ftxlate); }; static struct jump pjump[] = { {"include-filter", 0, parse_include_filter}, {"xlate-action", 0, parse_action}, {"type", PARSE_STATE_ACTION, parse_action_type}, {"mask", PARSE_STATE_ACTION, parse_action_mask}, {"scale", PARSE_STATE_ACTION, parse_action_scale}, {"as", PARSE_STATE_ACTION, parse_action_asn}, {"key", PARSE_STATE_ACTION, parse_action_key}, {"key-file", PARSE_STATE_ACTION, parse_action_key_file}, {"key-file-refresh", PARSE_STATE_ACTION, parse_action_key_refresh}, {"algorithm", PARSE_STATE_ACTION, parse_action_algorithm}, {"xlate-definition", 0, parse_def}, {"term", PARSE_STATE_DEFINITION, parse_def_term}, {"filter", PARSE_STATE_DEFINITION, parse_def_filter}, {"stop", PARSE_STATE_DEFINITION, parse_def_stop}, {"action", PARSE_STATE_DEFINITION, parse_def_action}, {0, 0, 0}, }; /* * data structures: * * * ftxlate holds the head pointers to a list of actions, and definitions. * * Each definition holds a list of terms. A term is a combination of * a filter and a list of actions * * struct ftxlate_def : linked list of definitions * struct ftxlate_action : linked list of actions * struct ftxlate_def_term : each term in a definition * struct ftxlate_def_term_actions : each action in a term * * actions contain one of the following: * - note for some actions no additional data is required and action * will be null * * struct ftxlate_act_scale : scale * struct ftxlate_act_tag_mask : source and destination tag mask * struct ftxlate_act_priv_mask : source and destination privacy mask * struct ftxlate_port_priv_mask : source and destination privacy mask * struct ftxlate_act_asn : replacement ASN * * */ /* * function: ftxlate_load * * Process fname into ftxlate. * * returns: 0 ok * <0 fail */ int ftxlate_load(struct ftxlate *ftxlate, struct ftvar *ftvar, char *fname) { struct stat sb; struct jump *jmp; struct line_parser lp; int fd, ret, found; char *buf, *buf2, *c; char sbuf[FT_LP_MAXLINE]; ret = -1; buf = (char*)0L; bzero(&lp, sizeof lp); bzero(ftxlate, sizeof *ftxlate); FT_SLIST_INIT(&ftxlate->defs); FT_SLIST_INIT(&ftxlate->actions); lp.fname = fname; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto load_xlate_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto load_xlate_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto load_xlate_out; } /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(%s): short", fname); goto load_xlate_out; } /* null terminate file */ buf[sb.st_size] = 0; buf2 = buf; for (;;) { /* rip a line */ for (;;) { c = strsep(&buf2, "\n"); ++lp.lineno; if ((c && *c != 0) || (!c)) break; } /* no more lines */ if (!c) { goto load_xlate_done; } /* do variable substitutions first */ if (ftvar) { if (ftvar_evalstr(ftvar, c, sbuf, sizeof(sbuf)) < 0) { fterr_warnx("ftvar_evalstr(): failed"); goto load_xlate_done; } } else { strncpy(sbuf, c, sizeof(sbuf)); sbuf[sizeof(sbuf)-1] = 0; } lp.buf = sbuf; /* first word */ NEXT_WORD(&lp.buf, c); /* whitespace only line */ if (!c) { continue; } /* comment line */ if (c && *c == '#') continue; for (jmp = pjump; jmp->name; ++jmp) { found = 0; if (((!jmp->state) || (jmp->state & lp.state)) && (!strcasecmp(c, jmp->name))) { found = 1; if (jmp->func(&lp, ftxlate)) goto load_xlate_out; NEXT_WORD(&lp.buf, c); if (c) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_xlate_out; } break; } } /* test each word */ if (!found) { fterr_warnx("%s line %d: Unexpected \"%s\".", lp.fname, lp.lineno, c); goto load_xlate_out; } } /* more lines */ load_xlate_done: if (resolve_actions(ftxlate)) goto load_xlate_out; ret = 0; load_xlate_out: if (fd != -1) close(fd); if (buf) free(buf); if (ret == -1) ftxlate_free(ftxlate); return ret; } /* ftxlate_load */ /* * function: ftxlate_defintion_find * * Return a pointer to a ftxlate_def_actionup for use later with * ftxlate_def_eval * */ struct ftxlate_def *ftxlate_def_find(struct ftxlate *ftxlate, char *name) { struct ftxlate_def *ftx; /* foreach definition */ FT_SLIST_FOREACH(ftx, &ftxlate->defs, chain) { if (!(strcasecmp(ftx->name, name))) return ftx; } return (struct ftxlate_def*)0L; } /* ftxlate_def_find */ /* * function: ftxlate_def_test_xfields * * Check if fields in current flow are valid for a xlate definition -- ie * the definition does not reference a field not contained in the flow. * * returns: 0 okay * 1 fail */ int ftxlate_def_test_xfields(struct ftxlate_def *active_def, u_int64 test) { if ((active_def->xfields & test) != active_def->xfields) return 1; else return 0; } /* ftxlate_def_test_xfields */ /* * function: ftxlate_free * * free resources allocated by ftxlate_load() * */ void ftxlate_free(struct ftxlate *ftxlate) { struct ftxlate_action *ftxa; struct ftxlate_def *ftx; struct ftxlate_def_term *ftxt; struct ftxlate_def_term_actions *ftxta; struct ftxlate_act_ip_addr_anon *ftxiaa; if (ftxlate->ftfil_init) ftfil_free(&ftxlate->ftfil); if (ftxlate->filter_fname) free(ftxlate->filter_fname); /* foreach action, remove the action and associated storge */ while (!FT_SLIST_EMPTY(&ftxlate->actions)) { ftxa = FT_SLIST_FIRST(&ftxlate->actions); FT_SLIST_REMOVE_HEAD(&ftxlate->actions, chain); if (ftxa->action) { /* *_ANON allocated internal resources */ if ((ftxa->type == FT_XLATE_TYPE_IP_ADDR_ANON) || (ftxa->type == FT_XLATE_TYPE_IP_SRC_ADDR_ANON) || (ftxa->type == FT_XLATE_TYPE_IP_DST_ADDR_ANON)) { ftxiaa = ftxa->action; if (ftxiaa->key_fname) free(ftxiaa->key_fname); if (ftxiaa->init) cryptopan_free(&ftxiaa->cp); } /* type *_ANON */ free(ftxa->action); } free(ftxa->name); free(ftxa); } /* while */ /* foreach definition, remove the definition and associated storage */ while (!FT_SLIST_EMPTY(&ftxlate->defs)) { ftx = FT_SLIST_FIRST(&ftxlate->defs); FT_SLIST_REMOVE_HEAD(&ftxlate->defs, chain); /* foreach term in the definition */ while (!FT_STAILQ_EMPTY(&ftx->terms)) { ftxt = FT_STAILQ_FIRST(&ftx->terms); while (!FT_STAILQ_EMPTY(&ftxt->actions)) { ftxta = FT_STAILQ_FIRST(&ftxt->actions); if (ftxta->name) free(ftxta->name); FT_STAILQ_REMOVE_HEAD(&ftxt->actions, chain); free(ftxta); } FT_STAILQ_REMOVE_HEAD(&ftx->terms, chain); free (ftxt); } free(ftx->name); free(ftx); } /* while */ } /* ftxlate_free */ /* * function: ftxlate_def_eval * * perform tag actions on a flow * * run down each term in the definition * evaluate the filter, if okay * run every action * * the filter is activated by * FT_TAG_DEF_FILTER_INPUT - check input * FT_TAG_DEF_FILTER_OUTPUT check output * FT_TAG_DEF_FILTER_EXPORTER check exporter * * * returns 0 */ int ftxlate_def_eval(struct ftxlate_def *ftx, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_def_term *ftxt; struct ftxlate_def_term_actions *ftxta; struct ftxlate_action *ftxa; int fpermit, stop; /* early termination? */ stop = 0; /* foreach term in the definition */ FT_STAILQ_FOREACH(ftxt, &ftx->terms, chain) { /* * if the filter allows this flow then call the xlate evaluation, else * leave it alone. */ /* this filter did not permit an action */ fpermit = 0; if (ftxt->ftfd && ftfil_def_eval(ftxt->ftfd, rec, fo) == FT_FIL_MODE_DENY) continue; else fpermit = 1; /* stop after this term? */ if (fpermit && (ftxt->flags & FT_XLATE_FLAG_STOP)) stop = 1; /* for every action chained to this term */ FT_STAILQ_FOREACH(ftxta, &ftxt->actions, chain) { /* the action */ ftxa = ftxta->action; /* based on the type do the action if a match is made */ ftxa->eval(ftxa, rec, fo); } /* foreach action references by the term */ /* early termination due to stop keyword? */ if (stop) break; } /* foreach term */ return 0; } /* ftxlate_def_eval */ /* * function: parse_action * * process the 'action' line. Each action has a unique name which * is added to the ftxlate->actions linked list. The current action is * updated in lp. Actions by themself do nothing, they must be pointed * to by a definition. * * returns: 0 ok * <0 fail */ int parse_action(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_action *ftxa; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftxa, &ftxlate->actions, chain) { if (!strcasecmp(lp->word, ftxa->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, lp->word); return -1; } } /* no, add a new entry to the list */ if (!(ftxa = (struct ftxlate_action*)malloc(sizeof (struct ftxlate_action)))) { fterr_warn("malloc()"); return -1; } bzero(ftxa, sizeof *ftxa); if (!(ftxa->name = (char*)malloc(strlen(lp->word)+1))) { fterr_warn("malloc()"); free(ftxa); return -1; } strcpy(ftxa->name, lp->word); FT_SLIST_INSERT_HEAD(&ftxlate->actions, ftxa, chain); lp->state = PARSE_STATE_ACTION; lp->cur_action = ftxa; return 0; } /* parse_action */ /* * function: parse_action_type * * process the 'type' line. When the type is set the initial storage * is allocated if necessary. * * returns: 0 ok * <0 fail */ int parse_action_type(struct line_parser *lp, struct ftxlate *ftxlate) { if (!lp->cur_action) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting type.", lp->fname, lp->lineno); return -1; } if (lp->cur_action->type) { fterr_warnx("%s line %d: Type previously defined.", lp->fname, lp->lineno); return -1; } if (!strcasecmp(lp->word, "ip-source-address-to-network")) { lp->cur_action->type = FT_XLATE_TYPE_IP_SRC_ADDR2NET; lp->cur_action->eval = eval_ip_src_addr2net; lp->cur_action->xfields |= (FT_XFIELD_SRCADDR|FT_XFIELD_SRC_MASK); } else if (!strcasecmp(lp->word, "ip-destination-address-to-network")) { lp->cur_action->type = FT_XLATE_TYPE_IP_DST_ADDR2NET; lp->cur_action->eval = eval_ip_dst_addr2net; lp->cur_action->xfields |= (FT_XFIELD_DSTADDR|FT_XFIELD_DST_MASK); } else if (!strcasecmp(lp->word, "ip-source-address-to-class-network")) { lp->cur_action->type = FT_XLATE_TYPE_IP_SRC_ADDR2CNET; lp->cur_action->eval = eval_ip_src_addr2cnet; lp->cur_action->xfields |= FT_XFIELD_SRCADDR; } else if (!strcasecmp(lp->word, "ip-destination-address-to-class-network")) { lp->cur_action->type = FT_XLATE_TYPE_IP_DST_ADDR2CNET; lp->cur_action->eval = eval_ip_dst_addr2cnet; lp->cur_action->xfields |= FT_XFIELD_DSTADDR; } else if (!strcasecmp(lp->word, "ip-address-privacy-mask")) { lp->cur_action->type = FT_XLATE_TYPE_IP_ADDR_PRIV_MASK; lp->cur_action->eval = eval_ip_addr_privacy_mask; lp->cur_action->xfields |= (FT_XFIELD_DSTADDR|FT_XFIELD_SRCADDR); } else if (!strcasecmp(lp->word, "ip-port-privacy-mask")) { lp->cur_action->type = FT_XLATE_TYPE_IP_PORT_PRIV_MASK; lp->cur_action->eval = eval_ip_port_privacy_mask; lp->cur_action->xfields |= (FT_XFIELD_DSTPORT|FT_XFIELD_SRCPORT); } else if (!strcasecmp(lp->word, "scale")) { lp->cur_action->type = FT_XLATE_TYPE_SCALE; lp->cur_action->eval = eval_scale; lp->cur_action->xfields |= (FT_XFIELD_DPKTS|FT_XFIELD_DOCTETS); } else if (!strcasecmp(lp->word, "tag-mask")) { lp->cur_action->type = FT_XLATE_TYPE_TAG_MASK; lp->cur_action->eval = eval_tag_mask; lp->cur_action->xfields |= (FT_XFIELD_SRC_TAG|FT_XFIELD_DST_TAG); } else if (!strcasecmp(lp->word, "replace-source-as0")) { lp->cur_action->type = FT_XLATE_TYPE_SRC_AS; lp->cur_action->eval = eval_src_asn; lp->cur_action->xfields |= FT_XFIELD_SRC_AS; } else if (!strcasecmp(lp->word, "replace-destination-as0")) { lp->cur_action->type = FT_XLATE_TYPE_DST_AS; lp->cur_action->eval = eval_dst_asn; lp->cur_action->xfields |= FT_XFIELD_DST_AS; } else if (!strcasecmp(lp->word, "ip-source-address-anonymize")) { lp->cur_action->type = FT_XLATE_TYPE_IP_SRC_ADDR_ANON; lp->cur_action->eval = eval_ip_src_addr_anon; lp->cur_action->xfields |= FT_XFIELD_SRCADDR; } else if (!strcasecmp(lp->word, "ip-destination-address-anonymize")) { lp->cur_action->type = FT_XLATE_TYPE_IP_DST_ADDR_ANON; lp->cur_action->eval = eval_ip_dst_addr_anon; lp->cur_action->xfields |= FT_XFIELD_DSTADDR; } else if (!strcasecmp(lp->word, "ip-address-anonymize")) { lp->cur_action->type = FT_XLATE_TYPE_IP_ADDR_ANON; lp->cur_action->eval = eval_ip_addr_anon; lp->cur_action->xfields |= (FT_XFIELD_SRCADDR|FT_XFIELD_DSTADDR); } else { fterr_warnx("%s line %d: Unrecognized type.", lp->fname, lp->lineno); return -1; } /* allocate storage for action if required */ if ((lp->cur_action->type == FT_XLATE_TYPE_IP_ADDR_PRIV_MASK)) { if (!(lp->cur_action->action = malloc(sizeof (struct ftxlate_act_ip_addr_priv_mask)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->action, sizeof (struct ftxlate_act_ip_addr_priv_mask)); } else if ((lp->cur_action->type == FT_XLATE_TYPE_IP_PORT_PRIV_MASK)) { if (!(lp->cur_action->action = malloc(sizeof (struct ftxlate_act_ip_port_priv_mask)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->action, sizeof (struct ftxlate_act_ip_port_priv_mask)); } else if (lp->cur_action->type == FT_XLATE_TYPE_TAG_MASK) { if (!(lp->cur_action->action = malloc(sizeof (struct ftxlate_act_tag_mask)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->action, sizeof (struct ftxlate_act_tag_mask)); } else if (lp->cur_action->type == FT_XLATE_TYPE_SCALE) { if (!(lp->cur_action->action = malloc(sizeof (struct ftxlate_act_scale)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->action, sizeof (struct ftxlate_act_scale)); } else if ((lp->cur_action->type == FT_XLATE_TYPE_SRC_AS) || (lp->cur_action->type == FT_XLATE_TYPE_DST_AS)) { if (!(lp->cur_action->action = malloc(sizeof (struct ftxlate_act_asn)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->action, sizeof (struct ftxlate_act_asn)); } else if ((lp->cur_action->type == FT_XLATE_TYPE_IP_SRC_ADDR_ANON) || (lp->cur_action->type == FT_XLATE_TYPE_IP_ADDR_ANON) || (lp->cur_action->type == FT_XLATE_TYPE_IP_DST_ADDR_ANON)) { if (!(lp->cur_action->action = malloc(sizeof (struct ftxlate_act_ip_addr_anon)))) { fterr_warn("malloc()"); return -1; } bzero(lp->cur_action->action, sizeof (struct ftxlate_act_ip_addr_anon)); } return 0; } /* parse_action_type */ /* * function: parse_action_mask * * process the 'mask' line in an action. Handles the tag-mask * ip-address-privacy-mask and port-number-privacy-mask actions. * * returns: 0 ok * <0 fail */ int parse_action_mask(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_act_tag_mask *ftxatm; struct ftxlate_act_ip_addr_priv_mask *ftxaiapm; struct ftxlate_act_ip_port_priv_mask *ftxaippm; u_int32 src_mask, dst_mask; char *src_maskc, *dst_maskc; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } if ((lp->cur_action->type != FT_XLATE_TYPE_IP_ADDR_PRIV_MASK) && (lp->cur_action->type != FT_XLATE_TYPE_TAG_MASK) && (lp->cur_action->type != FT_XLATE_TYPE_IP_PORT_PRIV_MASK)) { fterr_warnx("%s line %d: Illegal keyword.", lp->fname, lp->lineno); return -1; } ftxatm = lp->cur_action->action; ftxaiapm = lp->cur_action->action; ftxaippm = lp->cur_action->action; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting source mask.", lp->fname, lp->lineno); return -1; } src_maskc = lp->word; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting destination mask.", lp->fname, lp->lineno); return -1; } dst_maskc = lp->word; src_mask = strtoull(src_maskc, (char**)0L, 0); dst_mask = strtoull(dst_maskc, (char**)0L, 0); if (lp->cur_action->type == FT_XLATE_TYPE_TAG_MASK) { ftxatm->src_mask = src_mask; ftxatm->dst_mask = dst_mask; } else if (lp->cur_action->type == FT_XLATE_TYPE_IP_ADDR_PRIV_MASK) { ftxaiapm->src_mask = src_mask; ftxaiapm->dst_mask = dst_mask; } else if (lp->cur_action->type == FT_XLATE_TYPE_IP_PORT_PRIV_MASK) { ftxaippm->src_mask = src_mask; ftxaippm->dst_mask = dst_mask; } else { fterr_errx(1, "parse_action_match(): internal error"); } return 0; } /* parse_action_mask */ /* * function: parse_action_scale * * process the 'scale' line in an action. * * returns: 0 ok * <0 fail */ int parse_action_scale(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_act_scale *ftxs; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } if (lp->cur_action->type != FT_XLATE_TYPE_SCALE) { fterr_warnx("%s line %d: Illegal keyword.", lp->fname, lp->lineno); return -1; } ftxs = lp->cur_action->action; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting scale.", lp->fname, lp->lineno); return -1; } ftxs->scale = atoi(lp->word); return 0; } /* parse_action_scale */ /* * function: parse_action_asn * * process the 'as' line in an action. * * returns: 0 ok * <0 fail */ int parse_action_asn(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_act_asn *ftxasn; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } if ((lp->cur_action->type != FT_XLATE_TYPE_SRC_AS) && (lp->cur_action->type != FT_XLATE_TYPE_DST_AS)) { fterr_warnx("%s line %d: Illegal keyword.", lp->fname, lp->lineno); return -1; } ftxasn = lp->cur_action->action; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting AS.", lp->fname, lp->lineno); return -1; } ftxasn->as = atoi(lp->word); return 0; } /* parse_action_asn */ /* * function: parse_action_key * * process the 'key' line in an action. * * returns: 0 ok * <0 fail */ int parse_action_key(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_act_ip_addr_anon *ftxiaa; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } if ((lp->cur_action->type != FT_XLATE_TYPE_IP_ADDR_ANON) && (lp->cur_action->type != FT_XLATE_TYPE_IP_SRC_ADDR_ANON) && (lp->cur_action->type != FT_XLATE_TYPE_IP_DST_ADDR_ANON)) { fterr_warnx("%s line %d: Illegal keyword.", lp->fname, lp->lineno); return -1; } ftxiaa = lp->cur_action->action; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting Key.", lp->fname, lp->lineno); return -1; } if (decode_hex(lp->word, 64, ftxiaa->key, 32) < 0) { fterr_warnx("%s line %d: decode_hex() failed.", lp->fname, lp->lineno); return -1; } return 0; } /* parse_action_key */ /* * function: parse_action_key_file * * process the 'key-file' line in an action. * * returns: 0 ok * <0 fail */ int parse_action_key_file(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_act_ip_addr_anon *ftxiaa; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } ftxiaa = lp->cur_action->action; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting key-file.", lp->fname, lp->lineno); return -1; } if (!(ftxiaa->key_fname = (char*)malloc(strlen(lp->word)+1))) { fterr_warn("malloc()"); return -1; } strcpy(ftxiaa->key_fname, lp->word); if (load_key_file(ftxiaa->key_fname, (char*)&ftxiaa->key) < 0) { fterr_warnx("Failed to load key from %s.", ftxiaa->key_fname); } return 0; } /* parse_action_key_file */ /* * function: parse_action_algorithm * * process the 'algorithm' line in an action. * * returns: 0 ok * <0 fail */ int parse_action_algorithm(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_act_ip_addr_anon *ftxiaa; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } ftxiaa = lp->cur_action->action; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting algorithm.", lp->fname, lp->lineno); return -1; } #ifdef HAVE_OPENSSL if (strcasecmp(lp->word, "cryptopan-aes128")) { fterr_warnx("%s line %d: Expecting CryptoPAn-aes128", lp->fname, lp->lineno); return -1; } #else fterr_warnx("%s line %d: OpenSSL not compiled in.", lp->fname, lp->lineno); return -1; #endif /* HAVE_OPENSSL */ ftxiaa->algorithm = FT_XLATE_ALG_CRYPTOPAN_AES128; return 0; } /* parse_action_algorithm */ /* * function: parse_action_key_refresh * * process the 'key-refresh' line in an action. * * returns: 0 ok * <0 fail */ int parse_action_key_refresh(struct line_parser *lp, struct ftxlate *ftxlate) { time_t now, t1; struct tm *tm; struct ftxlate_act_ip_addr_anon *ftxiaa; char *c; int hour, min, sec, interval; if (!lp->cur_action->type) { fterr_warnx("%s line %d: Must set type first.", lp->fname, lp->lineno); return -1; } ftxiaa = lp->cur_action->action; /* key-refresh interval start-time */ NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting interval.", lp->fname, lp->lineno); return -1; } interval = ftxiaa->key_refresh_interval = atoi(lp->word); NEXT_WORD(&lp->buf, lp->word); /* parse out time */ hour = min = sec = 0; if (!(c = strsep(&lp->word, ":"))) goto done; hour = atoi(c); if (!(c = strsep(&lp->word, ":"))) goto done; min = atoi(c); if (!(c = strsep(&lp->word, ":"))) goto done; sec = atoi(c); if (lp->word) { fterr_warnx("%s line %d: Unexpected text: %s", lp->fname, lp->lineno, lp->word); return -1; } done: now = time((time_t)0L); tm = localtime(&now); /* calculate start time based on user input? */ if (hour|min|sec) { tm->tm_hour = hour; tm->tm_min = min; tm->tm_sec = sec; t1 = mktime(tm); /* start time is always in the future */ if (t1 < now) t1 += 86400; /* else it's on next interval minutes */ } else { tm->tm_min = (tm->tm_min / interval)*interval + interval; tm->tm_sec = 0; if (tm->tm_min >= 60) tm->tm_min -= 60; t1 = mktime(tm); /* start time is always in the future */ if (t1 < now) t1 += 3600; /* minute rollover */ } ftxiaa->key_refresh_next = t1; fterr_info("cryptopan key refresh at %lu.", ftxiaa->key_refresh_next); return 0; } /* parse_action_key_refresh */ /* * function: parse_def * * process the 'definition' line. Each definition has a unique name which * is added to the ftxlate->defs linked list. The current definition is * updated in lp. * * returns: 0 ok * <0 fail */ int parse_def(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_def *ftx; NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting name.", lp->fname, lp->lineno); return -1; } /* check if it exists */ FT_SLIST_FOREACH(ftx, &ftxlate->defs, chain) { if (!strcasecmp(lp->word, ftx->name)) { fterr_warnx("%s line %d: Name (%s) previously defined.", lp->fname, lp->lineno, lp->word); return -1; } } /* no, add a new entry to the list */ if (!(ftx = (struct ftxlate_def*)malloc(sizeof (struct ftxlate_def)))) { fterr_warn("malloc()"); return -1; } bzero(ftx, sizeof *ftx); FT_STAILQ_INIT(&ftx->terms); if (!(ftx->name = (char*)malloc(strlen(lp->word)+1))) { fterr_warn("malloc()"); free(ftx); return -1; } strcpy(ftx->name, lp->word); FT_SLIST_INSERT_HEAD(&ftxlate->defs, ftx, chain); lp->state = PARSE_STATE_DEFINITION; lp->cur_def = ftx; lp->cur_def_term = ( struct ftxlate_def_term*)0L; return 0; } /* parse_def */ /* * function: parse_def_term * * process the term line. Each definition has a list of terms, the * terms have a common input, output, and exporter IP filter and * may have one or more actions. Without an action a term has * no purpose. * * returns: 0 ok * <0 fail */ int parse_def_term(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_def_term *ftxt; if (!lp->cur_def) { fterr_warnx("%s line %d: Must set name first.", lp->fname, lp->lineno); return -1; } /* no, add a new term entry to this definition */ if (!(ftxt = (struct ftxlate_def_term*)malloc(sizeof *ftxt))) { fterr_warn("malloc()"); return -1; } bzero(ftxt, sizeof *ftxt); FT_STAILQ_INIT(&ftxt->actions); FT_STAILQ_INSERT_TAIL(&lp->cur_def->terms, ftxt, chain); lp->cur_def_term = ftxt; return 0; } /* parse_def_term */ /* * function: parse_def_stop * * process the stop line. When the filter for this term matches * and a 'stop' is defined no further actions are performed. * * returns: 0 ok * <0 fail */ int parse_def_stop(struct line_parser *lp, struct ftxlate *ftxlate) { if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } lp->cur_def_term->flags |= FT_XLATE_FLAG_STOP; return 0; } /* parse_def_term */ /* * function: parse_def_filter * * process the 'filter' line. * * returns: 0 ok * <0 fail */ int parse_def_filter(struct line_parser *lp, struct ftxlate *ftxlate) { if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting filter name.", lp->fname, lp->lineno); return -1; } if (lp->cur_def_term->ftfd) { fterr_warnx("%s line %d: Filter previously defined for term.", lp->fname, lp->lineno); return -1; } /* delay loading the filters until one is requested */ if (load_filters(ftxlate)) { fterr_warnx("%s line %d: Filters not loaded.", lp->fname, lp->lineno); return -1; } if (!(lp->cur_def_term->ftfd = ftfil_def_find(&ftxlate->ftfil, lp->word))) { fterr_warnx("%s line %d: Filter definition not found.", lp->fname, lp->lineno); return -1; } /* any fields referenced in the filter are now required for the xlate */ lp->cur_def->xfields |= lp->cur_def_term->ftfd->xfields; return 0; } /* parse_def_filter */ /* * function: parse_def_action * * foreach action listed, add it to a linked list of actions for the * definition. Note resolve_actions() must be called before the actions * are valid. * * returns: 0 ok * <0 fail */ int parse_def_action(struct line_parser *lp, struct ftxlate *ftxlate) { struct ftxlate_def_term_actions *ftxta; if (!lp->cur_def_term) { fterr_warnx("%s line %d: Must start term.", lp->fname, lp->lineno); return -1; } NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting action.", lp->fname, lp->lineno); return -1; } /* add a new entry to the list */ if (!(ftxta = (struct ftxlate_def_term_actions*)malloc(sizeof *ftxta))) { fterr_warn("malloc()"); return -1; } bzero(ftxta, sizeof *ftxta); if (!(ftxta->name = (char*)malloc(strlen(lp->word)+1))) { fterr_warn("malloc()"); free(ftxta); return -1; } strcpy(ftxta->name, lp->word); FT_STAILQ_INSERT_TAIL(&lp->cur_def_term->actions, ftxta, chain); /* resolve the ftxta->action later in resolve_actions */ return 0; } /* parse_def_action */ /* * function: parse_include_filter * * process the 'include-filter' line. Allow the default filter location * to be changed. * * returns: 0 ok * <0 fail */ int parse_include_filter(struct line_parser *lp, struct ftxlate *ftxlate) { NEXT_WORD(&lp->buf, lp->word); if (!lp->word) { fterr_warnx("%s line %d: Expecting pathname.", lp->fname, lp->lineno); return -1; } if (ftxlate->filter_fname) { fterr_warnx("%s line %d: Filter pathname previously specified.", lp->fname, lp->lineno); return -1; } if (!(ftxlate->filter_fname = (char*)malloc(strlen(lp->word)+1))) { fterr_warn("malloc()"); return -1; } strcpy(ftxlate->filter_fname, lp->word); return 0; } /* parse_include_filter */ /* * function: resolve_actions * * The parser points to the name of the action in the definition to allow * for definitions to be defined before actions in the config file. This * fixes the pointers so the definitions point to the actions * * returns: 0 ok * <0 fail (an action could not be resolved) */ int resolve_actions(struct ftxlate *ftxlate) { struct ftxlate_def *ftx; struct ftxlate_def_term *ftxt; struct ftxlate_def_term_actions *ftxta; struct ftxlate_action *ftxa; struct ftxlate_act_ip_addr_anon *ftxiaa; int i, found; /* foreach action do any additional initialization */ FT_SLIST_FOREACH(ftxa, &ftxlate->actions, chain) { /* *_ANON types need some extra work */ if ((ftxa->type == FT_XLATE_TYPE_IP_ADDR_ANON) || (ftxa->type == FT_XLATE_TYPE_IP_SRC_ADDR_ANON) || (ftxa->type == FT_XLATE_TYPE_IP_DST_ADDR_ANON)) { ftxiaa = ftxa->action; /* only supported alg is cryptopan-eas128 */ if (ftxiaa->algorithm != FT_XLATE_ALG_CRYPTOPAN_AES128) { fterr_warnx("Action %s: unknown anonymization algorithm", ftxa->name); return -1; } /* check for key of all 0's */ found = 0; for (i = 0; i < 32; ++i) if (ftxiaa->key[i] != 0) found = 1; if (found == 0) { fterr_warnx("Action %s: uninitialized key.", ftxa->name); return -1; } /* initialize cryptopan */ if (cryptopan_init(&ftxiaa->cp, ftxiaa->key) < 0) { fterr_warnx("Action %s: cryptopan_init() failed.", ftxa->name); return -1; } ftxiaa->init = 1; } /* *_ANON work */ } /* foreach definition */ FT_SLIST_FOREACH(ftx, &ftxlate->defs, chain) { /* foreach term in the definition */ FT_STAILQ_FOREACH(ftxt, &ftx->terms, chain) { /* foreach action in the term */ FT_STAILQ_FOREACH(ftxta, &ftxt->actions, chain) { found = 0; /* foreach action */ FT_SLIST_FOREACH(ftxa, &ftxlate->actions, chain) { if (!(strcasecmp(ftxa->name, ftxta->name))) { ftxta->action = ftxa; ftx->xfields |= ftxa->xfields; found = 1; break; } } } if (!found) { fterr_warnx("Unable to resolve action \"%s\" in xlate-definition \"%s\".", ftxta->name, ftx->name); return -1; } } } return 0; } /* resolve actions */ static void eval_ip_src_addr2net(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct fts3rec_all2 cur; FT_RECGET_SRC_MASK(cur,rec,*fo); *((u_int32*)(rec+(*fo).srcaddr)) &= ipv4_len2mask(cur.src_mask); } /* eval_ip_src_addr2net */ static void eval_ip_dst_addr2net(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct fts3rec_all2 cur; FT_RECGET_DST_MASK(cur,rec,*fo); *((u_int32*)(rec+(*fo).dstaddr)) &= ipv4_len2mask(cur.dst_mask); } /* eval_ip_dst_addr2net */ static void eval_ip_src_addr2cnet(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct fts3rec_all2 cur; FT_RECGET_SRCADDR(cur,rec,*fo); if ((cur.srcaddr & 0x80000000) == 0) *((u_int32*)(rec+(*fo).srcaddr)) &= 0xFF000000; else if ((cur.srcaddr & 0xC0000000) == 0x80000000) *((u_int32*)(rec+(*fo).srcaddr)) &= 0xFFFF0000; else if ((cur.srcaddr & 0xC0000000) == 0xC0000000) *((u_int32*)(rec+(*fo).srcaddr)) &= 0xFFFFFF00; } /* eval_ip_src_addr2cnet */ static void eval_ip_dst_addr2cnet(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct fts3rec_all2 cur; FT_RECGET_DSTADDR(cur,rec,*fo); if ((cur.dstaddr & 0x80000000) == 0) *((u_int32*)(rec+(*fo).dstaddr)) &= 0xFF000000; else if ((cur.dstaddr & 0xC0000000) == 0x80000000) *((u_int32*)(rec+(*fo).dstaddr)) &= 0xFFFF0000; else if ((cur.dstaddr & 0xC0000000) == 0xC0000000) *((u_int32*)(rec+(*fo).dstaddr)) &= 0xFFFFFF00; } /* eval_ip_dst_addr2cnet */ static void eval_ip_addr_privacy_mask(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_ip_addr_priv_mask *ftxiapm; ftxiapm = ftxa->action; *((u_int32*)(rec+(*fo).srcaddr)) &= ftxiapm->src_mask; *((u_int32*)(rec+(*fo).dstaddr)) &= ftxiapm->dst_mask; } /* eval_ip_addr_privacy_mask */ static void eval_ip_port_privacy_mask(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_ip_port_priv_mask *ftxaipm; ftxaipm = ftxa->action; *((u_int16*)(rec+(*fo).srcport)) &= ftxaipm->src_mask; *((u_int16*)(rec+(*fo).dstport)) &= ftxaipm->dst_mask; } /* eval_ip_port_privacy_mask */ static void eval_tag_mask(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_tag_mask *ftxatm; ftxatm = ftxa->action; *((u_int32*)(rec+(*fo).src_tag)) &= ftxatm->src_mask; *((u_int32*)(rec+(*fo).dst_tag)) &= ftxatm->dst_mask; } /* eval_tag_mask */ static void eval_scale(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_scale *ftxs; ftxs = ftxa->action; *((u_int32*)(rec+(*fo).dOctets)) *= ftxs->scale; *((u_int32*)(rec+(*fo).dPkts)) *= ftxs->scale; } /* eval_scale */ static void eval_src_asn(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_asn *ftxasn; if (*((u_int16*)(rec+(*fo).src_as)) == 0) { ftxasn = ftxa->action; *((u_int16*)(rec+(*fo).src_as)) = ftxasn->as; } } /* eval_src_asn */ static void eval_dst_asn(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_asn *ftxasn; if (*((u_int16*)(rec+(*fo).dst_as)) == 0) { ftxasn = ftxa->action; *((u_int16*)(rec+(*fo).dst_as)) = ftxasn->as; } } /* eval_dst_asn */ static void eval_ip_src_addr_anon(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_ip_addr_anon *ftxiaa; u_int32 new; time_t now; ftxiaa = ftxa->action; /* if key_refresh_next is set check for key to be loaded */ if (ftxiaa->key_refresh_next) { now = time((time_t)0L); if (now > ftxiaa->key_refresh_next) { /* get next interval, handle skipped intervals (no flows to trigger) */ while (now > ftxiaa->key_refresh_next) ftxiaa->key_refresh_next += ftxiaa->key_refresh_interval*60; /* * load new key and re-init cryptopan. If key load fails continue * using existing key */ if (load_key_file(ftxiaa->key_fname, (char*)&ftxiaa->key) < 0) { fterr_warnx("Failed to load key from %s.", ftxiaa->key_fname); } else { fterr_info("cryptopan key reload from %s successful. Next refresh at %lu.", ftxiaa->key_fname, ftxiaa->key_refresh_next); cryptopan_free(&ftxiaa->cp); if (cryptopan_init(&ftxiaa->cp, ftxiaa->key) < 0) fterr_warnx("cryptopan_init(): failed."); } } } /* refresh key? */ if (cryptopan_anon(&ftxiaa->cp, *((u_int32*)(rec+(*fo).srcaddr)), &new) < 0) { fterr_errx(1, "cryptopan_anon(): failed"); } *((u_int32*)(rec+(*fo).srcaddr)) = new; } /* eval_ip_src_addr_anon */ static void eval_ip_dst_addr_anon(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { struct ftxlate_act_ip_addr_anon *ftxiaa; u_int32 new; time_t now; ftxiaa = ftxa->action; /* if key_refresh_next is set check for key to be loaded */ if (ftxiaa->key_refresh_next) { now = time((time_t)0L); if (now > ftxiaa->key_refresh_next) { /* get next interval, handle skipped intervals (no flows to trigger) */ while (now > ftxiaa->key_refresh_next) ftxiaa->key_refresh_next += ftxiaa->key_refresh_interval*60; /* * load new key and re-init cryptopan. If key load fails continue * using existing key */ if (load_key_file(ftxiaa->key_fname, (char*)&ftxiaa->key) < 0) { fterr_warnx("Failed to load key from %s.", ftxiaa->key_fname); } else { fterr_info("cryptopan key reload from %s successful. Next refresh at %lu.", ftxiaa->key_fname, ftxiaa->key_refresh_next); cryptopan_free(&ftxiaa->cp); if (cryptopan_init(&ftxiaa->cp, ftxiaa->key) < 0) fterr_warnx("cryptopan_init(): failed."); } } } /* refresh key? */ if (cryptopan_anon(&ftxiaa->cp, *((u_int32*)(rec+(*fo).dstaddr)), &new) < 0) { fterr_errx(1, "cryptopan_anon(): failed"); } *((u_int32*)(rec+(*fo).dstaddr)) = new; } /* eval_ip_dst_addr_anon */ static void eval_ip_addr_anon(struct ftxlate_action *ftxa, char *rec, struct fts3rec_offsets *fo) { eval_ip_src_addr_anon(ftxa, rec, fo); eval_ip_dst_addr_anon(ftxa, rec, fo); } /* eval_ip_addr_anon */ /* * function: load_filters * * load the filter definitions if they have not been loaded * * return value of ftfil_load() * */ static int load_filters(struct ftxlate *ftxlate) { /* work to do? */ if (ftxlate->ftfil_init) return 0; if (ftfil_load(&ftxlate->ftfil, ftxlate->ftvar, (ftxlate->filter_fname) ? ftxlate->filter_fname : FT_PATH_CFG_FILTER)) { return 1; } ftxlate->ftfil_init = 1; return 0; } /* load_filters */ /* * function: load_key_file * * load 32 byte hex key from fname * * returns: 0 okay * -1 fail */ static int load_key_file(char *fname, unsigned char *key) { struct stat sb; int fd, ret; char *buf; buf = (char*)0L; ret = -1; if ((fd = open(fname, O_RDONLY, 0)) < 0) { fterr_warn("open(%s)", fname); goto load_key_file_out; } if (fstat(fd, &sb) < 0) { fterr_warn("stat(%s)", fname); goto load_key_file_out; } /* allocate storage for file */ if (!(buf = malloc(sb.st_size+1))) { fterr_warn("malloc()"); goto load_key_file_out; } /* read in file */ if (read(fd, buf, sb.st_size) != sb.st_size) { fterr_warnx("read(%s): short", fname); goto load_key_file_out; } /* null terminate file */ buf[sb.st_size] = 0; /* only using 64 hex digits */ if (sb.st_size > 64) buf[64] = 0; if (decode_hex(buf, 64, key, 32) < 0) { fterr_warnx("decode_hex(): failed for %s.", fname); goto load_key_file_out; } ret = 0; /* good */ load_key_file_out: if (fd != -1) close(fd); if (buf) free(buf); return ret; } /* load_key_file */ /* * function: decode_hex() * * decode max of in_len bytes from in as hex, store result in out. * out is out_len bytes * * in - null terminated character string to decode. * in_len - max hex digits to decode (may be > strlen(in) * out - decoded bits * out_len - length of out buffer * * return -1 - error (non hex digit encountered) * 0 - successful decode * */ static int decode_hex(char *in, int in_len, unsigned char *out, int out_len) { int i, l; unsigned char v, odd; bzero(out, out_len); l = strlen(in); odd = 0; out += out_len-1; if (l > in_len) return -1; in += l-1; for (i = 0; i < l; ++i) { if (*in >= '0' && *in <= '9') v = *in - '0'; else if (*in >= 'a' && *in <= 'f') v = *in - 'a' + 10; else if (*in >= 'A' && *in <= 'F') v = *in - 'A' + 10; else return -1; if (!odd) { *out |= v; } else { *out |= v<<4; --out; } --in; odd = odd ? 0 : 1; } return 0; } /* decode_hex */ /* * cryptopan_* code closely based on Crypto-PAn.1.0 by Jinliang Fan * * Crypto-PAn copyright: * * Name of Software: Crypto-PAn, hereafter (Software) * * Copyright 2002 * Georgia Tech Research Corporation * Atlanta, Georgia 30332. * All Rights Reserved * * The following Software is posted on the Internet by the Georgia * Tech Research Corporation (GTRC). It was developed by employees * of the Georgia Institute of Technology in the College of Computing. * GTRC hereby grants to the user a non-exclusive, royalty-free * license to utilize such Software for the User's own purposes * pursuant to the following conditions. * * * THE SOFTWARE IS LICENSED ON AN "AS IS" BASIS. GTRC MAKES NO WARRANTY * THAT ALL ERRORS CAN BE OR HAVE BEEN ELIMINATED FROM THE SOFTWARE. * GTRC SHALL NOT BE RESPONSIBLE FOR LOSSES OF ANY KIND RESULTING FROM * THE USE OF THE SOFTWARE AND ITS ACCOMPANYING DOCUMENTATION, AND CAN * IN NO WAY PROVIDE COMPENSATION FOR ANY LOSSES SUSTAINED, INCLUDING * BUT NOT LIMITED TO ANY OBLIGATION, LIABILITY, RIGHT, CLAIM OR REMEDY * FOR TORT, OF FOR ANY ACTUAL OR ALLEGED INFRINGEMENT OF PATENTS, COPYRIGHTS, * TRADE SECRETS, OR SIMILAR RIGHTS OF THIRD PARTIES, NOR ANY BUSINESS * EXPENSE, MACHINE DOWNTIME, OR DAMAGES CAUSED LICENSEE BY ANY DEFICIENCY, * DEFECT OR ERROR IN THE SOFTWARE OR MALFUNCTION THEREOF, NOR ANY * INCIDENTAL OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED. GTRC DISCLAIMS * ALL WARRANTIES, BOTH EXPRESS AND IMPLIED RESPECTING THE USE AND * OPERATION OF THE SOFTWARE AND ANY ACCOMPANYING DOCUMENTATION, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * PARTICULAR PURPOSE AND ANY IMPLIED WARRANTY ARISING FROM COURSE * OF PERFORMANCE, COURSE OF DEALING OR USAGE OF TRADE. GTRC MAKES NO * WARRANTY THAT THE SOFTWARE IS ADEQUATELY OR COMPLETELY DESCRIBED * IN, OR BEHAVES IN ACCORDANCE WITH ANY OF THE ACCOMPANYING * DOCUMENTATION. THE USER OF THE SOFTWARE IS EXPECTED TO MAKE THE FINAL * EVALUATION OF THE SOFTWARE'S USEFULNESS IN USER'S OWN ENVIRONMENT. * */ /* * function: cryptopan_init * * Initializes cryptopan structure. cryptopan_free() must be called * to deallocate resources * * returns: 0 okay * -1 fail */ static int cryptopan_init(struct cryptopan *cp, unsigned char *key) { #ifdef HAVE_OPENSSL int i; /* clear */ bzero(cp, sizeof *cp); /* copy in key */ bcopy(key, cp->m_key, 16); /* init crypto */ if (!(cp->cipher_ctx = (EVP_CIPHER_CTX*) malloc(sizeof(EVP_CIPHER_CTX)))) { return -1; } EVP_CIPHER_CTX_init(cp->cipher_ctx); /* disable padding */ if (!(EVP_CIPHER_CTX_set_padding(cp->cipher_ctx, 0))) { cryptopan_free(cp); return -1; } /* init encryption */ if (!(EVP_EncryptInit(cp->cipher_ctx, EVP_aes_128_ecb(), key, NULL))) { cryptopan_free(cp); return -1; } /* set pad */ i = 16; if (!(EVP_EncryptUpdate(cp->cipher_ctx, cp->m_pad, &i, key+16, i))) { cryptopan_free(cp); return -1; } #endif /* HAVE_OPENSSL */ return 0; } /* cryptopan_init */ /* * function: cryptopan_free * * Frees resources allocated by cryptopan_init() * * returns: 0 okay * -1 fail */ static int cryptopan_free(struct cryptopan *cp) { #ifdef HAVE_OPENSSL EVP_CIPHER_CTX_cleanup(cp->cipher_ctx); if (cp->cipher_ctx) free (cp->cipher_ctx); #endif /* HAVE_OPENSSL */ return 0; } /* cryptopan_free */ /* * function: cryptopan_free * * Anonymize orig_addr, storing result in new_addr * see - http://www.cc.gatech.edu/computing/Telecomm/cryptopan/ * * returns: 0 okay * -1 fail */ static int cryptopan_anon(struct cryptopan *cp, u_int32_t orig_addr, u_int32_t *new_addr) { u_int8_t rin_output[16]; u_int8_t rin_input[16]; u_int8_t *m_pad; u_int32_t result, first4bytes_pad, first4bytes_input; int i, pos; result = 0; m_pad = cp->m_pad; bcopy(m_pad, rin_input, 16); first4bytes_pad = (((u_int32_t) m_pad[0]) << 24) + (((u_int32_t) m_pad[1]) << 16) + (((u_int32_t) m_pad[2]) << 8) + (u_int32_t) m_pad[3]; /* * For each prefixes with length from 0 to 31, generate a bit using the * Rijndael cipher, which is used as a pseudorandom function here. The * bits generated in every rounds are combineed into a pseudorandom * one-time-pad. */ for (pos = 0; pos <= 31 ; pos++) { /* * Padding: The most significant pos bits are taken from orig_addr. * The other 128-pos bits are taken from m_pad. The variables * first4bytes_pad and first4bytes_input are used to handle the * annoying byte order problem. */ if (pos == 0) first4bytes_input = first4bytes_pad; else first4bytes_input = ((orig_addr >> (32-pos)) << (32-pos)) | ((first4bytes_pad<> pos); rin_input[0] = (u_int8_t) (first4bytes_input >> 24); rin_input[1] = (u_int8_t) ((first4bytes_input << 8) >> 24); rin_input[2] = (u_int8_t) ((first4bytes_input << 16) >> 24); rin_input[3] = (u_int8_t) ((first4bytes_input << 24) >> 24); /* * Encryption: The Rijndael cipher is used as pseudorandom function. * During each round, only the first bit of rin_output is used. */ i = 16; #ifdef HAVE_OPENSSL if (!(EVP_EncryptUpdate(cp->cipher_ctx, rin_output, &i, rin_input, i))) { cryptopan_free(cp); return -1; } #endif /* HAVE_OPENSSL */ /* Combination: the bits are combined into a pseudorandom one-time-pad */ result |= (rin_output[0] >> 7) << (31-pos); } /* XOR the orginal address with the pseudorandom one-time-pad */ *new_addr = result ^ orig_addr; return 0; } /* cryptopan_anon */ flow-tools-0.68/lib/getdate.c0000644000076600007660000015052307622576534011626 /* A Bison parser, made from getdate.y by GNU Bison version 1.28 */ #define YYBISON 1 /* Identify Bison output. */ #define tAGO 257 #define tDAY 258 #define tDAY_UNIT 259 #define tDAYZONE 260 #define tDST 261 #define tHOUR_UNIT 262 #define tID 263 #define tMERIDIAN 264 #define tMINUTE_UNIT 265 #define tMONTH 266 #define tMONTH_UNIT 267 #define tSEC_UNIT 268 #define tSNUMBER 269 #define tUNUMBER 270 #define tYEAR_UNIT 271 #define tZONE 272 #line 1 "getdate.y" /* ** Originally written by Steven M. Bellovin while ** at the University of North Carolina at Chapel Hill. Later tweaked by ** a couple of people on Usenet. Completely overhauled by Rich $alz ** and Jim Berets in August, 1990; ** ** This grammar has 13 shift/reduce conflicts. ** ** This code is in the public domain and has no copyright. */ #ifdef HAVE_CONFIG_H # ifdef FORCE_ALLOCA_H # include # endif #endif /* Since the code of getdate.y is not included in the Emacs executable itself, there is no need to #define static in this file. Even if the code were included in the Emacs executable, it probably wouldn't do any harm to #undef it here; this will only cause problems if we try to write to a static variable, which I don't think this code needs to do. */ #ifdef emacs # undef static #endif #include "ftconfig.h" #include "ftlib.h" #include #include #if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) # define IN_CTYPE_DOMAIN(c) 1 #else # define IN_CTYPE_DOMAIN(c) isascii(c) #endif #define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c)) #define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c)) #define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c)) #define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c)) /* ISDIGIT differs from ISDIGIT_LOCALE, as follows: - Its arg may be any int or unsigned int; it need not be an unsigned char. - It's guaranteed to evaluate its argument exactly once. - It's typically faster. Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless it's important to use the locale's definition of `digit' even when the host does not conform to Posix. */ #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) #include #if defined (STDC_HEADERS) || defined (USG) # include #endif /* Some old versions of bison generate parsers that use bcopy. That loses on systems that don't provide the function, so we have to redefine it here. */ #if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy) # define bcopy(from, to, len) memcpy ((to), (from), (len)) #endif /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), as well as gratuitiously global symbol names, so we can have multiple yacc generated parsers in the same program. Note that these are only the variables produced by yacc. If other parser generators (bison, byacc, etc) produce additional global names that conflict at link time, then those parser generators need to be fixed instead of adding those names to this list. */ #define yymaxdepth gd_maxdepth #define yyparse gd_parse #define yylex gd_lex #define yyerror gd_error #define yylval gd_lval #define yychar gd_char #define yydebug gd_debug #define yypact gd_pact #define yyr1 gd_r1 #define yyr2 gd_r2 #define yydef gd_def #define yychk gd_chk #define yypgo gd_pgo #define yyact gd_act #define yyexca gd_exca #define yyerrflag gd_errflag #define yynerrs gd_nerrs #define yyps gd_ps #define yypv gd_pv #define yys gd_s #define yy_yys gd_yys #define yystate gd_state #define yytmp gd_tmp #define yyv gd_v #define yy_yyv gd_yyv #define yyval gd_val #define yylloc gd_lloc #define yyreds gd_reds /* With YYDEBUG defined */ #define yytoks gd_toks /* With YYDEBUG defined */ #define yylhs gd_yylhs #define yylen gd_yylen #define yydefred gd_yydefred #define yydgoto gd_yydgoto #define yysindex gd_yysindex #define yyrindex gd_yyrindex #define yygindex gd_yygindex #define yytable gd_yytable #define yycheck gd_yycheck static int yylex (void); static int yyerror (char *s); extern int yyparse (void); #define EPOCH 1970 #define HOUR(x) ((x) * 60) #define MAX_BUFF_LEN 128 /* size of buffer to read the date into */ /* ** An entry in the lexical lookup table. */ typedef struct _TABLE { const char *name; int type; int value; } TABLE; /* ** Meridian: am, pm, or 24-hour style. */ typedef enum _MERIDIAN { MERam, MERpm, MER24 } MERIDIAN; /* ** Global variables. We could get rid of most of these by using a good ** union as the yacc stack. (This routine was originally written before ** yacc had the %union construct.) Maybe someday; right now we only use ** the %union very rarely. */ static const char *yyInput; static int yyDayOrdinal; static int yyDayNumber; static int yyHaveDate; static int yyHaveDay; static int yyHaveRel; static int yyHaveTime; static int yyHaveZone; static int yyTimezone; static int yyDay; static int yyHour; static int yyMinutes; static int yyMonth; static int yySeconds; static int yyYear; static MERIDIAN yyMeridian; static int yyRelDay; static int yyRelHour; static int yyRelMinutes; static int yyRelMonth; static int yyRelSeconds; static int yyRelYear; #line 182 "getdate.y" typedef union { int Number; enum _MERIDIAN Meridian; } YYSTYPE; #include #ifndef __cplusplus #ifndef __STDC__ #define const #endif #endif #define YYFINAL 61 #define YYFLAG -32768 #define YYNTBASE 22 #define YYTRANSLATE(x) ((unsigned)(x) <= 272 ? yytranslate[x] : 32) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, 0, 1, 4, 6, 8, 10, 12, 14, 16, 19, 24, 29, 36, 43, 45, 47, 50, 52, 55, 58, 62, 68, 72, 76, 79, 84, 87, 91, 94, 96, 99, 102, 104, 107, 110, 112, 115, 118, 120, 123, 126, 128, 131, 134, 136, 139, 142, 144, 146, 147 }; static const short yyrhs[] = { -1, 22, 23, 0, 24, 0, 25, 0, 27, 0, 26, 0, 28, 0, 30, 0, 16, 10, 0, 16, 19, 16, 31, 0, 16, 19, 16, 15, 0, 16, 19, 16, 19, 16, 31, 0, 16, 19, 16, 19, 16, 15, 0, 18, 0, 6, 0, 18, 7, 0, 4, 0, 4, 20, 0, 16, 4, 0, 16, 21, 16, 0, 16, 21, 16, 21, 16, 0, 16, 15, 15, 0, 16, 12, 15, 0, 12, 16, 0, 12, 16, 20, 16, 0, 16, 12, 0, 16, 12, 16, 0, 29, 3, 0, 29, 0, 16, 17, 0, 15, 17, 0, 17, 0, 16, 13, 0, 15, 13, 0, 13, 0, 16, 5, 0, 15, 5, 0, 5, 0, 16, 8, 0, 15, 8, 0, 8, 0, 16, 11, 0, 15, 11, 0, 11, 0, 16, 14, 0, 15, 14, 0, 14, 0, 16, 0, 0, 10, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, 198, 199, 202, 205, 208, 211, 214, 217, 220, 226, 232, 241, 247, 259, 262, 265, 271, 275, 279, 285, 289, 307, 313, 319, 323, 328, 332, 339, 347, 350, 353, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 401, 406, 439, 443 }; #endif #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) static const char * const yytname[] = { "$","error","$undefined.","tAGO","tDAY", "tDAY_UNIT","tDAYZONE","tDST","tHOUR_UNIT","tID","tMERIDIAN","tMINUTE_UNIT", "tMONTH","tMONTH_UNIT","tSEC_UNIT","tSNUMBER","tUNUMBER","tYEAR_UNIT","tZONE", "':'","','","'/'","spec","item","time","zone","day","date","rel","relunit","number", "o_merid", NULL }; #endif static const short yyr1[] = { 0, 22, 22, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 31, 31 }; static const short yyr2[] = { 0, 0, 2, 1, 1, 1, 1, 1, 1, 2, 4, 4, 6, 6, 1, 1, 2, 1, 2, 2, 3, 5, 3, 3, 2, 4, 2, 3, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 1, 0, 1 }; static const short yydefact[] = { 1, 0, 17, 38, 15, 41, 44, 0, 35, 47, 0, 48, 32, 14, 2, 3, 4, 6, 5, 7, 29, 8, 18, 24, 37, 40, 43, 34, 46, 31, 19, 36, 39, 9, 42, 26, 33, 45, 0, 30, 0, 0, 16, 28, 0, 23, 27, 22, 49, 20, 25, 50, 11, 0, 10, 0, 49, 21, 13, 12, 0, 0 }; static const short yydefgoto[] = { 1, 14, 15, 16, 17, 18, 19, 20, 21, 54 }; static const short yypact[] = {-32768, 0, -19,-32768,-32768,-32768,-32768, -13,-32768,-32768, 30, 15,-32768, 14,-32768,-32768,-32768,-32768,-32768,-32768, 19, -32768,-32768, 4,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768, -6,-32768,-32768, 16,-32768, 17, 23,-32768,-32768, 24,-32768,-32768,-32768, 27, 28,-32768, -32768,-32768, 29,-32768, 32, -8,-32768,-32768,-32768, 50, -32768 }; static const short yypgoto[] = {-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -5 }; #define YYLAST 51 static const short yytable[] = { 60, 22, 51, 23, 2, 3, 4, 58, 5, 45, 46, 6, 7, 8, 9, 10, 11, 12, 13, 30, 31, 42, 43, 32, 44, 33, 34, 35, 36, 37, 38, 47, 39, 48, 40, 24, 41, 51, 25, 49, 50, 26, 52, 27, 28, 56, 53, 29, 57, 55, 61, 59 }; static const short yycheck[] = { 0, 20, 10, 16, 4, 5, 6, 15, 8, 15, 16, 11, 12, 13, 14, 15, 16, 17, 18, 4, 5, 7, 3, 8, 20, 10, 11, 12, 13, 14, 15, 15, 17, 16, 19, 5, 21, 10, 8, 16, 16, 11, 15, 13, 14, 16, 19, 17, 16, 21, 0, 56 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/misc/bison.simple" /* This file comes from bison-1.28. */ /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* This is the parser code that is written into each bison parser when the %semantic_parser declaration is not specified in the grammar. It was written by Richard Stallman by simplifying the hairy parser used when %semantic_parser is specified. */ #ifndef YYSTACK_USE_ALLOCA #ifdef alloca #define YYSTACK_USE_ALLOCA #else /* alloca not defined */ #ifdef __GNUC__ #define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #else /* not GNU C. */ #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) #define YYSTACK_USE_ALLOCA #include #else /* not sparc */ /* We think this test detects Watcom and Microsoft C. */ /* This used to test MSDOS, but that is a bad idea since that symbol is in the user namespace. */ #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) #if 0 /* No need for malloc.h, which pollutes the namespace; instead, just don't use alloca. */ #include #endif #else /* not MSDOS, or __TURBOC__ */ #if defined(_AIX) /* I don't know what this was needed for, but it pollutes the namespace. So I turned it off. rms, 2 May 1997. */ /* #include */ #pragma alloca #define YYSTACK_USE_ALLOCA #else /* not MSDOS, or __TURBOC__, or _AIX */ #if 0 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, and on HPUX 10. Eventually we can turn this on. */ #define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #endif /* __hpux */ #endif #endif /* not _AIX */ #endif /* not MSDOS, or __TURBOC__ */ #endif /* not sparc */ #endif /* not GNU C */ #endif /* alloca not defined */ #endif /* YYSTACK_USE_ALLOCA not defined */ #ifdef YYSTACK_USE_ALLOCA #define YYSTACK_ALLOC alloca #else #define YYSTACK_ALLOC malloc #endif /* Note: there must be only one dollar sign in this file. It is replaced by the list of actions, each action as one case of the switch. */ #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY -2 #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrlab1 /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(token, value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { yychar = (token), yylval = (value); \ yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 #ifndef YYPURE #define YYLEX yylex() #endif #ifdef YYPURE #ifdef YYLSP_NEEDED #ifdef YYLEX_PARAM #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) #else #define YYLEX yylex(&yylval, &yylloc) #endif #else /* not YYLSP_NEEDED */ #ifdef YYLEX_PARAM #define YYLEX yylex(&yylval, YYLEX_PARAM) #else #define YYLEX yylex(&yylval) #endif #endif /* not YYLSP_NEEDED */ #endif /* If nonreentrant, generate the variables here */ #ifndef YYPURE int yychar; /* the lookahead symbol */ YYSTYPE yylval; /* the semantic value of the */ /* lookahead symbol */ #ifdef YYLSP_NEEDED YYLTYPE yylloc; /* location data for the lookahead */ /* symbol */ #endif int yynerrs; /* number of parse errors so far */ #endif /* not YYPURE */ #if YYDEBUG != 0 int yydebug; /* nonzero means print parse trace */ /* Since this is uninitialized, it does not stop multiple parsers from coexisting. */ #endif /* YYINITDEPTH indicates the initial size of the parser's stacks */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH is the maximum size the stacks can grow to (effective only if the built-in stack extension method is used). */ #if YYMAXDEPTH == 0 #undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif /* Define __yy_memcpy. Note that the size argument should be passed with type unsigned int, because that is what the non-GCC definitions require. With GCC, __builtin_memcpy takes an arg of type size_t, but it can handle unsigned int. */ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) #else /* not GNU C or C++ */ #ifndef __cplusplus /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void __yy_memcpy (to, from, count) char *to; char *from; unsigned int count; { register char *f = from; register char *t = to; register int i = count; while (i-- > 0) *t++ = *f++; } #else /* __cplusplus */ /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void __yy_memcpy (char *to, char *from, unsigned int count) { register char *t = to; register char *f = from; register int i = count; while (i-- > 0) *t++ = *f++; } #endif #endif #line 217 "/usr/share/misc/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. It should actually point to an object. Grammar actions can access the variable by casting it to the proper pointer type. */ #ifdef YYPARSE_PARAM #ifdef __cplusplus #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM #define YYPARSE_PARAM_DECL #else /* not __cplusplus */ #define YYPARSE_PARAM_ARG YYPARSE_PARAM #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; #endif /* not __cplusplus */ #else /* not YYPARSE_PARAM */ #define YYPARSE_PARAM_ARG #define YYPARSE_PARAM_DECL #endif /* not YYPARSE_PARAM */ /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ #ifdef YYPARSE_PARAM int yyparse (void *); #else int yyparse (void); #endif #endif int yyparse(YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { register int yystate; register int yyn; register short *yyssp; register YYSTYPE *yyvsp; int yyerrstatus; /* number of tokens to shift before error messages enabled */ int yychar1 = 0; /* lookahead token as an internal (translated) token number */ short yyssa[YYINITDEPTH]; /* the state stack */ YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ short *yyss = yyssa; /* refer to the stacks thru separate pointers */ YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ #ifdef YYLSP_NEEDED YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ YYLTYPE *yyls = yylsa; YYLTYPE *yylsp; #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) #else #define YYPOPSTACK (yyvsp--, yyssp--) #endif int yystacksize = YYINITDEPTH; int yyfree_stacks = 0; #ifdef YYPURE int yychar; YYSTYPE yylval; int yynerrs; #ifdef YYLSP_NEEDED YYLTYPE yylloc; #endif #endif YYSTYPE yyval; /* the variable used to return */ /* semantic values from the action */ /* routines */ int yylen; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Starting parse\n"); #endif yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss - 1; yyvsp = yyvs; #ifdef YYLSP_NEEDED yylsp = yyls; #endif /* Push a new state, which is found in yystate . */ /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yynewstate: *++yyssp = yystate; if (yyssp >= yyss + yystacksize - 1) { /* Give user a chance to reallocate the stack */ /* Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; #ifdef YYLSP_NEEDED YYLTYPE *yyls1 = yyls; #endif /* Get the current used size of the three stacks, in elements. */ int size = yyssp - yyss + 1; #ifdef yyoverflow /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. */ #ifdef YYLSP_NEEDED /* This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yyls1, size * sizeof (*yylsp), &yystacksize); #else yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yystacksize); #endif yyss = yyss1; yyvs = yyvs1; #ifdef YYLSP_NEEDED yyls = yyls1; #endif #else /* no yyoverflow */ /* Extend the stack our own way. */ if (yystacksize >= YYMAXDEPTH) { yyerror("parser stack overflow"); if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 2; } yystacksize *= 2; if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; #ifndef YYSTACK_USE_ALLOCA yyfree_stacks = 1; #endif yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); __yy_memcpy ((char *)yyss, (char *)yyss1, size * (unsigned int) sizeof (*yyssp)); yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * (unsigned int) sizeof (*yyvsp)); #ifdef YYLSP_NEEDED yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); __yy_memcpy ((char *)yyls, (char *)yyls1, size * (unsigned int) sizeof (*yylsp)); #endif #endif /* no yyoverflow */ yyssp = yyss + size - 1; yyvsp = yyvs + size - 1; #ifdef YYLSP_NEEDED yylsp = yyls + size - 1; #endif #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Stack size increased to %d\n", yystacksize); #endif if (yyssp >= yyss + yystacksize - 1) YYABORT; } #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Entering state %d\n", yystate); #endif goto yybackup; yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* yychar is either YYEMPTY or YYEOF or a valid token in external form. */ if (yychar == YYEMPTY) { #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Reading a token: "); #endif yychar = YYLEX; } /* Convert token to internal form (in yychar1) for indexing tables with */ if (yychar <= 0) /* This means end of input. */ { yychar1 = 0; yychar = YYEOF; /* Don't call YYLEX any more */ #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Now at end of input.\n"); #endif } else { yychar1 = YYTRANSLATE(yychar); #if YYDEBUG != 0 if (yydebug) { fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); /* Give the individual parser a way to print the precise meaning of a token, for further debugging info. */ #ifdef YYPRINT YYPRINT (stderr, yychar, yylval); #endif fprintf (stderr, ")\n"); } #endif } yyn += yychar1; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; yyn = yytable[yyn]; /* yyn is what to do for this token type in this state. Negative => reduce, -yyn is rule number. Positive => shift, yyn is new state. New state is final state => don't bother to shift, just return success. 0, or most negative number => error. */ if (yyn < 0) { if (yyn == YYFLAG) goto yyerrlab; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); #endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; #ifdef YYLSP_NEEDED *++yylsp = yylloc; #endif /* count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /* Do the default action for the current state. */ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; /* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: yylen = yyr2[yyn]; if (yylen > 0) yyval = yyvsp[1-yylen]; /* implement default value of the action */ #if YYDEBUG != 0 if (yydebug) { int i; fprintf (stderr, "Reducing via rule %d (line %d), ", yyn, yyrline[yyn]); /* Print the symbols being reduced, and their result. */ for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) fprintf (stderr, "%s ", yytname[yyrhs[i]]); fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); } #endif switch (yyn) { case 3: #line 202 "getdate.y" { yyHaveTime++; ; break;} case 4: #line 205 "getdate.y" { yyHaveZone++; ; break;} case 5: #line 208 "getdate.y" { yyHaveDate++; ; break;} case 6: #line 211 "getdate.y" { yyHaveDay++; ; break;} case 7: #line 214 "getdate.y" { yyHaveRel++; ; break;} case 9: #line 220 "getdate.y" { yyHour = yyvsp[-1].Number; yyMinutes = 0; yySeconds = 0; yyMeridian = yyvsp[0].Meridian; ; break;} case 10: #line 226 "getdate.y" { yyHour = yyvsp[-3].Number; yyMinutes = yyvsp[-1].Number; yySeconds = 0; yyMeridian = yyvsp[0].Meridian; ; break;} case 11: #line 232 "getdate.y" { yyHour = yyvsp[-3].Number; yyMinutes = yyvsp[-1].Number; yyMeridian = MER24; yyHaveZone++; yyTimezone = (yyvsp[0].Number < 0 ? -yyvsp[0].Number % 100 + (-yyvsp[0].Number / 100) * 60 : - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60)); ; break;} case 12: #line 241 "getdate.y" { yyHour = yyvsp[-5].Number; yyMinutes = yyvsp[-3].Number; yySeconds = yyvsp[-1].Number; yyMeridian = yyvsp[0].Meridian; ; break;} case 13: #line 247 "getdate.y" { yyHour = yyvsp[-5].Number; yyMinutes = yyvsp[-3].Number; yySeconds = yyvsp[-1].Number; yyMeridian = MER24; yyHaveZone++; yyTimezone = (yyvsp[0].Number < 0 ? -yyvsp[0].Number % 100 + (-yyvsp[0].Number / 100) * 60 : - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60)); ; break;} case 14: #line 259 "getdate.y" { yyTimezone = yyvsp[0].Number; ; break;} case 15: #line 262 "getdate.y" { yyTimezone = yyvsp[0].Number - 60; ; break;} case 16: #line 266 "getdate.y" { yyTimezone = yyvsp[-1].Number - 60; ; break;} case 17: #line 271 "getdate.y" { yyDayOrdinal = 1; yyDayNumber = yyvsp[0].Number; ; break;} case 18: #line 275 "getdate.y" { yyDayOrdinal = 1; yyDayNumber = yyvsp[-1].Number; ; break;} case 19: #line 279 "getdate.y" { yyDayOrdinal = yyvsp[-1].Number; yyDayNumber = yyvsp[0].Number; ; break;} case 20: #line 285 "getdate.y" { yyMonth = yyvsp[-2].Number; yyDay = yyvsp[0].Number; ; break;} case 21: #line 289 "getdate.y" { /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY. The goal in recognizing YYYY/MM/DD is solely to support legacy machine-generated dates like those in an RCS log listing. If you want portability, use the ISO 8601 format. */ if (yyvsp[-4].Number >= 1000) { yyYear = yyvsp[-4].Number; yyMonth = yyvsp[-2].Number; yyDay = yyvsp[0].Number; } else { yyMonth = yyvsp[-4].Number; yyDay = yyvsp[-2].Number; yyYear = yyvsp[0].Number; } ; break;} case 22: #line 307 "getdate.y" { /* ISO 8601 format. yyyy-mm-dd. */ yyYear = yyvsp[-2].Number; yyMonth = -yyvsp[-1].Number; yyDay = -yyvsp[0].Number; ; break;} case 23: #line 313 "getdate.y" { /* e.g. 17-JUN-1992. */ yyDay = yyvsp[-2].Number; yyMonth = yyvsp[-1].Number; yyYear = -yyvsp[0].Number; ; break;} case 24: #line 319 "getdate.y" { yyMonth = yyvsp[-1].Number; yyDay = yyvsp[0].Number; ; break;} case 25: #line 323 "getdate.y" { yyMonth = yyvsp[-3].Number; yyDay = yyvsp[-2].Number; yyYear = yyvsp[0].Number; ; break;} case 26: #line 328 "getdate.y" { yyMonth = yyvsp[0].Number; yyDay = yyvsp[-1].Number; ; break;} case 27: #line 332 "getdate.y" { yyMonth = yyvsp[-1].Number; yyDay = yyvsp[-2].Number; yyYear = yyvsp[0].Number; ; break;} case 28: #line 339 "getdate.y" { yyRelSeconds = -yyRelSeconds; yyRelMinutes = -yyRelMinutes; yyRelHour = -yyRelHour; yyRelDay = -yyRelDay; yyRelMonth = -yyRelMonth; yyRelYear = -yyRelYear; ; break;} case 30: #line 350 "getdate.y" { yyRelYear += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 31: #line 353 "getdate.y" { yyRelYear += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 32: #line 356 "getdate.y" { yyRelYear++; ; break;} case 33: #line 359 "getdate.y" { yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 34: #line 362 "getdate.y" { yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 35: #line 365 "getdate.y" { yyRelMonth++; ; break;} case 36: #line 368 "getdate.y" { yyRelDay += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 37: #line 371 "getdate.y" { yyRelDay += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 38: #line 374 "getdate.y" { yyRelDay++; ; break;} case 39: #line 377 "getdate.y" { yyRelHour += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 40: #line 380 "getdate.y" { yyRelHour += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 41: #line 383 "getdate.y" { yyRelHour++; ; break;} case 42: #line 386 "getdate.y" { yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 43: #line 389 "getdate.y" { yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 44: #line 392 "getdate.y" { yyRelMinutes++; ; break;} case 45: #line 395 "getdate.y" { yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 46: #line 398 "getdate.y" { yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number; ; break;} case 47: #line 401 "getdate.y" { yyRelSeconds++; ; break;} case 48: #line 407 "getdate.y" { if (yyHaveTime && yyHaveDate && !yyHaveRel) yyYear = yyvsp[0].Number; else { if (yyvsp[0].Number>10000) { yyHaveDate++; yyDay= (yyvsp[0].Number)%100; yyMonth= (yyvsp[0].Number/100)%100; yyYear = yyvsp[0].Number/10000; } else { yyHaveTime++; if (yyvsp[0].Number < 100) { yyHour = yyvsp[0].Number; yyMinutes = 0; } else { yyHour = yyvsp[0].Number / 100; yyMinutes = yyvsp[0].Number % 100; } yySeconds = 0; yyMeridian = MER24; } } ; break;} case 49: #line 440 "getdate.y" { yyval.Meridian = MER24; ; break;} case 50: #line 444 "getdate.y" { yyval.Meridian = yyvsp[0].Meridian; ; break;} } /* the action file gets copied in in place of this dollarsign */ #line 543 "/usr/share/misc/bison.simple" yyvsp -= yylen; yyssp -= yylen; #ifdef YYLSP_NEEDED yylsp -= yylen; #endif #if YYDEBUG != 0 if (yydebug) { short *ssp1 = yyss - 1; fprintf (stderr, "state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); } #endif *++yyvsp = yyval; #ifdef YYLSP_NEEDED yylsp++; if (yylen == 0) { yylsp->first_line = yylloc.first_line; yylsp->first_column = yylloc.first_column; yylsp->last_line = (yylsp-1)->last_line; yylsp->last_column = (yylsp-1)->last_column; yylsp->text = 0; } else { yylsp->last_line = (yylsp+yylen-1)->last_line; yylsp->last_column = (yylsp+yylen-1)->last_column; } #endif /* Now "shift" the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTBASE] + *yyssp; if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTBASE]; goto yynewstate; yyerrlab: /* here on detecting error */ if (! yyerrstatus) /* If not already recovering from an error, report this error. */ { ++yynerrs; #ifdef YYERROR_VERBOSE yyn = yypact[yystate]; if (yyn > YYFLAG && yyn < YYLAST) { int size = 0; char *msg; int x, count; count = 0; /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) size += strlen(yytname[x]) + 15, count++; msg = (char *) malloc(size + 15); if (msg != 0) { strcpy(msg, "parse error"); if (count < 5) { count = 0; for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) { strcat(msg, count == 0 ? ", expecting `" : " or `"); strcat(msg, yytname[x]); strcat(msg, "'"); count++; } } yyerror(msg); free(msg); } else yyerror ("parse error; also virtual memory exceeded"); } else #endif /* YYERROR_VERBOSE */ yyerror("parse error"); } goto yyerrlab1; yyerrlab1: /* here on error raised explicitly by an action */ if (yyerrstatus == 3) { /* if just tried and failed to reuse lookahead token after an error, discard it. */ /* return failure if at end of input */ if (yychar == YYEOF) YYABORT; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); #endif yychar = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error token. */ yyerrstatus = 3; /* Each real token shifted decrements this */ goto yyerrhandle; yyerrdefault: /* current state does not do anything special for the error token. */ #if 0 /* This is wrong; only states that explicitly want error tokens should shift them. */ yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ if (yyn) goto yydefault; #endif yyerrpop: /* pop the current state because it cannot handle the error token */ if (yyssp == yyss) YYABORT; yyvsp--; yystate = *--yyssp; #ifdef YYLSP_NEEDED yylsp--; #endif #if YYDEBUG != 0 if (yydebug) { short *ssp1 = yyss - 1; fprintf (stderr, "Error: state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); } #endif yyerrhandle: yyn = yypact[yystate]; if (yyn == YYFLAG) goto yyerrdefault; yyn += YYTERROR; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) goto yyerrdefault; yyn = yytable[yyn]; if (yyn < 0) { if (yyn == YYFLAG) goto yyerrpop; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting error token, "); #endif *++yyvsp = yylval; #ifdef YYLSP_NEEDED *++yylsp = yylloc; #endif yystate = yyn; goto yynewstate; yyacceptlab: /* YYACCEPT comes here. */ if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 0; yyabortlab: /* YYABORT comes here. */ if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 1; } #line 449 "getdate.y" /* Month and day table. */ static TABLE const MonthDayTable[] = { { "january", tMONTH, 1 }, { "february", tMONTH, 2 }, { "march", tMONTH, 3 }, { "april", tMONTH, 4 }, { "may", tMONTH, 5 }, { "june", tMONTH, 6 }, { "july", tMONTH, 7 }, { "august", tMONTH, 8 }, { "september", tMONTH, 9 }, { "sept", tMONTH, 9 }, { "october", tMONTH, 10 }, { "november", tMONTH, 11 }, { "december", tMONTH, 12 }, { "sunday", tDAY, 0 }, { "monday", tDAY, 1 }, { "tuesday", tDAY, 2 }, { "tues", tDAY, 2 }, { "wednesday", tDAY, 3 }, { "wednes", tDAY, 3 }, { "thursday", tDAY, 4 }, { "thur", tDAY, 4 }, { "thurs", tDAY, 4 }, { "friday", tDAY, 5 }, { "saturday", tDAY, 6 }, { NULL } }; /* Time units table. */ static TABLE const UnitsTable[] = { { "year", tYEAR_UNIT, 1 }, { "month", tMONTH_UNIT, 1 }, { "fortnight", tDAY_UNIT, 14 }, { "week", tDAY_UNIT, 7 }, { "day", tDAY_UNIT, 1 }, { "hour", tHOUR_UNIT, 1 }, { "minute", tMINUTE_UNIT, 1 }, { "min", tMINUTE_UNIT, 1 }, { "second", tSEC_UNIT, 1 }, { "sec", tSEC_UNIT, 1 }, { NULL } }; /* Assorted relative-time words. */ static TABLE const OtherTable[] = { { "tomorrow", tMINUTE_UNIT, 1 * 24 * 60 }, { "yesterday", tMINUTE_UNIT, -1 * 24 * 60 }, { "today", tMINUTE_UNIT, 0 }, { "now", tMINUTE_UNIT, 0 }, { "last", tUNUMBER, -1 }, { "this", tMINUTE_UNIT, 0 }, { "next", tUNUMBER, 2 }, { "first", tUNUMBER, 1 }, /* { "second", tUNUMBER, 2 }, */ { "third", tUNUMBER, 3 }, { "fourth", tUNUMBER, 4 }, { "fifth", tUNUMBER, 5 }, { "sixth", tUNUMBER, 6 }, { "seventh", tUNUMBER, 7 }, { "eighth", tUNUMBER, 8 }, { "ninth", tUNUMBER, 9 }, { "tenth", tUNUMBER, 10 }, { "eleventh", tUNUMBER, 11 }, { "twelfth", tUNUMBER, 12 }, { "ago", tAGO, 1 }, { NULL } }; /* The timezone table. */ static TABLE const TimezoneTable[] = { { "gmt", tZONE, HOUR ( 0) }, /* Greenwich Mean */ { "ut", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ { "utc", tZONE, HOUR ( 0) }, { "wet", tZONE, HOUR ( 0) }, /* Western European */ { "bst", tDAYZONE, HOUR ( 0) }, /* British Summer */ { "wat", tZONE, HOUR ( 1) }, /* West Africa */ { "at", tZONE, HOUR ( 2) }, /* Azores */ #if 0 /* For completeness. BST is also British Summer, and GST is * also Guam Standard. */ { "bst", tZONE, HOUR ( 3) }, /* Brazil Standard */ { "gst", tZONE, HOUR ( 3) }, /* Greenland Standard */ #endif #if 0 { "nft", tZONE, HOUR (3.5) }, /* Newfoundland */ { "nst", tZONE, HOUR (3.5) }, /* Newfoundland Standard */ { "ndt", tDAYZONE, HOUR (3.5) }, /* Newfoundland Daylight */ #endif { "ast", tZONE, HOUR ( 4) }, /* Atlantic Standard */ { "adt", tDAYZONE, HOUR ( 4) }, /* Atlantic Daylight */ { "est", tZONE, HOUR ( 5) }, /* Eastern Standard */ { "edt", tDAYZONE, HOUR ( 5) }, /* Eastern Daylight */ { "cst", tZONE, HOUR ( 6) }, /* Central Standard */ { "cdt", tDAYZONE, HOUR ( 6) }, /* Central Daylight */ { "mst", tZONE, HOUR ( 7) }, /* Mountain Standard */ { "mdt", tDAYZONE, HOUR ( 7) }, /* Mountain Daylight */ { "pst", tZONE, HOUR ( 8) }, /* Pacific Standard */ { "pdt", tDAYZONE, HOUR ( 8) }, /* Pacific Daylight */ { "yst", tZONE, HOUR ( 9) }, /* Yukon Standard */ { "ydt", tDAYZONE, HOUR ( 9) }, /* Yukon Daylight */ { "hst", tZONE, HOUR (10) }, /* Hawaii Standard */ { "hdt", tDAYZONE, HOUR (10) }, /* Hawaii Daylight */ { "cat", tZONE, HOUR (10) }, /* Central Alaska */ { "ahst", tZONE, HOUR (10) }, /* Alaska-Hawaii Standard */ { "nt", tZONE, HOUR (11) }, /* Nome */ { "idlw", tZONE, HOUR (12) }, /* International Date Line West */ { "cet", tZONE, -HOUR (1) }, /* Central European */ { "met", tZONE, -HOUR (1) }, /* Middle European */ { "mewt", tZONE, -HOUR (1) }, /* Middle European Winter */ { "mest", tDAYZONE, -HOUR (1) }, /* Middle European Summer */ { "mesz", tDAYZONE, -HOUR (1) }, /* Middle European Summer */ { "swt", tZONE, -HOUR (1) }, /* Swedish Winter */ { "sst", tDAYZONE, -HOUR (1) }, /* Swedish Summer */ { "fwt", tZONE, -HOUR (1) }, /* French Winter */ { "fst", tDAYZONE, -HOUR (1) }, /* French Summer */ { "eet", tZONE, -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */ { "bt", tZONE, -HOUR (3) }, /* Baghdad, USSR Zone 2 */ #if 0 { "it", tZONE, -HOUR (3.5) },/* Iran */ #endif { "zp4", tZONE, -HOUR (4) }, /* USSR Zone 3 */ { "zp5", tZONE, -HOUR (5) }, /* USSR Zone 4 */ #if 0 { "ist", tZONE, -HOUR (5.5) },/* Indian Standard */ #endif { "zp6", tZONE, -HOUR (6) }, /* USSR Zone 5 */ #if 0 /* For completeness. NST is also Newfoundland Standard, and SST is * also Swedish Summer. */ { "nst", tZONE, -HOUR (6.5) },/* North Sumatra */ { "sst", tZONE, -HOUR (7) }, /* South Sumatra, USSR Zone 6 */ #endif /* 0 */ { "wast", tZONE, -HOUR (7) }, /* West Australian Standard */ { "wadt", tDAYZONE, -HOUR (7) }, /* West Australian Daylight */ #if 0 { "jt", tZONE, -HOUR (7.5) },/* Java (3pm in Cronusland!) */ #endif { "cct", tZONE, -HOUR (8) }, /* China Coast, USSR Zone 7 */ { "jst", tZONE, -HOUR (9) }, /* Japan Standard, USSR Zone 8 */ #if 0 { "cast", tZONE, -HOUR (9.5) },/* Central Australian Standard */ { "cadt", tDAYZONE, -HOUR (9.5) },/* Central Australian Daylight */ #endif { "east", tZONE, -HOUR (10) }, /* Eastern Australian Standard */ { "eadt", tDAYZONE, -HOUR (10) }, /* Eastern Australian Daylight */ { "gst", tZONE, -HOUR (10) }, /* Guam Standard, USSR Zone 9 */ { "nzt", tZONE, -HOUR (12) }, /* New Zealand */ { "nzst", tZONE, -HOUR (12) }, /* New Zealand Standard */ { "nzdt", tDAYZONE, -HOUR (12) }, /* New Zealand Daylight */ { "idle", tZONE, -HOUR (12) }, /* International Date Line East */ { NULL } }; /* Military timezone table. */ static TABLE const MilitaryTable[] = { { "a", tZONE, HOUR ( 1) }, { "b", tZONE, HOUR ( 2) }, { "c", tZONE, HOUR ( 3) }, { "d", tZONE, HOUR ( 4) }, { "e", tZONE, HOUR ( 5) }, { "f", tZONE, HOUR ( 6) }, { "g", tZONE, HOUR ( 7) }, { "h", tZONE, HOUR ( 8) }, { "i", tZONE, HOUR ( 9) }, { "k", tZONE, HOUR ( 10) }, { "l", tZONE, HOUR ( 11) }, { "m", tZONE, HOUR ( 12) }, { "n", tZONE, HOUR (- 1) }, { "o", tZONE, HOUR (- 2) }, { "p", tZONE, HOUR (- 3) }, { "q", tZONE, HOUR (- 4) }, { "r", tZONE, HOUR (- 5) }, { "s", tZONE, HOUR (- 6) }, { "t", tZONE, HOUR (- 7) }, { "u", tZONE, HOUR (- 8) }, { "v", tZONE, HOUR (- 9) }, { "w", tZONE, HOUR (-10) }, { "x", tZONE, HOUR (-11) }, { "y", tZONE, HOUR (-12) }, { "z", tZONE, HOUR ( 0) }, { NULL } }; /* ARGSUSED */ static int yyerror (char *s) { return 0; } static int ToHour (int Hours, MERIDIAN Meridian) { switch (Meridian) { case MER24: if (Hours < 0 || Hours > 23) return -1; return Hours; case MERam: if (Hours < 1 || Hours > 12) return -1; if (Hours == 12) Hours = 0; return Hours; case MERpm: if (Hours < 1 || Hours > 12) return -1; if (Hours == 12) Hours = 0; return Hours + 12; default: abort (); } /* NOTREACHED */ } static int ToYear (int Year) { if (Year < 0) Year = -Year; /* XPG4 suggests that years 00-68 map to 2000-2068, and years 69-99 map to 1969-1999. */ if (Year < 69) Year += 2000; else if (Year < 100) Year += 1900; return Year; } static int LookupWord (char *buff) { register char *p; register char *q; register const TABLE *tp; int i; int abbrev; /* Make it lowercase. */ for (p = buff; *p; p++) if (ISUPPER (*p)) *p = tolower (*p); if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0) { yylval.Meridian = MERam; return tMERIDIAN; } if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0) { yylval.Meridian = MERpm; return tMERIDIAN; } /* See if we have an abbreviation for a month. */ if (strlen (buff) == 3) abbrev = 1; else if (strlen (buff) == 4 && buff[3] == '.') { abbrev = 1; buff[3] = '\0'; } else abbrev = 0; for (tp = MonthDayTable; tp->name; tp++) { if (abbrev) { if (strncmp (buff, tp->name, 3) == 0) { yylval.Number = tp->value; return tp->type; } } else if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } } for (tp = TimezoneTable; tp->name; tp++) if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } if (strcmp (buff, "dst") == 0) return tDST; for (tp = UnitsTable; tp->name; tp++) if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } /* Strip off any plural and try the units table again. */ i = strlen (buff) - 1; if (buff[i] == 's') { buff[i] = '\0'; for (tp = UnitsTable; tp->name; tp++) if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } buff[i] = 's'; /* Put back for "this" in OtherTable. */ } for (tp = OtherTable; tp->name; tp++) if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } /* Military timezones. */ if (buff[1] == '\0' && ISALPHA (*buff)) { for (tp = MilitaryTable; tp->name; tp++) if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } } /* Drop out any periods and try the timezone table again. */ for (i = 0, p = q = buff; *q; q++) if (*q != '.') *p++ = *q; else i++; *p = '\0'; if (i) for (tp = TimezoneTable; tp->name; tp++) if (strcmp (buff, tp->name) == 0) { yylval.Number = tp->value; return tp->type; } return tID; } static int yylex (void) { register char c; register char *p; char buff[20]; int Count; int sign; for (;;) { while (ISSPACE (*yyInput)) yyInput++; if (ISDIGIT (c = *yyInput) || c == '-' || c == '+') { if (c == '-' || c == '+') { sign = c == '-' ? -1 : 1; if (!ISDIGIT (*++yyInput)) /* skip the '-' sign */ continue; } else sign = 0; for (yylval.Number = 0; ISDIGIT (c = *yyInput++);) yylval.Number = 10 * yylval.Number + c - '0'; yyInput--; if (sign < 0) yylval.Number = -yylval.Number; return sign ? tSNUMBER : tUNUMBER; } if (ISALPHA (c)) { for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';) if (p < &buff[sizeof buff - 1]) *p++ = c; *p = '\0'; yyInput--; return LookupWord (buff); } if (c != '(') return *yyInput++; Count = 0; do { c = *yyInput++; if (c == '\0') return c; if (c == '(') Count++; else if (c == ')') Count--; } while (Count > 0); } } #define TM_YEAR_ORIGIN 1900 /* Yield A - B, measured in seconds. */ static long difftm (struct tm *a, struct tm *b) { int ay = a->tm_year + (TM_YEAR_ORIGIN - 1); int by = b->tm_year + (TM_YEAR_ORIGIN - 1); long days = ( /* difference in day of year */ a->tm_yday - b->tm_yday /* + intervening leap days */ + ((ay >> 2) - (by >> 2)) - (ay / 100 - by / 100) + ((ay / 100 >> 2) - (by / 100 >> 2)) /* + difference in years * 365 */ + (long) (ay - by) * 365 ); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } time_t get_date (const char *p, const time_t *now) { struct tm tm, tm0, *tmp; time_t Start; yyInput = p; Start = now ? *now : time ((time_t *) NULL); tmp = localtime (&Start); yyYear = tmp->tm_year + TM_YEAR_ORIGIN; yyMonth = tmp->tm_mon + 1; yyDay = tmp->tm_mday; yyHour = tmp->tm_hour; yyMinutes = tmp->tm_min; yySeconds = tmp->tm_sec; yyMeridian = MER24; yyRelSeconds = 0; yyRelMinutes = 0; yyRelHour = 0; yyRelDay = 0; yyRelMonth = 0; yyRelYear = 0; yyHaveDate = 0; yyHaveDay = 0; yyHaveRel = 0; yyHaveTime = 0; yyHaveZone = 0; if (yyparse () || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1) return -1; tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear; tm.tm_mon = yyMonth - 1 + yyRelMonth; tm.tm_mday = yyDay + yyRelDay; if (yyHaveTime || (yyHaveRel && !yyHaveDate && !yyHaveDay)) { tm.tm_hour = ToHour (yyHour, yyMeridian); if (tm.tm_hour < 0) return -1; tm.tm_min = yyMinutes; tm.tm_sec = yySeconds; } else { tm.tm_hour = tm.tm_min = tm.tm_sec = 0; } tm.tm_hour += yyRelHour; tm.tm_min += yyRelMinutes; tm.tm_sec += yyRelSeconds; tm.tm_isdst = -1; tm0 = tm; Start = mktime (&tm); if (Start == (time_t) -1) { /* Guard against falsely reporting errors near the time_t boundaries when parsing times in other time zones. For example, if the min time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead of UTC, then the min localtime value is 1970-01-01 08:00:00; if we apply mktime to 1970-01-01 00:00:00 we will get an error, so we apply mktime to 1970-01-02 08:00:00 instead and adjust the time zone by 24 hours to compensate. This algorithm assumes that there is no DST transition within a day of the time_t boundaries. */ if (yyHaveZone) { tm = tm0; if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN) { tm.tm_mday++; yyTimezone -= 24 * 60; } else { tm.tm_mday--; yyTimezone += 24 * 60; } Start = mktime (&tm); } if (Start == (time_t) -1) return Start; } if (yyHaveDay && !yyHaveDate) { tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7 + 7 * (yyDayOrdinal - (0 < yyDayOrdinal))); Start = mktime (&tm); if (Start == (time_t) -1) return Start; } if (yyHaveZone) { long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start)); if ((Start + delta < Start) != (delta < 0)) return -1; /* time_t overflow */ Start += delta; } return Start; } #if defined (TEST) /* ARGSUSED */ int main (int ac, char *av[]) { char buff[MAX_BUFF_LEN + 1]; time_t d; (void) printf ("Enter date, or blank line to exit.\n\t> "); (void) fflush (stdout); buff[MAX_BUFF_LEN] = 0; while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0]) { d = get_date (buff, (time_t *) NULL); if (d == -1) (void) printf ("Bad format - couldn't convert.\n"); else (void) printf ("%s", ctime (&d)); (void) printf ("\t> "); (void) fflush (stdout); } exit (0); /* NOTREACHED */ } #endif /* defined (TEST) */ flow-tools-0.68/lib/Makefile.am0000644000076600007660000000114610236441471012057 ## Process this file with automake to produce Makefile.in #AM_CFLAGS=-g -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs #AM_CFLAGS=-O2 AM_CFLAGS=-g -Wall DEFS=-I. -I$(srcdir)/lib include_HEADERS = ftlib.h ftqueue.h radix.h ftpaths.h ftconfig.h lib_LIBRARIES = libft.a libft_a_SOURCES = ftio.c ftswap.c ftencode.c ftdecode.c ftprof.c bit1024.c \ fmt.c support.c ftfile.c fttlv.c ftmap.c ftrec.c fterr.c \ ftchash.c ftsym.c radix.c fttag.c ftfil.c ftstat.c getdate.c ftxfield.c\ ftmask.c ftvar.c ftxlate.c libft_a_LIBADD = @LIBOBJS@ flow-tools-0.68/lib/Makefile.in0000644000076600007660000003416710240411657012077 # Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CRYPTOLIB = @CRYPTOLIB@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ MYSQLCFLAGS = @MYSQLCFLAGS@ MYSQLINCLUDE = @MYSQLINCLUDE@ MYSQLLIB = @MYSQLLIB@ OPENSSLINCLUDE = @OPENSSLINCLUDE@ PACKAGE = @PACKAGE@ PGSQLCFLAGS = @PGSQLCFLAGS@ PGSQLINCLUDE = @PGSQLINCLUDE@ PGSQLLIB = @PGSQLLIB@ RANLIB = @RANLIB@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YLIB = @YLIB@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ #AM_CFLAGS=-g -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs #AM_CFLAGS=-O2 AM_CFLAGS = -g -Wall DEFS = -I. -I$(srcdir)/lib include_HEADERS = ftlib.h ftqueue.h radix.h ftpaths.h ftconfig.h lib_LIBRARIES = libft.a libft_a_SOURCES = ftio.c ftswap.c ftencode.c ftdecode.c ftprof.c bit1024.c \ fmt.c support.c ftfile.c fttlv.c ftmap.c ftrec.c fterr.c \ ftchash.c ftsym.c radix.c fttag.c ftfil.c ftstat.c getdate.c ftxfield.c\ ftmask.c ftvar.c ftxlate.c libft_a_LIBADD = @LIBOBJS@ subdir = lib mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ftconfig.h CONFIG_CLEAN_FILES = ftpaths.h LIBRARIES = $(lib_LIBRARIES) libft_a_AR = $(AR) cru libft_a_DEPENDENCIES = @LIBOBJS@ am_libft_a_OBJECTS = ftio.$(OBJEXT) ftswap.$(OBJEXT) ftencode.$(OBJEXT) \ ftdecode.$(OBJEXT) ftprof.$(OBJEXT) bit1024.$(OBJEXT) \ fmt.$(OBJEXT) support.$(OBJEXT) ftfile.$(OBJEXT) \ fttlv.$(OBJEXT) ftmap.$(OBJEXT) ftrec.$(OBJEXT) fterr.$(OBJEXT) \ ftchash.$(OBJEXT) ftsym.$(OBJEXT) radix.$(OBJEXT) \ fttag.$(OBJEXT) ftfil.$(OBJEXT) ftstat.$(OBJEXT) \ getdate.$(OBJEXT) ftxfield.$(OBJEXT) ftmask.$(OBJEXT) \ ftvar.$(OBJEXT) ftxlate.$(OBJEXT) libft_a_OBJECTS = $(am_libft_a_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/strerror.Po $(DEPDIR)/strsep.Po \ @AMDEP_TRUE@ $(DEPDIR)/strtoull.Po ./$(DEPDIR)/bit1024.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/fmt.Po ./$(DEPDIR)/ftchash.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftdecode.Po ./$(DEPDIR)/ftencode.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/fterr.Po ./$(DEPDIR)/ftfil.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftfile.Po ./$(DEPDIR)/ftio.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftmap.Po ./$(DEPDIR)/ftmask.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftprof.Po ./$(DEPDIR)/ftrec.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftstat.Po ./$(DEPDIR)/ftswap.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftsym.Po ./$(DEPDIR)/fttag.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/fttlv.Po ./$(DEPDIR)/ftvar.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ftxfield.Po ./$(DEPDIR)/ftxlate.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/getdate.Po ./$(DEPDIR)/radix.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/support.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ DIST_SOURCES = $(libft_a_SOURCES) HEADERS = $(include_HEADERS) DIST_COMMON = $(include_HEADERS) Makefile.am Makefile.in ftconfig.h.in \ ftpaths.h.in strerror.c strsep.c strtoull.c SOURCES = $(libft_a_SOURCES) all: ftconfig.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) ftconfig.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/ftconfig.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status lib/ftconfig.h $(srcdir)/ftconfig.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/acconfig.h cd $(top_srcdir) && $(AUTOHEADER) touch $(srcdir)/ftconfig.h.in distclean-hdr: -rm -f ftconfig.h stamp-h1 ftpaths.h: $(top_builddir)/config.status ftpaths.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ AR = ar libLIBRARIES_INSTALL = $(INSTALL_DATA) install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(libLIBRARIES_INSTALL) $$p $(DESTDIR)$(libdir)/$$f"; \ $(libLIBRARIES_INSTALL) $$p $(DESTDIR)$(libdir)/$$f; \ else :; fi; \ done @$(POST_INSTALL) @list='$(lib_LIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ p="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(RANLIB) $(DESTDIR)$(libdir)/$$p"; \ $(RANLIB) $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LIBRARIES)'; for p in $$list; do \ p="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(libdir)/$$p"; \ rm -f $(DESTDIR)$(libdir)/$$p; \ done clean-libLIBRARIES: -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) libft.a: $(libft_a_OBJECTS) $(libft_a_DEPENDENCIES) -rm -f libft.a $(libft_a_AR) libft.a $(libft_a_OBJECTS) $(libft_a_LIBADD) $(RANLIB) libft.a mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strerror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strsep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoull.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bit1024.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftchash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftdecode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftencode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fterr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftfil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftmask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftprof.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftrec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftswap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftsym.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fttag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fttlv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftvar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftxfield.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftxlate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@ distclean-depend: -rm -rf $(DEPDIR) ./$(DEPDIR) .c.o: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< .c.obj: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `cygpath -w $<` CCDEPMODE = @CCDEPMODE@ uninstall-info-am: includeHEADERS_INSTALL = $(INSTALL_HEADER) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(includedir) @list='$(include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f"; \ $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(includedir)/$$f"; \ rm -f $(DESTDIR)$(includedir)/$$f; \ done ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) ftconfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) ftconfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) ftconfig.h installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLIBRARIES mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-includeHEADERS install-exec-am: install-libLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic uninstall-am: uninstall-includeHEADERS uninstall-info-am \ uninstall-libLIBRARIES .PHONY: GTAGS all all-am check check-am clean clean-generic \ clean-libLIBRARIES distclean distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am \ install-includeHEADERS install-info install-info-am \ install-libLIBRARIES install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic tags uninstall uninstall-am \ uninstall-includeHEADERS uninstall-info-am \ uninstall-libLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/lib/radix.c0000644000076600007660000005740107622576545011323 /* * Copyright (c) 1988, 1989, 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 acknowledgment: * 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. * * @(#)radix.c 8.4 (Berkeley) 11/2/94 * */ /* * Routines to build and maintain radix trees for routing lookups. */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #if !defined(sgi) && !defined(__NetBSD__) static char sccsid[] __attribute__((unused)) = "@(#)rdisc.c 8.1 (Berkeley) x/y/95"; #elif defined(__NetBSD__) __RCSID("$NetBSD$"); #endif #ident "$FreeBSD: src/sbin/routed/radix.c,v 1.5 1999/09/05 17:49:11 peter Exp $" #define LOG_ERR 0 #define LOG_DEBUG 0 #define log(x, msg) fterr_warnx(msg); #define panic(s) {log(1,s); exit(1);} #define min(a,b) (((a)<(b))?(a):(b)) static void *rtmalloc(size_t size, const char *msg); static void *rtmalloc(size_t size, const char *msg) { void *p; if (!(p = malloc(size))) fterr_err(1, "malloc(): %s", msg); return p; } /* rtmalloc */ int max_keylen; struct radix_mask *rn_mkfreelist; struct radix_node_head *mask_rnhead; static char *addmask_key; static char normal_chars[] = {0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, -1}; static char *rn_zeros, *rn_ones; #define rn_masktop (mask_rnhead->rnh_treetop) #undef Bcmp #define Bcmp(a, b, l) (l == 0 ? 0 \ : memcmp((caddr_t)(a), (caddr_t)(b), (size_t)l)) static int rn_satisfies_leaf(char *, struct radix_node *, int); /* * The data structure for the keys is a radix tree with one way * branching removed. The index rn_b at an internal node n represents a bit * position to be tested. The tree is arranged so that all descendants * of a node n have keys whose bits all agree up to position rn_b - 1. * (We say the index of n is rn_b.) * * There is at least one descendant which has a one bit at position rn_b, * and at least one with a zero there. * * A route is determined by a pair of key and mask. We require that the * bit-wise logical and of the key and mask to be the key. * We define the index of a route to associated with the mask to be * the first bit number in the mask where 0 occurs (with bit number 0 * representing the highest order bit). * * We say a mask is normal if every bit is 0, past the index of the mask. * If a node n has a descendant (k, m) with index(m) == index(n) == rn_b, * and m is a normal mask, then the route applies to every descendant of n. * If the index(m) < rn_b, this implies the trailing last few bits of k * before bit b are all 0, (and hence consequently true of every descendant * of n), so the route applies to all descendants of the node as well. * * Similar logic shows that a non-normal mask m such that * index(m) <= index(n) could potentially apply to many children of n. * Thus, for each non-host route, we attach its mask to a list at an internal * node as high in the tree as we can go. * * The present version of the code makes use of normal routes in short- * circuiting an explict mask and compare operation when testing whether * a key satisfies a normal route, and also in remembering the unique leaf * that governs a subtree. */ struct radix_node * rn_search(void *v_arg, struct radix_node *head) { struct radix_node *x; caddr_t v; for (x = head, v = v_arg; x->rn_b >= 0;) { if (x->rn_bmask & v[x->rn_off]) x = x->rn_r; else x = x->rn_l; } return (x); } struct radix_node * rn_search_m(void *v_arg, struct radix_node *head, void *m_arg) { struct radix_node *x; caddr_t v = v_arg, m = m_arg; for (x = head; x->rn_b >= 0;) { if ((x->rn_bmask & m[x->rn_off]) && (x->rn_bmask & v[x->rn_off])) x = x->rn_r; else x = x->rn_l; } return x; } int rn_refines(void* m_arg, void *n_arg) { caddr_t m = m_arg, n = n_arg; caddr_t lim, lim2 = lim = n + *(u_char *)n; int longer = (*(u_char *)n++) - (int)(*(u_char *)m++); int masks_are_equal = 1; if (longer > 0) lim -= longer; while (n < lim) { if (*n & ~(*m)) return 0; if (*n++ != *m++) masks_are_equal = 0; } while (n < lim2) if (*n++) return 0; if (masks_are_equal && (longer < 0)) for (lim2 = m - longer; m < lim2; ) if (*m++) return 1; return (!masks_are_equal); } struct radix_node * rn_lookup(void *v_arg, void *m_arg, struct radix_node_head *head) { struct radix_node *x; caddr_t netmask = 0; if (m_arg) { if ((x = rn_addmask(m_arg, 1, head->rnh_treetop->rn_off)) == 0) return (0); netmask = x->rn_key; } x = rn_match(v_arg, head); if (x && netmask) { while (x && x->rn_mask != netmask) x = x->rn_dupedkey; } return x; } static int rn_satisfies_leaf(char *trial, struct radix_node *leaf, int skip) { char *cp = trial, *cp2 = leaf->rn_key, *cp3 = leaf->rn_mask; char *cplim; int length = min(*(u_char *)cp, *(u_char *)cp2); if (cp3 == 0) cp3 = rn_ones; else length = min(length, *(u_char *)cp3); cplim = cp + length; cp3 += skip; cp2 += skip; for (cp += skip; cp < cplim; cp++, cp2++, cp3++) if ((*cp ^ *cp2) & *cp3) return 0; return 1; } struct radix_node * rn_match(void *v_arg, struct radix_node_head *head) { caddr_t v = v_arg; struct radix_node *t = head->rnh_treetop, *x; caddr_t cp = v, cp2; caddr_t cplim; struct radix_node *saved_t, *top = t; int off = t->rn_off, vlen = *(u_char *)cp, matched_off; int test, b, rn_b; /* * Open code rn_search(v, top) to avoid overhead of extra * subroutine call. */ for (; t->rn_b >= 0; ) { if (t->rn_bmask & cp[t->rn_off]) t = t->rn_r; else t = t->rn_l; } /* * See if we match exactly as a host destination * or at least learn how many bits match, for normal mask finesse. * * It doesn't hurt us to limit how many bytes to check * to the length of the mask, since if it matches we had a genuine * match and the leaf we have is the most specific one anyway; * if it didn't match with a shorter length it would fail * with a long one. This wins big for class B&C netmasks which * are probably the most common case... */ if (t->rn_mask) vlen = *(u_char *)t->rn_mask; cp += off; cp2 = t->rn_key + off; cplim = v + vlen; for (; cp < cplim; cp++, cp2++) if (*cp != *cp2) goto on1; /* * This extra grot is in case we are explicitly asked * to look up the default. Ugh! * Or 255.255.255.255 * * In this case, we have a complete match of the key. Unless * the node is one of the roots, we are finished. * If it is the zeros root, then take what we have, prefering * any real data. * If it is the ones root, then pretend the target key was followed * by a byte of zeros. */ if (!(t->rn_flags & RNF_ROOT)) return t; /* not a root */ if (t->rn_dupedkey) { t = t->rn_dupedkey; return t; /* have some real data */ } if (*(cp-1) == 0) return t; /* not the ones root */ b = 0; /* fake a zero after 255.255.255.255 */ goto on2; on1: test = (*cp ^ *cp2) & 0xff; /* find first bit that differs */ for (b = 7; (test >>= 1) > 0;) b--; on2: matched_off = cp - v; b += matched_off << 3; rn_b = -1 - b; /* * If there is a host route in a duped-key chain, it will be first. */ if ((saved_t = t)->rn_mask == 0) t = t->rn_dupedkey; for (; t; t = t->rn_dupedkey) { /* * Even if we don't match exactly as a host, * we may match if the leaf we wound up at is * a route to a net. */ if (t->rn_flags & RNF_NORMAL) { if (rn_b <= t->rn_b) return t; } else if (rn_satisfies_leaf(v, t, matched_off)) { return t; } } t = saved_t; /* start searching up the tree */ do { struct radix_mask *m; t = t->rn_p; if ((m = t->rn_mklist)) { /* * If non-contiguous masks ever become important * we can restore the masking and open coding of * the search and satisfaction test and put the * calculation of "off" back before the "do". */ do { if (m->rm_flags & RNF_NORMAL) { if (rn_b <= m->rm_b) return (m->rm_leaf); } else { off = min(t->rn_off, matched_off); x = rn_search_m(v, t, m->rm_mask); while (x && x->rn_mask != m->rm_mask) x = x->rn_dupedkey; if (x && rn_satisfies_leaf(v, x, off)) return x; } } while ((m = m->rm_mklist)); } } while (t != top); return 0; } #ifdef RN_DEBUG int rn_nodenum; struct radix_node *rn_clist; int rn_saveinfo; int rn_debug = 1; #endif struct radix_node * rn_newpair(void *v, int b, struct radix_node nodes[2]) { struct radix_node *tt = nodes, *t = tt + 1; t->rn_b = b; t->rn_bmask = 0x80 >> (b & 7); t->rn_l = tt; t->rn_off = b >> 3; tt->rn_b = -1; tt->rn_key = (caddr_t)v; tt->rn_p = t; tt->rn_flags = t->rn_flags = RNF_ACTIVE; #ifdef RN_DEBUG tt->rn_info = rn_nodenum++; t->rn_info = rn_nodenum++; tt->rn_twin = t; tt->rn_ybro = rn_clist; rn_clist = tt; #endif return t; } struct radix_node * rn_insert(void* v_arg, struct radix_node_head *head, int *dupentry, struct radix_node nodes[2]) { caddr_t v = v_arg; struct radix_node *top = head->rnh_treetop; int head_off = top->rn_off, vlen = (int)*((u_char *)v); struct radix_node *t = rn_search(v_arg, top); caddr_t cp = v + head_off; int b; struct radix_node *tt; /* * Find first bit at which v and t->rn_key differ */ { caddr_t cp2 = t->rn_key + head_off; int cmp_res; caddr_t cplim = v + vlen; while (cp < cplim) if (*cp2++ != *cp++) goto on1; /* handle adding 255.255.255.255 */ if (!(t->rn_flags & RNF_ROOT) || *(cp2-1) == 0) { *dupentry = 1; return t; } on1: *dupentry = 0; cmp_res = (cp[-1] ^ cp2[-1]) & 0xff; for (b = (cp - v) << 3; cmp_res; b--) cmp_res >>= 1; } { struct radix_node *p, *x = top; cp = v; do { p = x; if (cp[x->rn_off] & x->rn_bmask) x = x->rn_r; else x = x->rn_l; } while ((unsigned)b > (unsigned)x->rn_b); #ifdef RN_DEBUG if (rn_debug) log(LOG_DEBUG, "rn_insert: Going In:\n"), traverse(p); #endif t = rn_newpair(v_arg, b, nodes); tt = t->rn_l; if ((cp[p->rn_off] & p->rn_bmask) == 0) p->rn_l = t; else p->rn_r = t; x->rn_p = t; t->rn_p = p; /* frees x, p as temp vars below */ if ((cp[t->rn_off] & t->rn_bmask) == 0) { t->rn_r = x; } else { t->rn_r = tt; t->rn_l = x; } #ifdef RN_DEBUG if (rn_debug) log(LOG_DEBUG, "rn_insert: Coming Out:\n"), traverse(p); #endif } return (tt); } struct radix_node * rn_addmask(void *n_arg, int search, int skip) { caddr_t netmask = (caddr_t)n_arg; struct radix_node *x; caddr_t cp, cplim; int b = 0, mlen, j; int maskduplicated, m0, isnormal; struct radix_node *saved_x; static int last_zeroed = 0; if ((mlen = *(u_char *)netmask) > max_keylen) mlen = max_keylen; if (skip == 0) skip = 1; if (mlen <= skip) return (mask_rnhead->rnh_nodes); if (skip > 1) Bcopy(rn_ones + 1, addmask_key + 1, skip - 1); if ((m0 = mlen) > skip) Bcopy(netmask + skip, addmask_key + skip, mlen - skip); /* * Trim trailing zeroes. */ for (cp = addmask_key + mlen; (cp > addmask_key) && cp[-1] == 0;) cp--; mlen = cp - addmask_key; if (mlen <= skip) { if (m0 >= last_zeroed) last_zeroed = mlen; return (mask_rnhead->rnh_nodes); } if (m0 < last_zeroed) Bzero(addmask_key + m0, last_zeroed - m0); *addmask_key = last_zeroed = mlen; x = rn_search(addmask_key, rn_masktop); if (Bcmp(addmask_key, x->rn_key, mlen) != 0) x = 0; if (x || search) return (x); x = (struct radix_node *)rtmalloc(max_keylen + 2*sizeof(*x), "rn_addmask"); saved_x = x; Bzero(x, max_keylen + 2 * sizeof (*x)); netmask = cp = (caddr_t)(x + 2); Bcopy(addmask_key, cp, mlen); x = rn_insert(cp, mask_rnhead, &maskduplicated, x); if (maskduplicated) { log(LOG_ERR, "rn_addmask: mask impossibly already in tree"); Free(saved_x); return (x); } /* * Calculate index of mask, and check for normalcy. */ cplim = netmask + mlen; isnormal = 1; for (cp = netmask + skip; (cp < cplim) && *(u_char *)cp == 0xff;) cp++; if (cp != cplim) { for (j = 0x80; (j & *cp) != 0; j >>= 1) b++; if (*cp != normal_chars[b] || cp != (cplim - 1)) isnormal = 0; } b += (cp - netmask) << 3; x->rn_b = -1 - b; if (isnormal) x->rn_flags |= RNF_NORMAL; return (x); } static int /* XXX: arbitrary ordering for non-contiguous masks */ rn_lexobetter(void *m_arg, void *n_arg) { u_char *mp = m_arg, *np = n_arg, *lim; if (*mp > *np) return 1; /* not really, but need to check longer one first */ if (*mp == *np) for (lim = mp + *mp; mp < lim;) if (*mp++ > *np++) return 1; return 0; } static struct radix_mask * rn_new_radix_mask(struct radix_node *tt, struct radix_mask *next) { struct radix_mask *m; MKGet(m); if (m == 0) { log(LOG_ERR, "Mask for route not entered\n"); return (0); } Bzero(m, sizeof *m); m->rm_b = tt->rn_b; m->rm_flags = tt->rn_flags; if (tt->rn_flags & RNF_NORMAL) m->rm_leaf = tt; else m->rm_mask = tt->rn_mask; m->rm_mklist = next; tt->rn_mklist = m; return m; } struct radix_node * rn_addroute(void *v_arg, void *n_arg, struct radix_node_head *head, struct radix_node treenodes[2]) { caddr_t v = (caddr_t)v_arg, netmask = (caddr_t)n_arg; struct radix_node *t, *x = 0, *tt; struct radix_node *saved_tt, *top = head->rnh_treetop; short b = 0, b_leaf = 0; int keyduplicated; caddr_t mmask; struct radix_mask *m, **mp; /* * In dealing with non-contiguous masks, there may be * many different routes which have the same mask. * We will find it useful to have a unique pointer to * the mask to speed avoiding duplicate references at * nodes and possibly save time in calculating indices. */ if (netmask) { if ((x = rn_addmask(netmask, 0, top->rn_off)) == 0) return (0); b_leaf = x->rn_b; b = -1 - x->rn_b; netmask = x->rn_key; } /* * Deal with duplicated keys: attach node to previous instance */ saved_tt = tt = rn_insert(v, head, &keyduplicated, treenodes); if (keyduplicated) { for (t = tt; tt; t = tt, tt = tt->rn_dupedkey) { if (tt->rn_mask == netmask) return (0); if (netmask == 0 || (tt->rn_mask && ((b_leaf < tt->rn_b) || /* index(netmask) > node */ rn_refines(netmask, tt->rn_mask) || rn_lexobetter(netmask, tt->rn_mask)))) break; } /* * If the mask is not duplicated, we wouldn't * find it among possible duplicate key entries * anyway, so the above test doesn't hurt. * * We sort the masks for a duplicated key the same way as * in a masklist -- most specific to least specific. * This may require the unfortunate nuisance of relocating * the head of the list. */ if (tt == saved_tt) { struct radix_node *xx = x; /* link in at head of list */ (tt = treenodes)->rn_dupedkey = t; tt->rn_flags = t->rn_flags; tt->rn_p = x = t->rn_p; if (x->rn_l == t) x->rn_l = tt; else x->rn_r = tt; saved_tt = tt; x = xx; } else { (tt = treenodes)->rn_dupedkey = t->rn_dupedkey; t->rn_dupedkey = tt; } #ifdef RN_DEBUG t=tt+1; tt->rn_info = rn_nodenum++; t->rn_info = rn_nodenum++; tt->rn_twin = t; tt->rn_ybro = rn_clist; rn_clist = tt; #endif tt->rn_key = (caddr_t) v; tt->rn_b = -1; tt->rn_flags = RNF_ACTIVE; } /* * Put mask in tree. */ if (netmask) { tt->rn_mask = netmask; tt->rn_b = x->rn_b; tt->rn_flags |= x->rn_flags & RNF_NORMAL; } t = saved_tt->rn_p; if (keyduplicated) goto on2; b_leaf = -1 - t->rn_b; if (t->rn_r == saved_tt) x = t->rn_l; else x = t->rn_r; /* Promote general routes from below */ if (x->rn_b < 0) { for (mp = &t->rn_mklist; x; x = x->rn_dupedkey) if (x->rn_mask && (x->rn_b >= b_leaf) && x->rn_mklist == 0) { if ((*mp = m = rn_new_radix_mask(x, 0))) mp = &m->rm_mklist; } } else if (x->rn_mklist) { /* * Skip over masks whose index is > that of new node */ for (mp = &x->rn_mklist; (m = *mp); mp = &m->rm_mklist) if (m->rm_b >= b_leaf) break; t->rn_mklist = m; *mp = 0; } on2: /* Add new route to highest possible ancestor's list */ if ((netmask == 0) || (b > t->rn_b )) return tt; /* can't lift at all */ b_leaf = tt->rn_b; do { x = t; t = t->rn_p; } while (b <= t->rn_b && x != top); /* * Search through routes associated with node to * insert new route according to index. * Need same criteria as when sorting dupedkeys to avoid * double loop on deletion. */ for (mp = &x->rn_mklist; (m = *mp); mp = &m->rm_mklist) { if (m->rm_b < b_leaf) continue; if (m->rm_b > b_leaf) break; if (m->rm_flags & RNF_NORMAL) { mmask = m->rm_leaf->rn_mask; if (tt->rn_flags & RNF_NORMAL) { log(LOG_ERR, "Non-unique normal route, mask not entered"); return tt; } } else mmask = m->rm_mask; if (mmask == netmask) { m->rm_refs++; tt->rn_mklist = m; return tt; } if (rn_refines(netmask, mmask) || rn_lexobetter(netmask, mmask)) break; } *mp = rn_new_radix_mask(tt, *mp); return tt; } struct radix_node * rn_delete(void *v_arg, void *netmask_arg, struct radix_node_head *head) { struct radix_node *t, *p, *x, *tt; struct radix_mask *m, *saved_m, **mp; struct radix_node *dupedkey, *saved_tt, *top; caddr_t v, netmask; int b, head_off, vlen; v = v_arg; netmask = netmask_arg; x = head->rnh_treetop; tt = rn_search(v, x); head_off = x->rn_off; vlen = *(u_char *)v; saved_tt = tt; top = x; if (tt == 0 || Bcmp(v + head_off, tt->rn_key + head_off, vlen - head_off)) return (0); /* * Delete our route from mask lists. */ if (netmask) { if ((x = rn_addmask(netmask, 1, head_off)) == 0) return (0); netmask = x->rn_key; while (tt->rn_mask != netmask) if ((tt = tt->rn_dupedkey) == 0) return (0); } if (tt->rn_mask == 0 || (saved_m = m = tt->rn_mklist) == 0) goto on1; if (tt->rn_flags & RNF_NORMAL) { if (m->rm_leaf != tt || m->rm_refs > 0) { log(LOG_ERR, "rn_delete: inconsistent annotation\n"); return 0; /* dangling ref could cause disaster */ } } else { if (m->rm_mask != tt->rn_mask) { log(LOG_ERR, "rn_delete: inconsistent annotation\n"); goto on1; } if (--m->rm_refs >= 0) goto on1; } b = -1 - tt->rn_b; t = saved_tt->rn_p; if (b > t->rn_b) goto on1; /* Wasn't lifted at all */ do { x = t; t = t->rn_p; } while (b <= t->rn_b && x != top); for (mp = &x->rn_mklist; (m = *mp); mp = &m->rm_mklist) if (m == saved_m) { *mp = m->rm_mklist; MKFree(m); break; } if (m == 0) { log(LOG_ERR, "rn_delete: couldn't find our annotation\n"); if (tt->rn_flags & RNF_NORMAL) return (0); /* Dangling ref to us */ } on1: /* * Eliminate us from tree */ if (tt->rn_flags & RNF_ROOT) return (0); #ifdef RN_DEBUG /* Get us out of the creation list */ for (t = rn_clist; t && t->rn_ybro != tt; t = t->rn_ybro) {} if (t) t->rn_ybro = tt->rn_ybro; #endif t = tt->rn_p; if ((dupedkey = saved_tt->rn_dupedkey)) { if (tt == saved_tt) { x = dupedkey; x->rn_p = t; if (t->rn_l == tt) t->rn_l = x; else t->rn_r = x; } else { for (x = p = saved_tt; p && p->rn_dupedkey != tt;) p = p->rn_dupedkey; if (p) p->rn_dupedkey = tt->rn_dupedkey; else log(LOG_ERR, "rn_delete: couldn't find us\n"); } t = tt + 1; if (t->rn_flags & RNF_ACTIVE) { #ifndef RN_DEBUG *++x = *t; p = t->rn_p; #else b = t->rn_info; *++x = *t; t->rn_info = b; p = t->rn_p; #endif if (p->rn_l == t) p->rn_l = x; else p->rn_r = x; x->rn_l->rn_p = x; x->rn_r->rn_p = x; } goto out; } if (t->rn_l == tt) x = t->rn_r; else x = t->rn_l; p = t->rn_p; if (p->rn_r == t) p->rn_r = x; else p->rn_l = x; x->rn_p = p; /* * Demote routes attached to us. */ if (t->rn_mklist) { if (x->rn_b >= 0) { for (mp = &x->rn_mklist; (m = *mp);) mp = &m->rm_mklist; *mp = t->rn_mklist; } else { /* If there are any key,mask pairs in a sibling duped-key chain, some subset will appear sorted in the same order attached to our mklist */ for (m = t->rn_mklist; m && x; x = x->rn_dupedkey) if (m == x->rn_mklist) { struct radix_mask *mm = m->rm_mklist; x->rn_mklist = 0; if (--(m->rm_refs) < 0) MKFree(m); m = mm; } if (m) log(LOG_ERR, "rn_delete: Orphaned Mask"); } } /* * We may be holding an active internal node in the tree. */ x = tt + 1; if (t != x) { #ifndef RN_DEBUG *t = *x; #else b = t->rn_info; *t = *x; t->rn_info = b; #endif t->rn_l->rn_p = t; t->rn_r->rn_p = t; p = x->rn_p; if (p->rn_l == x) p->rn_l = t; else p->rn_r = t; } out: tt->rn_flags &= ~RNF_ACTIVE; tt[1].rn_flags &= ~RNF_ACTIVE; return (tt); } int rn_walktree(struct radix_node_head *h, int (*f)(struct radix_node *, struct walkarg *), struct walkarg *w) { int error; struct radix_node *base, *next; struct radix_node *rn = h->rnh_treetop; /* * This gets complicated because we may delete the node * while applying the function f to it, so we need to calculate * the successor node in advance. */ /* First time through node, go left */ while (rn->rn_b >= 0) rn = rn->rn_l; for (;;) { base = rn; /* If at right child go back up, otherwise, go right */ while (rn->rn_p->rn_r == rn && (rn->rn_flags & RNF_ROOT) == 0) rn = rn->rn_p; /* Find the next *leaf* since next node might vanish, too */ for (rn = rn->rn_p->rn_r; rn->rn_b >= 0;) rn = rn->rn_l; next = rn; /* Process leaves */ while ((rn = base)) { base = rn->rn_dupedkey; if (!(rn->rn_flags & RNF_ROOT) && (error = (*f)(rn, w))) return (error); } rn = next; if (rn->rn_flags & RNF_ROOT) return (0); } /* NOTREACHED */ } int rn_inithead(void **head, int off) { struct radix_node_head *rnh; struct radix_node *t, *tt, *ttt; if (*head) return (1); rnh = (struct radix_node_head *)rtmalloc(sizeof(*rnh), "rn_inithead"); Bzero(rnh, sizeof (*rnh)); *head = rnh; t = rn_newpair(rn_zeros, off, rnh->rnh_nodes); ttt = rnh->rnh_nodes + 2; t->rn_r = ttt; t->rn_p = t; tt = t->rn_l; tt->rn_flags = t->rn_flags = RNF_ROOT | RNF_ACTIVE; tt->rn_b = -1 - off; *ttt = *tt; ttt->rn_key = rn_ones; rnh->rnh_addaddr = rn_addroute; rnh->rnh_deladdr = rn_delete; rnh->rnh_matchaddr = rn_match; rnh->rnh_lookup = rn_lookup; rnh->rnh_walktree = rn_walktree; rnh->rnh_treetop = t; return (1); } void rn_init(void) { char *cp, *cplim; if (max_keylen == 0) { printf("rn_init: radix functions require max_keylen be set\n"); return; } rn_zeros = (char *)rtmalloc(3 * max_keylen, "rn_init"); Bzero(rn_zeros, 3 * max_keylen); rn_ones = cp = rn_zeros + max_keylen; addmask_key = cplim = rn_ones + max_keylen; while (cp < cplim) *cp++ = -1; if (rn_inithead((void **)&mask_rnhead, 0) == 0) panic("rn_init 2"); } flow-tools-0.68/lib/radix.h0000644000076600007660000001475707460365442011327 /* * Copyright (c) 1988, 1989, 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 acknowledgment: * 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. * * @(#)radix.h 8.2 (Berkeley) 10/31/94 * * $FreeBSD: src/sbin/routed/radix.h,v 1.4 1999/08/28 00:14:17 peter Exp $ */ #ifndef __RADIX_H_ #define __RADIX_H_ /* ANSI */ #ifndef __P #define __P(protos) protos #endif #include struct radix_sockaddr_in { u_char sin_len; u_char sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct walkarg; /* * Radix search tree node layout. */ struct radix_node { struct radix_mask *rn_mklist; /* list of masks contained in subtree */ struct radix_node *rn_p; /* parent */ short rn_b; /* bit offset; -1-index(netmask) */ char rn_bmask; /* node: mask for bit test*/ u_char rn_flags; /* enumerated next */ #define RNF_NORMAL 1 /* leaf contains normal route */ #define RNF_ROOT 2 /* leaf is root leaf for tree */ #define RNF_ACTIVE 4 /* This node is alive (for rtfree) */ union { struct { /* leaf only data: */ caddr_t rn_Key; /* object of search */ caddr_t rn_Mask; /* netmask, if present */ struct radix_node *rn_Dupedkey; } rn_leaf; struct { /* node only data: */ int rn_Off; /* where to start compare */ struct radix_node *rn_L;/* progeny */ struct radix_node *rn_R;/* progeny */ }rn_node; } rn_u; #ifdef RN_DEBUG int rn_info; struct radix_node *rn_twin; struct radix_node *rn_ybro; #endif }; #define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey #define rn_key rn_u.rn_leaf.rn_Key #define rn_mask rn_u.rn_leaf.rn_Mask #define rn_off rn_u.rn_node.rn_Off #define rn_l rn_u.rn_node.rn_L #define rn_r rn_u.rn_node.rn_R /* * Annotations to tree concerning potential routes applying to subtrees. */ extern struct radix_mask { short rm_b; /* bit offset; -1-index(netmask) */ char rm_unused; /* cf. rn_bmask */ u_char rm_flags; /* cf. rn_flags */ struct radix_mask *rm_mklist; /* more masks to try */ union { caddr_t rmu_mask; /* the mask */ struct radix_node *rmu_leaf; /* for normal routes */ } rm_rmu; int rm_refs; /* # of references to this struct */ } *rn_mkfreelist; #define rm_mask rm_rmu.rmu_mask #define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */ #define MKGet(m) {\ if (rn_mkfreelist) {\ m = rn_mkfreelist; \ rn_mkfreelist = (m)->rm_mklist; \ } else \ m = (struct radix_mask *)rtmalloc(sizeof(*(m)), "MKGet"); }\ #define MKFree(m) { (m)->rm_mklist = rn_mkfreelist; rn_mkfreelist = (m);} struct radix_node_head { struct radix_node *rnh_treetop; int rnh_addrsize; /* permit, but not require fixed keys */ int rnh_pktsize; /* permit, but not require fixed keys */ struct radix_node *(*rnh_addaddr) /* add based on sockaddr */ __P((void *v, void *mask, struct radix_node_head *head, struct radix_node nodes[])); struct radix_node *(*rnh_addpkt) /* add based on packet hdr */ __P((void *v, void *mask, struct radix_node_head *head, struct radix_node nodes[])); struct radix_node *(*rnh_deladdr) /* remove based on sockaddr */ __P((void *v, void *mask, struct radix_node_head *head)); struct radix_node *(*rnh_delpkt) /* remove based on packet hdr */ __P((void *v, void *mask, struct radix_node_head *head)); struct radix_node *(*rnh_matchaddr) /* locate based on sockaddr */ __P((void *v, struct radix_node_head *head)); struct radix_node *(*rnh_lookup) /* locate based on sockaddr */ __P((void *v, void *mask, struct radix_node_head *head)); struct radix_node *(*rnh_matchpkt) /* locate based on packet hdr */ __P((void *v, struct radix_node_head *head)); int (*rnh_walktree) /* traverse tree */ (struct radix_node_head *head, int (*f)(struct radix_node *, struct walkarg *), struct walkarg *w); struct radix_node rnh_nodes[3]; /* empty tree for common case */ }; #define Bcmp(a, b, n) memcmp(((void *)(a)), ((void *)(b)), (n)) #define Bcopy(a, b, n) memmove(((void *)(b)), ((void *)(a)), (size_t)(n)) #define Bzero(p, n) memset((void *)(p), 0, (size_t)(n)); #define Free(p) free((void *)p); void rn_init __P((void)); int rn_inithead __P((void **, int)); int rn_refines __P((void *, void *)); int rn_walktree __P((struct radix_node_head *, int (*)__P((struct radix_node *, struct walkarg *)), struct walkarg *)); struct radix_node *rn_addmask __P((void *, int, int)), *rn_addroute __P((void *, void *, struct radix_node_head *, struct radix_node [2])), *rn_delete __P((void *, void *, struct radix_node_head *)), *rn_insert __P((void *, struct radix_node_head *, int *, struct radix_node [2])), *rn_match __P((void *, struct radix_node_head *)), *rn_newpair __P((void *, int, struct radix_node[2])), *rn_search __P((void *, struct radix_node *)), *rn_search_m __P((void *, struct radix_node *, void *)); struct radix_node *rn_lookup __P((void *, void *, struct radix_node_head *)); #endif /* __RADIX_H_ */ flow-tools-0.68/lib/strerror.c0000644000076600007660000000304607622576553012071 /* * Copyright (c) 1988 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted provided * that: (1) source distributions retain this entire copyright notice and * comment, and (2) distributions including binaries display the following * acknowledgement: ``This product includes software developed by the * University of California, Berkeley and its contributors'' in the * documentation or other materials provided with the distribution and in * all advertising materials mentioning features or use of this software. * 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strerror.c 5.4 (Berkeley) 6/24/90"; #endif /* LIBC_SCCS and not lint */ #include "ftconfig.h" #include "ftlib.h" #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif char * strerror(errnum) int errnum; { extern int sys_nerr; extern char *sys_errlist[]; static char ebuf[40]; /* 64-bit number + slop */ if ((unsigned int)errnum < sys_nerr) return(sys_errlist[errnum]); (void)sprintf(ebuf, "Unknown error: %d", errnum); return(ebuf); } flow-tools-0.68/lib/strsep.c0000644000076600007660000000567707622576561011542 /*- * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include "ftconfig.h" #include "ftlib.h" #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ /* * Get next token from string *stringp, where tokens are possibly-empty * strings separated by characters from delim. * * Writes NULs into the string at *stringp to end tokens. * delim need not remain constant from call to call. * On return, *stringp points past the last NUL written (if there might * be further tokens), or is NULL (if there are definitely no more tokens). * * If *stringp is NULL, strsep returns NULL. */ char * strsep(stringp, delim) register char **stringp; register const char *delim; { register char *s; register const char *spanp; register int c, sc; char *tok; if ((s = *stringp) == NULL) return (NULL); for (tok = s;;) { c = *s++; spanp = delim; do { if ((sc = *spanp++) == c) { if (c == 0) s = NULL; else s[-1] = 0; *stringp = s; return (tok); } } while (sc != 0); } /* NOTREACHED */ } flow-tools-0.68/lib/strtoull.c0000644000076600007660000000723607532607277012102 /*- * Copyright (c) 1992, 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 defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strtouq.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ #ifndef lint static const char rcsid[] = "$FreeBSD: src/lib/libc/stdlib/strtoull.c,v 1.5.2.1 2001/03/02 09:45:20 obrien Exp $"; #endif #include #include #include #include #include #ifndef ULLONG_MAX #define ULLONG_MAX 0xffffffffffffffffULL #endif /* ULLONG_MAX */ /* * Convert a string to an unsigned long long integer. * * Ignores `locale' stuff. Assumes that the upper and lower case * alphabets and digits are each contiguous. */ unsigned long long strtoull(nptr, endptr, base) const char *nptr; char **endptr; register int base; { register const char *s = nptr; register unsigned long long acc; register unsigned char c; register unsigned long long qbase, cutoff; register int neg, any, cutlim; /* * See strtoq for comments as to the logic used. */ s = nptr; do { c = *s++; } while (isspace(c)); if (c == '-') { neg = 1; c = *s++; } else { neg = 0; if (c == '+') c = *s++; } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { c = s[1]; s += 2; base = 16; } if (base == 0) base = c == '0' ? 8 : 10; qbase = (unsigned)base; cutoff = (unsigned long long)ULLONG_MAX / qbase; cutlim = (unsigned long long)ULLONG_MAX % qbase; for (acc = 0, any = 0;; c = *s++) { if (!isascii(c)) break; if (isdigit(c)) c -= '0'; else if (isalpha(c)) c -= isupper(c) ? 'A' - 10 : 'a' - 10; else break; if (c >= base) break; if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) any = -1; else { any = 1; acc *= qbase; acc += c; } } if (any < 0) { acc = ULLONG_MAX; errno = ERANGE; } else if (neg) acc = -acc; if (endptr != 0) *endptr = (char *)(any ? s - 1 : nptr); return (acc); } flow-tools-0.68/lib/support.c0000644000076600007660000003272607622602463011720 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: support.c,v 1.35 2003/02/13 02:38:43 maf Exp $ */ #include "ftconfig.h" #include "ftlib.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif #ifndef IN_CLASSD_NET #define IN_CLASSD_NET 0xf0000000 #endif /* * lookup table for mask length to mask * * (first 8) * 128.0.0.0 192.0.0.0 224.0.0.0 240.0.0.0 * 248.0.0.0 252.0.0.0 254.0.0.0 255.0.0.0 * */ u_int32 mask_lookup[] = { 0xffffffff, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff }; /* * function ipv4_len2mask * * returns the 32 bit network mask given a length * */ u_int32 ipv4_len2mask(u_int8 len) { return mask_lookup[(len > 32) ? 0 : len]; } /* * function: load_lookup * * loads a list of , seperated numbers into an array * ! will invert the list * - can be used as a range operator * * example * 1,5-10 == 1,5,6,7,8,9,10 * !1 == all numbers in the range except for 1 */ int load_lookup(char *s, int size, char *list) { char *p; int j, k; unsigned i, i2; p = s; while ((*p == ' ') || (*p == '\t')) ++p; if (*p == '!') { for (k = 0; k < size; ++k) list[k] = 1; k = 0; ++p; } else { for (k = 0; k < size; ++k) list[k] = 0; k = 1; } while (*p) { i = (unsigned)strtol(p, (char**)0L, 0); if (i >= size) return -1; list[i] = k; /* skip to , or - */ while (*p && (*p != ',') && (*p != '-')) ++p; if (*p == '-') { ++p; i2 = (unsigned)strtol(p, (char**)0L, 0); if (i2 >= size) return -1; for (j = i; j <= i2; ++j) list[j] = k; /* skip to , or - */ while (*p && (*p != ',') && (*p != '-')) ++p; } /* skip past , and - */ while (*p && ((*p == ',') || (*p == '-'))) ++p; } /* *p */ return 0; } /* load_lookup */ /* * function: scan_peeri * * scan peer identifier * * scan 1.2.3.4/1.2.3.4/nn[/nnl] * locip remip port ttl * into ftpeer struct */ struct ftpeeri scan_peeri(char *input) { struct ftpeeri ftpi; char *s, *s2, *locip, *remip, *dstport, *ttl; bzero (&ftpi, sizeof ftpi); ftpi.dst_port = FT_PORT; locip = remip = dstport = ttl = (char*)0L; if (!(s = malloc(strlen(input)+1))) { fterr_warn("malloc"); return ftpi; } /* keep track of original pointer to free */ s2 = s; strcpy(s, input); locip = s; if (*s) { } for (; *s && *s != '/'; ++s); if (*s) { *s = 0; remip = ++s; } for (; *s && *s != '/'; ++s); if (*s) { *s = 0; dstport = ++s; } for (; *s && *s != '/'; ++s); if (*s) { *s = 0; ttl = ++s; } if (locip) ftpi.loc_ip = scan_ip(locip); if (remip) ftpi.rem_ip = scan_ip(remip); if (dstport) ftpi.dst_port = atoi(dstport); if (ttl) ftpi.ttl = atoi(ttl); free (s2); return ftpi; } /* scan_peer */ struct ip_prefix scan_ip_prefix(char *input) { struct ip_prefix p; char *s, *s2; int has_slash; has_slash = 0; bzero(&p, sizeof p); for (s = input; *s; ++s) if (*s == '/') { has_slash = 1; break; } if (!has_slash) { p.addr = scan_ip(input); if ((IN_CLASSA(p.addr)) && (p.addr == (p.addr & IN_CLASSA_NET))) p.len = 8; else if ((IN_CLASSB(p.addr)) && (p.addr == (p.addr & IN_CLASSB_NET))) p.len = 16; else if ((IN_CLASSC(p.addr)) && (p.addr == (p.addr & IN_CLASSC_NET))) p.len = 24; else if ((IN_CLASSD(p.addr)) && (p.addr == (p.addr & IN_CLASSD_NET))) p.len = 28; else p.len = 32; } else { if (!(s = malloc(strlen(input)+1))) { fterr_warn("malloc"); return p; } s2 = s; strcpy(s, input); for (; *s2 && *s2 != '/'; ++s2); if (*s2) { *s2 = 0; ++s2; } p.addr = scan_ip(s); p.len = atoi(s2); free (s); } if (p.len > 32) p.len = 32; return p; } /* scan_ip_prefix */ /* * function: scan_ip * * IP address in string S is converted to a u_long * (borrowed from tcpdump) * * left shift any partial dotted quads, ie 10 is 0x0a000000 not 0x0a * so scan_ip_prefix() works for standard prefix notation, ie 10/8 */ u_long scan_ip(char *s) { struct hostent *he; struct in_addr *ina; u_long addr = 0; u_int n; int dns, shift; char *t; /* if there is anything ascii in here, this may be a hostname */ for (dns = 0, t = s; *t; ++t) { if (islower((int)*t) || isupper((int)*t)) { dns = 1; break; } } if (dns) { if (!(he = gethostbyname(s))) goto numeric; if (he->h_addrtype != AF_INET) goto numeric; if (he->h_length != sizeof (u_int32)) goto numeric; ina = (struct in_addr*)*he->h_addr_list; return (ntohl(ina->s_addr)); } /* dns */ shift = 0; numeric: while (1) { /* n is the nibble */ n = 0; /* nibble's are . bounded */ while (*s && (*s != '.') && (*s != ' ') && (*s != '\t')) n = n * 10 + *s++ - '0'; /* shift in the nibble */ addr <<=8; addr |= n & 0xff; ++shift; /* return on end of string */ if ((!*s) || (*s == ' ') || (*s == '\t')) goto ndone; /* skip the . */ ++s; } /* forever */ ndone: for (; shift < 4; ++shift) addr <<=8; return addr; } /* scan_ip */ /* * function: print_3float * * format a floating point # to stdout w. 1 trailing space * */ void print_3float(float f) { char s[10], *c; sprintf(s, "%-3.3f", f); c = s + 1; printf("%s ", c); } /* print_3float */ /* * function: print_3float2 * * format a floating point # to stdout w. 2 trailing spaces * */ void print_3float2(float f) { char s[10], *c; sprintf(s, "%-3.3f", f); c = s + 1; printf("%s ", c); } /* print_3float */ /* adapted from dd */ int64 scan_size(char *val) { u_int64 num, t; char *expr; if ((num = strtoul(val, &expr, 0)) == ULONG_MAX) goto erange; switch(*expr) { case 0: break; case 'b': t = num; num *= 512; if (t > num) goto erange; break; case 'G': t = num; num *= 1024; num *= 1024; num *= 1024; if (t > num) goto erange; break; case 'K': t = num; num *= 1024; if (t > num) goto erange; break; case 'M': t = num; num *= 1024; num *= 1024; if (t > num) goto erange; break; default: goto erange; } return num; erange: return (int64)-1; } /* scan_size */ #if HAVE_SIGACTION /* * Function: mysignal() * POSIX style signals. * * signal() has different semantics over different versions of unix. * this emulates signal() with sigaction() to behave like BSD. * * From Stevens Advanced Programming in the UNIX environment * */ void *mysignal(int signo, void *func) { struct sigaction act, oact; act.sa_handler = (void*)func; sigemptyset(&act.sa_mask); act.sa_flags = 0; if (signo == SIGALRM) { #ifdef SA_INTERRUPT act.sa_flags |= SA_INTERRUPT; /* SunOS */ #endif } else { #ifdef SA_RESTART act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */ #endif } if (sigaction(signo, &act, &oact) < 0) return SIG_ERR; return oact.sa_handler; } /* signal */ #else /* SIGACTION */ void *mysignal(int signo, void *func) { return signal(signo, func) }; #endif /* SIGACTION */ int unlink_pidfile(int pid, char *file, u_int16 port) { char *c; int ret; if (!(c = (char*)malloc(strlen(file)+16))) return -1; sprintf(c, "%s.%d", file, (int)port); if ((ret = unlink(c)) < 0) fterr_warn("unlink(%s)", c); free (c); return ret; } /* unlink_pidfile */ int write_pidfile(int pid, char *file, u_int16 port) { int fd, len; char str[16], *c; if (!(c = (char*)malloc(strlen(file)+16))) return -1; sprintf(c, "%s.%d", file, (int)port); len = sprintf(str, "%u\n", (unsigned)pid); if ((fd = open(c, O_WRONLY|O_CREAT|O_TRUNC, 0644)) < 0 ) { fterr_warn("open(%s)", c); free (c); return -1; } if (write(fd, str, len) != len) { fterr_warn("write(%s)", c); close (fd); free (c); return -1; } return close (fd); } /* write_pidfile */ /* * function get_gmtoff * * return offset from GMT in seconds * * based on compute_tz() code by Michael R. Elkins */ int get_gmtoff(time_t t) { struct tm *tmp, local, gmt; time_t t2; int yday; tmp = gmtime(&t); bcopy(tmp, &gmt, sizeof gmt); tmp = localtime(&t); bcopy(tmp, &local, sizeof local); /* calculate difference in seconds */ t2 = (local.tm_hour - gmt.tm_hour) * 60; /* to minutes */ t2 += (local.tm_min - gmt.tm_min); /* minutes */ t2 *= 60; /* to seconds */ /* diff day */ yday = (local.tm_yday - gmt.tm_yday); if ((yday == -1) || (yday > 1)) t2 -= 86400; /* sub one day */ else if (yday != 0) t2 += 86400; /* add one day */ return t2; } /* get_gmtoff */ /* * function: bigsockbuf * * There is no portable way to determine the max send and receive buffers * that can be set for a socket, so guess then decrement that guess by * 2K until the call succeeds. If n > 1MB then the decrement by .5MB * instead. * * returns size or -1 for error */ int bigsockbuf(int fd, int dir, int size) { int n, tries; /* initial size */ n = size; tries = 0; while (n > 4096) { if (setsockopt(fd, SOL_SOCKET, dir, (char*)&n, sizeof (n)) < 0) { /* anything other than no buffers available is fatal */ if (errno != ENOBUFS) { fterr_warn("setsockopt(size=%d)", n); return -1; } /* try a smaller value */ if (n > 1024*1024) /* most systems not > 256K bytes w/o tweaking */ n -= 1024*1024; else n -= 2048; ++tries; } else { fterr_info("setsockopt(size=%d)", n); return n; } } /* while */ /* no increase in buffer size */ return 0; } /* bigsockbuf */ /* * function: mkpath * * make the path to a filename. * * returns 0: ok * -1 fail * */ int mkpath(const char *path, mode_t mode) { char *c, *cs, *c2, *p, *p2; int len, ret, done, nodir; len = strlen(path); c = (char*)0L; ret = -1; done = 0; if (!(c = (char*)malloc(len+1))) { fterr_warn("malloc()"); goto mkpath_out; } if (!(c2 = (char*)malloc(len+1))) { fterr_warn("malloc()"); goto mkpath_out; } cs = c; strcpy(c, path); c2[0] = 0; while (c && !done) { /* break out pathname components in p */ if (!(p = strsep(&c, "/"))) break; /* end of string? */ if (!c) break; for (done = 1, p2 = c; p2 && *p2; ++p2) if (*p2 == '/') { done = 0; break; } /* build path */ strcat(c2, p); nodir = 0; if (p[0] == '.' && p[1] == 0) nodir = 1; if (p[0] == '.' && p[1] == '.' && p[2] == 0) nodir = 1; if (p[0] == 0) nodir = 1; if (!nodir) { if (mkdir(c2, mode) < 0) { if (errno != EEXIST) { fterr_warn("mkdir(%s)", c2); goto mkpath_out; } } } /* nodir */ strcat(c2, "/"); } ret = 0; mkpath_out: if (cs) free(cs); if (c2) free(c2); return ret; } /* mkpath */ /* * function: udp_cksum * * calculate checksum of IP pseudo header plus UDP header * */ int udp_cksum(struct ip *ip, struct udphdr *up, int len) { u_int16 *word; int sum; word = (u_int16*)&ip->ip_src.s_addr; sum = *word++; sum += *word; word = (u_int16*)&ip->ip_dst.s_addr; sum += *word++; sum += *word; sum += htons(len); sum += IPPROTO_UDP<<8; word = (u_short*)up; sum += *word++; sum += *word++; sum += *word++; return sum; } /* udp_cksum */ flow-tools-0.68/Makefile.am0000644000076600007660000000033610240411430011274 SUBDIRS = lib src bin configs docs EXTRA_DIST = utils/* \ SECURITY contrib/* configs/* dist-hook: rm -rf $(distdir)/contrib/CVS rm -rf $(distdir)/configs/CVS rm -rf $(distdir)/utils/CVS rm $(distdir)/lib/ftconfig.h flow-tools-0.68/Makefile.in0000644000076600007660000003200210240411627011310 # Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CRYPTOLIB = @CRYPTOLIB@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ MYSQLCFLAGS = @MYSQLCFLAGS@ MYSQLINCLUDE = @MYSQLINCLUDE@ MYSQLLIB = @MYSQLLIB@ OPENSSLINCLUDE = @OPENSSLINCLUDE@ PACKAGE = @PACKAGE@ PGSQLCFLAGS = @PGSQLCFLAGS@ PGSQLINCLUDE = @PGSQLINCLUDE@ PGSQLLIB = @PGSQLLIB@ RANLIB = @RANLIB@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YLIB = @YLIB@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ SUBDIRS = lib src bin configs docs EXTRA_DIST = utils/* \ SECURITY contrib/* configs/* subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/ftconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \ uninstall-info-recursive all-recursive install-data-recursive \ install-exec-recursive installdirs-recursive install-recursive \ uninstall-recursive check-recursive installcheck-recursive DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS TODO acconfig.h aclocal.m4 compile configure \ configure.in depcomp install-sh mdate-sh missing mkinstalldirs DIST_SUBDIRS = $(SUBDIRS) all: all-recursive .SUFFIXES: am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = . distdir = $(PACKAGE)-$(VERSION) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } GZIP_ENV = --best distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkinstalldirs) $(distdir)/configs $(distdir)/contrib $(distdir)/docs $(distdir)/lib $(distdir)/utils @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="${top_distdir}" distdir="$(distdir)" \ dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist $(am__remove_distdir) GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/=build mkdir $(distdir)/=inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ && cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ find $$dc_install_base -type f -print ; \ exit 1; } >&2 ) \ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ && rm -f $(distdir).tar.gz \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @echo "$(distdir).tar.gz is ready for distribution" | \ sed 'h;s/./=/g;p;x;p;x' distcleancheck: distclean if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf autom4te.cache maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \ clean-generic clean-recursive dist dist-all dist-gzip distcheck \ distclean distclean-generic distclean-recursive distclean-tags \ distcleancheck distdir dvi dvi-am dvi-recursive info info-am \ info-recursive install install-am install-data install-data-am \ install-data-recursive install-exec install-exec-am \ install-exec-recursive install-info install-info-am \ install-info-recursive install-man install-recursive \ install-strip installcheck installcheck-am installdirs \ installdirs-am installdirs-recursive maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive mostlyclean \ mostlyclean-generic mostlyclean-recursive tags tags-recursive \ uninstall uninstall-am uninstall-info-am \ uninstall-info-recursive uninstall-recursive dist-hook: rm -rf $(distdir)/contrib/CVS rm -rf $(distdir)/configs/CVS rm -rf $(distdir)/utils/CVS rm $(distdir)/lib/ftconfig.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/mdate-sh0000755000076600007660000000560307470616164010720 #!/bin/sh # Get modification time of a file or directory and pretty-print it. # Copyright 1995, 1996, 1997 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Get the extended ls output of the file or directory. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. if ls -L /dev/null 1>/dev/null 2>&1; then set - x`ls -L -l -d $1` else set - x`ls -l -d $1` fi # The month is at least the fourth argument # (3 shifts here, the next inside the loop). shift shift shift # Find the month. Next argument is day, followed by the year or time. month= until test $month do shift case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done day=$2 # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year flow-tools-0.68/missing0000644000076600007660000002405007470616076010663 #! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1Help2man' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar ${1+"$@"} && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar ${1+"$@"} && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 flow-tools-0.68/mkinstalldirs0000755000076600007660000000350307501513500012054 #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.2 2002/06/12 00:35:12 maf Exp $ errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 3 # End: # mkinstalldirs ends here flow-tools-0.68/NEWS0000644000076600007660000000000007241333623007741 flow-tools-0.68/README0000644000076600007660000000132307463274222010140 flow-tools is a set of programs for processing and managing NetFlow exports from Cisco and Juniper routers. The software was originally written by Mark Fullmer while working at Ohio State University. Steve Romig and the OSU network security group have added documentation, functionality, and provided feedback. OARnet and the Ohio ITEC have recently funded my time to add version 8 PDU support and various other features. For installation notes and a quick start please see INSTALL. If you are using flow-tools please subscribe to the mailing list by sending a message to flow-tools-request@splintered.net flow-tools is currently available at http://www.splintered.net/sw/flow-tools Mark Fullmer maf@splintered.net flow-tools-0.68/SECURITY0000644000076600007660000000554407253000135010446 Flows exported from a router are encapsulated in a UDP datagram. Each {engine_type,engine_id} pair generate a unique sequence number. The sequence number is the total flows generated by the linecard. There are no cryptographic checksums and no retransmissions for lost packets. The sequence number is 32 bits, engine_type and engine_id are both 8 bits. This leads to 65536 unique 32 bit sequence numbers. Flow-tools will log out of sequence flow export packets. It will not reject out of sequence, or attempt to filter duplicate exports. Logging is done via syslog for flow-capture and stderr for flow-receive. Additionally each flow file will record the number of lost flows and corrupt packets received during the capture period. Loss of flow exports is usually a result of resource exhaustion on the router, link to the flow collector, or the flow collector itself. "show ip flow export" on the router will list some sources of lost flows. Check output drops on the interface directly connected to the flow collector. On 7500's the interface command "transmit-buffers backing-store" can reduce output drops. Use netstat -s on the flow collector to display UDP packets dropped due to full socket buffers. This is usually an indication of an overworked server. The sequence numbers change fast enough on a busy router that an attacker would probably need to snoop the path between the exporter and the router to successfully inject packets for a valid engine. Without the attacker causing the real exports from the router to be dropped flow-tools would detect the duplicate sequence number and log an error. Unfortunately there is nothing preventing an attacker from using an {engine_type,engine_id} pair that is not in use by the router to inject their own flows. There is currently no way to know which {engine_type,engine_id} pairs the router will use. To defend against an attacker injecting bogus flow exports the path between the router and flow collector must prevent source IP address spoofing, either with access lists or unicast RPF checks. Flow-capture requires the source IP of the exporter to be defined and will count any packets received from a different IP in the pkts_corrupt counter. flow-receive does not require the exporter to be defined for debugging purposes, although after the first flow is received all further flows must use the same source IP. Configure 'ip flow-export source loopback0' and set a loopback0 address on the router to ensure the same IP address is always used when exporting flows. Another option the attacker has is to disable or disrupt the flow collection server. This could be done by packet flooding the server or the path to it, resulting in lost flow exports. Ideally the flow collector would be directly connected to the router on a dedicated interface with strict access lists only permitting the flow exports and administrative traffic. flow-tools-0.68/src/0000777000076600007660000000000010240421704010116 5flow-tools-0.68/src/acl2.c0000644000076600007660000003241107642622725011042 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: acl2.c,v 1.10 2003/04/02 18:03:01 maf Exp $ */ #include "ftconfig.h" #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #ifdef NEED_MALLOC_H #include #endif /* NEED_MALLOC_H */ #include "acl2.h" struct acl_list acl_list; #define E acl_list.acl_ip_ext[index] #ifdef YYDEBUG main() { extern struct acl_list acl_list; extern FILE *yyin; /* init */ bzero(&acl_list, sizeof acl_list); yyin = stdin; while (!feof(yyin)) { yyparse(); } acl_dump(acl_list); acl_delete_list(&acl_list); return 0; } /* main */ #endif /* YYDEBUG */ #ifdef FOO int main (int argc, char **argv) { struct acl_list acl_list; struct acl_ip_std_entry std_entry; int x; /* init fterr */ fterr_setid(argv[0]); /* init */ bzero(&acl_list, sizeof acl_list); bzero(&std_entry, sizeof std_entry); x = acl_create(&acl_list, "99", ACL_TYPE_STD); acl_add_line_std(acl_list, x, std_entry); acl_add_line_std(acl_list, x, std_entry); x = acl_create(&acl_list, "name1", ACL_TYPE_STD); std_entry.flag = ACL_FLAG_PERMIT; std_entry.src_addr = 0xFFFFFFFF; std_entry.src_mask = 0x00FF00FF; acl_add_line_std(acl_list, x, std_entry); acl_add_line_std(acl_list, x, std_entry); x = acl_create(&acl_list, "name2", ACL_TYPE_STD); acl_add_line_std(acl_list, x, std_entry); acl_add_line_std(acl_list, x, std_entry); x = acl_create(&acl_list, "1", ACL_TYPE_STD); std_entry.flag = ACL_FLAG_PERMIT; std_entry.src_addr = 0x11111111; std_entry.src_mask = 0x01010101; acl_add_line_std(acl_list, x, std_entry); acl_add_line_std(acl_list, x, std_entry); acl_dump(acl_list); acl_delete_list(&acl_list); return 0; } #endif /* FOO */ /* * create an access list, return the index on creation, * or -1 for error */ int acl_create(struct acl_list *acl_list, char *name, int type) { int x, new; new = 0; /* not a new entry */ /* if this name allready exists, then return the index */ if ((x = acl_find(*acl_list, name)) != -1) return x; if ((type != ACL_TYPE_STD) && (type != ACL_TYPE_EXT)) return -1; /* initial? */ if (!acl_list->num) { if (!(acl_list->names = (struct acl_names*) malloc(sizeof (struct acl_names)))) { fterr_warn("malloc(acl_list->names)"); return -1; } if (!(acl_list->acl_ip_std = (struct acl_ip_std*) malloc(sizeof (struct acl_ip_std)))) { fterr_warn("malloc(acl_list->acl_ip_std)"); return -1; } if (!(acl_list->acl_ip_ext = (struct acl_ip_ext*) malloc(sizeof (struct acl_ip_ext)))) { fterr_warn("malloc(acl_list->acl_ip_ext)"); return -1; } ++acl_list->num; if (type == ACL_TYPE_STD) ++ acl_list->num_std; else if (type == ACL_TYPE_EXT) ++ acl_list->num_ext; } else { /* add */ if (!(acl_list->names = (struct acl_names*) realloc(acl_list->names, (++acl_list->num) * sizeof (struct acl_names)))) { fterr_warn("realloc(acl_list->names)"); return -1; } if (type == ACL_TYPE_STD) { if (!(acl_list->acl_ip_std = (struct acl_ip_std*) realloc(acl_list->acl_ip_std, (++acl_list->num_std) * sizeof (struct acl_ip_std)))) { fterr_warn("realloc(acl_list->ip_std)"); return -1; } } else if (type == ACL_TYPE_EXT) { if (!(acl_list->acl_ip_ext = (struct acl_ip_ext*) realloc(acl_list->acl_ip_ext, (++acl_list->num_ext) * sizeof (struct acl_ip_ext)))) { fterr_warn("realloc(acl_list->ip_ext)"); return -1; } } } acl_list->names[acl_list->num-1].name = strdup(name); acl_list->names[acl_list->num-1].type = type; if (type == ACL_TYPE_STD) { acl_list->names[acl_list->num-1].num = acl_list->num_std -1; acl_list->acl_ip_std[acl_list->num_std-1].num_lines = 0; } else if (type == ACL_TYPE_EXT) { acl_list->names[acl_list->num-1].num = acl_list->num_ext -1; acl_list->acl_ip_ext[acl_list->num_ext-1].num_lines = 0; } return acl_list->num-1; } /* acl_create */ /* * free all memory associated with the acl's */ int acl_delete_list(struct acl_list acl_list) { int x; for (x = 0; x < acl_list.num; ++x) { free(acl_list.names[x].name); } for (x = 0; x < acl_list.num_std; ++x) free(acl_list.acl_ip_std[x].line); for (x = 0; x < acl_list.num_ext; ++x) free(acl_list.acl_ip_ext[x].line); if (acl_list.names) free (acl_list.names); if (acl_list.acl_ip_std) free (acl_list.acl_ip_std); if (acl_list.acl_ip_ext) free (acl_list.acl_ip_ext); return 0; } /* acl_delete_list */ /* * print out all access lists */ void acl_dump(struct acl_list acl_list) { int x; for (x = 0; x < acl_list.num; ++x) { if (acl_list.names[x].type == ACL_TYPE_STD) { acl_dump_std(acl_list, x); fprintf(stderr, "\n"); } else if (acl_list.names[x].type == ACL_TYPE_EXT) { acl_dump_ext(acl_list, x); fprintf(stderr, "\n"); } } /* for */ } /* acl_dump */ /* * print out standard acl */ void acl_dump_std(struct acl_list acl_list, int x) { char fmt_buf[32], fmt_buf2[32], fmt_buf3[32]; int y, i, numeric; /* named or numeric access list? */ if (atoi(acl_list.names[x].name)) numeric = 1; else numeric = 0; i = acl_list.names[x].num; for (y = 0; y < acl_list.acl_ip_std[i].num_lines; ++y) { fmt_ipv4(fmt_buf, acl_list.acl_ip_std[i].line[y].src_addr, FMT_JUST_LEFT); fmt_ipv4(fmt_buf2, acl_list.acl_ip_std[i].line[y].src_mask, FMT_JUST_LEFT); fmt_uint64(fmt_buf3, acl_list.acl_ip_std[i].line[y].matches, FMT_JUST_LEFT); if (numeric) fprintf(stderr, "access-list %s %s %s %s", acl_list.names[x].name, (acl_list.acl_ip_std[i].line[y].flag & ACL_FLAG_PERMIT) ? "permit" : "deny", fmt_buf, fmt_buf2); else fprintf(stderr, "access-list standard %s %s %s %s", acl_list.names[x].name, (acl_list.acl_ip_std[i].line[y].flag & ACL_FLAG_PERMIT) ? "permit" : "deny", fmt_buf, fmt_buf2); if (acl_list.acl_ip_std[i].line[y].matches) fprintf(stderr, " (%s matches)", fmt_buf3); fprintf(stderr, "\n"); } /* for y */ } /* acl_dump_std */ /* * print out extended acl */ void acl_dump_ext(struct acl_list acl_list, int x) { char fmt_buf[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; int y, i, numeric; /* named or numeric access list? */ if (atoi(acl_list.names[x].name)) numeric = 1; else numeric = 0; i = acl_list.names[x].num; for (y = 0; y < acl_list.acl_ip_ext[i].num_lines; ++y) { fmt_ipv4(fmt_buf, acl_list.acl_ip_ext[i].line[y].src_addr, FMT_JUST_LEFT); fmt_ipv4(fmt_buf2, acl_list.acl_ip_ext[i].line[y].src_mask, FMT_JUST_LEFT); fmt_ipv4(fmt_buf3, acl_list.acl_ip_ext[i].line[y].dst_addr, FMT_JUST_LEFT); fmt_ipv4(fmt_buf4, acl_list.acl_ip_ext[i].line[y].dst_mask, FMT_JUST_LEFT); if (numeric) fprintf(stderr, "access-list %s %s xx %s %s %s %s\n", acl_list.names[x].name, (acl_list.acl_ip_ext[i].line[y].flag & ACL_FLAG_PERMIT) ? "permit" : "deny", fmt_buf, fmt_buf2, fmt_buf3, fmt_buf4); else fprintf(stderr, "access-list extended %s %s xx %s %s %s %s\n", acl_list.names[x].name, (acl_list.acl_ip_ext[i].line[y].flag & ACL_FLAG_PERMIT) ? "permit" : "deny", fmt_buf, fmt_buf2, fmt_buf3, fmt_buf4); } /* for y */ } /* acl_dump_ext */ /* * return the index into acl_list that is "name", or * -1 for not found */ int acl_find(struct acl_list acl_list, char *name) { int x; for (x = 0; x < acl_list.num; ++x) if (!strcmp(acl_list.names[x].name, name)) return x; return -1; } /* acl_find */ /* * add a filter list entry to a standard acl * returns -1 for error */ int acl_add_line_std(struct acl_list acl_list, int acl_index, struct acl_ip_std_entry acl_ip_std_entry) { int index, line; /* index for this acl */ index = acl_list.names[acl_index].num; /* initial? */ if (!acl_list.acl_ip_std[index].num_lines) { if (!(acl_list.acl_ip_std[index].line = (struct acl_ip_std_entry*) malloc(sizeof (struct acl_ip_std_entry)))) { fterr_warn("malloc(acl_list.acl_ip_std[index].line)"); return -1; } ++ acl_list.acl_ip_std[index].num_lines; } else { if (!(acl_list.acl_ip_std[index].line = (struct acl_ip_std_entry*) realloc(acl_list.acl_ip_std[index].line, ++ acl_list.acl_ip_std[index].num_lines * sizeof (struct acl_ip_std_entry)))) { fterr_warn("realloc(acl_list.acl_ip_std[index].line)"); return -1; } } line = acl_list.acl_ip_std[index].num_lines - 1; bcopy(&acl_ip_std_entry, &acl_list.acl_ip_std[index].line[line], sizeof acl_ip_std_entry); return 0; } /* acl_add_line_std */ /* * add a filter list entry to a extended acl * returns -1 for error */ int acl_add_line_ext(struct acl_list acl_list, int acl_index, struct acl_ip_ext_entry acl_ip_ext_entry) { int index, line; /* index for this acl */ index = acl_list.names[acl_index].num; /* initial? */ if (!acl_list.acl_ip_ext[index].num_lines) { if (!(acl_list.acl_ip_ext[index].line = (struct acl_ip_ext_entry*) malloc(sizeof (struct acl_ip_ext_entry)))) { fterr_warn("malloc(acl_list.acl_ip_ext[index].line)"); return -1; } ++ acl_list.acl_ip_ext[index].num_lines; } else { if (!(acl_list.acl_ip_ext[index].line = (struct acl_ip_ext_entry*) realloc(acl_list.acl_ip_ext[index].line, ++ acl_list.acl_ip_ext[index].num_lines * sizeof (struct acl_ip_ext_entry)))) { fterr_warn("realloc(acl_list.acl_ip_ext[index].line)"); return -1; } } line = acl_list.acl_ip_ext[index].num_lines - 1; bcopy(&acl_ip_ext_entry, &acl_list.acl_ip_ext[index].line[line], sizeof acl_ip_ext_entry); return 0; } /* acl_add_line_ext */ /* * evaluate a standard access list with an IP address * * returns 0 for permit, 1 for deny */ int acl_eval_std(struct acl_list acl_list, int index, u_int32 ip) { int x; #ifdef DEBUG extern int debug; char fmt_buf[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; #endif /* DEUBG */ for (x = 0; x < acl_list.acl_ip_std[index].num_lines; ++x) { #ifdef DEBUG if (debug > 5) { fmt_ipv4(fmt_buf, acl_list.acl_ip_std[index].line[x].src_addr, FMT_JUST_LEFT); fmt_ipv4(fmt_buf2, acl_list.acl_ip_std[index].line[x].src_mask, FMT_JUST_LEFT); fmt_ipv4(fmt_buf3, ip, FMT_JUST_LEFT); fterr_info("ip=%s src_addr=%s src_mask=%s", fmt_buf3, fmt_buf, fmt_buf2); } #endif /* DEBUG */ if ((ip & (~acl_list.acl_ip_std[index].line[x].src_mask)) == (acl_list.acl_ip_std[index].line[x].src_addr & (~acl_list.acl_ip_std[index].line[x].src_mask))) { /* it matched */ #ifdef DEBUG ++ acl_list.acl_ip_std[index].line[x].matches; #endif /* DEBUG */ if (acl_list.acl_ip_std[index].line[x].flag & ACL_FLAG_PERMIT) return 0; else return 1; } } /* all others are denied */ return 1; } /* acl_eval_std */ /* * evaluate a extended access list * * returns 0 for permit, 1 for deny */ int acl_eval_ext(struct acl_list acl_list, int index, struct acl_ip_ext_entry entry) { int x; /* for each line in the acl */ for (x = 0; x < acl_list.acl_ip_ext[index].num_lines; ++x) { if ( /* match IP protocol */ ((E.line[x].flag & ACL_FLAG_IP_ALL) || (entry.protocol == E.line[x].protocol)) && /* match src IP */ ((entry.src_addr & ~E.line[x].src_mask) == E.line[x].src_addr) && /* match dst IP */ ((entry.dst_addr & ~E.line[x].dst_mask) == E.line[x].dst_addr) ) { /* it matched */ #ifdef DEBUG ++ acl_list.acl_ip_std[index].line[x].matches; #endif /* DEBUG */ if (E.line[x].flag & ACL_FLAG_PERMIT) return 0; else return 1; } } /* all others are denied */ return 1; } /* acl_eval_ext */ flow-tools-0.68/src/acl2.h0000644000076600007660000001122707431366750011050 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: acl2.h,v 1.6 2002/02/10 03:50:00 maf Exp $ */ #include #include #define ACL_FLAG_PERMIT 0x1 /* else deny */ #define ACL_FLAG_SRC_PORT 0x2 /* do source port filtering */ #define ACL_FLAG_DST_PORT 0x4 /* do destination port filtering */ #define ACL_FLAG_ESTABLISHED 0x8 /* do "established" filtering */ #define ACL_FLAG_PRECEDENCE 0x10 /* do "precedence" filtering */ #define ACL_FLAG_TOS 0x20 /* do "tos" filtering */ #define ACL_FLAG_IP_ALL 0x40 /* all ip protocols */ #define ACL_OP_LT 1 #define ACL_OP_GT 1 #define ACL_OP_EQ 1 #define ACL_OP_NEQ 1 #define ACL_OP_RANGE 1 #define ACL_TYPE_STD 1 #define ACL_TYPE_EXT 2 struct acl_list { int num; /* number of entries */ int num_std; /* number of standard acl entries */ int num_ext; /* number of extended acl entries */ struct acl_names *names; /* name of acl (num of these) */ struct acl_ip_std *acl_ip_std; /* list of standard acl's (not || names) */ /* num_std of these */ struct acl_ip_ext *acl_ip_ext; /* list of extended acl's (not || names) */ /* num_ext of these */ }; struct acl_names { int num; /* index into standard or extended list */ char *name; /* name of this acl */ int type; /* ACL_TYPE_* */ }; struct acl_ip_std { int num_lines; /* # of allocated entries */ struct acl_ip_std_entry *line; }; struct acl_ip_std_entry { u_int32 src_addr; /* source address */ u_int32 src_mask; /* source address mask */ u_int64 matches; /* # of matches */ int flag; /* permit/deny */ }; struct acl_ip_ext { int num_lines; /* # of allocated entries */ struct acl_ip_ext_entry *line; }; struct acl_ip_ext_entry { u_int8 protocol; /* IP protocol */ u_int8 precedence; /* IP precedence */ u_int8 tos; /* IP type of service */ u_int8 type; u_int8 type_code; u_int8 message; u_int8 src_op; u_int8 dst_op; u_int32 src_addr; /* source address */ u_int32 src_mask; /* source address mask */ u_int16 src_port; /* source port */ u_int16 src_port2; /* source port (end of range) */ u_int32 dst_addr; /* destination address */ u_int32 dst_mask; /* destinan address mask */ u_int16 dst_port; /* destination port */ u_int16 dst_port2; /* destination port (end of range) */ u_int64 matches; /* # of matches */ int flag; /* permit/deny, etc */ }; int acl_create(struct acl_list *acl_list, char *name, int type); int acl_delete_list(struct acl_list acl_list); void acl_dump(struct acl_list acl_list); void acl_dump_std(struct acl_list acl_list, int x); void acl_dump_ext(struct acl_list acl_list, int x); int acl_find(struct acl_list acl_list, char *name); int acl_add_line_std(struct acl_list acl_list, int acl_index, struct acl_ip_std_entry acl_ip_std_entry); int acl_add_line_ext(struct acl_list acl_list, int acl_index, struct acl_ip_ext_entry acl_ip_ext_entry); int acl_eval_std(struct acl_list acl_list, int index, u_int32 ip); int acl_eval_ext(struct acl_list acl_list, int index, struct acl_ip_ext_entry entry); flow-tools-0.68/src/acllex.c0000644000076600007660000013001107642622023011453 /* A lexical scanner generated by flex */ /* Scanner skeleton version: * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ * $FreeBSD: src/usr.bin/lex/flex.skl,v 1.4 1999/10/27 07:56:44 obrien Exp $ */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #include /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ #ifdef c_plusplus #ifndef __cplusplus #define __cplusplus #endif #endif #ifdef __cplusplus #include #include /* Use prototypes in function declarations. */ #define YY_USE_PROTOS /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_PROTOS #define YY_USE_CONST #endif /* __STDC__ */ #endif /* ! __cplusplus */ #ifdef __TURBOC__ #pragma warn -rch #pragma warn -use #include #include #define YY_USE_CONST #define YY_USE_PROTOS #endif #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #define YY_BUF_SIZE 16384 typedef struct yy_buffer_state *YY_BUFFER_STATE; extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 /* The funky do-while in the following #define is used to turn the definition * int a single C statement (which needs a semi-colon terminator). This * avoids problems with code like: * * if ( condition_holds ) * yyless( 5 ); * else * do_something_else(); * * Prior to using the do-while the compiler would get upset at the * "else" because it interpreted the "if" statement as being all * done when it reached the ';' after the yyless() call. */ /* Return all but the first 'n' matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ *yy_cp = yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, yytext_ptr ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ typedef unsigned int yy_size_t; struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; static YY_BUFFER_STATE yy_current_buffer = 0; /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". */ #define YY_CURRENT_BUFFER yy_current_buffer /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 1; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart YY_PROTO(( FILE *input_file )); void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); void yy_load_buffer_state YY_PROTO(( void )); YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); static void *yy_flex_alloc YY_PROTO(( yy_size_t )); static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (yy_current_buffer->yy_at_bol) typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state YY_PROTO(( void )); static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); static int yy_get_next_buffer YY_PROTO(( void )); static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yytext_ptr = yy_bp; \ yyleng = (int) (yy_cp - yy_bp); \ yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; #define YY_NUM_RULES 30 #define YY_END_OF_BUFFER 31 static yyconst short int yy_accept[119] = { 0, 0, 0, 31, 29, 3, 1, 2, 6, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 2, 0, 6, 28, 28, 28, 28, 28, 22, 28, 28, 21, 28, 28, 28, 11, 28, 20, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 10, 28, 28, 28, 28, 28, 28, 18, 23, 28, 28, 28, 28, 12, 17, 13, 0, 28, 8, 28, 28, 9, 15, 14, 28, 28, 28, 28, 0, 28, 28, 28, 0, 28, 28, 24, 28, 0, 28, 28, 28, 0, 7, 28, 28, 5, 0, 28, 28, 0, 28, 28, 0, 28, 26, 0, 28, 27, 0, 28, 19, 28, 0, 28, 16, 4, 25, 0 } ; static yyconst int yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 9, 1, 10, 11, 12, 13, 14, 8, 15, 16, 17, 8, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 8, 8, 28, 29, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst int yy_meta[30] = { 0, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst short int yy_base[122] = { 0, 0, 0, 146, 338, 338, 338, 0, 24, 25, 26, 30, 40, 33, 34, 62, 41, 44, 66, 47, 57, 79, 63, 0, 133, 54, 0, 72, 80, 86, 87, 90, 94, 95, 99, 102, 103, 107, 110, 116, 121, 125, 126, 129, 132, 135, 140, 144, 148, 152, 147, 156, 157, 164, 168, 169, 172, 176, 180, 181, 184, 190, 197, 198, 201, 202, 206, 130, 207, 210, 213, 214, 218, 221, 222, 226, 230, 231, 239, 161, 240, 244, 247, 103, 248, 254, 257, 261, 117, 268, 269, 273, 89, 272, 276, 282, 106, 87, 285, 286, 76, 289, 294, 68, 295, 305, 68, 306, 310, 53, 313, 338, 314, 26, 317, 322, 338, 325, 338, 334, 42, 33 } ; static yyconst short int yy_def[122] = { 0, 118, 1, 118, 118, 118, 118, 119, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 118, 118, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 120, 120, 120, 118, 120, 120, 120, 120, 118, 120, 120, 120, 118, 120, 120, 120, 118, 118, 120, 120, 118, 120, 120, 118, 120, 120, 118, 120, 120, 118, 120, 118, 120, 118, 120, 120, 118, 120, 0, 118, 118, 118 } ; static yyconst short int yy_nxt[368] = { 0, 4, 5, 6, 7, 4, 4, 8, 9, 4, 10, 9, 9, 11, 12, 13, 14, 15, 16, 9, 17, 9, 18, 9, 19, 20, 21, 22, 9, 9, 24, 25, 26, 26, 26, 26, 26, 26, 28, 26, 26, 26, 26, 26, 30, 27, 29, 26, 26, 26, 26, 26, 116, 26, 26, 35, 26, 44, 41, 34, 24, 25, 39, 31, 26, 32, 26, 40, 33, 26, 26, 26, 26, 26, 36, 26, 48, 37, 113, 26, 42, 26, 111, 45, 38, 109, 26, 26, 26, 26, 43, 46, 50, 26, 26, 26, 26, 26, 106, 26, 47, 26, 26, 26, 26, 103, 26, 52, 26, 26, 26, 26, 26, 96, 26, 51, 26, 26, 100, 26, 53, 54, 56, 26, 96, 26, 57, 55, 26, 92, 26, 58, 26, 26, 26, 26, 26, 79, 26, 26, 49, 26, 26, 61, 26, 63, 118, 26, 59, 26, 60, 26, 62, 26, 26, 26, 26, 26, 67, 49, 118, 68, 64, 26, 26, 26, 26, 88, 79, 65, 66, 26, 118, 26, 70, 26, 26, 26, 26, 26, 118, 26, 71, 26, 118, 26, 69, 26, 26, 26, 26, 26, 118, 26, 73, 72, 118, 26, 74, 26, 118, 118, 76, 75, 26, 26, 26, 26, 26, 26, 26, 26, 77, 26, 26, 26, 26, 26, 78, 26, 26, 26, 26, 26, 81, 26, 83, 26, 26, 26, 26, 26, 80, 26, 82, 26, 118, 26, 26, 26, 26, 118, 118, 84, 85, 86, 26, 26, 26, 26, 118, 26, 87, 26, 26, 26, 26, 26, 118, 118, 91, 26, 90, 26, 26, 89, 26, 94, 26, 118, 26, 95, 118, 97, 93, 26, 26, 26, 26, 26, 26, 26, 26, 26, 118, 26, 98, 99, 118, 26, 101, 26, 26, 26, 26, 26, 26, 118, 26, 105, 118, 26, 26, 26, 26, 118, 102, 108, 118, 107, 104, 110, 26, 26, 26, 26, 118, 26, 112, 26, 26, 26, 26, 26, 26, 118, 26, 114, 115, 26, 117, 26, 26, 118, 26, 23, 118, 23, 3, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118 } ; static yyconst short int yy_chk[368] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 9, 10, 9, 10, 121, 11, 10, 11, 13, 14, 13, 14, 11, 120, 10, 12, 16, 12, 16, 17, 113, 17, 19, 14, 19, 19, 17, 13, 25, 25, 16, 12, 20, 12, 20, 16, 12, 15, 22, 15, 22, 18, 15, 18, 22, 15, 109, 27, 18, 27, 106, 20, 15, 103, 21, 28, 21, 28, 18, 21, 28, 29, 30, 29, 30, 31, 100, 31, 21, 32, 33, 32, 33, 97, 34, 30, 34, 35, 36, 35, 36, 96, 37, 29, 37, 38, 92, 38, 32, 33, 36, 39, 88, 39, 37, 35, 40, 83, 40, 39, 41, 42, 41, 42, 43, 67, 43, 44, 24, 44, 45, 43, 45, 45, 3, 46, 41, 46, 42, 47, 44, 47, 50, 48, 50, 48, 49, 49, 0, 50, 46, 51, 52, 51, 52, 79, 79, 47, 48, 53, 0, 53, 53, 54, 55, 54, 55, 56, 0, 56, 54, 57, 0, 57, 52, 58, 59, 58, 59, 60, 0, 60, 56, 55, 0, 61, 57, 61, 0, 0, 61, 60, 62, 63, 62, 63, 64, 65, 64, 65, 62, 66, 68, 66, 68, 69, 63, 69, 70, 71, 70, 71, 70, 72, 73, 72, 73, 74, 73, 74, 68, 75, 71, 75, 0, 76, 77, 76, 77, 0, 0, 75, 76, 77, 78, 80, 78, 80, 0, 81, 78, 81, 82, 84, 82, 84, 0, 0, 82, 85, 81, 85, 86, 80, 86, 85, 87, 0, 87, 87, 0, 89, 84, 89, 90, 89, 90, 93, 91, 93, 91, 94, 0, 94, 90, 91, 0, 95, 94, 95, 98, 99, 98, 99, 101, 0, 101, 99, 0, 102, 104, 102, 104, 0, 95, 102, 0, 101, 98, 104, 105, 107, 105, 107, 0, 108, 107, 108, 110, 112, 110, 112, 114, 0, 114, 110, 112, 115, 114, 115, 117, 0, 117, 119, 0, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "acllex.l" #define INITIAL 0 #line 2 "acllex.l" #include "ftconfig.h" #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "acl2.h" #include "aclyacc.h" #line 495 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap YY_PROTO(( void )); #else extern int yywrap YY_PROTO(( void )); #endif #endif #ifndef YY_NO_UNPUT static void yyunput YY_PROTO(( int c, char *buf_ptr )); #endif #ifndef yytext_ptr static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen YY_PROTO(( yyconst char * )); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput YY_PROTO(( void )); #else static int input YY_PROTO(( void )); #endif #endif #if YY_STACK_USED static int yy_start_stack_ptr = 0; static int yy_start_stack_depth = 0; static int *yy_start_stack = 0; #ifndef YY_NO_PUSH_STATE static void yy_push_state YY_PROTO(( int new_state )); #endif #ifndef YY_NO_POP_STATE static void yy_pop_state YY_PROTO(( void )); #endif #ifndef YY_NO_TOP_STATE static int yy_top_state YY_PROTO(( void )); #endif #else #define YY_NO_PUSH_STATE 1 #define YY_NO_POP_STATE 1 #define YY_NO_TOP_STATE 1 #endif #ifdef YY_MALLOC_DECL YY_MALLOC_DECL #else #if __STDC__ #ifndef __cplusplus #include #endif #else /* Just try to get by without declaring the routines. This will fail * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) * or sizeof(void*) != sizeof(int). */ #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( yy_current_buffer->yy_is_interactive ) \ { \ int c = '*', n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL int yylex YY_PROTO(( void )) #endif /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 18 "acllex.l" #line 648 "lex.yy.c" if ( yy_init ) { yy_init = 0; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yy_start ) yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_load_buffer_state(); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yy_c_buf_p; /* Support of yytext. */ *yy_cp = yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yy_start; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 119 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 338 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yy_hold_char; yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 19 "acllex.l" { return NL;} YY_BREAK case 2: YY_RULE_SETUP #line 20 "acllex.l" { return COMMENT;} YY_BREAK case 3: YY_RULE_SETUP #line 21 "acllex.l" ; /* ignore whitespace */ YY_BREAK case 4: YY_RULE_SETUP #line 22 "acllex.l" {return ACCESSLIST;} YY_BREAK case 5: YY_RULE_SETUP #line 23 "acllex.l" {yylval.ip = scan_ip(yytext); return IPADDR;} YY_BREAK case 6: YY_RULE_SETUP #line 24 "acllex.l" { yylval.c = strdup (yytext); return NUM;} YY_BREAK case 7: YY_RULE_SETUP #line 25 "acllex.l" { return PERMIT;} YY_BREAK case 8: YY_RULE_SETUP #line 26 "acllex.l" { return DENY;} YY_BREAK case 9: YY_RULE_SETUP #line 27 "acllex.l" { yylval.c = strdup (yytext); return HOST;} YY_BREAK case 10: YY_RULE_SETUP #line 28 "acllex.l" { yylval.c = strdup (yytext); return ANY;} YY_BREAK case 11: YY_RULE_SETUP #line 29 "acllex.l" { return IP;} YY_BREAK case 12: YY_RULE_SETUP #line 30 "acllex.l" { return TCP;} YY_BREAK case 13: YY_RULE_SETUP #line 31 "acllex.l" { return UDP;} YY_BREAK case 14: YY_RULE_SETUP #line 32 "acllex.l" { return IGMP;} YY_BREAK case 15: YY_RULE_SETUP #line 33 "acllex.l" { return ICMP;} YY_BREAK case 16: YY_RULE_SETUP #line 34 "acllex.l" { return PRECEDENCE;} YY_BREAK case 17: YY_RULE_SETUP #line 35 "acllex.l" { return TOS;} YY_BREAK case 18: YY_RULE_SETUP #line 36 "acllex.l" { return LOG;} YY_BREAK case 19: YY_RULE_SETUP #line 37 "acllex.l" { return ICMPTYPE;} YY_BREAK case 20: YY_RULE_SETUP #line 38 "acllex.l" {return LT;} YY_BREAK case 21: YY_RULE_SETUP #line 39 "acllex.l" {return GT;} YY_BREAK case 22: YY_RULE_SETUP #line 40 "acllex.l" {return EQ;} YY_BREAK case 23: YY_RULE_SETUP #line 41 "acllex.l" {return NEQ;} YY_BREAK case 24: YY_RULE_SETUP #line 42 "acllex.l" {return RANGE;} YY_BREAK case 25: YY_RULE_SETUP #line 43 "acllex.l" {return ESTABLISHED;} YY_BREAK case 26: YY_RULE_SETUP #line 44 "acllex.l" {return EXTENDED;} YY_BREAK case 27: YY_RULE_SETUP #line 45 "acllex.l" {return STANDARD;} YY_BREAK case 28: YY_RULE_SETUP #line 46 "acllex.l" {yylval.c = strdup (yytext); return NAME;} YY_BREAK case 29: YY_RULE_SETUP #line 47 "acllex.l" {fprintf(stderr, "\"%s\": ", yytext); return 0;} YY_BREAK case 30: YY_RULE_SETUP #line 48 "acllex.l" ECHO; YY_BREAK #line 881 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between yy_current_buffer and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yy_n_chars = yy_current_buffer->yy_n_chars; yy_current_buffer->yy_input_file = yyin; yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yy_c_buf_p; goto yy_find_action; } } else switch ( yy_get_next_buffer() ) { case EOB_ACT_END_OF_FILE: { yy_did_buffer_switch_on_eof = 0; if ( yywrap() ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yy_c_buf_p = &yy_current_buffer->yy_ch_buf[yy_n_chars]; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer() { register char *dest = yy_current_buffer->yy_ch_buf; register char *source = yytext_ptr; register int number_to_move, i; int ret_val; if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( yy_current_buffer->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ yy_current_buffer->yy_n_chars = yy_n_chars = 0; else { int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ #ifdef YY_USES_REJECT YY_FATAL_ERROR( "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); #else /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = yy_current_buffer; int yy_c_buf_p_offset = (int) (yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yy_flex_realloc( (void *) b->yy_ch_buf, b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; #endif } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), yy_n_chars, num_to_read ); yy_current_buffer->yy_n_chars = yy_n_chars; } if ( yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; yy_current_buffer->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; yy_n_chars += number_to_move; yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = yy_start; for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 119 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ #ifdef YY_USE_PROTOS static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) #else static yy_state_type yy_try_NUL_trans( yy_current_state ) yy_state_type yy_current_state; #endif { register int yy_is_jam; register char *yy_cp = yy_c_buf_p; register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 119 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 118); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #ifdef YY_USE_PROTOS static void yyunput( int c, register char *yy_bp ) #else static void yyunput( c, yy_bp ) int c; register char *yy_bp; #endif { register char *yy_cp = yy_c_buf_p; /* undo effects of setting up yytext */ *yy_cp = yy_hold_char; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = yy_n_chars + 2; register char *dest = &yy_current_buffer->yy_ch_buf[ yy_current_buffer->yy_buf_size + 2]; register char *source = &yy_current_buffer->yy_ch_buf[number_to_move]; while ( source > yy_current_buffer->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); yy_current_buffer->yy_n_chars = yy_n_chars = yy_current_buffer->yy_buf_size; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; yytext_ptr = yy_bp; yy_hold_char = *yy_cp; yy_c_buf_p = yy_cp; } #endif /* ifndef YY_NO_UNPUT */ #ifdef __cplusplus static int yyinput() #else static int input() #endif { int c; *yy_c_buf_p = yy_hold_char; if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) /* This was really a NUL. */ *yy_c_buf_p = '\0'; else { /* need more input */ int offset = yy_c_buf_p - yytext_ptr; ++yy_c_buf_p; switch ( yy_get_next_buffer() ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /* fall through */ case EOB_ACT_END_OF_FILE: { if ( yywrap() ) return EOF; if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: yy_c_buf_p = yytext_ptr + offset; break; } } } c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ *yy_c_buf_p = '\0'; /* preserve yytext */ yy_hold_char = *++yy_c_buf_p; return c; } #ifdef YY_USE_PROTOS void yyrestart( FILE *input_file ) #else void yyrestart( input_file ) FILE *input_file; #endif { if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_init_buffer( yy_current_buffer, input_file ); yy_load_buffer_state(); } #ifdef YY_USE_PROTOS void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) #else void yy_switch_to_buffer( new_buffer ) YY_BUFFER_STATE new_buffer; #endif { if ( yy_current_buffer == new_buffer ) return; if ( yy_current_buffer ) { /* Flush out information for old buffer. */ *yy_c_buf_p = yy_hold_char; yy_current_buffer->yy_buf_pos = yy_c_buf_p; yy_current_buffer->yy_n_chars = yy_n_chars; } yy_current_buffer = new_buffer; yy_load_buffer_state(); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yy_did_buffer_switch_on_eof = 1; } #ifdef YY_USE_PROTOS void yy_load_buffer_state( void ) #else void yy_load_buffer_state() #endif { yy_n_chars = yy_current_buffer->yy_n_chars; yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; yyin = yy_current_buffer->yy_input_file; yy_hold_char = *yy_c_buf_p; } #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) #else YY_BUFFER_STATE yy_create_buffer( file, size ) FILE *file; int size; #endif { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } #ifdef YY_USE_PROTOS void yy_delete_buffer( YY_BUFFER_STATE b ) #else void yy_delete_buffer( b ) YY_BUFFER_STATE b; #endif { if ( ! b ) return; if ( b == yy_current_buffer ) yy_current_buffer = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yy_flex_free( (void *) b->yy_ch_buf ); yy_flex_free( (void *) b ); } #ifndef YY_ALWAYS_INTERACTIVE #ifndef YY_NEVER_INTERACTIVE extern int isatty YY_PROTO(( int )); #endif #endif #ifdef YY_USE_PROTOS void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) #else void yy_init_buffer( b, file ) YY_BUFFER_STATE b; FILE *file; #endif { yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; #if YY_ALWAYS_INTERACTIVE b->yy_is_interactive = 1; #else #if YY_NEVER_INTERACTIVE b->yy_is_interactive = 0; #else b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; #endif #endif } #ifdef YY_USE_PROTOS void yy_flush_buffer( YY_BUFFER_STATE b ) #else void yy_flush_buffer( b ) YY_BUFFER_STATE b; #endif { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == yy_current_buffer ) yy_load_buffer_state(); } #ifndef YY_NO_SCAN_BUFFER #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) #else YY_BUFFER_STATE yy_scan_buffer( base, size ) char *base; yy_size_t size; #endif { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } #endif #ifndef YY_NO_SCAN_STRING #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) #else YY_BUFFER_STATE yy_scan_string( yy_str ) yyconst char *yy_str; #endif { int len; for ( len = 0; yy_str[len]; ++len ) ; return yy_scan_bytes( yy_str, len ); } #endif #ifndef YY_NO_SCAN_BYTES #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) #else YY_BUFFER_STATE yy_scan_bytes( bytes, len ) yyconst char *bytes; int len; #endif { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = len + 2; buf = (char *) yy_flex_alloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < len; ++i ) buf[i] = bytes[i]; buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #endif #ifndef YY_NO_PUSH_STATE #ifdef YY_USE_PROTOS static void yy_push_state( int new_state ) #else static void yy_push_state( new_state ) int new_state; #endif { if ( yy_start_stack_ptr >= yy_start_stack_depth ) { yy_size_t new_size; yy_start_stack_depth += YY_START_STACK_INCR; new_size = yy_start_stack_depth * sizeof( int ); if ( ! yy_start_stack ) yy_start_stack = (int *) yy_flex_alloc( new_size ); else yy_start_stack = (int *) yy_flex_realloc( (void *) yy_start_stack, new_size ); if ( ! yy_start_stack ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } yy_start_stack[yy_start_stack_ptr++] = YY_START; BEGIN(new_state); } #endif #ifndef YY_NO_POP_STATE static void yy_pop_state() { if ( --yy_start_stack_ptr < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN(yy_start_stack[yy_start_stack_ptr]); } #endif #ifndef YY_NO_TOP_STATE static int yy_top_state() { return yy_start_stack[yy_start_stack_ptr - 1]; } #endif #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif #ifdef YY_USE_PROTOS static void yy_fatal_error( yyconst char msg[] ) #else static void yy_fatal_error( msg ) char msg[]; #endif { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ yytext[yyleng] = yy_hold_char; \ yy_c_buf_p = yytext + n; \ yy_hold_char = *yy_c_buf_p; \ *yy_c_buf_p = '\0'; \ yyleng = n; \ } \ while ( 0 ) /* Internal utility routines. */ #ifndef yytext_ptr #ifdef YY_USE_PROTOS static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) #else static void yy_flex_strncpy( s1, s2, n ) char *s1; yyconst char *s2; int n; #endif { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN #ifdef YY_USE_PROTOS static int yy_flex_strlen( yyconst char *s ) #else static int yy_flex_strlen( s ) yyconst char *s; #endif { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif #ifdef YY_USE_PROTOS static void *yy_flex_alloc( yy_size_t size ) #else static void *yy_flex_alloc( size ) yy_size_t size; #endif { return (void *) malloc( size ); } #ifdef YY_USE_PROTOS static void *yy_flex_realloc( void *ptr, yy_size_t size ) #else static void *yy_flex_realloc( ptr, size ) void *ptr; yy_size_t size; #endif { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } #ifdef YY_USE_PROTOS static void yy_flex_free( void *ptr ) #else static void yy_flex_free( ptr ) void *ptr; #endif { free( ptr ); } #if YY_MAIN int main() { yylex(); return 0; } #endif #line 48 "acllex.l" flow-tools-0.68/src/acllex.l0000644000076600007660000000221607431363466011502 %{ #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "acl2.h" #include "aclyacc.h" %} byte ([0-9]+) %% \n { return NL;} !.* { return COMMENT;} [ \t\n\r] ; /* ignore whitespace */ access-list {return ACCESSLIST;} {byte}\.{byte}\.{byte}\.{byte} {yylval.ip = scan_ip(yytext); return IPADDR;} [0-9]+ { yylval.c = strdup (yytext); return NUM;} permit { return PERMIT;} deny { return DENY;} host { yylval.c = strdup (yytext); return HOST;} any { yylval.c = strdup (yytext); return ANY;} ip { return IP;} tcp { return TCP;} udp { return UDP;} igmp { return IGMP;} icmp { return ICMP;} precedence { return PRECEDENCE;} tos { return TOS;} log { return LOG;} icmp-type { return ICMPTYPE;} lt {return LT;} gt {return GT;} eq {return EQ;} neq {return NEQ;} range {return RANGE;} established {return ESTABLISHED;} extended {return EXTENDED;} standard {return STANDARD;} [a-zA-Z]+[_0-9a-zA-Z]* {yylval.c = strdup (yytext); return NAME;} . {fprintf(stderr, "\"%s\": ", yytext); return 0;} %% flow-tools-0.68/src/aclyacc.c0000644000076600007660000006436707642622541011633 #ifndef lint static char const yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28.2.1 2001/07/19 05:46:39 peter Exp $"; #endif #include #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYLEX yylex() #define YYEMPTY -1 #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #define YYRECOVERING() (yyerrflag!=0) #if defined(__cplusplus) || __STDC__ static int yygrowstack(void); #else static int yygrowstack(); #endif #define YYPREFIX "yy" #line 2 "aclyacc.y" #include "ftconfig.h" #include #include "acl2.h" #include /* XXX REMOVE */ /* XXX remove */ unsigned char fmt_buf[32]; unsigned char fmt_buf2[32]; extern struct acl_list acl_list; int x; #line 16 "aclyacc.y" typedef union { char *c; u_long long ip; int i; u_int u; struct acl_ip_std_entry std_entry; struct acl_ip_ext_entry ext_entry; } YYSTYPE; #line 43 "y.tab.c" #define YYERRCODE 256 #define HOST 257 #define ANY 258 #define IPADDR 259 #define NUM 260 #define NAME 261 #define ACCESSLIST 262 #define IP 263 #define PERMIT 264 #define DENY 265 #define COMMENT 266 #define ICMP 267 #define IGMP 268 #define TCP 269 #define UDP 270 #define PRECEDENCE 271 #define TOS 272 #define LOG 273 #define ICMPTYPE 274 #define LT 275 #define GT 276 #define EQ 277 #define NEQ 278 #define RANGE 279 #define ESTABLISHED 280 #define EXTENDED 281 #define STANDARD 282 #define NL 283 const short yylhs[] = { -1, 0, 0, 0, 0, 0, 13, 13, 12, 12, 11, 11, 11, 11, 8, 8, 8, 8, 9, 9, 1, 1, 1, 1, 1, 2, 2, 6, 6, 6, 6, 3, 3, 3, 3, 5, 5, 5, 5, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 19, 19, 19, 19, 17, 17, 20, 20, 7, 7, 7, 7, 7, 7, 7, 21, 23, 23, 22, 24, 24, 10, 10, 10, 14, 14, 15, 15, }; const short yylen[] = { 2, 2, 3, 2, 3, 1, 1, 2, 1, 2, 4, 4, 6, 6, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 3, 4, 4, 5, 3, 4, 4, 5, 1, 1, 2, 1, 2, 2, 3, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 2, 2, 3, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, }; const short yydefred[] = { 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7, 9, 0, 0, 1, 3, 18, 19, 0, 0, 0, 2, 4, 0, 14, 0, 0, 0, 0, 0, 0, 11, 20, 22, 24, 23, 21, 10, 0, 0, 15, 16, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 76, 74, 0, 0, 0, 53, 54, 55, 56, 0, 0, 0, 0, 0, 0, 13, 12, 0, 0, 63, 26, 0, 0, 77, 78, 29, 0, 79, 80, 33, 0, 59, 60, 0, 0, 46, 36, 0, 0, 57, 51, 0, 40, 0, 69, 70, 68, 72, 73, 71, 65, 0, 67, 30, 34, 58, 48, 0, 47, 38, 52, 42, 66, 49, }; const short yydgoto[] = { 5, 32, 33, 34, 35, 36, 37, 88, 38, 19, 46, 6, 7, 8, 79, 83, 89, 90, 95, 65, 86, 74, 75, 99, 102, }; const short yysindex[] = { -255, -251, -244, -239, -254, -231, -254, 0, -254, -186, -226, 0, 0, -254, -254, 0, 0, 0, 0, -182, -228, -225, 0, 0, -217, 0, -211, -219, -219, -219, -219, -219, 0, 0, 0, 0, 0, 0, 0, -186, -186, 0, 0, -206, 0, -175, -219, -219, -219, -208, -208, -209, -185, 0, 0, -177, -171, -168, 0, 0, 0, 0, -163, -165, -219, -163, -155, -219, 0, 0, -135, -133, 0, 0, -143, -191, 0, 0, 0, -177, 0, 0, 0, -177, 0, 0, -163, -177, 0, 0, -256, -165, 0, 0, -177, 0, -155, 0, 0, 0, 0, 0, 0, 0, -174, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, }; const short yyrindex[] = { 0, 0, 0, -192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -149, -148, 0, 0, 0, 0, 0, -147, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, -145, -144, 0, 0, 0, -142, 0, 0, 0, -141, 0, 0, 0, -140, 0, 0, -139, -138, 0, 0, -137, 0, -136, 0, 0, 0, 0, 0, 0, 0, -134, 0, 0, 0, 0, 0, -132, 0, 0, 0, 0, 0, 0, }; const short yygindex[] = { 0, 58, 0, 0, 0, 0, 0, -53, 88, 92, 16, 143, 6, 20, 0, 0, 59, -44, 56, 0, -65, 0, 79, 0, 0, }; #define YYTABLESIZE 267 const short yytable[] = { 92, 8, 73, 78, 82, 64, 67, 1, 2, 9, 12, 3, 15, 93, 16, 70, 71, 72, 10, 22, 23, 108, 94, 11, 110, 14, 106, 3, 4, 4, 107, 1, 2, 39, 109, 3, 40, 111, 43, 44, 45, 113, 41, 93, 47, 48, 49, 50, 42, 43, 44, 45, 94, 53, 27, 20, 21, 116, 28, 29, 30, 31, 55, 56, 57, 63, 66, 58, 59, 60, 61, 62, 24, 25, 26, 24, 25, 26, 17, 18, 91, 27, 105, 96, 54, 28, 29, 30, 31, 76, 77, 6, 80, 81, 70, 71, 72, 84, 85, 115, 70, 71, 72, 70, 71, 72, 70, 71, 72, 68, 58, 59, 60, 61, 62, 87, 70, 71, 72, 17, 58, 59, 60, 61, 62, 97, 98, 100, 101, 71, 103, 51, 52, 25, 27, 31, 35, 39, 61, 62, 69, 28, 32, 44, 43, 37, 50, 41, 13, 64, 112, 45, 114, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 8, }; const short yycheck[] = { 65, 0, 55, 56, 57, 49, 50, 262, 263, 260, 4, 266, 6, 66, 8, 271, 272, 273, 262, 13, 14, 86, 66, 3, 280, 5, 79, 266, 283, 283, 83, 262, 263, 261, 87, 266, 261, 90, 257, 258, 259, 94, 259, 96, 28, 29, 30, 31, 259, 257, 258, 259, 96, 259, 263, 281, 282, 110, 267, 268, 269, 270, 46, 47, 48, 49, 50, 275, 276, 277, 278, 279, 257, 258, 259, 257, 258, 259, 264, 265, 64, 263, 273, 67, 259, 267, 268, 269, 270, 260, 261, 283, 260, 261, 271, 272, 273, 260, 261, 273, 271, 272, 273, 271, 272, 273, 271, 272, 273, 51, 275, 276, 277, 278, 279, 280, 271, 272, 273, 283, 275, 276, 277, 278, 279, 260, 261, 260, 261, 272, 273, 39, 40, 283, 283, 283, 283, 283, 283, 283, 52, 283, 283, 283, 283, 283, 283, 283, 5, 283, 91, 283, 96, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 262, 263, -1, -1, 266, }; #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 283 #if YYDEBUG const char * const yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"HOST","ANY","IPADDR","NUM", "NAME","ACCESSLIST","IP","PERMIT","DENY","COMMENT","ICMP","IGMP","TCP","UDP", "PRECEDENCE","TOS","LOG","ICMPTYPE","LT","GT","EQ","NEQ","RANGE","ESTABLISHED", "EXTENDED","STANDARD","NL", }; const char * const yyrule[] = { "$accept : config", "config : acl nl", "config : config acl nl", "config : comment nl", "config : config comment nl", "config : nl", "comment : COMMENT", "comment : COMMENT comment", "nl : NL", "nl : NL nl", "acl : ACCESSLIST NUM action std_acl", "acl : ACCESSLIST NUM action ext_acl", "acl : IP ACCESSLIST STANDARD NAME action std_acl", "acl : IP ACCESSLIST EXTENDED NAME action ext_acl", "std_acl : ANY", "std_acl : HOST IPADDR", "std_acl : IPADDR IPADDR", "std_acl : IPADDR", "action : PERMIT", "action : DENY", "ext_acl : ext_acl_ip", "ext_acl : ext_acl_icmp", "ext_acl : ext_acl_igmp", "ext_acl : ext_acl_tcp", "ext_acl : ext_acl_udp", "ext_acl_ip : IP ext_ip_mask ext_ip_mask", "ext_acl_ip : IP ext_ip_mask ext_ip_mask prec_tos_log", "ext_acl_icmp : ICMP ext_ip_mask ext_ip_mask", "ext_acl_icmp : ICMP ext_ip_mask ext_ip_mask icmp_val", "ext_acl_icmp : ICMP ext_ip_mask ext_ip_mask prec_tos_log", "ext_acl_icmp : ICMP ext_ip_mask ext_ip_mask icmp_val prec_tos_log", "ext_acl_igmp : IGMP ext_ip_mask ext_ip_mask", "ext_acl_igmp : IGMP ext_ip_mask ext_ip_mask igmp_val", "ext_acl_igmp : IGMP ext_ip_mask ext_ip_mask prec_tos_log", "ext_acl_igmp : IGMP ext_ip_mask ext_ip_mask igmp_val prec_tos_log", "ext_acl_tcp : TCP ext_ip_mask ext_ip_mask", "ext_acl_tcp : TCP ext_ip_mask ext_ip_mask tcp_port_tail", "ext_acl_tcp : TCP ext_ip_mask tcp_port_op ext_ip_mask", "ext_acl_tcp : TCP ext_ip_mask tcp_port_op ext_ip_mask tcp_port_tail", "ext_acl_udp : UDP ext_ip_mask ext_ip_mask", "ext_acl_udp : UDP ext_ip_mask ext_ip_mask udp_port_tail", "ext_acl_udp : UDP ext_ip_mask tcp_port_op ext_ip_mask", "ext_acl_udp : UDP ext_ip_mask tcp_port_op ext_ip_mask udp_port_tail", "tcp_port_tail : tcp_port_op", "tcp_port_tail : ESTABLISHED", "tcp_port_tail : tcp_port_op ESTABLISHED", "tcp_port_tail : prec_tos_log", "tcp_port_tail : tcp_port_op prec_tos_log", "tcp_port_tail : ESTABLISHED prec_tos_log", "tcp_port_tail : tcp_port_op ESTABLISHED prec_tos_log", "udp_port_tail : tcp_port_op", "udp_port_tail : prec_tos_log", "udp_port_tail : tcp_port_op prec_tos_log", "s_operator : LT", "s_operator : GT", "s_operator : EQ", "s_operator : NEQ", "tcp_port_op : s_operator tcp_val", "tcp_port_op : RANGE tcp_val tcp_val", "tcp_val : NUM", "tcp_val : NAME", "prec_tos_log : precedence", "prec_tos_log : tos", "prec_tos_log : LOG", "prec_tos_log : precedence tos", "prec_tos_log : precedence LOG", "prec_tos_log : precedence tos LOG", "prec_tos_log : tos LOG", "precedence : PRECEDENCE precedence_val", "precedence_val : NUM", "precedence_val : NAME", "tos : TOS tos_val", "tos_val : NUM", "tos_val : NAME", "ext_ip_mask : IPADDR IPADDR", "ext_ip_mask : ANY", "ext_ip_mask : HOST IPADDR", "icmp_val : NUM", "icmp_val : NAME", "igmp_val : NUM", "igmp_val : NAME", }; #endif #if YYDEBUG #include #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 10000 #define YYMAXDEPTH 10000 #endif #endif #define YYINITSTACKSIZE 200 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack() { int newsize, i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) : (short *)malloc(newsize * sizeof *newss); if (newss == NULL) return -1; yyss = newss; yyssp = newss + i; newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) : (YYSTYPE *)malloc(newsize * sizeof *newvs); if (newvs == NULL) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #ifndef YYPARSE_PARAM #if defined(__cplusplus) || __STDC__ #define YYPARSE_PARAM_ARG void #define YYPARSE_PARAM_DECL #else /* ! ANSI-C/C++ */ #define YYPARSE_PARAM_ARG #define YYPARSE_PARAM_DECL #endif /* ANSI-C/C++ */ #else /* YYPARSE_PARAM */ #ifndef YYPARSE_PARAM_TYPE #define YYPARSE_PARAM_TYPE void * #endif #if defined(__cplusplus) || __STDC__ #define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM #define YYPARSE_PARAM_DECL #else /* ! ANSI-C/C++ */ #define YYPARSE_PARAM_ARG YYPARSE_PARAM #define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM; #endif /* ANSI-C/C++ */ #endif /* ! YYPARSE_PARAM */ int yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { register int yym, yyn, yystate; #if YYDEBUG register const char *yys; if ((yys = getenv("YYDEBUG"))) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate])) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; #if defined(lint) || defined(__GNUC__) goto yynewerror; #endif yynewerror: yyerror("syntax error"); #if defined(lint) || defined(__GNUC__) goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 10: #line 54 "aclyacc.y" { /* XXX add code to check NUM is in range 0..99 */ yyvsp[0].std_entry.flag |= yyvsp[-1].i; x = acl_create(&acl_list, yyvsp[-2].c, ACL_TYPE_STD); acl_add_line_std(acl_list, x, yyvsp[0].std_entry); } break; case 11: #line 60 "aclyacc.y" { /* XXX add code to check NUM is in range 100-199 */ yyvsp[0].ext_entry.flag |= yyvsp[-1].i; x = acl_create(&acl_list, yyvsp[-2].c, ACL_TYPE_EXT); acl_add_line_ext(acl_list, x, yyvsp[0].ext_entry); } break; case 12: #line 66 "aclyacc.y" { yyvsp[0].std_entry.flag |= yyvsp[-1].i; x = acl_create(&acl_list, yyvsp[-2].c, ACL_TYPE_STD); acl_add_line_std(acl_list, x, yyvsp[0].std_entry); } break; case 13: #line 71 "aclyacc.y" { yyvsp[0].ext_entry.flag |= yyvsp[-1].i; x = acl_create(&acl_list, yyvsp[-2].c, ACL_TYPE_EXT); acl_add_line_ext(acl_list, x, yyvsp[0].ext_entry); } break; case 14: #line 79 "aclyacc.y" { yyval.std_entry.src_addr = 0x0; yyval.std_entry.src_mask = 0xFFFFFFFF; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; case 15: #line 85 "aclyacc.y" { yyval.std_entry.src_addr = yyvsp[0].ip; yyval.std_entry.src_mask = 0x0; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; case 16: #line 91 "aclyacc.y" { yyval.std_entry.src_addr = yyvsp[-1].ip; yyval.std_entry.src_mask = yyvsp[0].ip; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; case 17: #line 97 "aclyacc.y" { yyval.std_entry.src_addr = yyvsp[0].ip; yyval.std_entry.src_mask = 0x0; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; case 18: #line 105 "aclyacc.y" { yyval.i = ACL_FLAG_PERMIT; } break; case 19: #line 108 "aclyacc.y" { yyval.i = 0; } break; case 25: #line 121 "aclyacc.y" { yyval.ext_entry.protocol = 0; yyval.ext_entry.precedence = 0; yyval.ext_entry.tos = 0; yyval.ext_entry.type = 0; yyval.ext_entry.type_code = 0; yyval.ext_entry.message = 0; yyval.ext_entry.src_op = 0; yyval.ext_entry.dst_op = 0; yyval.ext_entry.src_addr = yyvsp[-1].std_entry.src_addr; yyval.ext_entry.src_mask = yyvsp[-1].std_entry.src_mask; yyval.ext_entry.src_port = 0; yyval.ext_entry.src_port2 = 0; yyval.ext_entry.dst_addr = yyvsp[0].std_entry.src_addr; yyval.ext_entry.dst_mask = yyvsp[0].std_entry.src_mask; yyval.ext_entry.dst_port = 0; yyval.ext_entry.dst_port2 = 0; yyval.ext_entry.matches = 0; yyval.ext_entry.flag = ACL_FLAG_IP_ALL; } break; case 26: #line 141 "aclyacc.y" { yyval.ext_entry.protocol = 0; yyval.ext_entry.precedence = yyvsp[0].ext_entry.precedence; yyval.ext_entry.tos = yyvsp[0].ext_entry.tos; yyval.ext_entry.type = 0; yyval.ext_entry.type_code = 0; yyval.ext_entry.message = 0; yyval.ext_entry.src_op = 0; yyval.ext_entry.dst_op = 0; yyval.ext_entry.src_addr = yyvsp[-2].std_entry.src_addr; yyval.ext_entry.src_mask = yyvsp[-2].std_entry.src_mask; yyval.ext_entry.src_port = 0; yyval.ext_entry.src_port2 = 0; yyval.ext_entry.dst_addr = yyvsp[-1].std_entry.src_addr; yyval.ext_entry.dst_mask = yyvsp[-1].std_entry.src_mask; yyval.ext_entry.dst_port = 0; yyval.ext_entry.dst_port2 = 0; yyval.ext_entry.matches = 0; yyval.ext_entry.flag = ACL_FLAG_IP_ALL | yyvsp[-1].std_entry.flag; } break; case 27: #line 163 "aclyacc.y" { yyval.ext_entry.protocol = IPPROTO_ICMP; yyval.ext_entry.precedence = 0; yyval.ext_entry.tos = 0; yyval.ext_entry.type = 0; yyval.ext_entry.type_code = 0; yyval.ext_entry.message = 0; yyval.ext_entry.src_op = 0; yyval.ext_entry.dst_op = 0; yyval.ext_entry.src_addr = yyvsp[-1].std_entry.src_addr; yyval.ext_entry.src_mask = yyvsp[-1].std_entry.src_mask; yyval.ext_entry.src_port = 0; yyval.ext_entry.src_port2 = 0; yyval.ext_entry.dst_addr = yyvsp[0].std_entry.src_addr; yyval.ext_entry.dst_mask = yyvsp[0].std_entry.src_mask; yyval.ext_entry.dst_port = 0; yyval.ext_entry.dst_port2 = 0; yyval.ext_entry.matches = 0; yyval.ext_entry.flag = 0; } break; case 28: #line 183 "aclyacc.y" {} break; case 29: #line 184 "aclyacc.y" {} break; case 30: #line 185 "aclyacc.y" {} break; case 31: #line 188 "aclyacc.y" { yyval.ext_entry.protocol = IPPROTO_IGMP; yyval.ext_entry.precedence = 0; yyval.ext_entry.tos = 0; yyval.ext_entry.type = 0; yyval.ext_entry.type_code = 0; yyval.ext_entry.message = 0; yyval.ext_entry.src_op = 0; yyval.ext_entry.dst_op = 0; yyval.ext_entry.src_addr = yyvsp[-1].std_entry.src_addr; yyval.ext_entry.src_mask = yyvsp[-1].std_entry.src_mask; yyval.ext_entry.src_port = 0; yyval.ext_entry.src_port2 = 0; yyval.ext_entry.dst_addr = yyvsp[0].std_entry.src_addr; yyval.ext_entry.dst_mask = yyvsp[0].std_entry.src_mask; yyval.ext_entry.dst_port = 0; yyval.ext_entry.dst_port2 = 0; yyval.ext_entry.matches = 0; yyval.ext_entry.flag = 0; } break; case 32: #line 208 "aclyacc.y" {} break; case 33: #line 209 "aclyacc.y" {} break; case 34: #line 210 "aclyacc.y" {} break; case 35: #line 213 "aclyacc.y" { yyval.ext_entry.protocol = IPPROTO_TCP; yyval.ext_entry.precedence = 0; yyval.ext_entry.tos = 0; yyval.ext_entry.type = 0; yyval.ext_entry.type_code = 0; yyval.ext_entry.message = 0; yyval.ext_entry.src_op = 0; yyval.ext_entry.dst_op = 0; yyval.ext_entry.src_addr = yyvsp[-1].std_entry.src_addr; yyval.ext_entry.src_mask = yyvsp[-1].std_entry.src_mask; yyval.ext_entry.src_port = 0; yyval.ext_entry.src_port2 = 0; yyval.ext_entry.dst_addr = yyvsp[0].std_entry.src_addr; yyval.ext_entry.dst_mask = yyvsp[0].std_entry.src_mask; yyval.ext_entry.dst_port = 0; yyval.ext_entry.dst_port2 = 0; yyval.ext_entry.matches = 0; yyval.ext_entry.flag = 0; } break; case 36: #line 233 "aclyacc.y" {} break; case 37: #line 234 "aclyacc.y" {} break; case 38: #line 235 "aclyacc.y" {} break; case 39: #line 238 "aclyacc.y" { yyval.ext_entry.protocol = IPPROTO_UDP; yyval.ext_entry.precedence = 0; yyval.ext_entry.tos = 0; yyval.ext_entry.type = 0; yyval.ext_entry.type_code = 0; yyval.ext_entry.message = 0; yyval.ext_entry.src_op = 0; yyval.ext_entry.dst_op = 0; yyval.ext_entry.src_addr = yyvsp[-1].std_entry.src_addr; yyval.ext_entry.src_mask = yyvsp[-1].std_entry.src_mask; yyval.ext_entry.src_port = 0; yyval.ext_entry.src_port2 = 0; yyval.ext_entry.dst_addr = yyvsp[0].std_entry.src_addr; yyval.ext_entry.dst_mask = yyvsp[0].std_entry.src_mask; yyval.ext_entry.dst_port = 0; yyval.ext_entry.dst_port2 = 0; yyval.ext_entry.matches = 0; yyval.ext_entry.flag = 0; } break; case 40: #line 258 "aclyacc.y" {} break; case 41: #line 259 "aclyacc.y" {} break; case 42: #line 260 "aclyacc.y" {} break; case 61: #line 292 "aclyacc.y" {} break; case 62: #line 293 "aclyacc.y" {} break; case 63: #line 294 "aclyacc.y" {} break; case 64: #line 295 "aclyacc.y" {} break; case 65: #line 296 "aclyacc.y" {} break; case 66: #line 297 "aclyacc.y" {} break; case 67: #line 298 "aclyacc.y" {} break; case 68: #line 301 "aclyacc.y" {} break; case 74: #line 315 "aclyacc.y" { yyval.std_entry.src_addr = yyvsp[-1].ip; yyval.std_entry.src_mask = yyvsp[0].ip; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; case 75: #line 321 "aclyacc.y" { yyval.std_entry.src_addr = 0x0; yyval.std_entry.src_mask = 0xFFFFFFFF; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; case 76: #line 327 "aclyacc.y" { yyval.std_entry.src_addr = yyvsp[0].ip; yyval.std_entry.src_mask = 0x0; yyval.std_entry.matches = 0; yyval.std_entry.flag = 0; } break; #line 853 "y.tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); } flow-tools-0.68/src/aclyacc.h0000644000076600007660000000127007246024137011615 #ifndef YYERRCODE #define YYERRCODE 256 #endif #define HOST 257 #define ANY 258 #define IPADDR 259 #define NUM 260 #define NAME 261 #define ACCESSLIST 262 #define IP 263 #define PERMIT 264 #define DENY 265 #define COMMENT 266 #define ICMP 267 #define IGMP 268 #define TCP 269 #define UDP 270 #define PRECEDENCE 271 #define TOS 272 #define LOG 273 #define ICMPTYPE 274 #define LT 275 #define GT 276 #define EQ 277 #define NEQ 278 #define RANGE 279 #define ESTABLISHED 280 #define EXTENDED 281 #define STANDARD 282 #define NL 283 typedef union { char *c; u_long long ip; int i; u_int u; struct acl_ip_std_entry std_entry; struct acl_ip_ext_entry ext_entry; } YYSTYPE; extern YYSTYPE yylval; flow-tools-0.68/src/aclyacc.y0000644000076600007660000001432407642622453011647 %{ #include #include "acl2.h" #include /* XXX REMOVE */ /* XXX remove */ unsigned char fmt_buf[32]; unsigned char fmt_buf2[32]; extern struct acl_list acl_list; int x; %} %union { char *c; u_long long ip; int i; u_int u; struct acl_ip_std_entry std_entry; struct acl_ip_ext_entry ext_entry; } %token HOST ANY %token IPADDR %token NUM %token NAME %token ACCESSLIST IP PERMIT DENY COMMENT %token ICMP IGMP TCP UDP PRECEDENCE TOS LOG ICMPTYPE %token LT GT EQ NEQ RANGE %token ESTABLISHED EXTENDED STANDARD %token NL %type ext_acl ext_acl_ip ext_acl_igmp ext_acl_udp ext_acl_tcp %type ext_acl_icmp prec_tos_log %type std_acl %type action %type ext_ip_mask %% config: acl nl | config acl nl | comment nl | config comment nl | nl ; comment: COMMENT | COMMENT comment; nl: NL | NL nl; acl: ACCESSLIST NUM action std_acl { /* XXX add code to check NUM is in range 0..99 */ $4.flag |= $3; x = acl_create(&acl_list, $2, ACL_TYPE_STD); acl_add_line_std(acl_list, x, $4); } | ACCESSLIST NUM action ext_acl { /* XXX add code to check NUM is in range 100-199 */ $4.flag |= $3; x = acl_create(&acl_list, $2, ACL_TYPE_EXT); acl_add_line_ext(acl_list, x, $4); } | IP ACCESSLIST STANDARD NAME action std_acl { $6.flag |= $5; x = acl_create(&acl_list, $4, ACL_TYPE_STD); acl_add_line_std(acl_list, x, $6); } | IP ACCESSLIST EXTENDED NAME action ext_acl { $6.flag |= $5; x = acl_create(&acl_list, $4, ACL_TYPE_EXT); acl_add_line_ext(acl_list, x, $6); } ; std_acl : ANY { $$.src_addr = 0x0; $$.src_mask = 0xFFFFFFFF; $$.matches = 0; $$.flag = 0; } | HOST IPADDR { $$.src_addr = $2; $$.src_mask = 0x0; $$.matches = 0; $$.flag = 0; } | IPADDR IPADDR { $$.src_addr = $1; $$.src_mask = $2; $$.matches = 0; $$.flag = 0; } | IPADDR { $$.src_addr = $1; $$.src_mask = 0x0; $$.matches = 0; $$.flag = 0; } ; action: PERMIT { $$ = ACL_FLAG_PERMIT; } | DENY { $$ = 0; } ; ext_acl: ext_acl_ip | ext_acl_icmp | ext_acl_igmp | ext_acl_tcp | ext_acl_udp ; ext_acl_ip: IP ext_ip_mask ext_ip_mask { $$.protocol = 0; $$.precedence = 0; $$.tos = 0; $$.type = 0; $$.type_code = 0; $$.message = 0; $$.src_op = 0; $$.dst_op = 0; $$.src_addr = $2.src_addr; $$.src_mask = $2.src_mask; $$.src_port = 0; $$.src_port2 = 0; $$.dst_addr = $3.src_addr; $$.dst_mask = $3.src_mask; $$.dst_port = 0; $$.dst_port2 = 0; $$.matches = 0; $$.flag = ACL_FLAG_IP_ALL; } | IP ext_ip_mask ext_ip_mask prec_tos_log { $$.protocol = 0; $$.precedence = $4.precedence; $$.tos = $4.tos; $$.type = 0; $$.type_code = 0; $$.message = 0; $$.src_op = 0; $$.dst_op = 0; $$.src_addr = $2.src_addr; $$.src_mask = $2.src_mask; $$.src_port = 0; $$.src_port2 = 0; $$.dst_addr = $3.src_addr; $$.dst_mask = $3.src_mask; $$.dst_port = 0; $$.dst_port2 = 0; $$.matches = 0; $$.flag = ACL_FLAG_IP_ALL | $3.flag; } ; ext_acl_icmp: ICMP ext_ip_mask ext_ip_mask { $$.protocol = IPPROTO_ICMP; $$.precedence = 0; $$.tos = 0; $$.type = 0; $$.type_code = 0; $$.message = 0; $$.src_op = 0; $$.dst_op = 0; $$.src_addr = $2.src_addr; $$.src_mask = $2.src_mask; $$.src_port = 0; $$.src_port2 = 0; $$.dst_addr = $3.src_addr; $$.dst_mask = $3.src_mask; $$.dst_port = 0; $$.dst_port2 = 0; $$.matches = 0; $$.flag = 0; } | ICMP ext_ip_mask ext_ip_mask icmp_val {} | ICMP ext_ip_mask ext_ip_mask prec_tos_log {} | ICMP ext_ip_mask ext_ip_mask icmp_val prec_tos_log {} ; ext_acl_igmp: IGMP ext_ip_mask ext_ip_mask { $$.protocol = IPPROTO_IGMP; $$.precedence = 0; $$.tos = 0; $$.type = 0; $$.type_code = 0; $$.message = 0; $$.src_op = 0; $$.dst_op = 0; $$.src_addr = $2.src_addr; $$.src_mask = $2.src_mask; $$.src_port = 0; $$.src_port2 = 0; $$.dst_addr = $3.src_addr; $$.dst_mask = $3.src_mask; $$.dst_port = 0; $$.dst_port2 = 0; $$.matches = 0; $$.flag = 0; } | IGMP ext_ip_mask ext_ip_mask igmp_val {} | IGMP ext_ip_mask ext_ip_mask prec_tos_log {} | IGMP ext_ip_mask ext_ip_mask igmp_val prec_tos_log {} ; ext_acl_tcp: TCP ext_ip_mask ext_ip_mask { $$.protocol = IPPROTO_TCP; $$.precedence = 0; $$.tos = 0; $$.type = 0; $$.type_code = 0; $$.message = 0; $$.src_op = 0; $$.dst_op = 0; $$.src_addr = $2.src_addr; $$.src_mask = $2.src_mask; $$.src_port = 0; $$.src_port2 = 0; $$.dst_addr = $3.src_addr; $$.dst_mask = $3.src_mask; $$.dst_port = 0; $$.dst_port2 = 0; $$.matches = 0; $$.flag = 0; } | TCP ext_ip_mask ext_ip_mask tcp_port_tail {} | TCP ext_ip_mask tcp_port_op ext_ip_mask {} | TCP ext_ip_mask tcp_port_op ext_ip_mask tcp_port_tail {} ; ext_acl_udp: UDP ext_ip_mask ext_ip_mask { $$.protocol = IPPROTO_UDP; $$.precedence = 0; $$.tos = 0; $$.type = 0; $$.type_code = 0; $$.message = 0; $$.src_op = 0; $$.dst_op = 0; $$.src_addr = $2.src_addr; $$.src_mask = $2.src_mask; $$.src_port = 0; $$.src_port2 = 0; $$.dst_addr = $3.src_addr; $$.dst_mask = $3.src_mask; $$.dst_port = 0; $$.dst_port2 = 0; $$.matches = 0; $$.flag = 0; } | UDP ext_ip_mask ext_ip_mask udp_port_tail {} | UDP ext_ip_mask tcp_port_op ext_ip_mask {} | UDP ext_ip_mask tcp_port_op ext_ip_mask udp_port_tail {} ; tcp_port_tail: tcp_port_op | ESTABLISHED | tcp_port_op ESTABLISHED | prec_tos_log | tcp_port_op prec_tos_log | ESTABLISHED prec_tos_log | tcp_port_op ESTABLISHED prec_tos_log ; udp_port_tail: tcp_port_op | prec_tos_log | tcp_port_op prec_tos_log ; s_operator: LT | GT | EQ | NEQ ; tcp_port_op: s_operator tcp_val | RANGE tcp_val tcp_val ; tcp_val: NUM | NAME ; prec_tos_log: precedence {} | tos {} | LOG {} | precedence tos {} | precedence LOG {} | precedence tos LOG {} | tos LOG {} ; precedence: PRECEDENCE precedence_val {} ; precedence_val: NUM | NAME ; tos: TOS tos_val ; tos_val: NUM | NAME ; ext_ip_mask: IPADDR IPADDR { $$.src_addr = $1; $$.src_mask = $2; $$.matches = 0; $$.flag = 0; } | ANY { $$.src_addr = 0x0; $$.src_mask = 0xFFFFFFFF; $$.matches = 0; $$.flag = 0; } | HOST IPADDR { $$.src_addr = $2; $$.src_mask = 0x0; $$.matches = 0; $$.flag = 0; } ; icmp_val: NUM | NAME ; igmp_val: NUM | NAME ; %% flow-tools-0.68/src/cflowd.h0000644000076600007660000000622007431366751011503 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: cflowd.h,v 1.5 2002/02/10 03:50:01 maf Exp $ */ #include /* Adapted from cflowd */ #define CF_ROUTERMASK 0x00000001 #define CF_SRCIPADDRMASK 0x00000002 #define CF_DSTIPADDRMASK 0x00000004 #define CF_INPUTIFINDEXMASK 0x00000008 #define CF_OUTPUTIFINDEXMASK 0x00000010 #define CF_SRCPORTMASK 0x00000020 #define CF_DSTPORTMASK 0x00000040 #define CF_PKTSMASK 0x00000080 #define CF_BYTESMASK 0x00000100 #define CF_IPNEXTHOPMASK 0x00000200 #define CF_STARTTIMEMASK 0x00000400 #define CF_ENDTIMEMASK 0x00000800 #define CF_PROTOCOLMASK 0x00001000 #define CF_TOSMASK 0x00002000 #define CF_SRCASMASK 0x00004000 #define CF_DSTASMASK 0x00008000 #define CF_SRCMASKLENMASK 0x00010000 #define CF_DSTMASKLENMASK 0x00020000 #define CF_TCPFLAGSMASK 0x00040000 #define CF_INPUTENCAPMASK 0x00080000 #define CF_OUTPUTENCAPMASK 0x00100000 #define CF_PEERNEXTHOPMASK 0x00200000 #define CF_ENGINETYPEMASK 0x00400000 #define CF_ENGINEIDMASK 0x00800000 #define CF_INDEX_V1_MASK 0x00043FFF #define CF_INDEX_V5_MASK 0x00C7FFFF #define CF_INDEX_V6_MASK 0x00FFFFFF #define CF_INDEX_V7_MASK 0x00C7FFFF #define CF_INDEX_V8_1_MASK 0x00C0CD99 #define CF_INDEX_V8_2_MASK 0x00C00DE1 #define CF_INDEX_V8_3_MASK 0x00C14D8B #define CF_INDEX_V8_4_MASK 0x00C28D95 #define CF_INDEX_V8_5_MASK 0x00C3CD9F #define CF_INDEX_V8_6_MASK 0x00C02D95 #define CF_INDEX_V8_7_MASK 0x00C02D9F #define CF_INDEX_V8_8_MASK 0x00C02DFF #define CF_INDEX_V8_9_MASK 0x00C0ED99 #define CF_INDEX_V8_10_MASK 0x00C02DE1 #define CF_INDEX_V8_11_MASK 0x00C16D8B #define CF_INDEX_V8_12_MASK 0x00C2AD95 #define CF_INDEX_V8_13_MASK 0x00C3ED9F #define CF_INDEX_V8_14_MASK 0x00C32DFF flow-tools-0.68/src/flow-capture.c0000644000076600007660000011611207776322542012634 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-capture.c,v 1.78 2004/01/05 17:56:50 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" #ifdef HAVE_LIBWRAP #include #endif /* HAVE_LIBWRAP */ void fterr_exit_handler(int code); #define CAPTURE_PIDFILE "/var/run/flow-capture.pid" #define SELECT_TIMEOUT 1 /* 1 second */ struct client_rec { int fd; struct sockaddr_in addr; int flags; time_t conn_time; struct ftio ftio; FT_LIST_ENTRY (client_rec) chain; }; struct client { FT_LIST_HEAD(clienth, client_rec) list; struct sockaddr_in addr; int fd; int enabled; /* listen socket enabled? */ int max; /* max connections */ int active; /* active connections */ #ifdef HAVE_LIBWRAP struct request_info tcpd; #endif /* HAVE_LIBWRAP */ }; struct rotate { double next; /* time of next rotation */ int cur; /* current rotation # */ int n; /* number per day */ }; struct file { int fd; /* file descriptor */ char name[MAXPATHLEN+1]; /* name */ char nname[MAXPATHLEN+1]; /* new name */ time_t time; struct ftver ftv; off_t nbytes; u_int32 hdr_nflows; u_int32 hdr_flows_corrupt; u_int32 hdr_flows_lost; u_int32 hdr_flows_reset; }; int debug; int sig_pipe_flag, sig_quit_flag, sig_hup_flag, sig_chld_flag, sig_term_flag; int reload_flag; void sig_pipe(int); void sig_quit(int); void sig_hup(int); void sig_chld(int); void sig_term(int); pid_t pid; char *pidfile; struct ftnet ftnet; void usage(void); int calc_rotate (int next, double *trotate, int *cur); double doubletime(void); int main(argc, argv) int argc; char **argv; { #ifdef IP_ADD_MEMBERSHIP struct ip_mreq mr; #ifdef IP_ADD_SOURCE_MEMBERSHIP struct ip_mreq_source mrs; #endif #endif fd_set rfd; struct sockaddr_in tmp_addr; struct timeval tv; struct tm *tm; struct ftset ftset; struct ftfile_entries fte; struct client client; struct ftio ftio; struct ftpdu ftpdu; struct ftpeeri ftpi; struct ftver ftv; struct ftchash *ftch; struct ftchash_rec_exp ftch_recexp, *ftch_recexpp; struct rotate rot; struct file cap_file; struct fttag fttag; struct ftfil ftfil; struct ftxlate ftxlate; struct fttag_def *ftd; struct ftfil_def *ftfd; struct ftvar ftvar; struct ftxlate_def *ftxd; struct fts3rec_offsets fo; struct client_rec *client_rec, *client_rec2; pid_t child_pid; time_t tt_now, time_startup; double now; char work_dir[MAXPATHLEN+1], post_rotate_exec[MAXPATHLEN+1]; int i, n, tmp_len, enable_unlink, offset, detach, nest, one, max_fd; unsigned int v1, v2; u_int32 hash; char fmt_src_ip[32], fmt_dst_ip[32], fmt_dst_port[32]; char xl_rec[FT_IO_MAXREC], *out_rec; char *tag_fname, *tag_active; char *filter_fname, *filter_active; char *xlate_fname, *xlate_active; int stat_interval, stat_next, child_status; int v_flag; int preserve_umask; time_startup = time((time_t)0L); bzero (&rot, sizeof rot); bzero (&cap_file, sizeof cap_file); bzero (&ftnet, sizeof ftnet); bzero (&tv, sizeof tv); bzero (&work_dir, sizeof work_dir); bzero (&post_rotate_exec, sizeof post_rotate_exec); bzero (&fte, sizeof fte); bzero (&client, sizeof client); bzero (&ftpdu, sizeof ftpdu); bzero (&ftv, sizeof ftv); bzero (&fttag, sizeof fttag); bzero (&ftfil, sizeof ftfil); bzero (&ftxlate, sizeof ftxlate); bzero (&ftvar, sizeof ftvar); FT_LIST_INIT(&client.list); stat_interval = 0; stat_next = -1; v_flag = 0; reload_flag = 1; preserve_umask = 0; tag_fname = FT_PATH_CFG_TAG; tag_active = (char*)0L; filter_fname = FT_PATH_CFG_FILTER; filter_active = (char*)0L; xlate_fname = FT_PATH_CFG_XLATE; xlate_active = (char*)0L; ftfd = (struct ftfil_def*)0L; ftd = (struct fttag_def*)0L; ftxd = (struct ftxlate_def*)0L; /* init fterr */ fterr_setid(argv[0]); fterr_setexit(fterr_exit_handler); /* init var binding */ if (ftvar_new(&ftvar) < 0) fterr_errx(1, "ftvar_new(): failed"); /* defaults + default compression */ ftset_init(&ftset, Z_DEFAULT_COMPRESSION); /* default timeout waiting for an active fd */ tv.tv_sec = SELECT_TIMEOUT; /* listen for PDU's */ ftnet.loc_addr.sin_family = AF_INET; ftnet.loc_addr.sin_addr.s_addr = htonl(INADDR_ANY); ftnet.loc_addr.sin_port = htons(FT_PORT); /* listen for clients */ client.addr.sin_family = AF_INET; client.addr.sin_addr.s_addr = htonl(INADDR_ANY); client.addr.sin_port = htons(FT_PORT); /* default detach from parent */ detach = 1; /* default 95 rotations per day, or every 15 minutes */ rot.n = 95; /* no files initially open */ cap_file.fd = -1; /* year/month/day nesting */ nest = 3; /* pidfile */ pidfile = CAPTURE_PIDFILE; while ((i = getopt(argc, argv, "b:c:C:d:De:E:f:F:hn:N:p:S:t:T:uv:V:w:x:X:z:R:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\" at -b"); break; case 'c': /* client enable */ client.max = atoi(optarg); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'D': /* daemonize */ detach = 0; pidfile = (char*)0L; break; case 'e': /* expire */ fte.max_files = atoi(optarg); if (fte.max_files) fte.expiring = 1; break; case 'E': /* expire bytes */ if ((fte.max_bytes = scan_size(optarg)) == -1) fterr_errx(1, "scan_size(): failed"); if (fte.max_bytes) fte.expiring = 1; break; case 'f': /* filter fname */ filter_fname = optarg; break; case 'F': /* filter active */ filter_active = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'h': /* help */ usage(); exit (0); break; case 'n': /* # rotations / day */ rot.n = atoi(optarg); /* no more than 1 rotation per minute */ if (rot.n > (1440-1)) fterr_errx(1, "rotations limited to every 1 minute"); break; case 'N': /* nesting level */ nest = atoi(optarg); if ((nest < -3) || (nest > 3)) fterr_errx(1, "-3 <= nesting level <= 3"); break; case 'p': /* pidfile */ if ((optarg[0] == 0) || ((optarg[0] == '-') && (optarg[1] == 0))) pidfile = (char*)0L; else pidfile = optarg; break; case 'R': /* Post rotate exec */ if (strlen(optarg) > MAXPATHLEN) fterr_errx(1, "Post rotate argument too long"); strcpy(post_rotate_exec,optarg); break; case 'S': /* stat interval */ stat_interval = atoi(optarg); if ((stat_interval < 0) || (stat_interval > 60)) fterr_errx(1, "Stat interval must be between 0 and 60."); break; case 't': /* tag filename */ tag_fname = optarg; break; case 'T': /* active tags */ tag_active = optarg; /* required for fttag_eval() */ ftv.s_version = FT_IO_SVERSION; ftv.d_version = 1005; ftv.set = 1; break; case 'i': /* preserve inherited umask */ preserve_umask = 1; break; case 'v': /* variable */ if (ftvar_pset(&ftvar, optarg) < 0) fterr_errx(1, "ftvar_pset(%s): failed", optarg); break; case 'V': /* PDU version */ v_flag = 1; n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.set = 1; } else if (n == 2) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.agg_method = v2; ftv.agg_version = 2; ftv.set = 1; } else { fterr_errx(1, "Version scan failed"); } break; case 'w': /* working directory */ if (strlen(optarg) > (MAXPATHLEN)) fterr_errx(1, "Pathname too long"); strcpy(work_dir, optarg); break; case 'x': /* xlate file name */ xlate_fname = optarg; break; case 'X': /* xlate definition name */ xlate_active = optarg; break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; default: usage(); exit (1); break; } /* switch */ /* disable pidfile if not forking */ if (!detach) pidfile = (char*)0L; if ((argc - optind) != 1) fterr_errx(1, "Specify localip/remoteip/port."); /* tagging forces v1005 */ if (v_flag && tag_active && (ftv.d_version != 1005)) fterr_errx(1, "Must be v1005 with tagging."); if (!work_dir[0]) fterr_errx(1, "Specify workdir with -w."); ftpi = scan_peeri(argv[optind]); ftnet.rem_ip = ftpi.rem_ip; ftnet.loc_ip = ftpi.loc_ip; if (ftpi.dst_port) ftnet.dst_port = ftpi.dst_port; else ftnet.dst_port = FT_PORT; ftnet.loc_addr.sin_addr.s_addr = htonl(ftpi.loc_ip); ftnet.loc_addr.sin_port = htons(ftnet.dst_port); client.addr.sin_port = htons(ftnet.dst_port); /* if debugging is enabled do not unlink any files when aging */ if (debug) enable_unlink = 0; else enable_unlink = 1; /* daemonize */ if (detach) { if ((pid = fork()) == -1) { fterr_err(1, "fork()"); } else if (pid) { if (pidfile) write_pidfile(pid, pidfile, ftnet.dst_port); exit (0); /* parent */ } if (!preserve_umask) umask(0022); setsid(); for (n = 0; n < 16; ++n) close (n); /* enable syslog */ fterr_setsyslog(1, LOG_PID|LOG_NDELAY, LOG_LOCAL6); /* disable stderr */ fterr_setfile(0, (void*)0L); } /* * configure signal handlers */ if (mysignal(SIGPIPE, sig_pipe) == SIG_ERR) fterr_err(1, "signal(SIGPIPE)"); if (mysignal(SIGHUP, sig_hup) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); if (mysignal(SIGQUIT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGQUIT)"); if (mysignal(SIGTERM, sig_term) == SIG_ERR) fterr_err(1, "signal(SIGTERM)"); if (mysignal(SIGCHLD, sig_chld) == SIG_ERR) fterr_err(1, "signal(SIGCHLD)"); /* sandbox */ if (chdir(work_dir) == -1) fterr_err(1, "chdir(%s)", work_dir); /* * load directory entries into the file ager */ if (fte.expiring) if (ftfile_loaddir(&fte, ".", FT_FILE_SORT|FT_FILE_INIT|FT_FILE_CHECKNAMES)) fterr_errx(1, "ftfile_scandir(): failed"); /* debugging gets a dump of the ager */ if (debug) ftfile_dump(&fte); /* run the ager once now */ if (fte.expiring) if (ftfile_expire(&fte, enable_unlink, (u_int32)0)) fterr_errx(1, "ftfile_export(): failed"); /* get hostname */ if (gethostname((char*)&ftset.hnbuf, FT_HOSTNAME_LEN-1) == -1) fterr_err(1, "gethostname()"); /* ensure null terminated */ ftset.hnbuf[FT_HOSTNAME_LEN-1] = 0; /* socket to receive flow pdu exports */ if ((ftnet.fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) fterr_err(1, "socket()"); if (bigsockbuf(ftnet.fd, SO_RCVBUF, FT_SO_RCV_BUFSIZE) < 0) fterr_err(1, "bigsockbuf()"); /* multicast capable? */ #ifdef IP_ADD_MEMBERSHIP if (IN_CLASSD(ftpi.rem_ip)) { /* source is the first arg now */ ftnet.rem_ip = ftpi.loc_ip; ftnet.loc_ip = ftpi.rem_ip; /* socket API usually requires INADDR_ANY * and s/g/port identifier does not have a source interface field * to use here */ bzero(&tmp_addr, sizeof tmp_addr); tmp_addr.sin_family = AF_INET; tmp_addr.sin_port = htons(ftnet.dst_port); one = 1; /* Multicast streams may have multiple receivers */ if (setsockopt(ftnet.fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(SO_REUSEADDR)"); if (bind(ftnet.fd, (struct sockaddr*)&tmp_addr, sizeof(struct sockaddr)) < 0) fterr_err(1, "bind(%s)", inet_ntoa(tmp_addr.sin_addr)); #ifdef IP_ADD_SOURCE_MEMBERSHIP /* ssm address? */ if (IN_CLASSD_SSM(ftpi.rem_ip)) { mrs.imr_sourceaddr.s_addr = htonl(ftpi.loc_ip); mrs.imr_multiaddr.s_addr = htonl(ftpi.rem_ip); mrs.imr_interface.s_addr = INADDR_ANY; if (setsockopt(ftnet.fd, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, (char*)&mrs, sizeof(mrs)) < 0) fterr_err(1, "setsockopt(IP_ADD_SOURCE_MEMBERSHIP)"); } goto mcast_done; #endif /* IP_ADD_SOURCE_MEMBERSHIP */ mr.imr_multiaddr.s_addr = htonl(ftpi.rem_ip); mr.imr_interface.s_addr = INADDR_ANY; if (setsockopt(ftnet.fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mr, sizeof(mr)) < 0) fterr_err(1, "setsockopt(IP_ADD_MEMBERSHIP)"); } else { /* is a multicast group */ /* unicast bind -- multicast support */ if (bind(ftnet.fd, (struct sockaddr*)&ftnet.loc_addr, sizeof(ftnet.loc_addr)) < 0) fterr_err(1, "bind(%s)", inet_ntoa(ftnet.loc_addr.sin_addr)); } /* not multicast group */ #ifdef IP_ADD_SOURCE_MEMBERSHIP mcast_done: #endif /* IP_ADD_SOURCE_MEMBERSHIP */ #else /* IP_ADD_MEMBERSHIP */ /* unicast bind -- no multicast support */ if (bind(ftnet.fd, (struct sockaddr*)&ftnet.loc_addr, sizeof(ftnet.loc_addr)) < 0) fterr_err(1, "bind(%s)", inet_ntoa(ftnet.loc_addr.sin_addr))); #endif /* IP_ADD_MEMBERSHIP */ #ifdef IP_RECVDSTADDR one = 1; /* return the destination IP address */ if (setsockopt(ftnet.fd, IPPROTO_IP, IP_RECVDSTADDR, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(IP_RECVDSTADDR)"); #else #ifdef IP_PKTINFO one = 1; /* return the destination IP address */ if (setsockopt(ftnet.fd, IPPROTO_IP, IP_PKTINFO, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(IP_PKTINFO)"); #endif /* else */ #endif /* IP_RECVDSTADDR */ /* init hash table for demuxing exporters */ if (!(ftch = ftchash_new(256, sizeof (struct ftchash_rec_exp), 12, 1))) fterr_errx(1, "ftchash_new(): failed"); /* init msg block */ ftnet.iov[0].iov_len = sizeof ftpdu.buf; ftnet.iov[0].iov_base = (char*)&ftpdu.buf; ftnet.msg.msg_iov = (struct iovec*)&ftnet.iov; ftnet.msg.msg_iovlen = 1; ftnet.msg.msg_name = &ftnet.rem_addr; ftnet.msg.msg_namelen = sizeof ftnet.rem_addr; ftnet.msg.msg_control = &ftnet.msgip; ftnet.msg.msg_controllen = sizeof ftnet.msgip; while (1) { FD_ZERO (&rfd); FD_SET (ftnet.fd, &rfd); if (client.enabled && client.max) { FD_SET (client.fd, &rfd); max_fd = (client.fd > ftnet.fd) ? client.fd : ftnet.fd; } else { max_fd = ftnet.fd; } if (select (max_fd+1, &rfd, (fd_set *)0, (fd_set *)0, &tv) < 0) { if (errno == EINTR) { FD_ZERO (&rfd); } else { fterr_err(1, "select()"); } } bzero (&tv, sizeof tv); tv.tv_sec = SELECT_TIMEOUT; tt_now = now = doubletime(); /* new TCP client connection ? */ if ((client.max) && (FD_ISSET(client.fd, &rfd))) { /* too many clients? */ if (client.active >= client.max) { /* bye */ i = accept(client.fd, (struct sockaddr*)&tmp_addr, (socklen_t*)&tmp_len); close(i); fterr_warnx("Maximum clients exceeded, rejecting connection from %s", inet_ntoa(tmp_addr.sin_addr)); goto skip_client; } /* allocate a new client record, fail gracefully */ if (!(client_rec = (struct client_rec*)malloc(sizeof *client_rec))) { fterr_warn("malloc()"); /* bye */ tmp_len = sizeof (struct sockaddr_in); i = accept(client.fd, (struct sockaddr*)&client_rec->addr, (socklen_t*)&tmp_len); close(i); goto skip_client; } bzero(client_rec, sizeof *client_rec); /* link in the new record */ FT_LIST_INSERT_HEAD(&client.list, client_rec, chain); tmp_len = sizeof (struct sockaddr_in); /* accept() the connection */ if ((client_rec->fd = accept(client.fd, (struct sockaddr*)&client_rec->addr, (socklen_t*)&tmp_len)) < 0) { fterr_warn("accept()"); FT_LIST_REMOVE(client_rec, chain); free(client_rec); goto skip_client; } #ifdef HAVE_LIBWRAP request_init(&client.tcpd, RQ_DAEMON, "flow-capture-client", RQ_FILE, client_rec->fd, NULL); fromhost(&client.tcpd); if (!hosts_access(&client.tcpd)) { fterr_warnx("client %s refused by libwrap", inet_ntoa(client_rec->addr.sin_addr)); close(client_rec->fd); FT_LIST_REMOVE(client_rec, chain); free(client_rec); goto skip_client; } #endif /* HAVE_LIBWRAP */ if (bigsockbuf(client_rec->fd, SO_SNDBUF, FT_SO_SND_BUFSIZE) < 0) fterr_warn("bigsockbuf()"); /* log it */ client_rec->conn_time = tt_now; fterr_info("client connect: ip=%s time=%lu", inet_ntoa(client_rec->addr.sin_addr), (unsigned long)client_rec->conn_time); /* ftio_init the stream */ if (ftio_init(&client_rec->ftio, client_rec->fd, FT_IO_FLAG_NO_SWAP | FT_IO_FLAG_WRITE) < 0) { fterr_warnx("ftio_init(): failed for client"); close(client_rec->fd); FT_LIST_REMOVE(client_rec, chain); free(client_rec); goto skip_client; } /* set the version information in the io stream */ if (ftio_set_ver(&client_rec->ftio, &ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); ftio_set_comment(&client_rec->ftio, ftset.comments); ftio_set_cap_hostname(&client_rec->ftio, ftset.hnbuf); ftio_set_byte_order(&client_rec->ftio, ftset.byte_order); ftio_set_cap_time(&client_rec->ftio, cap_file.time, 0); ftio_set_debug(&client_rec->ftio, debug); /* header first */ if ((n = ftio_write_header(&client_rec->ftio)) < 0) { fterr_warnx("ftio_write_header(): failed for client"); ftio_close(&client_rec->ftio); FT_LIST_REMOVE(client_rec, chain); free(client_rec); goto skip_client; } ++client.active; } /* new TCP client */ skip_client: /* stake the zombies */ if (sig_chld_flag) { /* not again */ sig_chld_flag = 0; while (1) { child_pid = wait3(&child_status, WNOHANG, 0); /* no more dead children? */ if (!child_pid) break; /* no more dead children? */ if ((child_pid == -1) && (errno == ECHILD)) break; if (WIFEXITED(child_status)) { if (WEXITSTATUS(child_status)) fterr_warnx("Child %d exit_status=%d", (int)child_pid, WEXITSTATUS(child_status)); } else if (WIFSIGNALED(child_status)) { fterr_warnx("Child %d signal=%d", (int)child_pid, WTERMSIG(child_status)); } else { fterr_warnx("PID %d exited status=%d", (int)child_pid, child_status); } } /* buffy */ } /* sig_chld_flag */ if (stat_interval) { tm = localtime (&tt_now); /* * note there is an obscure race condition here if this * code is not reached at least every stat_interval*60 seconds * where up to 1 hour of STAT lines would not show up. * This is highly unlikely and not handled. */ if ((tm->tm_min == stat_next) || (stat_next == -1)) { ftchash_first(ftch); while ((ftch_recexpp = ftchash_foreach(ftch))) { fmt_ipv4(fmt_src_ip, ftch_recexpp->src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexpp->dst_ip, FMT_JUST_LEFT); fterr_info( "STAT: now=%lu startup=%lu src_ip=%s dst_ip=%s d_ver=%d pkts=%lu flows=%lu lost=%lu reset=%lu filter_drops=%lu", (unsigned long)tt_now, (unsigned long)time_startup, fmt_src_ip, fmt_dst_ip, ftch_recexpp->d_version, (u_long)ftch_recexpp->packets, (u_long)ftch_recexpp->flows, (u_long)ftch_recexpp->lost, (u_long)ftch_recexpp->reset, (u_long)ftch_recexpp->filtered_flows); } stat_next = (tm->tm_min + (stat_interval - tm->tm_min % stat_interval)) % 60; } } /* stat_inverval */ /* flag for work later on */ ftpdu.ftd.count = 0; /* PDU ready */ if (FD_ISSET(ftnet.fd, &rfd)) { restart_recvmsg: if ((ftpdu.bused = recvmsg(ftnet.fd, (struct msghdr*)&ftnet.msg, 0)) < 0) { if (errno == EAGAIN) goto restart_recvmsg; fterr_err(1, "recvmsg()"); } #ifdef IP_RECVDSTADDR /* got destination IP back? */ if ((ftnet.msgip.hdr.cmsg_level == IPPROTO_IP) && (ftnet.msgip.hdr.cmsg_type == IP_RECVDSTADDR)) { ftnet.loc_addr.sin_addr.s_addr = ftnet.msgip.ip.s_addr; } else { ftnet.loc_addr.sin_addr.s_addr = 0; } #else #ifdef IP_PKTINFO if ((ftnet.msgip.hdr.cmsg_level == IPPROTO_IP) && (ftnet.msgip.hdr.cmsg_type == IP_PKTINFO)) { ftnet.loc_addr.sin_addr.s_addr = ftnet.msgip.pktinfo.ipi_addr.s_addr; } else { ftnet.loc_addr.sin_addr.s_addr = 0; } #else ftnet.loc_addr.sin_addr.s_addr = 0; #endif #endif /* IP_RECVDSTADDR */ /* fill in hash key */ ftch_recexp.src_ip = htonl(ftnet.rem_addr.sin_addr.s_addr); ftch_recexp.dst_ip = htonl(ftnet.loc_addr.sin_addr.s_addr); ftch_recexp.dst_port = ftnet.dst_port; /* verify integrity, get version */ if (ftpdu_verify(&ftpdu) < 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fterr_warnx("ftpdu_verify(): src_ip=%s failed.", fmt_src_ip); ++cap_file.hdr_flows_corrupt; goto skip_pdu_decode; } /* rest of hash key */ ftch_recexp.d_version = ftpdu.ftv.d_version; /* if exporter src IP has been configured then make sure it matches */ if (ftnet.rem_ip && (ftnet.rem_ip != ftch_recexp.src_ip)) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fterr_warnx("Unexpected PDU: src_ip=%s not configured", fmt_src_ip); ++cap_file.hdr_flows_corrupt; goto skip_pdu_decode; } /* first flow or no configured destination version? */ if (!ftv.set) { /* copy to compare next time */ bcopy(&ftpdu.ftv, &ftv, sizeof ftv); /* flag struct as configured */ ftv.set = 1; } else { /* translation to/from v8 not possible */ if (((ftv.d_version == 8) && (ftpdu.ftv.d_version != 8)) || ((ftv.d_version != 8) && (ftpdu.ftv.d_version == 8))) { fmt_ipv4(fmt_src_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_warnx("Unexpected PDU: src_ip=%s no v8 translation", fmt_src_ip); cap_file.hdr_flows_corrupt ++; goto skip_pdu_decode; } /* translation among v8 aggregation methods not possible */ if ((ftv.d_version == 8) && ((ftv.agg_method != ftpdu.ftv.agg_method) || (ftv.agg_version != ftpdu.ftv.agg_version))) { fmt_ipv4(fmt_src_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_warnx( "Unexpected PDU: src_ip=%s multi v8 oagg=%d agg=%d over=%d ver=%d", fmt_src_ip, (int)ftv.agg_method, (int)ftpdu.ftv.agg_method, (int)ftv.agg_version, (int)ftpdu.ftv.agg_version); cap_file.hdr_flows_corrupt ++; goto skip_pdu_decode; } } /* version processing */ /* compute 8 bit hash */ hash = (ftch_recexp.src_ip & 0xFF); hash ^= (ftch_recexp.src_ip>>24); hash ^= (ftch_recexp.dst_ip & 0xFF); hash ^= (ftch_recexp.dst_ip>>24); hash ^= (ftch_recexp.d_version & 0xFF); /* get/create hash table entry */ if (!(ftch_recexpp = ftchash_update(ftch, &ftch_recexp, hash))) fterr_errx(1, "ftch_update(): failed"); /* if the packet count is 0, then this is a new entry */ if (ftch_recexpp->packets == 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_info("New exporter: time=%lu src_ip=%s dst_ip=%s d_version=%d", (u_long)tt_now, fmt_src_ip, fmt_dst_ip, (int)ftpdu.ftv.d_version); /* set translation function */ if (ftch_recexp.d_version != ftv.d_version) ftch_recexpp->xlate = ftrec_xlate_func(&ftpdu.ftv, &ftv); } /* verify sequence number */ if (ftpdu_check_seq(&ftpdu, &(ftch_recexpp->ftseq)) < 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fmt_uint16(fmt_dst_port, ftch_recexp.dst_port, FMT_JUST_LEFT); fterr_warnx( "ftpdu_seq_check(): src_ip=%s dst_ip=%s d_version=%d expecting=%lu received=%lu lost=%lu", fmt_src_ip, fmt_dst_ip, (int)ftpdu.ftv.d_version, (u_long)ftch_recexpp->ftseq.seq_exp, (u_long)ftch_recexpp->ftseq.seq_rcv, (u_long)ftch_recexpp->ftseq.seq_lost); /* only count these lost if "lost" is a reasonable number */ if (ftch_recexpp->ftseq.seq_lost < FT_SEQ_RESET) { cap_file.hdr_flows_lost += ftch_recexpp->ftseq.seq_lost; ftch_recexpp->lost += ftch_recexpp->ftseq.seq_lost; } else { cap_file.hdr_flows_reset ++; ftch_recexpp->reset ++; } } /* decode the pdu */ ftpdu.ftd.byte_order = ftset.byte_order; ftpdu.ftd.exporter_ip = ftch_recexp.src_ip; n = fts3rec_pdu_decode(&ftpdu); /* update the exporter stats */ ftch_recexpp->packets ++; ftch_recexpp->flows += n; } /* PDU on receive buffer */ skip_pdu_decode: /* no current file and pdu version has been set -> create file */ if ((cap_file.fd == -1) && (ftv.d_version)) { /* calculate the current rotation and next rotate time */ if (calc_rotate(rot.n, &rot.next, &rot.cur) == -1) fterr_errx(1, "calc_rotate(): failed"); /* remember when file was created */ cap_file.time = (u_int32)tt_now; /* remember the version encoded in the filename */ bcopy(&ftv, &cap_file.ftv, sizeof cap_file.ftv); /* construct the capture file name */ ftfile_pathname(cap_file.name, MAXPATHLEN, nest, cap_file.ftv, 0, cap_file.time); /* create directory path for file */ if (ftfile_mkpath(cap_file.time, nest) < 0) fterr_err(1, "ftfile_mkpath(%s)", cap_file.name); /* create/open the capture file */ if ((cap_file.fd = open(cap_file.name, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1) fterr_err(1, "open(%s)", cap_file.name); /* initialize the IO stream */ if (ftio_init(&ftio, cap_file.fd, FT_IO_FLAG_NO_SWAP | FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* set the version information in the io stream */ if (ftio_set_ver(&ftio, &ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* need offsets for filter later */ fts3rec_compute_offsets(&fo, &ftv); ftio_set_comment(&ftio, ftset.comments); ftio_set_cap_hostname(&ftio, ftset.hnbuf); ftio_set_byte_order(&ftio, ftset.byte_order); ftio_set_z_level(&ftio, ftset.z_level); ftio_set_cap_time(&ftio, cap_file.time, 0); ftio_set_debug(&ftio, debug); ftio_set_corrupt(&ftio, cap_file.hdr_flows_corrupt); ftio_set_lost(&ftio, cap_file.hdr_flows_lost); ftio_set_reset(&ftio, cap_file.hdr_flows_reset); ftio_set_flows_count(&ftio, cap_file.hdr_nflows); /* ftio_map_load(&ftio, FT_MAP_FILE, ftnet.rem_ip); */ /* header first */ if ((n = ftio_write_header(&ftio)) < 0) fterr_errx(1, "ftio_write_header(): failed"); else cap_file.nbytes = n; } /* create capture file and init new io stream */ /* load filters and tags? */ if (reload_flag && ftv.set) { /* load tags */ if (tag_active) { /* not first time through, then free previous tags */ if (ftd) { fttag_free(&fttag); fterr_info("Reloading tags."); } if (fttag_load(&fttag, &ftvar, tag_fname) < 0) fterr_errx(1, "fttag_load(): failed"); if (!(ftd = fttag_def_find(&fttag, tag_active))) fterr_errx(1, "fttag_load(): failed"); } /* tag_active */ /* load filters */ if (filter_active) { /* not first time through, then free previous filters */ if (ftfd) { ftfil_free(&ftfil); fterr_info("Reloading filters."); } if (ftfil_load(&ftfil, &ftvar, filter_fname)) fterr_errx(1, "ftfil_load(%s): failed", filter_fname); if (!(ftfd = ftfil_def_find(&ftfil, filter_active))) fterr_errx(1, "ftfil_def_find(%s): failed", filter_active); if (ftfil_def_test_xfields(ftfd, ftrec_xfield(&ftv))) fterr_errx(1, "Filter references a field not in flow."); } /* filter_active */ /* load translations */ if (xlate_active) { /* not first time through, then free previous translations */ if (ftxd) { ftxlate_free(&ftxlate); fterr_info("Reloading translations."); } if (ftxlate_load(&ftxlate, &ftvar, xlate_fname)) fterr_errx(1, "ftxlate_load(%s): failed", xlate_fname); if (!(ftxd = ftxlate_def_find(&ftxlate, xlate_active))) fterr_errx(1, "ftlate_def_find(%s): failed", xlate_active); if (ftxlate_def_test_xfields(ftxd, ftrec_xfield(&ftv))) fterr_errx(1, "Xlate references a field not in flow."); } /* xlate_active */ reload_flag = 0; } /* reload_flag */ /* if the decode buffer has entries write them out */ for (i = 0, offset = 0; i < ftpdu.ftd.count; ++i, offset += ftpdu.ftd.rec_size) { /* translate version? */ if (ftch_recexpp->xlate) { ftch_recexpp->xlate(ftpdu.ftd.buf+offset, &xl_rec); out_rec = (char*)&xl_rec; /* tagging? */ if (tag_active) fttag_def_eval(ftd, (struct fts3rec_v1005*)out_rec); } else { out_rec = (char*)ftpdu.ftd.buf+offset; } /* filter? */ if (ftfd) if (ftfil_def_eval(ftfd, out_rec, &fo) == FT_FIL_MODE_DENY) { ++ftch_recexpp->filtered_flows; continue; } /* xlate? */ if (ftxd) if (ftxlate_def_eval(ftxd, out_rec, &fo) != 0) fterr_errx(1, "ftxlate_def_eval(): failed."); /* update # of flows stored in capture file */ cap_file.hdr_nflows ++; if ((n = ftio_write(&ftio, out_rec)) < 0) fterr_errx(1, "ftio_write(): failed"); /* write to clients */ FT_LIST_FOREACH(client_rec, &client.list, chain) { if ((n = ftio_write(&client_rec->ftio, out_rec)) < 0) { fterr_info("Killed client: ip=%s, dtime=%lu", inet_ntoa(client_rec->addr.sin_addr), (unsigned long)tt_now - client_rec->conn_time); ftio_close(&client_rec->ftio); client_rec2 = client_rec; client_rec = client_rec->chain.le_next; FT_LIST_REMOVE(client_rec2, chain); free(client_rec2); --client.active; if (!client_rec) break; } /* ftio_write */ } /* foreach client */ /* update # of bytes stored in capture file */ cap_file.nbytes += n; } /* foreach entry in decode buffer */ /* * time for a new file ? */ if ((now > rot.next) || sig_term_flag || sig_quit_flag || sig_hup_flag) { if (sig_hup_flag) fterr_info("SIGHUP"); sig_hup_flag = 0; /* re-arm */ if (cap_file.fd != -1) { ftio_set_cap_time(&ftio, cap_file.time, (u_int32)tt_now); ftio_set_corrupt(&ftio, cap_file.hdr_flows_corrupt); ftio_set_lost(&ftio, cap_file.hdr_flows_lost); ftio_set_reset(&ftio, cap_file.hdr_flows_reset); ftio_set_flows_count(&ftio, cap_file.hdr_nflows); /* re-write header first */ if (ftio_write_header(&ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); if ((n = ftio_close(&ftio)) < 0) fterr_errx(1, "ftio_close(): failed"); cap_file.nbytes += n; /* construct final version of capture filename */ ftfile_pathname(cap_file.nname, MAXPATHLEN, nest, cap_file.ftv, 1, cap_file.time); /* rename working to final */ if (rename(cap_file.name, cap_file.nname) == -1) fterr_err(1, "rename(%s,%s)", cap_file.name, cap_file.nname); /* add it to the ager */ if (fte.expiring) if (ftfile_add_tail(&fte, cap_file.nname, cap_file.nbytes, cap_file.time)) fterr_errx(1, "ftfile_add_tail(%s): failed", cap_file.name); /* debugging gets a dump of the ager */ if (debug) ftfile_dump(&fte); /* Do the post rotate exec */ if (post_rotate_exec[0]) { if ((n = fork()) == -1) { fterr_err(1, "fork()"); } else if (!n) { /* child */ n = execl(post_rotate_exec, post_rotate_exec, cap_file.nname, NULL); if (n == -1) fterr_err(1, "exec(%s)", post_rotate_exec); _exit(0); } /* child */ } /* post rotate exec */ /* reset */ bzero(&cap_file, sizeof cap_file); /* invalidate file descriptor */ cap_file.fd = -1; /* had enough */ if (sig_quit_flag || sig_term_flag) goto main_exit; } /* file open */ } /* time for new file */ /* also need to check sig_quit if no file has been processed yet */ if (sig_quit_flag || sig_term_flag) goto main_exit; /* * If client attachments are enabled, and the flow version has been * determined setup a listener, but only once. */ if (ftv.set && client.max && !client.enabled) { /* socket for listen */ if ((client.fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) fterr_err(1, "socket()"); one = 1; if (setsockopt(client.fd, SOL_SOCKET, SO_REUSEADDR, (char*)&one, sizeof (one))) fterr_err(1, "setsockopt(SO_REUSEADDR)"); if (bind(client.fd, (struct sockaddr*)&client.addr, sizeof (client.addr)) < 0) fterr_err(1, "bind(%s)", inet_ntoa(client.addr.sin_addr)); /* listen for new TCP connections */ if (listen(client.fd, 5) < 0) fterr_err(1, "listen()"); /* non blocking */ if (fcntl(client.fd, F_SETFL, O_NONBLOCK) < 0) fterr_err(1, "fcntl()"); client.enabled = 1; } /* clients enabled */ if (!(cap_file.hdr_nflows % 1001)) { if (fte.expiring) if (ftfile_expire(&fte, enable_unlink, cap_file.nbytes)) fterr_errx(1, "ftfile_expire(): failed"); } /* ager run? */ } /* while 1 */ main_exit: if (pidfile) unlink_pidfile(pid, pidfile, ftnet.dst_port); if (sig_quit_flag) fterr_info("SIGQUIT"); if (sig_term_flag) fterr_info("SIGTERM"); /* free storage allocated to file entries */ if (fte.expiring) ftfile_free(&fte); return 0; } /* main */ void sig_pipe(int signo) { sig_pipe_flag = 1; } void sig_hup(int signo) { sig_hup_flag = 1; reload_flag = 1; } void sig_quit(int signo) { sig_quit_flag = 1; } void sig_term(int signo) { sig_term_flag = 1; } void sig_chld(int signo) { sig_chld_flag = 1; } /* doubletime - like time(2), but returns a double (with fractional seconds) * This was inspired by the Time::HiRes perl module. E.g.: * $ perl -MTime::HiRes -le 'print scalar Time::HiRes::time' * See "perl/CPAN/authors/id/D/DE/DEWEG/Time-HiRes-01.20.tar.gz". * - Dave Plonka */ double doubletime(void) { double now; struct timeval tv_now; if (-1 == gettimeofday(&tv_now, (struct timezone *)0)) return -1; now = tv_now.tv_sec + (tv_now.tv_usec / 1000000.0); return now; } int calc_rotate (int next, double *trotate, int *cur) { double now; /* current time */ time_t tt_now; /* current time */ double irotate; /* interval of next in seconds */ time_t morning; /* start of the day */ struct tm *tm1; irotate = 86400. / (next+1); *cur = 0; if (-1 == (tt_now = now = doubletime())) return -1; /* calculate start of the day */ if (!(tm1 = localtime (&tt_now))) return -1; tm1->tm_sec = 0; tm1->tm_min = 0; tm1->tm_hour = 0; if ((morning = mktime(tm1)) == -1) return -1; if (next) *trotate = morning + irotate; else *trotate = morning + 86400.; while (now > *trotate) { ++ *cur; *trotate += irotate; } return 0; } /* calc_rotate */ void fterr_exit_handler(int code) { if (pid && pidfile) unlink_pidfile(pid, pidfile, ftnet.dst_port); exit (code); } /* fterr_exit_handler */ void usage(void) { fprintf(stderr, "Usage: flow-capture [-hu] [-b big|little]\n"); fprintf(stderr, " [-C comment] [-c flow_clients] [-d debug_level] [-D daemonize]\n"); fprintf(stderr, " [-e expire_count] [-E expire_size[bKMG]] [-n rotations]\n"); fprintf(stderr, " [-N nesting_level] [-p pidfile ] [-R rotate_program]\n"); fprintf(stderr, " [-S stat_interval] [-t tag_fname] [-T tag_active] [-V pdu_version]\n"); fprintf(stderr, " [-z z_level] [-x xlate_fname] [-X xlate_active]\n"); fprintf(stderr, " -w workdir localip/remoteip/port\n"); fprintf(stderr, "Signals:\n"); fprintf(stderr, " SIGHUP - close and rotate current file\n"); fprintf(stderr, " SIGQUIT - close current file and exit\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-cat.c0000644000076600007660000004016510240154252011721 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-cat.c,v 1.35 2005/05/10 15:52:10 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; int done; void usage(void); void sig_quit(int sig); int main(int argc, char **argv) { struct stat sb; struct ftio ftio_in, ftio_out; struct ftprof ftp; struct ftver ftv, ftv2; struct ftset ftset; struct ftfile_entries **fte; struct ftfile_entry *fty; int i, out_fd, out_fd_plain, in_fd, disable_mmap, in_fd_plain, sort; int fields; int x, n, fd, flags, fte_entries, preload, time_filter; char *fname, *out_fname; char *rec; u_long total_bytes; u_int32 total_flows, lost_flows, corrupt_flows, total_streams; u_int32 time_start, time_end, time_tmp1, time_tmp2, time_delta; u_int32 time_low, time_high; /* init fterr */ fterr_setid(argv[0]); /* profile */ ftprof_start (&ftp); bzero(&ftv, sizeof ftv); bzero(&ftv2, sizeof ftv2); /* defaults + no compression */ ftset_init(&ftset, 0); preload = 0; corrupt_flows = 0; lost_flows = 0; total_bytes = 0; total_flows = 0; total_streams = 0; out_fd_plain = 0; out_fname = (char*)0L; out_fd = -1; time_start = -1; /* MAXINT */ time_end = 0; disable_mmap = 0; sort = 0; /* global sorting disabled by default */ fte_entries = 0; flags = FT_FILE_INIT | FT_FILE_SORT | FT_FILE_SKIPTMP; time_filter = 0; time_high = time_low = 0; fields = 0; while ((i = getopt(argc, argv, "ab:C:d:gh?mo:pt:T:z:")) != -1) switch (i) { case 'a': /* all files, even those with tmp */ flags &= ~FT_FILE_SKIPTMP; break; case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'g': /* global sort */ sort = 1; break; case 'h': /* help */ case '?': default: usage(); exit (1); break; case 'm': /* disable mmap */ disable_mmap = 1; break; case 'o': /* output filename */ out_fname = optarg; break; case 'p': /* preload headers */ preload = 1; break; case 't': /* start time */ preload = 1; time_filter = 1; if ((time_low = get_date(optarg, (time_t*)0L)) == -1) fterr_errx(1, "Error parsing time: %s.", optarg); break; case 'T': /* end time */ preload = 1; time_filter = 1; if ((time_high = get_date(optarg, (time_t*)0L)) == -1) fterr_errx(1, "Error parsing time: %s.", optarg); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; } /* switch */ /* handle signals */ if (mysignal(SIGQUIT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGQUIT)"); if (mysignal(SIGHUP, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); if (mysignal(SIGINT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGINT)"); if (mysignal(SIGTERM, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGTERM)"); /* if out_fname is not set, then use stdout */ if (out_fname) { if ((out_fd = open(out_fname, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1) fterr_err(1, "open(%s)", out_fname); if (fstat(out_fd, &sb) == -1) fterr_err(1, "fstat(%s)", out_fname); /* is this a plain file? */ if (S_ISREG(sb.st_mode)) out_fd_plain = 1; } else out_fd = 1; /* output to out_fd */ if (ftio_init(&ftio_out, out_fd, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); /* header must be full size on initial write */ if (out_fd_plain) { ftio_set_cap_time(&ftio_out, time_start, time_end); ftio_set_flows_count(&ftio_out, total_flows); ftio_set_corrupt(&ftio_out, corrupt_flows); ftio_set_lost(&ftio_out, lost_flows); } /* number of file lists */ fte_entries = argc - optind; /* always at least one entry */ if (fte_entries <= 0) fte_entries = 1; if (sort) fte_entries = 1; /* allocate space for ftfile_entries lists */ if (!(fte = (struct ftfile_entries**)malloc( sizeof (struct ftfile_entries*) * fte_entries))) { fterr_err(1, "malloc()"); } /* allocate each entry */ for (i = 0; i < fte_entries; ++i) { if (!(fte[i] = (struct ftfile_entries*)malloc( sizeof (struct ftfile_entries)))) { fterr_err(1, "malloc()"); } bzero(fte[i], sizeof (struct ftfile_entries)); } /* handle special case of stdin (no args) */ if (optind >= argc) { /* "" will be treated as stdin below */ if (ftfile_loadfile(fte[0], "", flags) < 0) fterr_errx(1, "ftfile_loadfile(%s)", ""); } for (i = optind, x = 0; i < argc; ++i) { fname = argv[i]; /* special case, stdin */ if ((fname[0] == '-') && (fname[1] == 0)) { /* "" will be treated as stdin below */ if (ftfile_loadfile(fte[x], "", flags) < 0) fterr_errx(1, "ftfile_loadfile(%s)", ""); goto skip1; } /* open current file */ if ((fd = open(fname, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", fname); continue; } /* stat current file */ if (fstat(fd, &sb) == -1) fterr_err(1, "fstat(%s)", fname); /* done */ close (fd); /* is this a plain file? */ if (S_ISREG(sb.st_mode)) { if (ftfile_loadfile(fte[x], fname, flags) < 0) fterr_errx(1, "ftfile_loadfile(%s): failed", fname); /* else is this a directory? */ } else if (S_ISDIR(sb.st_mode)) { if (ftfile_loaddir(fte[x], fname, flags) < 0) fterr_errx(1, "ftfile_loaddir(%s): failed", fname); } else { fterr_warnx("odd file, skipping: %s", fname); continue; } skip1: /* if not sorting, use next list (sorting requires one list) */ if (!sort) ++x; else /* else, the list is initialized, don't do it again */ flags &= ~FT_FILE_INIT; } /* foreach file on the command line */ /* dump list of files loaded */ if (debug > 5) { for (i = 0; i < fte_entries; ++i) { fterr_info(" i=%d", i); ftfile_dump(fte[i]); } } /* preload headers */ if (preload) { /* foreach list */ for (i = 0; i < fte_entries; ++i) { /* foreach file in the list */ FT_TAILQ_FOREACH(fty, &fte[i]->head, chain) { if (debug > 5) fterr_info("header load: file=%s", fty->name); /* stdin / real file? */ if (fty->name[0]) { if ((in_fd = open(fty->name, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", fty->name); continue; } } else { continue; } /* initialize ftio stream */ if (ftio_init(&ftio_in, in_fd, FT_IO_FLAG_READ | ((in_fd_plain && !disable_mmap) ? FT_IO_FLAG_MMAP : 0)) < 0) fterr_errx(1, "ftio_init(): failed"); /* ensure required fields */ if (ftio_check_xfield(&ftio_in, FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME| FT_XFIELD_FIRST|FT_XFIELD_LAST)) fterr_errx(1, "Flow record missing required field."); /* keep a record of all the possible fields */ fields |= ftio_in.fth.fields; /* record smallest time */ if (ftio_in.fth.fields & FT_FIELD_CAP_START) { time_tmp1 = ftio_get_cap_start(&ftio_in); if (time_tmp1 < time_start) time_start = time_tmp1; } /* record largest time */ if (ftio_in.fth.fields & FT_FIELD_CAP_END) { time_tmp2 = ftio_get_cap_end(&ftio_in); if (time_tmp2 > time_end) time_end = time_tmp2; } /* * if coarse grained time filtering is enabled -- ie only filtering * files based on header time, ensure this file fits in the window */ if (time_filter) { /* all flows between low and high */ if (time_high && time_low) { time_delta = time_tmp2 - time_tmp1; if ((time_tmp1 < time_low) || ((time_tmp2-time_delta) > time_high)) { fty->skip = 1; goto skip_file; } } else { /* between */ /* all flows until low, ie -inf to low */ if (time_low && (time_tmp1 > time_low)) { fty->skip = 1; goto skip_file; } /* all flows after high, ie high to +inf */ if (time_high && (time_tmp2 < time_high)) { fty->skip = 1; goto skip_file; } } /* outside */ } /* time_filter */ /* total lost flows */ lost_flows += ftio_get_lost(&ftio_in); /* total corrupt flows */ corrupt_flows += ftio_get_corrupt(&ftio_in); /* total flows */ total_flows += ftio_get_flows_count(&ftio_in); skip_file: if (debug > 5) fterr_info("file=%s, status=%d", fty->name, fty->skip); ftio_close(&ftio_in); } } ftio_set_preloaded(&ftio_out, 1); if ((fields & (FT_FIELD_CAP_END|FT_FIELD_CAP_START)) == ( FT_FIELD_CAP_START|FT_FIELD_CAP_END)) ftio_set_cap_time(&ftio_out, time_start, time_end); ftio_set_flows_count(&ftio_out, total_flows); ftio_set_corrupt(&ftio_out, corrupt_flows); ftio_set_lost(&ftio_out, lost_flows); time_start = -1; /* MAXINT */ time_end = 0; total_flows = 0; } /* preload */ /* foreach list */ for (i = 0; i < fte_entries; ++i) { /* foreach file in the list */ FT_TAILQ_FOREACH(fty, &fte[i]->head, chain) { /* skip to next file? */ if (fty->skip) continue; if (debug > 5) fterr_info("working file=%s", fty->name); /* stdin / real file? */ if (fty->name[0]) { in_fd_plain = 1; if ((in_fd = open(fty->name, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", fty->name); continue; } } else { in_fd_plain = 0; in_fd = 0; /* stdin */ } /* initialize ftio stream */ if (ftio_init(&ftio_in, in_fd, FT_IO_FLAG_READ | ((in_fd_plain && !disable_mmap) ? FT_IO_FLAG_MMAP : 0)) < 0) fterr_errx(1, "ftio_init(): failed"); /* get version from stream */ ftio_get_ver(&ftio_in, &ftv2); /* successful process of a stream */ ++ total_streams; /* record smallest time */ time_tmp1 = ftio_get_cap_start(&ftio_in); if (time_tmp1 < time_start) time_start = time_tmp1; /* record largest time */ time_tmp2 = ftio_get_cap_end(&ftio_in); if (time_tmp2 > time_end) time_end = time_tmp2; /* first time through loop? */ if (!ftv.d_version) { /* * is this really the right thing to do here. Reading a v1 * stream gets handled by ftio_read(), but ftio_* leaves the * s_version at 1. */ ftv2.s_version = FT_IO_SVERSION; /* set the version information in the io stream */ if (ftio_set_ver(&ftio_out, &ftv2) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* save for later compare */ bcopy(&ftv2, &ftv, sizeof ftv); /* header first */ if ((n = ftio_write_header(&ftio_out)) < 0) fterr_errx(1, "ftio_write_header(): failed"); total_bytes += n; if (debug > 6) if (n) fterr_info("ftio_write_header()=%d", n); } else { /* ensure previous version == current version */ if ((ftv.d_version != ftv2.d_version) || (ftv.agg_method != ftv2.agg_method)) fterr_errx(1, "data version or sub version changed!"); } /* foreach flow record, copy it */ while ((rec = ftio_read(&ftio_in))) { ++total_flows; if ((n = ftio_write(&ftio_out, rec)) < 0) fterr_errx(1, "ftio_write(): failed"); total_bytes += n; if (debug > 6) if (n) fterr_info("ftio_write()=%d", n); if ((debug > 5) && ((total_flows & 0x3ffff) == 0)) fterr_info("processed/total flows: %lu / %lu", total_flows, ftio_get_flows_count(&ftio_out)); /* interrupted? */ if (done) break; } /* while copying */ /* done with input stream */ if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); /* interrupted? */ if (done) break; } /* FOREACH filename in dir */ } /* foreach dir bundle */ /* * if the output file descriptor was a real file, re-write the * flow_header with the correct # of total flows */ if (out_fd_plain) { ftio_set_cap_time(&ftio_out, time_start, time_end); ftio_set_flows_count(&ftio_out, total_flows); ftio_set_streaming(&ftio_out, 0); if ((n = ftio_write_header(&ftio_out)) < 0) fterr_errx(1, "ftio_write_header(): failed"); total_bytes += n; if (debug > 6) if (n) fterr_info("ftio_write_header()=%d", n); } /* out_fd_plain */ /* done with output stream */ if ((n = ftio_close(&ftio_out)) < 0) fterr_errx(1, "ftio_close(): failed"); total_bytes += n; if (debug > 6) if (n) fterr_info("ftio_close(ftio_out)=%d\n", n); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } if (debug > 1) fterr_info("Bytes written=%lu", total_bytes); /* free storage allocated to file list(s) */ if (fte_entries) { for (i = 0; i < fte_entries; ++i) { ftfile_free(fte[i]); free(fte[i]); } free(fte); } /* fte_entries */ /* no successful streams, then error */ if (!total_streams) return 1; else return 0; } /* main */ void sig_quit(int sig) { done = 1; } /* sig_quit */ void usage(void) { fprintf(stderr, "Usage: flow-cat [-aghmp] [-b byte_order] [-C comment] [-d debug_level]\n"); fprintf(stderr, " [-o filename] [-t start_time] [-T end_time] [-z z_level]\n"); fprintf(stderr, " file|directory ..."); fprintf(stderr, "\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-dscan.c0000644000076600007660000006442410240154347012253 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-dscan.c,v 1.29 2005/05/10 15:53:11 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" #include "flow-dscan.h" /* * Detect network scan's */ /* XXX TODO * * trigger alarm on # of flows/second * * need to max out on # of records allocated. If hit, then run the ager * more often/more agressive timeout. * * FUTURE: * take advantage of need to only allocate strcuture of the same * size by having malloc allocate chunks at a time and maintaining * a freelist. * * most of the dst ports are 53 and 80. Could save a bunch of memory * by only allocating a bit1024 struct when it's not a list of well * known ports -- tradoff for a few cpu cycles.. * * possibly trigger the ager with an alarm instead of by flow traffic * * if the dst ip list gets too long convert to a hash? */ int debug; int sig_hup, sig_usr1; int load_state(struct dscan_state *ds); void flow_dump(struct fts3rec_gen *rec); void clear_suppress(struct dscan_state *ds, int sd); int load_suppress(struct dscan_state *ds, int sd); void ager(struct dscan_state *ds, u_int32 total_flows32); void sig_hup_handler(int sig); void sig_usr1_handler(int sig); void usage(void); int dump_state(struct dscan_state *ds); int main(int argc, char **argv) { struct ftio ftio; struct ftprof ftp; struct fts3rec_gen *rec; struct fttime ftt; int i, match, k, no_detach; u_int64 total_flows; u_int32 total_flows32; struct dscan_state ds; struct dscan_rec *drp; struct dscan_dst *ddp, *ddp2; struct dscan_sup *dsp_src, *dsp_dst; u_long hash; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64]; int do_dump, do_load; int filter_www, filter_mcast, filter_input, filter_output; char in_tbl[65536], out_tbl[65536]; u_int32 trigger_time, trigger_packets, trigger_octets; pid_t pid; struct tm *tm; total_flows = total_flows32 = 0; bzero(&ds, sizeof ds); ds.ager_timeout = DSCAN_AGER_TIMEOUT; ds.statefile = DSCAN_STATEFILE; ds.supfile = DSCAN_SUP_FILE; ds.dscan_ip_depth = DSCAN_IP_DEPTH; ds.dscan_port_trigger = DSCAN_PORT_TRIGGER; sig_hup = 0; sig_usr1 = 0; do_dump = 0; do_load = 0; filter_www = filter_mcast = filter_input = filter_output = 0; trigger_time = trigger_octets = trigger_packets = 0; no_detach = 0; /* init fterr */ fterr_setid(argv[0]); while ((i = getopt(argc, argv, "d:i:I:D:h?lmps:t:wL:O:P:S:T:bBW")) != -1) switch (i) { case 'd': /* debug */ debug = atoi(optarg); break; case 'i': /* input filter interface list */ if (load_lookup(optarg, 65536, in_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_input = 1; break; case 'l': /* load state */ do_load = 1; break; case 'm': /* multicast filter */ filter_mcast = 1; break; case 'I': /* output filter interface list */ if (load_lookup(optarg, 65536, out_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_output = 1; break; case 'p': /* dump state on exit */ do_dump = 1; break; case 's': /* statefile */ ds.statefile = optarg; break; case 't': /* ager timeout */ sscanf(optarg, "%u", &ds.ager_timeout); break; case 'w': /* filter www inbound (replies) */ filter_www |= 1; break; case 'b': /* no detach */ no_detach = 1; break; case 'B': /* no detach, use syslog */ no_detach = 2; break; case 'D': sscanf(optarg, "%u", &ds.dscan_ip_depth); break; case 'L': /* suppress file */ ds.supfile = optarg; break; case 'O': /* excessive octets trigger */ sscanf(optarg, "%u", (unsigned int*)&trigger_octets); break; case 'P': /* excessive packets trigger */ sscanf(optarg, "%u", (unsigned int*)&trigger_packets); break; case 'S': /* port scan trigger */ sscanf(optarg, "%u", &ds.dscan_port_trigger); break; case 'T': /* excessive flow time trigger */ sscanf(optarg, "%u", (unsigned int*)&trigger_time); break; case 'W': /* filter www outbound */ filter_www |= 2; break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* daemonize */ if (!no_detach) { if ((pid = fork()) == -1) { fterr_err(1, "fork()"); } else if (pid) exit (0); /* parent */ umask(0022); setsid(); for (i = 1; i < 16; ++i) /* XXX dynamically get NOFILE */ close (i); /* enable syslog */ fterr_setsyslog(1, LOG_PID|LOG_NDELAY, LOG_LOCAL6); /* disable stderr */ fterr_setfile(0, (void*)0L); } else { if (no_detach == 2) { /* enable syslog */ fterr_setsyslog(1, LOG_PID|LOG_NDELAY, LOG_LOCAL6); /* disable stderr */ fterr_setfile(0, (void*)0L); } } /* profile */ ftprof_start (&ftp); /* configure handlers */ if (mysignal(SIGHUP, sig_hup_handler) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); if (mysignal(SIGUSR1, sig_usr1_handler) == SIG_ERR) fterr_err(1, "signal(SIGUSR1)"); /* initialize scanner hash table */ for (i = 0; i < DSCAN_HASHSIZE; ++i) { FT_SLIST_INIT(&ds.hash_scan[i]); } /* initialize suppress hash table */ for (i = 0; i < DSCAN_HASHSIZE; ++i) { FT_SLIST_INIT(&ds.hash_sup_src[i]); } for (i = 0; i < DSCAN_HASHSIZE; ++i) { FT_SLIST_INIT(&ds.hash_sup_dst[i]); } /* load state file */ if (do_load) { if (load_state(&ds)) fterr_errx(1, "load_state(): failed"); #ifdef XXX ds.statefile = "/var/tmp/ds.state2"; dump_state(&ds); exit(0); #endif } if (load_suppress(&ds, 0)) fterr_errx(1, "load_suppress(0): failed"); if (load_suppress(&ds, 1)) fterr_errx(1, "load_suppress(1): failed"); /* read from stdin */ if (ftio_init(&ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); /* check for records scan can understand */ if (ftio_check_generic(&ftio) < 0) fterr_errx(1, "Unsupported export version"); while ((rec = ftio_read(&ftio))) { if (sig_usr1) { if (debug) fterr_info("signal: USR1"); dump_state(&ds); sig_usr1 = 0; } /* sig_usr1 */ if (sig_hup) { if (debug) fterr_info("signal: USR1"); clear_suppress(&ds, 0); clear_suppress(&ds, 1); load_suppress(&ds, 0); load_suppress(&ds, 1); sig_hup = 0; } /* sig_hup */ ++total_flows; ++total_flows32; /* filter on input interface */ if (filter_input) if (!in_tbl[rec->input]) goto skip2; /* filter on output interface */ if (filter_output) if (!out_tbl[rec->output]) goto skip2; /* filter multicast? */ if (filter_mcast) { if ((rec->srcaddr >= 0xe0000000) && (rec->srcaddr <= 0xefffffff)) goto skip2; if ((rec->dstaddr >= 0xe0000000) && (rec->dstaddr <= 0xefffffff)) goto skip2; } /* filter_mcast */ /* calculate hash based on src ip */ hash = DSCAN_HASHFUNC(rec->srcaddr); if ((filter_www & 1) && (rec->srcport == 80) && (rec->prot == 6) && (rec->dstport > 1023)) goto skip2; if ((filter_www & 2) && (rec->dstport == 80) && (rec->prot == 6) && (rec->srcport > 1023)) goto skip2; /* evaluate this src ip and the suppress list */ match = 0; FT_SLIST_FOREACH(dsp_src, &ds.hash_sup_src[hash], chain) { if (dsp_src->ip == rec->srcaddr) { if (!(dsp_src->flags & DSCAN_SUP_SRCPORT)) goto skipsrc; if (dsp_src->srcport != rec->srcport) goto sup1; skipsrc: if (!(dsp_src->flags & DSCAN_SUP_DSTPORT)) goto skipdst; if (dsp_src->dstport != rec->dstport) goto sup1; skipdst: if (!(dsp_src->flags & DSCAN_SUP_PROTOCOL)) goto skip2; if (dsp_src->protocol != rec->prot) goto sup1; goto skip2; } } sup1: /* evaluate this dst ip and the suppress list */ match = 0; FT_SLIST_FOREACH(dsp_dst, &ds.hash_sup_dst[hash], chain) { if (dsp_dst->ip == rec->dstaddr) { if (!(dsp_dst->flags & DSCAN_SUP_SRCPORT)) goto skipsrc1; if (dsp_dst->srcport != rec->srcport) goto sup; skipsrc1: if (!(dsp_dst->flags & DSCAN_SUP_DSTPORT)) goto skipdst1; if (dsp_dst->dstport != rec->dstport) goto sup; skipdst1: if (!(dsp_dst->flags & DSCAN_SUP_PROTOCOL)) goto skip2; if (dsp_dst->protocol != rec->prot) goto sup; goto skip2; } } sup: /* evaluate the triggers */ if (trigger_octets && (rec->dOctets > trigger_octets)) { flow_dump(rec); } if (trigger_packets && (rec->dPkts > trigger_packets)) { flow_dump(rec); } if (trigger_time && ((rec->Last - rec->First) > trigger_time)) { flow_dump(rec); } match = 0; FT_SLIST_FOREACH(drp, &ds.hash_scan[hash], chain) { if (drp->ip_src == rec->srcaddr) { match = 1; break; } } if (match) { /* src ip match */ /* previous host or scan report then skip */ if (drp->flags) goto skip2; /* if rec exists with this dest ip */ FT_STAILQ_FOREACH(ddp, &drp->dlhead, chain) { if (ddp->ip_dst == rec->dstaddr) { ddp->ip_time = total_flows32; if (rec->dstport < 1024) { bit1024_store((int)rec->dstport, &ddp->portmap); if ((k = bit1024_count(&ddp->portmap)) >= ds.dscan_port_trigger) { fmt_ipv4(fmt_buf1, rec->srcaddr, FMT_JUST_LEFT); fmt_ipv4(fmt_buf2, rec->dstaddr, FMT_JUST_LEFT); ftt = ftltime(rec->sysUpTime, rec->unix_secs, rec->unix_nsecs, rec->First); tm = localtime((time_t*)&ftt.secs); fmt_uint32(fmt_buf3, ftt.secs, FMT_JUST_LEFT); snprintf(fmt_buf4, 64, "%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); fterr_info("port scan: src=%s dst=%s ts=%s start=%s", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4); bzero(&ddp->portmap, sizeof ddp->portmap); drp->flags |= DSCAN_FLAGS_PORTSCAN; } } goto skip2; } } /* no rec exists with this dst ip */ if (drp->depth >= ds.dscan_ip_depth) { fmt_ipv4(fmt_buf1, rec->srcaddr, FMT_JUST_LEFT); ftt = ftltime(rec->sysUpTime, rec->unix_secs, rec->unix_nsecs, rec->First); tm = localtime((time_t*)&ftt.secs); fmt_uint32(fmt_buf3, ftt.secs, FMT_JUST_LEFT); snprintf(fmt_buf4, 64, "%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); fterr_info( "host scan: ip=%s ts=%s start=%s", fmt_buf1, fmt_buf3, fmt_buf4); drp->depth = 0; drp->flags |= DSCAN_FLAGS_HOSTSCAN; ddp = drp->dlhead.stqh_first; while (ddp != NULL) { ddp2 = ddp->chain.stqe_next; free(ddp); ++ds.stat_free; ++ds.stat_free_dst; ddp = ddp2; } FT_STAILQ_INIT(&drp->dlhead); } else { if (!(ddp = malloc(sizeof (struct dscan_dst)))) fterr_err(1, "malloc(dscan_dst)"); bzero(ddp, sizeof (struct dscan_dst)); ds.stat_malloc++; ds.stat_malloc_dst++; drp->depth ++; FT_STAILQ_INSERT_TAIL(&drp->dlhead, ddp, chain); ddp->ip_dst = rec->dstaddr; ddp->ip_time = total_flows32; if (rec->dstport < 1024) { bit1024_store((int)rec->dstport, &ddp->portmap); } } } else { /* no src ip match */ if (!(drp = malloc(sizeof (struct dscan_rec)))) fterr_err(1, "malloc(dscan_rec)"); ds.stat_malloc++; ds.stat_malloc_rec++; bzero(drp, sizeof (struct dscan_rec)); drp->ip_src = rec->srcaddr; drp->depth = 1; FT_SLIST_INSERT_HEAD(&ds.hash_scan[hash], drp, chain); FT_STAILQ_INIT(&drp->dlhead); if (!(ddp = malloc(sizeof (struct dscan_dst)))) fterr_err(1, "malloc(dscan_dst)"); bzero(ddp, sizeof (struct dscan_dst)); ds.stat_malloc++; ds.stat_malloc_dst++; FT_STAILQ_INSERT_TAIL(&drp->dlhead, ddp, chain); ddp->ip_dst = rec->dstaddr; ddp->ip_time = total_flows32; if (rec->dstport < 1024) { bit1024_store((int)rec->dstport, &ddp->portmap); } } /* * ager */ if (ds.ager_timeout && (!(total_flows % 1000))) ager(&ds, total_flows32); skip2: continue; } /* while rec */ if (debug > 0) { ftprof_end(&ftp, ftio_get_rec_total(&ftio)); ftprof_print(&ftp, argv[0], stderr); } if (do_dump) dump_state(&ds); return 0; } /* main */ int dump_state(struct dscan_state *ds) { FILE *FP; int i; char fmt_buf1[64]; struct dscan_rec *drp; struct dscan_dst *ddp; if (!(FP = fopen(ds->statefile, "w"))) { fterr_warnx("fopen(%s): failed"); return -1; } /* dump data structures */ for (i = 0; i < DSCAN_HASHSIZE; ++i) { FT_SLIST_FOREACH(drp, &ds->hash_scan[i], chain) { fmt_ipv4(fmt_buf1, drp->ip_src, FMT_JUST_LEFT); fprintf(FP, "H %d %d %d %s\n", i, (int)drp->depth, (int)drp->flags, fmt_buf1); FT_STAILQ_FOREACH(ddp, &drp->dlhead, chain) { fmt_ipv4(fmt_buf1, ddp->ip_dst, FMT_JUST_LEFT); fprintf(FP, "I %u %s\n", ddp->ip_time, fmt_buf1); bit1024_print(FP, &ddp->portmap); } } } fprintf(FP, ".\n"); if (fclose(FP)) { fterr_warnx("fclose(%s): failed", ds->statefile); return -1; } return 0; } /* dump_state */ int load_state(struct dscan_state *ds) { FILE *FP; int done; struct dscan_rec *drp; struct dscan_dst *ddp; char type; char buf[1024]; u_int32 ip, hash, depth, flags, h, time, nports, i, j; if (!(FP = fopen(ds->statefile, "r"))) fterr_errx(1, "fopen(%s): failed", ds->statefile); done = 0; while (!done) { if (fscanf(FP, "%c", &type) == EOF) { fterr_warnx("fscanf(): EOF"); break; } switch (type) { case '.': done = 1; break; case 'H': /* host - hash depth flags srcIP */ fscanf(FP, "%u %u %u %64s", (unsigned*)&hash, (unsigned*)&depth, (unsigned*)&flags, buf); ip = scan_ip(buf); h = DSCAN_HASHFUNC(ip); /* create the record */ if (!(drp = malloc(sizeof (struct dscan_rec)))) fterr_err(1, "malloc(dscan_rec)"); ds->stat_malloc++; ds->stat_malloc_rec++; bzero(drp, sizeof (struct dscan_rec)); drp->ip_src = ip; drp->depth = depth; drp->flags = flags; FT_SLIST_INSERT_HEAD(&ds->hash_scan[hash], drp, chain); /* init destination list */ FT_STAILQ_INIT(&drp->dlhead); break; case 'I': /* include - time dstIP */ fscanf(FP, "%u %15s", &time, buf); ip = scan_ip(buf); if (!(ddp = malloc(sizeof (struct dscan_dst)))) fterr_err(1, "malloc(dscan_dst)"); bzero(ddp, sizeof (struct dscan_dst)); ds->stat_malloc++; ds->stat_malloc_dst++; FT_STAILQ_INSERT_TAIL(&drp->dlhead, ddp, chain); ddp->ip_dst = ip; ddp->ip_time = time; break; case 'P': /* portmap - nports portlist */ fscanf(FP, "%u", &nports); for (i = 0; i < nports; ++i) { fscanf(FP, "%u", &j); if (j < 1024) { bit1024_store((int)j, &ddp->portmap); } } break; case '\n': /* ignore */ break; default: fterr_warnx("Unknown record type: %c", type); return -1; break; } /* switch */ } /* while */ fclose (FP); return 0; } /* load_state */ void sig_usr1_handler(int sig) { sig_usr1 = 1; } /* sig_usr1_handler */ void sig_hup_handler(int sig) { sig_hup = 1; } /* sig_usr1_handler */ void ager(struct dscan_state *ds, u_int32 total_flows32) { static int ager_i; int i, work, picky_gcc; struct dscan_rec *drp, *odrp, *drp2; struct dscan_dst *ddp, *oddp, *ddp2; u_int32 i32; work = 0; for (i = ager_i; i < DSCAN_HASHSIZE; ++i) { odrp = (void*)0L; drp = ds->hash_scan[i].slh_first; while (drp) { work += 2; oddp = (void*)0L; ddp = drp->dlhead.stqh_first; while (ddp) { ++work; if (ddp->ip_time > total_flows32) i32 = 4294967295U - ddp->ip_time + total_flows32 + 1; else i32 = total_flows32 - ddp->ip_time; if (i32 > ds->ager_timeout) { if (debug > 5) fterr_info( "ager: remove max=%u i32=%u", ds->ager_timeout, i32); --drp->depth; if (oddp) { oddp->chain.stqe_next = ddp->chain.stqe_next; if (!ddp->chain.stqe_next) /* tail update */ drp->dlhead.stqh_last = &oddp->chain.stqe_next; } else { drp->dlhead.stqh_first = ddp->chain.stqe_next; if (!ddp->chain.stqe_next) /* tail update */ drp->dlhead.stqh_last = &ddp->chain.stqe_next; } ddp2 = ddp; ddp = ddp->chain.stqe_next; free (ddp2); ++ds->stat_free; ++ds->stat_free_dst; ++ds->stat_aged_ip; continue; } oddp = ddp; ddp = ddp->chain.stqe_next; } /* while ddp */ /* if they're all gone, delete the record itself */ if (!drp->depth) { if (debug > 5) fterr_info("ager: remove record"); if (odrp) odrp->chain.sle_next = drp->chain.sle_next; else ds->hash_scan[i].slh_first = drp->chain.sle_next; drp2 = drp; drp = drp->chain.sle_next; free (drp2); ++ds->stat_free; ++ds->stat_free_rec; ++ds->stat_aged_dsr; continue; } odrp = drp; drp = drp->chain.sle_next; } /* while */ /* simple work queue */ if (++work > DSCAN_AGER_WORK) { if (debug > 2) { fterr_info("ager: work=%d malloc=%u free=%u aged_ip=%u aged_dsr=%u", work, ds->stat_malloc, ds->stat_free, ds->stat_aged_ip, ds->stat_aged_dsr); fterr_info("ager: malloc_dst=%u malloc_rec=%u free_dst=%u free_rec=%u", ds->stat_malloc_dst, ds->stat_malloc_rec, ds->stat_free_dst, ds->stat_free_rec); } ager_i = i++; goto skip3; } } /* for hash */ ager_i = 0; fterr_info("ager: reset hash run"); skip3: picky_gcc = 1; } /* ager */ int load_suppress(struct dscan_state *ds, int sd) { char buf1[1024], *c1, *c2, *c3, *c4, *c; struct dscan_sup *dsp; int match; FILE *FP; u_int32 prot, srcport, dstport; u_int32 ip, hash; char *fname; fterr_info("load_suppress %d", sd); if (!(fname = (char*)malloc(strlen(ds->supfile)+5))) fterr_err(1, "malloc()"); strcpy(fname, ds->supfile); if (sd == 0) { strcat(fname, ".src"); } else if (sd == 1) { strcat(fname, ".dst"); } if (!(FP = fopen(fname, "r"))) fterr_errx(1, "fopen(%s): failed", fname); while (1) { if (!fgets(buf1, 1024, FP)) break; /* skip whitespace */ for (c = buf1; *c && ((*c == ' ') || (*c == '\t')); ++c); c1 = c; if (*c1 == '#') continue; if (*c1 == '\n') continue; for (; *c && ((*c != ' ') && (*c != '\t')); ++c); for (; *c && ((*c == ' ') || (*c == '\t')); ++c); c2 = c; for (; *c && ((*c != ' ') && (*c != '\t')); ++c); for (; *c && ((*c == ' ') || (*c == '\t')); ++c); c3 = c; for (; *c && ((*c != ' ') && (*c != '\t')); ++c); for (; *c && ((*c == ' ') || (*c == '\t')); ++c); c4 = c; if ((!*c1) || (!*c2) || (!*c3) || (!*c4)) { fterr_warnx("suppress parser: syntax error: %s", buf1); continue; } if (debug > 5) fterr_info( "suppress parser: c1=%s c2=%s c3=%s c4=%s", c1, c2, c3, c4); ip = scan_ip(c1); sscanf(c2, "%u", &prot); sscanf(c3, "%u", &srcport); sscanf(c4, "%u", &dstport); hash = DSCAN_HASHFUNC(ip); if (sd == 0) { match = 0; FT_SLIST_FOREACH(dsp, &ds->hash_sup_src[hash], chain) { if (dsp->ip == ip) { match = 1; break; } } if (match) { fterr_warnx("suppress parser: dup ip: %s", buf1); continue; } if (*c1 == '-') { fterr_warnx("suppress parser: no src ip wildcard"); continue; } if (!(dsp = malloc(sizeof (struct dscan_sup)))) fterr_err(1, "malloc(dscan_sup)"); bzero(dsp, sizeof (struct dscan_sup)); dsp->ip = ip; dsp->srcport = srcport; dsp->dstport = dstport; dsp->protocol = prot; if (*c2 != '-') dsp->flags &= DSCAN_SUP_PROTOCOL; if (*c3 != '-') dsp->flags &= DSCAN_SUP_SRCPORT; if (*c4 != '-') dsp->flags &= DSCAN_SUP_DSTPORT; FT_SLIST_INSERT_HEAD(&ds->hash_sup_src[hash], dsp, chain); } else if (sd == 1) { match = 0; FT_SLIST_FOREACH(dsp, &ds->hash_sup_dst[hash], chain) { if (dsp->ip == ip) { match = 1; break; } } if (match) { fterr_warnx("suppress parser: dup ip: %s", buf1); continue; } if (*c1 == '-') { fterr_warnx("suppress parser: no src ip wildcard"); continue; } if (!(dsp = malloc(sizeof (struct dscan_sup)))) fterr_err(1, "malloc(dscan_sup)"); bzero(dsp, sizeof (struct dscan_sup)); dsp->ip = ip; dsp->srcport = srcport; dsp->dstport = dstport; dsp->protocol = prot; if (*c2 != '-') dsp->flags &= DSCAN_SUP_PROTOCOL; if (*c3 != '-') dsp->flags &= DSCAN_SUP_SRCPORT; if (*c4 != '-') dsp->flags &= DSCAN_SUP_DSTPORT; FT_SLIST_INSERT_HEAD(&ds->hash_sup_dst[hash], dsp, chain); } } /* while 1 */ fclose(FP); free (fname); return 0; } /* load_suppress */ void clear_suppress(struct dscan_state *ds, int sd) { int i; struct dscan_sup *dsp_src, *dsp_dst; if (sd == 0) { for (i = 0; i < DSCAN_HASHSIZE; ++i) { while (ds->hash_sup_src[i].slh_first != NULL) { dsp_src = ds->hash_sup_src[i].slh_first; FT_SLIST_REMOVE_HEAD(&ds->hash_sup_src[i], chain); free (dsp_src); } /* while */ } /* for */ } /* if */ if (sd == 1) { for (i = 0; i < DSCAN_HASHSIZE; ++i) { while (ds->hash_sup_dst[i].slh_first != NULL) { dsp_dst = ds->hash_sup_dst[i].slh_first; FT_SLIST_REMOVE_HEAD(&ds->hash_sup_dst[i], chain); free (dsp_dst); } /* while */ } /* for */ } /* if */ } /* clear_suppress */ void flow_dump(struct fts3rec_gen *rec) { struct fttime ftt; char fmt_buf1[64], fmt_buf2[64]; struct tm *tm; static int header; if (!header) { fterr_info( "Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets"); header = 1; } ftt = ftltime(rec->sysUpTime, rec->unix_secs, rec->unix_nsecs, rec->First); tm = localtime((time_t*)&ftt.secs); fterr_info( "%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(rec->sysUpTime, rec->unix_secs, rec->unix_nsecs, rec->Last); tm = localtime((time_t*)&ftt.secs); fterr_info( "%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); /* other info */ fmt_ipv4(fmt_buf1, rec->srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, rec->dstaddr, FMT_PAD_RIGHT); fterr_info( "%4d %-15.15s %6d %4d %-15.15s %6d %3d %2d %10lu %10lu", (int)rec->input, fmt_buf1, (int)rec->srcport, (int)rec->output, fmt_buf2, (int)rec->dstport, (int)rec->prot, (int)rec->tcp_flags & 0x7, (u_long)rec->dPkts, (u_long)rec->dOctets); } /* flow_dump */ void usage(void) { fprintf(stderr, "Usage: flow-dscan [-bBhlmpwW] [-d debug_level] [-D iplist_depth]\n"); fprintf(stderr, " [-s state_file] [-i input_filter] [-L suppress_list]\n"); fprintf(stderr, " [-o output_filter] [-O excessive_octets] [-P excessive_flows]\n"); fprintf(stderr, " [-S port_scan_trigger] [-t ager_timeout]\n"); fprintf(stderr, "Signals:\n"); fprintf(stderr, " SIGHUP - reload suppress list\n"); fprintf(stderr, " SIGUSR1 - dump state\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-dscan.h0000644000076600007660000000777207642622725012277 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-dscan.h,v 1.9 2003/04/02 18:03:01 maf Exp $ */ #include #define DSCAN_FLAGS_HOSTSCAN 1 /* host scan */ #define DSCAN_FLAGS_PORTSCAN 2 /* port scan */ #define DSCAN_IP_DEPTH 200 /* IP's store, IP scan trigger */ #define DSCAN_PORT_TRIGGER 64 /* port scan trigger */ #define DSCAN_HASHSIZE 65536 /* size of hash table */ #define DSCAN_STATEFILE "/var/tmp/dscan.state" #define DSCAN_AGER_TIMEOUT 90000U /* max active flows before aging */ #define DSCAN_AGER_WORK 500 /* ammount of work ager does in a run */ #define DSCAN_HASHFUNC(a) ((a>>16) ^ (a & 0xFFFF)) #define DSCAN_SUP_FILE "./dscan.suppress" /* suppress file */ #define DSCAN_SUP_SRCIP 1 /* match src ip */ #define DSCAN_SUP_DSTIP 2 /* match dst ip */ #define DSCAN_SUP_SRCPORT 4 /* match src port */ #define DSCAN_SUP_DSTPORT 8 /* match dst port */ #define DSCAN_SUP_PROTOCOL 16 /* match protocol */ struct dscan_state { FT_SLIST_HEAD(shead, dscan_rec) hash_scan[DSCAN_HASHSIZE]; FT_SLIST_HEAD(sup_src_head, dscan_sup) hash_sup_src[DSCAN_HASHSIZE]; FT_SLIST_HEAD(sup_dst_head, dscan_sup) hash_sup_dst[DSCAN_HASHSIZE]; u_int stat_malloc; /* # of times malloc called */ u_int stat_free; /* # of times free called */ u_int stat_malloc_dst; /* # of times dst struct allocated */ u_int stat_malloc_rec; /* # of times rec struct allocated */ u_int stat_free_dst; /* # of times dst struct freed */ u_int stat_free_rec; /* # of times rec struct freed */ u_int stat_aged_ip; /* # dst ip in the list is removed */ u_int stat_aged_dsr; /* # of dscan records removed */ u_int32 ager_timeout; /* how long to keep flows around */ u_int32 dscan_ip_depth; /* lengh of ip destination list */ u_int32 dscan_port_trigger; /* # ports hit before scan trggers */ char *statefile; /* where to store/load state */ char *supfile; /* suppress list file */ }; struct dscan_dst { u_int32 ip_dst; /* destination IP */ u_int32 ip_time; /* last time dst IP seen */ struct bit1024 portmap; /* active destination ports */ FT_STAILQ_ENTRY (dscan_dst) chain; /* chain */ }; struct dscan_rec { u_int8 depth; /* 0..255 depth of list */ u_int8 flags; /* DSCAN_FLAGS_* */ u_int32 ip_src; /* src ip address (key) */ FT_STAILQ_HEAD(dhead, dscan_dst) dlhead; /* head of dst list */ FT_SLIST_ENTRY (dscan_rec) chain; /* chain */ }; struct dscan_sup { u_int32 ip; u_int16 srcport; u_int16 dstport; u_int8 flags; u_int8 protocol; FT_SLIST_ENTRY (dscan_sup) chain; /* chain */ }; flow-tools-0.68/src/flow-expire.c0000644000076600007660000000723307642622725012466 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-expire.c,v 1.16 2003/04/02 18:03:01 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" char *progname = "flow-expire"; int debug; void usage(void); int main(int argc, char **argv) { struct ftfile_entries fte; int i, doit; char wpname[MAXPATHLEN+1]; bzero(&fte, sizeof fte); /* init fterr */ fterr_setid(argv[0]); fte.max_files = 0; fte.max_bytes = 0; wpname[0] = '.'; wpname[1] = 0; while ((i = getopt(argc, argv, "w:d:e:E:h?")) != -1) switch (i) { case 'd': /* debug */ debug = atoi(optarg); break; case 'e': /* expire */ fte.max_files = atoi(optarg); break; case 'E': /* size of flow files */ if ((fte.max_bytes = scan_size(optarg)) == -1) fterr_errx(1, "scan_size(): failed"); break; case 'w': /* output pathname */ if (strlen(optarg) > (MAXPATHLEN)) fterr_errx(1, "Pathname too long"); strcpy(wpname, optarg); break; case '?': case 'h': usage(); exit (0); default: usage(); exit (1); } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); if (debug) { doit = 0; } else { /* enable syslog */ fterr_setsyslog(1, LOG_PID|LOG_NDELAY, LOG_LOCAL6); /* disable stderr */ fterr_setfile(0, (void*)0L); doit = 1; } if (ftfile_loaddir(&fte, wpname, FT_FILE_SORT|FT_FILE_INIT|FT_FILE_CHECKNAMES)) { fterr_errx(1, "ftfile_scandir(): failed"); } if (debug) ftfile_dump(&fte); if (ftfile_expire(&fte, doit, (u_int32)0)) { fterr_errx(1, "ftfile_expire(): failed"); } if (debug) ftfile_dump(&fte); /* free storage allocated to fte */ ftfile_free(&fte); return 0; } /* main */ void usage(void) { fprintf(stderr, "Usage: flow expire [-h] [-d debug_level] [-e expire_count]\n"); fprintf(stderr, " [-E expire_size[bKMG]] -w workdir\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-export.c0000644000076600007660000011100310032433322012456 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-export.c,v 1.26 2004/03/31 03:11:14 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #ifdef HAVE_MYSQL #include #define DB_DEFAULT_DBHOST "localhost" #define DB_DEFAULT_DBNAME "netflow" #define DB_DEFAULT_DBPORT 3306 #define DB_DEFAULT_DBTABLE "raw" #define DB_DEFAULT_DBUSER "netflow" #define DB_DEFAULT_DBPWD "netflow" #endif /* MYSQL */ #ifdef HAVE_PGSQL #include #define DB_DEFAULT_DBHOST "localhost" #define DB_DEFAULT_DBNAME "netflow" #define DB_DEFAULT_DBPORT "5432" #define DB_DEFAULT_DBTABLE "raw" #define DB_DEFAULT_DBUSER "netflow" #define DB_DEFAULT_DBPWD "netflow" #endif /* PGSQL*/ #if HAVE_LL_STRTOUL #define strtoull strtoul #endif /* HAVE_LL_STRTOULL */ #include "ftbuild.h" #include "pcap.h" #include "cflowd.h" #define PRCOMMA\ if (comma)\ printf(",");\ struct options { char dbaseURI[256]; u_int32 cflowd_mask; u_int64 ft_mask; u_long records; }; struct jump { int (*where)(struct ftio *ftio, struct options *opt); }; int format0(struct ftio *ftio, struct options *opt); int format1(struct ftio *ftio, struct options *opt); int format2(struct ftio *ftio, struct options *opt); int format3(struct ftio *ftio, struct options *opt); int format4(struct ftio *ftio, struct options *opt); int format5(struct ftio *ftio, struct options *opt); int ftxfield_tocflow(u_int64 xfields, u_int32 *cfmask); int fmt_xfields_val(char *fmt_buf, char *rec, struct fts3rec_offsets *fo, u_int64 xfields, int quote); int fmt_xfields_type(char *buf, u_int64 xfield); void usage(void); #define NFORMATS 6 /* nformats - 1 */ struct jump format[] = {{format0}, {format1}, {format2}, {format3}, {format4}, {format5}}; int debug; int main(int argc, char **argv) { int i, format_index, ret, ascii_mask; struct ftio ftio; struct ftprof ftp; struct options opt; /* init fterr */ fterr_setid(argv[0]); debug = 0; format_index = 0; bzero(&opt, sizeof opt); ascii_mask = 0; opt.cflowd_mask = 0xFFFFFFFFL; opt.ft_mask = 0xFFFFFFFFFFFFFFFFLL; /* profile */ ftprof_start (&ftp); while ((i = getopt(argc, argv, "h?d:f:m:u:")) != -1) switch (i) { case 'd': /* debug */ debug = atoi(optarg); break; case 'f': /* format */ format_index = atoi(optarg); break; case 'h': /* help */ case '?': usage(); exit (0); break; case 'm': /* cflowd mask */ if (isalpha((int)optarg[0])) { ascii_mask = 1; if (ftxfield_parse(optarg, &opt.ft_mask) < 0) fterr_errx(1, "ftxfield_parse(): failed"); } else { opt.cflowd_mask = strtoul(optarg, (char **)0L, 0); opt.ft_mask = strtoull(optarg, (char **)0L, 0); } break; case 'u': /* db URI */ if (strlen(optarg) >= sizeof (opt.dbaseURI)) fterr_errx(1, "dbaseURI string too long."); strcpy(opt.dbaseURI, optarg); break; default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); if (format_index >= NFORMATS) fterr_errx(1, "No such format, %d", format_index); if ((format_index == 0) && ascii_mask) { opt.cflowd_mask = 0; if (ftxfield_tocflow(opt.ft_mask, &opt.cflowd_mask) < 0) { fterr_errx(1, "ftxfield_tocflow(): failed"); } } if (ftio_init(&ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); ret = format[format_index].where(&ftio, &opt); if ((!ret) && (debug > 0)) { ftprof_end(&ftp, ftio_get_rec_total(&ftio)); ftprof_print(&ftp, argv[0], stderr); } fprintf(stderr, "%s: Exported %lu records\n", argv[0], opt.records); return ret; } /* main */ /* * function: format0 * * export flows in cflowd format */ int format0(struct ftio *ftio, struct options *opt) { struct fts3rec_offsets fo; struct ftver ftv; struct fttime ftt; char *rec; u_int32 ui32, index, sysUpTime, unix_secs, unix_nsecs, First, Last; u_int16 ui16; u_int8 ui8; ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); switch (ftv.d_version) { case 1: opt->cflowd_mask &= CF_INDEX_V1_MASK; break; case 5: opt->cflowd_mask &= CF_INDEX_V5_MASK; break; case 6: opt->cflowd_mask &= CF_INDEX_V6_MASK; break; case 7: opt->cflowd_mask &= CF_INDEX_V7_MASK; break; case 1005: opt->cflowd_mask &= CF_INDEX_V5_MASK; break; case 8: switch (ftv.agg_method) { case 1: opt->cflowd_mask &= CF_INDEX_V8_1_MASK; break; case 2: opt->cflowd_mask &= CF_INDEX_V8_2_MASK; break; case 3: opt->cflowd_mask &= CF_INDEX_V8_3_MASK; break; case 4: opt->cflowd_mask &= CF_INDEX_V8_4_MASK; break; case 5: opt->cflowd_mask &= CF_INDEX_V8_5_MASK; break; case 6: opt->cflowd_mask &= CF_INDEX_V8_6_MASK; break; case 7: opt->cflowd_mask &= CF_INDEX_V8_7_MASK; break; case 8: opt->cflowd_mask &= CF_INDEX_V8_8_MASK; break; case 9: opt->cflowd_mask &= CF_INDEX_V8_9_MASK; break; case 10: opt->cflowd_mask &= CF_INDEX_V8_10_MASK; break; case 11: opt->cflowd_mask &= CF_INDEX_V8_11_MASK; break; case 12: opt->cflowd_mask &= CF_INDEX_V8_12_MASK; break; case 13: opt->cflowd_mask &= CF_INDEX_V8_13_MASK; break; case 14: opt->cflowd_mask &= CF_INDEX_V8_14_MASK; break; default: fterr_warnx("Unsupported export version"); return -1; } /* switch */ break; default: fterr_warnx("Unsupported export version"); return -1; } /* switch */ /* index */ index = opt->cflowd_mask; index = htonl(index); while ((rec = ftio_read(ftio))) { fwrite(&index, sizeof (index), 1, stdout); if (opt->cflowd_mask & CF_ROUTERMASK) { ui32 = *((u_int32*)(rec+fo.exaddr)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_SRCIPADDRMASK) { ui32 = *((u_int32*)(rec+fo.srcaddr)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_DSTIPADDRMASK) { ui32 = *((u_int32*)(rec+fo.dstaddr)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_INPUTIFINDEXMASK) { ui16 = *((u_int16*)(rec+fo.input)); ui16 = htons(ui16); fwrite(&ui16, sizeof (ui16), 1, stdout); } if (opt->cflowd_mask & CF_OUTPUTIFINDEXMASK) { ui16 = *((u_int16*)(rec+fo.output)); ui16 = htons(ui16); fwrite(&ui16, sizeof (ui16), 1, stdout); } if (opt->cflowd_mask & CF_SRCPORTMASK) { ui16 = *((u_int16*)(rec+fo.srcport)); ui16 = htons(ui16); fwrite(&ui16, sizeof (ui16), 1, stdout); } if (opt->cflowd_mask & CF_DSTPORTMASK) { ui16 = *((u_int16*)(rec+fo.dstport)); ui16 = htons(ui16); fwrite(&ui16, sizeof (ui16), 1, stdout); } if (opt->cflowd_mask & CF_PKTSMASK) { ui32 = *((u_int32*)(rec+fo.dPkts)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_BYTESMASK) { ui32 = *((u_int32*)(rec+fo.dOctets)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_IPNEXTHOPMASK) { ui32 = *((u_int32*)(rec+fo.nexthop)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_STARTTIMEMASK) { sysUpTime = *((u_int32*)(rec+fo.sysUpTime)); unix_secs = *((u_int32*)(rec+fo.unix_secs)); unix_nsecs = *((u_int32*)(rec+fo.unix_nsecs)); First = *((u_int32*)(rec+fo.First)); ftt = ftltime(sysUpTime, unix_secs, unix_nsecs, First); ui32 = htonl(ftt.secs); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_ENDTIMEMASK) { sysUpTime = *((u_int32*)(rec+fo.sysUpTime)); unix_secs = *((u_int32*)(rec+fo.unix_secs)); unix_nsecs = *((u_int32*)(rec+fo.unix_nsecs)); Last = *((u_int32*)(rec+fo.Last)); ftt = ftltime(sysUpTime, unix_secs, unix_nsecs, Last); ui32 = htonl(ftt.secs); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_PROTOCOLMASK) { ui8 = *((u_int8*)(rec+fo.prot)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_TOSMASK) { ui8 = *((u_int8*)(rec+fo.tos)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_SRCASMASK) { ui16 = *((u_int16*)(rec+fo.src_as)); ui16 = htons(ui16); fwrite(&ui16, sizeof (ui16), 1, stdout); } if (opt->cflowd_mask & CF_DSTASMASK) { ui16 = *((u_int16*)(rec+fo.dst_as)); ui16 = htons(ui16); fwrite(&ui16, sizeof (ui16), 1, stdout); } if (opt->cflowd_mask & CF_SRCMASKLENMASK) { ui8 = *((u_int8*)(rec+fo.src_mask)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_DSTMASKLENMASK) { ui8 = *((u_int8*)(rec+fo.dst_mask)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_TCPFLAGSMASK) { ui8 = *((u_int8*)(rec+fo.tcp_flags)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_INPUTENCAPMASK) { ui8 = *((u_int8*)(rec+fo.in_encaps)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_OUTPUTENCAPMASK) { ui8 = *((u_int8*)(rec+fo.out_encaps)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_PEERNEXTHOPMASK) { ui32 = *((u_int32*)(rec+fo.peer_nexthop)); ui32 = htonl(ui32); fwrite(&ui32, sizeof (ui32), 1, stdout); } if (opt->cflowd_mask & CF_ENGINETYPEMASK) { ui8 = *((u_int8*)(rec+fo.engine_type)); fwrite(&ui8, sizeof (ui8), 1, stdout); } if (opt->cflowd_mask & CF_ENGINEIDMASK) { ui8 = *((u_int8*)(rec+fo.engine_id)); fwrite(&ui8, sizeof (ui8), 1, stdout); } ++opt->records; } /* while */ return 0; } /* format 0 */ /* * function: format1 * * export flows in pcap format. Hack to use tcpdump's packet matcher */ int format1(struct ftio *ftio, struct options *opt) { struct timeval now; struct timezone tz; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; struct pcap_file_header pfh; struct pcap_packet_header pph; struct pcap_data1 pd1; struct pcap_data2 pd2; struct pcap_data3 pd3; struct pcap_data4 pd4; int bsize, bsize2, good; long thiszone; char buf[1024]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_TOS | FT_XFIELD_PROT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); if (gettimeofday(&now, &tz) < 0) { fterr_warnx("gettimeofday() failed"); return -1; } bzero(&pfh, sizeof pfh); bzero(&pph, sizeof pph); bzero(&pd1, sizeof pd1); bzero(&pd2, sizeof pd2); bzero(&pd3, sizeof pd3); bzero(&pd4, sizeof pd4); bsize = 0; thiszone = tz.tz_minuteswest * -60; if (localtime((time_t *)&now.tv_sec)->tm_isdst) thiszone += 3600; pfh.magic = TCPDUMP_MAGIC; pfh.version_major = TCPDUMP_VERSION_MAJOR; pfh.version_minor = TCPDUMP_VERSION_MINOR; pfh.thiszone = thiszone; pfh.sigfigs = 6; pfh.snaplen = 38; /* XXX TODO */ pfh.linktype = 1; if (fwrite(&pfh, sizeof pfh, 1, stdout) != 1) { fterr_warnx("pcap header write failed"); return -1; } pph.len = 58; pph.caplen = 58; pd1.eth_prot = 0x0008; pd2.version = 0x45; bcopy(&pph, buf, sizeof pph); bsize += sizeof pph; bcopy(&pd1, buf+bsize, sizeof pd1); bsize += sizeof pd1; while ((rec = ftio_read(ftio))) { cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tos = ((u_int8*)(rec+fo.tos)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); pd2.tos = *cur.tos; pd2.prot = *cur.prot; pd2.srcaddr = *cur.srcaddr; pd2.dstaddr = *cur.dstaddr; #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT32(pd2.srcaddr); SWAPINT32(pd2.dstaddr); #endif /* LITTLE_ENDIAN */ good = 1; switch (pd2.prot) { case 6: pd3.srcport = *cur.srcport; pd3.dstport = *cur.dstport; #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(pd3.srcport); SWAPINT16(pd3.dstport); #endif /* LITTLE_ENDIAN */ bcopy(&pd2, buf+bsize, sizeof pd2); bcopy(&pd3, buf+bsize+sizeof pd2, sizeof pd3); bsize2 = bsize + sizeof pd2 + sizeof pd3; break; case 17: pd4.srcport = *cur.srcport; pd4.dstport = *cur.dstport; #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(pd4.srcport); SWAPINT16(pd4.dstport); #endif /* LITTLE_ENDIAN */ bcopy(&pd2, buf+bsize, sizeof pd2); bcopy(&pd4, buf+bsize+sizeof pd2, sizeof pd4); bsize2 = bsize + sizeof pd2 + sizeof pd4; break; default: good = 0; break; } /* switch */ if (good) { if (fwrite(&buf, bsize2, 1, stdout) != 1) { fterr_warnx("pcap pkt write failed"); return -1; } } ++opt->records; } /* while */ return 0; } /* format1 */ /* * function: format2 * * export flows in ASCII CSV Format */ int format2(struct ftio *ftio, struct options *opt) { struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf[1024]; char *rec; int len; ftio_get_ver(ftio, &ftv); /* remove invalid fields */ opt->ft_mask &= ftrec_xfield(&ftv); fts3rec_compute_offsets(&fo, &ftv); fmt_xfields_type(fmt_buf, opt->ft_mask); printf("#:%s\n", fmt_buf); while ((rec = ftio_read(ftio))) { len = fmt_xfields_val(fmt_buf, rec, &fo, opt->ft_mask, 0); if (len) printf("%s\n", fmt_buf); ++opt->records; } /* while */ return 0; } /* format2 */ /* * function: format3 * * export flows into MySQL Database */ int format3(struct ftio *ftio, struct options *opt) { #ifdef HAVE_MYSQL struct fts3rec_offsets fo; struct ftver ftv; char fields[1024], values[1024], query[3*1024]; char *rec; char *db_host, *db_name, *db_table, *db_user, *db_pwd, *db_tmp, *tmp; int db_port; int len; MYSQL mysql; db_host = DB_DEFAULT_DBHOST; db_name = DB_DEFAULT_DBNAME; db_port = DB_DEFAULT_DBPORT; db_user = DB_DEFAULT_DBUSER; db_table = DB_DEFAULT_DBTABLE; db_pwd = DB_DEFAULT_DBPWD; /* parse URI string */ if (strlen(opt->dbaseURI)) { tmp = opt->dbaseURI; db_user = strsep(&tmp, ":"); db_pwd = strsep(&tmp, ":"); db_host = strsep(&tmp, ":"); db_tmp = strsep(&tmp, ":"); db_name = strsep(&tmp, ":"); db_table = strsep(&tmp, ":"); db_port = atoi(db_tmp); if (!db_user || !db_pwd || !db_host || !db_tmp || !db_name || !db_table) { fterr_warnx("Missing field in dbaseURI, expecting user:pwd:host:port:name:table."); return -1; } } /* dbaseURI */ ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); /* remove invalid fields */ opt->ft_mask &= ftrec_xfield(&ftv); /* generate the field names once */ fmt_xfields_type(fields, opt->ft_mask); /* open MySQL database */ if (!(mysql_init(&mysql))) fterr_errx(1, "mysql_init(): failed"); if (mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "simple")) fterr_errx(1, "mysql_options(): %s", mysql_error(&mysql)); if (mysql_real_connect(&mysql, db_host, db_user, db_pwd, db_name, db_port, NULL, 0) == NULL) fterr_errx(1,"mysql_real_connect(): %s\n", mysql_error(&mysql)); /* foreach flow */ while ((rec = ftio_read(ftio))) { len = fmt_xfields_val(values, rec, &fo, opt->ft_mask, 1); /* form SQL query and execute it */ if (len) { strcpy (query, "INSERT INTO "); strcat (query, db_table); strcat (query, "("); strcat (query, fields); strcat (query, ") VALUES ("); strcat (query, values); strcat (query, ")"); if (debug) fprintf(stderr, "field=%s\n val=%s\n query=%s\n", fields, values, query); if (mysql_real_query(&mysql, query, strlen(query)) != 0) fterr_warnx("mysql_real_query(): %s", mysql_error(&mysql)); } ++opt->records; } /* while */ /* close database */ mysql_close(&mysql); #else /* MYSQL */ fterr_warnx("Format not supported"); #endif /* MYSQL */ return 0; } /* format3 */ /* * function: format4 * * export flows in wire format */ int format4(struct ftio *ftio, struct options *opt) { struct ftver ftv; struct ftencode fte; char *rec; int ret; /* initialize encode struct */ ftencode_init(&fte, 0); /* copy version from io stream */ ftio_get_ver(ftio, &ftv); bcopy(&ftv, &fte.ver, sizeof ftv); /* foreach flow */ while ((rec = ftio_read(ftio))) { retry: ret = fts3rec_pdu_encode(&fte, rec); /* ret == 0 then send and clear out buffer * ret > 0 then encode another * ret < 0 then this encoding failed, send and clear out buffer */ if (ret <= 0) { /* convert pdu to network byte order */ #if BYTE_ORDER == LITTLE_ENDIAN ftpdu_swap(fte.buf_enc, BYTE_ORDER); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ if (fwrite(&fte.buf, fte.buf_size, 1, stdout) != 1) fterr_err(1, "fwrite()"); /* reset encode buffer */ ftencode_reset(&fte); /* if ret < 0 then the current record was not encoded */ if (ret < 0) goto retry; } ++opt->records; } /* any left over? */ if (fte.buf_size) { /* convert pdu to network byte order */ ftpdu_swap(fte.buf_enc, BYTE_ORDER); if (fwrite(&fte.buf, fte.buf_size, 1, stdout) != 1) fterr_err(1, "fwrite()"); } /* fte.buf_size */ return 0; } /* format4 */ /* * function: format5 * * export flows into PostgreSQL Database */ int format5(struct ftio *ftio, struct options *opt) { #ifdef HAVE_PGSQL struct fts3rec_offsets fo; struct ftver ftv; char fields[1024], values[1024], query[3*1024]; char *rec; char *db_host, *db_name, *db_table, *db_user, *db_pwd, *db_tmp, *tmp; char *db_port; int len; PGconn *conn; PGresult *res; db_host = DB_DEFAULT_DBHOST; db_name = DB_DEFAULT_DBNAME; db_port = DB_DEFAULT_DBPORT; db_user = DB_DEFAULT_DBUSER; db_table = DB_DEFAULT_DBTABLE; db_pwd = DB_DEFAULT_DBPWD; /* parse URI string */ if (strlen(opt->dbaseURI)) { tmp = opt->dbaseURI; db_user = strsep(&tmp, ":"); db_pwd = strsep(&tmp, ":"); db_host = strsep(&tmp, ":"); db_port = strsep(&tmp, ":"); db_name = strsep(&tmp, ":"); db_table = strsep(&tmp, ":"); if (!db_user || !db_pwd || !db_host || !db_tmp || !db_name || !db_table) { fterr_warnx("Missing field in dbaseURI, expecting user:pwd:host:port:name:table."); return -1; } } /* dbaseURI */ ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); /* remove invalid fields */ opt->ft_mask &= ftrec_xfield(&ftv); /* generate the field names once */ fmt_xfields_type(fields, opt->ft_mask); /* open PostgreSQL database */ conn = PQsetdbLogin(db_host, db_port, (char *) NULL, (char *) NULL, db_name, db_user, db_pwd); if (PQstatus(conn) == CONNECTION_BAD) fterr_errx(1,"PQsetdbLogin(): %s\n", PQerrorMessage(conn)); /* foreach flow */ while ((rec = ftio_read(ftio))) { len = fmt_xfields_val(values, rec, &fo, opt->ft_mask, 1); /* form SQL query and execute it */ if (len) { strcpy (query, "INSERT INTO "); strcat (query, db_table); strcat (query, "("); strcat (query, fields); strcat (query, ") VALUES ("); strcat (query, values); strcat (query, ")"); if (debug) fprintf(stderr, "field=%s\n val=%s\n query=%s\n", fields, values, query); res = PQexec(conn, query); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { PQclear(res); fterr_errx(1,"PQexec(): %s\n", PQerrorMessage(conn)); } } ++opt->records; } /* while */ /* close database */ PQfinish(conn); #else /* PGSQL */ fterr_warnx("Format not supported"); #endif /* PGSQL */ return 0; } /* format5 */ int fmt_xfields_type(char *buf, u_int64 xfield) { int comma; buf[0] = 0; if (xfield & FT_XFIELD_UNIX_SECS) { strcat(buf, FT_XFIELD_ASC_UNIX_SECS); comma = 1; } if (xfield & FT_XFIELD_UNIX_NSECS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_UNIX_NSECS); comma = 1; } if (xfield & FT_XFIELD_SYSUPTIME) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_SYSUPTIME); comma = 1; } if (xfield & FT_XFIELD_EXADDR) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_EXADDR); comma = 1; } if (xfield & FT_XFIELD_DFLOWS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DFLOWS); comma = 1; } if (xfield & FT_XFIELD_DPKTS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DPKTS); comma = 1; } if (xfield & FT_XFIELD_DOCTETS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DOCTETS); comma = 1; } if (xfield & FT_XFIELD_FIRST) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_FIRST); comma = 1; } if (xfield & FT_XFIELD_LAST) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_LAST); comma = 1; } if (xfield & FT_XFIELD_ENGINE_TYPE) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_ENGINE_TYPE); comma = 1; } if (xfield & FT_XFIELD_ENGINE_ID) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_ENGINE_ID); comma = 1; } if (xfield & FT_XFIELD_SRCADDR) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_SRCADDR); comma = 1; } if (xfield & FT_XFIELD_DSTADDR) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DSTADDR); comma = 1; } if (xfield & FT_XFIELD_NEXTHOP) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_NEXTHOP); comma = 1; } if (xfield & FT_XFIELD_INPUT) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_INPUT); comma = 1; } if (xfield & FT_XFIELD_OUTPUT) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_OUTPUT); comma = 1; } if (xfield & FT_XFIELD_SRCPORT) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_SRCPORT); comma = 1; } if (xfield & FT_XFIELD_DSTPORT) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DSTPORT); comma = 1; } if (xfield & FT_XFIELD_PROT) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_PROT); comma = 1; } if (xfield & FT_XFIELD_TOS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_TOS); comma = 1; } if (xfield & FT_XFIELD_TCP_FLAGS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_TCP_FLAGS); comma = 1; } if (xfield & FT_XFIELD_SRC_MASK) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_SRC_MASK); comma = 1; } if (xfield & FT_XFIELD_DST_MASK) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DST_MASK); comma = 1; } if (xfield & FT_XFIELD_SRC_AS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_SRC_AS); comma = 1; } if (xfield & FT_XFIELD_DST_AS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DST_AS); comma = 1; } if (xfield & FT_XFIELD_IN_ENCAPS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_IN_ENCAPS); comma = 1; } if (xfield & FT_XFIELD_OUT_ENCAPS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_OUT_ENCAPS); comma = 1; } if (xfield & FT_XFIELD_PEER_NEXTHOP) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_NEXTHOP); comma = 1; } if (xfield & FT_XFIELD_ROUTER_SC) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_ROUTER_SC); comma = 1; } if (xfield & FT_XFIELD_EXTRA_PKTS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_EXTRA_PKTS); comma = 1; } if (xfield & FT_XFIELD_MARKED_TOS) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_MARKED_TOS); comma = 1; } if (xfield & FT_XFIELD_SRC_TAG) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_SRC_TAG); comma = 1; } if (xfield & FT_XFIELD_DST_TAG) { if (comma) strcat(buf, ","); strcat(buf, FT_XFIELD_ASC_DST_TAG); comma = 1; } return strlen(buf); } /* fmt_xfields_type */ int fmt_xfields_val(char *fmt_buf, char *rec, struct fts3rec_offsets *fo, u_int64 xfields, int quote) { int comma, len; fmt_buf[0] = 0; len = comma = 0; if (xfields & FT_XFIELD_UNIX_SECS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->unix_secs)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_UNIX_NSECS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->unix_nsecs)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_SYSUPTIME) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->sysUpTime)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_EXADDR) { if (comma) fmt_buf[len++] = ','; if (quote) fmt_buf[len++] = '"'; len += fmt_ipv4(fmt_buf+len, *((u_int32*)(rec+fo->exaddr)), FMT_JUST_LEFT); if (quote) fmt_buf[len++] = '"'; comma = 1; } if (xfields & FT_XFIELD_DFLOWS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->dFlows)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_DPKTS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->dPkts)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_DOCTETS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->dOctets)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_FIRST) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->First)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_LAST) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->Last)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_ENGINE_TYPE) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->engine_type)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_ENGINE_ID) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->engine_id)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_SRCADDR) { if (comma) fmt_buf[len++] = ','; if (quote) fmt_buf[len++] = '"'; len += fmt_ipv4(fmt_buf+len, *((u_int32*)(rec+fo->srcaddr)), FMT_JUST_LEFT); if (quote) fmt_buf[len++] = '"'; comma = 1; } if (xfields & FT_XFIELD_DSTADDR) { if (comma) fmt_buf[len++] = ','; if (quote) fmt_buf[len++] = '"'; len += fmt_ipv4(fmt_buf+len, *((u_int32*)(rec+fo->dstaddr)), FMT_JUST_LEFT); if (quote) fmt_buf[len++] = '"'; comma = 1; } if (xfields & FT_XFIELD_NEXTHOP) { if (comma) fmt_buf[len++] = ','; if (quote) fmt_buf[len++] = '"'; len += fmt_ipv4(fmt_buf+len, *((u_int32*)(rec+fo->nexthop)), FMT_JUST_LEFT); if (quote) fmt_buf[len++] = '"'; comma = 1; } if (xfields & FT_XFIELD_INPUT) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16(fmt_buf+len, *((u_int16*)(rec+fo->input)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_OUTPUT) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16(fmt_buf+len, *((u_int16*)(rec+fo->output)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_SRCPORT) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16(fmt_buf+len, *((u_int16*)(rec+fo->srcport)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_DSTPORT) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16(fmt_buf+len, *((u_int16*)(rec+fo->dstport)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_PROT) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->prot)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_TOS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->tos)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_TCP_FLAGS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->tcp_flags)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_SRC_MASK) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->src_mask)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_DST_MASK) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->dst_mask)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_SRC_AS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16(fmt_buf+len, *((u_int16*)(rec+fo->src_as)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_DST_AS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint16(fmt_buf+len, *((u_int16*)(rec+fo->dst_as)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_IN_ENCAPS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->in_encaps)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_OUT_ENCAPS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->out_encaps)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_PEER_NEXTHOP) { if (comma) fmt_buf[len++] = ','; if (quote) fmt_buf[len++] = '"'; len += fmt_ipv4(fmt_buf+len, *((u_int32*)(rec+fo->peer_nexthop)), FMT_JUST_LEFT); if (quote) fmt_buf[len++] = '"'; comma = 1; } if (xfields & FT_XFIELD_ROUTER_SC) { if (comma) fmt_buf[len++] = ','; if (quote) fmt_buf[len++] = '"'; len += fmt_ipv4(fmt_buf+len, *((u_int32*)(rec+fo->router_sc)), FMT_JUST_LEFT); if (quote) fmt_buf[len++] = '"'; comma = 1; } if (xfields & FT_XFIELD_MARKED_TOS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint8(fmt_buf+len, *((u_int8*)(rec+fo->marked_tos)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_EXTRA_PKTS) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->extra_pkts)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_SRC_TAG) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->src_tag)), FMT_JUST_LEFT); comma = 1; } if (xfields & FT_XFIELD_DST_TAG) { if (comma) fmt_buf[len++] = ','; len += fmt_uint32(fmt_buf+len, *((u_int32*)(rec+fo->dst_tag)), FMT_JUST_LEFT); comma = 1; } /* if ended on a quote string may not be null terminated */ fmt_buf[len++] = 0; return strlen(fmt_buf); } /* fmt_xfields_val */ void usage(void) { fprintf(stderr, "Usage: flow-export [-h] [-d debug_level] [-f format] [-m mask_fields] -u [database URI]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ /* * function ftxfield_tocflow * * convert flow-tools xfield bits to cflowd bits * * returns 0: ok * <0 fail */ int ftxfield_tocflow(u_int64 xfields, u_int32 *cfmask) { int droptime; droptime = 0; if (xfields & FT_XFIELD_EXADDR) { xfields &= ~FT_XFIELD_EXADDR; *cfmask |= CF_ROUTERMASK; } if (xfields & FT_XFIELD_SRCADDR) { xfields &= ~FT_XFIELD_SRCADDR; *cfmask |= CF_SRCIPADDRMASK; } if (xfields & FT_XFIELD_DSTADDR) { xfields &= ~FT_XFIELD_DSTADDR; *cfmask |= CF_DSTIPADDRMASK; } if (xfields & FT_XFIELD_INPUT) { xfields &= ~FT_XFIELD_INPUT; *cfmask |= CF_INPUTIFINDEXMASK; } if (xfields & FT_XFIELD_OUTPUT) { xfields &= ~FT_XFIELD_OUTPUT; *cfmask |= CF_OUTPUTIFINDEXMASK; } if (xfields & FT_XFIELD_SRCPORT) { xfields &= ~FT_XFIELD_SRCPORT; *cfmask |= CF_SRCPORTMASK; } if (xfields & FT_XFIELD_DSTPORT) { xfields &= ~FT_XFIELD_DSTPORT; *cfmask |= CF_DSTPORTMASK; } if (xfields & FT_XFIELD_DPKTS) { xfields &= ~FT_XFIELD_DPKTS; *cfmask |= CF_PKTSMASK; } if (xfields & FT_XFIELD_DOCTETS) { xfields &= ~FT_XFIELD_DOCTETS; *cfmask |= CF_BYTESMASK; } if (xfields & FT_XFIELD_NEXTHOP) { xfields &= ~FT_XFIELD_NEXTHOP; *cfmask |= CF_IPNEXTHOPMASK; } if ((xfields & (FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME| FT_XFIELD_FIRST)) == (FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME| FT_XFIELD_FIRST)) { xfields &= ~FT_XFIELD_NEXTHOP; droptime = 1; *cfmask |= CF_STARTTIMEMASK; } if ((xfields & (FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME| FT_XFIELD_LAST)) == (FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME| FT_XFIELD_LAST)) { xfields &= ~FT_XFIELD_NEXTHOP; droptime = 1; *cfmask |= CF_ENDTIMEMASK; } if (droptime) xfields &= ~(FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME); if (xfields & FT_XFIELD_PROT) { xfields &= ~FT_XFIELD_PROT; *cfmask |= CF_PROTOCOLMASK; } if (xfields & FT_XFIELD_TOS) { xfields &= ~FT_XFIELD_TOS; *cfmask |= CF_TOSMASK; } if (xfields & FT_XFIELD_SRC_AS) { xfields &= ~FT_XFIELD_SRC_AS; *cfmask |= CF_SRCASMASK; } if (xfields & FT_XFIELD_DST_AS) { xfields &= ~FT_XFIELD_DST_AS; *cfmask |= CF_DSTASMASK; } if (xfields & FT_XFIELD_SRC_MASK) { xfields &= ~FT_XFIELD_SRC_MASK; *cfmask |= CF_SRCMASKLENMASK; } if (xfields & FT_XFIELD_DST_MASK) { xfields &= ~FT_XFIELD_DST_MASK; *cfmask |= CF_DSTMASKLENMASK; } if (xfields & FT_XFIELD_TCP_FLAGS) { xfields &= ~FT_XFIELD_TCP_FLAGS ; *cfmask |= CF_TCPFLAGSMASK; } if (xfields & FT_XFIELD_IN_ENCAPS) { xfields &= ~FT_XFIELD_IN_ENCAPS ; *cfmask |= CF_INPUTENCAPMASK; } if (xfields & FT_XFIELD_OUT_ENCAPS) { xfields &= ~FT_XFIELD_OUT_ENCAPS ; *cfmask |= CF_OUTPUTENCAPMASK; } if (xfields & FT_XFIELD_PEER_NEXTHOP) { xfields &= ~FT_XFIELD_PEER_NEXTHOP ; *cfmask |= CF_PEERNEXTHOPMASK; } if (xfields & FT_XFIELD_ENGINE_TYPE) { xfields &= ~FT_XFIELD_ENGINE_TYPE ; *cfmask |= CF_ENGINETYPEMASK; } if (xfields & FT_XFIELD_ENGINE_ID) { xfields &= ~FT_XFIELD_ENGINE_ID ; *cfmask |= CF_ENGINEIDMASK; } if (xfields) { fterr_warnx("xfields contains fields after conversion to cflow mask 0x%llX", xfields); return -1; } return 0; } /* ftxfield_tocflow */ flow-tools-0.68/src/flow-fanout.c0000644000076600007660000006522510240154324012452 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-fanout.c,v 1.44 2005/05/10 15:52:52 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" #define FANOUT_PIDFILE "/var/run/flow-fanout.pid" #define SELECT_TIMEOUT 5 /* 5 seconds */ int debug; char *pidfile; void usage(void); struct peer { int fd; struct sockaddr_in loc_addr; /* us */ struct sockaddr_in rem_addr; /* them */ int port; int ttl; }; void fterr_exit_handler(int code); int sig_quit_flag, sig_hup_flag, sig_term_flag, reload_flag; void sig_quit(int), sig_hup(int), sig_term(int); pid_t pid; u_int16 listen_port; void pdu_xmit(int npeers, int tx_delay, int src_ip_spoof, int hdr_len, u_int32 *send_nobufs, struct ip *ip_hdr, struct udphdr *udp_hdr, struct ftencode *fte, struct peer *peers, struct ftnet *ftnet); int main(int argc, char **argv) { struct sockaddr_in tmp_addr; #ifdef IP_ADD_MEMBERSHIP struct ip_mreq mr; #ifdef IP_ADD_SOURCE_MEMBERSHIP struct ip_mreq_source mrs; #endif #endif struct timeval tv; struct tm *tm; time_t now, time_startup; fd_set rfd; struct ip *ip_hdr; struct udphdr *udp_hdr; struct ftpeeri ftpi; struct ftpdu ftpdu; struct ftver ftv; struct ftnet ftnet; struct ftchash *ftch; struct ftchash_rec_exp ftch_recexp, *ftch_recexpp; struct ftencode fte; struct ftfil ftfil; struct ftfil_def *ftfd; struct fts3rec_offsets fo; struct ftset ftset; struct ftvar ftvar; struct peer *peers; struct ftipmask ftipmask; u_int32 flows_corrupt, flows_lost, flows_reset, hash, privacy_mask; u_int32 send_nobufs; unsigned int v1, v2; char fmt_src_ip[32], fmt_dst_ip[32], fmt_dst_port[32]; char xl_rec[FT_IO_MAXREC], *out_rec; char *filter_fname, *filter_active; int i, n, detach, one, ret, offset, hdr_len; int npeers, tx_delay; int stat_interval, stat_next, src_ip_spoof; time_startup = time((time_t)0L); /* init fterr */ fterr_setid(argv[0]); fterr_setexit(fterr_exit_handler); bzero(&ftpdu, sizeof ftpdu); bzero(&ftv, sizeof ftv); bzero(&ftnet, sizeof ftnet); bzero(&ftch_recexp, sizeof ftch_recexp); bzero(&tv, sizeof tv); bzero(&ftfil, sizeof ftfil); bzero(&ftvar, sizeof ftvar); stat_interval = 0; stat_next = -1; src_ip_spoof = 0; /* no */ hdr_len = 0; send_nobufs = 0; reload_flag = 1; /* yes */ /* init var binding */ if (ftvar_new(&ftvar) < 0) fterr_errx(1, "ftvar_new(): failed"); filter_fname = FT_PATH_CFG_FILTER; filter_active = (char*)0L; ftfd = (struct ftfil_def*)0L; /* pidfile */ pidfile = FANOUT_PIDFILE; /* by default do not mask any src/dst ip addr bits */ privacy_mask = 0xFFFFFFFF; /* defaults + default compression */ ftset_init(&ftset, Z_DEFAULT_COMPRESSION); flows_corrupt = flows_lost = flows_reset = 0; debug = 0; tx_delay = 0; detach = 1; while ((i = getopt(argc, argv, "A:d:Df:F:hm:p:sS:v:V:x:")) != -1) switch (i) { case 'A': /* AS substitution */ ftset.as_sub = atoi(optarg); break; case 'd': /* debug */ debug = atoi(optarg); break; case 'D': /* detach */ detach = 0; break; case 'f': /* filter fname */ filter_fname = optarg; break; case 'F': /* filter active */ filter_active = optarg; break; case 'h': /* help */ usage(); exit (0); break; case 'm': /* privacy mask */ privacy_mask = scan_ip(optarg); break; case 'p': /* pidfile */ if ((optarg[0] == 0) || ((optarg[0] == '-') && (optarg[1] == 0))) pidfile = (char*)0L; else pidfile = optarg; break; case 's': /* source ip preserve */ src_ip_spoof = 1; break; case 'S': /* stat interval */ stat_interval = atoi(optarg); if ((stat_interval < 0) || (stat_interval > 60)) fterr_errx(1, "Stat interval must be between 0 and 60."); break; case 'v': /* variable */ if (ftvar_pset(&ftvar, optarg) < 0) fterr_errx(1, "ftvar_pset(%s): failed", optarg); break; case 'V': /* PDU version */ n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.set = 1; } else if (n == 2) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.agg_method = v2; ftv.agg_version = 2; ftv.set = 1; } else { fterr_errx(1, "Version scan failed"); } break; case 'x': /* transmit delay */ tx_delay = atoi(optarg); break; default: usage(); exit (1); break; } /* switch */ /* initialize encode struct */ ftencode_init(&fte, (src_ip_spoof) ? FT_ENC_FLAGS_IPHDR : 0); /* if src ip spoofing, initialize the IP/UDP header */ if (src_ip_spoof) { ip_hdr = (struct ip*)&fte.buf; udp_hdr = (struct udphdr*)((char*)&fte.buf + sizeof (*ip_hdr)); ip_hdr->ip_hl = 5; ip_hdr->ip_v = 4; ip_hdr->ip_p = 17; /* UDP */ hdr_len = FT_ENC_IPHDR_LEN; } /* initialize encoder version */ if (ftv.set) bcopy(&ftv, &fte.ver, sizeof ftv); /* allocate argc - optind peer entries */ npeers = argc - optind - 1; if (npeers < 1) fterr_errx(1, "Must define at least source and one destination."); /* pre-scan so write_pidfile has the port */ ftpi = scan_peeri(argv[optind]); listen_port = (ftpi.dst_port) ? ftpi.dst_port : FT_PORT; if (mysignal(SIGQUIT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGQUIT)"); if (mysignal(SIGTERM, sig_term) == SIG_ERR) fterr_err(1, "signal(SIGTERM)"); if (mysignal(SIGHUP, sig_hup) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); /* daemonize */ if (detach) { if ((pid = fork()) == -1) { fterr_err(1, "fork()"); } else if (pid) { if (pidfile) write_pidfile(pid, pidfile, listen_port); exit (0); /* parent */ } chdir ("/"); umask(0022); setsid(); for (n = 0; n < 16; ++n) /* XXX dynamically get NOFILE */ close (n); /* enable syslog */ fterr_setsyslog(1, LOG_PID|LOG_NDELAY, LOG_LOCAL6); /* disable stderr */ fterr_setfile(0, (void*)0L); } if (!(peers = (struct peer*)malloc(npeers * sizeof (struct peer)))) fterr_err(1, "malloc()"); /* zero out malloc'd memory */ bzero(peers, npeers*sizeof(struct peer)); /* pick off destinations, fill in peer entries */ for (i = optind+1, n = 0; i < argc; ++i, ++n) { /* parse loc_ip/rem_ip/port/ttl */ ftpi = scan_peeri(argv[i]); /* default UDP destination port is FT_PORT */ peers[n].rem_addr.sin_port = (ftpi.dst_port) ? htons(ftpi.dst_port) : htons(FT_PORT); peers[n].loc_addr.sin_family = AF_INET; peers[n].rem_addr.sin_family = AF_INET; peers[n].ttl = ftpi.ttl; /* default ttl to 255 if this is unicast */ if (!(IN_CLASSD(ftpi.rem_ip)) && (!ftpi.ttl)) peers[n].ttl = 255; /* reverse remote and local if multicast */ if ((n == 0) && (IN_CLASSD(ftpi.rem_ip))) { peers[n].loc_addr.sin_addr.s_addr = htonl(ftpi.rem_ip); peers[n].rem_addr.sin_addr.s_addr = htonl(ftpi.loc_ip); } else { peers[n].rem_addr.sin_addr.s_addr = htonl(ftpi.rem_ip); peers[n].loc_addr.sin_addr.s_addr = htonl(ftpi.loc_ip); } /* if preserving source IP address then these are raw sockets */ if (src_ip_spoof) { if ((peers[n].fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) fterr_err(1, "socket()"); /* see Stevens Unix Network Programming Volume 1 2nd edition page 657 */ #ifdef IP_HDRINCL one = 1; if (setsockopt(peers[n].fd, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0) { fterr_err(1, "setsockopt(IP_HDRINCL)"); } #endif /* IP_HDRINCL */ } else { /* normal UDP */ if ((peers[n].fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) fterr_err(1, "socket()"); } if (bigsockbuf(peers[n].fd, SO_SNDBUF, FT_SO_SND_BUFSIZE) < 0) fterr_err(1, "bigsockbuf()"); #ifdef IP_ADD_MEMBERSHIP /* multicast destination? */ if ((!src_ip_spoof) && (IN_CLASSD(ntohl(peers[n].rem_addr.sin_addr.s_addr)))) { u_char ttl = peers[n].ttl; /* set the ttl */ if (setsockopt(peers[n].fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl)) < 0) { fterr_err(1, "setsockopt(IP_MULTICAST_TTL=%d)", ttl); } } /* multicast */ #endif /* IP_ADD_MEMBERSHIP */ if (!src_ip_spoof) { if (bind(peers[n].fd, (struct sockaddr*)&peers[n].loc_addr, sizeof(struct sockaddr)) < 0) fterr_err(1, "bind(xmit)"); } if (connect(peers[n].fd, (struct sockaddr*)&peers[n].rem_addr, sizeof(struct sockaddr)) < 0) fterr_err(1, "connect(xmit)"); } /* for each destination */ /* first arg is the listener, scan it and store away in ftnet */ ftpi = scan_peeri(argv[optind]); ftnet.rem_ip = ftpi.rem_ip; ftnet.loc_ip = ftpi.loc_ip; /* default UDP listen port is FT_PORT */ ftnet.dst_port = (ftpi.dst_port) ? ftpi.dst_port : FT_PORT; ftnet.loc_addr.sin_family = AF_INET; ftnet.loc_addr.sin_addr.s_addr = htonl(ftpi.loc_ip); ftnet.loc_addr.sin_port = htons(ftnet.dst_port); /* socket to receive flow pdu exports */ if ((ftnet.fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) fterr_err(1, "socket()"); if (bigsockbuf(ftnet.fd, SO_RCVBUF, FT_SO_RCV_BUFSIZE) < 0) fterr_err(1, "bigsockbuf()"); /* * setup to receive flows */ /* multicast capable? */ #ifdef IP_ADD_MEMBERSHIP if (IN_CLASSD(ftpi.rem_ip)) { /* source is the first arg now */ ftnet.rem_ip = ftpi.loc_ip; ftnet.loc_ip = ftpi.rem_ip; /* socket API usually requires INADDR_ANY * and s/g/port identifier does not have a source interface field * to use here */ bzero(&tmp_addr, sizeof tmp_addr); tmp_addr.sin_family = AF_INET; tmp_addr.sin_port = htons(ftnet.dst_port); one = 1; /* Multicast streams may have multiple receivers */ if (setsockopt(ftnet.fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(SO_REUSEADDR)"); if (bind(ftnet.fd, (struct sockaddr*)&tmp_addr, sizeof(struct sockaddr)) < 0) fterr_err(1, "bind(mcast-rcv)"); #ifdef IP_ADD_SOURCE_MEMBERSHIP /* ssm address? */ if (IN_CLASSD_SSM(ftpi.rem_ip)) { mrs.imr_sourceaddr.s_addr = htonl(ftpi.loc_ip); mrs.imr_multiaddr.s_addr = htonl(ftpi.rem_ip); mrs.imr_interface.s_addr = INADDR_ANY; if (setsockopt(ftnet.fd, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, (char*)&mrs, sizeof(mrs)) < 0) fterr_err(1, "setsockopt(IP_ADD_SOURCE_MEMBERSHIP)"); } goto mcast_done; #endif /* IP_ADD_SOURCE_MEMBERSHIP */ mr.imr_multiaddr.s_addr = htonl(ftpi.rem_ip); mr.imr_interface.s_addr = INADDR_ANY; if (setsockopt(ftnet.fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mr, sizeof(mr)) < 0) fterr_err(1, "setsockopt(IP_ADD_MEMBERSHIP)"); } else { /* is a multicast group */ /* unicast bind -- multicast support */ if (bind(ftnet.fd, (struct sockaddr*)&ftnet.loc_addr, sizeof(ftnet.loc_addr)) < 0) fterr_err(1, "bind(loc_addr)"); } /* not multicast group */ #ifdef IP_ADD_SOURCE_MEMBERSHIP mcast_done: #endif /* IP_ADD_SOURCE_MEMBERSHIP */ #else /* IP_ADD_MEMBERSHIP */ /* unicast bind -- no multicast support */ if (bind(ftnet.fd, (struct sockaddr*)&ftnet.loc_addr, sizeof(ftnet.loc_addr)) < 0) fterr_err(1, "bind(loc_addr)"); #endif /* IP_ADD_MEMBERSHIP */ #ifdef IP_RECVDSTADDR one = 1; /* return the destination IP address */ if (setsockopt(ftnet.fd, IPPROTO_IP, IP_RECVDSTADDR, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(IP_RECVDSTADDR)"); #else #ifdef IP_PKTINFO one = 1; /* return the destination IP address */ if (setsockopt(ftnet.fd, IPPROTO_IP, IP_PKTINFO, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(IP_PKTINFO)"); #endif /* else */ #endif /* IP_RECVDSTADDR */ /* init hash table for demuxing exporters */ if (!(ftch = ftchash_new(256, sizeof (struct ftchash_rec_exp), 12, 1))) fterr_errx(1, "ftchash_new(): failed"); /* init msg block */ ftnet.iov[0].iov_len = sizeof ftpdu.buf; ftnet.iov[0].iov_base = (char*)&ftpdu.buf; ftnet.msg.msg_iov = (struct iovec*)&ftnet.iov; ftnet.msg.msg_iovlen = 1; ftnet.msg.msg_name = &ftnet.rem_addr; ftnet.msg.msg_namelen = sizeof ftnet.rem_addr; ftnet.msg.msg_control = &ftnet.msgip; ftnet.msg.msg_controllen = sizeof ftnet.msgip; /* default timeout waiting for an active fd */ tv.tv_sec = SELECT_TIMEOUT; /* setup for ftrec_mask_ip */ if (privacy_mask != 0xFFFFFFFF) ftrec_compute_mask(&ftipmask, privacy_mask, privacy_mask, ftset.byte_order); while (1) { FD_ZERO (&rfd); FD_SET (ftnet.fd, &rfd); if (select (ftnet.fd+1, &rfd, (fd_set *)0, (fd_set *)0, &tv) < 0) { if (errno == EINTR) { FD_ZERO (&rfd); } else { fterr_err(1, "select()"); } } now = time((time_t)0L); /* reset */ bzero (&tv, sizeof tv); tv.tv_sec = SELECT_TIMEOUT; if (stat_interval) { tm = localtime (&now); /* * note there is an obscure race condition here if this * code is not reached at least every stat_interval*60 seconds * where up to 1 hour of STAT lines would not show up. * This is highly unlikely and not handled. */ if ((tm->tm_min == stat_next) || (stat_next == -1)) { ftchash_first(ftch); while ((ftch_recexpp = ftchash_foreach(ftch))) { fmt_ipv4(fmt_src_ip, ftch_recexpp->src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexpp->dst_ip, FMT_JUST_LEFT); fterr_info( "STAT: now=%lu startup=%lu src_ip=%s dst_ip=%s d_ver=%d pkts=%lu flows=%lu lost=%lu reset=%lu filter_drops=%lu send_nobufs=%lu", (unsigned long)now, (unsigned long)time_startup, fmt_src_ip, fmt_dst_ip, ftch_recexpp->d_version, (u_long)ftch_recexpp->packets, (u_long)ftch_recexpp->flows, (u_long)ftch_recexpp->lost, (u_long)ftch_recexpp->reset, (u_long)ftch_recexpp->filtered_flows, (u_long)send_nobufs); } stat_next = (tm->tm_min + (stat_interval - tm->tm_min % stat_interval)) % 60; } } /* stat_inverval */ if (FD_ISSET(ftnet.fd, &rfd)) { restart_recvmsg: if ((ftpdu.bused = recvmsg(ftnet.fd, (struct msghdr*)&ftnet.msg, 0)) < 0) { if (errno == EAGAIN) goto restart_recvmsg; fterr_err(1, "recvmsg()"); } #ifdef IP_RECVDSTADDR /* got destination IP back? */ if ((ftnet.msgip.hdr.cmsg_level == IPPROTO_IP) && (ftnet.msgip.hdr.cmsg_type == IP_RECVDSTADDR)) { ftnet.loc_addr.sin_addr.s_addr = ftnet.msgip.ip.s_addr; } else { ftnet.loc_addr.sin_addr.s_addr = 0; } #else #ifdef IP_PKTINFO if ((ftnet.msgip.hdr.cmsg_level == IPPROTO_IP) && (ftnet.msgip.hdr.cmsg_type == IP_PKTINFO)) { ftnet.loc_addr.sin_addr.s_addr = ftnet.msgip.pktinfo.ipi_addr.s_addr; } else { ftnet.loc_addr.sin_addr.s_addr = 0; } #else ftnet.loc_addr.sin_addr.s_addr = 0; #endif #endif /* IP_RECVDSTADDR */ /* fill in hash key */ ftch_recexp.src_ip = htonl(ftnet.rem_addr.sin_addr.s_addr); ftch_recexp.dst_ip = htonl(ftnet.loc_addr.sin_addr.s_addr); ftch_recexp.dst_port = ftnet.dst_port; /* verify integrity, get version */ if (ftpdu_verify(&ftpdu) < 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fterr_warnx("ftpdu_verify(): src_ip=%s failed.", fmt_src_ip); flows_corrupt ++; goto skip1; } /* rest of hash key */ ftch_recexp.d_version = ftpdu.ftv.d_version; /* if exporter src IP has been configured then make sure it matches */ if (ftnet.rem_ip && (ftnet.rem_ip != ftch_recexp.src_ip)) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fterr_warnx("Unexpected PDU: src_ip=%s not configured", fmt_src_ip); flows_corrupt ++; goto skip1; } /* first flow or no configured destination version? */ if (!ftv.set) { /* copy to compare next time */ bcopy(&ftpdu.ftv, &ftv, sizeof ftv); /* flag struct as configured */ ftv.set = 1; /* configure encoder version */ bcopy(&ftv, &fte.ver, sizeof ftv); /* need offsets for filter later */ fts3rec_compute_offsets(&fo, &ftv); } else { /* translation to/from v8 not possible */ if (((ftv.d_version == 8) && (ftpdu.ftv.d_version != 8)) || ((ftv.d_version != 8) && (ftpdu.ftv.d_version == 8))) { fmt_ipv4(fmt_src_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_warnx("Unexpected PDU: src_ip=%s no v8 translation", fmt_src_ip); ++flows_corrupt; goto skip1; } /* translation among v8 aggregation methods not possible */ if ((ftv.d_version == 8) && ((ftv.agg_method != ftpdu.ftv.agg_method) || (ftv.agg_version != ftpdu.ftv.agg_version))) { fmt_ipv4(fmt_src_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_warnx( "Unexpected PDU: src_ip=%s multi v8 oagg=%d agg=%d over=%d ver=%d", fmt_src_ip, (int)ftv.agg_method, (int)ftpdu.ftv.agg_method, (int)ftv.agg_version, (int)ftpdu.ftv.agg_version); ++flows_corrupt; goto skip1; } } /* version processing */ /* load filters? */ if (reload_flag && ftv.set) { if (filter_active) { /* not first time through, then free previous filters */ if (ftfd) { ftfil_free(&ftfil); fterr_info("Loading filters."); } if (ftfil_load(&ftfil, &ftvar, filter_fname)) fterr_errx(1, "ftfil_load(%s): failed", filter_fname); if (!(ftfd = ftfil_def_find(&ftfil, filter_active))) fterr_errx(1, "ftfil_def_find(%s): failed", filter_active); if (ftfil_def_test_xfields(ftfd, ftrec_xfield(&ftv))) fterr_errx(1, "Filter references a field not in flow."); } /* filter_active */ reload_flag = 0; } /* compute 8 bit hash */ hash = (ftch_recexp.src_ip & 0xFF); hash ^= (ftch_recexp.src_ip>>24); hash ^= (ftch_recexp.dst_ip & 0xFF); hash ^= (ftch_recexp.dst_ip>>24); hash ^= (ftch_recexp.d_version & 0xFF); if (!(ftch_recexpp = ftchash_update(ftch, &ftch_recexp, hash))) fterr_errx(1, "ftch_update(): failed"); /* if the packet count is 0, then this is a new entry */ if (ftch_recexpp->packets == 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_info("New exporter: time=%lu src_ip=%s dst_ip=%s d_version=%d", (u_long)now, fmt_src_ip, fmt_dst_ip, (int)ftpdu.ftv.d_version); /* set translation function */ if (ftch_recexp.d_version != ftv.d_version) ftch_recexpp->xlate = ftrec_xlate_func(&ftpdu.ftv, &ftv); } /* verify sequence number */ if (ftpdu_check_seq(&ftpdu, &(ftch_recexpp->ftseq)) < 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fmt_uint16(fmt_dst_port, ftch_recexp.dst_port, FMT_JUST_LEFT); fterr_warnx( "ftpdu_seq_check(): src_ip=%s dst_ip=%s d_version=%d expecting=%lu received=%lu lost=%lu", fmt_src_ip, fmt_dst_ip, (int)ftpdu.ftv.d_version, (u_long)ftch_recexpp->ftseq.seq_exp, (u_long)ftch_recexpp->ftseq.seq_rcv, (u_long)ftch_recexpp->ftseq.seq_lost); /* only count these lost if "lost" is a reasonable number */ if (ftch_recexpp->ftseq.seq_lost < FT_SEQ_RESET) { flows_lost += ftch_recexpp->ftseq.seq_lost; ftch_recexpp->lost += ftch_recexpp->ftseq.seq_lost; } else { flows_reset ++; ftch_recexpp->reset ++; } } /* decode */ ftpdu.ftd.byte_order = ftset.byte_order; ftpdu.ftd.as_sub = ftset.as_sub; ftpdu.ftd.exporter_ip = ftch_recexp.src_ip; n = fts3rec_pdu_decode(&ftpdu); /* update the exporter stats */ ftch_recexpp->packets ++; ftch_recexpp->flows += n; /* write decoded flows */ for (i = 0, offset = 0; i < n; ++i, offset += ftpdu.ftd.rec_size) { /* simple data privacy */ if (privacy_mask != 0xFFFFFFFF) ftrec_mask_ip(ftpdu.ftd.buf+offset, &ftpdu.ftv, &ftipmask); /* translate version? */ if (ftch_recexpp->xlate) { ftch_recexpp->xlate(ftpdu.ftd.buf+offset, &xl_rec); out_rec = (char*)&xl_rec; } else { out_rec = (char*)ftpdu.ftd.buf+offset; } /* filter? */ if (ftfd) if (ftfil_def_eval(ftfd, out_rec, &fo) == FT_FIL_MODE_DENY) { ++ftch_recexpp->filtered_flows; continue; } retry: ret = fts3rec_pdu_encode(&fte, out_rec); /* ret == 0 then send and clear out buffer * ret > 0 then can encode another * ret < 0 then this encoding failed, send and clear out buffer */ /* need to transmit? */ if (ret < 0) { pdu_xmit(npeers, tx_delay, src_ip_spoof, hdr_len, &send_nobufs, ip_hdr, udp_hdr, &fte, peers, &ftnet); } /* ret < 0 */ /* if ret < 0 then the current record was not encoded */ if (ret < 0) goto retry; } /* for each flow */ /* any encoded flows that have not been transmitted */ if (fte.buf_size) { pdu_xmit(npeers, tx_delay, src_ip_spoof, hdr_len, &send_nobufs, ip_hdr, udp_hdr, &fte, peers, &ftnet); } /* fte.buf_size */ } /* if FD_ISSET */ skip1: if (sig_quit_flag) { fterr_info("SIGQUIT"); break; } if (sig_term_flag) { fterr_info("SIGTERM"); break; } if (sig_hup_flag) { fterr_info("SIGHUP"); sig_hup_flag = 0; } } /* while 1 */ if (pidfile) unlink_pidfile(pid, pidfile, listen_port); for (n = 0; n < npeers; ++n) close(peers[0].fd); return 0; } /* main */ void sig_quit(int sig) { sig_quit_flag = 1; } void sig_term(int sig) { sig_term_flag = 1; } void sig_hup(int sig) { sig_hup_flag = 1; reload_flag = 1; } void fterr_exit_handler(int code) { if (pid) if (pidfile) unlink_pidfile(pid, pidfile, listen_port); exit (code); } /* fterr_exit_handler */ void pdu_xmit(int npeers, int tx_delay, int src_ip_spoof, int hdr_len, u_int32 *send_nobufs, struct ip *ip_hdr, struct udphdr *udp_hdr, struct ftencode *fte, struct peer *peers, struct ftnet *ftnet) { int j, sum; /* convert pdu to network byte order */ #if BYTE_ORDER == LITTLE_ENDIAN ftpdu_swap(fte->buf_enc, BYTE_ORDER); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ /* do this once for all destinations */ ftencode_sum_data(fte); for (j = 0; j < npeers; ++j) { if (src_ip_spoof) { /* see Stevens Unix Network Programming Volume 1 2nd edition page 657 */ /* conditional from rawsend.c */ #if defined (__linux__) || (defined (__OpenBSD__) && (OpenBSD > 199702)) ip_hdr->ip_len = htons(FT_ENC_IPHDR_LEN+fte->buf_size); #else ip_hdr->ip_len = FT_ENC_IPHDR_LEN+fte->buf_size; #endif ip_hdr->ip_ttl = peers[j].ttl; /* use transmit source if loc_addr is not specified */ if (!peers[j].loc_addr.sin_addr.s_addr) ip_hdr->ip_src.s_addr = ftnet->rem_addr.sin_addr.s_addr; else ip_hdr->ip_src.s_addr = peers[j].loc_addr.sin_addr.s_addr; ip_hdr->ip_dst.s_addr = peers[j].rem_addr.sin_addr.s_addr; udp_hdr->uh_sport = htons(7999+j); udp_hdr->uh_dport = peers[j].rem_addr.sin_port; udp_hdr->uh_ulen = htons(fte->buf_size+8); udp_hdr->uh_sum = 0; sum = fte->d_sum; sum += udp_cksum(ip_hdr, udp_hdr, fte->buf_size+8); sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); udp_hdr->uh_sum = ~sum; } again: if (send(peers[j].fd, (char*)&fte->buf, fte->buf_size+hdr_len, 0) < 0) { /* always complete a send, drop flows in the kernel on receive if overloaded */ if (errno == ENOBUFS) { ++ *send_nobufs; usleep(1); goto again; } if (errno != ECONNREFUSED) fterr_warn("send(j=%d)", j); } if (tx_delay) usleep((unsigned)tx_delay); } /* foreach peer to send to */ /* reset encode buffer */ ftencode_reset(fte); } /* pdu_xmit */ void usage(void) { fprintf(stderr, "usage: flow-fanout [-hDs] [-A AS0_substitution] [-d debug_level]\n"); fprintf(stderr, " [-m privacy_mask] [-p pidfile] [-S stat_interval] [-V pdu_version]\n"); fprintf(stderr, " [-x] xmit_delay] localip/remoteip/port localip/remoteip/port ...\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-filter.c0000644000076600007660000004075110142036453012443 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-filter.c,v 1.29 2004/11/03 02:06:35 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" #include "acl2.h" #include "aclyacc.h" /* * TODO * extended ACL's */ int debug; int ip_net_only; struct acl_list acl_list; int yyparse (void); void usage(void); void yyerror(const char *msg); extern FILE *yyin; extern char *yytext; int main(int argc, char **argv) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftio ftio_in, ftio_out; struct ftset ftset; struct ftver ftv; struct ftprof ftp; u_int32 time_start, time_end, exaddr; int i, ret; char *acl_fname, *acl_std_src_name, *acl_std_dst_name; char *acl_std_nexthop_name; char *acl_ext_name, *str, *strm; int acl_std_src_index, acl_std_src_index2; int acl_std_dst_index, acl_std_dst_index2; int acl_std_nexthop_index, acl_std_nexthop_index2; int acl_ext_index, acl_ext_index2; struct acl_ip_ext_entry tmp_ext; int keep_input_time; int filter_input, filter_output, filter_srcport, filter_dstport; int filter_prot, filter_srcas, filter_dstas, filter_tos, filter_tcp_flags; int filter_exaddr; char in_tbl[65536], out_tbl[65536], src_tbl[65536], dst_tbl[65536]; char srcas_tbl[65536], dstas_tbl[65536], tos_tbl[65536]; char tcp_flags_tbl[65536]; char prot_tbl[256]; u_char tos_mask, tos, tcp_flags_mask, tcp_flags; u_int64 total_flows, xflag; char *rec; int first_match = 0; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv, sizeof ftv); /* defaults + no compression */ ftset_init(&ftset, 0); /* init */ bzero(&acl_list, sizeof acl_list); acl_fname = acl_std_src_name = acl_std_dst_name = (char*)0L; acl_std_nexthop_name = (char*)0L; acl_ext_name = (char*)0L; acl_std_src_index = acl_std_dst_index = -1; acl_std_nexthop_index = -1; acl_ext_index = -1; bzero(&tmp_ext, sizeof tmp_ext); total_flows = 0; tos_mask = 0xff; tcp_flags_mask = 0xff; keep_input_time = 0; filter_input = filter_output = filter_srcport = filter_dstport = 0; filter_prot = filter_srcas = filter_dstas = filter_tos = filter_exaddr = 0; filter_tcp_flags = 0; while ((i = getopt(argc, argv, "a:A:b:C:d:D:e:E:f:i:I:kop:P:r:S:t:T:x:z:")) != -1) switch (i) { case 'a': /* src AS filter list */ if (load_lookup(optarg, 65536, srcas_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_srcas = 1; break; case 'A': /* dst AS filter list */ if (load_lookup(optarg, 65536, dstas_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_dstas = 1; break; case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'D': /* dst ip standard access list filter */ acl_std_dst_name = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'e': /* export IP address */ filter_exaddr = 1; exaddr = scan_ip(optarg); break; case 'E': /* extended access list filter */ acl_ext_name = optarg; break; case 'f': /* acl file name */ acl_fname = optarg; break; case 'i': /* input filter interface list */ if (load_lookup(optarg, 65536, in_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_input = 1; break; case 'I': /* output filter interface list */ if (load_lookup(optarg, 65536, out_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_output = 1; break; case 'k': /* keep the start/end time from the input */ keep_input_time = 1; break; case 'o': /* do logical OR between different statements (first match) */ first_match = 1; break; case 'P': /* filter dstport */ if (load_lookup(optarg, 65536, dst_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_dstport = 1; break; case 'p': /* filter srcport */ if (load_lookup(optarg, 65536, src_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_srcport = 1; break; case 'r': /* filter protocol */ if (load_lookup(optarg, 256, prot_tbl)) fterr_errx(1, "load_lookup(): failed"); filter_prot = 1; break; case 'S': /* src ip standard access list filter */ acl_std_src_name = optarg; break; case 't': /* ToS Filter */ if (!(str = malloc(strlen(optarg+1)))) fterr_err(1, "malloc()"); strcpy(str, optarg); /* search for mask option */ if ((strm = index(str, '/'))) { ++strm; tos_mask = (u_char)strtol(strm, (char**)0L, 0); --strm; *strm = 0; } if (load_lookup(str, 65536, tos_tbl)) { free(str); fterr_errx(1, "load_lookup(): failed"); } free(str); filter_tos = 1; break; case 'T': /* tcp flags filter */ if (!(str = malloc(strlen(optarg+1)))) fterr_err(1, "malloc()"); strcpy(str, optarg); /* search for mask option */ if ((strm = index(str, '/'))) { ++strm; tcp_flags_mask = (u_char)strtol(strm, (char**)0L, 0); --strm; *strm = 0; } if (load_lookup(str, 65536, tcp_flags_tbl)) { free(str); fterr_errx(1, "load_lookup(): failed"); } free(str); filter_tcp_flags = 1; break; case 'x': /* nexthop ip standard access list filter */ acl_std_nexthop_name = optarg; break; case 'h': /* help */ case '?': usage(); exit (0); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* input from stdin */ if (ftio_init(&ftio_in, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_get_ver(&ftio_in, &ftv); ftv.s_version = FT_IO_SVERSION; xflag = 0; if (filter_input) xflag |= FT_XFIELD_INPUT; if (filter_output) xflag |= FT_XFIELD_OUTPUT; if (filter_srcport) xflag |= FT_XFIELD_SRCPORT; if (filter_dstport) xflag |= FT_XFIELD_DSTPORT; if (filter_exaddr) xflag |= FT_XFIELD_EXADDR; if (filter_prot) xflag |= FT_XFIELD_PROT; if (filter_srcas) xflag |= FT_XFIELD_SRC_AS; if (filter_dstas) xflag |= FT_XFIELD_DST_AS; if (filter_tos) xflag |= FT_XFIELD_TOS; if (filter_tcp_flags) xflag |= FT_XFIELD_TCP_FLAGS; if (acl_std_nexthop_name) xflag |= FT_XFIELD_NEXTHOP; if (acl_std_src_name) xflag |= FT_XFIELD_SRCADDR; if (acl_std_dst_name) xflag |= FT_XFIELD_DSTADDR; if (acl_ext_name) xflag |= (FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR); if (ftio_check_xfield(&ftio_in, xflag)) { fterr_warnx("Flow record missing required field for format."); exit (1); } fts3rec_compute_offsets(&fo, &ftv); /* output to stdout */ if (ftio_init(&ftio_out, 1, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* preserve start/end time from input stream? */ if (keep_input_time) { time_start = ftio_get_cap_start(&ftio_in); time_end = ftio_get_cap_end(&ftio_in); if (time_start && time_end) { ftio_set_preloaded(&ftio_out, 1); ftio_set_cap_time(&ftio_out, time_start, time_end); } } /* keep_input_time */ ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); if (ftio_set_ver(&ftio_out, &ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* * load acl's * XXX add fname check and close */ if ((yyin = fopen(acl_fname ? acl_fname : "flow.acl", "r"))) while (!feof(yyin)) yyparse(); /* * normalize masks */ /* XXX TODO */ if (debug > 5) acl_dump(acl_list); if (acl_std_src_name) { if ((acl_std_src_index = acl_find(acl_list, acl_std_src_name)) == -1) fterr_errx(1, "Couldn't find list %s\n", acl_std_src_name); acl_std_src_index2 = acl_list.names[acl_std_src_index].num; } if (acl_std_dst_name) { if ((acl_std_dst_index = acl_find(acl_list, acl_std_dst_name)) == -1) fterr_errx(1, "Couldn't find list %s\n", acl_std_dst_name); acl_std_dst_index2 = acl_list.names[acl_std_dst_index].num; } if (acl_ext_name) { if ((acl_ext_index = acl_find(acl_list, acl_ext_name)) == -1) fterr_errx(1, "Couldn't find list %s\n", acl_ext_name); acl_ext_index2 = acl_list.names[acl_ext_index].num; } if (acl_std_nexthop_name) { if ((acl_std_nexthop_index = acl_find(acl_list, acl_std_nexthop_name)) == -1) fterr_errx(1, "Couldn't find list %s\n", acl_std_nexthop_name); acl_std_nexthop_index2 = acl_list.names[acl_std_nexthop_index].num; } /* header first */ if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); /* profile */ ftprof_start (&ftp); /* grab 1 flow */ while ((rec = ftio_read(&ftio_in))) { cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.exaddr = ((u_int32*)(rec+fo.exaddr)); cur.nexthop = ((u_int32*)(rec+fo.nexthop)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tcp_flags = ((u_int8*)(rec+fo.tcp_flags)); cur.tos = ((u_int8*)(rec+fo.tos)); ++ total_flows; /* filter on input interface */ if (filter_input) { if (!in_tbl[*cur.input]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on output interface */ if (filter_output) { if (!out_tbl[*cur.output]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on src port */ if (filter_srcport) { if (!src_tbl[*cur.srcport]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on dst port */ if (filter_dstport) { if (!dst_tbl[*cur.dstport]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on exporter addr */ if (filter_exaddr) { if (*cur.exaddr != exaddr) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on protocol */ if (filter_prot) { if (!prot_tbl[*cur.prot]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on ToS */ if (filter_tos) { tos = *cur.tos & tos_mask; if (!tos_tbl[tos]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on tcp_flags */ if (filter_tcp_flags && (*cur.prot == IPPROTO_TCP)) { tcp_flags = *cur.tcp_flags & tcp_flags_mask; if (!tcp_flags_tbl[tcp_flags]) { if (!first_match) continue; } else if (first_match) { goto found; } } if (filter_srcas) { if (!srcas_tbl[*cur.src_as]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* filter on src AS */ if (filter_dstas) { if (!dstas_tbl[*cur.dst_as]) { if (!first_match) continue; } else if (first_match) { goto found; } } /* eval flow nexthop addr and nexthop standard acl */ if (acl_std_nexthop_index != -1) { ret = acl_eval_std(acl_list, acl_std_nexthop_index2, *cur.nexthop); if (ret == 1) { if (!first_match) continue; } else if (first_match) { goto found; } } /* eval flow src addr and source standard acl */ if (acl_std_src_index != -1) { ret = acl_eval_std(acl_list, acl_std_src_index2, *cur.srcaddr); if (ret == 1) { if (!first_match) continue; } else if (first_match) { goto found; } } /* eval flow dst addr and destination standard acl */ if (acl_std_dst_index != -1) { ret = acl_eval_std(acl_list, acl_std_dst_index2, *cur.dstaddr); if (ret == 1) { if (!first_match) continue; } else if (first_match) { goto found; } } /* eval flow and extended acl */ if (acl_ext_index != -1) { tmp_ext.protocol = *cur.prot; tmp_ext.tos = *cur.tos; /* XXX */ tmp_ext.type = 0; tmp_ext.type_code = 0; tmp_ext.message = 0; tmp_ext.src_addr = *cur.srcaddr; tmp_ext.src_port = *cur.srcport; tmp_ext.dst_addr = *cur.dstaddr; tmp_ext.dst_port = *cur.dstport; ret = acl_eval_ext(acl_list, acl_ext_index2, tmp_ext); if (ret == 1) { if (!first_match) continue; } else if (first_match) { goto found; } } if (first_match) /* No matches yet? next try.. */ continue; /* * made it by the filters, write it */ found: if (ftio_write(&ftio_out, rec) < 0) fterr_errx(1, "ftio_write(): failed"); } /* while more flows to read */ if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); if (ftio_close(&ftio_out) < 0) fterr_errx(1, "ftio_close(): failed"); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } if (debug > 1) { acl_dump_std(acl_list, acl_std_src_index); acl_dump_std(acl_list, acl_std_dst_index); acl_dump_std(acl_list, acl_std_nexthop_index); } return 0; } /* main */ void yyerror(const char *msg) { fterr_warnx("%s at '%s'\n", msg, yytext); } void usage(void) { fprintf(stderr, "Usage: flow-filter [-hko] [-a src_as_filter] [-A dst_as_filter] [-b big|little]\n"); fprintf(stderr, " [-C comment] [-D dstaddr_filter_name] [-d debug_level] [-e exaddr]\n"); fprintf(stderr, " [-f acl_fname] [-i input_filter] [-I output_filter] [-p srcport_filter]\n"); fprintf(stderr, " [-P dstport_filter] [-r ipprot_filter] [-S srcaddr_filter_name]\n"); fprintf(stderr, " [-t tos_filter] [-T tcp_flags_filter] [-x nexthop_filter_name]\n"); fprintf(stderr, " [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-gen.c0000644000076600007660000004757307642622725011756 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-gen.c,v 1.23 2003/04/02 18:03:01 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" /* * generate flows for testing */ int gen_v1(struct ftio *ftio, int options); int gen_v5(struct ftio *ftio, int options); int gen_v6(struct ftio *ftio, int options); int gen_v7(struct ftio *ftio, int options); int gen_v1005(struct ftio *ftio, int options); int gen_v8_1(struct ftio *ftio, int options); int gen_v8_2(struct ftio *ftio, int options); int gen_v8_3(struct ftio *ftio, int options); int gen_v8_4(struct ftio *ftio, int options); int gen_v8_5(struct ftio *ftio, int options); int gen_v8_6(struct ftio *ftio, int options); int gen_v8_7(struct ftio *ftio, int options); int gen_v8_8(struct ftio *ftio, int options); int gen_v8_9(struct ftio *ftio, int options); int gen_v8_10(struct ftio *ftio, int options); int gen_v8_11(struct ftio *ftio, int options); int gen_v8_12(struct ftio *ftio, int options); int gen_v8_13(struct ftio *ftio, int options); int gen_v8_14(struct ftio *ftio, int options); int debug; void usage(void); int main(int argc, char **argv) { struct ftset ftset; struct ftio ftio; struct ftver ftv; int count, i, n; unsigned int v1, v2; /* init fterr */ fterr_setid(argv[0]); /* defaults + no compression */ ftset_init(&ftset, 0); bzero(&ftv, sizeof ftv); count = 1000; ftv.s_version = FT_IO_SVERSION; ftv.d_version = 5; ftv.agg_method = 1; ftv.agg_version = 2; while ((i = getopt(argc, argv, "b:d:hn:V:z:")) != -1) switch(i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'd': /* debug level */ debug = atoi(optarg); break; case 'h': /* help */ usage(); exit(0); break; case 'n': /* count */ count = atoi(optarg); break; case 'V': /* PDU version */ n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.set = 1; } else if (n == 2) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.agg_method = v2; ftv.agg_version = 2; ftv.set = 1; } else fterr_errx(1, "Version scan failed"); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; default: usage(); exit (1); } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* output to stdout */ if (ftio_init(&ftio, 1, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_set_comment(&ftio, "flow-gen"); ftio_set_cap_hostname(&ftio, "flow-gen"); ftio_set_byte_order(&ftio, ftset.byte_order); ftio_set_z_level(&ftio, ftset.z_level); ftio_set_streaming(&ftio, 1); ftio_set_debug(&ftio, debug); if (ftio_set_ver(&ftio, &ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* header first */ if (ftio_write_header(&ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); switch (ftv.d_version) { case 1: gen_v1(&ftio, count); break; case 5: gen_v5(&ftio, count); break; case 6: gen_v6(&ftio, count); break; case 7: gen_v7(&ftio, count); break; case 8: switch (ftv.agg_method) { case 1: gen_v8_1(&ftio, count); break; case 2: gen_v8_2(&ftio, count); break; case 3: gen_v8_3(&ftio, count); break; case 4: gen_v8_4(&ftio, count); break; case 5: gen_v8_5(&ftio, count); break; case 6: gen_v8_6(&ftio, count); break; case 7: gen_v8_7(&ftio, count); break; case 8: gen_v8_8(&ftio, count); break; case 9: gen_v8_9(&ftio, count); break; case 10: gen_v8_10(&ftio, count); break; case 11: gen_v8_11(&ftio, count); break; case 12: gen_v8_12(&ftio, count); break; case 13: gen_v8_13(&ftio, count); break; case 14: gen_v8_14(&ftio, count); break; default: fterr_errx(1, "Unsupported agg_method %d", (int)ftv.agg_method); break; } /* switch */ break; case 1005: gen_v1005(&ftio, count); break; default: fterr_errx(1, "Unsupported d_version %d", (int)ftv.d_version); break; } /* switch d_version */ if (ftio_close(&ftio) < 0) fterr_errx(1, "ftio_close(): failed"); return 0; } /* main */ int gen_v1(struct ftio *ftio, int count) { struct fts3rec_v1 rec_v1; int i; bzero(&rec_v1, sizeof rec_v1); rec_v1.dstaddr = 0xFFFF0000; rec_v1.dstport = 0xFF00; rec_v1.output = 0xFF00; rec_v1.Last = 0xFFFF0000; rec_v1.prot = 17; for (i = 0; i < count; ++i) { rec_v1.dPkts ++; rec_v1.dOctets ++; if (ftio_write(ftio, &rec_v1) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v1.srcaddr ++; rec_v1.dstaddr ++; rec_v1.srcport ++; rec_v1.dstport ++; rec_v1.input ++; rec_v1.output ++; rec_v1.First ++; rec_v1.Last ++; } /* for */ return 0; } /* gen_v1 */ int gen_v5(struct ftio *ftio, int count) { struct fts3rec_v5 rec_v5; int i; bzero(&rec_v5, sizeof rec_v5); rec_v5.dstaddr = 0xFFFF0000; rec_v5.dstport = 0xFF00; rec_v5.output = 0xFF00; rec_v5.Last = 0xFFFF0000; rec_v5.dst_as = 0xFF00; rec_v5.prot = 17; for (i = 0; i < count; ++i) { rec_v5.dPkts ++; rec_v5.dOctets ++; if (ftio_write(ftio, &rec_v5) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v5.srcaddr ++; rec_v5.dstaddr ++; rec_v5.srcport ++; rec_v5.dstport ++; rec_v5.input ++; rec_v5.output ++; rec_v5.First ++; rec_v5.Last ++; rec_v5.src_as ++; rec_v5.dst_as ++; rec_v5.tos ++; } /* for */ return 0; } /* gen_v5 */ int gen_v6(struct ftio *ftio, int count) { struct fts3rec_v6 rec_v6; int i; bzero(&rec_v6, sizeof rec_v6); rec_v6.dstaddr = 0xFFFF0000; rec_v6.dstport = 0xFF00; rec_v6.output = 0xFF00; rec_v6.Last = 0xFFFF0000; rec_v6.dst_as = 0xFF00; rec_v6.out_encaps = 0x80; rec_v6.prot = 17; for (i = 0; i < count; ++i) { rec_v6.dPkts ++; rec_v6.dOctets ++; if (ftio_write(ftio, &rec_v6) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v6.srcaddr ++; rec_v6.dstaddr ++; rec_v6.srcport ++; rec_v6.dstport ++; rec_v6.input ++; rec_v6.output ++; rec_v6.First ++; rec_v6.Last ++; rec_v6.src_as ++; rec_v6.dst_as ++; rec_v6.peer_nexthop ++; rec_v6.in_encaps ++; rec_v6.out_encaps ++; } /* for */ return 0; } /* gen_v6 */ int gen_v7(struct ftio *ftio, int count) { struct fts3rec_v7 rec_v7; int i; bzero(&rec_v7, sizeof rec_v7); rec_v7.dstaddr = 0xFFFF0000; rec_v7.dstport = 0xFF00; rec_v7.output = 0xFF00; rec_v7.Last = 0xFFFF0000; rec_v7.dst_as = 0xFF00; rec_v7.prot = 17; for (i = 0; i < count; ++i) { rec_v7.dPkts ++; rec_v7.dOctets ++; if (ftio_write(ftio, &rec_v7) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v7.srcaddr ++; rec_v7.dstaddr ++; rec_v7.srcport ++; rec_v7.dstport ++; rec_v7.input ++; rec_v7.output ++; rec_v7.First ++; rec_v7.Last ++; rec_v7.src_as ++; rec_v7.dst_as ++; rec_v7.router_sc ++; } /* for */ return 0; } /* gen_v7 */ int gen_v8_1(struct ftio *ftio, int count) { struct fts3rec_v8_1 rec_v8_1; int i; bzero(&rec_v8_1, sizeof rec_v8_1); rec_v8_1.output = 0xFF00; rec_v8_1.Last = 0xFFFF0000; rec_v8_1.dst_as = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_1.dPkts ++; rec_v8_1.dOctets ++; rec_v8_1.dFlows += 2; if (ftio_write(ftio, &rec_v8_1) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_1.input ++; rec_v8_1.output ++; rec_v8_1.First ++; rec_v8_1.Last ++; rec_v8_1.src_as ++; rec_v8_1.dst_as ++; } /* for */ return 0; } /* gen_v8_1 */ int gen_v8_2(struct ftio *ftio, int count) { struct fts3rec_v8_2 rec_v8_2; int i; bzero(&rec_v8_2, sizeof rec_v8_2); rec_v8_2.Last = 0xFFFF0000; rec_v8_2.dstport = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_2.dPkts ++; rec_v8_2.dOctets ++; rec_v8_2.dFlows += 2; if (ftio_write(ftio, &rec_v8_2) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_2.First ++; rec_v8_2.Last ++; rec_v8_2.srcport ++; rec_v8_2.dstport ++; } /* for */ return 0; } /* gen_v8_2 */ int gen_v8_3(struct ftio *ftio, int count) { struct fts3rec_v8_3 rec_v8_3; int i; bzero(&rec_v8_3, sizeof rec_v8_3); rec_v8_3.Last = 0xFFFF0000; for (i = 0; i < count; ++i) { rec_v8_3.dPkts ++; rec_v8_3.dOctets ++; rec_v8_3.dFlows += 2; if (ftio_write(ftio, &rec_v8_3) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_3.First ++; rec_v8_3.Last ++; rec_v8_3.srcaddr ++; rec_v8_3.src_mask ++; rec_v8_3.src_as ++; rec_v8_3.input ++; } /* for */ return 0; } /* gen_v8_3 */ int gen_v8_4(struct ftio *ftio, int count) { struct fts3rec_v8_4 rec_v8_4; int i; bzero(&rec_v8_4, sizeof rec_v8_4); rec_v8_4.Last = 0xFFFF0000; for (i = 0; i < count; ++i) { rec_v8_4.dPkts ++; rec_v8_4.dOctets ++; rec_v8_4.dFlows += 2; if (ftio_write(ftio, &rec_v8_4) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_4.First ++; rec_v8_4.Last ++; rec_v8_4.dstaddr ++; rec_v8_4.dst_mask ++; rec_v8_4.dst_as ++; rec_v8_4.output ++; } /* for */ return 0; } /* gen_v8_4 */ int gen_v8_5(struct ftio *ftio, int count) { struct fts3rec_v8_5 rec_v8_5; int i; bzero(&rec_v8_5, sizeof rec_v8_5); rec_v8_5.Last = 0xFFFF0000; rec_v8_5.dstaddr = 0xFFFF0000; rec_v8_5.dst_as = 0xFF00; rec_v8_5.output = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_5.dPkts ++; rec_v8_5.dOctets ++; rec_v8_5.dFlows += 2; if (ftio_write(ftio, &rec_v8_5) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_5.First ++; rec_v8_5.Last ++; rec_v8_5.srcaddr ++; rec_v8_5.src_mask ++; rec_v8_5.src_as ++; rec_v8_5.input ++; rec_v8_5.dstaddr ++; rec_v8_5.dst_mask ++; rec_v8_5.dst_as ++; rec_v8_5.output ++; } /* for */ return 0; } /* gen_v8_5 */ int gen_v8_6(struct ftio *ftio, int count) { struct fts3rec_v8_6 rec_v8_6; int i; bzero(&rec_v8_6, sizeof rec_v8_6); rec_v8_6.Last = 0xFFFF0000; rec_v8_6.dstaddr = 0xFFFF0000; rec_v8_6.output = 0xFF00; rec_v8_6.marked_tos = 0xFF; for (i = 0; i < count; ++i) { rec_v8_6.dPkts ++; rec_v8_6.dOctets ++; if (ftio_write(ftio, &rec_v8_6) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_6.First ++; rec_v8_6.Last ++; rec_v8_6.dstaddr ++; rec_v8_6.output ++; rec_v8_6.tos ++; rec_v8_6.marked_tos ++; rec_v8_6.router_sc ++; rec_v8_6.extra_pkts ++; rec_v8_6.router_sc ++; } /* for */ return 0; } /* gen_v8_6 */ int gen_v8_7(struct ftio *ftio, int count) { struct fts3rec_v8_7 rec_v8_7; int i; bzero(&rec_v8_7, sizeof rec_v8_7); rec_v8_7.Last = 0xFFFF0000; rec_v8_7.dstaddr = 0xFFFF0000; rec_v8_7.output = 0xFF00; rec_v8_7.marked_tos = 0xFF; for (i = 0; i < count; ++i) { rec_v8_7.dPkts ++; rec_v8_7.dOctets ++; if (ftio_write(ftio, &rec_v8_7) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_7.First ++; rec_v8_7.Last ++; rec_v8_7.dstaddr ++; rec_v8_7.srcaddr ++; rec_v8_7.output ++; rec_v8_7.input ++; rec_v8_7.tos ++; rec_v8_7.marked_tos ++; rec_v8_7.router_sc ++; rec_v8_7.extra_pkts ++; rec_v8_7.router_sc ++; } /* for */ return 0; } /* gen_v8_7 */ int gen_v8_8(struct ftio *ftio, int count) { struct fts3rec_v8_8 rec_v8_8; int i; bzero(&rec_v8_8, sizeof rec_v8_8); rec_v8_8.Last = 0xFFFF0000; rec_v8_8.dstaddr = 0xFFFF0000; rec_v8_8.output = 0xFF00; rec_v8_8.marked_tos = 0xFF; for (i = 0; i < count; ++i) { rec_v8_8.dPkts ++; rec_v8_8.dOctets ++; if (ftio_write(ftio, &rec_v8_8) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_8.First ++; rec_v8_8.Last ++; rec_v8_8.dstaddr ++; rec_v8_8.srcaddr ++; rec_v8_8.output ++; rec_v8_8.input ++; rec_v8_8.dstport ++; rec_v8_8.srcport ++; rec_v8_8.prot ++; rec_v8_8.tos ++; rec_v8_8.marked_tos ++; rec_v8_8.router_sc ++; rec_v8_8.extra_pkts ++; rec_v8_8.router_sc ++; } /* for */ return 0; } /* gen_v8_8 */ int gen_v8_9(struct ftio *ftio, int count) { struct fts3rec_v8_9 rec_v8_9; int i; bzero(&rec_v8_9, sizeof rec_v8_9); rec_v8_9.output = 0xFF00; rec_v8_9.Last = 0xFFFF0000; rec_v8_9.dst_as = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_9.dPkts ++; rec_v8_9.dOctets ++; rec_v8_9.dFlows += 2; if (ftio_write(ftio, &rec_v8_9) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_9.input ++; rec_v8_9.output ++; rec_v8_9.First ++; rec_v8_9.Last ++; rec_v8_9.src_as ++; rec_v8_9.dst_as ++; rec_v8_9.tos ++; } /* for */ return 0; } /* gen_v8_9 */ int gen_v8_10(struct ftio *ftio, int count) { struct fts3rec_v8_10 rec_v8_10; int i; bzero(&rec_v8_10, sizeof rec_v8_10); rec_v8_10.Last = 0xFFFF0000; rec_v8_10.dstport = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_10.dPkts ++; rec_v8_10.dOctets ++; rec_v8_10.dFlows += 2; if (ftio_write(ftio, &rec_v8_10) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_10.First ++; rec_v8_10.Last ++; rec_v8_10.srcport ++; rec_v8_10.dstport ++; rec_v8_10.tos ++; } /* for */ return 0; } /* gen_v8_10 */ int gen_v8_11(struct ftio *ftio, int count) { struct fts3rec_v8_11 rec_v8_11; int i; bzero(&rec_v8_11, sizeof rec_v8_11); rec_v8_11.Last = 0xFFFF0000; for (i = 0; i < count; ++i) { rec_v8_11.dPkts ++; rec_v8_11.dOctets ++; rec_v8_11.dFlows += 2; if (ftio_write(ftio, &rec_v8_11) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_11.First ++; rec_v8_11.Last ++; rec_v8_11.srcaddr ++; rec_v8_11.src_mask ++; rec_v8_11.src_as ++; rec_v8_11.input ++; rec_v8_11.tos ++; } /* for */ return 0; } /* gen_v8_11 */ int gen_v8_12(struct ftio *ftio, int count) { struct fts3rec_v8_12 rec_v8_12; int i; bzero(&rec_v8_12, sizeof rec_v8_12); rec_v8_12.Last = 0xFFFF0000; for (i = 0; i < count; ++i) { rec_v8_12.dPkts ++; rec_v8_12.dOctets ++; rec_v8_12.dFlows += 2; if (ftio_write(ftio, &rec_v8_12) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_12.First ++; rec_v8_12.Last ++; rec_v8_12.dstaddr ++; rec_v8_12.dst_mask ++; rec_v8_12.dst_as ++; rec_v8_12.output ++; rec_v8_12.tos ++; } /* for */ return 0; } /* gen_v8_12 */ int gen_v8_13(struct ftio *ftio, int count) { struct fts3rec_v8_13 rec_v8_13; int i; bzero(&rec_v8_13, sizeof rec_v8_13); rec_v8_13.Last = 0xFFFF0000; rec_v8_13.dstaddr = 0xFFFF0000; rec_v8_13.dst_as = 0xFF00; rec_v8_13.output = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_13.dPkts ++; rec_v8_13.dOctets ++; rec_v8_13.dFlows += 2; if (ftio_write(ftio, &rec_v8_13) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_13.First ++; rec_v8_13.Last ++; rec_v8_13.srcaddr ++; rec_v8_13.src_mask ++; rec_v8_13.src_as ++; rec_v8_13.input ++; rec_v8_13.dstaddr ++; rec_v8_13.dst_mask ++; rec_v8_13.dst_as ++; rec_v8_13.output ++; rec_v8_13.tos ++; } /* for */ return 0; } /* gen_v8_13 */ int gen_v8_14(struct ftio *ftio, int count) { struct fts3rec_v8_14 rec_v8_14; int i; bzero(&rec_v8_14, sizeof rec_v8_14); rec_v8_14.Last = 0xFFFF0000; rec_v8_14.dstaddr = 0xFFFF0000; rec_v8_14.output = 0xFF00; rec_v8_14.dstport = 0xFF00; for (i = 0; i < count; ++i) { rec_v8_14.dPkts ++; rec_v8_14.dOctets ++; rec_v8_14.dFlows += 2; if (ftio_write(ftio, &rec_v8_14) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v8_14.First ++; rec_v8_14.Last ++; rec_v8_14.srcport ++; rec_v8_14.dstport ++; rec_v8_14.srcaddr ++; rec_v8_14.src_mask ++; rec_v8_14.input ++; rec_v8_14.dstaddr ++; rec_v8_14.dst_mask ++; rec_v8_14.output ++; rec_v8_14.tos ++; rec_v8_14.prot ++; } /* for */ return 0; } /* gen_v8_14 */ int gen_v1005(struct ftio *ftio, int count) { struct fts3rec_v1005 rec_v1005; int i; bzero(&rec_v1005, sizeof rec_v1005); rec_v1005.dstaddr = 0x8092C500; rec_v1005.dstport = 0xFF00; rec_v1005.output = 0xFF00; rec_v1005.Last = 0xFFFF0000; rec_v1005.dst_as = 0xFF00; rec_v1005.prot = 17; rec_v1005.dst_tag = 0xFF; rec_v1005.nexthop = 0x8092C500; for (i = 0; i < count; ++i) { rec_v1005.dPkts ++; rec_v1005.dOctets ++; if (ftio_write(ftio, &rec_v1005) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } rec_v1005.srcaddr ++; rec_v1005.dstaddr ++; rec_v1005.srcport ++; rec_v1005.dstport ++; rec_v1005.input ++; rec_v1005.output ++; rec_v1005.First ++; rec_v1005.Last ++; rec_v1005.src_as ++; rec_v1005.dst_as ++; rec_v1005.src_tag ++; rec_v1005.dst_tag ++; rec_v1005.tos ++; rec_v1005.nexthop ++; } /* for */ return 0; } /* gen_v1005 */ void usage(void) { fprintf(stderr, "Usage: flow-gen [-h] [-b big|little] [-d debug_level] [-n count]\n"); fprintf(stderr, " [-V version] [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-header.c0000644000076600007660000000507107642622726012421 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-header.c,v 1.9 2003/04/02 18:03:02 maf Exp $ */ #include "ftconfig.h" #include "ftbuild.h" #include #include #include void usage(void); int main(int argc, char **argv) { struct ftio ftio; char cc; /* comment character */ int i, debug; /* init fterr */ fterr_setid(argv[0]); debug = 0; cc = '#'; while ((i = getopt(argc, argv, "c:d:h?")) != -1) switch (i) { case 'c': /* comment character */ cc = optarg[0]; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'h': /* help */ case '?': usage(); exit (0); break; default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* read from stdin */ if (ftio_init(&ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_header_print(&ftio, stdout, cc); return ftio_close(&ftio); } /* main */ void usage(void) { fprintf(stderr, "Usage: flow-header [-h] [-c comment_char] [-d debug_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-import.c0000644000076600007660000010155507754212045012500 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-import.c,v 1.14 2003/11/11 16:53:57 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if !HAVE_STRSEP char *strsep (char **, const char *); #endif #include "ftbuild.h" #include "cflowd.h" struct options { struct ftver ftv; struct ftset ftset; u_int64 ft_mask; int set_format; u_long records; }; struct jump { int (*where)(struct ftio *ftio, struct options *opt); }; int format0(struct ftio *ftio, struct options *opt); int format1(struct ftio *ftio, struct options *opt); int format2(struct ftio *ftio, struct options *opt); int format_NFCollector1(struct ftio *ftio, struct options *opt); int format4(struct ftio *ftio, struct options *opt); void usage(void); struct jump format[] = {{format0}, {format1}, {format2}, { format_NFCollector1 }, {format4} }; static u_int64 vXmask[] = { 0, FT_XFIELD_V1_MASK, 0, 0, 0, FT_XFIELD_V5_MASK, FT_XFIELD_V6_MASK, FT_XFIELD_V7_MASK }; static u_int64 v8mask[] = { 0, FT_XFIELD_V8_1_MASK, FT_XFIELD_V8_2_MASK, FT_XFIELD_V8_3_MASK, FT_XFIELD_V8_4_MASK, FT_XFIELD_V8_5_MASK, FT_XFIELD_V8_6_MASK, FT_XFIELD_V8_7_MASK, FT_XFIELD_V8_8_MASK, FT_XFIELD_V8_9_MASK, FT_XFIELD_V8_10_MASK, FT_XFIELD_V8_11_MASK, FT_XFIELD_V8_12_MASK, FT_XFIELD_V8_13_MASK, FT_XFIELD_V8_14_MASK }; #define NFORMATS 5 /* nformats + 1 */ #if HAVE_LL_STRTOUL #define strtoull strtoul #endif /* HAVE_LL_STRTOULL */ int main(int argc, char **argv) { struct ftio ftio; struct options opt; int i, n, format_index, ret; unsigned int v1, v2; int debug; /* init fterr */ fterr_setid(argv[0]); debug = 0; format_index = 0; bzero(&opt, sizeof opt); /* defaults + no compression */ ftset_init(&opt.ftset, 0); opt.ft_mask = 0xFFFFFFFFFFFFFFFFLL; while ((i = getopt(argc, argv, "b:d:f:h?m:V:z:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) opt.ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) opt.ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'd': /* debug */ debug = atoi(optarg); break; case 'f': /* format */ format_index = atoi(optarg); break; case 'h': /* help */ case '?': usage(); exit (0); break; case 'm': /* mask */ if (isalpha((int)optarg[0])) { if (ftxfield_parse(optarg, &opt.ft_mask) < 0) fterr_errx(1, "ftxfield_parse(): failed"); } else { opt.ft_mask = strtoull(optarg, (char **)0L, 0); } opt.set_format = 1; break; case 'V': /* PDU version */ n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { opt.ftv.s_version = FT_IO_SVERSION; opt.ftv.d_version = v1; opt.ftv.set = 1; } else if (n == 2) { opt.ftv.s_version = FT_IO_SVERSION; opt.ftv.d_version = v1; opt.ftv.agg_method = v2; opt.ftv.agg_version = 2; opt.ftv.set = 1; } else fterr_errx(1, "Version scan failed"); break; case 'z': /* compress level */ opt.ftset.z_level = atoi(optarg); if ((opt.ftset.z_level < 0) || (opt.ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); if (format_index >= NFORMATS) fterr_errx(1, "No such format, %d", format_index); if (!opt.ftv.set) fterr_errx(1, "Must specify export version to store flows"); /* output to stdout */ if (ftio_init(&ftio, 1, FT_IO_FLAG_WRITE | ((opt.ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_set_comment(&ftio, "flow-import"); ftio_set_cap_hostname(&ftio, "flow-import"); ftio_set_byte_order(&ftio, opt.ftset.byte_order); ftio_set_z_level(&ftio, opt.ftset.z_level); ftio_set_streaming(&ftio, 1); ftio_set_debug(&ftio, debug); if (ftio_set_ver(&ftio, &opt.ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* header first */ if (ftio_write_header(&ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); ret = format[format_index].where(&ftio, &opt); if (ftio_close(&ftio) < 0) fterr_errx(1, "ftio_close(): failed"); fprintf(stderr, "%s: Imported %lu records.\n", argv[0], opt.records); return ret; } /* main */ /* * function: format0 * * import from cflowd files */ int format0(struct ftio *ftio, struct options *opt) { struct fts3rec_offsets fo; size_t rlen; u_char buf[FT_IO_MAXREC]; char *rec; u_int32 ui32, Start; u_int16 ui16; u_int8 ui8; u_int32 cfdmask, index; int ret; rec = (char*)&buf; fts3rec_compute_offsets(&fo, &opt->ftv); switch (opt->ftv.d_version) { case 1: cfdmask = CF_INDEX_V1_MASK; break; case 5: cfdmask = CF_INDEX_V5_MASK; break; case 6: cfdmask = CF_INDEX_V6_MASK; break; case 7: cfdmask = CF_INDEX_V7_MASK; break; case 8: switch (opt->ftv.agg_method) { case 1: cfdmask = CF_INDEX_V8_1_MASK; break; case 2: cfdmask = CF_INDEX_V8_2_MASK; break; case 3: cfdmask = CF_INDEX_V8_3_MASK; break; case 4: cfdmask = CF_INDEX_V8_4_MASK; break; case 5: cfdmask = CF_INDEX_V8_5_MASK; break; case 6: cfdmask = CF_INDEX_V8_6_MASK; break; case 7: cfdmask = CF_INDEX_V8_7_MASK; break; case 8: cfdmask = CF_INDEX_V8_8_MASK; break; case 9: cfdmask = CF_INDEX_V8_9_MASK; break; case 10: cfdmask = CF_INDEX_V8_10_MASK; break; case 11: cfdmask = CF_INDEX_V8_11_MASK; break; case 12: cfdmask = CF_INDEX_V8_12_MASK; break; case 13: cfdmask = CF_INDEX_V8_13_MASK; break; case 14: cfdmask = CF_INDEX_V8_14_MASK; break; default: fterr_warnx("Unsupported export version"); return -1; } /* switch */ break; default: fterr_warnx("Unsupported export version"); return -1; } /* switch */ ret = -1; while (!(feof(stdin))) { ret = -1; bzero(rec, FT_IO_MAXREC); Start = 0; if ((rlen = fread(&index, sizeof (index), 1, stdin) != 1)) goto done; index = ntohl(index); if (index & CF_ROUTERMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_ROUTERMASK) *((u_int32*)(rec+fo.exaddr)) = ui32; } if (index & CF_SRCIPADDRMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_SRCIPADDRMASK) *((u_int32*)(rec+fo.srcaddr)) = ui32; } if (index & CF_DSTIPADDRMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_DSTIPADDRMASK) *((u_int32*)(rec+fo.dstaddr)) = ui32; } if (index & CF_INPUTIFINDEXMASK) { if ((rlen = fread(&ui16, sizeof (ui16), 1, stdin) != 1)) goto done; ui16 = ntohs(ui16); if (cfdmask & CF_DSTIPADDRMASK) *((u_int16*)(rec+fo.input)) = ui16; } if (index & CF_OUTPUTIFINDEXMASK) { if ((rlen = fread(&ui16, sizeof (ui16), 1, stdin) != 1)) goto done; ui16 = ntohs(ui16); if (cfdmask & CF_OUTPUTIFINDEXMASK) *((u_int16*)(rec+fo.output)) = ui16; } if (index & CF_SRCPORTMASK) { if ((rlen = fread(&ui16, sizeof (ui16), 1, stdin) != 1)) goto done; ui16 = ntohs(ui16); if (cfdmask & CF_SRCPORTMASK) *((u_int16*)(rec+fo.srcport)) = ui16; } if (index & CF_DSTPORTMASK) { if ((rlen = fread(&ui16, sizeof (ui16), 1, stdin) != 1)) goto done; ui16 = ntohs(ui16); if (cfdmask & CF_DSTPORTMASK) *((u_int16*)(rec+fo.dstport)) = ui16; } if (index & CF_PKTSMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_PKTSMASK) *((u_int32*)(rec+fo.dPkts)) = ui32; } if (index & CF_BYTESMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_BYTESMASK) *((u_int32*)(rec+fo.dOctets)) = ui32; } if (index & CF_IPNEXTHOPMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_IPNEXTHOPMASK) *((u_int32*)(rec+fo.nexthop)) = ui32; } if (index & CF_STARTTIMEMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); Start = ui32; if (cfdmask & CF_STARTTIMEMASK) *((u_int32*)(rec+fo.unix_secs)) = ui32; } if (index & CF_ENDTIMEMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_ENDTIMEMASK) { if (Start) *((u_int32*)(rec+fo.Last)) = (ui32 - Start) * 1000; else *((u_int32*)(rec+fo.unix_secs)) = ui32; } } if (index & CF_PROTOCOLMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_PROTOCOLMASK) *((u_int8*)(rec+fo.prot)) = ui8; } if (index & CF_TOSMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_TOSMASK) *((u_int8*)(rec+fo.tos)) = ui8; } if (index & CF_SRCASMASK) { if ((rlen = fread(&ui16, sizeof (ui16), 1, stdin) != 1)) goto done; ui16 = ntohs(ui16); if (cfdmask & CF_SRCASMASK) *((u_int16*)(rec+fo.src_as)) = ui16; } if (index & CF_DSTASMASK) { if ((rlen = fread(&ui16, sizeof (ui16), 1, stdin) != 1)) goto done; ui16 = ntohs(ui16); if (cfdmask & CF_DSTASMASK) *((u_int16*)(rec+fo.dst_as)) = ui16; } if (index & CF_SRCMASKLENMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_SRCMASKLENMASK) *((u_int8*)(rec+fo.src_mask)) = ui8; } if (index & CF_DSTMASKLENMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_DSTMASKLENMASK) *((u_int8*)(rec+fo.dst_mask)) = ui8; } if (index & CF_TCPFLAGSMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_TCPFLAGSMASK) *((u_int8*)(rec+fo.tcp_flags)) = ui8; } if (index & CF_INPUTENCAPMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_INPUTENCAPMASK) *((u_int8*)(rec+fo.in_encaps)) = ui8; } if (index & CF_OUTPUTENCAPMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_OUTPUTENCAPMASK) *((u_int8*)(rec+fo.out_encaps)) = ui8; } if (index & CF_PEERNEXTHOPMASK) { if ((rlen = fread(&ui32, sizeof (ui32), 1, stdin) != 1)) goto done; ui32 = ntohl(ui32); if (cfdmask & CF_PEERNEXTHOPMASK) *((u_int32*)(rec+fo.peer_nexthop)) = ui32; } if (index & CF_ENGINETYPEMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_ENGINETYPEMASK) *((u_int8*)(rec+fo.engine_type)) = ui8; } if (index & CF_ENGINEIDMASK) { if ((rlen = fread(&ui8, sizeof (ui8), 1, stdin) != 1)) goto done; if (cfdmask & CF_ENGINEIDMASK) *((u_int8*)(rec+fo.engine_id)) = ui8; } if (ftio_write(ftio, rec) < 0) { fterr_warnx("ftio_write(): failed"); return -1; } ++opt->records; ret = 0; } done: return ret; } /* format0 */ int format1(struct ftio *ftio, struct options *opt) { fterr_warnx("Not implemented"); return -1; } /* format1 */ /* * function: format2 * * import from ASCII CSV format */ int format2(struct ftio *ftio, struct options *opt) { struct fts3rec_offsets fo; u_char buf[FT_IO_MAXREC]; char inbuf[1024], *inbufp, *field; char *rec, *c; u_int64 dmask, inmask; int ret; rec = (char*)&buf; fts3rec_compute_offsets(&fo, &opt->ftv); dmask = 0; dmask = ( opt->ftv.d_version == 8 ? v8mask[opt->ftv.agg_method] : vXmask[opt->ftv.d_version] ); if(!dmask) { fterr_warnx("unsupported export version"); return -1; } /* no user specified format then default to one appropriate for version */ if (!opt->set_format) inmask = dmask; else inmask = opt->ft_mask; ret = -1; while (!(feof(stdin))) { ret = 0; if (!fgets(inbuf, 1024, stdin)) goto done; for (field = inbuf; *field; ++field) if (*field == '\n') { *field = 0; break; } /* inline mask? */ if (!opt->records && inbuf[0] == '#' && inbuf[1] == ':') { if (ftxfield_parse(inbuf+2, &inmask) < 0) { fterr_warnx("ftxfield_parse(): failed"); return -1; } } for (c = inbuf; *c && isspace(*c); ++c); if (*c == '#') continue; ret = -1; bzero(rec, FT_IO_MAXREC); inbufp = inbuf; if (inmask & FT_XFIELD_UNIX_SECS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_UNIX_SECS)) *((u_int32*)(rec+fo.unix_secs)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_UNIX_NSECS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_UNIX_NSECS)) *((u_int32*)(rec+fo.unix_nsecs)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_SYSUPTIME) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_SYSUPTIME)) *((u_int32*)(rec+fo.sysUpTime)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_EXADDR) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_EXADDR)) *((u_int32*)(rec+fo.exaddr)) = scan_ip(field); } if (inmask & FT_XFIELD_DFLOWS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DFLOWS)) *((u_int32*)(rec+fo.dFlows)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_DPKTS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DPKTS)) *((u_int32*)(rec+fo.dPkts)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_DOCTETS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DOCTETS)) *((u_int32*)(rec+fo.dOctets)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_FIRST) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_FIRST)) *((u_int32*)(rec+fo.First)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_LAST) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_LAST)) *((u_int32*)(rec+fo.Last)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_ENGINE_TYPE) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_ENGINE_TYPE)) *((u_int8*)(rec+fo.engine_type)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_ENGINE_ID) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_ENGINE_ID)) *((u_int8*)(rec+fo.engine_id)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_SRCADDR) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_SRCADDR)) *((u_int32*)(rec+fo.srcaddr)) = scan_ip(field); } if (inmask & FT_XFIELD_DSTADDR) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DSTADDR)) *((u_int32*)(rec+fo.dstaddr)) = scan_ip(field); } if (inmask & FT_XFIELD_NEXTHOP) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_NEXTHOP)) *((u_int32*)(rec+fo.nexthop)) = scan_ip(field); } if (inmask & FT_XFIELD_INPUT) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_INPUT)) *((u_int16*)(rec+fo.input)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_OUTPUT) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_OUTPUT)) *((u_int16*)(rec+fo.output)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_SRCPORT) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_SRCPORT)) *((u_int16*)(rec+fo.srcport)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_DSTPORT) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DSTPORT)) *((u_int16*)(rec+fo.dstport)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_PROT) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_PROT)) *((u_int8*)(rec+fo.prot)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_TOS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_TOS)) *((u_int8*)(rec+fo.tos)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_TCP_FLAGS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_TCP_FLAGS)) *((u_int8*)(rec+fo.tcp_flags)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_SRC_MASK) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_SRC_MASK)) *((u_int8*)(rec+fo.src_mask)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_DST_MASK) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DST_MASK)) *((u_int8*)(rec+fo.dst_mask)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_SRC_AS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_SRC_AS)) *((u_int16*)(rec+fo.src_as)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_DST_AS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DST_AS)) *((u_int16*)(rec+fo.dst_as)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_IN_ENCAPS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_IN_ENCAPS)) *((u_int8*)(rec+fo.in_encaps)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_OUT_ENCAPS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_OUT_ENCAPS)) *((u_int8*)(rec+fo.out_encaps)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_PEER_NEXTHOP) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_PEER_NEXTHOP)) *((u_int32*)(rec+fo.peer_nexthop)) = scan_ip(field); } if (inmask & FT_XFIELD_ROUTER_SC) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_ROUTER_SC)) *((u_int32*)(rec+fo.router_sc)) = scan_ip(field); } if (inmask & FT_XFIELD_MARKED_TOS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_MARKED_TOS)) *((u_int8*)(rec+fo.marked_tos)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_EXTRA_PKTS) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_EXTRA_PKTS)) *((u_int32*)(rec+fo.extra_pkts)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_SRC_TAG) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_SRC_TAG)) *((u_int32*)(rec+fo.src_tag)) = strtoul(field, (char **)0L, 0); } if (inmask & FT_XFIELD_DST_TAG) { field = strsep(&inbufp, ","); if (field && (dmask & FT_XFIELD_DST_TAG)) *((u_int32*)(rec+fo.dst_tag)) = strtoul(field, (char **)0L, 0); } if (ftio_write(ftio, rec) < 0) { fterr_warnx("ftio_write(): failed"); goto done; } ++opt->records; } /* while */ done: return ret; } /* format2 */ /* * functio: format_NFCollector1 * * import from Cisco NFCollector v1 ascii files */ /* Break line into fields */ static int ascii_fields(char **fp,int maxfp,char *inbuf,const char *delim) { int n=0; while((*fp = strsep(&inbuf,delim)) != NULL && n < maxfp) { n++; fp++; } return ( n < maxfp ? n : 0 ); } /* Map NFCollector recordtypes to flow-tools datatypes */ typedef enum { TYPE_IPV4, TYPE_16B, TYPE_32B, TYPE_8B , TYPE_DISCARD, TYPE_LAST } cvt_t; struct for2nat_st { u_int64 mask; cvt_t type; int offset; }; struct nfcollector2flowtools { char *name; struct for2nat_st fcv[24]; }; struct nfcollector2flowtools NFC2ft[] = { { "AGGREGATION CallRecord", { { FT_XFIELD_SRCADDR, TYPE_IPV4, offsetof(struct fts3rec_offsets,srcaddr) }, { FT_XFIELD_DSTADDR, TYPE_IPV4, offsetof(struct fts3rec_offsets,dstaddr) }, { FT_XFIELD_SRCPORT, TYPE_16B, offsetof(struct fts3rec_offsets,srcport) }, { FT_XFIELD_DSTPORT, TYPE_16B, offsetof(struct fts3rec_offsets,dstport) }, { FT_XFIELD_PROT , TYPE_8B , offsetof(struct fts3rec_offsets,prot) }, { FT_XFIELD_TOS , TYPE_16B, offsetof(struct fts3rec_offsets,tos) }, { FT_XFIELD_DPKTS, TYPE_32B, offsetof(struct fts3rec_offsets,dPkts) }, { FT_XFIELD_DOCTETS, TYPE_32B, offsetof(struct fts3rec_offsets,dOctets) }, { FT_XFIELD_DFLOWS, TYPE_32B, offsetof(struct fts3rec_offsets,dFlows) }, /* We have pretty darn good uptime */ { FT_XFIELD_FIRST, TYPE_32B,offsetof(struct fts3rec_offsets,First) }, { FT_XFIELD_LAST , TYPE_32B, offsetof(struct fts3rec_offsets,Last) }, { 0, TYPE_DISCARD, 0 }, { 0, TYPE_LAST, 0 } } }, { "AGGREGATION HostMatrix", { { FT_XFIELD_SRCADDR, TYPE_IPV4, offsetof(struct fts3rec_offsets,srcaddr) }, { FT_XFIELD_DSTADDR, TYPE_IPV4, offsetof(struct fts3rec_offsets,dstaddr) }, { FT_XFIELD_DPKTS, TYPE_32B, offsetof(struct fts3rec_offsets,dPkts) }, { FT_XFIELD_DOCTETS, TYPE_32B, offsetof(struct fts3rec_offsets,dOctets) }, { FT_XFIELD_DFLOWS, TYPE_32B, offsetof(struct fts3rec_offsets,dFlows) }, { 0, TYPE_LAST, 0 } } }, { "AGGREGATION SourceNode", { { FT_XFIELD_SRCADDR, TYPE_IPV4, offsetof(struct fts3rec_offsets,srcaddr) }, { FT_XFIELD_DPKTS, TYPE_32B, offsetof(struct fts3rec_offsets,dPkts) }, { FT_XFIELD_DOCTETS, TYPE_32B, offsetof(struct fts3rec_offsets,dOctets) }, { FT_XFIELD_DFLOWS, TYPE_32B, offsetof(struct fts3rec_offsets,dFlows) }, { 0, TYPE_LAST } } }, { "AGGREGATION DestNode", { { FT_XFIELD_DSTADDR, TYPE_IPV4, offsetof(struct fts3rec_offsets,dstaddr) }, { FT_XFIELD_DPKTS, TYPE_32B, offsetof(struct fts3rec_offsets,dPkts) }, { FT_XFIELD_DOCTETS, TYPE_32B, offsetof(struct fts3rec_offsets,dOctets) }, { FT_XFIELD_DFLOWS, TYPE_32B, offsetof(struct fts3rec_offsets,dFlows) }, { 0, TYPE_LAST } } }, { NULL } }; int format_NFCollector1(struct ftio *ftio, struct options *opt) { struct for2nat_st *fcv; struct fts3rec_offsets fo; u_char buf[FT_IO_MAXREC]; char inbuf[1024]; char *rec; char *fields[20]; u_int64 dmask, imask; int ret; int debug=ftio_get_debug(ftio); rec = (char*)&buf; fts3rec_compute_offsets(&fo, &opt->ftv); dmask=0; if(opt->ftv.d_version == 8) dmask = ( opt->ftv.agg_method > 0 && opt->ftv.agg_method < sizeof(v8mask)-1 ? v8mask[opt->ftv.agg_method] : 0); else dmask = ( opt->ftv.d_version > 0 && opt->ftv.d_version < sizeof(vXmask)-1 ? vXmask[opt->ftv.d_version] : 0); if(!dmask) { fterr_warnx("unsupported export version"); return -1; } /* First line has format descriptor */ if(fgets(inbuf,sizeof(inbuf),stdin) == NULL) { fterr_warnx("No header"); return -1; } if(ascii_fields(fields,sizeof(fields),inbuf,"|") != 9) { /* XXX complain about unregocnized format */ fterr_warnx("Unregconized format line"); return -1; } if(strcmp("FORMAT A",fields[1]) != 0) { fterr_warnx("Unregocnized format \"%s\"",fields[1]); return -1; } fcv=NULL; for(ret=0;NFC2ft[ret].name != NULL;ret++) { if(strcmp(NFC2ft[ret].name,fields[2]) == 0) { fcv=(NFC2ft[ret].fcv); if(debug) fprintf(stderr,"Input format %s\n",fields[2]); break; } } if(fcv == NULL) { fterr_warnx("Unsupported aggrecation scheme \"%s\"",fields[2]); return -1; } /* Compute imask from conversion table */ imask=0; for(ret = 0; (fcv+ret)->type != TYPE_LAST; ret++) { imask = imask | (fcv+ret)->mask; } /* check compatibility of imask & dmask XXX */ if((imask & dmask) == 0) { fterr_warnx("Incompatible input and destination (no common fields)"); return -1; } ret = 1; while (!(feof(stdin))) { char **fp; u_int32 val=0; int off=0,n,i; if(fgets(inbuf,sizeof(inbuf),stdin) == NULL) continue; ++ret; n=ascii_fields(fields,sizeof(fields),inbuf,"|"); fp=fields; bzero(rec,sizeof(buf)); for(i=0;i < n && *fp;i++) { if(dmask & fcv[i].mask) { off=*(short *)(((char *)&(fo))+fcv[i].offset); switch(fcv[i].type) { case TYPE_32B: case TYPE_16B: case TYPE_8B: val = strtoul(*fp,(char **)0L,10); break; case TYPE_IPV4: val = scan_ip(*fp); /* Fall thru */ case TYPE_DISCARD: case TYPE_LAST: default: break; } switch(fcv[i].type) { case TYPE_16B: *((u_int16*)(rec+off)) = (u_int16)val; break; case TYPE_IPV4: case TYPE_32B: *((u_int32*)(rec+off)) = (u_int32)val; break; case TYPE_8B: *((u_int8*)(rec+off)) = (u_int8)val; case TYPE_DISCARD: case TYPE_LAST: break; /* Make sun Cpro happy */ } } fp++; } /* XXX Something sane here */ if(fp && fcv[i].type == TYPE_LAST) { if(ftio_write(ftio,rec) < 0) { fterr_warnx("ftio_write(): failed"); break; } ++opt->records; } else fterr_warnx("Broken record at line %d (not output)",ret); } return 1; } /* * function: format4 * * raw packet format */ int format4(struct ftio *ftio, struct options *opt) { struct ftpdu_header ftheader, ftheader2; struct ftpdu ftpdu; struct ftseq ftseq; size_t rlen, len; void (*xlate)(void *in_rec, void *out_rec); int ret, n, i, offset; char xl_rec[FT_IO_MAXREC], *out_rec; bzero (&ftpdu, sizeof ftpdu); bzero (&ftseq, sizeof ftseq); xlate = (void*)0L; while (!(feof(stdin))) { ret = -1; /* find out the PDU version and flow count */ if ((rlen = fread(&ftheader, sizeof (ftheader), 1, stdin) != 1)) goto done; /* copy to swap bytes */ bcopy(&ftheader, &ftheader2, sizeof ftheader); #if BYTE_ORDER == LITTLE_ENDIAN SWAPINT16(ftheader2.version); SWAPINT16(ftheader2.count); #endif /* LITTLE_ENDIAN */ switch (ftheader2.version) { case 1: len = ftheader2.count*sizeof(struct ftrec_v1); /* v1 does not have sequence# and engine* */ len -= 8; break; case 5: len = ftheader2.count*sizeof(struct ftrec_v5); break; case 6: len = ftheader2.count*sizeof(struct ftrec_v6); break; case 7: len = ftheader2.count*sizeof(struct ftrec_v7); break; case 8: switch (ftheader2.aggregation) { case 1: len = ftheader2.count*sizeof(struct ftrec_v8_1); break; case 2: len = ftheader2.count*sizeof(struct ftrec_v8_2); break; case 3: len = ftheader2.count*sizeof(struct ftrec_v8_3); break; case 4: len = ftheader2.count*sizeof(struct ftrec_v8_4); break; case 5: len = ftheader2.count*sizeof(struct ftrec_v8_5); break; case 6: len = ftheader2.count*sizeof(struct ftrec_v8_6); break; case 7: len = ftheader2.count*sizeof(struct ftrec_v8_7); break; case 8: len = ftheader2.count*sizeof(struct ftrec_v8_8); break; case 9: len = ftheader2.count*sizeof(struct ftrec_v8_9); break; case 10: len = ftheader2.count*sizeof(struct ftrec_v8_10); break; case 11: len = ftheader2.count*sizeof(struct ftrec_v8_11); break; case 12: len = ftheader2.count*sizeof(struct ftrec_v8_12); break; case 13: len = ftheader2.count*sizeof(struct ftrec_v8_13); break; case 14: len = ftheader2.count*sizeof(struct ftrec_v8_14); break; default: fterr_errx(1, "Unrecognized PDU version: %d aggregation %d.", ftheader2.version, ftheader2.aggregation); break; } /* switch */ break; default: fterr_errx(1, "Unrecognized PDU version: %d.", ftheader2.version); break; } /* switch */ ftpdu.bused = len + sizeof (ftheader); /* read in the rest of the PDU */ if ((rlen = fread(ftpdu.buf+sizeof (ftheader), len, 1, stdin) != 1)) { fterr_errx(1, "fread(): failed - expecting to read %d bytes.", len); goto done; } /* copy in the read header */ bcopy(&ftheader, &ftpdu.buf, sizeof (ftheader)); /* verify integrity, get version */ if (ftpdu_verify(&ftpdu) < 0) { fterr_warnx("ftpdu_verify(): failed."); goto done; } /* first flow or no configured destination? */ if (!opt->ftv.set) { bcopy(&ftpdu.ftv, &opt->ftv, sizeof ftpdu.ftv); opt->ftv.set = 1; } else { /* translation among v8 aggregation methods not possible */ if ((opt->ftv.d_version == 8) && ((opt->ftv.agg_method != ftpdu.ftv.agg_method) || (opt->ftv.agg_version != ftpdu.ftv.agg_version))) { fterr_errx(1, "Unexpected PDU: oagg=%d agg=%d over=%d ver=%d", opt->ftv.agg_method, ftpdu.ftv.agg_method, opt->ftv.agg_version, ftpdu.ftv.agg_version); } if (opt->ftv.d_version != ftpdu.ftv.d_version) xlate = ftrec_xlate_func(&ftpdu.ftv, &opt->ftv); } /* verify sequence # */ if (ftpdu_check_seq(&ftpdu, &ftseq) < 0) { fterr_warnx("ftpdu_seq_check(): expecting=%lu received=%lu lost=%lu", (u_long)ftseq.seq_exp, (u_long)ftseq.seq_rcv, (u_long)ftseq.seq_lost); } /* decode */ ftpdu.ftd.byte_order = opt->ftset.byte_order; n = fts3rec_pdu_decode(&ftpdu); /* update the exporter stats */ opt->records += n; /* write */ for (i = 0, offset = 0; i < ftpdu.ftd.count; ++i, offset += ftpdu.ftd.rec_size) { if (xlate) { xlate(ftpdu.ftd.buf+offset, &xl_rec); out_rec = (char*)&xl_rec; } else { out_rec = (char*)ftpdu.ftd.buf+offset; } if ((n = ftio_write(ftio, out_rec)) < 0) fterr_errx(1, "ftio_write(): failed"); } } /* while */ done: return ret; } /* format4 */ void usage(void) { fprintf(stderr, "Usage: flow-import [-h] [-b big|little] [-d debug_level] [-f format]\n"); fprintf(stderr, " [-m mask_fields] [-V pdu_version] [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-mask.c0000644000076600007660000001357407642622726012133 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-mask.c,v 1.4 2003/04/02 18:03:02 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; void usage(void); int main(int argc, char **argv) { struct ftio ftio_in, ftio_out; struct ftprof ftp; struct ftmask ftmask; struct ftmask_def *ftmd; struct ftver ftv_in, ftv_out; struct ftset ftset; struct fts3rec_offsets fo; char *rec; char *fname, *dname; u_int32 total_flows, cap_start, cap_end; u_int32 time_start, time_end; int i, keep_input_time; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv_in, sizeof ftv_in); bzero(&ftv_out, sizeof ftv_out); total_flows = 0; fname = FT_PATH_CFG_MASK; dname = "default"; keep_input_time = 0; /* defaults + no compression */ ftset_init(&ftset, 0); while ((i = getopt(argc, argv, "b:C:d:h?m:M:kz:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'm': /* mask file name */ fname = optarg; break; case 'M': /* mask definition name */ dname = optarg; break; case 'k': /* keep the start/end time from the input */ keep_input_time = 1; break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* initialize and load masks */ if (ftmask_load(&ftmask, fname)) fterr_errx(1, "ftmask_load(): failed"); if (!(ftmd = ftmask_def_find(&ftmask, dname))) fterr_errx(1, "ftmask_def_find(): failed"); /* input is stdin */ if (ftio_init(&ftio_in, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); /* output is stdout */ if (ftio_init(&ftio_out, 1, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* preserve start/end time from input stream? */ if (keep_input_time) { time_start = ftio_get_cap_start(&ftio_in); time_end = ftio_get_cap_end(&ftio_in); if (time_start && time_end) { ftio_set_preloaded(&ftio_out, 1); ftio_set_cap_time(&ftio_out, time_start, time_end); } } /* keep_input_time */ ftio_get_ver(&ftio_in, &ftv_in); ftv_in.s_version = FT_IO_SVERSION; if (!ftv_out.set) bcopy(&ftv_in, &ftv_out, sizeof ftv_in); /* set the version information in the io stream */ if (ftio_set_ver(&ftio_out, &ftv_out) < 0) fterr_errx(1, "ftio_set_ver(): failed"); ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); ftio_set_cap_time(&ftio_out, cap_start, cap_end); ftio_set_flows_count(&ftio_out, total_flows); if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); fts3rec_compute_offsets(&fo, &ftv_in); /* profile */ ftprof_start (&ftp); while ((rec = ftio_read(&ftio_in))) { ++total_flows; ftmask_def_eval(ftmd, rec, &fo); if (ftio_write(&ftio_out, rec) < 0) fterr_errx(1, "ftio_write(): failed"); } /* while */ if (ftio_close(&ftio_out) < 0) fterr_errx(1, "ftio_close(): failed"); if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); ftmask_free(&ftmask); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } return 0; } /* main */ void usage(void) { fprintf(stderr, "Usage: flow-mask [hk] [-b big|little] [-C comment]\n"); fprintf(stderr, " [-d debug_level] [-m mask_fname] [-M mask_definition]\n"); fprintf(stderr, " [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } flow-tools-0.68/src/flow-merge.c0000644000076600007660000003271107642622726012271 /* * Copyright (c) 2001 E. Larry Lidz * Portions Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-merge.c,v 1.9 2003/04/02 18:03:02 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" struct ftio_table { char *cur_entry; struct ftio ftio_data; }; int debug; int done; void usage(void); void sig_quit(int sig); int find_earliest(struct ftio_table ftio_entry[], int num_entries); int main(int argc, char **argv) { struct stat sb; struct ftio ftio_out; struct ftprof ftp; struct ftver ftv, ftv2; struct ftset ftset; struct ftfile_entries **fte; struct ftfile_entry *fty; struct ftio_table *ftio_array; int i, out_fd, out_fd_plain, in_fd, disable_mmap, in_fd_plain, sort; int j, ftio_entries, entry; int x, fd, flags, fte_entries; char *fname, *out_fname; u_int32 total_flows; u_int32 time_start, time_end, time_tmp; /* init fterr */ fterr_setid(argv[0]); /* profile */ ftprof_start (&ftp); bzero(&ftv, sizeof ftv); bzero(&ftv2, sizeof ftv2); /* defaults + no compression */ ftset_init(&ftset, 0); total_flows = 0; out_fd_plain = 0; out_fname = (char*)0L; out_fd = -1; time_start = -1; /* MAXINT */ time_end = 0; disable_mmap = 0; sort = 0; /* global sorting disabled by default */ fte_entries = 0; flags = FT_FILE_INIT | FT_FILE_SORT | FT_FILE_SKIPTMP; ftio_entries = 0; while ((i = getopt(argc, argv, "ab:C:d:gh?mo:i:z:")) != -1) switch (i) { case 'a': /* all files, even those with tmp */ flags &= ~FT_FILE_SKIPTMP; break; case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'g': /* global sort */ sort = 1; break; case 'm': /* disable mmap */ disable_mmap = 1; break; case 'o': /* output filename */ out_fname = optarg; break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ /* handle signals */ if (mysignal(SIGQUIT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGQUIT)"); if (mysignal(SIGHUP, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); if (mysignal(SIGINT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); if (mysignal(SIGTERM, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGTERM)"); /* if out_fname is not set, then use stdout */ if (out_fname) { if ((out_fd = open(out_fname, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1) fterr_err(1, "open(%s)", out_fname); if (fstat(out_fd, &sb) == -1) fterr_err(1, "fstat(%s)", out_fname); /* is this a plain file? */ if (S_ISREG(sb.st_mode)) out_fd_plain = 1; } else out_fd = 1; /* output to out_fd */ if (ftio_init(&ftio_out, out_fd, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); /* header must be full size on initial write */ if (out_fd_plain) { ftio_set_cap_time(&ftio_out, time_start, time_end); ftio_set_flows_count(&ftio_out, total_flows); } /* number of file lists */ fte_entries = argc - optind; /* always at least one entry */ if (fte_entries <= 0) fte_entries = 1; if (sort) fte_entries = 1; /* allocate space for ftfile_entries lists */ if (!(fte = (struct ftfile_entries**)malloc( sizeof (struct ftfile_entries*) * fte_entries))) { fterr_err(1, "malloc()"); } /* allocate each entry */ for (i = 0; i < fte_entries; ++i) { if (!(fte[i] = (struct ftfile_entries*)malloc( sizeof (struct ftfile_entries)))) { fterr_err(1, "malloc()"); } bzero(fte[i], sizeof (struct ftfile_entries)); } /* handle special case of stdin (no args) */ if (optind >= argc) { /* "" will be treated as stdin below */ if (ftfile_loadfile(fte[0], "", flags) < 0) fterr_errx(1, "ftfile_loadfile(%s)", ""); } for (i = optind, x = 0; i < argc; ++i) { fname = argv[i]; /* special case, stdin */ if ((fname[0] == '-') && (fname[1] == 0)) { /* "" will be treated as stdin below */ if (ftfile_loadfile(fte[x], "", flags) < 0) fterr_errx(1, "ftfile_loadfile(%s)", ""); goto skip1; } /* open current file */ if ((fd = open(fname, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", fname); continue; } /* stat current file */ if (fstat(fd, &sb) == -1) fterr_err(1, "fstat(%s)", fname); /* done */ close (fd); /* is this a plain file? */ if (S_ISREG(sb.st_mode)) { if (ftfile_loadfile(fte[x], fname, flags) < 0) fterr_errx(1, "ftfile_loadfile(%s)", fname); /* else is this a directory? */ } else if (S_ISDIR(sb.st_mode)) { if (ftfile_loaddir(fte[x], fname, flags) < 0) fterr_errx(1, "ftfile_loaddir(%s), fname"); } else { fterr_warnx("odd file, skipping: %s", fname); continue; } skip1: /* if not sorting, use next list (sorting requires one list) */ if (!sort) ++x; else /* else, the list is initialized, don't do it again */ flags &= ~FT_FILE_INIT; } /* foreach file on the command line */ /* dump list of files loaded */ if (debug > 5) { for (i = 0; i < fte_entries; ++i) { fterr_info(" i=%d", i); ftfile_dump(fte[i]); } } /* count total entries */ for (i = 0; i < fte_entries; ++i) { /* foreach file in the list */ FT_TAILQ_FOREACH(fty, &fte[i]->head, chain) { ftio_entries++; } } ftio_array = malloc(ftio_entries * sizeof(struct ftio_table)); bzero(ftio_array, ftio_entries * sizeof(struct ftio_table)); /* foreach list */ j = 0; for (i = 0; i < fte_entries; ++i) { /* foreach file in the list */ FT_TAILQ_FOREACH(fty, &fte[i]->head, chain) { /* stdin / real file? */ if (fty->name[0]) { in_fd_plain = 1; if ((in_fd = open(fty->name, O_RDONLY, 0)) == -1) { fterr_warn("open(%s)", fty->name); continue; } } else { in_fd_plain = 0; in_fd = 0; /* stdin */ } /* initialize ftio stream */ if (ftio_init(&ftio_array[j].ftio_data, in_fd, FT_IO_FLAG_READ | ((in_fd_plain && !disable_mmap) ? FT_IO_FLAG_MMAP : 0)) < 0) fterr_errx(1, "ftio_init(): failed"); /* ensure required fields */ if (ftio_check_xfield(&ftio_array[j].ftio_data, FT_XFIELD_UNIX_SECS|FT_XFIELD_UNIX_NSECS|FT_XFIELD_SYSUPTIME| FT_XFIELD_FIRST|FT_XFIELD_LAST)) fterr_errx(1, "Flow record missing required field."); /* get version from stream */ ftio_get_ver(&ftio_array[j].ftio_data, &ftv2); /* record smallest time */ time_tmp = ftio_get_cap_start(&ftio_array[j].ftio_data); if (time_tmp < time_start) time_start = time_tmp; /* record largest time */ time_tmp = ftio_get_cap_end(&ftio_array[j].ftio_data); if (time_tmp > time_end) time_end = time_tmp; /* first time through loop? */ if (!ftv.d_version) { /* * is this really the right thing to do here. Reading a v1 * stream gets handled by ftio_read(), but ftio_* leaves the * s_version at 1. */ ftv2.s_version = FT_IO_SVERSION; /* set the version information in the io stream */ if (ftio_set_ver(&ftio_out, &ftv2) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* save for later compare */ bcopy(&ftv2, &ftv, sizeof ftv); /* header first */ if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); } else { /* ensure previous version == current version */ if ((ftv.d_version != ftv2.d_version) || (ftv.agg_method != ftv2.agg_method)) fterr_errx(1, "data version or sub version changed!"); } /* get the next element into the cur_entry field */ /* this is so it can be compared in find_earliest */ ftio_array[j].cur_entry = ftio_read(&ftio_array[j].ftio_data); j++; } /* FOREACH filename in dir */ } /* foreach dir bundle */ while ((entry = find_earliest(ftio_array, ftio_entries)) >= 0) { /* copy the earliest entry in ftio_array */ if (ftio_write(&ftio_out, ftio_array[entry].cur_entry) < 0) fterr_errx(1, "ftio_write(): failed"); /* get the next element into the cur_entry field */ ftio_array[entry].cur_entry = ftio_read(&ftio_array[entry].ftio_data); ++total_flows; } for (i = 0; i < ftio_entries; i++) { /* done with input stream */ if (ftio_close(&ftio_array[i].ftio_data) < 0) fterr_errx(1, "ftio_close(): failed"); } /* * if the output file descriptor was a real file, re-write the * flow_header with the correct # of total flows */ if (out_fd_plain) { ftio_set_cap_time(&ftio_out, time_start, time_end); ftio_set_flows_count(&ftio_out, total_flows); ftio_set_streaming(&ftio_out, 0); if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); } /* out_fd_plain */ /* done with output stream */ if (ftio_close(&ftio_out) < 0) fterr_errx(1, "ftio_close(): failed"); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } /* free storage allocated to file list(s) */ if (fte_entries) { for (i = 0; i < fte_entries; ++i) { ftfile_free(fte[i]); free(fte[i]); } free(fte); } /* fte_entries */ return 0; } /* main */ int find_earliest(struct ftio_table ftio_entry[], int num_entries) { unsigned int i, earliest_offset; register struct timeval earliest_time; struct fts3rec_all cur; struct fttime ftt; int first; earliest_offset = -1; first = 0; for (i = 0; i < num_entries; i++) { /* already read all the entries in this file */ if (ftio_entry[i].cur_entry == NULL) continue; cur.unix_secs = ((u_int32*)(ftio_entry[i].cur_entry+ ftio_entry[i].ftio_data.fo.unix_secs)); cur.unix_nsecs = ((u_int32*)(ftio_entry[i].cur_entry+ ftio_entry[i].ftio_data.fo.unix_nsecs)); cur.sysUpTime = ((u_int32*)(ftio_entry[i].cur_entry+ ftio_entry[i].ftio_data.fo.sysUpTime)); cur.Last = ((u_int32*)(ftio_entry[i].cur_entry+ ftio_entry[i].ftio_data.fo.Last)); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); if (first == 0) { /* first entry is the earliest by default */ earliest_offset = i; earliest_time.tv_sec = ftt.secs; earliest_time.tv_usec = ftt.msecs; first = 1; } else { if ((ftt.secs < earliest_time.tv_sec) || (ftt.secs == earliest_time.tv_sec && (ftt.msecs < earliest_time.tv_usec))) { earliest_offset = i; earliest_time.tv_sec = ftt.secs; earliest_time.tv_usec = ftt.msecs; } } } return earliest_offset; } /* find_earliest */ void sig_quit(int sig) { done = 1; } /* sig_quit */ void usage(void) { fprintf(stderr, "Usage: flow-merge [-aghm] [-b big|little] [-C comment] [-d debug_level]\n"); fprintf(stderr, " [-o filename] [-z z_level] [file|directory ...]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-nfilter.c0000644000076600007660000001455007776322576012646 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-nfilter.c,v 1.7 2004/01/05 17:57:18 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; void usage(void); int main(int argc, char **argv) { struct ftio ftio_in, ftio_out; struct ftprof ftp; struct ftfil ftfil; struct ftfil_def *ftfd; struct ftver ftv_in, ftv_out; struct ftset ftset; struct fts3rec_offsets fo; struct ftvar ftvar; char *rec; char *fname, *dname; u_int32 total_flows, cap_start, cap_end; u_int32 time_start, time_end; int i, keep_input_time; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv_in, sizeof ftv_in); bzero(&ftv_out, sizeof ftv_out); bzero(&ftvar, sizeof ftvar); total_flows = 0; /* init var binding */ if (ftvar_new(&ftvar) < 0) fterr_errx(1, "ftvar_new(): failed"); fname = FT_PATH_CFG_FILTER; dname = "default"; keep_input_time = 0; /* defaults + no compression */ ftset_init(&ftset, 0); while ((i = getopt(argc, argv, "b:C:d:f:F:h?kv:z:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'f': /* filter file name */ fname = optarg; break; case 'F': /* filter definition name */ dname = optarg; break; case 'k': /* keep the start/end time from the input */ keep_input_time = 1; break; case 'v': /* variable */ if (ftvar_pset(&ftvar, optarg) < 0) fterr_errx(1, "ftvar_pset(%s): failed", optarg); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* initialize and load filters */ if (ftfil_load(&ftfil, &ftvar, fname)) fterr_errx(1, "ftfil_load(): failed"); if (!(ftfd = ftfil_def_find(&ftfil, dname))) fterr_errx(1, "ftfil_def_find(): failed"); /* input is stdin */ if (ftio_init(&ftio_in, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); /* output is stdout */ if (ftio_init(&ftio_out, 1, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* preserve start/end time from input stream? */ if (keep_input_time) { time_start = ftio_get_cap_start(&ftio_in); time_end = ftio_get_cap_end(&ftio_in); if (time_start && time_end) { ftio_set_preloaded(&ftio_out, 1); ftio_set_cap_time(&ftio_out, time_start, time_end); } } /* keep_input_time */ ftio_get_ver(&ftio_in, &ftv_in); if (ftfil_def_test_xfields(ftfd, ftrec_xfield(&ftv_in))) fterr_errx(1, "Filter references a field not in flow."); ftv_in.s_version = FT_IO_SVERSION; if (!ftv_out.set) bcopy(&ftv_in, &ftv_out, sizeof ftv_in); /* set the version information in the io stream */ if (ftio_set_ver(&ftio_out, &ftv_out) < 0) fterr_errx(1, "ftio_set_ver(): failed"); ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); ftio_set_cap_time(&ftio_out, cap_start, cap_end); ftio_set_flows_count(&ftio_out, total_flows); if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); fts3rec_compute_offsets(&fo, &ftv_in); /* profile */ ftprof_start (&ftp); while ((rec = ftio_read(&ftio_in))) { ++total_flows; if (ftfil_def_eval(ftfd, rec, &fo) == FT_FIL_MODE_DENY) continue; if (ftio_write(&ftio_out, rec) < 0) fterr_errx(1, "ftio_write(): failed"); } /* while */ if (ftio_close(&ftio_out) < 0) fterr_errx(1, "ftio_close(): failed"); if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); ftfil_free(&ftfil); ftvar_free(&ftvar); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } return 0; } /* main */ void usage(void) { fprintf(stderr, "Usage: flow-nfilter [hk] [-b big|little] [-C comment]\n"); fprintf(stderr, " [-d debug_level] [-f filter_fname] [-F filter_definition]\n"); fprintf(stderr, " [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } flow-tools-0.68/src/flow-print.c0000644000076600007660000021727707642622726012342 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-print.c,v 1.29 2003/04/02 18:03:02 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" struct jump { int (*where)(struct ftio *ftio, int options); }; int format0(struct ftio *ftio, int options); int format1(struct ftio *ftio, int options); int format2(struct ftio *ftio, int options); int format3(struct ftio *ftio, int options); int format4(struct ftio *ftio, int options); int format5(struct ftio *ftio, int options); int format6(struct ftio *ftio, int options); int format7(struct ftio *ftio, int options); int format8(struct ftio *ftio, int options); int format9(struct ftio *ftio, int options); int format10(struct ftio *ftio, int options); int format11(struct ftio *ftio, int options); int format12(struct ftio *ftio, int options); int format13(struct ftio *ftio, int options); int format14(struct ftio *ftio, int options); int format15(struct ftio *ftio, int options); int format16(struct ftio *ftio, int options); int format17(struct ftio *ftio, int options); int format18(struct ftio *ftio, int options); int format19(struct ftio *ftio, int options); int format20(struct ftio *ftio, int options); int format21(struct ftio *ftio, int options); int format22(struct ftio *ftio, int options); int format23(struct ftio *ftio, int options); int format24(struct ftio *ftio, int options); struct jump format[] = {{format0}, {format1}, {format2}, {format3}, {format4}, {format5}, {format6}, {format7}, {format8}, {format9}, {format10}, {format11}, {format12}, {format13}, {format14}, {format15}, {format16}, {format17}, {format18}, {format19}, {format20}, {format21}, {format22}, {format23}, {format24}}; #define NFORMATS 25 void usage(void); int main(argc, argv) int argc; char **argv; { struct ftio ftio; struct ftprof ftp; int i, format_index, set_format, ret; int print_header, options, debug; char cc; /* comment character */ /* init fterr */ fterr_setid(argv[0]); options = 0; debug = 0; /* profile */ ftprof_start (&ftp); set_format = 0; print_header = 0; cc = '#'; while ((i = getopt(argc, argv, "ph?d:f:c:lnw")) != -1) switch (i) { case 'c': /* comment character */ cc = optarg[0]; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'f': /* format */ format_index = atoi(optarg); set_format = 1; break; case 'h': /* help */ case '?': usage(); exit (0); break; case 'l': /* turn off buffered output */ options |= FT_OPT_NOBUF; break; case 'n': /* symbolic names */ options |= FT_OPT_NAMES; break; case 'p': /* print header */ print_header = 1; break; case 'w': /* wide */ options |= FT_OPT_WIDE; break; default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); if (set_format && (format_index >= NFORMATS)) fterr_errx(1, "No such format, %d\n", format_index); /* read from stdin */ if (ftio_init(&ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); /* if the format was not set on the command line use a reasonable default */ if (!set_format) { if (ftio.fth.d_version == 8) { if (ftio.fth.agg_method == 1) format_index = 10; else if (ftio.fth.agg_method == 2) format_index = 11; else if (ftio.fth.agg_method == 3) format_index = 12; else if (ftio.fth.agg_method == 4) format_index = 13; else if (ftio.fth.agg_method == 5) format_index = 14; else if (ftio.fth.agg_method == 6) format_index = 15; else if (ftio.fth.agg_method == 7) format_index = 16; else if (ftio.fth.agg_method == 8) format_index = 17; else if (ftio.fth.agg_method == 9) format_index = 18; else if (ftio.fth.agg_method == 10) format_index = 19; else if (ftio.fth.agg_method == 11) format_index = 20; else if (ftio.fth.agg_method == 12) format_index = 21; else if (ftio.fth.agg_method == 13) format_index = 22; else if (ftio.fth.agg_method == 14) format_index = 23; } else if (ftio.fth.d_version == 7) { format_index = 7; } else if (ftio.fth.d_version == 6) { format_index = 8; } else if (ftio.fth.d_version == 1005) { format_index = 9; } else format_index = 3; } /* !set_format */ if (print_header) { ftio_header_print(&ftio, stdout, cc); } ret = format[format_index].where(&ftio, options); if ((!ret) && (debug > 0)) { ftprof_end(&ftp, ftio_get_rec_total(&ftio)); ftprof_print(&ftp, argv[0], stderr); } return ret; } /* main */ /* * function: format0 * * 1 line summary */ int format0(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_PROT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_INPUT | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_OUTPUT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts("Sif SrcIPaddress Dif DstIPaddress Pr SrcP DstP Pkts Octets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); printf("%4.4x %-15.15s %4.4x %-15.15s %2.2x %-4x %-4x %-10lu %-10lu\n", (int)*cur.input, fmt_buf1, (int)*cur.output, fmt_buf2, (int)*cur.prot, (int)*cur.srcport, (int)*cur.dstport, (u_long)*cur.dPkts, (u_long)*cur.dOctets); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format0 */ /* * function: format1 * * 2 line summary */ int format1(struct ftio *ftio, int options) { struct fttime ftt; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; struct tm *tm; u_long active_secs, active_msecs; u_long bpp; char fmt_buf1[64], fmt_buf2[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_UNIX_SECS | FT_XFIELD_UNIX_NSECS | FT_XFIELD_SYSUPTIME | FT_XFIELD_TOS | FT_XFIELD_TCP_FLAGS | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts( "Sif SrcIPaddress DIf DstIPaddress Pr SrcP DstP Pkts Octets"); puts( " StartTime EndTime Active B/Pk Ts Fl\n"); while ((rec = ftio_read(ftio))) { cur.unix_secs = ((u_int32*)(rec+fo.unix_secs)); cur.unix_nsecs = ((u_int32*)(rec+fo.unix_nsecs)); cur.sysUpTime = ((u_int32*)(rec+fo.sysUpTime)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tcp_flags = ((u_int8*)(rec+fo.tcp_flags)); cur.tos = ((u_int8*)(rec+fo.tos)); if (!*cur.dPkts) { fprintf(stderr, "Ignoring bogus flow dPkts=0\n"); continue; } fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); printf("%4.4x %-15.15s %4.4x %-15.15s %2.2x %-4x %-4x %-10lu %-10lu\n", (int)*cur.input, fmt_buf1, (int)*cur.output, fmt_buf2, (int)*cur.prot, (int)*cur.srcport, (int)*cur.dstport, (u_long)*cur.dPkts, (u_long)*cur.dOctets); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); tm = localtime((time_t*)&ftt.secs); printf(" %-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); tm = localtime((time_t*)&ftt.secs); active_secs = (*cur.Last - *cur.First) / 1000; active_msecs = (*cur.Last - *cur.First) % 1000; bpp = *cur.dOctets / *cur.dPkts; printf("%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu %5lu.%-3.3lu %-3lu %2.2x %2.2x\n\n", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs, active_secs, active_msecs, bpp, (int)*cur.tos, (int)*cur.tcp_flags); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format1 */ /* * function: format2 * * only print flows that are TCP with only a SYN bit set and * a single packet */ int format2(struct ftio *ftio, int options) { struct tm *tm; struct fttime ftt; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64]; u_long active_secs, active_msecs; u_long bpp; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_UNIX_SECS | FT_XFIELD_UNIX_NSECS | FT_XFIELD_SYSUPTIME | FT_XFIELD_TOS | FT_XFIELD_TCP_FLAGS | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts("Sif SrcIPaddress DIf DstIPaddress Pr SrcP DstP Pkts Octets"); puts(" StartTime EndTime Active B/Pk Ts Fl\n"); while ((rec = ftio_read(ftio))) { cur.unix_secs = ((u_int32*)(rec+fo.unix_secs)); cur.unix_nsecs = ((u_int32*)(rec+fo.unix_nsecs)); cur.sysUpTime = ((u_int32*)(rec+fo.sysUpTime)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tcp_flags = ((u_int8*)(rec+fo.tcp_flags)); cur.tos = ((u_int8*)(rec+fo.tos)); if (!*cur.dPkts) { fprintf(stderr, "Ignoring bogus flow dPkts=0\n"); continue; } /* If it's not TCP */ if (*cur.prot != IPPROTO_TCP) continue; /* If more than the SYN bit is set */ if (*cur.tcp_flags != 2) continue; /* many SYN bit only packets per flow are suspect */ if (*cur.dPkts != 2) continue; /* 40 byte datagrams are the output of the current tool */ if (*cur.dOctets != (*cur.dPkts * 40)) continue; fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); printf("%2.2x %-15.15s %2.2x %-15.15s %2.2x %-4x %-4x %-10lu %-10lu\n", (int)*cur.input, fmt_buf1, (int)*cur.output, fmt_buf2, (int)*cur.prot, (int)*cur.srcport, (int)*cur.dstport, (u_long)*cur.dPkts, (u_long)*cur.dOctets); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); tm = localtime((time_t*)&ftt.secs); printf(" %-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); tm = localtime((time_t*)&ftt.secs); active_secs = (*cur.Last - *cur.First) / 1000; active_msecs = (*cur.Last - *cur.First) % 1000; bpp = *cur.dOctets / *cur.dPkts; printf("%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu %5lu.%-3.3lu %-3lu %2.2x %2.2x\n\n", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs, active_secs, active_msecs, bpp, (int)*cur.tos, (int)*cur.tcp_flags); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format2 */ /* * function: format3 * * another 1 line format */ int format3(struct ftio *ftio, int options) { struct ftsym *sym_tcp, *sym_prot; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64], fmt_buf5[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_tcp = sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } if (options & FT_OPT_WIDE) puts("srcIP dstIP prot srcPort dstPort octets packets"); else puts("srcIP dstIP prot srcPort dstPort octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); fmt_uint16s(sym_prot, 5, fmt_buf3, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf4, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf5, (u_int16)*cur.dstport, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) printf("%-15.15s %-15.15s %-5.5s %-16.16s %-16.16s %-10lu %-10lu\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, (u_long)*cur.dOctets, (u_long)*cur.dPkts); else printf("%-15.15s %-15.15s %-4.4s %-7.7s %-7.7s %-10lu %-10lu\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, (u_long)*cur.dOctets, (u_long)*cur.dPkts); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format3 */ /* * function: format4 * */ int format4(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; struct ftsym *sym_prot, *sym_asn; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64], fmt_buf5[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_AS | FT_XFIELD_DST_AS | FT_XFIELD_PROT | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_prot = sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts("Sif Dif srcIP dstIP prot srcAS dstAS octets packets"); else puts("srcIP dstIP prot srcAS dstAS octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); fmt_ipv4prefix(fmt_buf1, *cur.srcaddr, *cur.src_mask, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf2, *cur.dstaddr, *cur.dst_mask, FMT_JUST_LEFT); fmt_uint16s(sym_prot, 5, fmt_buf3, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint16s(sym_asn, 18, fmt_buf4, (u_int16)*cur.src_as, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf5, (u_int16)*cur.dst_as, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%4.4x %4.4x %-18.18s %-18.18s %-5.5s %-16.16s %-16.16s %-10lu %-10lu\n", (int)*cur.input, (int)*cur.output, fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, (u_long)*cur.dOctets, (u_long)*cur.dPkts); else printf("%-18.18s %-18.18s %-4.4s %-5.5s %-5.5s %-10lu %-10lu\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, (u_long)*cur.dOctets, (u_long)*cur.dPkts); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_prot); ftsym_free(sym_asn); return 0; } /* format4 */ /* * function: format5 * * 1 line summary, steve's favorite */ int format5(struct ftio *ftio, int options) { struct tm *tm; struct fttime ftt; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_UNIX_SECS | FT_XFIELD_UNIX_NSECS | FT_XFIELD_SYSUPTIME | FT_XFIELD_TCP_FLAGS | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts("Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets\n"); while ((rec = ftio_read(ftio))) { cur.unix_secs = ((u_int32*)(rec+fo.unix_secs)); cur.unix_nsecs = ((u_int32*)(rec+fo.unix_nsecs)); cur.sysUpTime = ((u_int32*)(rec+fo.sysUpTime)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tcp_flags = ((u_int8*)(rec+fo.tcp_flags)); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); tm = localtime((time_t*)&ftt.secs); printf("%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); tm = localtime((time_t*)&ftt.secs); printf("%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); /* other info */ fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); printf("%-5u %-15.15s %-5u %-5u %-15.15s %-5u %-3u %-2d %-10lu %-10lu\n", (u_int)*cur.input, fmt_buf1, (u_int)*cur.srcport, (u_int)*cur.output, fmt_buf2, (u_int)*cur.dstport, (u_int)*cur.prot, (u_int)*cur.tcp_flags & 0x7, (u_long)*cur.dPkts, (u_long)*cur.dOctets); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format5 */ /* * function: format6 * * 1 line summary, similar to `show ip accounting` */ int format6(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts( " Source Destination Packets Bytes"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); printf(" %-15.15s %-15.15s %17lu %18lu\n", fmt_buf1, fmt_buf2, (u_long)*cur.dPkts, (u_long)*cur.dOctets); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format6 */ /* * function: format7 * * 1 line, 132 column -- includes router_sc from v7 format */ int format7(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; struct ftsym *sym_tcp, *sym_prot; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64], fmt_buf5[64]; char fmt_buf6[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_PROT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK | FT_XFIELD_ROUTER_SC | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT )) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_tcp = sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } puts("srcIP dstIP router_sc prot srcPort dstPort octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.router_sc = ((u_int32*)(rec+fo.router_sc)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); fmt_ipv4prefix(fmt_buf1, *cur.srcaddr, *cur.src_mask, FMT_PAD_RIGHT); fmt_ipv4prefix(fmt_buf2, *cur.dstaddr, *cur.dst_mask, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf3, *cur.router_sc, FMT_PAD_RIGHT); fmt_uint16s(sym_prot, 5, fmt_buf4, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf5, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf6, (u_int16)*cur.dstport, FMT_PAD_RIGHT); printf("%-18.18s %-18.18s %-15.15s %-5.5s %-14.14s %-14.14s %-10lu %-10lu\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, (u_long)*cur.dOctets, (u_long)*cur.dPkts); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format7 */ /* * function: format8 * * 1 line, 132 column -- includes encapsulation size from v6 format */ int format8(struct ftio *ftio, int options) { struct ftsym *sym_tcp, *sym_prot; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64], fmt_buf5[64]; char fmt_buf6[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_PROT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK | FT_XFIELD_PEER_NEXTHOP | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_IN_ENCAPS | FT_XFIELD_OUT_ENCAPS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_tcp = sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } puts("srcIP dstIP peer_nexthop encap i/o prot srcPort dstPort octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.peer_nexthop = ((u_int32*)(rec+fo.peer_nexthop)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); cur.in_encaps = ((u_int8*)(rec+fo.in_encaps)); cur.out_encaps = ((u_int8*)(rec+fo.out_encaps)); fmt_ipv4prefix(fmt_buf1, *cur.srcaddr, *cur.src_mask, FMT_PAD_RIGHT); fmt_ipv4prefix(fmt_buf2, *cur.dstaddr, *cur.dst_mask, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf3, *cur.peer_nexthop, FMT_PAD_RIGHT); fmt_uint16s(sym_prot, 5, fmt_buf4, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf5, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf6, (u_int16)*cur.dstport, FMT_PAD_RIGHT); printf("%-18.18s %-18.18s %-15.15s %-4d %-4d %-5.5s %-14.14s %-14.14s %-10lu %-10lu\n", fmt_buf1, fmt_buf2, fmt_buf3, (int)*cur.in_encaps, (int)*cur.out_encaps, fmt_buf4, fmt_buf5, fmt_buf6, (u_long)*cur.dOctets, (u_long)*cur.dPkts); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format8 */ /* * 1 line, include src and dst tag */ int format9(struct ftio *ftio, int options) { struct ftsym *sym_tag; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64]; char *fmt_src, *fmt_dst; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_TAG | FT_XFIELD_DST_TAG | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } sym_tag = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tag = ftsym_new(FT_PATH_SYM_TAG); } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); if (options & FT_OPT_WIDE) puts("srcTag dstTag srcIP dstIP octets packets"); else puts("srcTag dstTag srcIP dstIP octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.src_tag = ((u_int32*)(rec+fo.src_tag)); cur.dst_tag = ((u_int32*)(rec+fo.dst_tag)); fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); sprintf(fmt_buf3, "0x%-8.8lx", (u_long)*cur.src_tag); sprintf(fmt_buf4, "0x%-8.8lx", (u_long)*cur.dst_tag); if (options & FT_OPT_NAMES) { if (ftsym_findbyval(sym_tag, (u_int32)*cur.src_tag, &fmt_src) != 1) { sprintf(fmt_buf3, "0x%-8.8lx", (u_long)*cur.src_tag); fmt_src = fmt_buf3; } if (ftsym_findbyval(sym_tag, (u_int32)*cur.dst_tag, &fmt_dst) != 1) { sprintf(fmt_buf4, "0x%-8.8lx", (u_long)*cur.dst_tag); fmt_dst = fmt_buf4; } } else { sprintf(fmt_buf3, "0x%-8.8lx", (u_long)*cur.src_tag); sprintf(fmt_buf4, "0x%-8.8lx", (u_long)*cur.dst_tag); fmt_src = fmt_buf3; fmt_dst = fmt_buf4; } if (options & FT_OPT_WIDE) printf("%-15.15s %-15.15s %-15.15s %-15.15s %-10lu %-10lu\n", fmt_src, fmt_dst, fmt_buf1, fmt_buf2, (u_long)*cur.dOctets, (u_long)*cur.dPkts); else printf("%-10.10s %-10.10s %-15.15s %-15.15s %-10lu %-10lu\n", fmt_src, fmt_dst, fmt_buf1, fmt_buf2, (u_long)*cur.dOctets, (u_long)*cur.dPkts); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_tag); return 0; } /* format9 */ /* * 8.1 AS aggregation */ int format10(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRC_AS | FT_XFIELD_DST_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts("srcAS dstAS in out flows octets packets duration"); else puts( "srcAS dstAS in out flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); fmt_uint16s(sym_asn, 18, fmt_buf1, (u_int16)*cur.src_as, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf2, (u_int16)*cur.dst_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf3, *cur.input, FMT_JUST_LEFT); fmt_uint16(fmt_buf4, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf5, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf( "%-16.16s %-16.16s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); else printf("%-5.5s %-5.5s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } ftsym_free(sym_asn); return 0; } /* format10 */ /* * 8.2 Protocol Port aggregation */ int format11(struct ftio *ftio, int options) { struct ftsym *sym_tcp, *sym_prot; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_tcp = sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } if (options & FT_OPT_WIDE) puts( "srcPort dstPort prot flows octets packets duration"); else puts( "srcPort dstPort prot flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); fmt_uint16s(sym_tcp, 16, fmt_buf1, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf2, (u_int16)*cur.dstport, FMT_PAD_RIGHT); fmt_uint16s(sym_prot, 5, fmt_buf3, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint32(fmt_buf4, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf5, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-16.16s %-16.16s %-5.5s %-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7); else printf("%-7.7s %-7.7s %-5.5s %-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7); if (options & FT_OPT_NOBUF) fflush(stdout); } ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format11 */ /* * 8.3 Source Prefix aggregation */ int format12(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf3[32], fmt_buf4[32], fmt_buf5[32]; char fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_SRCADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_SRC_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts( "srcPrefix srcAS input flows octets packets duration"); else puts( "src/mask srcAS input flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); fmt_ipv4prefix(fmt_buf1, *cur.srcaddr, *cur.src_mask, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf3, *cur.src_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf4, *cur.input, FMT_JUST_LEFT); fmt_uint32(fmt_buf5, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-18.18s %-16.16s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); else printf("%-18.18s %-5.5s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_asn); return 0; } /* format12 */ /* * 8.4 Destination Prefix aggregation */ int format13(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf3[32], fmt_buf4[32], fmt_buf5[32]; char fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_OUTPUT | FT_XFIELD_DSTADDR | FT_XFIELD_DST_MASK | FT_XFIELD_DST_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } sym_asn = (struct ftsym*)0L; ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts( "dstPrefix dstAS input flows octets packets duration"); else puts( "dst/mask dstAS input flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.output = ((u_int16*)(rec+fo.output)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); fmt_ipv4prefix(fmt_buf1, *cur.dstaddr, *cur.dst_mask, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf3, *cur.dst_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf4, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf5, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-18.18s %-16.16s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); else printf("%-18.18s %-5.5s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_asn); return 0; } /* format13 */ /* * 8.5 Prefix aggregation */ int format14(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char fmt_buf9[32], fmt_buf10[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK | FT_XFIELD_SRC_AS | FT_XFIELD_DST_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts( "srcPrefix srcAS dstPrefix dstAS input output flows octets packets duration"); else puts( "srcPrefix srcAS dstPrefix dstAS input output flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); fmt_ipv4prefix(fmt_buf1, *cur.srcaddr, *cur.src_mask, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf3, *cur.dstaddr, *cur.dst_mask, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf2, *cur.src_as, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf4, *cur.dst_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf5, *cur.input, FMT_JUST_LEFT); fmt_uint16(fmt_buf6, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf9, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf10, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-18.18s %-16.16s %-18.18s %-16.16s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10); else printf("%-18.18s %-5.5s %-18.18s %-5.5s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_asn); return 0; } /* format14 */ /* * function: format15 * * 1 line, 132 column for v8.6 */ int format15(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32], fmt_buf5[32]; char fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_DSTADDR | FT_XFIELD_OUTPUT | FT_XFIELD_ROUTER_SC | FT_XFIELD_EXTRA_PKTS | FT_XFIELD_TOS | FT_XFIELD_MARKED_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts("dstIP router_sc Dif ToS mToS xpackets octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.router_sc = ((u_int32*)(rec+fo.router_sc)); cur.output = ((u_int16*)(rec+fo.output)); cur.tos = ((u_int8*)(rec+fo.tos)); cur.marked_tos = ((u_int8*)(rec+fo.marked_tos)); cur.extra_pkts = ((u_int32*)(rec+fo.extra_pkts)); fmt_ipv4(fmt_buf1, *cur.dstaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.router_sc, FMT_PAD_RIGHT); fmt_uint16(fmt_buf3, *cur.output, FMT_PAD_RIGHT); fmt_uint8(fmt_buf4, *cur.tos, FMT_PAD_RIGHT); fmt_uint8(fmt_buf5, *cur.marked_tos, FMT_PAD_RIGHT); fmt_uint32(fmt_buf6, *cur.extra_pkts, FMT_PAD_RIGHT); fmt_uint32(fmt_buf7, *cur.dOctets, FMT_PAD_RIGHT); fmt_uint32(fmt_buf8, *cur.dPkts, FMT_PAD_RIGHT); printf("%-15.15s %-15.15s %-5.5s %-3.3s %-3.3s %-10.10s %-10.10s %-10.10s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format15 */ /* * function: format16 * * 1 line, 132 column for v8.7 */ int format16(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32], fmt_buf5[32]; char fmt_buf6[32], fmt_buf7[32], fmt_buf8[32], fmt_buf9[32], fmt_buf10[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_DSTADDR | FT_XFIELD_SRCADDR | FT_XFIELD_OUTPUT | FT_XFIELD_INPUT | FT_XFIELD_ROUTER_SC | FT_XFIELD_EXTRA_PKTS | FT_XFIELD_TOS | FT_XFIELD_MARKED_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts("srcIP dstIP router_sc Sif Dif ToS mToS xpackets octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.router_sc = ((u_int32*)(rec+fo.router_sc)); cur.output = ((u_int16*)(rec+fo.output)); cur.input = ((u_int16*)(rec+fo.input)); cur.tos = ((u_int8*)(rec+fo.tos)); cur.marked_tos = ((u_int8*)(rec+fo.marked_tos)); cur.extra_pkts = ((u_int32*)(rec+fo.extra_pkts)); fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf3, *cur.router_sc, FMT_PAD_RIGHT); fmt_uint16(fmt_buf4, *cur.input, FMT_PAD_RIGHT); fmt_uint16(fmt_buf5, *cur.output, FMT_PAD_RIGHT); fmt_uint8(fmt_buf6, *cur.tos, FMT_PAD_RIGHT); fmt_uint8(fmt_buf7, *cur.marked_tos, FMT_PAD_RIGHT); fmt_uint32(fmt_buf8, *cur.extra_pkts, FMT_PAD_RIGHT); fmt_uint32(fmt_buf9, *cur.dOctets, FMT_PAD_RIGHT); fmt_uint32(fmt_buf10, *cur.dPkts, FMT_PAD_RIGHT); printf("%-15.15s %-15.15s %-15.15s %-5.5s %-5.5s %-3.3s %-3.3s %-10.10s %-10.10s %-10.10s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format16 */ /* * function: format17 * * 1 line, 132 column for v8.8 */ int format17(struct ftio *ftio, int options) { struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; struct ftsym *sym_tcp, *sym_prot; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32], fmt_buf5[32]; char fmt_buf6[32], fmt_buf7[32], fmt_buf8[32], fmt_buf9[32], fmt_buf10[32]; char fmt_buf11[32], fmt_buf12[32], fmt_buf13[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_DSTADDR | FT_XFIELD_SRCADDR | FT_XFIELD_OUTPUT | FT_XFIELD_INPUT | FT_XFIELD_ROUTER_SC | FT_XFIELD_EXTRA_PKTS | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_PROT | FT_XFIELD_TOS | FT_XFIELD_MARKED_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } sym_tcp = sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); puts("srcIP dstIP router_sc Sif Dif SrcP DstP prot ToS mToS xpackets octets packets"); while ((rec = ftio_read(ftio))) { cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.router_sc = ((u_int32*)(rec+fo.router_sc)); cur.output = ((u_int16*)(rec+fo.output)); cur.input = ((u_int16*)(rec+fo.input)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.tos = ((u_int8*)(rec+fo.tos)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.marked_tos = ((u_int8*)(rec+fo.marked_tos)); cur.extra_pkts = ((u_int32*)(rec+fo.extra_pkts)); fmt_uint16s(sym_tcp, 5, fmt_buf6, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 5, fmt_buf7, (u_int16)*cur.dstport, FMT_PAD_RIGHT); fmt_uint16s(sym_prot, 5, fmt_buf8, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf3, *cur.router_sc, FMT_PAD_RIGHT); fmt_uint16(fmt_buf4, *cur.input, FMT_PAD_RIGHT); fmt_uint16(fmt_buf5, *cur.output, FMT_PAD_RIGHT); fmt_uint8(fmt_buf9, *cur.tos, FMT_PAD_RIGHT); fmt_uint8(fmt_buf10, *cur.marked_tos, FMT_PAD_RIGHT); fmt_uint32(fmt_buf11, *cur.extra_pkts, FMT_PAD_RIGHT); fmt_uint32(fmt_buf12, *cur.dOctets, FMT_PAD_RIGHT); fmt_uint32(fmt_buf13, *cur.dPkts, FMT_PAD_RIGHT); printf("%-15.15s %-15.15s %-15.15s %-5.5s %-5.5s %-5.5s %-5.5s %-3.3s %-3.3s %-3.3s %-10.10s %-10.10s %-10.10s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10, fmt_buf11, fmt_buf12, fmt_buf13); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format17 */ /* * 8.9 ToS AS aggregation */ int format18(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32], fmt_buf9[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRC_AS | FT_XFIELD_DST_AS | FT_XFIELD_TOS )) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts("ToS srcAS dstAS in out flows octets packets duration"); else puts( "ToS srcAS dstAS in out flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.tos = ((u_int8*)(rec+fo.tos)); fmt_uint8(fmt_buf1, *cur.tos, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf2, (u_int16)*cur.src_as, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf3, (u_int16)*cur.dst_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf4, *cur.input, FMT_JUST_LEFT); fmt_uint16(fmt_buf5, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf9, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf( "%-3.3s %-16.16s %-16.16s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9); else printf("%-3.3s %-5.5s %-5.5s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9); if (options & FT_OPT_NOBUF) fflush(stdout); } ftsym_free(sym_asn); return 0; } /* format18 */ /* * 8.10 ToS Protocol Port aggregation */ int format19(struct ftio *ftio, int options) { struct ftsym *sym_tcp, *sym_prot; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_PROT | FT_XFIELD_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_tcp = sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } if (options & FT_OPT_WIDE) puts( "ToS srcPort dstPort prot flows octets packets duration"); else puts( "ToS srcPort dstPort prot flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tos = ((u_int8*)(rec+fo.prot)); fmt_uint8(fmt_buf1, *cur.tos, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf2, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf3, (u_int16)*cur.dstport, FMT_PAD_RIGHT); fmt_uint16s(sym_prot, 5, fmt_buf4, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint32(fmt_buf5, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-3.3s %-16.16s %-16.16s %-5.5s %-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); else printf("%-3.3s %-7.7s %-7.7s %-5.5s %-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format19 */ /* * 8.11 ToS Source Prefix aggregation */ int format20(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_SRCADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_SRC_AS | FT_XFIELD_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts( "ToS srcPrefix srcAS input flows octets packets duration"); else puts( "ToS srcPrefix srcAS input flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.tos = ((u_int8*)(rec+fo.tos)); fmt_uint8(fmt_buf1, *cur.tos, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf2, *cur.srcaddr, *cur.src_mask, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf3, *cur.src_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf4, *cur.input, FMT_JUST_LEFT); fmt_uint32(fmt_buf5, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-3.3s %-18.18s %-16.16s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); else printf("%-3.3s %-18.18s %-5.5s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_asn); return 0; } /* format20 */ /* * 8.12 ToS Destination Prefix aggregation */ int format21(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_OUTPUT | FT_XFIELD_DSTADDR | FT_XFIELD_DST_MASK | FT_XFIELD_DST_AS | FT_XFIELD_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } sym_asn = (struct ftsym*)0L; ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts( "ToS dstPrefix dstAS input flows octets packets duration"); else puts( "ToS dst/mask dstAS input flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.output = ((u_int16*)(rec+fo.output)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); cur.tos = ((u_int8*)(rec+fo.tos)); fmt_uint8(fmt_buf1, *cur.tos, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf2, *cur.dstaddr, *cur.dst_mask, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf3, *cur.dst_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf4, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf5, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf6, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf7, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-3.3s %-18.18s %-16.16s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); else printf("%-3.3s %-18.18s %-5.5s %-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_asn); return 0; } /* format21 */ /* * 8.13 ToS Prefix aggregation */ int format22(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char fmt_buf9[32], fmt_buf10[32], fmt_buf11[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK | FT_XFIELD_SRC_AS | FT_XFIELD_DST_AS | FT_XFIELD_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } if (options & FT_OPT_WIDE) puts( "ToS srcPrefix srcAS dstPrefix dstAS input output flows octets packets duration"); else puts( "ToS srcPrefix srcAS dstPrefix dstAS input output flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); cur.tos = ((u_int8*)(rec+fo.tos)); fmt_uint8(fmt_buf1, *cur.tos, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf2, *cur.srcaddr, *cur.src_mask, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf3, *cur.dstaddr, *cur.dst_mask, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf4, *cur.src_as, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf5, *cur.dst_as, FMT_JUST_LEFT); fmt_uint16(fmt_buf6, *cur.input, FMT_JUST_LEFT); fmt_uint16(fmt_buf7, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf8, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf9, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf10, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf11, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-3.3s %-18.18s %-16.16s %-18.18s %-16.16s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10, fmt_buf11); else printf("%-3.3s %-18.18s %-5.5s %-18.18s %-5.5s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10, fmt_buf11); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_asn); return 0; } /* format22 */ /* * 8.14 ToS Port Prefix aggregation */ int format23(struct ftio *ftio, int options) { struct ftsym *sym_tcp, *sym_prot; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; char fmt_buf1[32], fmt_buf2[32], fmt_buf3[32], fmt_buf4[32]; char fmt_buf5[32], fmt_buf6[32], fmt_buf7[32], fmt_buf8[32]; char fmt_buf9[32], fmt_buf10[32], fmt_buf11[32], fmt_buf12[32]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DFLOWS | FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK | FT_XFIELD_TOS | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_tcp = (struct ftsym*)0L; sym_prot = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_tcp = ftsym_new(FT_PATH_SYM_TCP_PORT); sym_prot = ftsym_new(FT_PATH_SYM_IP_PROT); } if (options & FT_OPT_WIDE) puts( "ToS srcPrefix dstPrefix Pr SrcP DstP input output flows octets packets duration"); else puts( "ToS srcPrefix dstPrefix Pr SrcP DstP input output flows octets packets duration"); while ((rec = ftio_read(ftio))) { cur.dFlows = ((u_int32*)(rec+fo.dFlows)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.src_mask = ((u_int8*)(rec+fo.src_mask)); cur.dst_mask = ((u_int8*)(rec+fo.dst_mask)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tos = ((u_int8*)(rec+fo.tos)); fmt_uint8(fmt_buf1, *cur.tos, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf2, *cur.srcaddr, *cur.src_mask, FMT_JUST_LEFT); fmt_ipv4prefix(fmt_buf3, *cur.dstaddr, *cur.dst_mask, FMT_JUST_LEFT); fmt_uint16s(sym_prot, 5, fmt_buf4, (u_int16)*cur.prot, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf5, (u_int16)*cur.srcport, FMT_PAD_RIGHT); fmt_uint16s(sym_tcp, 16, fmt_buf6, (u_int16)*cur.dstport, FMT_PAD_RIGHT); fmt_uint16(fmt_buf7, *cur.input, FMT_JUST_LEFT); fmt_uint16(fmt_buf8, *cur.output, FMT_JUST_LEFT); fmt_uint32(fmt_buf9, *cur.dFlows, FMT_JUST_LEFT); fmt_uint32(fmt_buf10, *cur.dOctets, FMT_JUST_LEFT); fmt_uint32(fmt_buf11, *cur.dPkts, FMT_JUST_LEFT); fmt_uint32(fmt_buf12, *cur.Last - *cur.First, FMT_JUST_LEFT); if (options & FT_OPT_WIDE) printf("%-3.3s %-18.18s %-18.18s %-5.5s %-16.16s %-16.16s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10, fmt_buf11, fmt_buf12); else printf("%-3.3s %-18.18s %-18.18s %-3.3s %-5.5s %-5.5s %-7.7s%-7.7s%-12.12s%-12.12s%-12.12s%-12.12s\n", fmt_buf1, fmt_buf2, fmt_buf3, fmt_buf4, fmt_buf5, fmt_buf6, fmt_buf7, fmt_buf8, fmt_buf9, fmt_buf10, fmt_buf11, fmt_buf12); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ ftsym_free(sym_tcp); ftsym_free(sym_prot); return 0; } /* format23 */ /* * function: format24 * * machine-parsable 1-line-format with nearly all data */ int format24(struct ftio *ftio, int options) { struct ftsym *sym_asn; struct fttime ftt; struct fts3rec_all cur; struct fts3rec_offsets fo; struct ftver ftv; struct tm *tm; u_long active_secs, active_msecs; u_long bpp; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64], fmt_buf5[64], fmt_buf6[64]; char *rec; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | FT_XFIELD_OUTPUT | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT | FT_XFIELD_UNIX_SECS | FT_XFIELD_UNIX_NSECS | FT_XFIELD_SYSUPTIME | FT_XFIELD_EXADDR | FT_XFIELD_ROUTER_SC | FT_XFIELD_TOS | FT_XFIELD_TCP_FLAGS | FT_XFIELD_PROT | FT_XFIELD_SRC_AS | FT_XFIELD_DST_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } ftio_get_ver(ftio, &ftv); fts3rec_compute_offsets(&fo, &ftv); sym_asn = (struct ftsym*)0L; if (options & FT_OPT_NAMES) { sym_asn = ftsym_new(FT_PATH_SYM_ASN); } puts( "#Sif SrcIPaddress DIf DstIPaddress Pr SrcP DstP Pkts Octets StartDate StartTime EndDate EndTime ExporterAddr RouterSrc Active B/Pk Ts Fl SrcAS DstAS\n"); while ((rec = ftio_read(ftio))) { cur.unix_secs = ((u_int32*)(rec+fo.unix_secs)); cur.unix_nsecs = ((u_int32*)(rec+fo.unix_nsecs)); cur.sysUpTime = ((u_int32*)(rec+fo.sysUpTime)); cur.dOctets = ((u_int32*)(rec+fo.dOctets)); cur.dPkts = ((u_int32*)(rec+fo.dPkts)); cur.First = ((u_int32*)(rec+fo.First)); cur.Last = ((u_int32*)(rec+fo.Last)); cur.srcaddr = ((u_int32*)(rec+fo.srcaddr)); cur.dstaddr = ((u_int32*)(rec+fo.dstaddr)); cur.exaddr = ((u_int32*)(rec+fo.exaddr)); cur.router_sc = ((u_int32*)(rec+fo.router_sc)); cur.input = ((u_int16*)(rec+fo.input)); cur.output = ((u_int16*)(rec+fo.output)); cur.srcport = ((u_int16*)(rec+fo.srcport)); cur.dstport = ((u_int16*)(rec+fo.dstport)); cur.prot = ((u_int8*)(rec+fo.prot)); cur.tcp_flags = ((u_int8*)(rec+fo.tcp_flags)); cur.tos = ((u_int8*)(rec+fo.tos)); cur.src_as = ((u_int16*)(rec+fo.src_as)); cur.dst_as = ((u_int16*)(rec+fo.dst_as)); if (!*cur.dPkts) { fprintf(stderr, "Ignoring bogus flow dPkts=0\n"); continue; } fmt_ipv4(fmt_buf1, *cur.srcaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf2, *cur.dstaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf5, *cur.exaddr, FMT_PAD_RIGHT); fmt_ipv4(fmt_buf6, *cur.router_sc, FMT_PAD_RIGHT); fmt_uint16s(sym_asn, 18, fmt_buf3, *cur.src_as, FMT_JUST_LEFT); fmt_uint16s(sym_asn, 18, fmt_buf4, *cur.dst_as, FMT_JUST_LEFT); printf("%4.4x %-15.15s %4.4x %-15.15s %2.2x %-5u %-5u %-10lu %-10lu ", (int)*cur.input, fmt_buf1, (int)*cur.output, fmt_buf2, (int)*cur.prot, (int)*cur.srcport, (int)*cur.dstport, (u_long)*cur.dPkts, (u_long)*cur.dOctets); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); tm = localtime((time_t*)&ftt.secs); printf(" %-4.4d-%-2.2d-%-2.2d %-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); tm = localtime((time_t*)&ftt.secs); active_secs = (*cur.Last - *cur.First) / 1000; active_msecs = (*cur.Last - *cur.First) % 1000; bpp = *cur.dOctets / *cur.dPkts; printf("%-4.4d-%-2.2d-%-2.2d %-2.2d:%-2.2d:%-2.2d.%-3.3lu %-15.15s %-15.15s %5lu.%-3.3lu %-4lu %2.2x %2.2x", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs, fmt_buf5, fmt_buf6, active_secs, active_msecs, bpp, (int)*cur.tos, (int)*cur.tcp_flags); printf(" %-5.5s %-5.5s\n", fmt_buf3, fmt_buf4); if (options & FT_OPT_NOBUF) fflush(stdout); } /* while */ return 0; } /* format24 */ void usage(void) { fprintf(stderr, "Usage: flow-print [-hlnpw] [-d debug_level] [-f format]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-receive.c0000644000076600007660000004727210240154307012603 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-receive.c,v 1.54 2005/05/10 15:52:39 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; int done; void usage(void); void sig_quit(int); #define SELECT_TIMEOUT 1 /* 1 second */ int main(int argc, char **argv) { #ifdef IP_ADD_MEMBERSHIP struct sockaddr_in tmp_addr; struct ip_mreq mr; #ifdef IP_ADD_SOURCE_MEMBERSHIP struct ip_mreq_source mrs; #endif #endif struct timeval tv; struct tm *tm; struct stat stat_buf; struct ftio ftio; struct ftset ftset; struct ftpdu ftpdu; struct ftnet ftnet; struct ftpeeri ftpi; struct ftver ftv; struct ftchash *ftch; struct ftchash_rec_exp ftch_recexp, *ftch_recexpp; struct fts3rec_offsets fo; time_t now, time_startup; int i, n, offset, out_fd, out_fd_plain, one; unsigned int v1, v2; fd_set rfd; char *out_fname; u_int32 nflows, time_start, time_end; u_int32 flows_corrupt, flows_lost, flows_reset; u_int32 hash; char fmt_src_ip[32], fmt_dst_ip[32], fmt_dst_port[32]; char xl_rec[FT_IO_MAXREC], *out_rec; int stat_interval, stat_next; time_startup = time((time_t)0L); out_fname = (char*)0L; nflows = 0; out_fd_plain = 0; out_fd = -1; ftset.z_level = 0; done = 0; bzero(&tv, sizeof tv); bzero(&ftnet, sizeof ftnet); bzero(&ftv, sizeof ftv); bzero(&ftpdu, sizeof ftpdu); bzero(&ftch_recexp, sizeof ftch_recexp); flows_corrupt = flows_lost = flows_reset = 0; stat_interval = 0; stat_next = -1; /* init fterr */ fterr_setid(argv[0]); /* defaults + no compression */ ftset_init(&ftset, 0); /* listen for PDU's */ ftnet.loc_addr.sin_family = AF_INET; ftnet.loc_addr.sin_addr.s_addr = htonl(INADDR_ANY); ftnet.loc_addr.sin_port = htons(FT_PORT); while ((i = getopt(argc, argv, "b:C:d:h?o:S:V:z:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'h': /* help */ case '?': usage(); exit (0); break; case 'o': /* output filename */ out_fname = optarg; break; case 'S': /* stat interval */ stat_interval = atoi(optarg); if ((stat_interval < 0) || (stat_interval > 60)) fterr_errx(1, "Stat interval must be between 0 and 60."); break; case 'V': /* PDU version */ n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.set = 1; } else if (n == 2) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.agg_method = v2; ftv.agg_version = 2; ftv.set = 1; } else fterr_errx(1, "Version scan failed"); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; default: usage(); exit (1); break; } /* switch */ /* number of unprocessed options */ n = argc - optind; /* loc_ip/rem_ip/port */ if (n == 1) { ftpi = scan_peeri(argv[optind]); ftnet.rem_ip = ftpi.rem_ip; ftnet.loc_ip = ftpi.loc_ip; if (ftpi.dst_port) ftnet.dst_port = ftpi.dst_port; else ftnet.dst_port = FT_PORT; ftnet.loc_addr.sin_addr.s_addr = htonl(ftpi.loc_ip); ftnet.loc_addr.sin_port = htons(ftnet.dst_port); } else if (n == 0) { /* defaults */ } else { fterr_errx(1, "Illegal option: %s", argv[optind+1]); } /* * configure signal handlers */ if (mysignal(SIGQUIT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGQUIT)"); if (mysignal(SIGHUP, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGHUP)"); if (mysignal(SIGINT, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGINT)"); if (mysignal(SIGTERM, sig_quit) == SIG_ERR) fterr_err(1, "signal(SIGTERM)"); /* get hostname */ if (gethostname((char*)&ftset.hnbuf, (int)FT_HOSTNAME_LEN-1) == -1) fterr_err(1, "gethostname()"); ftset.hnbuf[FT_HOSTNAME_LEN-1] = 0; if ((ftnet.fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) fterr_err(1, "socket()"); if (bigsockbuf(ftnet.fd, SO_RCVBUF, FT_SO_RCV_BUFSIZE) < 0) fterr_err(1, "bigsockbuf()"); /* multicast capable? */ #ifdef IP_ADD_MEMBERSHIP if (IN_CLASSD(ftpi.rem_ip)) { /* source is the first arg now */ ftnet.rem_ip = ftpi.loc_ip; ftnet.loc_ip = ftpi.rem_ip; /* socket API usually requires INADDR_ANY * and s/g/port identifier does not have a source interface field * to use here */ bzero(&tmp_addr, sizeof tmp_addr); tmp_addr.sin_family = AF_INET; tmp_addr.sin_port = htons(ftnet.dst_port); one = 1; /* Multicast streams may have multiple receivers */ if (setsockopt(ftnet.fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(SO_REUSEADDR)"); if (bind(ftnet.fd, (struct sockaddr*)&tmp_addr, sizeof(struct sockaddr)) < 0) fterr_err(1, "bind(mcast-rcv)"); #ifdef IP_ADD_SOURCE_MEMBERSHIP /* ssm address? */ if (IN_CLASSD_SSM(ftpi.rem_ip)) { mrs.imr_sourceaddr.s_addr = htonl(ftpi.loc_ip); mrs.imr_multiaddr.s_addr = htonl(ftpi.rem_ip); mrs.imr_interface.s_addr = INADDR_ANY; if (setsockopt(ftnet.fd, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, (char*)&mrs, sizeof(mrs)) < 0) fterr_err(1, "setsockopt(IP_ADD_SOURCE_MEMBERSHIP)"); } goto mcast_done; #endif /* IP_ADD_SOURCE_MEMBERSHIP */ mr.imr_multiaddr.s_addr = htonl(ftpi.rem_ip); mr.imr_interface.s_addr = INADDR_ANY; if (setsockopt(ftnet.fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mr, sizeof(mr)) < 0) fterr_err(1, "setsockopt(IP_ADD_MEMBERSHIP)"); } else { /* is a multicast group */ /* unicast bind -- multicast support */ if (bind(ftnet.fd, (struct sockaddr*)&ftnet.loc_addr, sizeof(ftnet.loc_addr)) < 0) fterr_err(1, "bind()"); } /* not multicast group */ #ifdef IP_ADD_SOURCE_MEMBERSHIP mcast_done: #endif /* IP_ADD_SOURCE_MEMBERSHIP */ #else /* IP_ADD_MEMBERSHIP */ /* unicast bind -- no multicast support */ if (bind(ftnet.fd, (struct sockaddr*)&ftnet.loc_addr, sizeof(ftnet.loc_addr)) < 0) fterr_err(1, "bind()"); #endif /* IP_ADD_MEMBERSHIP */ #ifdef IP_RECVDSTADDR one = 1; /* return the destination IP address */ if (setsockopt(ftnet.fd, IPPROTO_IP, IP_RECVDSTADDR, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(IP_RECVDSTADDR)"); #else #ifdef IP_PKTINFO one = 1; /* return the destination IP address */ if (setsockopt(ftnet.fd, IPPROTO_IP, IP_PKTINFO, (char *)&one, sizeof(one)) < 0) fterr_err(1, "setsockopt(IP_PKTINFO)"); #endif /* else */ #endif /* IP_RECVDSTADDR */ /* if out_fname is not set, then use stdout */ if (out_fname) { if ((out_fd = open(out_fname, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1) fterr_err(1, "open(%s)", out_fname); if (fstat(out_fd, &stat_buf) == -1) fterr_err(1, "fstat(%s)", out_fname); /* is this a plain file? */ if (!stat_buf.st_rdev) out_fd_plain = 1; } else out_fd = 1; /* output to out_fd */ if (ftio_init(&ftio, out_fd, FT_IO_FLAG_NO_SWAP | FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); time_start = (u_int32)time((time_t)0L); ftio_set_comment(&ftio, ftset.comments); ftio_set_cap_hostname(&ftio, ftset.hnbuf); ftio_set_byte_order(&ftio, ftset.byte_order); ftio_set_z_level(&ftio, ftset.z_level); if (out_fd_plain) ftio_set_cap_time(&ftio, time_start, 0); else ftio_set_cap_time_start(&ftio, time_start); ftio_set_debug(&ftio, debug); ftio_set_streaming(&ftio, 1); /* ftio_map_load(&ftio, FT_FILE_MAP, ftnet.rem_ip); */ /* header must be full size on initial write */ if (out_fd_plain) { ftio_set_flows_count(&ftio, nflows); ftio_set_corrupt(&ftio, flows_corrupt); ftio_set_lost(&ftio, flows_lost); ftio_set_reset(&ftio, flows_reset); ftio_set_flows_count(&ftio, nflows); } /* if version set on command line, write out header here */ if (ftv.set) { if (ftio_set_ver(&ftio, &ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* need offsets for filter later */ fts3rec_compute_offsets(&fo, &ftv); /* header first */ if (ftio_write_header(&ftio) < 0) fterr_errx(1, "ftio_write_header()"); } /* init hash table for demuxing exporters */ if (!(ftch = ftchash_new(256, sizeof (struct ftchash_rec_exp), 12, 1))) fterr_errx(1, "ftchash_new(): failed"); /* init msg block */ ftnet.iov[0].iov_len = sizeof ftpdu.buf; ftnet.iov[0].iov_base = (char*)&ftpdu.buf; ftnet.msg.msg_iov = (struct iovec*)&ftnet.iov; ftnet.msg.msg_iovlen = 1; ftnet.msg.msg_name = &ftnet.rem_addr; ftnet.msg.msg_namelen = sizeof ftnet.rem_addr; ftnet.msg.msg_control = &ftnet.msgip; ftnet.msg.msg_controllen = sizeof ftnet.msgip; /* default timeout waiting for an active fd */ tv.tv_sec = SELECT_TIMEOUT; while (1) { FD_ZERO (&rfd); FD_SET (ftnet.fd, &rfd); if (select (ftnet.fd+1, &rfd, (fd_set *)0, (fd_set *)0, &tv) < 0) { if (errno == EINTR) { FD_ZERO (&rfd); } else { fterr_err(1, "select()"); } } now = time((time_t)0L); /* reset */ bzero (&tv, sizeof tv); tv.tv_sec = SELECT_TIMEOUT; if (stat_interval) { tm = localtime (&now); /* * note there is an obscure race condition here if this * code is not reached at least every stat_interval*60 seconds * where up to 1 hour of STAT lines would not show up. * This is highly unlikely and not handled. */ if ((tm->tm_min == stat_next) || (stat_next == -1)) { ftchash_first(ftch); while ((ftch_recexpp = ftchash_foreach(ftch))) { fmt_ipv4(fmt_src_ip, ftch_recexpp->src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexpp->dst_ip, FMT_JUST_LEFT); fterr_info( "STAT: now=%lu startup=%lu src_ip=%s dst_ip=%s d_ver=%d pkts=%lu flows=%lu lost=%lu reset=%lu", (unsigned long)now, (unsigned long)time_startup, fmt_src_ip, fmt_dst_ip, ftch_recexpp->d_version, (u_long)ftch_recexpp->packets, (u_long)ftch_recexpp->flows, (u_long)ftch_recexpp->lost, (u_long)ftch_recexpp->reset); } stat_next = (tm->tm_min + (stat_interval - tm->tm_min % stat_interval)) % 60; } } /* stat_inverval */ if (done) { fterr_info("Cleaning up"); break; } if (FD_ISSET(ftnet.fd, &rfd)) { restart_recvmsg: if ((ftpdu.bused = recvmsg(ftnet.fd, (struct msghdr*)&ftnet.msg, 0)) < 0) { if (errno == EAGAIN) goto restart_recvmsg; fterr_err(1, "recvmsg()"); } #ifdef IP_RECVDSTADDR /* got destination IP back? */ if ((ftnet.msgip.hdr.cmsg_level == IPPROTO_IP) && (ftnet.msgip.hdr.cmsg_type == IP_RECVDSTADDR)) { ftnet.loc_addr.sin_addr.s_addr = ftnet.msgip.ip.s_addr; } else { ftnet.loc_addr.sin_addr.s_addr = 0; } #else #ifdef IP_PKTINFO if ((ftnet.msgip.hdr.cmsg_level == IPPROTO_IP) && (ftnet.msgip.hdr.cmsg_type == IP_PKTINFO)) { ftnet.loc_addr.sin_addr.s_addr = ftnet.msgip.pktinfo.ipi_addr.s_addr; } else { ftnet.loc_addr.sin_addr.s_addr = 0; } #else ftnet.loc_addr.sin_addr.s_addr = 0; #endif #endif /* IP_RECVDSTADDR */ /* fill in hash key */ ftch_recexp.src_ip = htonl(ftnet.rem_addr.sin_addr.s_addr); ftch_recexp.dst_ip = htonl(ftnet.loc_addr.sin_addr.s_addr); ftch_recexp.dst_port = ftnet.dst_port; /* verify integrity, get version */ if (ftpdu_verify(&ftpdu) < 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fterr_warnx("ftpdu_verify(): src_ip=%s failed.", fmt_src_ip); flows_corrupt ++; goto skip1; } /* rest of hash key */ ftch_recexp.d_version = ftpdu.ftv.d_version; /* if exporter src IP has been configured then make sure it matches */ if (ftnet.rem_ip && (ftnet.rem_ip != ftch_recexp.src_ip)) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fterr_warnx("Unexpected PDU: src_ip=%s not configured", fmt_src_ip); flows_corrupt ++; goto skip1; } /* first flow or no configured destination version? */ if (!ftv.set) { /* set the version information in the io stream */ if (ftio_set_ver(&ftio, &ftpdu.ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); /* copy to compare next time */ bcopy(&ftpdu.ftv, &ftv, sizeof ftv); /* flag struct as configured */ ftv.set = 1; /* need offsets for filter later */ fts3rec_compute_offsets(&fo, &ftv); /* header first */ if (ftio_write_header(&ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); } else { /* translation to/from v8 not possible */ if (((ftv.d_version == 8) && (ftpdu.ftv.d_version != 8)) || ((ftv.d_version != 8) && (ftpdu.ftv.d_version == 8))) { fmt_ipv4(fmt_src_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_warnx("Unexpected PDU: src_ip=%s no v8 translation", fmt_src_ip); ++flows_corrupt; goto skip1; } /* translation among v8 aggregation methods not possible */ if ((ftv.d_version == 8) && ((ftv.agg_method != ftpdu.ftv.agg_method) || (ftv.agg_version != ftpdu.ftv.agg_version))) { fmt_ipv4(fmt_src_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_warnx( "Unexpected PDU: src_ip=%s multi v8 oagg=%d agg=%d over=%d ver=%d", fmt_src_ip, (int)ftv.agg_method, (int)ftpdu.ftv.agg_method, (int)ftv.agg_version, (int)ftpdu.ftv.agg_version); ++flows_corrupt; goto skip1; } } /* version processing */ /* compute 8 bit hash */ hash = (ftch_recexp.src_ip & 0xFF); hash ^= (ftch_recexp.src_ip>>24); hash ^= (ftch_recexp.dst_ip & 0xFF); hash ^= (ftch_recexp.dst_ip>>24); hash ^= (ftch_recexp.d_version & 0xFF); if (!(ftch_recexpp = ftchash_update(ftch, &ftch_recexp, hash))) fterr_errx(1, "ftch_update(): failed"); /* if the packet count is 0, then this is a new entry */ if (ftch_recexpp->packets == 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fterr_info("New exporter: time=%lu src_ip=%s dst_ip=%s d_version=%d", (u_long)now, fmt_src_ip, fmt_dst_ip, (int)ftpdu.ftv.d_version); /* set translation function */ if (ftch_recexp.d_version != ftv.d_version) ftch_recexpp->xlate = ftrec_xlate_func(&ftpdu.ftv, &ftv); } /* verify sequence number */ if (ftpdu_check_seq(&ftpdu, &(ftch_recexpp->ftseq)) < 0) { fmt_ipv4(fmt_src_ip, ftch_recexp.src_ip, FMT_JUST_LEFT); fmt_ipv4(fmt_dst_ip, ftch_recexp.dst_ip, FMT_JUST_LEFT); fmt_uint16(fmt_dst_port, ftch_recexp.dst_port, FMT_JUST_LEFT); fterr_warnx( "ftpdu_seq_check(): src_ip=%s dst_ip=%s d_version=%d expecting=%lu received=%lu lost=%lu", fmt_src_ip, fmt_dst_ip, (int)ftpdu.ftv.d_version, (u_long)ftch_recexpp->ftseq.seq_exp, (u_long)ftch_recexpp->ftseq.seq_rcv, (u_long)ftch_recexpp->ftseq.seq_lost); /* only count these lost if "lost" is a reasonable number */ if (ftch_recexpp->ftseq.seq_lost < FT_SEQ_RESET) { flows_lost += ftch_recexpp->ftseq.seq_lost; ftch_recexpp->lost += ftch_recexpp->ftseq.seq_lost; } else { flows_reset ++; ftch_recexpp->reset ++; } } /* decode */ ftpdu.ftd.byte_order = ftset.byte_order; ftpdu.ftd.exporter_ip = ftch_recexp.src_ip; n = fts3rec_pdu_decode(&ftpdu); /* update the exporter stats */ ftch_recexpp->packets ++; ftch_recexpp->flows += n; /* write decoded flows */ for (i = 0, offset = 0; i < n; ++i, offset += ftpdu.ftd.rec_size) { /* translate version? */ if (ftch_recexpp->xlate) { ftch_recexpp->xlate(ftpdu.ftd.buf+offset, &xl_rec); out_rec = (char*)&xl_rec; } else { out_rec = (char*)ftpdu.ftd.buf+offset; } ++nflows; if (ftio_write(&ftio, out_rec) < 0) fterr_errx(1, "ftio_write(): failed"); } /* for */ skip1: continue; } /* if FD_ISSET */ } /* while 1 */ /* rewrite header with updated info */ if (out_fd_plain) { time_end = (u_int32)time((time_t)0L); ftio_set_cap_time(&ftio, time_start, time_end); ftio_set_flows_count(&ftio, nflows); ftio_set_streaming(&ftio, 0); ftio_set_corrupt(&ftio, flows_corrupt); ftio_set_lost(&ftio, flows_lost); ftio_set_reset(&ftio, flows_reset); if (ftio_write_header(&ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); } /* close stream */ if (ftio_close(&ftio) < 0) fterr_errx(1, "ftio_close(): failed"); /* close input */ close (ftnet.fd); return 0; } /* main */ void sig_quit(int sig) { done = 1; } /* sig_quit */ void usage(void) { fprintf(stderr, "Usage: flow-receive [-h] [-b big|little] [-C comment]\n"); fprintf(stderr, " [-d debug_level] [-o output_file] [-S stat_interval]\n"); fprintf(stderr, " [-f filter_name] [-F filter_definition]\n"); fprintf(stderr, " [-t tag_fname] [-T tag_active] [-V pdu_version] [-z z_level]\n"); fprintf(stderr, " localip/remoteip/port\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-report.c0000644000076600007660000001333307776323015012501 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-report.c,v 1.9 2004/01/05 17:59:41 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; void usage(void); int sig_pipe_flag; void sig_pipe(int); int main(int argc, char **argv) { struct ftio ftio; struct ftprof ftp; struct ftstat ftstat; struct ftstat_def *ftsd; struct ftver ftv; struct ftvar ftvar; struct ftset ftset; struct fts3rec_offsets fo; char *rec; char *fname, *dname; u_int32 total_flows; int i, split, done; int usage_call; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv, sizeof ftv); bzero(&ftvar, sizeof ftvar); total_flows = 0; usage_call = 0; /* init var binding */ if (ftvar_new(&ftvar) < 0) fterr_errx(1, "ftvar_new(): failed"); fname = FT_PATH_CFG_STAT; dname = "default"; /* configure signal handler */ if (mysignal(SIGPIPE, sig_pipe) == SIG_ERR) fterr_err(1, "signal(SIGPIPE)"); /* defaults + no compression */ ftset_init(&ftset, 0); while ((i = getopt(argc, argv, "b:C:d:h?s:S:kz:v:")) != -1) switch (i) { case 'd': /* debug */ debug = atoi(optarg); break; case 's': /* stat file name */ fname = optarg; break; case 'S': /* stat definition name */ dname = optarg; break; case 'v': /* variable */ if (ftvar_pset(&ftvar, optarg) < 0) fterr_errx(1, "ftvar_pset(%s): failed", optarg); break; case 'h': /* help */ case '?': usage(); ++usage_call; break; default: usage(); exit(1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); if (usage_call) exit(0); /* initialize and load stats config */ if (ftstat_load(&ftstat, &ftvar, fname)) fterr_errx(1, "ftstat_load(): failed"); if (!(ftsd = ftstat_def_find(&ftstat, dname))) fterr_errx(1, "ftstat_find_def(%s): failed", dname); /* input is stdin */ if (ftio_init(&ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_get_ver(&ftio, &ftv); if (ftstat_def_test_xfields(ftsd, ftrec_xfield(&ftv))) fterr_errx(1, "Report definition references a field not in flow."); fts3rec_compute_offsets(&fo, &ftv); /* profile */ ftprof_start (&ftp); if (ftstat_def_new(ftsd)) { fterr_errx(1, "ftstat_new(%s): failed.",ftsd->name); } while ((rec = ftio_read(&ftio))) { ++total_flows; done = 0; if ((split = ftstat_def_accum(ftsd, rec, &fo)) < 0) { fterr_errx(1, "ftstat_eval(%s): failed.",ftsd->name); } if (split) { if (ftstat_def_calc(ftsd)) { fterr_errx(1, "ftstat_dump(%s): failed.",ftsd->name); } if (ftstat_def_dump(&ftio, ftsd)) { fterr_errx(1, "ftstat_dump(%s): failed.",ftsd->name); } if (ftstat_def_reset(ftsd)) { fterr_errx(1, "ftstat_def_reset(%s): failed.",ftsd->name); } if ((split = ftstat_def_accum(ftsd, rec, &fo)) < 0) { fterr_errx(1, "ftstat_eval(%s): failed.",ftsd->name); } if (split == 1) fterr_errx(1, "ftstat_def_accum(): looping on split"); } /* split */ } /* while more flows */ if (ftstat_def_calc(ftsd)) { fterr_errx(1, "ftstat_dump(%s): failed.",ftsd->name); } if (ftstat_def_dump(&ftio, ftsd)) { fterr_errx(1, "ftstat_dump(%s): failed.",ftsd->name); } if (ftstat_def_free(ftsd)) { fterr_errx(1, "ftstat_def_free(%s): failed.",ftsd->name); } if (ftio_close(&ftio) < 0) fterr_errx(1, "ftio_close(): failed"); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } ftstat_free(&ftstat); ftvar_free(&ftvar); return 0; } /* main */ void usage(void) { static int first; if (!first) { fprintf(stderr, "Usage: flow-report [-h]\n"); fprintf(stderr, " [-d debug_level] [-s stat_fname] [-S stat_definition]\n"); fprintf(stderr, " [-v var=val]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); ++first; } else { fprintf(stderr, "\nAvailable reports:\n\n"); ftstat_list_reports(stderr); } } void sig_pipe(int signo) { sig_pipe_flag = 1; } flow-tools-0.68/src/flow-send.c0000644000076600007660000002276610032433735012117 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-send.c,v 1.27 2004/03/31 03:15:41 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; void usage(void); void pdu_xmit(int tx_delay, int src_ip_spoof, int hdr_len, struct ip *ip_hdr, struct udphdr *udp_hdr, int sock, struct ftencode *fte, struct ftpeeri *ftpi); int main(int argc, char **argv) { struct sockaddr_in loc_addr, rem_addr; struct ip *ip_hdr; struct udphdr *udp_hdr; struct ftio ftio; struct ftprof ftp; struct ftver ftv, ftv2; struct ftencode fte; struct ftpeeri ftpi; struct ftipmask ftipmask; void (*xlate)(void *in_rec, void *out_rec); char xl_rec[FT_IO_MAXREC], *out_rec; u_int32 privacy_mask; unsigned int v1, v2, one; int i, n, ret, tx_delay, udp_sock; int src_ip_spoof, hdr_len; void *rec; /* init fterr */ fterr_setid(argv[0]); tx_delay = 0; bzero(&loc_addr, sizeof (struct sockaddr_in)); bzero(&rem_addr, sizeof (struct sockaddr_in)); bzero(&ftv, sizeof ftv); privacy_mask = 0xFFFFFFFF; src_ip_spoof = 0; /* no */ /* profile */ ftprof_start (&ftp); while ((i = getopt(argc, argv, "d:h?m:sV:x:")) != -1) switch (i) { case 'd': /* debug */ debug = atoi(optarg); break; case 'h': /* help */ case '?': usage(); exit (0); break; case 'm': /* privacy mask */ privacy_mask = scan_ip(optarg); break; case 's': /* source ip preserve */ src_ip_spoof = 1; break; case 'V': /* PDU version */ n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.set = 1; } else if (n == 2) { ftv.s_version = FT_IO_SVERSION; ftv.d_version = v1; ftv.agg_method = v2; ftv.agg_version = 2; ftv.set = 1; } else fterr_errx(1, "Version scan failed"); break; case 'x': /* transmitter delay */ tx_delay = atoi(optarg); break; default: usage(); exit (1); break; } /* switch */ /* expect IP address/port option */ if ((argc - optind) != 1) { usage(); exit (1); } /* get localip/rem_ip/port/ttl */ ftpi = scan_peeri(argv[optind]); /* default ttl to 255 if this is unicast */ if (!(IN_CLASSD(ftpi.rem_ip)) && (!ftpi.ttl)) ftpi.ttl = 255; rem_addr.sin_addr.s_addr = htonl(ftpi.rem_ip); rem_addr.sin_family = AF_INET; if (ftpi.dst_port) rem_addr.sin_port = htons(ftpi.dst_port); else rem_addr.sin_port = htons(FT_PORT); loc_addr.sin_addr.s_addr = htonl(ftpi.loc_ip); loc_addr.sin_family = AF_INET; /* if preserving source IP address then these are raw sockets */ if (src_ip_spoof) { if ((udp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) fterr_err(1, "socket()"); /* see Stevens Unix Network Programming Volume 1 2nd edition page 657 */ #ifdef IP_HDRINCL one = 1; if (setsockopt(udp_sock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0) { fterr_err(1, "setsockopt(IP_HDRINCL)"); } #endif /* IP_HDRINCL */ } else { /* normal UDP */ if ((udp_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) fterr_err(1, "socket()"); } if (bigsockbuf(udp_sock, SO_SNDBUF, FT_SO_SND_BUFSIZE) < 0) fterr_err(1, "bigsockbuf()"); #ifdef IP_ADD_MEMBERSHIP /* multicast destination? */ if ((!src_ip_spoof) && (IN_CLASSD(ntohl(rem_addr.sin_addr.s_addr)))) { u_char ttl = ftpi.ttl; /* set the ttl */ if (setsockopt(udp_sock, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl)) < 0) { fterr_err(1, "setsockopt(IP_MULTICAST_TTL=%d)", ttl); } } /* mcast */ #endif /* IP_ADD_MEMBERSHIP */ if (!src_ip_spoof) { if (bind(udp_sock, (struct sockaddr*)&loc_addr, sizeof loc_addr) < 0) fterr_err(1, "bind()"); } if (connect(udp_sock, (struct sockaddr*)&rem_addr, sizeof rem_addr) < 0) fterr_err(1, "connect()"); /* read from stdin */ if (ftio_init(&ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); /* initialize encode struct */ ftencode_init(&fte, (src_ip_spoof) ? FT_ENC_FLAGS_IPHDR : 0); /* if src ip spoofing, initialize the IP/UDP header */ if (src_ip_spoof) { ip_hdr = (struct ip*)&fte.buf; udp_hdr = (struct udphdr*)((char*)&fte.buf + sizeof (*ip_hdr)); ip_hdr->ip_hl = 5; ip_hdr->ip_v = 4; ip_hdr->ip_p = 17; /* UDP */ hdr_len = FT_ENC_IPHDR_LEN; } /* copy version from io stream */ ftio_get_ver(&ftio, &ftv2); if (ftv.set) bcopy(&ftv, &fte.ver, sizeof ftv); else bcopy(&ftv2, &fte.ver, sizeof ftv2); /* translation? */ if (fte.ver.d_version != ftv2.d_version) { if (!(xlate = ftrec_xlate_func(&ftv2, &fte.ver))) fterr_errx(1, "ftrec_xlate_func(): failed"); } else { xlate = (void*)0L; } /* setup for ftrec_mask_ip */ if (privacy_mask != 0xFFFFFFFF) ftrec_compute_mask(&ftipmask, privacy_mask, privacy_mask, ftio.fth.byte_order); while ((rec = ftio_read(&ftio))) { /* simple privacy */ if (privacy_mask != 0xFFFFFFFF) ftrec_mask_ip(rec, &fte.ver, &ftipmask); /* translate? */ if (xlate) { xlate(rec, &xl_rec); out_rec = (char*)&xl_rec; } else { out_rec = rec; } retry: ret = fts3rec_pdu_encode(&fte, out_rec); /* ret == 0 then send and clear out buffer * ret > 0 then encode another * ret < 0 then this encoding failed, send and clear out buffer */ if (ret <= 0) { pdu_xmit(tx_delay, src_ip_spoof, hdr_len, ip_hdr, udp_hdr, udp_sock, &fte, &ftpi); /* if ret < 0 then the current record was not encoded */ if (ret < 0) goto retry; } } /* any left over? */ if (fte.buf_size) { pdu_xmit(tx_delay, src_ip_spoof, hdr_len, ip_hdr, udp_hdr, udp_sock, &fte, &ftpi); } /* fte.buf_size */ if (debug > 0) { ftprof_end(&ftp, ftio_get_rec_total(&ftio)); ftprof_print(&ftp, argv[0], stderr); } return ret; } /* main */ void pdu_xmit(int tx_delay, int src_ip_spoof, int hdr_len, struct ip *ip_hdr, struct udphdr *udp_hdr, int sock, struct ftencode *fte, struct ftpeeri *ftpi) { int sum; /* convert pdu to network byte order */ #if BYTE_ORDER == LITTLE_ENDIAN ftpdu_swap(fte->buf_enc, BYTE_ORDER); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ /* do this once */ ftencode_sum_data(fte); if (src_ip_spoof) { /* see Stevens Unix Network Programming Volume 1 2nd edition page 657 */ /* conditional from rawsend.c */ #if defined (__linux__) || (defined (__OpenBSD__) && (OpenBSD > 199702)) ip_hdr->ip_len = htons(FT_ENC_IPHDR_LEN+fte->buf_size); #else ip_hdr->ip_len = FT_ENC_IPHDR_LEN+fte->buf_size; #endif ip_hdr->ip_ttl = ftpi->ttl; ip_hdr->ip_src.s_addr = htonl(ftpi->loc_ip); ip_hdr->ip_dst.s_addr = htonl(ftpi->rem_ip); udp_hdr->uh_sport = htons(7999); udp_hdr->uh_dport = htons(ftpi->dst_port); udp_hdr->uh_ulen = htons(fte->buf_size+8); udp_hdr->uh_sum = 0; sum = fte->d_sum; sum += udp_cksum(ip_hdr, udp_hdr, fte->buf_size+8); sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); udp_hdr->uh_sum = ~sum; } again: if (send(sock, (char*)&fte->buf, fte->buf_size+hdr_len, 0) < 0) { /* always complete a send, drop flows in the kernel on receive if overloaded */ if (errno == ENOBUFS) { usleep(1); goto again; } if (errno != ECONNREFUSED) fterr_warn("send()"); } if (tx_delay) usleep((unsigned)tx_delay); /* reset encode buffer */ ftencode_reset(fte); } /* pdu_xmit */ void usage(void) { fprintf(stderr, "Usage: flow-send [-h] [-d debug_level] [-x xmit_delay] [-V pdu_version]\n"); fprintf(stderr, " localip/remoteip/port\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-split.c0000644000076600007660000002554507642622727012335 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-split.c,v 1.12 2003/04/02 18:03:03 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include #include "ftbuild.h" int debug; void usage(void); #define MAXPATHNAME 256 enum split_tag {SPLIT_TAG_UNSET, SPLIT_TAG_SRC, SPLIT_TAG_DST}; int main(int argc, char **argv) { struct ftio ftio_in; struct ftprof ftp; struct ftver ftv; struct ftset ftset; struct fts3rec_offsets fo; struct ftsym *sym_tag; char *rec; struct ftchash *ftch; struct ftchash_rec_split ftch_recsplit, *ftch_recsplitp; enum split_tag stag; int i, names; char *out_path, out_fname[MAXPATHNAME], fmt_buf[32]; u_int32 max_flows, max_time, hash, unix_secs, total_flows; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv, sizeof ftv); bzero(&ftch_recsplit, sizeof ftch_recsplit); ftch_recsplit.fd = -1; ftch_recsplit.newfile = 1; ftch_recsplitp = &ftch_recsplit; out_path = "split"; max_flows = max_time = 0; names = 0; sym_tag = (struct ftsym*)0L; ftch = (struct ftchash*)0L; stag = SPLIT_TAG_UNSET; total_flows = 0; /* profile */ ftprof_start (&ftp); /* defaults */ ftset_init(&ftset, -1); while ((i = getopt(argc, argv, "b:C:d:gGh?nN:o:T:z:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'g': /* split src tag */ if (stag == SPLIT_TAG_DST) fterr_errx(1, "Split on destination or source."); stag = SPLIT_TAG_SRC; break; case 'G': /* split dst tag */ if (stag == SPLIT_TAG_SRC) fterr_errx(1, "Split on destination or source."); stag = SPLIT_TAG_DST; break; case 'n': /* names */ names = 1; break; case 'N': /* max flows */ max_flows = strtoul(optarg, (char **)0L, 10); break; case 'o': /* base output filename */ out_path = optarg; if (strlen(out_path) > (MAXPATHNAME-25)) fterr_errx(1, "base output too long"); break; case 'T': /* max time */ max_time = strtoul(optarg, (char **)0L, 10); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* input is stdin */ if (ftio_init(&ftio_in, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_get_ver(&ftio_in, &ftv); ftv.s_version = FT_IO_SVERSION; if (max_time) if (ftio_check_xfield(&ftio_in, FT_XFIELD_UNIX_SECS)) fterr_errx(1, "Flow record missing unix_secs."); /* if splitting on tags is enabled, make sure the field is available */ if (stag) { if (stag == SPLIT_TAG_SRC) if (ftio_check_xfield(&ftio_in, FT_XFIELD_SRC_TAG)) fterr_errx(1, "Flow record missing source tag."); if (stag == SPLIT_TAG_DST) if (ftio_check_xfield(&ftio_in, FT_XFIELD_DST_TAG)) fterr_errx(1, "Flow record missing destination tag."); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_split), 4, 65536))) fterr_errx(1, "ftchash_new(): failed"); } /* stag */ /* symbolic names? */ if (stag && names) { sym_tag = ftsym_new(FT_PATH_SYM_TAG); } fts3rec_compute_offsets(&fo, &ftv); while ((rec = ftio_read(&ftio_in))) { ++total_flows; unix_secs = *((u_int32*)(rec+fo.unix_secs)); /* * if tagging is enabled, grab the tag and look it up, possibly * trigger a new file creation * */ if (stag) { if (stag == SPLIT_TAG_SRC) ftch_recsplit.tag = *((u_int32*)(rec+fo.src_tag)); else if (stag == SPLIT_TAG_DST) ftch_recsplit.tag = *((u_int32*)(rec+fo.dst_tag)); hash = (ftch_recsplit.tag>>16) ^ (ftch_recsplit.tag & 0xFFFF); if (!(ftch_recsplitp = ftchash_update(ftch, &ftch_recsplit, hash))) fterr_errx(1, "ftchash_update(): failed."); /* first flow for this hash entry? */ if (!ftch_recsplitp->total_flows) { ftch_recsplitp->fd = -1; ftch_recsplitp->newfile = 1; } } /* create new output file */ if (ftch_recsplitp->newfile) { /* close the previous file first? */ if (ftch_recsplitp->fd != -1) { ftio_set_cap_time(&ftch_recsplitp->ftio, ftch_recsplitp->cap_start, ftch_recsplitp->cap_end); ftio_set_flows_count(&ftch_recsplitp->ftio, ftch_recsplitp->total_flows); ftio_set_streaming(&ftch_recsplitp->ftio, 0); if (ftio_write_header(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); if (ftio_close(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_close(): failed"); ftch_recsplitp->total_flows = 0; ftch_recsplitp->cap_start = 0; ftch_recsplitp->cap_end = 0; } /* closing */ /* if splitting on tags, include the tag name in the filename */ if (stag) { fmt_uint32s(sym_tag, 32, fmt_buf, ftch_recsplitp->tag, FMT_JUST_LEFT); snprintf(out_fname, MAXPATHNAME, "%s.%s.%d", out_path, fmt_buf, ftch_recsplitp->id); } else { snprintf(out_fname, MAXPATHNAME, "%s.%d", out_path, ftch_recsplitp->id); } if ((ftch_recsplitp->fd = open(out_fname, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1) fterr_err(1, "open(%s)", out_fname); /* output to out_fd */ if (ftio_init(&ftch_recsplitp->ftio, ftch_recsplitp->fd, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* set the version information in the io stream */ if (ftio_set_ver(&ftch_recsplitp->ftio, &ftv) < 0) fterr_errx(1, "ftio_set_ver(): failed"); ftio_set_comment(&ftch_recsplitp->ftio, ftset.comments); ftio_set_byte_order(&ftch_recsplitp->ftio, ftset.byte_order); ftio_set_z_level(&ftch_recsplitp->ftio, ftset.z_level); ftio_set_streaming(&ftch_recsplitp->ftio, 1); ftio_set_debug(&ftch_recsplitp->ftio, debug); ftio_set_cap_time(&ftch_recsplitp->ftio, 0, 0); ftio_set_flows_count(&ftch_recsplitp->ftio, 0); if (ftio_write_header(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); /* LC's not synched very well */ if (unix_secs > ftch_recsplitp->cap_start) { ftch_recsplitp->cap_start = unix_secs; } ftch_recsplitp->newfile = 0; ftch_recsplitp->id ++; } /* new_file */ ftch_recsplitp->total_flows ++; /* signal new file if total_flows >= max_flows */ if (max_flows && (ftch_recsplitp->total_flows >= max_flows)) ftch_recsplitp->newfile = 1; /* signal new file if time elapsed > max_time */ if ((max_time && (unix_secs > ftch_recsplitp->cap_start) && (unix_secs - ftch_recsplitp->cap_start) > max_time)) { /* LC's not synch'd very well */ ftch_recsplitp->cap_start = unix_secs; ftch_recsplitp->newfile = 1; } ftch_recsplitp->cap_end = unix_secs; if (ftio_write(&ftch_recsplitp->ftio, rec) < 0) fterr_errx(1, "ftio_write(): failed"); } if (!stag) { if (ftch_recsplitp->fd != -1) { ftio_set_cap_time(&ftch_recsplitp->ftio, ftch_recsplitp->cap_start, ftch_recsplitp->cap_end); ftio_set_flows_count(&ftch_recsplitp->ftio, ftch_recsplitp->total_flows); ftio_set_streaming(&ftch_recsplitp->ftio, 0); if (ftio_write_header(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); if (ftio_close(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_close(): failed"); } /* if */ } else { /* !stag */ ftchash_first(ftch); while ((ftch_recsplitp = ftchash_foreach(ftch))) { if (ftch_recsplitp->fd != -1) { ftio_set_cap_time(&ftch_recsplitp->ftio, ftch_recsplitp->cap_start, ftch_recsplitp->cap_end); ftio_set_flows_count(&ftch_recsplitp->ftio, ftch_recsplitp->total_flows); ftio_set_streaming(&ftch_recsplitp->ftio, 0); if (ftio_write_header(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_write_header(): failed"); if (ftio_close(&ftch_recsplitp->ftio) < 0) fterr_errx(1, "ftio_close(): failed"); } /* if */ } /* while */ } /* stag */ if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } if (sym_tag) ftsym_free(sym_tag); if (ftch) ftchash_free(ftch); return 0; } /* main */ void usage() { fprintf(stderr, "Usage: flow-split [-gGhn] [-b big|little] [-C comment] [-d debug_level]\n"); fprintf(stderr, " [-N nflows] [-o outfile_basename] [-T nseconds] [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } flow-tools-0.68/src/flow-stat.c0000644000076600007660000032413710142037224012131 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-stat.c,v 1.46 2004/11/03 02:12:36 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" /* * XXX TODO * * wide format to include bandwidth * * format groups * * tally for all reports * * html formatting * * possible memory leaks with new allocation * * x src,dst,src/dst formats also need just 'x' like IP * * bw summary in f0 * * bw report * */ #define FORMATS 33 /* # of types of output */ #define CUR_GET\ cur.duration = *((u_int32*)(rec+fo.Last)) - *((u_int32*)(rec+fo.First));\ cur.octets = *((u_int32*)(rec+fo.dOctets));\ cur.packets = *((u_int32*)(rec+fo.dPkts));\ #define CUR_GET_PLUS_FLOWS\ if (args->ftio.xfield & FT_XFIELD_DFLOWS)\ cur.flows = *((u_int32*)(rec+fo.dFlows));\ cur.duration = *((u_int32*)(rec+fo.Last)) - *((u_int32*)(rec+fo.First));\ cur.octets = *((u_int32*)(rec+fo.dOctets));\ cur.packets = *((u_int32*)(rec+fo.dPkts));\ #define TOTAL_INC\ total.flows += cur.flows;\ total.octets += cur.octets;\ total.packets += cur.packets;\ total.duration += cur.duration;\ #define STAT_INCP(A)\ A->nflows += cur.flows;\ A->noctets += cur.octets;\ A->npackets += cur.packets;\ A->etime += cur.duration;\ #define STAT_INCA(A)\ stat.flows[A] += cur.flows;\ stat.octets[A] += cur.octets;\ stat.packets[A] += cur.packets;\ stat.duration[A] += cur.duration;\ int debug; static u_int64 *sort_i64; static int sort_cmp64(const void *a, const void *b); struct fopdi { u_int64 *flows, *octets, *packets, *duration; u_int32 *index; }; struct fopd32 { u_int32 flows, octets, packets, duration; }; struct fopd32p { u_int32 flows, octets, packets, duration; }; struct fopd { u_int64 flows, octets, packets, duration; }; struct fmtargs { struct ftio ftio; int sort_order; int options; int tally; char cc; }; struct jump { int (*where)(struct fmtargs *args); }; int fopdi_alloc(struct fopdi *fopdi, int n); void fopdi_free(struct fopdi *fopdi); int tbl_out1(struct fmtargs *args, u_int nindex, struct fopdi *stat, struct fopd *total, char *title, char *symfile); int chash_c32_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total, char *title, char *symfile); int chash_c322_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total, char *title, char *title2, char *symfile); int chash_ip_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total); int chash_ip2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total); int chash_as2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total, char *symfile); int chash_if2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total); int chash_pre_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total); int chash_pre2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total); int format0(struct fmtargs *args); int format1(struct fmtargs *args); int format2(struct fmtargs *args); int format3(struct fmtargs *args); int format4(struct fmtargs *args); int format5(struct fmtargs *args); int format6(struct fmtargs *args); int format7(struct fmtargs *args); int format8(struct fmtargs *args); int format9(struct fmtargs *args); int format10(struct fmtargs *args); int format11(struct fmtargs *args); int format12(struct fmtargs *args); int format13(struct fmtargs *args); int format14(struct fmtargs *args); int format15(struct fmtargs *args); int format16(struct fmtargs *args); int format17(struct fmtargs *args); int format18(struct fmtargs *args); int format19(struct fmtargs *args); int format20(struct fmtargs *args); int format21(struct fmtargs *args); int format22(struct fmtargs *args); int format23(struct fmtargs *args); int format24(struct fmtargs *args); int format25(struct fmtargs *args); int format26(struct fmtargs *args); int format27(struct fmtargs *args); int format28(struct fmtargs *args); int format29(struct fmtargs *args); int format30(struct fmtargs *args); int format31(struct fmtargs *args); int format32(struct fmtargs *args); struct jump format[] = { {format0}, {format1}, {format2}, {format3}, {format4}, {format5}, {format6}, {format7}, {format8}, {format9}, {format10}, {format11}, {format12}, {format13}, {format14}, {format15}, {format16}, {format17}, {format18}, {format19}, {format20}, {format21}, {format22}, {format23}, {format24}, {format25}, {format26}, {format27}, {format28}, {format29}, {format30}, {format31}, {format32}, }; char *format_name[] = { "Overall Summary", "Average packet size distribution", "Packets per flow distribution", "Octets per flow distribution", "Bandwidth per flow distribution", "UDP/TCP destination port", "UDP/TCP source port", "UDP/TCP port", "Destination IP", "Source IP", "Source/Destination IP", "Source or Destination IP", "IP protocol", "octets for flow duration plot data", "packets for flow duration plot data", "short summary", "IP Next Hop", "Input interface", "Output interface", "Source AS", "Destination AS", "Source/Destination AS", "IP ToS", "Input/Output Interface", "Source Prefix", "Destination Prefix", "Source/Destination Prefix", "Exporter IP", "Engine Id", "Engine Type", "Source Tag", "Destination Tag", "Source/Destination Tag", }; struct stat0 { u_int64 nflows; /* total # flows */ u_int64 noctets; /* total # octets */ u_int64 npackets; /* total # packets */ u_int64 time; /* total time in 1/1000 of flows */ double aflowtime; /* average time of flow */ double aps; /* average packet size */ double afs; /* average flow size */ double apf; /* average packets per flow */ double fps; /* average flows per second */ double fps_real; /* average flows per second (realtime) */ double aos; /* average octets per second */ double aos_real; /* average octets per second (realtime) */ u_int64 start; /* earliest flow time */ u_int64 end; /* latest flow time */ u_int32 time_start; /* earliest flow (realtime) */ u_int32 time_end; /* last flow (realtime) */ u_int32 time_real; /* realtime duration */ /* average packet sizes */ u_int64 psize32; /* bytes/packet 1 <= p <= 32 */ u_int64 psize64; /* bytes/packet 32 < p <= 64 */ u_int64 psize96; u_int64 psize128; u_int64 psize160; u_int64 psize192; u_int64 psize224; u_int64 psize256; u_int64 psize288; u_int64 psize320; u_int64 psize352; u_int64 psize384; u_int64 psize416; u_int64 psize448; u_int64 psize480; u_int64 psize512; u_int64 psize544; u_int64 psize576; u_int64 psize1024; u_int64 psize1536; u_int64 psize2048; u_int64 psize2560; u_int64 psize3072; u_int64 psize3584; u_int64 psize4096; u_int64 psize4608; /* packets per flow */ u_int64 fpsize1; /* packets/flow = 1 */ u_int64 fpsize2; /* packets/flow = 2 */ u_int64 fpsize4; /* packets/flow 2 < p <= 4 */ u_int64 fpsize8; /* packets/flow 4 < p <= 8 */ u_int64 fpsize12; u_int64 fpsize16; u_int64 fpsize20; u_int64 fpsize24; u_int64 fpsize28; u_int64 fpsize32; u_int64 fpsize36; u_int64 fpsize40; u_int64 fpsize44; u_int64 fpsize48; u_int64 fpsize52; u_int64 fpsize60; u_int64 fpsize100; u_int64 fpsize200; u_int64 fpsize300; u_int64 fpsize400; u_int64 fpsize500; u_int64 fpsize600; u_int64 fpsize700; u_int64 fpsize800; u_int64 fpsize900; u_int64 fpsize_other; /* packets/flow 200 < p */ /* octets per flow */ u_int64 fosize32; /* octets/flow 1 <= p <= 32 */ u_int64 fosize64; /* octets/flow 32 < p <= 64 */ u_int64 fosize128; /* octets/flow 64 < p <= 128 */ u_int64 fosize256; /* octets/flow 128 < p <= 256 */ u_int64 fosize512; u_int64 fosize1280; u_int64 fosize2048; u_int64 fosize2816; u_int64 fosize3584; u_int64 fosize4352; u_int64 fosize5120; u_int64 fosize5888; u_int64 fosize6656; u_int64 fosize7424; u_int64 fosize8192; u_int64 fosize8960; u_int64 fosize9728; u_int64 fosize10496; u_int64 fosize11264; u_int64 fosize12032; u_int64 fosize12800; u_int64 fosize13568; u_int64 fosize14336; u_int64 fosize15104; u_int64 fosize15872; u_int64 fosize_other; /* octets/flow 15872 < p */ /* time per flow */ u_int64 ftime10; /* time/flow 1 <= p <= 10 */ u_int64 ftime50; /* time/flow 10 < p <= 50 */ u_int64 ftime100; u_int64 ftime200; u_int64 ftime500; u_int64 ftime1000; u_int64 ftime2000; u_int64 ftime3000; u_int64 ftime4000; u_int64 ftime5000; u_int64 ftime6000; u_int64 ftime7000; u_int64 ftime8000; u_int64 ftime9000; u_int64 ftime10000; u_int64 ftime12000; u_int64 ftime14000; u_int64 ftime16000; u_int64 ftime18000; u_int64 ftime20000; u_int64 ftime22000; u_int64 ftime24000; u_int64 ftime26000; u_int64 ftime28000; u_int64 ftime30000; u_int64 ftime_other; /* time/flow 2000 < p */ }; void usage(void); int main(int argc, char **argv) { struct fmtargs args; struct ftprof ftp; int x, y, ret, i, format_index, print_header, usage_call; char *title, *c; title = (char*)0L; usage_call = 0; /* init fterr */ fterr_setid(argv[0]); /* profile */ ftprof_start (&ftp); args.options = 0; format_index = 0; print_header = 0; args.cc = '#'; args.sort_order = 0; while ((i = getopt(argc, argv, "c:d:f:h?npPs:S:t:T:w")) != -1) switch (i) { case 'c': /* comment character */ args.cc = optarg[0]; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'f': /* format */ format_index = atoi(optarg); break; case 'h': /* help */ case '?': /* help */ usage(); ++usage_call; break; case 'n': /* use names */ args.options |= FT_OPT_NAMES; break; case 'p': /* print header */ print_header = 1; break; case 'P': /* percent's */ args.options |= FT_OPT_PERCENT; break; case 's': /* sort low to high on field n */ args.sort_order = (atoi(optarg)+1) * -1; break; case 'S': /* sort high to low on field n */ args.sort_order = (atoi(optarg)+1); break; case 't': /* tallies */ args.options |= FT_OPT_TALLY; args.tally = atoi(optarg); break; case 'T': /* title */ title = optarg; break; case 'w': /* wide output */ args.options |= FT_OPT_WIDE; break; default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); if (usage_call) exit (0); if (format_index >= FORMATS) fterr_errx(1, "No such format, %d\n", format_index); /* read from stdin */ if (ftio_init(&args.ftio, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); printf("%c --- ---- ---- Report Information --- --- ---\n", args.cc); printf("%c\n", args.cc); if (title) printf("%c Title: %s\n", args.cc, title); printf("%c Fields: %sTotal\n", args.cc, (args.options & FT_OPT_PERCENT) ? "Percent " : ""); printf("%c Symbols: %s\n", args.cc, (args.options & FT_OPT_NAMES) ? "Enabled" : "Disabled"); if (!args.sort_order) c = "None"; else if (args.sort_order > 0) c = "Descending"; else c = "Ascending"; printf("%c Sorting: %s", args.cc, c); if (args.sort_order) printf(" Field %d\n", abs(args.sort_order)-1); else printf("\n"); printf("%c Name: %s\n", args.cc, format_name[format_index]); /* print cmdl args */ printf("%c\n%c Args: ", args.cc, args.cc); for (x = 0; x < argc; ++x) { for (y = 0; y < strlen(argv[x]); ++y) { if (isprint((int)argv[x][y])) putc(argv[x][y], stdout); } putc (' ', stdout); } putc ('\n', stdout); printf("%c\n", args.cc); if (print_header) { ftio_header_print(&args.ftio, stdout, args.cc); } ret = format[format_index].where(&args); if ((!ret) && (debug > 0)) { ftprof_end(&ftp, ftio_get_rec_total(&args.ftio)); ftprof_print(&ftp, argv[0], stderr); } ret = 0; return ret; } /* main */ /* * function: format0 * * prints long summary * * returns 0 for success. */ int format0(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct stat0 fs0; u_long p; char fmt_buf[256]; u_int32 time_tmp; char *rec; u_int32 First, Last, unix_secs; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_UNIX_SECS)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&fs0, sizeof fs0); fs0.start = 0xFFFFFFFF; fs0.end = 0; fs0.time_start = 0xFFFFFFFF; fs0.time_end = 0; cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; First = *((u_int32*)(rec+fo.First)); Last = *((u_int32*)(rec+fo.Last)); unix_secs = *((u_int32*)(rec+fo.unix_secs)); if (!cur.packets) { fprintf(stderr, "Ignoring bogus flow dPkts=0\n"); continue; } fs0.nflows += cur.flows; fs0.noctets += cur.octets; fs0.npackets += cur.packets; time_tmp = unix_secs; if (time_tmp < fs0.time_start) fs0.time_start = time_tmp; if (time_tmp > fs0.time_end) fs0.time_end = time_tmp; if (First < fs0.start) fs0.start = First; if (Last > fs0.end) fs0.end = Last; p = cur.octets / cur.packets; if (p <= 32) ++ fs0.psize32; else if (p <= 64) ++ fs0.psize64; else if (p <= 96) ++ fs0.psize96; else if (p <= 128) ++ fs0.psize128; else if (p <= 160) ++ fs0.psize160; else if (p <= 192) ++ fs0.psize192; else if (p <= 224) ++ fs0.psize224; else if (p <= 256) ++ fs0.psize256; else if (p <= 288) ++ fs0.psize288; else if (p <= 320) ++ fs0.psize320; else if (p <= 352) ++ fs0.psize352; else if (p <= 384) ++ fs0.psize384; else if (p <= 416) ++ fs0.psize416; else if (p <= 448) ++ fs0.psize448; else if (p <= 480) ++ fs0.psize480; else if (p <= 512) ++ fs0.psize512; else if (p <= 544) ++ fs0.psize544; else if (p <= 576) ++ fs0.psize576; else if (p <= 1024) ++ fs0.psize1024; else if (p <= 1536) ++ fs0.psize1536; else if (p <= 2048) ++ fs0.psize2048; else if (p <= 2560) ++ fs0.psize2560; else if (p <= 3072) ++ fs0.psize3072; else if (p <= 3584) ++ fs0.psize3584; else if (p <= 4096) ++ fs0.psize4096; else if (p <= 4608) ++ fs0.psize4608; p = cur.packets; if (p <= 1) ++ fs0.fpsize1; else if (p <= 2) ++ fs0.fpsize2; else if (p <= 4) ++ fs0.fpsize4; else if (p <= 8) ++ fs0.fpsize8; else if (p <= 12) ++ fs0.fpsize12; else if (p <= 16) ++ fs0.fpsize16; else if (p <= 20) ++ fs0.fpsize20; else if (p <= 24) ++ fs0.fpsize24; else if (p <= 28) ++ fs0.fpsize28; else if (p <= 32) ++ fs0.fpsize32; else if (p <= 36) ++ fs0.fpsize36; else if (p <= 40) ++ fs0.fpsize40; else if (p <= 44) ++ fs0.fpsize44; else if (p <= 48) ++ fs0.fpsize48; else if (p <= 52) ++ fs0.fpsize52; else if (p <= 60) ++ fs0.fpsize60; else if (p <= 100) ++ fs0.fpsize100; else if (p <= 200) ++ fs0.fpsize200; else if (p <= 300) ++ fs0.fpsize300; else if (p <= 400) ++ fs0.fpsize400; else if (p <= 500) ++ fs0.fpsize500; else if (p <= 600) ++ fs0.fpsize600; else if (p <= 700) ++ fs0.fpsize700; else if (p <= 800) ++ fs0.fpsize800; else if (p <= 900) ++ fs0.fpsize900; else ++ fs0.fpsize_other; p = cur.octets; if (p <= 32) ++ fs0.fosize32; else if (p <= 64) ++ fs0.fosize64; else if (p <= 128) ++ fs0.fosize128; else if (p <= 256) ++ fs0.fosize256; else if (p <= 512) ++ fs0.fosize512; else if (p <= 1280) ++ fs0.fosize1280; else if (p <= 2048) ++ fs0.fosize2048; else if (p <= 2816) ++ fs0.fosize2816; else if (p <= 3584) ++ fs0.fosize3584; else if (p <= 4352) ++ fs0.fosize4352; else if (p <= 5120) ++ fs0.fosize5120; else if (p <= 5888) ++ fs0.fosize5888; else if (p <= 6656) ++ fs0.fosize6656; else if (p <= 7424) ++ fs0.fosize7424; else if (p <= 8192) ++ fs0.fosize8192; else if (p <= 8960) ++ fs0.fosize8960; else if (p <= 9728) ++ fs0.fosize9728; else if (p <= 10496) ++ fs0.fosize10496; else if (p <= 11264) ++ fs0.fosize11264; else if (p <= 12032) ++ fs0.fosize12032; else if (p <= 12800) ++ fs0.fosize12800; else if (p <= 13568) ++ fs0.fosize13568; else if (p <= 14336) ++ fs0.fosize14336; else if (p <= 15104) ++ fs0.fosize15104; else if (p <= 15872) ++ fs0.fosize15872; else ++ fs0.fosize_other; p = Last - First; fs0.time += p; if (p <= 10) ++ fs0.ftime10; else if (p <= 50) ++ fs0.ftime50; else if (p <= 100) ++ fs0.ftime100; else if (p <= 200) ++ fs0.ftime200; else if (p <= 500) ++ fs0.ftime500; else if (p <= 1000) ++ fs0.ftime1000; else if (p <= 2000) ++ fs0.ftime2000; else if (p <= 3000) ++ fs0.ftime3000; else if (p <= 4000) ++ fs0.ftime4000; else if (p <= 5000) ++ fs0.ftime5000; else if (p <= 6000) ++ fs0.ftime6000; else if (p <= 7000) ++ fs0.ftime7000; else if (p <= 8000) ++ fs0.ftime8000; else if (p <= 9000) ++ fs0.ftime9000; else if (p <= 10000) ++ fs0.ftime10000; else if (p <= 12000) ++ fs0.ftime12000; else if (p <= 14000) ++ fs0.ftime14000; else if (p <= 16000) ++ fs0.ftime16000; else if (p <= 18000) ++ fs0.ftime18000; else if (p <= 20000) ++ fs0.ftime20000; else if (p <= 22000) ++ fs0.ftime22000; else if (p <= 24000) ++ fs0.ftime24000; else if (p <= 26000) ++ fs0.ftime26000; else if (p <= 28000) ++ fs0.ftime28000; else if (p <= 30000) ++ fs0.ftime30000; else ++ fs0.ftime_other; } if (fs0.nflows) { fs0.aflowtime = (fs0.nflows != 0) ? fs0.time / (float)fs0.nflows : 0; fs0.aps = (fs0.npackets != 0) ? fs0.noctets / (float)fs0.npackets : 0; fs0.afs = (fs0.nflows != 0) ? fs0.noctets / (float)fs0.nflows : 0; fs0.apf = (fs0.nflows != 0) ? fs0.npackets / (float)fs0.nflows : 0; fs0.fps = (float)fs0.nflows / ((fs0.end - fs0.start) / 1000); fs0.aos = ((float)(fs0.noctets*8) / 1000) / ((fs0.end - fs0.start) / 1000); fs0.time_real = (fs0.npackets != 0) ? fs0.time_end - fs0.time_start : 0; fs0.fps_real = (fs0.time_real != 0) ? ((float)fs0.nflows / (float)fs0.time_real) : 0; fs0.aos_real = (fs0.time_real != 0) ? (((float)(fs0.noctets*8) / 1000) / (fs0.time_real)) : 0; strcpy(fmt_buf, "Total Flows : "); fmt_uint64(fmt_buf+34, fs0.nflows, FMT_JUST_LEFT); puts(fmt_buf); strcpy(fmt_buf, "Total Octets : "); fmt_uint64(fmt_buf+34, fs0.noctets, FMT_JUST_LEFT); puts(fmt_buf); strcpy(fmt_buf, "Total Packets : "); fmt_uint64(fmt_buf+34, fs0.npackets, FMT_JUST_LEFT); puts(fmt_buf); strcpy(fmt_buf, "Total Time (1/1000 secs) (flows): "); fmt_uint64(fmt_buf+34, fs0.time, FMT_JUST_LEFT); puts(fmt_buf); strcpy(fmt_buf, "Duration of data (realtime) : "); fmt_uint32(fmt_buf+34, fs0.time_real, FMT_JUST_LEFT); puts(fmt_buf); strcpy(fmt_buf, "Duration of data (1/1000 secs) : "); fmt_uint64(fmt_buf+34, (fs0.npackets != 0) ? (fs0.end - fs0.start) : 0, FMT_JUST_LEFT); puts(fmt_buf); printf("Average flow time (1/1000 secs) : %4.4f\n", fs0.aflowtime); printf("Average packet size (octets) : %4.4f\n", fs0.aps); printf("Average flow size (octets) : %4.4f\n", fs0.afs); printf("Average packets per flow : %4.4f\n", fs0.apf); printf("Average flows / second (flow) : %4.4f\n", fs0.fps); printf("Average flows / second (real) : %4.4f\n", fs0.fps_real); printf("Average Kbits / second (flow) : %4.4f\n", fs0.aos); printf("Average Kbits / second (real) : %4.4f\n", fs0.aos_real); printf("\n\n"); printf("IP packet size distribution:\n"); printf(" 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480\n "); print_3float((float)fs0.psize32 / fs0.nflows); print_3float((float)fs0.psize64 / fs0.nflows); print_3float((float)fs0.psize96 / fs0.nflows); print_3float((float)fs0.psize128 / fs0.nflows); print_3float((float)fs0.psize160 / fs0.nflows); print_3float((float)fs0.psize192 / fs0.nflows); print_3float((float)fs0.psize224 / fs0.nflows); print_3float((float)fs0.psize256 / fs0.nflows); print_3float((float)fs0.psize288 / fs0.nflows); print_3float((float)fs0.psize320 / fs0.nflows); print_3float((float)fs0.psize352 / fs0.nflows); print_3float((float)fs0.psize384 / fs0.nflows); print_3float((float)fs0.psize416 / fs0.nflows); print_3float((float)fs0.psize448 / fs0.nflows); print_3float((float)fs0.psize480 / fs0.nflows); printf("\n\n"); printf(" 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608\n "); print_3float((float)fs0.psize512 / fs0.nflows); print_3float((float)fs0.psize544 / fs0.nflows); print_3float((float)fs0.psize576 / fs0.nflows); print_3float((float)fs0.psize1024 / fs0.nflows); print_3float((float)fs0.psize1536 / fs0.nflows); print_3float((float)fs0.psize2048 / fs0.nflows); print_3float((float)fs0.psize2560 / fs0.nflows); print_3float((float)fs0.psize3072 / fs0.nflows); print_3float((float)fs0.psize3584 / fs0.nflows); print_3float((float)fs0.psize4096 / fs0.nflows); print_3float((float)fs0.psize4608 / fs0.nflows); printf("\n\n"); printf("Packets per flow distribution:\n"); printf(" 1 2 4 8 12 16 20 24 28 32 36 40 44 48 52\n "); print_3float((float)fs0.fpsize1 / fs0.nflows); print_3float((float)fs0.fpsize2 / fs0.nflows); print_3float((float)fs0.fpsize4 / fs0.nflows); print_3float((float)fs0.fpsize8 / fs0.nflows); print_3float((float)fs0.fpsize12 / fs0.nflows); print_3float((float)fs0.fpsize16 / fs0.nflows); print_3float((float)fs0.fpsize20 / fs0.nflows); print_3float((float)fs0.fpsize24 / fs0.nflows); print_3float((float)fs0.fpsize28 / fs0.nflows); print_3float((float)fs0.fpsize32 / fs0.nflows); print_3float((float)fs0.fpsize36 / fs0.nflows); print_3float((float)fs0.fpsize40 / fs0.nflows); print_3float((float)fs0.fpsize44 / fs0.nflows); print_3float((float)fs0.fpsize48 / fs0.nflows); print_3float((float)fs0.fpsize52 / fs0.nflows); printf("\n\n 60 100 200 300 400 500 600 700 800 900 >900\n "); print_3float((float)fs0.fpsize60 / fs0.nflows); print_3float((float)fs0.fpsize100 / fs0.nflows); print_3float((float)fs0.fpsize200 / fs0.nflows); print_3float((float)fs0.fpsize300 / fs0.nflows); print_3float((float)fs0.fpsize400 / fs0.nflows); print_3float((float)fs0.fpsize500 / fs0.nflows); print_3float((float)fs0.fpsize600 / fs0.nflows); print_3float((float)fs0.fpsize700 / fs0.nflows); print_3float((float)fs0.fpsize800 / fs0.nflows); print_3float((float)fs0.fpsize900 / fs0.nflows); print_3float((float)fs0.fpsize_other / fs0.nflows); printf("\n\n"); printf("Octets per flow distribution:\n"); printf(" 32 64 128 256 512 1280 2048 2816 3584 4352 5120 5888 6656 7424 8192\n "); print_3float((float)fs0.fosize32 / fs0.nflows); print_3float((float)fs0.fosize64 / fs0.nflows); print_3float((float)fs0.fosize128 / fs0.nflows); print_3float((float)fs0.fosize256 / fs0.nflows); print_3float((float)fs0.fosize512 / fs0.nflows); print_3float((float)fs0.fosize1280 / fs0.nflows); print_3float((float)fs0.fosize2048 / fs0.nflows); print_3float((float)fs0.fosize2816 / fs0.nflows); print_3float((float)fs0.fosize3584 / fs0.nflows); print_3float((float)fs0.fosize4352 / fs0.nflows); print_3float((float)fs0.fosize5120 / fs0.nflows); print_3float((float)fs0.fosize5888 / fs0.nflows); print_3float((float)fs0.fosize6656 / fs0.nflows); print_3float((float)fs0.fosize7424 / fs0.nflows); print_3float((float)fs0.fosize8192 / fs0.nflows); printf("\n\n 8960 9728 10496 11264 12032 12800 13568 14336 15104 15872 >15872\n "); print_3float((float)fs0.fosize8960 / fs0.nflows); print_3float2((float)fs0.fosize9728 / fs0.nflows); print_3float2((float)fs0.fosize10496 / fs0.nflows); print_3float2((float)fs0.fosize11264 / fs0.nflows); print_3float2((float)fs0.fosize12032 / fs0.nflows); print_3float2((float)fs0.fosize12800 / fs0.nflows); print_3float2((float)fs0.fosize13568 / fs0.nflows); print_3float2((float)fs0.fosize14336 / fs0.nflows); print_3float2((float)fs0.fosize15104 / fs0.nflows); print_3float2((float)fs0.fosize15872 / fs0.nflows); print_3float2((float)fs0.fosize_other / fs0.nflows); printf("\n\n"); printf("Flow time distribution:\n"); printf(" 10 50 100 200 500 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000\n "); print_3float((float)fs0.ftime10 / fs0.nflows); print_3float((float)fs0.ftime50 / fs0.nflows); print_3float((float)fs0.ftime100 / fs0.nflows); print_3float((float)fs0.ftime200 / fs0.nflows); print_3float((float)fs0.ftime500 / fs0.nflows); print_3float((float)fs0.ftime1000 / fs0.nflows); print_3float((float)fs0.ftime2000 / fs0.nflows); print_3float((float)fs0.ftime3000 / fs0.nflows); print_3float((float)fs0.ftime4000 / fs0.nflows); print_3float((float)fs0.ftime5000 / fs0.nflows); print_3float((float)fs0.ftime6000 / fs0.nflows); print_3float((float)fs0.ftime7000 / fs0.nflows); print_3float((float)fs0.ftime8000 / fs0.nflows); print_3float2((float)fs0.ftime9000 / fs0.nflows); print_3float2((float)fs0.ftime10000 / fs0.nflows); printf("\n\n 12000 14000 16000 18000 20000 22000 24000 26000 28000 30000 >30000\n "); print_3float2((float)fs0.ftime12000 / fs0.nflows); print_3float2((float)fs0.ftime14000 / fs0.nflows); print_3float2((float)fs0.ftime16000 / fs0.nflows); print_3float2((float)fs0.ftime18000 / fs0.nflows); print_3float2((float)fs0.ftime20000 / fs0.nflows); print_3float2((float)fs0.ftime22000 / fs0.nflows); print_3float2((float)fs0.ftime24000 / fs0.nflows); print_3float2((float)fs0.ftime26000 / fs0.nflows); print_3float2((float)fs0.ftime28000 / fs0.nflows); print_3float2((float)fs0.ftime30000 / fs0.nflows); print_3float2((float)fs0.ftime_other / fs0.nflows); printf("\n\n"); } return 0; } /* format0 */ /* * function: format1 * * Average packet size distribution histogram * * returns 0 for success. */ int format1(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_c32 ftch_recc32, *ftch_recc32p; struct fopd32 cur; struct ftver ftv; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&ftch_recc32, sizeof ftch_recc32); bzero(&total, sizeof total); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_c32), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; if (!cur.packets) { fprintf(stderr, "Ignoring bogus flow dPkts=0\n"); continue; } ftch_recc32.c32 = cur.octets / cur.packets; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); if (!(ftch_recc32p = ftchash_update(ftch, &ftch_recc32, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recc32p); } chash_c32_dump(ftch, args->cc, args->sort_order, args->options, &total, "Pkt Size", (char*)0L); ftchash_free(ftch); return 0; } /* format1 */ /* * function: format2 * * Packets per flow distribution histogram * * returns 0 for success. */ int format2(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_c32 ftch_recc32, *ftch_recc32p; struct fopd32 cur; struct ftver ftv; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&ftch_recc32, sizeof ftch_recc32); bzero(&total, sizeof total); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recc32.c32 = cur.packets; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); if (!(ftch_recc32p = ftchash_update(ftch, &ftch_recc32, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recc32p); } chash_c32_dump(ftch, args->cc, args->sort_order, args->options, &total, "Packets ", (char*)0L); ftchash_free(ftch); return 0; } /* format2 */ /* * function: format3 * * Octets per flow flow distribution histogram * * returns 0 for success. */ int format3(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftchash *ftch; struct ftchash_rec_c32 ftch_recc32, *ftch_recc32p; struct ftver ftv; struct fopd total; char *rec; u_int32 hash; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&ftch_recc32, sizeof ftch_recc32); bzero(&total, sizeof total); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_c32), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recc32.c32 = cur.octets; hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); if (!(ftch_recc32p = ftchash_update(ftch, &ftch_recc32, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recc32p); } chash_c32_dump(ftch, args->cc, args->sort_order, args->options, &total, "Octets ", (char*)0L); ftchash_free(ftch); return 0; } /* format3 */ /* * function: format4 * * ?? * */ int format4(struct fmtargs *args) { printf("Not implemented.\n"); return 0; } /* * function: format5 * * UDP/TCP destination port flows,octets,packets,duration histogram * * returns 0 for success. */ int format5(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct fopdi stat; struct fopd total; char *rec; u_int8 prot; u_int16 dstport; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_PROT | FT_XFIELD_DSTPORT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { prot = *((u_int8*)(rec+fo.prot)); /* ports only make sense for TCP and UDP */ if ((prot != IPPROTO_UDP) && (prot != IPPROTO_TCP)) continue; CUR_GET_PLUS_FLOWS; TOTAL_INC; dstport = *((u_int16*)(rec+fo.dstport)); STAT_INCA(dstport); } /* while */ tbl_out1(args, 65536, &stat, &total, "port ", FT_PATH_SYM_TCP_PORT); fopdi_free(&stat); return 0; } /* format5 */ /* * function: format6 * * UDP/TCP source port flows,octets,packets,duration * * returns 0 for success. */ int format6(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct fopdi stat; struct fopd total; struct ftver ftv; char *rec; u_int8 prot; u_int16 srcport; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_PROT | FT_XFIELD_SRCPORT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { prot = *((u_int8*)(rec+fo.prot)); /* ports only make sense for TCP and UDP */ if ((prot != IPPROTO_UDP) && (prot != IPPROTO_TCP)) continue; CUR_GET_PLUS_FLOWS; TOTAL_INC; srcport = *((u_int16*)(rec+fo.srcport)); STAT_INCA(srcport); } /* while */ tbl_out1(args, 65536, &stat, &total, "port ", FT_PATH_SYM_TCP_PORT); fopdi_free(&stat); return 0; } /* format6 */ /* * function: format7 * * UDP/TCP port flows,octets,packets,duration histogram * * returns 0 for success. */ int format7(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct fopdi stat; struct fopd total; char *rec; u_int8 prot; u_int16 srcport, dstport; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_PROT | FT_XFIELD_SRCPORT | FT_XFIELD_DSTPORT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { prot = *((u_int8*)(rec+fo.prot)); /* ports only make sense for TCP and UDP */ if ((prot != IPPROTO_UDP) && (prot != IPPROTO_TCP)) continue; CUR_GET_PLUS_FLOWS; TOTAL_INC; TOTAL_INC; srcport = *((u_int16*)(rec+fo.srcport)); dstport = *((u_int16*)(rec+fo.dstport)); STAT_INCA(srcport); STAT_INCA(dstport); } tbl_out1(args, 65536, &stat, &total, "port ", FT_PATH_SYM_TCP_PORT); fopdi_free(&stat); return 0; } /* format7 */ /* * function: format8 * * Destination IP flows,octets,packets,duration * * returns 0 for success. */ int format8(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct ftchash *ftch; struct ftchash_rec_ip ftch_recip, *ftch_recipp; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_DSTADDR)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recip, sizeof ftch_recip); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recip.addr = *((u_int32*)(rec+fo.dstaddr)); hash = (ftch_recip.addr>>16) ^ (ftch_recip.addr & 0xFFFF); if (!(ftch_recipp = ftchash_update(ftch, &ftch_recip, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recipp); } chash_ip_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format8 */ /* * function: format9 * * Source IP flows,octets,packets,duration * * returns 0 for success. */ int format9(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct ftchash *ftch; struct ftchash_rec_ip ftch_recip, *ftch_recipp; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCADDR)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recip, sizeof ftch_recip); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recip.addr = *((u_int32*)(rec+fo.srcaddr)); hash = (ftch_recip.addr>>16) ^ (ftch_recip.addr & 0xFFFF); if (!(ftch_recipp = ftchash_update(ftch, &ftch_recip, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recipp); } chash_ip_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format9 */ /* * function: format10 * * Source/Destination IP flows,octets,packets,duration * * returns 0 for success. */ int format10(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct ftchash *ftch; struct ftchash_rec_ip2 ftch_recip2, *ftch_recip2p; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recip2, sizeof ftch_recip2); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip2), 8, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recip2.src_addr = *((u_int32*)(rec+fo.srcaddr)); ftch_recip2.dst_addr = *((u_int32*)(rec+fo.dstaddr)); hash = (ftch_recip2.src_addr>>16) ^ (ftch_recip2.src_addr & 0xFFFF) ^ (ftch_recip2.dst_addr>>16) ^ (ftch_recip2.dst_addr & 0xFFFF); if (!(ftch_recip2p = ftchash_update(ftch, &ftch_recip2, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recip2p); } chash_ip2_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format10 */ /* * function: format11 * * IP flows,octets,packets,duration * * returns 0 for success. */ int format11(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftchash *ftch; struct ftchash_rec_ip ftch_recip, *ftch_recipp; struct ftver ftv; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recip, sizeof ftch_recip); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recip.addr = *((u_int32*)(rec+fo.srcaddr)); hash = (ftch_recip.addr>>16) ^ (ftch_recip.addr & 0xFFFF); if (!(ftch_recipp = ftchash_update(ftch, &ftch_recip, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recipp); ftch_recip.addr = *((u_int32*)(rec+fo.dstaddr)); hash = (ftch_recip.addr>>16) ^ (ftch_recip.addr & 0xFFFF); if (!(ftch_recipp = ftchash_update(ftch, &ftch_recip, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recipp); } chash_ip_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* * function: format12 * * flows,octets,packets,duration by IP protocol * * returns 0 for success. */ int format12(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct fopdi stat; struct fopd total; char *rec; u_int8 prot; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_PROT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 256) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; prot = *((u_int8*)(rec+fo.prot)); STAT_INCA(prot); } tbl_out1(args, 256, &stat, &total, "protocol ", FT_PATH_SYM_IP_PROT); fopdi_free(&stat); return 0; } /* format12 */ /* * function: format13 * * octets for flow duration plot data * * returns 0 for success. */ int format13(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; u_long ymin, ymax; u_long xmin, xmax; u_int32 First, Last; u_int64 nflows; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); nflows = 0; xmin = ymin = 0xFFFFFFFF; xmax = ymax = 0; printf("%c\n%c start octets\n%c end octets\n%c\n", args->cc, args->cc, args->cc, args->cc); while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; Last = *((u_int32*)(rec+fo.Last)); First = *((u_int32*)(rec+fo.First)); ++nflows; if (Last > xmax) xmax = Last; if (First < xmin) xmin = First; if (cur.octets > ymax) ymax = cur.octets; if (cur.octets < ymin) ymin = cur.octets; printf("%-10lu %-10lu\n", (u_long)First, (u_long)cur.octets); printf("%-10lu %-10lu\n\n", (u_long)Last, (u_long)cur.octets); } printf("%c xmin=%-10lu ymin=%-10lu xmax=%-10lu ymax=%-10lu\n", args->cc, xmin, ymin, xmax, ymax); return 0; } /* format13 */ /* * function: format14 * * octets for flow duration plot data * * returns 0 for success. */ int format14(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; u_long ymin, ymax; u_long xmin, xmax; u_int64 nflows; u_int32 First, Last; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); nflows = 0; xmin = ymin = 0xFFFFFFFF; xmax = ymax = 0; printf("%c\n%c start packets\n%c end packets\n%c\n", args->cc, args->cc, args->cc, args->cc); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; Last = *((u_int32*)(rec+fo.Last)); First = *((u_int32*)(rec+fo.First)); if (Last > xmax) xmax = Last; if (First < xmin) xmin = First; if (cur.octets > ymax) ymax = cur.packets; if (cur.octets < ymin) ymin = cur.packets; printf("%-10lu %-10lu\n", (u_long)First, (u_long)cur.packets); printf("%-10lu %-10lu\n\n", (u_long)Last, (u_long)cur.packets); } printf("%c xmin=%-10lu ymin=%-10lu xmax=%-10lu ymax=%-10lu\n", args->cc, xmin, ymin, xmax, ymax); return 0; } /* format14 */ /* * function: format15 * * short summary * * returns 0 for success. */ int format15(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; double mbytes; char fmt_buf[256]; u_int len; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; } mbytes = (double)total.octets / (double)(1000000); printf("%c\n%c Octets Packets MBytes\n%c\n", args->cc, args->cc, args->cc); len = fmt_uint64(fmt_buf, total.octets, FMT_PAD_RIGHT); len += fmt_uint64(fmt_buf+len, total.packets, FMT_PAD_RIGHT); printf("%s%3.3f\n", fmt_buf, mbytes); return 0; } /* format15 */ /* * function: format16 * * Next hop flows,octets,packets,duration * * returns 0 for success. */ int format16(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopd32 cur; struct ftver ftv; struct ftchash *ftch; struct ftchash_rec_ip ftch_recip, *ftch_recipp; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST| FT_XFIELD_NEXTHOP)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recip, sizeof ftch_recip); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recip.addr = *((u_int32*)(rec+fo.nexthop)); hash = (ftch_recip.addr>>16) ^ (ftch_recip.addr & 0xFFFF); if (!(ftch_recipp = ftchash_update(ftch, &ftch_recip, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recipp); } chash_ip_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format16 */ /* * function: format17 * * input interface flows,octets,packets,duration * * returns 0 for success. */ int format17(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_int16 input; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; input = *((u_int16*)(rec+fo.input)); STAT_INCA(input); } /* doesn't make sense here */ args->options &= ~FT_OPT_NAMES; tbl_out1(args, 65536, &stat, &total, "interface ", (void*)0L); fopdi_free(&stat); return 0; } /* format17 */ /* * function: format18 * * output interface flows,octets,packets,duration * * returns 0 for success. */ int format18(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_int16 output; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_OUTPUT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; output = *((u_int16*)(rec+fo.output)); STAT_INCA(output); } /* doesn't make sense here */ args->options &= ~FT_OPT_NAMES; tbl_out1(args, 65536, &stat, &total, "interface ", (void*)0L); fopdi_free(&stat); return 0; } /* format18 */ /* * function: format19 * * Source AS flows,octets,packets,duration * * returns 0 for success. */ int format19(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_int16 src_as; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRC_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; src_as = *((u_int16*)(rec+fo.src_as)); STAT_INCA(src_as); } tbl_out1(args, 65536, &stat, &total, "src AS ", FT_PATH_SYM_ASN); fopdi_free(&stat); return 0; } /* format19 */ /* * function: format20 * * Destination AS flows,octets,packets,duration * * returns 0 for success. */ int format20(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_int16 dst_as; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_DST_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 65536) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; dst_as = *((u_int16*)(rec+fo.dst_as)); STAT_INCA(dst_as); } tbl_out1(args, 65536, &stat, &total, "dst AS ", FT_PATH_SYM_ASN); fopdi_free(&stat); return 0; } /* format20 */ /* * function: format21 * * Source/Destination AS flows,octets,packets,duration * * returns 0 for success. */ int format21(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash_rec_as2 ftch_recas2, *ftch_recas2p; struct ftchash *ftch; struct ftver ftv; struct fopd total; struct fopd32 cur; u_long hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_DST_AS | FT_XFIELD_SRC_AS)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recas2, sizeof ftch_recas2); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_as2), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; ftch_recas2.src_as = *((u_int16*)(rec+fo.src_as)); ftch_recas2.dst_as = *((u_int16*)(rec+fo.dst_as)); hash = (ftch_recas2.src_as) ^ (ftch_recas2.dst_as); if (!(ftch_recas2p = ftchash_update(ftch, &ftch_recas2, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recas2p); } chash_as2_dump(ftch, args->cc, args->sort_order, args->options, &total, FT_PATH_SYM_ASN); ftchash_free(ftch); return 0; } /* format21 */ /* * function: format22 * * flows,octets,packets,duration by IP ToS * * returns 0 for success. */ int format22(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_int8 tos; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_TOS)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 256) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { tos = *((u_int8*)(rec+fo.tos)); CUR_GET_PLUS_FLOWS; TOTAL_INC; STAT_INCA(tos); } tbl_out1(args, 256, &stat, &total, "ToS ", (void*)0L); fopdi_free(&stat); return 0; } /* format22 */ /* * function: format23 * * Input/Output Interface flows,octets,packets,duration * * returns 0 for success. */ int format23(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash_rec_if2 ftch_recif2, *ftch_recif2p; struct ftchash *ftch; struct ftver ftv; struct fopd total; struct fopd32 cur; u_long hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_OUTPUT | FT_XFIELD_INPUT)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recif2, sizeof ftch_recif2); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_if2), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { ftch_recif2.input = *((u_int16*)(rec+fo.input)); ftch_recif2.output = *((u_int16*)(rec+fo.output)); hash = (ftch_recif2.input) ^ (ftch_recif2.output); if (!(ftch_recif2p = ftchash_update(ftch, &ftch_recif2, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } CUR_GET_PLUS_FLOWS; TOTAL_INC; STAT_INCP(ftch_recif2p); } chash_if2_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format23 */ /* * function: format24 * * Source prefix flows,octets,packets,duration * * returns 0 for success. */ int format24(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_prefix ftch_recpre, *ftch_recprep; struct fopd total; struct fopd32 cur; struct ftver ftv; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCADDR | FT_XFIELD_SRC_MASK)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recpre, sizeof ftch_recpre); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_prefix), 5, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { ftch_recpre.prefix = *((u_int32*)(rec+fo.srcaddr)); ftch_recpre.mask = *((u_char*)(rec+fo.src_mask)); /* mask off host bits */ ftch_recpre.prefix &= ipv4_len2mask(ftch_recpre.mask); hash = (ftch_recpre.prefix>>16) ^ (ftch_recpre.prefix & 0xFFFF); hash = hash ^ (ftch_recpre.mask); if (!(ftch_recprep = ftchash_update(ftch, &ftch_recpre, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } CUR_GET_PLUS_FLOWS; TOTAL_INC; STAT_INCP(ftch_recprep); } chash_pre_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format24 */ /* * function: format25 * * Destination prefix flows,octets,packets,duration * * returns 0 for success. */ int format25(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_prefix ftch_recpre, *ftch_recprep; struct fopd total; struct fopd32 cur; struct ftver ftv; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_DSTADDR | FT_XFIELD_DST_MASK)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recpre, sizeof ftch_recpre); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_prefix), 5, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { ftch_recpre.prefix = *((u_int32*)(rec+fo.dstaddr)); ftch_recpre.mask = *((u_char*)(rec+fo.dst_mask)); /* mask off host bits */ ftch_recpre.prefix &= ipv4_len2mask(ftch_recpre.mask); hash = (ftch_recpre.prefix>>16) ^ (ftch_recpre.prefix & 0xFFFF); hash = hash ^ (ftch_recpre.mask); if (!(ftch_recprep = ftchash_update(ftch, &ftch_recpre, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } CUR_GET_PLUS_FLOWS; TOTAL_INC; STAT_INCP(ftch_recprep); } chash_pre_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format25 */ /* * function: format26 * * Source/Destination prefix flows,octets,packets,duration * * returns 0 for success. */ int format26(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_prefix2 ftch_recpre2, *ftch_recpre2p; struct fopd total; struct fopd32 cur; struct ftver ftv; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRCADDR | FT_XFIELD_DSTADDR | FT_XFIELD_SRC_MASK | FT_XFIELD_DST_MASK)) { fterr_warnx("Flow record missing required field for format."); return -1; } bzero(&total, sizeof total); bzero(&ftch_recpre2, sizeof ftch_recpre2); fts3rec_compute_offsets(&fo, &ftv); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_prefix2), 16, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { ftch_recpre2.src_prefix = *((u_int32*)(rec+fo.srcaddr)); ftch_recpre2.src_mask = *((u_char*)(rec+fo.src_mask)); ftch_recpre2.dst_prefix = *((u_int32*)(rec+fo.dstaddr)); ftch_recpre2.dst_mask = *((u_char*)(rec+fo.dst_mask)); /* mask off host bits */ ftch_recpre2.src_prefix &= ipv4_len2mask(ftch_recpre2.src_mask); ftch_recpre2.dst_prefix &= ipv4_len2mask(ftch_recpre2.dst_mask); hash = (ftch_recpre2.src_prefix>>16)^ (ftch_recpre2.src_prefix & 0xFFFF)^ (ftch_recpre2.dst_prefix>>16)^ (ftch_recpre2.dst_prefix & 0xFFFF)^ (ftch_recpre2.src_mask)^ (u_int32)(ftch_recpre2.dst_mask<<8); if (!(ftch_recpre2p = ftchash_update(ftch, &ftch_recpre2, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } CUR_GET_PLUS_FLOWS; TOTAL_INC; STAT_INCP(ftch_recpre2p); } chash_pre2_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* format26 */ /* * function: format27 * * Exporter IP flows,octets,packets,duration * * returns 0 for success. */ int format27(struct fmtargs *args) { struct ftchash *ftch; struct ftchash_rec_ip ftch_recip, *ftch_recipp; struct fts3rec_offsets fo; struct fopd total; struct fopd32 cur; struct ftver ftv; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_EXADDR)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&total, sizeof total); bzero(&ftch_recip, sizeof ftch_recip); cur.flows = 1; if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_ip), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } while ((rec = ftio_read(&args->ftio))) { ftch_recip.addr = *((u_int32*)(rec+fo.exaddr)); hash = (ftch_recip.addr>>16) ^ (ftch_recip.addr & 0xFFFF); if (!(ftch_recipp = ftchash_update(ftch, &ftch_recip, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } CUR_GET_PLUS_FLOWS; TOTAL_INC; STAT_INCP(ftch_recipp); } /* while */ chash_ip_dump(ftch, args->cc, args->sort_order, args->options, &total); ftchash_free(ftch); return 0; } /* * function: format28 * * flows,octets,packets,duration by engine_id * * returns 0 for success. */ int format28(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_char engine_id; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_ENGINE_ID)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 256) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; engine_id = *((u_char*)(rec+fo.engine_id)); STAT_INCA(engine_id); } tbl_out1(args, 256, &stat, &total, "engine_id ", (void*)0L); fopdi_free(&stat); return 0; } /* format28 */ /* * function: format29 * * flows,octets,packets,duration by engine_type * * returns 0 for success. */ int format29(struct fmtargs *args) { struct fts3rec_offsets fo; struct fopdi stat; struct fopd total; struct fopd32 cur; struct ftver ftv; char *rec; u_char engine_type; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_ENGINE_TYPE)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); if (fopdi_alloc(&stat, 256) < 0) return -1; bzero(&total, sizeof total); cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET_PLUS_FLOWS; TOTAL_INC; engine_type = *((u_char*)(rec+fo.engine_type)); STAT_INCA(engine_type); } tbl_out1(args, 256, &stat, &total, "engine_type ", (void*)0L); fopdi_free(&stat); return 0; } /* format29 */ /* * function: format30 * * flows,octets,packets,duration by src_tag * * returns 0 for success. */ int format30(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_c32 ftch_recc32, *ftch_recc32p; struct fopd32 cur; struct ftver ftv; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRC_TAG)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&ftch_recc32, sizeof ftch_recc32); bzero(&total, sizeof total); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_c32), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET; TOTAL_INC; ftch_recc32.c32 = *((u_int32*)(rec+fo.src_tag)); hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); if (!(ftch_recc32p = ftchash_update(ftch, &ftch_recc32, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recc32p); } /* while */ chash_c32_dump(ftch, args->cc, args->sort_order, args->options, &total, "Src Tag ", FT_PATH_SYM_TAG); ftchash_free(ftch); return 0; } /* format30 */ /* * function: format31 * * flows,octets,packets,duration by dst_tag * * returns 0 for success. */ int format31(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_c32 ftch_recc32, *ftch_recc32p; struct fopd32 cur; struct ftver ftv; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_DST_TAG)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&ftch_recc32, sizeof ftch_recc32); bzero(&total, sizeof total); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_c32), 4, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET; TOTAL_INC; ftch_recc32.c32 = *((u_int32*)(rec+fo.dst_tag)); hash = (ftch_recc32.c32>>16) ^ (ftch_recc32.c32 & 0xFFFF); if (!(ftch_recc32p = ftchash_update(ftch, &ftch_recc32, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recc32p); } /* while */ chash_c32_dump(ftch, args->cc, args->sort_order, args->options, &total, "Dst Tag ", FT_PATH_SYM_TAG); ftchash_free(ftch); return 0; } /* format31 */ /* * function: format32 * * flows,octets,packets,duration by src/dst_tag * * returns 0 for success. */ int format32(struct fmtargs *args) { struct fts3rec_offsets fo; struct ftchash *ftch; struct ftchash_rec_c322 ftch_recc322, *ftch_recc322p; struct fopd32 cur; struct ftver ftv; struct fopd total; u_int32 hash; char *rec; ftio_get_ver(&args->ftio, &ftv); if (ftio_check_xfield(&args->ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_SRC_TAG | FT_XFIELD_DST_TAG)) { fterr_warnx("Flow record missing required field for format."); return -1; } fts3rec_compute_offsets(&fo, &ftv); bzero(&ftch_recc322, sizeof ftch_recc322); bzero(&total, sizeof total); if (!(ftch = ftchash_new(65536, sizeof (struct ftchash_rec_c322), 8, 65536))) { fterr_warnx("ftchash_new(): failed"); return -1; } cur.flows = 1; while ((rec = ftio_read(&args->ftio))) { CUR_GET; TOTAL_INC; ftch_recc322.c32a = *((u_int32*)(rec+fo.src_tag)); ftch_recc322.c32b = *((u_int32*)(rec+fo.dst_tag)); hash = (ftch_recc322.c32a>>16) ^ (ftch_recc322.c32a & 0xFFFF) ^ (ftch_recc322.c32b>>16) ^ (ftch_recc322.c32b & 0xFFFF); if (!(ftch_recc322p = ftchash_update(ftch, &ftch_recc322, hash))) { fterr_warnx("ftch_update(): failed"); ftchash_free(ftch); return -1; } STAT_INCP(ftch_recc322p); } /* while */ chash_c322_dump(ftch, args->cc, args->sort_order, args->options, &total, "Src Tag ", "Dst Tag ", FT_PATH_SYM_TAG); ftchash_free(ftch); return 0; } /* format32 */ int chash_ip_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total) { struct ftchash_rec_ip *ftch_recip; char fmt_buf[256]; int len, sort_flags, sort_offset; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_ip, addr); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_ip, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_ip, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_ip, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_ip, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c IPaddr flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c IPaddr flows octets packets\n%c\n", cc, cc, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c IPaddr flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c IPaddr flows octets packets\n%c\n", cc, cc, cc); } ftchash_first(ftch); while ((ftch_recip = ftchash_foreach(ftch))) { if (options & FT_OPT_PERCENT) { fmt_ipv4(fmt_buf, ftch_recip->addr, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) printf("%-15.15s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recip->nflows/(double)total->flows)*100, ((double)ftch_recip->noctets/(double)total->octets)*100, ((double)ftch_recip->npackets/(double)total->packets)*100, ((double)ftch_recip->etime/(double)total->duration)*100); else printf("%-15.15s %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recip->nflows/(double)total->flows)*100, ((double)ftch_recip->noctets/(double)total->octets)*100, ((double)ftch_recip->npackets/(double)total->packets)*100); } else { len = fmt_ipv4(fmt_buf, ftch_recip->addr, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; if (options & FT_OPT_WIDE) { len += fmt_uint64(fmt_buf+len, ftch_recip->npackets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip->etime, FMT_JUST_LEFT); } else fmt_uint64(fmt_buf+len, ftch_recip->npackets, FMT_JUST_LEFT); puts(fmt_buf); } } return 0; } /* chash_ip_dump */ int chash_ip2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total) { struct ftchash_rec_ip2 *ftch_recip2; char fmt_buf[256]; int len, sort_flags, sort_offset; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_ip2, src_addr); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_ip2, dst_addr); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_ip2, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_ip2, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_ip2, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 6) || (sort_order == -6)) { sort_offset = offsetof(struct ftchash_rec_ip2, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c src IPaddr dst IPaddr flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c src IPaddr dst IPaddr flows octets packets\n%c\n", cc, cc, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c src IPaddr dst IPaddr flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c src IPaddr dst IPaddr flows octets packets\n%c\n", cc, cc, cc); } ftchash_first(ftch); while ((ftch_recip2 = ftchash_foreach(ftch))) { if (options & FT_OPT_PERCENT) { len = fmt_ipv4(fmt_buf, ftch_recip2->src_addr, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; fmt_ipv4(fmt_buf+len, ftch_recip2->dst_addr, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) printf("%-32.32s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recip2->nflows/(double)total->flows)*100, ((double)ftch_recip2->noctets/(double)total->octets)*100, ((double)ftch_recip2->npackets/(double)total->packets)*100, ((double)ftch_recip2->etime/(double)total->duration)*100); else printf("%-32.32s %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recip2->nflows/(double)total->flows)*100, ((double)ftch_recip2->noctets/(double)total->octets)*100, ((double)ftch_recip2->npackets/(double)total->packets)*100); } else { len = fmt_ipv4(fmt_buf, ftch_recip2->src_addr, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_ipv4(fmt_buf+len, ftch_recip2->dst_addr, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip2->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip2->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip2->npackets, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) { fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recip2->etime, FMT_JUST_LEFT); } puts(fmt_buf); } } return 0; } /* chash_ip2_dump */ int chash_as2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total, char *symfile) { struct ftchash_rec_as2 *ftch_recas2; struct ftsym *ftsym; char fmt_buf[256], fmt_buf1[64], fmt_buf2[64]; int len, sort_flags, sort_offset; ftsym = (struct ftsym*)0L; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_as2, src_as); sort_flags |= FT_CHASH_SORT_16; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_as2, dst_as); sort_flags |= FT_CHASH_SORT_16; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_as2, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_as2, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_as2, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 6) || (sort_order == -6)) { sort_offset = offsetof(struct ftchash_rec_as2, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_NAMES) ftsym = ftsym_new(symfile); if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c src AS dst AS flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c src AS dst AS flows octets packets\n%c\n", cc, cc, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c src AS dst AS flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c src AS dst AS flows octets packets\n%c\n", cc, cc, cc); } ftchash_first(ftch); while ((ftch_recas2 = ftchash_foreach(ftch))) { fmt_uint16s(ftsym, 18, fmt_buf1, (u_int16)ftch_recas2->src_as, FMT_PAD_RIGHT); fmt_uint16s(ftsym, 18, fmt_buf2, (u_int16)ftch_recas2->dst_as, FMT_PAD_RIGHT); if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%-16.16s %-16.16s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf1, fmt_buf2, ((double)ftch_recas2->nflows/(double)total->flows)*100, ((double)ftch_recas2->noctets/(double)total->octets)*100, ((double)ftch_recas2->npackets/(double)total->packets)*100, ((double)ftch_recas2->etime/(double)total->duration)*100); else printf("%-16.16s %-16.16s %-6.3f %-6.3f %-6.3f\n", fmt_buf1, fmt_buf2, ((double)ftch_recas2->nflows/(double)total->flows)*100, ((double)ftch_recas2->noctets/(double)total->octets)*100, ((double)ftch_recas2->npackets/(double)total->packets)*100); } else { len = fmt_uint64(fmt_buf, ftch_recas2->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recas2->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recas2->npackets, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) { fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recas2->etime, FMT_JUST_LEFT); } printf("%-16.16s %-16.16s %s\n", fmt_buf1, fmt_buf2, fmt_buf); } } ftsym_free(ftsym); return 0; } /* chash_as2_dump */ int chash_if2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total) { struct ftchash_rec_if2 *ftch_recif2; char fmt_buf[256]; int len, sort_flags, sort_offset; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_if2, input); sort_flags |= FT_CHASH_SORT_16; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_if2, output); sort_flags |= FT_CHASH_SORT_16; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_if2, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_if2, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_if2, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 6) || (sort_order == -6)) { sort_offset = offsetof(struct ftchash_rec_if2, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c in out flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c in out flows octets packets\n%c\n", cc, cc, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c in out flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c in out flows octets packets\n%c\n", cc, cc, cc); } ftchash_first(ftch); while ((ftch_recif2 = ftchash_foreach(ftch))) { if (options & FT_OPT_PERCENT) { len = fmt_uint16(fmt_buf, ftch_recif2->input, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint16(fmt_buf+len, ftch_recif2->output, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) printf("%s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recif2->nflows/(double)total->flows)*100, ((double)ftch_recif2->noctets/(double)total->octets)*100, ((double)ftch_recif2->npackets/(double)total->packets)*100, ((double)ftch_recif2->etime/(double)total->duration)*100); else printf("%s %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recif2->nflows/(double)total->flows)*100, ((double)ftch_recif2->noctets/(double)total->octets)*100, ((double)ftch_recif2->npackets/(double)total->packets)*100); } else { len = fmt_uint16(fmt_buf, ftch_recif2->input, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint16(fmt_buf+len, ftch_recif2->output, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recif2->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recif2->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recif2->npackets, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) { fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recif2->etime, FMT_JUST_LEFT); } puts(fmt_buf); } } return 0; } /* chash_if2_dump */ int chash_pre_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total) { struct ftchash_rec_prefix *ftch_recpre; char fmt_buf[256]; int len, sort_flags, sort_offset; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_prefix, prefix); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_prefix, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_prefix, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_prefix, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_prefix, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c Source Prefix flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c Source Prefix flows octets packets\n%c\n", cc, cc, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c Source Prefix flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c Source Prefix flows octets packets\n%c\n", cc, cc, cc); } ftchash_first(ftch); while ((ftch_recpre = ftchash_foreach(ftch))) { if (options & FT_OPT_PERCENT) { fmt_ipv4prefix(fmt_buf, ftch_recpre->prefix, ftch_recpre->mask, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) printf("%-18.18s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recpre->nflows/(double)total->flows)*100, ((double)ftch_recpre->noctets/(double)total->octets)*100, ((double)ftch_recpre->npackets/(double)total->packets)*100, ((double)ftch_recpre->etime/(double)total->duration)*100); else printf("%-18.18s %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recpre->nflows/(double)total->flows)*100, ((double)ftch_recpre->noctets/(double)total->octets)*100, ((double)ftch_recpre->npackets/(double)total->packets)*100); } else { len = fmt_ipv4prefix(fmt_buf, ftch_recpre->prefix, ftch_recpre->mask, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recpre->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recpre->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; if (options & FT_OPT_WIDE) { len += fmt_uint64(fmt_buf+len, ftch_recpre->npackets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recpre->etime, FMT_JUST_LEFT); } else fmt_uint64(fmt_buf+len, ftch_recpre->npackets, FMT_JUST_LEFT); puts(fmt_buf); } } return 0; } /* chash_pre_dump */ int chash_pre2_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total) { struct ftchash_rec_prefix2 *ftch_recpre2; char fmt_buf[256]; int len, sort_flags, sort_offset; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_prefix2, src_prefix); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_prefix2, dst_prefix); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_prefix2, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_prefix2, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_prefix2, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 6) || (sort_order == -6)) { sort_offset = offsetof(struct ftchash_rec_prefix2, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c Source Prefix Destination Prefix flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c Source Prefix Destination Prefix flows octets packets\n%c\n", cc, cc, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c Source Prefix Destination Prefix flows octets packets duration\n%c\n", cc, cc, cc); else printf("%c\n%c Source Prefix Destination Prefix flows octets packets\n%c\n", cc, cc, cc); } ftchash_first(ftch); while ((ftch_recpre2 = ftchash_foreach(ftch))) { if (options & FT_OPT_PERCENT) { len = fmt_ipv4prefix(fmt_buf, ftch_recpre2->src_prefix, ftch_recpre2->src_mask, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; fmt_ipv4prefix(fmt_buf+len, ftch_recpre2->dst_prefix, ftch_recpre2->dst_mask, FMT_PAD_RIGHT); if (options & FT_OPT_WIDE) printf("%-38.38s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recpre2->nflows/(double)total->flows)*100, ((double)ftch_recpre2->noctets/(double)total->octets)*100, ((double)ftch_recpre2->npackets/(double)total->packets)*100, ((double)ftch_recpre2->etime/(double)total->duration)*100); else printf("%-38.38s %-6.3f %-6.3f %-6.3f\n", fmt_buf, ((double)ftch_recpre2->nflows/(double)total->flows)*100, ((double)ftch_recpre2->noctets/(double)total->octets)*100, ((double)ftch_recpre2->npackets/(double)total->packets)*100); } else { len = fmt_ipv4prefix(fmt_buf, ftch_recpre2->src_prefix, ftch_recpre2->src_mask, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_ipv4prefix(fmt_buf+len, ftch_recpre2->dst_prefix, ftch_recpre2->dst_mask, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recpre2->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recpre2->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; if (options & FT_OPT_WIDE) { len += fmt_uint64(fmt_buf+len, ftch_recpre2->npackets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recpre2->etime, FMT_JUST_LEFT); } else fmt_uint64(fmt_buf+len, ftch_recpre2->npackets, FMT_JUST_LEFT); puts(fmt_buf); } } return 0; } /* chash_pre2_dump */ /* * function fopdi_free() * * free resources allocated to struct fopdi * */ void fopdi_free(struct fopdi *fopdi) { if (fopdi->flows) free(fopdi->flows); if (fopdi->octets) free(fopdi->octets); if (fopdi->packets) free(fopdi->packets); if (fopdi->duration) free(fopdi->duration); } /* fopdi_free */ /* * function fopdi_alloc * * alloc n entries for each member * * returns 0 for success */ int fopdi_alloc(struct fopdi *fopdi, int n) { register int i; if (!(fopdi->flows = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(fopdi):"); return -1; } if (!(fopdi->octets = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(fopdi):"); free(fopdi->flows); return -1; } if (!(fopdi->packets = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(fopdi):"); free(fopdi->flows); free(fopdi->octets); return -1; } if (!(fopdi->duration = (u_int64*)malloc(n*sizeof(u_int64)))) { fterr_warn("malloc(fopdi):"); free(fopdi->flows); free(fopdi->octets); free(fopdi->packets); return -1; } if (!(fopdi->index = (u_int32*)malloc(n*sizeof(u_int32)))) { fterr_warn("malloc(fopdi):"); free(fopdi->flows); free(fopdi->octets); free(fopdi->duration); return -1; } bzero(fopdi->flows, n*sizeof(u_int64)); bzero(fopdi->octets, n*sizeof(u_int64)); bzero(fopdi->packets, n*sizeof(u_int64)); bzero(fopdi->duration, n*sizeof(u_int64)); for (i = 0; i < n; ++i) fopdi->index[i] = i; return 0; } /* fopdi_alloc */ int tbl_out1(struct fmtargs *args, u_int nindex, struct fopdi *stat, struct fopd *total, char *title, char *symfile) { struct ftsym *ftsym; struct fopd total2; char fmt_buf[256], fmt_buf2[64]; int32 i, start, end, increment, x; int s, len; u_int plines; u_int32 *index; s = abs(args->sort_order); x = 0; bzero(&total2, sizeof total2); index = stat->index; ftsym = (struct ftsym*)0L; if (s == 0) /* no sorting */ ; else if (s == 1) /* port */ ; else if (s == 2) { /* flows */ sort_i64 = stat->flows; qsort(stat->index, nindex, sizeof (u_int32), sort_cmp64); } else if (s == 3) { /* octets */ sort_i64 = stat->octets; qsort(stat->index, nindex, sizeof (u_int32), sort_cmp64); } else if (s == 4) { /* packets */ sort_i64 = stat->packets; qsort(stat->index, nindex, sizeof (u_int32), sort_cmp64); } else if (s == 5) { /* duration */ sort_i64 = stat->duration; qsort(stat->index, nindex, sizeof (u_int32), sort_cmp64); } else { fprintf(stderr, "%c can't sort on field %d.\n", args->cc, args->sort_order); return -1; } if (args->sort_order >= 0) start = nindex - 1, end = -1, increment = -1; else start = 0, end = nindex, increment = 1; /* load symbol table */ if (args->options & FT_OPT_NAMES) ftsym = ftsym_new(symfile); /* header */ if (args->options & FT_OPT_PERCENT) { if (args->options & FT_OPT_WIDE) printf("%c\n%c %-15.15sflows octets packets duration\n%c\n", args->cc, args->cc, title, args->cc); else printf("%c\n%c %-10.10sflows octets packets\n%c\n", args->cc, args->cc, title, args->cc); } else { if (args->options & FT_OPT_WIDE) printf("%c\n%c %-15.15sflows octets packets duration\n%c\n", args->cc, args->cc, title, args->cc); else printf("%c\n%c %-10.10sflows octets packets\n%c\n", args->cc, args->cc, title, args->cc); } /* * if FT_OPT_PERCENT and we're doing tallying, then the # of lines * that will be output needs to be known first */ for (i = start; i != end; i += increment) if (stat->flows[index[i]]) ++plines; for (i = start; i != end; i += increment) { if (stat->flows[index[i]]) { /* print a tally line ? */ if ( (args->options & FT_OPT_TALLY) && x && (!(x % args->tally))) { if (args->options & FT_OPT_PERCENT) { printf("%cSUB %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f\n", args->cc, ((double)x/(double)plines)*100, ((double)total2.flows/(double)total->flows)*100, ((double)total2.octets/(double)total->octets)*100, ((double)total2.packets/(double)total->packets)*100, ((double)total2.duration/(double)total->duration)*100); } /* options & FT_OPT_PERCENT */ } /* print tally */ fmt_uint16s(ftsym, 16, fmt_buf2, (u_int16)stat->index[i], FMT_JUST_LEFT); if (args->options & FT_OPT_PERCENT) { if (args->options & FT_OPT_WIDE) printf("%-15.15s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_buf2, ((double)stat->flows[index[i]]/(double)total->flows)*100, ((double)stat->octets[index[i]]/(double)total->octets)*100, ((double)stat->packets[index[i]]/(double)total->packets)*100, ((double)stat->duration[index[i]]/(double)total->duration)*100); else printf("%-10.10s %-6.3f %-6.3f %-6.3f\n", fmt_buf2, ((double)stat->flows[index[i]]/(double)total->flows)*100, ((double)stat->octets[index[i]]/(double)total->octets)*100, ((double)stat->packets[index[i]]/(double)total->packets)*100); } else { len = fmt_uint64(fmt_buf, stat->flows[index[i]], FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, stat->octets[index[i]], FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, stat->packets[index[i]], FMT_PAD_RIGHT); if (args->options & FT_OPT_WIDE) { fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, stat->duration[index[i]], FMT_JUST_LEFT); printf("%-15.15s %s\n", fmt_buf2, fmt_buf); } else { printf("%-10.10s %s\n", fmt_buf2, fmt_buf); } } total2.flows += stat->flows[index[i]]; total2.octets += stat->octets[index[i]]; total2.packets += stat->packets[index[i]]; total2.duration += stat->duration[index[i]]; ++x; } /* stat->flows[index[i]] */ } ftsym_free(ftsym); return 0; } /* tbl_out1 */ int chash_c32_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total, char *title, char *symfile) { struct ftsym *ftsym; struct ftchash_rec_c32 *ftch_recc32; char fmt_buf[256], fmt_buf2[64], *fmt_bufp; int len, sort_flags, sort_offset; ftsym = (struct ftsym*)0L; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_c32, c32); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_c32, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_c32, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_c32, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_c32, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c %s flows octets packets duration\n%c\n", cc, cc, title, cc); else printf("%c\n%c %s flows octets packets\n%c\n", cc, cc, title, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c %s flows octets packets duration\n%c\n", cc, cc, title, cc); else printf("%c\n%c %s flows octets packets\n%c\n", cc, cc, title, cc); } ftchash_first(ftch); if (options & FT_OPT_NAMES) { ftsym = ftsym_new(FT_PATH_SYM_TAG); } while ((ftch_recc32 = ftchash_foreach(ftch))) { if (options & FT_OPT_PERCENT) { if (options & FT_OPT_NAMES) { if (ftsym_findbyval(ftsym, ftch_recc32->c32, &fmt_bufp) != 1) { fmt_uint32(fmt_buf, ftch_recc32->c32, FMT_PAD_RIGHT); fmt_bufp = fmt_buf; } } else { fmt_uint32(fmt_buf, ftch_recc32->c32, FMT_PAD_RIGHT); fmt_bufp = fmt_buf; } if (options & FT_OPT_WIDE) printf("%-10.10s %-6.3f %-6.3f %-6.3f %-6.3f\n", fmt_bufp, ((double)ftch_recc32->nflows/(double)total->flows)*100, ((double)ftch_recc32->noctets/(double)total->octets)*100, ((double)ftch_recc32->npackets/(double)total->packets)*100, ((double)ftch_recc32->etime/(double)total->duration)*100); else printf("%-10.10s %-6.3f %-6.3f %-6.3f\n", fmt_bufp, ((double)ftch_recc32->nflows/(double)total->flows)*100, ((double)ftch_recc32->noctets/(double)total->octets)*100, ((double)ftch_recc32->npackets/(double)total->packets)*100); } else { if (options & FT_OPT_NAMES) { if (ftsym_findbyval(ftsym, ftch_recc32->c32, &fmt_bufp) != 1) { fmt_uint32(fmt_buf2, ftch_recc32->c32, FMT_PAD_RIGHT); fmt_bufp = fmt_buf2; } } else { fmt_uint32(fmt_buf2, ftch_recc32->c32, FMT_PAD_RIGHT); fmt_bufp = fmt_buf2; } len = fmt_uint64(fmt_buf, ftch_recc32->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recc32->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; if (options & FT_OPT_WIDE) { len += fmt_uint64(fmt_buf+len, ftch_recc32->npackets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recc32->etime, FMT_JUST_LEFT); printf("%-15.15s %s\n", fmt_bufp, fmt_buf); } else { fmt_uint64(fmt_buf+len, ftch_recc32->npackets, FMT_JUST_LEFT); printf("%-10.10s %s\n", fmt_bufp, fmt_buf); } } } ftsym_free(ftsym); return 0; } /* chash_c32_dump */ int chash_c322_dump (struct ftchash *ftch, char cc, int sort_order, int options, struct fopd *total, char *title, char *title2, char *symfile) { struct ftchash_rec_c322 *ftch_recc322; struct ftsym *ftsym; char fmt_buf[256], fmt_buf2[256], *fmt_buf_a, *fmt_buf_b; int len, sort_flags, sort_offset; ftsym = (struct ftsym*)0L; if (sort_order) { if (sort_order < 0) sort_flags = 0; else sort_flags = FT_CHASH_SORT_ASCENDING; if ((sort_order == 1) || (sort_order == -1)) { sort_offset = offsetof(struct ftchash_rec_c322, c32a); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 2) || (sort_order == -2)) { sort_offset = offsetof(struct ftchash_rec_c322, c32b); sort_flags |= FT_CHASH_SORT_32; } else if ((sort_order == 3) || (sort_order == -3)) { sort_offset = offsetof(struct ftchash_rec_c322, nflows); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 4) || (sort_order == -4)) { sort_offset = offsetof(struct ftchash_rec_c322, noctets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 5) || (sort_order == -5)) { sort_offset = offsetof(struct ftchash_rec_c322, npackets); sort_flags |= FT_CHASH_SORT_64; } else if ((sort_order == 6) || (sort_order == -6)) { sort_offset = offsetof(struct ftchash_rec_c322, etime); sort_flags |= FT_CHASH_SORT_64; } else { fprintf(stderr, "%c can't sort on field %d.\n", cc, sort_order); return -1; } ftchash_sort(ftch, sort_offset, sort_flags); } /* sorted? */ if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%c\n%c %s %s flows octets packets duration\n%c\n", cc, cc, title, title2, cc); else printf("%c\n%c %s %s flows octets packets\n%c\n", cc, cc, title, title2, cc); } else { if (options & FT_OPT_WIDE) printf("%c\n%c %s %s flows octets packets duration\n%c\n", cc, cc, title, title2, cc); else printf("%c\n%c %s %s flows octets packets\n%c\n", cc, cc, title, title2, cc); } ftchash_first(ftch); if (options & FT_OPT_NAMES) { ftsym = ftsym_new(FT_PATH_SYM_TAG); } while ((ftch_recc322 = ftchash_foreach(ftch))) { if (options & FT_OPT_NAMES) { if (ftsym_findbyval(ftsym, ftch_recc322->c32a, &fmt_buf_a) != 1) { fmt_uint32(fmt_buf, ftch_recc322->c32a, FMT_PAD_RIGHT); fmt_buf_a = fmt_buf; } if (ftsym_findbyval(ftsym, ftch_recc322->c32b, &fmt_buf_b) != 1) { fmt_uint32(fmt_buf2, ftch_recc322->c32b, FMT_PAD_RIGHT); fmt_buf_b = fmt_buf2; } } else { fmt_uint32(fmt_buf, ftch_recc322->c32a, FMT_PAD_RIGHT); fmt_buf_a = fmt_buf; fmt_uint32(fmt_buf2, ftch_recc322->c32b, FMT_PAD_RIGHT); fmt_buf_b = fmt_buf2; } printf("%-10.10s %-10.10s ", fmt_buf_a, fmt_buf_b); if (options & FT_OPT_PERCENT) { if (options & FT_OPT_WIDE) printf("%-6.3f %-6.3f %-6.3f %-6.3f\n", ((double)ftch_recc322->nflows/(double)total->flows)*100, ((double)ftch_recc322->noctets/(double)total->octets)*100, ((double)ftch_recc322->npackets/(double)total->packets)*100, ((double)ftch_recc322->etime/(double)total->duration)*100); else printf("%-6.3f %-6.3f %-6.3f\n", ((double)ftch_recc322->nflows/(double)total->flows)*100, ((double)ftch_recc322->noctets/(double)total->octets)*100, ((double)ftch_recc322->npackets/(double)total->packets)*100); } else { len = fmt_uint64(fmt_buf, ftch_recc322->nflows, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recc322->noctets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; if (options & FT_OPT_WIDE) { len += fmt_uint64(fmt_buf+len, ftch_recc322->npackets, FMT_PAD_RIGHT); fmt_buf[len++] = ' '; fmt_buf[len++] = ' '; len += fmt_uint64(fmt_buf+len, ftch_recc322->etime, FMT_JUST_LEFT); } else fmt_uint64(fmt_buf+len, ftch_recc322->npackets, FMT_JUST_LEFT); puts(fmt_buf); } } return 0; } /* chash_c322_dump */ static int sort_cmp64(const void *a, const void *b) { u_int32 l, r; l = *(u_int32*)a; r = *(u_int32*)b; if (sort_i64[l] < sort_i64[r]) return -1; if (sort_i64[l] > sort_i64[r]) return 1; return 0; } /* sort_cmp64 */ void usage(void) { static int first; int i; if (!first) { fprintf(stderr, "Usage: flow-stat [-hnpPw] [-d debug_level] [-f format] [-S sort_field]\n"); fprintf(stderr, " [-s sort_field] [-t tally_lines] [-T title]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); ++first; } else { fprintf(stderr, "Formats:\n"); for (i = 0; i < FORMATS; ++i) if (format_name[i][0]) fprintf(stderr, " %-2d %s\n", i, format_name[i]); } } /* usage */ flow-tools-0.68/src/flow-tag.c0000644000076600007660000001525507776323110011742 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-tag.c,v 1.16 2004/01/05 18:00:40 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; void usage(void); int main(int argc, char **argv) { struct ftio ftio_in, ftio_out; struct ftprof ftp; struct ftver ftv_in, ftv_out; struct ftset ftset; struct fts3rec_v1005 xl_rec; struct fts3rec_offsets fo; struct fttag fttag; struct fttag_def *ftd; struct ftvar ftvar; int i, keep_input_time; u_int32 total_flows, cap_start, cap_end; u_int32 time_start, time_end; char *tag_defs, *tag_active; char *rec_in, *rec_out; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv_in, sizeof ftv_in); bzero(&ftv_out, sizeof ftv_out); bzero(&fttag, sizeof fttag); bzero(&ftvar, sizeof ftvar); tag_defs = FT_PATH_CFG_TAG; tag_active = ""; total_flows = 0; keep_input_time = 0; /* init var binding */ if (ftvar_new(&ftvar) < 0) fterr_errx(1, "ftvar_new(): failed"); /* profile */ ftprof_start (&ftp); /* defaults + no compression */ ftset_init(&ftset, 0); while ((i = getopt(argc, argv, "b:C:d:h?kt:T:v:z:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'k': /* keep the start/end time from the input */ keep_input_time = 1; break; case 't': /* tag filename */ tag_defs = optarg; break; case 'T': /* active tags */ tag_active = optarg; break; case 'v': /* variable */ if (ftvar_pset(&ftvar, optarg) < 0) fterr_errx(1, "ftvar_pset(%s): failed", optarg); break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* read config file */ if (fttag_load(&fttag, &ftvar, tag_defs) < 0) fterr_errx(1, "fttag_load(): failed"); if (!(ftd = fttag_def_find(&fttag, tag_active))) fterr_errx(1, "fttag_def_find(): failed"); /* input is stdin */ if (ftio_init(&ftio_in, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); ftio_get_ver(&ftio_in, &ftv_in); /* need at least the v5 fields plus tags */ if (ftio_check_xfield(&ftio_in, FT_XFIELD_TAGGING_MASK)) fterr_errx(1, "Flow record missing required field for tagging."); /* output is stdout */ if (ftio_init(&ftio_out, 1, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* preserve start/end time from input stream? */ if (keep_input_time) { time_start = ftio_get_cap_start(&ftio_in); time_end = ftio_get_cap_end(&ftio_in); if (time_start && time_end) { ftio_set_preloaded(&ftio_out, 1); ftio_set_cap_time(&ftio_out, time_start, time_end); } } /* keep_input_time */ ftv_in.s_version = FT_IO_SVERSION; if (!ftv_out.set) bcopy(&ftv_in, &ftv_out, sizeof ftv_in); ftv_out.d_version = 1005; /* set the version information in the io stream */ if (ftio_set_ver(&ftio_out, &ftv_out) < 0) fterr_errx(1, "ftio_set_ver(): failed"); ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); ftio_set_cap_time(&ftio_out, cap_start, cap_end); ftio_set_flows_count(&ftio_out, total_flows); if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); fts3rec_compute_offsets(&fo, &ftv_in); rec_out = (void*)&xl_rec; while ((rec_in = ftio_read(&ftio_in))) { ++total_flows; /* make a v1005 rec */ if (ftv_in.d_version != 1005) ftrec_xlate(rec_in, &ftv_in, &xl_rec, &ftv_out); else rec_out = rec_in; /* tag evaluation */ fttag_def_eval(ftd, (struct fts3rec_v1005*)rec_out); if (ftio_write(&ftio_out, rec_out) < 0) fterr_errx(1, "ftio_write(): failed"); } /* while */ if (ftio_close(&ftio_out) < 0) fterr_errx(1, "ftio_close(): failed"); if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } fttag_free(&fttag); ftvar_free(&ftvar); return 0; } /* main */ void usage(void) { fprintf(stderr, "Usage: flow-tag [-hk] [-b big|little] [-C comment] [-d debug_level]\n"); fprintf(stderr, " [-t tag_fname ] [-T tag_active ] [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } /* usage */ flow-tools-0.68/src/flow-xlate.c0000644000076600007660000001661107776323110012301 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: flow-xlate.c,v 1.14 2004/01/05 18:00:40 maf Exp $ */ #include "ftconfig.h" #include #include #include #include #include #include #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #include "ftbuild.h" int debug; void usage(void); int main(int argc, char **argv) { struct ftio ftio_in, ftio_out; struct ftprof ftp; struct ftxlate ftxlate; struct ftxlate_def *ftfd; struct ftver ftv_in, ftv_out; struct ftset ftset; struct fts3rec_offsets fo; struct ftvar ftvar; char *rec, out_rec[FT_IO_MAXREC]; char *fname, *dname; unsigned int v1, v2; u_int32 total_flows, cap_start, cap_end; u_int32 time_start, time_end; int i, n, keep_input_time; int xlate_version; int no_config; /* init fterr */ fterr_setid(argv[0]); bzero(&ftv_in, sizeof ftv_in); bzero(&ftv_out, sizeof ftv_out); bzero(&ftvar, sizeof ftvar); total_flows = 0; /* init var binding */ if (ftvar_new(&ftvar) < 0) fterr_errx(1, "ftvar_new(): failed"); fname = FT_PATH_CFG_XLATE; dname = "default"; keep_input_time = 0; xlate_version = 0; /* no */ no_config = 0; /* no */ /* defaults + no compression */ ftset_init(&ftset, 0); while ((i = getopt(argc, argv, "b:C:d:h?knv:V:x:X:z:")) != -1) switch (i) { case 'b': /* output byte order */ if (!strcasecmp(optarg, "little")) ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; else if (!strcasecmp(optarg, "big")) ftset.byte_order = FT_HEADER_BIG_ENDIAN; else fterr_errx(1, "expecting \"big\" or \"little\""); break; case 'C': /* comment field */ ftset.comments = optarg; break; case 'd': /* debug */ debug = atoi(optarg); break; case 'k': /* keep the start/end time from the input */ keep_input_time = 1; break; case 'n': /* no config */ no_config = 1; break; case 'v': /* variable */ if (ftvar_pset(&ftvar, optarg) < 0) fterr_errx(1, "ftvar_pset(%s): failed", optarg); break; case 'V': /* version */ n = sscanf(optarg, "%u.%u", &v1, &v2); if (n == 1) { ftv_out.s_version = FT_IO_SVERSION; ftv_out.d_version = v1; ftv_out.set = 1; } else if (n == 2) { ftv_out.s_version = FT_IO_SVERSION; ftv_out.d_version = v1; ftv_out.agg_method = v2; ftv_out.agg_version = 2; ftv_out.set = 1; } else { fterr_errx(1, "Version scan failed"); } xlate_version = 1; break; case 'x': /* xlate file name */ fname = optarg; break; case 'X': /* xlate definition name */ dname = optarg; break; case 'z': /* compress level */ ftset.z_level = atoi(optarg); if ((ftset.z_level < 0) || (ftset.z_level > 9)) fterr_errx(1, "Compression level must be between 0 and 9"); break; case 'h': /* help */ case '?': default: usage(); exit (1); break; } /* switch */ if (argc - optind) fterr_errx(1, "Extra arguments starting with %s.", argv[optind]); /* may not need a config file */ if (!no_config) { /* initialize and load translations */ if (ftxlate_load(&ftxlate, &ftvar, fname)) fterr_errx(1, "ftxlate_load(): failed"); if (!(ftfd = ftxlate_def_find(&ftxlate, dname))) fterr_errx(1, "ftxlate_def_find(): failed"); } /* input is stdin */ if (ftio_init(&ftio_in, 0, FT_IO_FLAG_READ) < 0) fterr_errx(1, "ftio_init(): failed"); /* output is stdout */ if (ftio_init(&ftio_out, 1, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0) ) < 0) fterr_errx(1, "ftio_init(): failed"); /* preserve start/end time from input stream? */ if (keep_input_time) { time_start = ftio_get_cap_start(&ftio_in); time_end = ftio_get_cap_end(&ftio_in); if (time_start && time_end) { ftio_set_preloaded(&ftio_out, 1); ftio_set_cap_time(&ftio_out, time_start, time_end); } } /* keep_input_time */ ftio_get_ver(&ftio_in, &ftv_in); if (!no_config) if (ftxlate_def_test_xfields(ftfd, ftrec_xfield(&ftv_in))) fterr_errx(1, "Xlate references a field not in flow."); ftv_in.s_version = FT_IO_SVERSION; if (!ftv_out.set) bcopy(&ftv_in, &ftv_out, sizeof ftv_in); /* set the version information in the io stream */ if (ftio_set_ver(&ftio_out, &ftv_out) < 0) fterr_errx(1, "ftio_set_ver(): failed"); ftio_set_comment(&ftio_out, ftset.comments); ftio_set_byte_order(&ftio_out, ftset.byte_order); ftio_set_z_level(&ftio_out, ftset.z_level); ftio_set_streaming(&ftio_out, 1); ftio_set_debug(&ftio_out, debug); ftio_set_cap_time(&ftio_out, cap_start, cap_end); ftio_set_flows_count(&ftio_out, total_flows); if (ftio_write_header(&ftio_out) < 0) fterr_errx(1, "ftio_write_header(): failed"); fts3rec_compute_offsets(&fo, &ftv_in); /* profile */ ftprof_start (&ftp); while ((rec = ftio_read(&ftio_in))) { ++total_flows; if (!no_config) if (ftxlate_def_eval(ftfd, rec, &fo) == FT_FIL_MODE_DENY) continue; if (xlate_version) { ftrec_xlate(rec, &ftv_in, &out_rec, &ftv_out); if (ftio_write(&ftio_out, &out_rec) < 0) fterr_errx(1, "ftio_write(): failed"); } else { if (ftio_write(&ftio_out, rec) < 0) fterr_errx(1, "ftio_write(): failed"); } } /* while */ if (ftio_close(&ftio_out) < 0) fterr_errx(1, "ftio_close(): failed"); if (ftio_close(&ftio_in) < 0) fterr_errx(1, "ftio_close(): failed"); if (!no_config) ftxlate_free(&ftxlate); if (debug > 0) { ftprof_end (&ftp, total_flows); ftprof_print(&ftp, argv[0], stderr); } return 0; } /* main */ void usage(void) { fprintf(stderr, "Usage: flow-xlate [hkn] [-b big|little] [-C comment]\n"); fprintf(stderr, " [-d debug_level] [-x xlate_fname] [-X xlate_definition]\n"); fprintf(stderr, " [-V version] [-z z_level]\n"); fprintf(stderr, "\n%s version %s: built by %s\n", PACKAGE, VERSION, FT_PROG_BUILD); } flow-tools-0.68/src/ftbuild.h0000644000076600007660000000010410240412035011624 #define FT_PROG_BUILD "maf@carnage on Wed May 11 10:18:05 EDT 2005" flow-tools-0.68/src/ftbuild.sh0000755000076600007660000000046107642622727012047 #!/bin/sh # $Id: ftbuild.sh,v 1.6 2003/04/02 18:03:03 maf Exp $ if [ -x /usr/bin/whoami ]; then me=`whoami` elif [ -x /usr/ucb/whoami ]; then me=`whoami` else me='flowgeek' fi host=`hostname | sed -e 's/\..*//g'` date=`date` echo "#define FT_PROG_BUILD \"$me@$host on $date\"" > src/ftbuild.h flow-tools-0.68/src/Makefile.am0000644000076600007660000000664510236563755012123 noinst_HEADERS = flow-dscan.h pcap.h cflowd.h acl2.h aclyacc.h EXTRA_DIST = ftbuild.sh DEFS=-I$(srcdir)/../lib -L$(srcdir)/../lib #AM_CFLAGS=-g -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs #AM_CFLAGS=-O2 AM_CFLAGS=-g -Wall bin_PROGRAMS = flow-capture flow-cat flow-stat flow-print flow-dscan \ flow-send flow-receive flow-gen flow-expire \ flow-filter flow-export flow-header flow-split \ flow-xlate flow-merge flow-import flow-fanout flow-tag \ flow-nfilter flow-report flow-mask #force_build: # #ftbuild.h: ftbuild.sh force_build # ./ftbuild.sh flow_mask_SOURCES = flow-mask.c ftbuild.h flow_mask_LDFLAGS = -L../lib flow_mask_LDADD = -lft flow_mask_DEPENDENCIES = ftbuild.h flow_report_SOURCES = flow-report.c ftbuild.h flow_report_LDFLAGS = -L../lib flow_report_LDADD = -lft flow_report_DEPENDENCIES = ftbuild.h flow_nfilter_SOURCES = flow-nfilter.c ftbuild.h flow_nfilter_LDFLAGS = -L../lib flow_nfilter_LDADD = -lft flow_nfilter_DEPENDENCIES = ftbuild.h flow_import_SOURCES = flow-import.c ftbuild.h flow_import_LDFLAGS = -L../lib flow_import_LDADD = -lft flow_import_DEPENDENCIES = ftbuild.h flow_merge_SOURCES = flow-merge.c flow_merge_LDFLAGS = -L../lib flow_merge_LDADD = -lft flow_merge_DEPENDENCIES = ftbuild.h flow_capture_SOURCES = flow-capture.c flow_capture_LDFLAGS = -L../lib flow_capture_LDADD = -lft @CRYPTOLIB@ flow_capture_DEPENDENCIES = ftbuild.h flow_cat_SOURCES = flow-cat.c flow_cat_LDFLAGS = -L../lib flow_cat_LDADD = -lft flow_cat_DEPENDENCIES = ftbuild.h flow_stat_SOURCES = flow-stat.c flow_stat_LDFLAGS = -L../lib flow_stat_LDADD = -lft flow_stat_DEPENDENCIES = ftbuild.h flow_print_SOURCES = flow-print.c flow_print_LDFLAGS = -L../lib flow_print_LDADD = -lft flow_print_DEPENDENCIES = ftbuild.h flow_dscan_SOURCES = flow-dscan.c flow_dscan_LDFLAGS = -L../lib flow_dscan_LDADD = -lft flow_dscan_DEPENDENCIES = ftbuild.h flow_fanout_SOURCES = flow-fanout.c flow_fanout_LDFLAGS = -L../lib flow_fanout_LDADD = -lft flow_fanout_DEPENDENCIES = ftbuild.h flow_send_SOURCES = flow-send.c flow_send_LDFLAGS = -L../lib flow_send_LDADD = -lft flow_send_DEPENDENCIES = ftbuild.h flow_receive_SOURCES = flow-receive.c flow_receive_LDFLAGS = -L../lib flow_receive_LDADD = -lft flow_receive_DEPENDENCIES = ftbuild.h flow_gen_SOURCES = flow-gen.c flow_gen_LDFLAGS = -L../lib flow_gen_LDADD = -lft flow_gen_DEPENDENCIES = ftbuild.h flow_expire_SOURCES = flow-expire.c flow_expire_LDFLAGS = -L../lib flow_expire_LDADD = -lft flow_expire_DEPENDENCIES = ftbuild.h flow_filter_SOURCES = flow-filter.c aclyacc.y acllex.l acl2.c flow_filter_LDFLAGS = -L../lib flow_filter_LDADD = -lft @LEXLIB@ @YLIB@ flow_filter_DEPENDENCIES = ftbuild.h flow_export_SOURCES = flow-export.c flow_export_LDFLAGS = -L../lib flow_export_CFLAGS = @MYSQLCFLAGS@ @PGSQLCFLAGS@ flow_export_LDADD = -lft @MYSQLLIB@ @PGSQLLIB@ flow_export_DEPENDENCIES = ftbuild.h flow_header_SOURCES = flow-header.c flow_header_LDFLAGS = -L../lib flow_header_LDADD = -lft flow_header_DEPENDENCIES = ftbuild.h flow_split_SOURCES = flow-split.c flow_split_LDFLAGS = -L../lib flow_split_LDADD = -lft flow_split_DEPENDENCIES = ftbuild.h flow_xlate_SOURCES = flow-xlate.c flow_xlate_LDFLAGS = -L../lib flow_xlate_LDADD = -lft @CRYPTOLIB@ flow_xlate_DEPENDENCIES = ftbuild.h flow_tag_SOURCES = flow-tag.c flow_tag_LDFLAGS = -L../lib flow_tag_LDADD = -lft flow_tag_DEPENDENCIES = ftbuild.h flow-tools-0.68/src/Makefile.in0000644000076600007660000005706110240411731012107 # Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CRYPTOLIB = @CRYPTOLIB@ DEPDIR = @DEPDIR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ MYSQLCFLAGS = @MYSQLCFLAGS@ MYSQLINCLUDE = @MYSQLINCLUDE@ MYSQLLIB = @MYSQLLIB@ OPENSSLINCLUDE = @OPENSSLINCLUDE@ PACKAGE = @PACKAGE@ PGSQLCFLAGS = @PGSQLCFLAGS@ PGSQLINCLUDE = @PGSQLINCLUDE@ PGSQLLIB = @PGSQLLIB@ RANLIB = @RANLIB@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YLIB = @YLIB@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ noinst_HEADERS = flow-dscan.h pcap.h cflowd.h acl2.h aclyacc.h EXTRA_DIST = ftbuild.sh DEFS = -I$(srcdir)/../lib -L$(srcdir)/../lib #AM_CFLAGS=-g -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs #AM_CFLAGS=-O2 AM_CFLAGS = -g -Wall bin_PROGRAMS = flow-capture flow-cat flow-stat flow-print flow-dscan \ flow-send flow-receive flow-gen flow-expire \ flow-filter flow-export flow-header flow-split \ flow-xlate flow-merge flow-import flow-fanout flow-tag \ flow-nfilter flow-report flow-mask #force_build: # #ftbuild.h: ftbuild.sh force_build # ./ftbuild.sh flow_mask_SOURCES = flow-mask.c ftbuild.h flow_mask_LDFLAGS = -L../lib flow_mask_LDADD = -lft flow_mask_DEPENDENCIES = ftbuild.h flow_report_SOURCES = flow-report.c ftbuild.h flow_report_LDFLAGS = -L../lib flow_report_LDADD = -lft flow_report_DEPENDENCIES = ftbuild.h flow_nfilter_SOURCES = flow-nfilter.c ftbuild.h flow_nfilter_LDFLAGS = -L../lib flow_nfilter_LDADD = -lft flow_nfilter_DEPENDENCIES = ftbuild.h flow_import_SOURCES = flow-import.c ftbuild.h flow_import_LDFLAGS = -L../lib flow_import_LDADD = -lft flow_import_DEPENDENCIES = ftbuild.h flow_merge_SOURCES = flow-merge.c flow_merge_LDFLAGS = -L../lib flow_merge_LDADD = -lft flow_merge_DEPENDENCIES = ftbuild.h flow_capture_SOURCES = flow-capture.c flow_capture_LDFLAGS = -L../lib flow_capture_LDADD = -lft @CRYPTOLIB@ flow_capture_DEPENDENCIES = ftbuild.h flow_cat_SOURCES = flow-cat.c flow_cat_LDFLAGS = -L../lib flow_cat_LDADD = -lft flow_cat_DEPENDENCIES = ftbuild.h flow_stat_SOURCES = flow-stat.c flow_stat_LDFLAGS = -L../lib flow_stat_LDADD = -lft flow_stat_DEPENDENCIES = ftbuild.h flow_print_SOURCES = flow-print.c flow_print_LDFLAGS = -L../lib flow_print_LDADD = -lft flow_print_DEPENDENCIES = ftbuild.h flow_dscan_SOURCES = flow-dscan.c flow_dscan_LDFLAGS = -L../lib flow_dscan_LDADD = -lft flow_dscan_DEPENDENCIES = ftbuild.h flow_fanout_SOURCES = flow-fanout.c flow_fanout_LDFLAGS = -L../lib flow_fanout_LDADD = -lft flow_fanout_DEPENDENCIES = ftbuild.h flow_send_SOURCES = flow-send.c flow_send_LDFLAGS = -L../lib flow_send_LDADD = -lft flow_send_DEPENDENCIES = ftbuild.h flow_receive_SOURCES = flow-receive.c flow_receive_LDFLAGS = -L../lib flow_receive_LDADD = -lft flow_receive_DEPENDENCIES = ftbuild.h flow_gen_SOURCES = flow-gen.c flow_gen_LDFLAGS = -L../lib flow_gen_LDADD = -lft flow_gen_DEPENDENCIES = ftbuild.h flow_expire_SOURCES = flow-expire.c flow_expire_LDFLAGS = -L../lib flow_expire_LDADD = -lft flow_expire_DEPENDENCIES = ftbuild.h flow_filter_SOURCES = flow-filter.c aclyacc.y acllex.l acl2.c flow_filter_LDFLAGS = -L../lib flow_filter_LDADD = -lft @LEXLIB@ @YLIB@ flow_filter_DEPENDENCIES = ftbuild.h flow_export_SOURCES = flow-export.c flow_export_LDFLAGS = -L../lib flow_export_CFLAGS = @MYSQLCFLAGS@ @PGSQLCFLAGS@ flow_export_LDADD = -lft @MYSQLLIB@ @PGSQLLIB@ flow_export_DEPENDENCIES = ftbuild.h flow_header_SOURCES = flow-header.c flow_header_LDFLAGS = -L../lib flow_header_LDADD = -lft flow_header_DEPENDENCIES = ftbuild.h flow_split_SOURCES = flow-split.c flow_split_LDFLAGS = -L../lib flow_split_LDADD = -lft flow_split_DEPENDENCIES = ftbuild.h flow_xlate_SOURCES = flow-xlate.c flow_xlate_LDFLAGS = -L../lib flow_xlate_LDADD = -lft @CRYPTOLIB@ flow_xlate_DEPENDENCIES = ftbuild.h flow_tag_SOURCES = flow-tag.c flow_tag_LDFLAGS = -L../lib flow_tag_LDADD = -lft flow_tag_DEPENDENCIES = ftbuild.h subdir = src mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/ftconfig.h CONFIG_CLEAN_FILES = bin_PROGRAMS = flow-capture$(EXEEXT) flow-cat$(EXEEXT) \ flow-stat$(EXEEXT) flow-print$(EXEEXT) flow-dscan$(EXEEXT) \ flow-send$(EXEEXT) flow-receive$(EXEEXT) flow-gen$(EXEEXT) \ flow-expire$(EXEEXT) flow-filter$(EXEEXT) flow-export$(EXEEXT) \ flow-header$(EXEEXT) flow-split$(EXEEXT) flow-xlate$(EXEEXT) \ flow-merge$(EXEEXT) flow-import$(EXEEXT) flow-fanout$(EXEEXT) \ flow-tag$(EXEEXT) flow-nfilter$(EXEEXT) flow-report$(EXEEXT) \ flow-mask$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) am_flow_capture_OBJECTS = flow-capture.$(OBJEXT) flow_capture_OBJECTS = $(am_flow_capture_OBJECTS) am_flow_cat_OBJECTS = flow-cat.$(OBJEXT) flow_cat_OBJECTS = $(am_flow_cat_OBJECTS) am_flow_dscan_OBJECTS = flow-dscan.$(OBJEXT) flow_dscan_OBJECTS = $(am_flow_dscan_OBJECTS) am_flow_expire_OBJECTS = flow-expire.$(OBJEXT) flow_expire_OBJECTS = $(am_flow_expire_OBJECTS) am_flow_export_OBJECTS = flow_export-flow-export.$(OBJEXT) flow_export_OBJECTS = $(am_flow_export_OBJECTS) am_flow_fanout_OBJECTS = flow-fanout.$(OBJEXT) flow_fanout_OBJECTS = $(am_flow_fanout_OBJECTS) am_flow_filter_OBJECTS = flow-filter.$(OBJEXT) aclyacc.$(OBJEXT) \ acllex.$(OBJEXT) acl2.$(OBJEXT) flow_filter_OBJECTS = $(am_flow_filter_OBJECTS) am_flow_gen_OBJECTS = flow-gen.$(OBJEXT) flow_gen_OBJECTS = $(am_flow_gen_OBJECTS) am_flow_header_OBJECTS = flow-header.$(OBJEXT) flow_header_OBJECTS = $(am_flow_header_OBJECTS) am_flow_import_OBJECTS = flow-import.$(OBJEXT) flow_import_OBJECTS = $(am_flow_import_OBJECTS) am_flow_mask_OBJECTS = flow-mask.$(OBJEXT) flow_mask_OBJECTS = $(am_flow_mask_OBJECTS) am_flow_merge_OBJECTS = flow-merge.$(OBJEXT) flow_merge_OBJECTS = $(am_flow_merge_OBJECTS) am_flow_nfilter_OBJECTS = flow-nfilter.$(OBJEXT) flow_nfilter_OBJECTS = $(am_flow_nfilter_OBJECTS) am_flow_print_OBJECTS = flow-print.$(OBJEXT) flow_print_OBJECTS = $(am_flow_print_OBJECTS) am_flow_receive_OBJECTS = flow-receive.$(OBJEXT) flow_receive_OBJECTS = $(am_flow_receive_OBJECTS) am_flow_report_OBJECTS = flow-report.$(OBJEXT) flow_report_OBJECTS = $(am_flow_report_OBJECTS) am_flow_send_OBJECTS = flow-send.$(OBJEXT) flow_send_OBJECTS = $(am_flow_send_OBJECTS) am_flow_split_OBJECTS = flow-split.$(OBJEXT) flow_split_OBJECTS = $(am_flow_split_OBJECTS) am_flow_stat_OBJECTS = flow-stat.$(OBJEXT) flow_stat_OBJECTS = $(am_flow_stat_OBJECTS) am_flow_tag_OBJECTS = flow-tag.$(OBJEXT) flow_tag_OBJECTS = $(am_flow_tag_OBJECTS) am_flow_xlate_OBJECTS = flow-xlate.$(OBJEXT) flow_xlate_OBJECTS = $(am_flow_xlate_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/lib CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/acl2.Po ./$(DEPDIR)/acllex.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/aclyacc.Po ./$(DEPDIR)/flow-capture.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-cat.Po ./$(DEPDIR)/flow-dscan.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-expire.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-fanout.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-filter.Po ./$(DEPDIR)/flow-gen.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-header.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-import.Po ./$(DEPDIR)/flow-mask.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-merge.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-nfilter.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-print.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-receive.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-report.Po ./$(DEPDIR)/flow-send.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-split.Po ./$(DEPDIR)/flow-stat.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow-tag.Po ./$(DEPDIR)/flow-xlate.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/flow_export-flow-export.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) DIST_SOURCES = $(flow_capture_SOURCES) $(flow_cat_SOURCES) \ $(flow_dscan_SOURCES) $(flow_expire_SOURCES) \ $(flow_export_SOURCES) $(flow_fanout_SOURCES) \ $(flow_filter_SOURCES) $(flow_gen_SOURCES) \ $(flow_header_SOURCES) $(flow_import_SOURCES) \ $(flow_mask_SOURCES) $(flow_merge_SOURCES) \ $(flow_nfilter_SOURCES) $(flow_print_SOURCES) \ $(flow_receive_SOURCES) $(flow_report_SOURCES) \ $(flow_send_SOURCES) $(flow_split_SOURCES) $(flow_stat_SOURCES) \ $(flow_tag_SOURCES) $(flow_xlate_SOURCES) HEADERS = $(noinst_HEADERS) DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in acllex.c \ aclyacc.c SOURCES = $(flow_capture_SOURCES) $(flow_cat_SOURCES) $(flow_dscan_SOURCES) $(flow_expire_SOURCES) $(flow_export_SOURCES) $(flow_fanout_SOURCES) $(flow_filter_SOURCES) $(flow_gen_SOURCES) $(flow_header_SOURCES) $(flow_import_SOURCES) $(flow_mask_SOURCES) $(flow_merge_SOURCES) $(flow_nfilter_SOURCES) $(flow_print_SOURCES) $(flow_receive_SOURCES) $(flow_report_SOURCES) $(flow_send_SOURCES) $(flow_split_SOURCES) $(flow_stat_SOURCES) $(flow_tag_SOURCES) $(flow_xlate_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .l .o .obj .y $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) flow-capture$(EXEEXT): $(flow_capture_OBJECTS) $(flow_capture_DEPENDENCIES) @rm -f flow-capture$(EXEEXT) $(LINK) $(flow_capture_LDFLAGS) $(flow_capture_OBJECTS) $(flow_capture_LDADD) $(LIBS) flow-cat$(EXEEXT): $(flow_cat_OBJECTS) $(flow_cat_DEPENDENCIES) @rm -f flow-cat$(EXEEXT) $(LINK) $(flow_cat_LDFLAGS) $(flow_cat_OBJECTS) $(flow_cat_LDADD) $(LIBS) flow-dscan$(EXEEXT): $(flow_dscan_OBJECTS) $(flow_dscan_DEPENDENCIES) @rm -f flow-dscan$(EXEEXT) $(LINK) $(flow_dscan_LDFLAGS) $(flow_dscan_OBJECTS) $(flow_dscan_LDADD) $(LIBS) flow-expire$(EXEEXT): $(flow_expire_OBJECTS) $(flow_expire_DEPENDENCIES) @rm -f flow-expire$(EXEEXT) $(LINK) $(flow_expire_LDFLAGS) $(flow_expire_OBJECTS) $(flow_expire_LDADD) $(LIBS) flow_export-flow-export.$(OBJEXT): flow-export.c flow-export$(EXEEXT): $(flow_export_OBJECTS) $(flow_export_DEPENDENCIES) @rm -f flow-export$(EXEEXT) $(LINK) $(flow_export_LDFLAGS) $(flow_export_OBJECTS) $(flow_export_LDADD) $(LIBS) flow-fanout$(EXEEXT): $(flow_fanout_OBJECTS) $(flow_fanout_DEPENDENCIES) @rm -f flow-fanout$(EXEEXT) $(LINK) $(flow_fanout_LDFLAGS) $(flow_fanout_OBJECTS) $(flow_fanout_LDADD) $(LIBS) flow-filter$(EXEEXT): $(flow_filter_OBJECTS) $(flow_filter_DEPENDENCIES) @rm -f flow-filter$(EXEEXT) $(LINK) $(flow_filter_LDFLAGS) $(flow_filter_OBJECTS) $(flow_filter_LDADD) $(LIBS) flow-gen$(EXEEXT): $(flow_gen_OBJECTS) $(flow_gen_DEPENDENCIES) @rm -f flow-gen$(EXEEXT) $(LINK) $(flow_gen_LDFLAGS) $(flow_gen_OBJECTS) $(flow_gen_LDADD) $(LIBS) flow-header$(EXEEXT): $(flow_header_OBJECTS) $(flow_header_DEPENDENCIES) @rm -f flow-header$(EXEEXT) $(LINK) $(flow_header_LDFLAGS) $(flow_header_OBJECTS) $(flow_header_LDADD) $(LIBS) flow-import$(EXEEXT): $(flow_import_OBJECTS) $(flow_import_DEPENDENCIES) @rm -f flow-import$(EXEEXT) $(LINK) $(flow_import_LDFLAGS) $(flow_import_OBJECTS) $(flow_import_LDADD) $(LIBS) flow-mask$(EXEEXT): $(flow_mask_OBJECTS) $(flow_mask_DEPENDENCIES) @rm -f flow-mask$(EXEEXT) $(LINK) $(flow_mask_LDFLAGS) $(flow_mask_OBJECTS) $(flow_mask_LDADD) $(LIBS) flow-merge$(EXEEXT): $(flow_merge_OBJECTS) $(flow_merge_DEPENDENCIES) @rm -f flow-merge$(EXEEXT) $(LINK) $(flow_merge_LDFLAGS) $(flow_merge_OBJECTS) $(flow_merge_LDADD) $(LIBS) flow-nfilter$(EXEEXT): $(flow_nfilter_OBJECTS) $(flow_nfilter_DEPENDENCIES) @rm -f flow-nfilter$(EXEEXT) $(LINK) $(flow_nfilter_LDFLAGS) $(flow_nfilter_OBJECTS) $(flow_nfilter_LDADD) $(LIBS) flow-print$(EXEEXT): $(flow_print_OBJECTS) $(flow_print_DEPENDENCIES) @rm -f flow-print$(EXEEXT) $(LINK) $(flow_print_LDFLAGS) $(flow_print_OBJECTS) $(flow_print_LDADD) $(LIBS) flow-receive$(EXEEXT): $(flow_receive_OBJECTS) $(flow_receive_DEPENDENCIES) @rm -f flow-receive$(EXEEXT) $(LINK) $(flow_receive_LDFLAGS) $(flow_receive_OBJECTS) $(flow_receive_LDADD) $(LIBS) flow-report$(EXEEXT): $(flow_report_OBJECTS) $(flow_report_DEPENDENCIES) @rm -f flow-report$(EXEEXT) $(LINK) $(flow_report_LDFLAGS) $(flow_report_OBJECTS) $(flow_report_LDADD) $(LIBS) flow-send$(EXEEXT): $(flow_send_OBJECTS) $(flow_send_DEPENDENCIES) @rm -f flow-send$(EXEEXT) $(LINK) $(flow_send_LDFLAGS) $(flow_send_OBJECTS) $(flow_send_LDADD) $(LIBS) flow-split$(EXEEXT): $(flow_split_OBJECTS) $(flow_split_DEPENDENCIES) @rm -f flow-split$(EXEEXT) $(LINK) $(flow_split_LDFLAGS) $(flow_split_OBJECTS) $(flow_split_LDADD) $(LIBS) flow-stat$(EXEEXT): $(flow_stat_OBJECTS) $(flow_stat_DEPENDENCIES) @rm -f flow-stat$(EXEEXT) $(LINK) $(flow_stat_LDFLAGS) $(flow_stat_OBJECTS) $(flow_stat_LDADD) $(LIBS) flow-tag$(EXEEXT): $(flow_tag_OBJECTS) $(flow_tag_DEPENDENCIES) @rm -f flow-tag$(EXEEXT) $(LINK) $(flow_tag_LDFLAGS) $(flow_tag_OBJECTS) $(flow_tag_LDADD) $(LIBS) flow-xlate$(EXEEXT): $(flow_xlate_OBJECTS) $(flow_xlate_DEPENDENCIES) @rm -f flow-xlate$(EXEEXT) $(LINK) $(flow_xlate_LDFLAGS) $(flow_xlate_OBJECTS) $(flow_xlate_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acl2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acllex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aclyacc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-capture.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-cat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-dscan.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-expire.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-fanout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-filter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-gen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-header.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-import.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-mask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-merge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-nfilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-print.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-receive.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-report.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-send.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-split.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-stat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-tag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow-xlate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flow_export-flow-export.Po@am__quote@ distclean-depend: -rm -rf ./$(DEPDIR) .c.o: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< .c.obj: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `cygpath -w $<` flow_export-flow-export.o: flow-export.c @AMDEP_TRUE@ source='flow-export.c' object='flow_export-flow-export.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/flow_export-flow-export.Po' tmpdepfile='$(DEPDIR)/flow_export-flow-export.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flow_export_CFLAGS) $(CFLAGS) -c -o flow_export-flow-export.o `test -f 'flow-export.c' || echo '$(srcdir)/'`flow-export.c flow_export-flow-export.obj: flow-export.c @AMDEP_TRUE@ source='flow-export.c' object='flow_export-flow-export.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/flow_export-flow-export.Po' tmpdepfile='$(DEPDIR)/flow_export-flow-export.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flow_export_CFLAGS) $(CFLAGS) -c -o flow_export-flow-export.obj `cygpath -w flow-export.c` CCDEPMODE = @CCDEPMODE@ .l.c: $(LEXCOMPILE) `test -f $< || echo '$(srcdir)/'`$< sed '/^#/ s|$(LEX_OUTPUT_ROOT)\.c|$@|' $(LEX_OUTPUT_ROOT).c >$@ rm -f $(LEX_OUTPUT_ROOT).c .y.c: $(YACCCOMPILE) `test -f '$<' || echo '$(srcdir)/'`$< sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@ rm -f y.tab.c if test -f y.tab.h; then \ to=`echo "$*_H" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \ sed "/^#/ s/Y_TAB_H/$$to/g" y.tab.h >$*.ht; \ rm -f y.tab.h; \ if cmp -s $*.ht $*.h; then \ rm -f $*.ht ;\ else \ mv $*.ht $*.h; \ fi; \ fi if test -f y.output; then \ mv y.output $*.output; \ fi uninstall-info-am: ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "aclyacc.cacllex.c" || rm -f aclyacc.c acllex.c clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic distclean distclean-compile distclean-depend \ distclean-generic distclean-tags distdir dvi dvi-am info \ info-am install install-am install-binPROGRAMS install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flow-tools-0.68/src/pcap.h0000644000076600007660000000556107431366756011164 /* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * $Id: pcap.h,v 1.5 2002/02/10 03:50:06 maf Exp $ */ #include #include #define TCPDUMP_MAGIC 0xa1b2c3d4 #define TCPDUMP_VERSION_MAJOR 2 #define TCPDUMP_VERSION_MINOR 2 struct pcap_file_header { u_long magic; u_short version_major; u_short version_minor; long thiszone; /* gmt to local correction */ u_long sigfigs; /* accuracy of timestamps */ u_long snaplen; /* max length saved portion of each pkt */ u_long linktype; }; struct pcap_packet_header { struct timeval ts; /* time stamp */ u_long len; /* length this packet (off wire) */ u_long caplen; /* length of portion present */ }; /* eth header */ struct pcap_data1 { /* eth header */ u_int8 eth_dst[6]; u_int8 eth_src[6]; u_int16 eth_prot; }; /* ip header */ struct pcap_data2 { u_int8 version; u_int8 tos; u_int16 len; u_int16 id; u_int16 flags_fragment; u_int8 ttl; u_int8 prot; u_int16 csum; u_int32 srcaddr; u_int32 dstaddr; }; /* tcp header */ struct pcap_data3 { u_int16 srcport; u_int16 dstport; u_int32 hold1; /* seq */ u_int32 hold2; /* ack */ u_int32 hold3; /* data, reserved, flags, window */ u_int32 hold4; /* csum, urg pointer */ u_int32 hold5; /* options, padding */ }; /* udp header */ struct pcap_data4 { u_int16 srcport; u_int16 dstport; u_int32 hold1; /* len */ u_int32 hold2; /* csum */ u_int32 hold3; /* data ...*/ u_int32 hold4; /* data ... */ u_int32 hold5; /* data ... */ #ifdef XXX u_int32 hold6; /* data */ #endif /* XXX */ }; flow-tools-0.68/TODO0000644000076600007660000001136010240415244007736 fix paths in log2rrd,flow-rptfmt,flow-rpt2rrd script to generate flow-xlate cryptopan key flow-send is not working on big endian machines set source port on flow-send/fanout strip off blank lines on strftime flow-report should have a cur_report variable name. flow-report should have a max memory allowed per report option. -S state_inteval with flow-capture may not be working correctly if set to 1hr. flow-tag example uses old version of flow-xlate report definitions need terms so filter/mask/tags can be applied to groups of reports. flow-fanout is not working on a Mac -o option to flow-cat may have issues with large files update man pages so that tag/filter/mask must be explicitely set -- JohnWong@crimsonlogic.com document somewhere what raw flow fields are flow-gen random support top 10 flows in flow-report. mmap() problems on AIX xlate todo add to flow-report? flow-report man page? add to flow-fanout? flow-fanout man page? ftstat does not ior the filter xfields. The "XXX references a field not in the flow" error message should display the offending field. flow-print format 24 is still missing in the flow-print manpage.. Christian.Bauer@NEFkom.de FT_RECGET -> FTIO_RECGET - use ftio offsets. fts3rec_compute_offsets() could be done automatically on ftio_open(4READ) -- update everything to use ftio->fo. flow-split, flow-report timing problem when a period passes with no clock. source spoofing in flow-fanout is not going to work properly with multiple sources - need per source sequence numbers on output side. source spoofing - in flow-send use the exporter IP from the flow record. SCTP support NetFlow v9 support flow-rptfmt Sparc/Linux portability http://www.debian.org/ports/sparc/ has a little more as does http://www.ultralinux.org/ http://www.auroralinux.org/ Matt.Foster@Unilever.com > stat-report report1 > input > time yesterday > path /data/%Y/%Y-%m/%Y-%m-%d/ (dynamic path) flow-capture - use ftfil ACL for accepting flows. flow-split should fail more gracefully when splitting on time with old flow files without clocking information. flow-cat -> ftlib so flow-xxx /flows/data/2002 will work without using flow-cat flow-probe flow-capture / flow-expire not removing empty directories. flow-report per src/dst tag src/dst host count reference ip2hostname utility on web page flow-report, flow-nfilter, flow-tag - config file from command line string. flow-print strftime style processing. flow-cat mmap causes crash problem on Solaris cisco magic filters total_flows should always be a u_int64, not u_int32 DEC portability - check for snprintf Robin's libcap/flow-import patch flow-capture/flow-receive finish the locip/remip/port code to accept multiple exporters the as substitution can be smarter, ie don't do substitution for multicast traffic or output ifIndex 0, or possibly if the mask bits are 0. mmap should be turned off for large files since it won't work. directio md5 checksums ftio_write could use write() instead of writen() to better utilize d_buf when write() returns 0 -- ie on a TCP connection. flow-xlate - split overflow scaled flows flow-bidir flow-import/export - argus files flow-import/export - OCxmon files flow-import/export - netramet files flow-import/export - cabletron files bgp integration - community (xxx:yyy) -> tag yyy packet sampling rate need to be stored in the flow file. flow-stat would need to use this to estimate total # of flows --with-cflow - automagically build Dave's Cflow module flow-cat -R ifalias Reset ifalias -R ifmap Reset ifmap -L ifalias Load ifalias -L ifmap Load ifmap -S where to look for symbol names -I only load for IP's flow-capture -M where to look for symbol names symbol file: ifmap exporter=1.2.3.4 ifIndex=99 name=FastEthernet0/0 encap=60 sample_rate=100 ifalias exporter=1.2.3.4 name=outside ifIndex_list=5,1,2,3,4,5 flow-top flow-capture ager is running on all errors incorporate flow-sort AC_ARG_WITH(socks, [ --with-libwrap use the libwrap library], [AC_DEFINE(HAVE_LIBWRAP)]) instrument read/write for compression stats by using total_in and total_out flow-5to8 - convert v5 to v8 flows flow-active maintains active src or destination IP address first/last seen on disk first_time last_time flows octets packets regression tests flow-dns -l level (heirachy level, 0 is infinity) - level 1 would only be top level domains (.com, .edu, .net) - level 2 would be second level (ohio-state.edu, psu.edu, cic.net) - level 0 would be any level, ie FQDN's (shattered.net.ohio-state.edu) flow-reduce various data reducations glue together TCP connections keep state when there's a ftp control connection, then use that to give hints about ftp data connections flow-tools-0.68/utils/0000777000076600007660000000000010240421707010472 5flow-tools-0.68/utils/asn2c0000755000076600007660000000075507241161257011361 #!/usr/local/bin/perl # # converts internic netinfo/asn.txt to C code # print '#include "bytes.h" #include "sym.h" #include "fmt.h" struct sym_table sym_asn[] = { '; while (<>) { chop; next if (!/^ *\d+/); $_ =~ s/^ +//g; @f = split; next if ($f[0] =~ /^32768|64512/); if ($f[1] eq '-') { for ($asn = $f[0]; $asn <= $f[2]; ++$asn) { print "{\"$f[3]\", $asn},\n"; } } else { print "{\"$f[1]\", $f[0]},\n"; } } print ' {(char*)0L, 0}, }; ' flow-tools-0.68/utils/gasn0000755000076600007660000000055507321214141011267 #!/usr/bin/perl # # converts internic netinfo/asn.txt to flow-tools format # while (<>) { chomp; next if (!/^\s*\d+/); $_ =~ s/^\s+//g; @f = split; if ($f[0] =~ /-/) { ($high, $low) = split(/-/, $f[0]); for ($asn = $high; $asn <= $low; ++$asn) { print "$asn $f[1]\n"; } } else { print "$f[0] $f[1]\n"; } } flow-tools-0.68/utils/gprot0000755000076600007660000000024507321205636011477 #!/usr/bin/perl # # convert unix /etc/{protocols} format to flow-tools # while (<>) { chomp; next if (/^\s*#/); @f = split; print "$f[1] $f[0]\n"; } flow-tools-0.68/utils/gserv0000755000076600007660000000046107321206152011464 #!/usr/bin/perl # # convert unix /etc/services format to flow-tools # while (<>) { chomp; next if (/^\s*#/); @f = split; ($f[1]) = split(/\//, $f[1]); $serv{$f[1]} = $f[0]; } foreach $key (sort numerically keys(%serv)) { print "$key $serv{$key}\n"; } sub numerically { $a <=> $b; }