Merged branch 'sh/collectd-4.6' into sh/collectd-4.7.
authorSebastian Harl <sh@tokkee.org>
Sun, 6 Sep 2009 12:52:15 +0000 (12:52 +0000)
committerSebastian Harl <sh@tokkee.org>
Sun, 6 Sep 2009 12:52:15 +0000 (12:52 +0000)
Conflicts:
src/iptables.c

To resolve the conflict, the changes to the iptables plugin have been updated
to support ip6tc as well.

1  2 
configure.in
src/iptables.c

diff --combined configure.in
@@@ -80,27 -80,13 +80,27 @@@ f
  
  if test "x$ac_system" = "xSolaris"
  then
 -      CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
 +      AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Define to enforce POSIX thread semantics under Solaris.])
  fi
  
  # Where to install .pc files.
  pkgconfigdir="${libdir}/pkgconfig"
  AC_SUBST(pkgconfigdir)
  
 +# Check for standards compliance mode
 +AC_ARG_ENABLE(standards,
 +            AS_HELP_STRING([--enable-standards], [Enable standards compliance mode]),
 +            [enable_standards="$enableval"],
 +            [enable_standards="no"])
 +if test "x$enable_standards" = "xyes"
 +then
 +      AC_DEFINE(_ISOC99_SOURCE,        1, [Define to enforce ISO C99 compliance.])
 +      AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Define to enforce POSIX.1-2001 compliance.])
 +      AC_DEFINE(_XOPEN_SOURCE,       600, [Define to enforce X/Open 6 (XSI) compliance.])
 +      AC_DEFINE(_REENTRANT,            1, [Define to enable reentrancy interfaces.])
 +fi
 +AM_CONDITIONAL(BUILD_FEATURE_STANDARDS, test "x$enable_standards" = "xyes")
 +
  #
  # Checks for header files.
  #
@@@ -384,7 -370,7 +384,7 @@@ AC_CHECK_HEADERS(linux/un.h, [], []
  #endif
  ])
  
 -AC_CHECK_HEADERS(pwd.h grp.h sys/un.h ctype.h limits.h sys/quota.h xfs/xqm.h fs_info.h fshelp.h paths.h mntent.h mnttab.h sys/fstyp.h sys/fs_types.h sys/mntent.h sys/mnttab.h sys/statfs.h sys/statvfs.h sys/vfs.h sys/vfstab.h kvm.h wordexp.h)
 +AC_CHECK_HEADERS(pwd.h grp.h sys/un.h ctype.h limits.h xfs/xqm.h fs_info.h fshelp.h paths.h mntent.h mnttab.h sys/fstyp.h sys/fs_types.h sys/mntent.h sys/mnttab.h sys/statfs.h sys/statvfs.h sys/vfs.h sys/vfstab.h kvm.h wordexp.h)
  
  # For the dns plugin
  AC_CHECK_HEADERS(arpa/nameser.h)
@@@ -943,8 -929,7 +943,8 @@@ AC_CHECK_MEMBERS([struct kinfo_proc.kp_
        ])
  
  AC_CHECK_MEMBERS([struct udphdr.uh_dport, struct udphdr.uh_sport], [], [],
 -[#if HAVE_STDINT_H
 +[#define _BSD_SOURCE
 +#if HAVE_STDINT_H
  # include <stdint.h>
  #endif
  #if HAVE_SYS_TYPES_H
  #endif
  ])
  AC_CHECK_MEMBERS([struct udphdr.dest, struct udphdr.source], [], [],
 -[#if HAVE_STDINT_H
 +[#define _BSD_SOURCE
 +#if HAVE_STDINT_H
  # include <stdint.h>
  #endif
  #if HAVE_SYS_TYPES_H
@@@ -1255,175 -1239,6 +1255,175 @@@ AC_DEFINE_UNQUOTED(COLLECT_LIBESMTP, [$
  AM_CONDITIONAL(BUILD_WITH_LIBESMTP, test "x$with_libesmtp" = "xyes")
  # }}}
  
 +# --with-libganglia {{{
 +AC_ARG_WITH(libganglia, [AS_HELP_STRING([--with-libganglia@<:@=PREFIX@:>@], [Path to libganglia.])],
 +[
 + if test -f "$withval" && test -x "$withval"
 + then
 +       with_libganglia_config="$withval"
 +       with_libganglia="yes"
 + else if test -f "$withval/bin/ganglia-config" && test -x "$withval/bin/ganglia-config"
 + then
 +       with_libganglia_config="$withval/bin/ganglia-config"
 +       with_libganglia="yes"
 + else if test -d "$withval"
 + then
 +       GANGLIA_CPPFLAGS="-I$withval/include"
 +       GANGLIA_LDFLAGS="-L$withval/lib"
 +       with_libganglia="yes"
 + else
 +       with_libganglia_config="ganglia-config"
 +       with_libganglia="$withval"
 + fi; fi; fi
 +],
 +[
 + with_libganglia_config="ganglia-config"
 + with_libganglia="yes"
 +])
 +
 +if test "x$with_libganglia" = "xyes" && test "x$with_libganglia_config" != "x"
 +then
 +      if test "x$GANGLIA_CPPFLAGS" = "x"
 +      then
 +              GANGLIA_CPPFLAGS=`"$with_libganglia_config" --cflags 2>/dev/null`
 +      fi
 +
 +      if test "x$GANGLIA_LDFLAGS" = "x"
 +      then
 +              GANGLIA_LDFLAGS=`"$with_libganglia_config" --ldflags 2>/dev/null`
 +      fi
 +
 +      if test "x$GANGLIA_LIBS" = "x"
 +      then
 +              GANGLIA_LIBS=`"$with_libganglia_config" --libs 2>/dev/null`
 +      fi
 +fi
 +
 +SAVE_CPPFLAGS="$CPPFLAGS"
 +SAVE_LDFLAGS="$LDFLAGS"
 +CPPFLAGS="$CPPFLAGS $GANGLIA_CPPFLAGS"
 +LDFLAGS="$LDFLAGS $GANGLIA_LDFLAGS"
 +
 +if test "x$with_libganglia" = "xyes"
 +then
 +      AC_CHECK_HEADERS(gm_protocol.h,
 +      [
 +              AC_DEFINE(HAVE_GM_PROTOCOL_H, 1,
 +                        [Define to 1 if you have the <gm_protocol.h> header file.])
 +      ], [with_libganglia="no (gm_protocol.h not found)"])
 +fi
 +
 +if test "x$with_libganglia" = "xyes"
 +then
 +      AC_CHECK_LIB(ganglia, xdr_Ganglia_value_msg,
 +      [
 +              AC_DEFINE(HAVE_LIBGANGLIA, 1,
 +                        [Define to 1 if you have the ganglia library (-lganglia).])
 +      ], [with_libganglia="no (symbol xdr_Ganglia_value_msg not found)"])
 +fi
 +
 +CPPFLAGS="$SAVE_CPPFLAGS"
 +LDFLAGS="$SAVE_LDFLAGS"
 +
 +AC_SUBST(GANGLIA_CPPFLAGS)
 +AC_SUBST(GANGLIA_LDFLAGS)
 +AC_SUBST(GANGLIA_LIBS)
 +AM_CONDITIONAL(BUILD_WITH_LIBGANGLIA, test "x$with_libganglia" = "xyes")
 +# }}}
 +
 +# --with-libgcrypt {{{
 +GCRYPT_CPPFLAGS="$GCRYPT_CPPFLAGS"
 +GCRYPT_LDFLAGS="$GCRYPT_LDFLAGS"
 +GCRYPT_LIBS="$GCRYPT_LIBS"
 +AC_ARG_WITH(libgcrypt, [AS_HELP_STRING([--with-libgcrypt@<:@=PREFIX@:>@], [Path to libgcrypt.])],
 +[
 + if test -f "$withval" && test -x "$withval"
 + then
 +       with_libgcrypt_config="$withval"
 +       with_libgcrypt="yes"
 + else if test -f "$withval/bin/gcrypt-config" && test -x "$withval/bin/gcrypt-config"
 + then
 +       with_libgcrypt_config="$withval/bin/gcrypt-config"
 +       with_libgcrypt="yes"
 + else if test -d "$withval"
 + then
 +       GCRYPT_CPPFLAGS="$GCRYPT_CPPFLAGS -I$withval/include"
 +       GCRYPT_LDFLAGS="$GCRYPT_LDFLAGS -L$withval/lib"
 +       with_libgcrypt="yes"
 + else
 +       with_libgcrypt_config="gcrypt-config"
 +       with_libgcrypt="$withval"
 + fi; fi; fi
 +],
 +[
 + with_libgcrypt_config="libgcrypt-config"
 + with_libgcrypt="yes"
 +])
 +
 +if test "x$with_libgcrypt" = "xyes" && test "x$with_libgcrypt_config" != "x"
 +then
 +      if test "x$GCRYPT_CPPFLAGS" = "x"
 +      then
 +              GCRYPT_CPPFLAGS=`"$with_libgcrypt_config" --cflags 2>/dev/null`
 +      fi
 +
 +      if test "x$GCRYPT_LDFLAGS" = "x"
 +      then
 +              gcrypt_exec_prefix=`"$with_libgcrypt_config" --exec-prefix 2>/dev/null`
 +              GCRYPT_LDFLAGS="-L$gcrypt_exec_prefix/lib"
 +      fi
 +
 +      if test "x$GCRYPT_LIBS" = "x"
 +      then
 +              GCRYPT_LIBS=`"$with_libgcrypt_config" --libs 2>/dev/null`
 +      fi
 +fi
 +
 +SAVE_CPPFLAGS="$CPPFLAGS"
 +SAVE_LDFLAGS="$LDFLAGS"
 +CPPFLAGS="$CPPFLAGS $GCRYPT_CPPFLAGS"
 +LDFLAGS="$LDFLAGS $GCRYPT_LDFLAGS"
 +
 +if test "x$with_libgcrypt" = "xyes"
 +then
 +      if test "x$GCRYPT_CPPFLAGS" != "x"
 +      then
 +              AC_MSG_NOTICE([gcrypt CPPFLAGS: $GCRYPT_CPPFLAGS])
 +      fi
 +      AC_CHECK_HEADERS(gcrypt.h,
 +              [with_libgcrypt="yes"],
 +              [with_libgcrypt="no (gcrypt.h not found)"])
 +fi
 +
 +if test "x$with_libgcrypt" = "xyes"
 +then
 +      if test "x$GCRYPT_LDFLAGS" != "x"
 +      then
 +              AC_MSG_NOTICE([gcrypt LDFLAGS: $GCRYPT_LDFLAGS])
 +      fi
 +      AC_CHECK_LIB(gcrypt, gcry_md_hash_buffer,
 +              [with_libgcrypt="yes"],
 +              [with_libgcrypt="no (symbol gcry_md_hash_buffer not found)"])
 +
 +      if test "$with_libgcrypt" != "no"; then
 +              AM_PATH_LIBGCRYPT(1:1.2.0,,with_libgcrypt="no (version 1.2.0+ required)")
 +      fi
 +fi
 +
 +CPPFLAGS="$SAVE_CPPFLAGS"
 +LDFLAGS="$SAVE_LDFLAGS"
 +
 +if test "x$with_libgcrypt" = "xyes"
 +then
 +      AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define to 1 if you have the gcrypt library (-lgcrypt).])
 +fi
 +
 +AC_SUBST(GCRYPT_CPPFLAGS)
 +AC_SUBST(GCRYPT_LDFLAGS)
 +AC_SUBST(GCRYPT_LIBS)
 +AM_CONDITIONAL(BUILD_WITH_LIBGCRYPT, test "x$with_libgcrypt" = "xyes")
 +# }}}
 +
  # --with-libiptc {{{
  with_own_libiptc="no"
  AC_ARG_WITH(libiptc, [AS_HELP_STRING([--with-libiptc@<:@=PREFIX@:>@], [Path to libiptc.])],
@@@ -1478,7 -1293,7 +1478,7 @@@ the
                with_own_libiptc="no"
        ],
        [
- #include "$srcdir/src/libiptc/ipt_kernel_headers.h"
+ #include "$srcdir/src/owniptc/ipt_kernel_headers.h"
        ])
  
        CFLAGS=$SAVE_CFLAGS
@@@ -1489,197 -1304,24 +1489,215 @@@ if test "x$with_own_libiptc" = "xyes
  then
        AC_DEFINE(OWN_LIBIPTC, 1, [Define to 1 if we use the shipped iptc library.])
  fi
 -      AC_CHECK_TYPES([iptc_handle_t], [], [],
+ if test "x$with_libiptc" = "xyes"
+ then
+       SAVE_CFLAGS=$CFLAGS
+       CFLAGS="$CFLAGS $KERNEL_CFLAGS"
++      AC_CHECK_TYPES([iptc_handle_t, ip6tc_handle_t], [], [],
+       [
+ #if OWN_LIBIPTC
+ # include "$srcdir/src/owniptc/libiptc.h"
++# include "$srcdir/src/owniptc/libip6tc.h"
+ #else
+ # include <libiptc/libiptc.h>
++# include <libiptc/libip6tc.h>
+ #endif
+       ])
+       CFLAGS=$SAVE_CFLAGS
+ fi
  # }}}
  
 +# --with-java {{{
 +with_java_home="$JAVA_HOME"
 +with_java_vmtype="client"
 +with_java_cflags=""
 +with_java_libs=""
 +JAVAC="$JAVAC"
 +AC_ARG_WITH(java, [AS_HELP_STRING([--with-java@<:@=PREFIX@:>@], [Path to Java home.])],
 +[
 +      if test "x$withval" = "xno"
 +      then
 +              with_java="no"
 +      else if test "x$withval" = "xyes"
 +      then
 +              with_java="yes"
 +      else
 +              with_java_home="$withval"
 +              with_java="yes"
 +      fi; fi
 +],
 +[with_java="yes"])
 +if test "x$with_java" = "xyes"
 +then
 +      if test -d "$with_java_home"
 +      then
 +              AC_MSG_CHECKING([for jni.h])
 +              TMPDIR=`find -L "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' | head -n 1`
 +              if test "x$TMPDIR" != "x"
 +              then
 +                      AC_MSG_RESULT([found in $TMPDIR])
 +                      JAVA_CPPFLAGS="$JAVA_CPPFLAGS -I$TMPDIR"
 +              else
 +                      AC_MSG_RESULT([not found])
 +              fi
 +
 +              AC_MSG_CHECKING([for jni_md.h])
 +              TMPDIR=`find -L "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' | head -n 1`
 +              if test "x$TMPDIR" != "x"
 +              then
 +                      AC_MSG_RESULT([found in $TMPDIR])
 +                      JAVA_CPPFLAGS="$JAVA_CPPFLAGS -I$TMPDIR"
 +              else
 +                      AC_MSG_RESULT([not found])
 +              fi
 +
 +              AC_MSG_CHECKING([for libjvm.so])
 +              TMPDIR=`find -L "$with_java_home" -name libjvm.so -type f -exec 'dirname' '{}' ';' | head -n 1`
 +              if test "x$TMPDIR" != "x"
 +              then
 +                      AC_MSG_RESULT([found in $TMPDIR])
 +                      JAVA_LDFLAGS="$JAVA_LDFLAGS -L$TMPDIR -Wl,-rpath -Wl,$TMPDIR"
 +              else
 +                      AC_MSG_RESULT([not found])
 +              fi
 +
 +              if test "x$JAVAC" = "x"
 +              then
 +                      AC_MSG_CHECKING([for javac])
 +                      TMPDIR=`find -L "$with_java_home" -name javac -type f | head -n 1`
 +                      if test "x$TMPDIR" != "x"
 +                      then
 +                              JAVAC="$TMPDIR"
 +                              AC_MSG_RESULT([$JAVAC])
 +                      else
 +                              AC_MSG_RESULT([not found])
 +                      fi
 +              fi
 +      else if test "x$with_java_home" != "x"
 +      then
 +              AC_MSG_WARN([JAVA_HOME: No such directory: $with_java_home])
 +      fi; fi
 +fi
 +
 +if test "x$JAVA_CPPFLAGS" != "x"
 +then
 +      AC_MSG_NOTICE([Building with JAVA_CPPFLAGS set to: $JAVA_CPPFLAGS])
 +fi
 +if test "x$JAVA_CFLAGS" != "x"
 +then
 +      AC_MSG_NOTICE([Building with JAVA_CFLAGS set to: $JAVA_CFLAGS])
 +fi
 +if test "x$JAVA_LDFLAGS" != "x"
 +then
 +      AC_MSG_NOTICE([Building with JAVA_LDFLAGS set to: $JAVA_LDFLAGS])
 +fi
 +if test "x$JAVAC" = "x"
 +then
 +      with_javac_path="$PATH"
 +      if test "x$with_java_home" != "x"
 +      then
 +              with_javac_path="$with_java_home:with_javac_path"
 +              if test -d "$with_java_home/bin"
 +              then
 +                      with_javac_path="$with_java_home/bin:with_javac_path"
 +              fi
 +      fi
 +
 +      AC_PATH_PROG(JAVAC, javac, [], "$with_javac_path")
 +fi
 +if test "x$JAVAC" = "x"
 +then
 +      with_java="no (javac not found)"
 +fi
 +
 +SAVE_CPPFLAGS="$CPPFLAGS"
 +SAVE_CFLAGS="$CFLAGS"
 +SAVE_LDFLAGS="$LDFLAGS"
 +CPPFLAGS="$CPPFLAGS $JAVA_CPPFLAGS"
 +CFLAGS="$CFLAGS $JAVA_CFLAGS"
 +LDFLAGS="$LDFLAGS $JAVA_LDFLAGS"
 +
 +if test "x$with_java" = "xyes"
 +then
 +      AC_CHECK_HEADERS(jni.h, [], [with_java="no (jni.h not found)"])
 +fi
 +if test "x$with_java" = "xyes"
 +then
 +      AC_CHECK_LIB(jvm, JNI_CreateJavaVM,
 +      [with_java="yes"],
 +      [with_java="no (libjvm not found)"],
 +      [$JAVA_LIBS])
 +fi
 +if test "x$with_java" = "xyes"
 +then
 +      JAVA_LIBS="$JAVA_LIBS -ljvm"
 +      AC_MSG_NOTICE([Building with JAVA_LIBS set to: $JAVA_LIBS])
 +fi
 +
 +CPPFLAGS="$SAVE_CPPFLAGS"
 +CFLAGS="$SAVE_CFLAGS"
 +LDFLAGS="$SAVE_LDFLAGS"
 +
 +AC_SUBST(JAVA_CPPFLAGS)
 +AC_SUBST(JAVA_CFLAGS)
 +AC_SUBST(JAVA_LDFLAGS)
 +AC_SUBST(JAVA_LIBS)
 +AM_CONDITIONAL(BUILD_WITH_JAVA, test "x$with_java" = "xyes")
 +# }}}
 +
 +# --with-libmemcached {{{
 +with_libmemcached_cppflags=""
 +with_libmemcached_ldflags=""
 +AC_ARG_WITH(libmemcached, [AS_HELP_STRING([--with-libmemcached@<:@=PREFIX@:>@], [Path to libmemcached.])],
 +[
 +      if test "x$withval" != "xno" && test "x$withval" != "xyes"
 +      then
 +              with_libmemcached_cppflags="-I$withval/include"
 +              with_libmemcached_ldflags="-L$withval/lib"
 +              with_libmemcached="yes"
 +      else
 +              with_libmemcached="$withval"
 +      fi
 +],
 +[
 +      with_libmemcached="yes"
 +])
 +if test "x$with_libmemcached" = "xyes"
 +then
 +      SAVE_CPPFLAGS="$CPPFLAGS"
 +      CPPFLAGS="$CPPFLAGS $with_libmemcached_cppflags"
 +
 +      AC_CHECK_HEADERS(libmemcached/memcached.h, [with_libmemcached="yes"], [with_libmemcached="no (libmemcached/memcached.h not found)"])
 +
 +      CPPFLAGS="$SAVE_CPPFLAGS"
 +fi
 +if test "x$with_libmemcached" = "xyes"
 +then
 +      SAVE_CPPFLAGS="$CPPFLAGS"
 +      SAVE_LDFLAGS="$LDFLAGS"
 +      CPPFLAGS="$CPPFLAGS $with_libmemcached_cppflags"
 +      LDFLAGS="$LDFLAGS $with_libmemcached_ldflags"
 +
 +      AC_CHECK_LIB(memcached, memcached_create, [with_libmemcached="yes"], [with_libmemcached="no (Symbol 'memcached_create' not found)"])
 +
 +      CPPFLAGS="$SAVE_CPPFLAGS"
 +      LDFLAGS="$SAVE_LDFLAGS"
 +fi
 +if test "x$with_libmemcached" = "xyes"
 +then
 +      BUILD_WITH_LIBMEMCACHED_CPPFLAGS="$with_libmemcached_cppflags"
 +      BUILD_WITH_LIBMEMCACHED_LDFLAGS="$with_libmemcached_ldflags"
 +      BUILD_WITH_LIBMEMCACHED_LIBS="-lmemcached"
 +      AC_SUBST(BUILD_WITH_LIBMEMCACHED_CPPFLAGS)
 +      AC_SUBST(BUILD_WITH_LIBMEMCACHED_LDFLAGS)
 +      AC_SUBST(BUILD_WITH_LIBMEMCACHED_LIBS)
 +      AC_DEFINE(HAVE_LIBMEMCACHED, 1, [Define if libmemcached is present and usable.])
 +fi
 +AM_CONDITIONAL(BUILD_WITH_LIBMEMCACHED, test "x$with_libmemcached" = "xyes")
 +# }}}
 +
  # --with-libmysql {{{
  with_mysql_config="mysql_config"
  with_mysql_cflags=""
  # }}}
  
  # --with-liboping {{{
 -with_own_liboping="no"
 -liboping_LDFLAGS="$LDFLAGS"
 -liboping_CPPFLAGS="$CPPFLAGS"
  AC_ARG_WITH(liboping, [AS_HELP_STRING([--with-liboping@<:@=PREFIX@:>@], [Path to liboping.])],
  [
 -      if test "x$withval" != "xno" && test "x$withval" != "xyes"
 + if test "x$withval" = "xyes"
 + then
 +       with_liboping="yes"
 + else if test "x$withval" = "xno"
 + then
 +       with_liboping="no"
 + else
 +       with_liboping="yes"
 +       LIBOPING_CPPFLAGS="$LIBOPING_CPPFLAGS -I$withval/include"
 +       LIBOPING_LDFLAGS="$LIBOPING_LDFLAGS -L$withval/lib"
 + fi; fi
 +],
 +[with_liboping="yes"])
 +
 +SAVE_CPPFLAGS="$CPPFLAGS"
 +SAVE_LDFLAGS="$LDFLAGS"
 +
 +CPPFLAGS="$CPPFLAGS $LIBOPING_CPPFLAGS"
 +LDFLAGS="$LDFLAGS $LIBOPING_LDFLAGS"
 +
 +if test "x$with_liboping" = "xyes"
 +then
 +      if test "x$LIBOPING_CPPFLAGS" != "x"
        then
 -              if test -d "$withval/lib"
 -              then
 -                      liboping_LDFLAGS="$LDFLAGS -L$withval/lib"
 -              fi
 -              if test -d "$withval/include"
 -              then
 -                      liboping_CPPFLAGS="$CPPFLAGS -I$withval/include"
 -              fi
 +              AC_MSG_NOTICE([liboping CPPFLAGS: $LIBOPING_CPPFLAGS])
        fi
 -      if test "x$withval" = "xno"
 -      then
 -              with_liboping="no"
 -              with_own_liboping="no"
 -      else if test "x$withval" = "xyes"
 +      AC_CHECK_HEADERS(oping.h,
 +      [with_liboping="yes"],
 +      [with_liboping="no ('oping.h' not found)"])
 +fi
 +if test "x$with_liboping" = "xyes"
 +then
 +      if test "x$LIBOPING_LDFLAGS" != "x"
        then
 -              with_liboping="yes"
 -      fi; fi
 -],
 -[
 -      with_liboping="yes"
 -])
 +              AC_MSG_NOTICE([liboping LDFLAGS: $LIBOPING_LDFLAGS])
 +      fi
 +      AC_CHECK_LIB(oping, ping_construct,
 +      [with_liboping="yes"],
 +      [with_liboping="no (symbol 'ping_construct' not found)"])
 +fi
 +
 +CPPFLAGS="$SAVE_CPPFLAGS"
 +LDFLAGS="$SAVE_LDFLAGS"
  
  if test "x$with_liboping" = "xyes"
  then
 -      save_LDFLAGS="$LDFLAGS"
 -      save_CPPFLAGS="$CPPFLAGS"
 -      LDFLAGS="$liboping_LDFLAGS"
 -      CPPFLAGS="$liboping_CPPFLAGS"
 -      AC_CHECK_LIB(oping, ping_construct,
 -      [
 -              with_liboping="yes"
 -              with_own_liboping="no"
 -      ],
 -      [
 -              with_liboping="yes"
 -              with_own_liboping="yes"
 -              LDFLAGS="$save_LDFLAGS"
 -              CPPFLAGS="$save_CPPFLAGS"
 -      ])
 +      BUILD_WITH_LIBOPING_CPPFLAGS="$LIBOPING_CPPFLAGS"
 +      BUILD_WITH_LIBOPING_LDFLAGS="$LIBOPING_LDFLAGS"
 +      AC_SUBST(BUILD_WITH_LIBOPING_CPPFLAGS)
 +      AC_SUBST(BUILD_WITH_LIBOPING_LDFLAGS)
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBOPING, test "x$with_liboping" = "xyes")
 -AM_CONDITIONAL(BUILD_WITH_OWN_LIBOPING, test "x$with_own_liboping" = "xyes")
  # }}}
  
  # --with-oracle {{{
@@@ -2317,6 -1954,7 +2335,6 @@@ the
        LDFLAGS=$SAVE_LDFLAGS
  fi
  
 -c_cv_have_broken_perl_load_module="no"
  if test "x$with_libperl" = "xyes"
  then
        SAVE_CFLAGS=$CFLAGS
                [with_libpq="yes"],
                [with_libpq="no (symbol 'PQconnectdb' not found)"])
  
 +      AC_CHECK_LIB(pq, PQserverVersion,
 +              [with_libpq="yes"],
 +              [with_libpq="no (symbol 'PQserverVersion' not found)"])
 +
        LDFLAGS="$SAVE_LDFLAGS"
  fi
  if test "x$with_libpq" = "xyes"
@@@ -3238,42 -2872,28 +3256,42 @@@ AC_DEFUN
    [AC_PLUGIN],
    [
      enable_plugin="no"
 +    force="no"
      AC_ARG_ENABLE([$1], AC_HELP_STRING([--enable-$1], [$3]),
      [
       if test "x$enableval" = "xyes"
       then
             enable_plugin="yes"
 -     else
 -           enable_plugin="no"
 -     fi
 -    ],
 -    [
 -     if test "x$2" = "xyes"
 +     else if test "x$enableval" = "xforce"
       then
             enable_plugin="yes"
 +           force="yes"
       else
             enable_plugin="no"
 -     fi
 +     fi; fi
 +    ],
 +    [
 +       if test "x$enable_all_plugins" = "xauto"
 +       then
 +           if test "x$2" = "xyes"
 +           then
 +                   enable_plugin="yes"
 +           else
 +                   enable_plugin="no"
 +           fi
 +       else
 +           enable_plugin="$enable_all_plugins"
 +       fi
      ])
      if test "x$enable_plugin" = "xyes"
      then
 -          if test "x$2" = "xyes"
 +          if test "x$2" = "xyes" || test "x$force" = "xyes"
            then
                    AC_DEFINE([HAVE_PLUGIN_]my_toupper([$1]), 1, [Define to 1 if the $1 plugin is enabled.])
 +                  if test "x$2" != "xyes"
 +                  then
 +                          dependency_warning="yes"
 +                  fi
            else # User passed "yes" but dependency checking yielded "no" => Dependency problem.
                    dependency_error="yes"
                    enable_plugin="no (dependency error)"
@@@ -3291,13 -2911,10 +3309,13 @@@ AC_COLLECTD([debug],     [enable],  [fe
  AC_COLLECTD([daemon],    [disable], [feature], [daemon mode])
  AC_COLLECTD([getifaddrs],[enable],  [feature], [getifaddrs under Linux])
  
 +dependency_warning="no"
  dependency_error="no"
 +
  plugin_ascent="no"
  plugin_battery="no"
  plugin_bind="no"
 +plugin_conntrack="no"
  plugin_cpu="no"
  plugin_cpufreq="no"
  plugin_df="no"
@@@ -3312,18 -2929,14 +3330,18 @@@ plugin_load="no
  plugin_memory="no"
  plugin_multimeter="no"
  plugin_nfs="no"
 +plugin_fscache="no"
  plugin_perl="no"
  plugin_processes="no"
 +plugin_protocols="no"
  plugin_serial="no"
  plugin_swap="no"
  plugin_tape="no"
  plugin_tcpconns="no"
 +plugin_ted="no"
  plugin_thermal="no"
  plugin_users="no"
 +plugin_uptime="no"
  plugin_vmem="no"
  plugin_vserver="no"
  plugin_wireless="no"
  if test "x$ac_system" = "xLinux"
  then
        plugin_battery="yes"
 +      plugin_conntrack="yes"
        plugin_cpu="yes"
        plugin_cpufreq="yes"
        plugin_disk="yes"
        plugin_load="yes"
        plugin_memory="yes"
        plugin_nfs="yes"
 +      plugin_fscache="yes"
        plugin_processes="yes"
 +      plugin_protocols="yes"
        plugin_serial="yes"
        plugin_swap="yes"
        plugin_tcpconns="yes"
        plugin_thermal="yes"
 +      plugin_uptime="yes"
        plugin_vmem="yes"
        plugin_vserver="yes"
        plugin_wireless="yes"
  fi
  
  # Solaris
 +if test "x$with_kstat" = "xyes"
 +then
 +      plugin_uptime="yes"
 +fi
 +
  if test "x$with_devinfo$with_kstat" = "xyesyes"
  then
        plugin_cpu="yes"
  if test "x$have_sysctl" = "xyes"
  then
        plugin_cpu="yes"
 +      plugin_memory="yes"
        plugin_swap="yes"
 +      plugin_uptime="yes"
  fi
  if test "x$have_sysctlbyname" = "xyes"
  then
  if test "x$have_termios_h" = "xyes"
  then
        plugin_multimeter="yes"
 +      plugin_ted="yes"
  fi
  
  if test "x$have_thread_info" = "xyes"
  m4_divert_once([HELP_ENABLE], [
  collectd plugins:])
  
 +AC_ARG_ENABLE([all-plugins],
 +              AC_HELP_STRING([--enable-all-plugins],
 +                              [enable all plugins (auto by def)]),
 +              [
 +               if test "x$enableval" = "xyes"
 +               then
 +                       enable_all_plugins="yes"
 +               else if test "x$enableval" = "xauto"
 +               then
 +                       enable_all_plugins="auto"
 +               else
 +                       enable_all_plugins="no"
 +               fi; fi
 +              ],
 +              [enable_all_plugins="auto"])
 +
 +m4_divert_once([HELP_ENABLE], [])
 +
  AC_PLUGIN([apache],      [$with_libcurl],      [Apache httpd statistics])
  AC_PLUGIN([apcups],      [yes],                [Statistics of UPSes by APC])
  AC_PLUGIN([apple_sensors], [$with_libiokit],   [Apple's hardware sensors])
  AC_PLUGIN([ascent],      [$plugin_ascent],     [AscentEmu player statistics])
  AC_PLUGIN([battery],     [$plugin_battery],    [Battery statistics])
  AC_PLUGIN([bind],        [$plugin_bind],       [ISC Bind nameserver statistics])
 +AC_PLUGIN([conntrack],   [$plugin_conntrack],  [nf_conntrack statistics])
  AC_PLUGIN([cpufreq],     [$plugin_cpufreq],    [CPU frequency statistics])
  AC_PLUGIN([cpu],         [$plugin_cpu],        [CPU usage statistics])
  AC_PLUGIN([csv],         [yes],                [CSV output plugin])
@@@ -3574,15 -3156,12 +3592,15 @@@ AC_PLUGIN([email],       [yes]
  AC_PLUGIN([entropy],     [$plugin_entropy],    [Entropy statistics])
  AC_PLUGIN([exec],        [yes],                [Execution of external programs])
  AC_PLUGIN([filecount],   [yes],                [Count files in directories])
 +AC_PLUGIN([fscache],     [$plugin_fscache],    [fscache statistics])
 +AC_PLUGIN([gmond],       [$with_libganglia],   [Ganglia plugin])
  AC_PLUGIN([hddtemp],     [yes],                [Query hddtempd])
  AC_PLUGIN([interface],   [$plugin_interface],  [Interface traffic statistics])
  AC_PLUGIN([ipmi],        [$plugin_ipmi],       [IPMI sensor statistics])
  AC_PLUGIN([iptables],    [$with_libiptc],      [IPTables rule counters])
  AC_PLUGIN([ipvs],        [$plugin_ipvs],       [IPVS connection statistics])
  AC_PLUGIN([irq],         [$plugin_irq],        [IRQ statistics])
 +AC_PLUGIN([java],        [$with_java],         [Embed the Java Virtual Machine])
  AC_PLUGIN([libvirt],     [$plugin_libvirt],    [Virtual machine statistics])
  AC_PLUGIN([load],        [$plugin_load],       [System load])
  AC_PLUGIN([logfile],     [yes],                [File logging plugin])
@@@ -3590,7 -3169,6 +3608,7 @@@ AC_PLUGIN([match_regex], [yes]
  AC_PLUGIN([match_timediff], [yes],             [The timediff match])
  AC_PLUGIN([match_value], [yes],                [The value match])
  AC_PLUGIN([mbmon],       [yes],                [Query mbmond])
 +AC_PLUGIN([memcachec],   [$with_libmemcached], [memcachec statistics])
  AC_PLUGIN([memcached],   [yes],                [memcached statistics])
  AC_PLUGIN([memory],      [$plugin_memory],     [Memory usage])
  AC_PLUGIN([multimeter],  [$plugin_multimeter], [Read multimeter values])
@@@ -3611,7 -3189,6 +3629,7 @@@ AC_PLUGIN([ping],        [$with_libopin
  AC_PLUGIN([postgresql],  [$with_libpq],        [PostgreSQL database statistics])
  AC_PLUGIN([powerdns],    [yes],                [PowerDNS statistics])
  AC_PLUGIN([processes],   [$plugin_processes],  [Process statistics])
 +AC_PLUGIN([protocols],   [$plugin_protocols],  [Protocol (IP, TCP, ...) statistics])
  AC_PLUGIN([rrdcached],   [$librrd_rrdc_update], [RRDTool output plugin])
  AC_PLUGIN([rrdtool],     [$with_librrd],       [RRDTool output plugin])
  AC_PLUGIN([sensors],     [$with_libsensors],   [lm_sensors statistics])
@@@ -3619,7 -3196,6 +3637,7 @@@ AC_PLUGIN([serial],      [$plugin_seria
  AC_PLUGIN([snmp],        [$with_libnetsnmp],   [SNMP querying plugin])
  AC_PLUGIN([swap],        [$plugin_swap],       [Swap usage statistics])
  AC_PLUGIN([syslog],      [$have_syslog],       [Syslog logging plugin])
 +AC_PLUGIN([table],       [yes],                [Parsing of tabular data])
  AC_PLUGIN([tail],        [yes],                [Parsing of logfiles])
  AC_PLUGIN([tape],        [$plugin_tape],       [Tape drive statistics])
  AC_PLUGIN([target_notification], [yes],        [The notification target])
@@@ -3627,10 -3203,8 +3645,10 @@@ AC_PLUGIN([target_replace], [yes]
  AC_PLUGIN([target_set],  [yes],                [The set target])
  AC_PLUGIN([tcpconns],    [$plugin_tcpconns],   [TCP connection statistics])
  AC_PLUGIN([teamspeak2],  [yes],                [TeamSpeak2 server statistics])
 +AC_PLUGIN([ted],         [$plugin_ted],        [Read The Energy Detective values])
  AC_PLUGIN([thermal],     [$plugin_thermal],    [Linux ACPI thermal zone statistics])
  AC_PLUGIN([unixsock],    [yes],                [Unixsock communication plugin])
 +AC_PLUGIN([uptime],      [$plugin_uptime],     [Uptime statistics])
  AC_PLUGIN([users],       [$plugin_users],      [User statistics])
  AC_PLUGIN([uuid],        [yes],                [UUID as hostname plugin])
  AC_PLUGIN([vmem],        [$plugin_vmem],       [Virtual memory statistics])
@@@ -3638,86 -3212,6 +3656,86 @@@ AC_PLUGIN([vserver],     [$plugin_vserv
  AC_PLUGIN([wireless],    [$plugin_wireless],   [Wireless statistics])
  AC_PLUGIN([xmms],        [$with_libxmms],      [XMMS statistics])
  
 +dnl Default configuration file
 +# Load either syslog or logfile
 +LOAD_PLUGIN_SYSLOG=""
 +LOAD_PLUGIN_LOGFILE=""
 +
 +AC_MSG_CHECKING([which default log plugin to load])
 +default_log_plugin="none"
 +if test "x$enable_syslog" = "xyes"
 +then
 +      default_log_plugin="syslog"
 +else
 +      LOAD_PLUGIN_SYSLOG="##"
 +fi
 +
 +if test "x$enable_logfile" = "xyes"
 +then
 +      if test "x$default_log_plugin" = "xnone"
 +      then
 +              default_log_plugin="logfile"
 +      else
 +              LOAD_PLUGIN_LOGFILE="#"
 +      fi
 +else
 +      LOAD_PLUGIN_LOGFILE="##"
 +fi
 +AC_MSG_RESULT([$default_log_plugin])
 +
 +AC_SUBST(LOAD_PLUGIN_SYSLOG)
 +AC_SUBST(LOAD_PLUGIN_LOGFILE)
 +
 +DEFAULT_LOG_LEVEL="info"
 +if test "x$enable_debug" = "xyes"
 +then
 +      DEFAULT_LOG_LEVEL="debug"
 +fi
 +AC_SUBST(DEFAULT_LOG_LEVEL)
 +
 +# Load only one of rrdtool, network, csv in the default config.
 +LOAD_PLUGIN_RRDTOOL=""
 +LOAD_PLUGIN_NETWORK=""
 +LOAD_PLUGIN_CSV=""
 +
 +AC_MSG_CHECKING([which default write plugin to load])
 +default_write_plugin="none"
 +if test "x$enable_rrdtool" = "xyes"
 +then
 +      default_write_plugin="rrdtool"
 +else
 +      LOAD_PLUGIN_RRDTOOL="##"
 +fi
 +
 +if test "x$enable_network" = "xyes"
 +then
 +      if test "x$default_write_plugin" = "xnone"
 +      then
 +              default_write_plugin="network"
 +      else
 +              LOAD_PLUGIN_NETWORK="#"
 +      fi
 +else
 +      LOAD_PLUGIN_NETWORK="##"
 +fi
 +
 +if test "x$enable_csv" = "xyes"
 +then
 +      if test "x$default_write_plugin" = "xnone"
 +      then
 +              default_write_plugin="csv"
 +      else
 +              LOAD_PLUGIN_CSV="#"
 +      fi
 +else
 +      LOAD_PLUGIN_CSV="##"
 +fi
 +AC_MSG_RESULT([$default_write_plugin])
 +
 +AC_SUBST(LOAD_PLUGIN_RRDTOOL)
 +AC_SUBST(LOAD_PLUGIN_NETWORK)
 +AC_SUBST(LOAD_PLUGIN_CSV)
 +
  dnl ip_vs.h
  if test "x$ac_system" = "xLinux" \
        && test "x$have_net_ip_vs_h$have_ip_vs_h" = "xnono"
@@@ -3772,7 -3266,7 +3790,7 @@@ AC_SUBST(LCC_VERSION_STRING
  
  AC_CONFIG_FILES(src/libcollectdclient/lcc_features.h)
  
 -AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/owniptc/Makefile src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile src/liboping/Makefile bindings/Makefile)
 +AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/owniptc/Makefile src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile bindings/Makefile bindings/java/Makefile)
  
  if test "x$with_librrd" = "xyes" \
        && test "x$librrd_threadsafe" != "xyes"
@@@ -3780,6 -3274,12 +3798,6 @@@ the
        with_librrd="yes (warning: librrd is not thread-safe)"
  fi
  
 -if test "x$with_liboping" = "xyes" \
 -      && test "x$with_own_liboping" = "xyes"
 -then
 -      with_liboping="yes (shipped version)"
 -fi
 -
  if test "x$with_libiptc" = "xyes" -a "x$with_own_libiptc" = "xyes"
  then
        with_libiptc="yes (shipped version)"
@@@ -3810,14 -3310,10 +3828,14 @@@ Configuration
      libcurl . . . . . . . $with_libcurl
      libdbi  . . . . . . . $with_libdbi
      libesmtp  . . . . . . $with_libesmtp
 +    libganglia  . . . . . $with_libganglia
 +    libgcrypt . . . . . . $with_libgcrypt
      libiokit  . . . . . . $with_libiokit
      libiptc . . . . . . . $with_libiptc
 +    libjvm  . . . . . . . $with_java
      libkstat  . . . . . . $with_kstat
      libkvm  . . . . . . . $with_libkvm
 +    libmemcached  . . . . $with_libmemcached
      libmysql  . . . . . . $with_libmysql
      libnetlink  . . . . . $with_libnetlink
      libnetsnmp  . . . . . $with_libnetsnmp
      ascent  . . . . . . . $enable_ascent
      battery . . . . . . . $enable_battery
      bind  . . . . . . . . $enable_bind
 +    conntrack . . . . . . $enable_conntrack
      cpu . . . . . . . . . $enable_cpu
      cpufreq . . . . . . . $enable_cpufreq
      csv . . . . . . . . . $enable_csv
      entropy . . . . . . . $enable_entropy
      exec  . . . . . . . . $enable_exec
      filecount . . . . . . $enable_filecount
 +    fscache . . . . . . . $enable_fscache
 +    gmond . . . . . . . . $enable_gmond
      hddtemp . . . . . . . $enable_hddtemp
      interface . . . . . . $enable_interface
      ipmi  . . . . . . . . $enable_ipmi
      iptables  . . . . . . $enable_iptables
      ipvs  . . . . . . . . $enable_ipvs
      irq . . . . . . . . . $enable_irq
 +    java  . . . . . . . . $enable_java
      libvirt . . . . . . . $enable_libvirt
      load  . . . . . . . . $enable_load
      logfile . . . . . . . $enable_logfile
      match_timediff  . . . $enable_match_timediff
      match_value . . . . . $enable_match_value
      mbmon . . . . . . . . $enable_mbmon
 +    memcachec . . . . . . $enable_memcachec
      memcached . . . . . . $enable_memcached
      memory  . . . . . . . $enable_memory
      multimeter  . . . . . $enable_multimeter
      postgresql  . . . . . $enable_postgresql
      powerdns  . . . . . . $enable_powerdns
      processes . . . . . . $enable_processes
 +    protocols . . . . . . $enable_protocols
      rrdcached . . . . . . $enable_rrdcached
      rrdtool . . . . . . . $enable_rrdtool
      sensors . . . . . . . $enable_sensors
      snmp  . . . . . . . . $enable_snmp
      swap  . . . . . . . . $enable_swap
      syslog  . . . . . . . $enable_syslog
 +    table . . . . . . . . $enable_table
      tail  . . . . . . . . $enable_tail
      tape  . . . . . . . . $enable_tape
      target_notification . $enable_target_notification
      target_set  . . . . . $enable_target_set
      tcpconns  . . . . . . $enable_tcpconns
      teamspeak2  . . . . . $enable_teamspeak2
 +    ted . . . . . . . . . $enable_ted
      thermal . . . . . . . $enable_thermal
      unixsock  . . . . . . $enable_unixsock
 +    uptime  . . . . . . . $enable_uptime
      users . . . . . . . . $enable_users
      uuid  . . . . . . . . $enable_uuid
      vmem  . . . . . . . . $enable_vmem
  EOF
  
  if test "x$dependency_error" = "xyes"; then
 -      AC_MSG_ERROR("Some plugins are missing dependencies - see above summary for details")
 +      AC_MSG_ERROR("Some plugins are missing dependencies - see the summary above for details")
 +fi
 +
 +if test "x$dependency_warning" = "xyes"; then
 +      AC_MSG_WARN("Some plugins seem to have missing dependencies but have been enabled forcibly - see the summary above for details")
  fi
  
  # vim: set fdm=marker :
diff --combined src/iptables.c
@@@ -2,7 -2,6 +2,7 @@@
   * collectd - src/iptables.c
   * Copyright (C) 2007 Sjoerd van der Berg
   * Copyright (C) 2007 Florian octo Forster
 + * Copyright (C) 2009 Marco Chiappero
   *
   * 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
@@@ -21,7 -20,6 +21,7 @@@
   * Authors:
   *  Sjoerd van der Berg <harekiet at users.sourceforge.net>
   *  Florian Forster <octo at verplant.org>
 + *  Marco Chiappero <marco at absence.it>
   **/
  
  #include "collectd.h"
  #include "plugin.h"
  #include "configfile.h"
  
 +#include <sys/socket.h>
 +
  #if OWN_LIBIPTC
  # include "owniptc/libiptc.h"
 +# include "owniptc/libip6tc.h"
  #else
  # include <libiptc/libiptc.h>
 +# include <libiptc/libip6tc.h>
  #endif
  
  /*
+  * iptc_handle_t was available before libiptc was officially available as a
+  * shared library. Note, that when the shared lib was introduced, the API and
+  * ABI have changed slightly:
+  * 'iptc_handle_t' used to be 'struct iptc_handle *' and most functions used
+  * 'iptc_handle_t *' as an argument. Now, most functions use 'struct
+  * iptc_handle *' (thus removing one level of pointer indirection).
+  *
+  * HAVE_IPTC_HANDLE_T is used to determine which API ought to be used. While
+  * this is somewhat hacky, I didn't find better way to solve that :-/
+  * -tokkee
+  */
+ #ifndef HAVE_IPTC_HANDLE_T
+ typedef struct iptc_handle iptc_handle_t;
+ #endif
++#ifndef HAVE_IP6TC_HANDLE_T
++typedef struct ip6tc_handle ip6tc_handle_t;
++#endif
+ /*
   * (Module-)Global variables
   */
  
  static const char *config_keys[] =
  {
        "Chain",
 -      NULL
 +      "Chain6"
  };
 -static int config_keys_num = 1;
 +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
  /*
      Each table/chain combo that will be queried goes into this list
  */
 +
 +enum protocol_version_e
 +{
 +    IPV4,
 +    IPV6
 +};
 +typedef enum protocol_version_e protocol_version_t;
 +
  #ifndef XT_TABLE_MAXNAMELEN
  # define XT_TABLE_MAXNAMELEN 32
  #endif
  typedef struct {
 +    protocol_version_t ip_version;
      char table[XT_TABLE_MAXNAMELEN];
      char chain[XT_TABLE_MAXNAMELEN];
      union
@@@ -90,15 -91,7 +109,15 @@@ static int chain_num = 0
  
  static int iptables_config (const char *key, const char *value)
  {
 +      /* int ip_value; */
 +      protocol_version_t ip_version = 0;
 +
        if (strcasecmp (key, "Chain") == 0)
 +              ip_version = IPV4;
 +      else if (strcasecmp (key, "Chain6") == 0)
 +              ip_version = IPV6;
 +
 +      if (( ip_version == IPV4 ) || ( ip_version == IPV6 ))
        {
                ip_chain_t temp, *final, **list;
                char *table;
                    return (1);
                }
  
 +              /*
 +               *  Time to fill the temp element
 +               *  Examine value string, it should look like:
 +               *  Chain[6] <table> <chain> [<comment|num> [name]]
 +                       */
 +
 +              /* set IPv4 or IPv6 */
 +                temp.ip_version = ip_version;
 +
                /* Chain <table> <chain> [<comment|num> [name]] */
                fields_num = strsplit (value_copy, fields, 4);
                if (fields_num < 2)
        return (0);
  } /* int iptables_config */
  
 +static int submit6_match (const struct ip6t_entry_match *match,
 +                const struct ip6t_entry *entry,
 +                const ip_chain_t *chain,
 +                int rule_num)
 +{
 +    int status;
 +    value_t values[1];
 +    value_list_t vl = VALUE_LIST_INIT;
 +
 +    /* Select the rules to collect */
 +    if (chain->rule_type == RTYPE_NUM)
 +    {
 +        if (chain->rule.num != rule_num)
 +            return (0);
 +    }
 +    else
 +    {
 +        if (strcmp (match->u.user.name, "comment") != 0)
 +            return (0);
 +        if ((chain->rule_type == RTYPE_COMMENT)
 +                && (strcmp (chain->rule.comment, (char *) match->data) != 0))
 +            return (0);
 +    }
 +
 +    vl.values = values;
 +    vl.values_len = 1;
 +    sstrncpy (vl.host, hostname_g, sizeof (vl.host));
 +    sstrncpy (vl.plugin, "ip6tables", sizeof (vl.plugin));
 +
 +    status = ssnprintf (vl.plugin_instance, sizeof (vl.plugin_instance),
 +            "%s-%s", chain->table, chain->chain);
 +    if ((status < 1) || ((unsigned int)status >= sizeof (vl.plugin_instance)))
 +        return (0);
 +
 +    if (chain->name[0] != '\0')
 +    {
 +        sstrncpy (vl.type_instance, chain->name, sizeof (vl.type_instance));
 +    }
 +    else
 +    {
 +        if (chain->rule_type == RTYPE_NUM)
 +            ssnprintf (vl.type_instance, sizeof (vl.type_instance),
 +                    "%i", chain->rule.num);
 +        else
 +            sstrncpy (vl.type_instance, (char *) match->data,
 +                    sizeof (vl.type_instance));
 +    }
 +
 +    sstrncpy (vl.type, "ipt_bytes", sizeof (vl.type));
 +    values[0].counter = (counter_t) entry->counters.bcnt;
 +    plugin_dispatch_values (&vl);
 +
 +    sstrncpy (vl.type, "ipt_packets", sizeof (vl.type));
 +    values[0].counter = (counter_t) entry->counters.pcnt;
 +    plugin_dispatch_values (&vl);
 +
 +    return (0);
 +} /* int submit_match */
 +
 +
  /* This needs to return `int' for IPT_MATCH_ITERATE to work. */
  static int submit_match (const struct ipt_entry_match *match,
                const struct ipt_entry *entry,
      plugin_dispatch_values (&vl);
  
      return (0);
 -} /* void submit_match */
 +} /* int submit_match */
 +
  
 -static void submit_chain( iptc_handle_t *handle, ip_chain_t *chain ) {
 +/* ipv6 submit_chain */
 +static void submit6_chain( ip6tc_handle_t *handle, ip_chain_t *chain )
 +{
 +    const struct ip6t_entry *entry;
 +    int rule_num;
 +
 +    /* Find first rule for chain and use the iterate macro */
 +    entry = ip6tc_first_rule( chain->chain, handle );
 +    if (entry == NULL)
 +    {
 +        DEBUG ("ip6tc_first_rule failed: %s", ip6tc_strerror (errno));
 +        return;
 +    }
 +
 +    rule_num = 1;
 +    while (entry)
 +    {
 +        if (chain->rule_type == RTYPE_NUM)
 +        {
 +            submit6_match (NULL, entry, chain, rule_num);
 +        }
 +        else
 +        {
 +            IP6T_MATCH_ITERATE( entry, submit6_match, entry, chain, rule_num );
 +        }
 +
 +        entry = ip6tc_next_rule( entry, handle );
 +        rule_num++;
 +    } /* while (entry) */
 +}
 +
 +
 +/* ipv4 submit_chain */
 +static void submit_chain( iptc_handle_t *handle, ip_chain_t *chain )
 +{
      const struct ipt_entry *entry;
      int rule_num;
  
@@@ -414,53 -303,40 +433,67 @@@ static int iptables_read (void
  {
      int i;
      int num_failures = 0;
 +    ip_chain_t *chain;
  
      /* Init the iptc handle structure and query the correct table */    
      for (i = 0; i < chain_num; i++)
      {
 -#ifdef HAVE_IPTC_HANDLE_T
 -      iptc_handle_t _handle;
 -      iptc_handle_t *handle = &_handle;
 -#else
 -      iptc_handle_t *handle;
 -#endif
 -      ip_chain_t *chain;
 -      
        chain = chain_list[i];
 +      
        if (!chain)
        {
            DEBUG ("iptables plugin: chain == NULL");
            continue;
        }
  
-                 iptc_handle_t handle;
 +      if ( chain->ip_version == IPV4 )
 +        {
 -      *handle = iptc_init (chain->table);
+ #ifdef HAVE_IPTC_HANDLE_T
 -      handle = iptc_init (chain->table);
++              iptc_handle_t _handle;
++              iptc_handle_t *handle = &_handle;
++
++              *handle = iptc_init (chain->table);
+ #else
 -      if (!handle)
 -      {
 -          ERROR ("iptables plugin: iptc_init (%s) failed: %s",
 -                  chain->table, iptc_strerror (errno));
 -          num_failures++;
 -          continue;
 -      }
++              iptc_handle_t *handle;
 +                handle = iptc_init (chain->table);
+ #endif
  
 -      submit_chain (handle, chain);
 -      iptc_free (handle);
 +                if (!handle)
 +                {
 +                        ERROR ("iptables plugin: iptc_init (%s) failed: %s",
 +                                chain->table, iptc_strerror (errno));
 +                        num_failures++;
 +                        continue;
 +                }
 +
-                 submit_chain (&handle, chain);
-                 iptc_free (&handle);
++                submit_chain (handle, chain);
++                iptc_free (handle);
 +        }
 +        else if ( chain->ip_version == IPV6 )
 +        {
-                 ip6tc_handle_t handle;
++#ifdef HAVE_IP6TC_HANDLE_T
++              ip6tc_handle_t _handle;
++              ip6tc_handle_t *handle = &_handle;
++
++              *handle = ip6tc_init (chain->table);
++#else
++                ip6tc_handle_t *handle;
 +                handle = ip6tc_init (chain->table);
++#endif
 +
 +                if (!handle)
 +                {
 +                        ERROR ("iptables plugin: ip6tc_init (%s) failed: %s",
 +                                chain->table, ip6tc_strerror (errno));
 +                        num_failures++;
 +                        continue;
 +                }
 +
-                 submit6_chain (&handle, chain);
-                 ip6tc_free (&handle);
++                submit6_chain (handle, chain);
++                ip6tc_free (handle);
 +        }
 +        else num_failures++;
 +
      } /* for (i = 0 .. chain_num) */
  
      return ((num_failures < chain_num) ? 0 : -1);