pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/sysutils/collectd



Module Name:    pkgsrc
Committed By:   fhajny
Date:           Wed Dec  7 17:28:39 UTC 2016

Modified Files:
        pkgsrc/sysutils/collectd: Makefile.common distinfo
        pkgsrc/sysutils/collectd/patches: patch-src_cpu.c patch-src_df.c
            patch-src_disk.c patch-src_entropy.c patch-src_irq.c
            patch-src_libcollectclient_network__buffer.c patch-src_memory.c
            patch-src_processes.c patch-src_swap.c patch-src_tcpconns.c
            patch-src_utils__dns.c patch-src_utils__format__kairosdb.c

Log Message:
Update sysutils/collectd to 5.6.2.
Most of the NetBSD specific patches were re-applied due to code
syntax changes.

Upstream changes in 5.6.2:
- collectd: A compile error on AIX has been fixed: "MSG_DONTWAIT" is not
  available on AIX.
- collectd: The capability checking has been rewritten to be more
  portable.
- collectd.conf(5): Various typos have been fixed.
- collectd-tg: Incorrect usage of "nanosleep()" has been fixed which
  caused the tool to sleep (almost) indefinitely.
- Build system: Detection of the Java environment has been made
  deterministic to allow for reproducible builds.
- Build system: Detection of the Lua headers has been improved.
- APC UPS plugin: Unavailable metrics are now skipped instead of
  reported as 0 (zero).
- Modbus plugin: Build issues on FreeBSD have been fixed.
- OpenVPN plugin: Gracefully handle empty configurations.
- PowerDNS plugin: The "recursor command" has been fixed so PowerDNS can
  correctly parse all requested fields.
- Write Graphite and AMQP plugins: A bug that could lead to a missing
  null-termination has been fixed.
- Write HTTP plugin: A logic error when checking the correctness of the
  data set has been fixed.
- Write Kafka plugin: The "Key Random" config option has been fixed.
- Write Kafka plugin: Support for librdkafka 0.9.0 has been added.
- Write Riemann plugin: Build issues on Solaris have been fixed.
- ZFS ARC plugin: A duplicate metric has been removed.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 pkgsrc/sysutils/collectd/Makefile.common
cvs rdiff -u -r1.29 -r1.30 pkgsrc/sysutils/collectd/distinfo
cvs rdiff -u -r1.2 -r1.3 pkgsrc/sysutils/collectd/patches/patch-src_cpu.c \
    pkgsrc/sysutils/collectd/patches/patch-src_libcollectclient_network__buffer.c
cvs rdiff -u -r1.4 -r1.5 pkgsrc/sysutils/collectd/patches/patch-src_df.c
cvs rdiff -u -r1.1 -r1.2 pkgsrc/sysutils/collectd/patches/patch-src_disk.c \
    pkgsrc/sysutils/collectd/patches/patch-src_utils__dns.c \
    pkgsrc/sysutils/collectd/patches/patch-src_utils__format__kairosdb.c
cvs rdiff -u -r1.6 -r1.7 pkgsrc/sysutils/collectd/patches/patch-src_entropy.c
cvs rdiff -u -r1.3 -r1.4 pkgsrc/sysutils/collectd/patches/patch-src_irq.c \
    pkgsrc/sysutils/collectd/patches/patch-src_memory.c \
    pkgsrc/sysutils/collectd/patches/patch-src_processes.c \
    pkgsrc/sysutils/collectd/patches/patch-src_swap.c
cvs rdiff -u -r1.5 -r1.6 \
    pkgsrc/sysutils/collectd/patches/patch-src_tcpconns.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/sysutils/collectd/Makefile.common
diff -u pkgsrc/sysutils/collectd/Makefile.common:1.12 pkgsrc/sysutils/collectd/Makefile.common:1.13
--- pkgsrc/sysutils/collectd/Makefile.common:1.12       Thu Oct 13 15:17:28 2016
+++ pkgsrc/sysutils/collectd/Makefile.common    Wed Dec  7 17:28:39 2016
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.common,v 1.12 2016/10/13 15:17:28 fhajny Exp $
+# $NetBSD: Makefile.common,v 1.13 2016/12/07 17:28:39 fhajny Exp $
 #
 # used by sysutils/collectd/Makefile
 # used by sysutils/collectd-amqp/Makefile
@@ -16,7 +16,7 @@
 # used by sysutils/p5-collectd/Makefile
 # used by sysutils/py-collectd/Makefile
 
-DISTNAME=      collectd-5.6.1
+DISTNAME=      collectd-5.6.2
 MASTER_SITES=  http://collectd.org/files/
 CATEGORIES=    sysutils
 EXTRACT_SUFX=  .tar.bz2

Index: pkgsrc/sysutils/collectd/distinfo
diff -u pkgsrc/sysutils/collectd/distinfo:1.29 pkgsrc/sysutils/collectd/distinfo:1.30
--- pkgsrc/sysutils/collectd/distinfo:1.29      Sun Nov 20 22:11:28 2016
+++ pkgsrc/sysutils/collectd/distinfo   Wed Dec  7 17:28:39 2016
@@ -1,24 +1,24 @@
-$NetBSD: distinfo,v 1.29 2016/11/20 22:11:28 joerg Exp $
+$NetBSD: distinfo,v 1.30 2016/12/07 17:28:39 fhajny Exp $
 
-SHA1 (collectd-5.6.1.tar.bz2) = 20b773928743b346e0962fc1dc37167390a16d80
-RMD160 (collectd-5.6.1.tar.bz2) = 5247f6b4a0936ac9715189e16afe6f65bee94788
-SHA512 (collectd-5.6.1.tar.bz2) = da25f1a9cbaf47533f5a4d2f5f78b966317d4f21865c5a714954ad9d7d02b4798a3e0471ce52199dc80e01dc2808376cb10a7e19c402aafc984bf595f09951a6
-Size (collectd-5.6.1.tar.bz2) = 1903962 bytes
+SHA1 (collectd-5.6.2.tar.bz2) = 358b53ac5e0b00532d74bd40eb2658c6772d1458
+RMD160 (collectd-5.6.2.tar.bz2) = 81818c24db06f7a8922dc24e7be8cbf5d86e050c
+SHA512 (collectd-5.6.2.tar.bz2) = 81438e2e653649cf8a447f475b41844b7adb8ec436b43fb395ba9cf8b09b56a068633fe4b6c802d5cde3909d85a3af2542f5804005b3843f7936a37553911d61
+Size (collectd-5.6.2.tar.bz2) = 1806969 bytes
 SHA1 (patch-Makefile.am) = ed45b75293a4ea2dd577d04eeb3b9017b8f47319
 SHA1 (patch-configure.ac) = f450d6b00e5c7c37214b4d90ca057c515ed08fa1
 SHA1 (patch-src_Makefile.am) = 1d5cc2f58ce776df04feab2afc937f12ee7b0765
 SHA1 (patch-src_collectd.conf.in) = f0b35085cf0ddfd766e140b145177ab1f1326f5f
-SHA1 (patch-src_cpu.c) = 32af60d7e49edf9d16481b705bc1ea429c90c82b
+SHA1 (patch-src_cpu.c) = e645ae6b05c051c3c878f88a493fbbd7d548bb66
 SHA1 (patch-src_daemon_Makefile.am) = e38d465faf8bdd750fd9cb7f0bd9f041fcc8f83c
-SHA1 (patch-src_df.c) = 7e75dfbc72ecad48eb0eb7427a19329daf6b9a60
-SHA1 (patch-src_disk.c) = 159862e8ca1e841e3c4013c03ba03f059fdbbab5
-SHA1 (patch-src_entropy.c) = 4fa683654936f57fb7366faebb93d572af08db9c
-SHA1 (patch-src_irq.c) = 6e414b6fd664e784edd5aa9f907c8cfa80a0cd48
-SHA1 (patch-src_libcollectclient_network__buffer.c) = 76c94284b4078259985b70168342ac306b4505b7
-SHA1 (patch-src_memory.c) = b15225915ff23beed0b75c45be2eb3940d3717fd
+SHA1 (patch-src_df.c) = 5c6549cd9ec72efed5cdb7d8dd9297c50491426e
+SHA1 (patch-src_disk.c) = 1d458db9753be9c8ad1ae5edb3468acf7419a66b
+SHA1 (patch-src_entropy.c) = 86e4a1a2160ae5967c8a6d242aefcc298eeb8cbf
+SHA1 (patch-src_irq.c) = 78f1757ff2ed6db9fb1d0e773c2a01eb190d53a0
+SHA1 (patch-src_libcollectclient_network__buffer.c) = 62924943831e6d0585b103e567888f9af5c46f9e
+SHA1 (patch-src_memory.c) = 2934cd50e454fc14d0ec952854c88b0a830fa9a7
 SHA1 (patch-src_netstat__udp.c) = 30cb12d25f56c60959658dbd181783212e00cc61
-SHA1 (patch-src_processes.c) = e00d2edf6b4e6bfe3663e34fffb05f40652affe5
-SHA1 (patch-src_swap.c) = 304a25324099495fb875127221ed5fc95173a164
-SHA1 (patch-src_tcpconns.c) = 712af1b821d62217283df884dd283d5b1218ab7c
-SHA1 (patch-src_utils__dns.c) = c3782dc9127f42da30e3142b853aa2cb2259af94
-SHA1 (patch-src_utils__format__kairosdb.c) = 4fd05adcf0bf47ed94ce60aad5d7332279b06224
+SHA1 (patch-src_processes.c) = 9a1a7a6943ea05d1a38cedf26e7aab8508df7ff1
+SHA1 (patch-src_swap.c) = 24da6e04e3006639311e8111f26f72e4fab4054a
+SHA1 (patch-src_tcpconns.c) = b85de1d0eb03989df12d9688b38d61733a13c028
+SHA1 (patch-src_utils__dns.c) = 138a3168dc109d785412ffd068edab3b4dacca36
+SHA1 (patch-src_utils__format__kairosdb.c) = 1b82ee092f8188a27645bcd67c811f0d31d54b70

Index: pkgsrc/sysutils/collectd/patches/patch-src_cpu.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_cpu.c:1.2 pkgsrc/sysutils/collectd/patches/patch-src_cpu.c:1.3
--- pkgsrc/sysutils/collectd/patches/patch-src_cpu.c:1.2        Thu Oct 13 15:17:28 2016
+++ pkgsrc/sysutils/collectd/patches/patch-src_cpu.c    Wed Dec  7 17:28:39 2016
@@ -1,50 +1,48 @@
-$NetBSD: patch-src_cpu.c,v 1.2 2016/10/13 15:17:28 fhajny Exp $
+$NetBSD: patch-src_cpu.c,v 1.3 2016/12/07 17:28:39 fhajny Exp $
 
 Port this too to NetBSD.
 
---- src/cpu.c.orig     2016-09-11 08:10:25.255038733 +0000
+--- src/cpu.c.orig     2016-11-30 08:52:01.308911943 +0000
 +++ src/cpu.c
-@@ -80,7 +80,9 @@
+@@ -81,7 +81,7 @@
  
  #if HAVE_SYSCTL
- # if defined(CTL_HW) && defined(HW_NCPU) \
--      && defined(CTL_KERN) && defined(KERN_CPTIME) && defined(CPUSTATES)
-+      && defined(CTL_KERN) \
-+      && (defined(KERN_CPTIME) || defined(KERN_CP_TIME)) \
-+      && defined(CPUSTATES)
- #  define CAN_USE_SYSCTL 1
- # else
- #  define CAN_USE_SYSCTL 0
-@@ -696,6 +698,24 @@ static int cpu_read (void)
+ #if defined(CTL_HW) && defined(HW_NCPU) && defined(CTL_KERN) &&                \
+-    defined(KERN_CPTIME) && defined(CPUSTATES)
++    (defined(KERN_CPTIME) || defined(KERN_CP_TIME)) && defined(CPUSTATES)
+ #define CAN_USE_SYSCTL 1
+ #else
+ #define CAN_USE_SYSCTL 0
+@@ -673,6 +673,24 @@ static int cpu_read(void) {
  
-       memset (cpuinfo, 0, sizeof (cpuinfo));
+   memset(cpuinfo, 0, sizeof(cpuinfo));
  
 +#if defined(KERN_CP_TIME) && defined(KERNEL_NETBSD)
-+       {
-+               int mib[] = {CTL_KERN, KERN_CP_TIME};
++  {
++    int mib[] = {CTL_KERN, KERN_CP_TIME};
 +
-+               cpuinfo_size = sizeof(cpuinfo[0]) * numcpu * CPUSTATES;
-+               status = sysctl(mib, 2, cpuinfo, &cpuinfo_size, NULL, 0);
-+               if (status == -1) {
-+                       char errbuf[1024];
++    cpuinfo_size = sizeof(cpuinfo[0]) * numcpu * CPUSTATES;
++    status = sysctl(mib, 2, cpuinfo, &cpuinfo_size, NULL, 0);
++    if (status == -1) {
++      char errbuf[1024];
 +
-+                       ERROR ("cpu plugin: sysctl failed: %s.",
-+                              sstrerror (errno, errbuf, sizeof (errbuf)));
-+                       return -1;
-+               }
-+               if (cpuinfo_size == (sizeof(cpuinfo[0]) * CPUSTATES)) {
-+                       numcpu = 1;
-+               }
-+       }
++      ERROR ("cpu plugin: sysctl failed: %s.",
++             sstrerror (errno, errbuf, sizeof (errbuf)));
++      return -1;
++    }
++    if (cpuinfo_size == (sizeof(cpuinfo[0]) * CPUSTATES)) {
++      numcpu = 1;
++    }
++  }
 +#else /* defined(KERN_CP_TIME) && defined(KERNEL_NETBSD) */
  #if defined(KERN_CPTIME2)
-       if (numcpu > 1) {
-               for (int i = 0; i < numcpu; i++) {
-@@ -735,6 +755,7 @@ static int cpu_read (void)
-                       cpuinfo[0][i] = cpuinfo_tmp[i];
-               }
-       }
+   if (numcpu > 1) {
+     for (int i = 0; i < numcpu; i++) {
+@@ -710,6 +728,7 @@ static int cpu_read(void) {
+       cpuinfo[0][i] = cpuinfo_tmp[i];
+     }
+   }
 +#endif /* defined(KERN_CP_TIME) && defined(KERNEL_NETBSD) */
  
-       for (int i = 0; i < numcpu; i++) {
-               cpu_stage (i, COLLECTD_CPU_STATE_USER,      (derive_t) cpuinfo[i][CP_USER], now);
+   for (int i = 0; i < numcpu; i++) {
+     cpu_stage(i, COLLECTD_CPU_STATE_USER, (derive_t)cpuinfo[i][CP_USER], now);
Index: pkgsrc/sysutils/collectd/patches/patch-src_libcollectclient_network__buffer.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_libcollectclient_network__buffer.c:1.2 pkgsrc/sysutils/collectd/patches/patch-src_libcollectclient_network__buffer.c:1.3
--- pkgsrc/sysutils/collectd/patches/patch-src_libcollectclient_network__buffer.c:1.2   Thu Oct 13 15:17:28 2016
+++ pkgsrc/sysutils/collectd/patches/patch-src_libcollectclient_network__buffer.c       Wed Dec  7 17:28:39 2016
@@ -1,23 +1,23 @@
-$NetBSD: patch-src_libcollectclient_network__buffer.c,v 1.2 2016/10/13 15:17:28 fhajny Exp $
+$NetBSD: patch-src_libcollectclient_network__buffer.c,v 1.3 2016/12/07 17:28:39 fhajny Exp $
 
 Need the workaround on at least SunOS too.
---- src/libcollectdclient/network_buffer.c.orig        2016-09-11 08:10:25.263038721 +0000
+--- src/libcollectdclient/network_buffer.c.orig        2016-11-30 08:52:01.316911197 +0000
 +++ src/libcollectdclient/network_buffer.c
 @@ -36,7 +36,7 @@
  #include <pthread.h>
  
  #if HAVE_LIBGCRYPT
--# if defined __APPLE__
-+# if defined __APPLE__ || defined(__sun)
+-#if defined __APPLE__
++#if defined __APPLE__ || defined(__sun)
  /* default xcode compiler throws warnings even when deprecated functionality
   * is not used. -Werror breaks the build because of erroneous warnings.
   * http://stackoverflow.com/questions/10556299/compiler-warnings-with-libgcrypt-v1-5-0/12830209#12830209
 @@ -49,7 +49,7 @@
   */
- # define GCRYPT_NO_DEPRECATED
- # include <gcrypt.h>
--# if defined __APPLE__
-+# if defined(__APPLE__) || defined(__sun)
+ #define GCRYPT_NO_DEPRECATED
+ #include <gcrypt.h>
+-#if defined __APPLE__
++#if defined __APPLE__ || defined(__sun)
  /* Re enable deprecation warnings */
- #  pragma GCC diagnostic warning "-Wdeprecated-declarations"
- # endif
+ #pragma GCC diagnostic warning "-Wdeprecated-declarations"
+ #endif

Index: pkgsrc/sysutils/collectd/patches/patch-src_df.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_df.c:1.4 pkgsrc/sysutils/collectd/patches/patch-src_df.c:1.5
--- pkgsrc/sysutils/collectd/patches/patch-src_df.c:1.4 Tue Aug 18 07:52:20 2015
+++ pkgsrc/sysutils/collectd/patches/patch-src_df.c     Wed Dec  7 17:28:39 2016
@@ -1,12 +1,12 @@
-$NetBSD: patch-src_df.c,v 1.4 2015/08/18 07:52:20 he Exp $
+$NetBSD: patch-src_df.c,v 1.5 2016/12/07 17:28:39 fhajny Exp $
 
 Older NetBSD doesn't have float_t.
 
---- src/df.c.orig      2015-03-10 14:14:45.000000000 +0000
+--- src/df.c.orig      2016-11-30 08:52:01.312911569 +0000
 +++ src/df.c
 @@ -28,6 +28,14 @@
- #include "utils_mount.h"
  #include "utils_ignorelist.h"
+ #include "utils_mount.h"
  
 +#if defined(__NetBSD__)
 +#include <sys/param.h>
@@ -17,5 +17,5 @@ Older NetBSD doesn't have float_t.
 +#endif
 +
  #if HAVE_STATVFS
- # if HAVE_SYS_STATVFS_H
- #  include <sys/statvfs.h>
+ #if HAVE_SYS_STATVFS_H
+ #include <sys/statvfs.h>

Index: pkgsrc/sysutils/collectd/patches/patch-src_disk.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_disk.c:1.1 pkgsrc/sysutils/collectd/patches/patch-src_disk.c:1.2
--- pkgsrc/sysutils/collectd/patches/patch-src_disk.c:1.1       Tue Aug 11 13:19:21 2015
+++ pkgsrc/sysutils/collectd/patches/patch-src_disk.c   Wed Dec  7 17:28:39 2016
@@ -1,10 +1,10 @@
-$NetBSD: patch-src_disk.c,v 1.1 2015/08/11 13:19:21 he Exp $
+$NetBSD: patch-src_disk.c,v 1.2 2016/12/07 17:28:39 fhajny Exp $
 
 Provide a port to NetBSD.
 
---- src/disk.c.orig    2015-03-10 14:14:45.000000000 +0000
+--- src/disk.c.orig    2016-11-30 08:52:01.312911569 +0000
 +++ src/disk.c
-@@ -124,6 +124,35 @@ static int numdisk;
+@@ -135,6 +135,35 @@ static int numdisk;
  static int pnumdisk;
  /* #endif HAVE_PERFSTAT */
  
@@ -14,21 +14,21 @@ Provide a port to NetBSD.
 +#include <sys/iostat.h>
 +
 +typedef struct diskstats {
-+      char *name;
++  char *name;
 +
-+      u_int poll_count;
++  u_int poll_count;
 +
-+      derive_t read_ops;
-+      derive_t write_ops;
++  derive_t read_ops;
++  derive_t write_ops;
 +
-+      derive_t read_bytes;
-+      derive_t write_bytes;
++  derive_t read_bytes;
++  derive_t write_bytes;
 +
-+      derive_t avg_io_time;
++  derive_t avg_io_time;
 +
-+      struct io_sysctl stats;
++  struct io_sysctl stats;
 +
-+      struct diskstats *next;
++  struct diskstats *next;
 +} diskstats_t;
 +
 +static diskstats_t *disklist;
@@ -38,172 +38,171 @@ Provide a port to NetBSD.
 +/* #endif HAVE_SYSCTL && KERNEL_NETBSD */
 +
  #else
- # error "No applicable input method."
+ #error "No applicable input method."
  #endif
-@@ -241,7 +270,34 @@ static int disk_init (void)
-                       continue;
-               ksp[numdisk++] = ksp_chain;
-       }
+@@ -253,7 +282,33 @@ static int disk_init(void) {
+       continue;
+     ksp[numdisk++] = ksp_chain;
+   }
 -#endif /* HAVE_LIBKSTAT */
 +/* #endif HAVE_LIBKSTAT */
 +
 +#elif HAVE_SYSCTL && KERNEL_NETBSD
-+      int mib[3];
-+      size_t size;
++  int mib[3];
++  size_t size;
 +
-+      /* figure out number of drives */
-+      mib[0] = CTL_HW;
-+      mib[1] = HW_IOSTATS;
-+      mib[2] = sizeof(struct io_sysctl);
-+      if (sysctl(mib, 3, NULL, &size, NULL, 0) == -1) {
-+              ERROR ("disk plugin: sysctl for ndrives failed");
-+              return -1;
-+      }
-+      ndrive = size / sizeof(struct io_sysctl);
-+
-+      if (size == 0 ) {
-+              ERROR ("disk plugin: no drives found");
-+              return -1;
-+      }
-+      drives = (struct io_sysctl *)malloc(size);
-+      if (drives == NULL) {
-+              ERROR ("disk plugin: memory allocation failure");
-+              return -1;
-+      }
-+
-+#endif        /* HAVE_SYSCTL && KERNEL_NETBSD */
++  /* figure out number of drives */
++  mib[0] = CTL_HW;
++  mib[1] = HW_IOSTATS;
++  mib[2] = sizeof(struct io_sysctl);
++  if (sysctl(mib, 3, NULL, &size, NULL, 0) == -1) {
++    ERROR ("disk plugin: sysctl for ndrives failed");
++    return -1;
++  }
++  ndrive = size / sizeof(struct io_sysctl);
++
++  if (size == 0 ) {
++    ERROR ("disk plugin: no drives found");
++    return -1;
++  }
++  drives = (struct io_sysctl *)malloc(size);
++  if (drives == NULL) {
++    ERROR ("disk plugin: memory allocation failure");
++    return -1;
++  }
 +
++#endif /* HAVE_SYSCTL && KERNEL_NETBSD */
  
-       return (0);
+   return (0);
  } /* int disk_init */
-@@ -929,7 +985,129 @@ static int disk_read (void)
-               write_time *= ((double)(_system_configuration.Xint)/(double)(_system_configuration.Xfrac)) / 1000000.0;
-               disk_submit (stat_disk[i].name, "disk_time", read_time, write_time);
-       }
+@@ -1026,7 +1081,129 @@ static int disk_read(void) {
+                   1000000.0;
+     disk_submit(stat_disk[i].name, "disk_time", read_time, write_time);
+   }
 -#endif /* defined(HAVE_PERFSTAT) */
 +/* #endif defined(HAVE_PERFSTAT) */
 +
 +#elif HAVE_SYSCTL && KERNEL_NETBSD
-+      int mib[3];
-+      size_t size, i, nndrive;
-+      diskstats_t *ds, *pre_ds;
-+      char *output_name;
-+
-+      u_int64_t ops;
-+      u_int64_t delta_t;
-+
-+      /* figure out number of drives */
-+      mib[0] = CTL_HW;
-+      mib[1] = HW_IOSTATS;
-+      mib[2] = sizeof(struct io_sysctl);
-+      if (sysctl(mib, 3, NULL, &size, NULL, 0) == -1) {
-+              ERROR ("disk plugin: sysctl for ndrives failed");
-+              return -1;
-+      }
-+      nndrive = size / sizeof(struct io_sysctl);
-+
-+      if (size == 0 ) {
-+              ERROR ("disk plugin: no drives found");
-+              return -1;
-+      }
-+      /* number of drives changed, reallocate buffer */
-+      if (nndrive != ndrive) {
-+              drives = (struct io_sysctl *)realloc(drives, size);
-+              if (drives == NULL) {
-+                      ERROR ("disk plugin: memory allocation failure");
-+                      return -1;
-+              }
-+              ndrive = nndrive;
-+      }
-+
-+      /* get stats for all drives */
-+      mib[0] = CTL_HW;
-+      mib[1] = HW_IOSTATS;
-+      mib[2] = sizeof(struct io_sysctl);
-+      if (sysctl(mib, 3, drives, &size, NULL, 0) == -1) {
-+              ERROR ("disk plugin: sysctl for drive stats failed");
-+              return -1;
-+      }
-+
-+      for (i = 0; i < ndrive; i++) {
-+
-+              if (drives[i].type != IOSTAT_DISK)
-+                      continue;
-+
-+              /* find drive stats, if present */
-+              for (ds = disklist, pre_ds = disklist;
-+                   ds != NULL;
-+                   pre_ds = ds, ds = ds->next) {
-+                      if (strcmp (drives[i].name, ds->name) == 0)
-+                              break;
-+              }
-+              if (ds == NULL) { /* not found; allocate & link in */
-+                      if ((ds = calloc(1, sizeof(diskstats_t))) == NULL)
-+                              continue;
-+                      if ((ds->name = strdup(drives[i].name)) == NULL) {
-+                              free(ds);
-+                              continue;
-+                      }
-+                      if (pre_ds == NULL)
-+                              disklist = ds;
-+                      else
-+                              pre_ds->next = ds;
-+              }
-+
-+              ds->poll_count++;
-+              if (ds->poll_count <= 2)
-+              {
-+                      DEBUG ("disk plugin: (ds->poll_count = %i) <= "
-+                                      "(min_poll_count = 2); => Not writing.",
-+                                      ds->poll_count);
-+                      ds->stats = drives[i]; /* but save base values */
-+                      continue;
-+              }
-+              ds->read_ops    = drives[i].rxfer - ds->stats.rxfer;
-+              ds->write_ops   = drives[i].wxfer - ds->stats.wxfer;
-+              ds->read_bytes  = drives[i].rbytes - ds->stats.rbytes;
-+              ds->write_bytes = drives[i].wbytes - ds->stats.wbytes;
-+
-+              /* Need this dance because of unsigned values... */
-+              if (drives[i].time_usec < ds->stats.time_usec) {
-+                      delta_t = ((drives[i].time_sec - 1 -
-+                                  ds->stats.time_sec) * 1000) +
-+                              ((drives[i].time_usec + 1000000 -
-+                                ds->stats.time_usec) / 1000);
-+              } else {
-+                      delta_t = ((drives[i].time_sec -
-+                                  ds->stats.time_sec) * 1000) +
-+                              ((drives[i].time_usec -
-+                                ds->stats.time_usec) / 1000);
-+              }
-+
-+              ops = ds->read_ops + ds->write_ops;
-+              if (ops == 0) {
-+                      DEBUG ("disk plugin: read + write ops == 0, "
-+                             "not writing");
-+                      continue;
-+              }
-+              
-+              ds->avg_io_time = delta_t / ops;
-+
-+              output_name = drives[i].name;
-+
-+              if ((ds->read_bytes != 0) || (ds->write_bytes != 0))
-+                      disk_submit (output_name, "disk_octets",
-+                                      ds->read_bytes, ds->write_bytes);
-+
-+              if ((ds->read_ops != 0) || (ds->write_ops != 0))
-+                      disk_submit (output_name, "disk_ops",
-+                                      ds->read_ops, ds->write_ops);
-+
-+              if (ds->avg_io_time != 0)
-+                      disk_submit (output_name, "disk_time",
-+                                      ds->avg_io_time, ds->avg_io_time);
-+              
-+              ds->stats = drives[i];
-+      }
++  int mib[3];
++  size_t size, i, nndrive;
++  diskstats_t *ds, *pre_ds;
++  char *output_name;
++
++  u_int64_t ops;
++  u_int64_t delta_t;
++
++  /* figure out number of drives */
++  mib[0] = CTL_HW;
++  mib[1] = HW_IOSTATS;
++  mib[2] = sizeof(struct io_sysctl);
++  if (sysctl(mib, 3, NULL, &size, NULL, 0) == -1) {
++    ERROR ("disk plugin: sysctl for ndrives failed");
++    return -1;
++  }
++  nndrive = size / sizeof(struct io_sysctl);
++
++  if (size == 0 ) {
++    ERROR ("disk plugin: no drives found");
++    return -1;
++  }
++  /* number of drives changed, reallocate buffer */
++  if (nndrive != ndrive) {
++    drives = (struct io_sysctl *)realloc(drives, size);
++    if (drives == NULL) {
++      ERROR ("disk plugin: memory allocation failure");
++      return -1;
++    }
++    ndrive = nndrive;
++  }
++
++  /* get stats for all drives */
++  mib[0] = CTL_HW;
++  mib[1] = HW_IOSTATS;
++  mib[2] = sizeof(struct io_sysctl);
++  if (sysctl(mib, 3, drives, &size, NULL, 0) == -1) {
++    ERROR ("disk plugin: sysctl for drive stats failed");
++    return -1;
++  }
++
++  for (i = 0; i < ndrive; i++) {
++
++    if (drives[i].type != IOSTAT_DISK)
++      continue;
++
++    /* find drive stats, if present */
++    for (ds = disklist, pre_ds = disklist;
++         ds != NULL;
++         pre_ds = ds, ds = ds->next) {
++      if (strcmp (drives[i].name, ds->name) == 0)
++        break;
++    }
++    if (ds == NULL) { /* not found; allocate & link in */
++      if ((ds = calloc(1, sizeof(diskstats_t))) == NULL)
++        continue;
++      if ((ds->name = strdup(drives[i].name)) == NULL) {
++        free(ds);
++        continue;
++      }
++      if (pre_ds == NULL)
++        disklist = ds;
++      else
++        pre_ds->next = ds;
++    }
++
++    ds->poll_count++;
++    if (ds->poll_count <= 2)
++    {
++      DEBUG ("disk plugin: (ds->poll_count = %i) <= "
++             "(min_poll_count = 2); => Not writing.",
++             ds->poll_count);
++      ds->stats = drives[i]; /* but save base values */
++      continue;
++    }
++    ds->read_ops    = drives[i].rxfer - ds->stats.rxfer;
++    ds->write_ops   = drives[i].wxfer - ds->stats.wxfer;
++    ds->read_bytes  = drives[i].rbytes - ds->stats.rbytes;
++    ds->write_bytes = drives[i].wbytes - ds->stats.wbytes;
++
++    /* Need this dance because of unsigned values... */
++    if (drives[i].time_usec < ds->stats.time_usec) {
++      delta_t = ((drives[i].time_sec - 1 -
++                  ds->stats.time_sec) * 1000) +
++                ((drives[i].time_usec + 1000000 -
++                  ds->stats.time_usec) / 1000);
++    } else {
++      delta_t = ((drives[i].time_sec -
++                  ds->stats.time_sec) * 1000) +
++                ((drives[i].time_usec -
++                  ds->stats.time_usec) / 1000);
++    }
++
++    ops = ds->read_ops + ds->write_ops;
++    if (ops == 0) {
++      DEBUG ("disk plugin: read + write ops == 0, "
++             "not writing");
++      continue;
++    }
++
++    ds->avg_io_time = delta_t / ops;
++
++    output_name = drives[i].name;
++
++    if ((ds->read_bytes != 0) || (ds->write_bytes != 0))
++      disk_submit (output_name, "disk_octets",
++                   ds->read_bytes, ds->write_bytes);
++
++    if ((ds->read_ops != 0) || (ds->write_ops != 0))
++      disk_submit (output_name, "disk_ops",
++                   ds->read_ops, ds->write_ops);
++
++    if (ds->avg_io_time != 0)
++      disk_submit (output_name, "disk_time",
++                   ds->avg_io_time, ds->avg_io_time);
++
++    ds->stats = drives[i];
++  }
 +
 +#endif /* HAVE_SYSCTL && KERNEL_NETBSD */
  
-       return (0);
+   return (0);
  } /* int disk_read */
Index: pkgsrc/sysutils/collectd/patches/patch-src_utils__dns.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_utils__dns.c:1.1 pkgsrc/sysutils/collectd/patches/patch-src_utils__dns.c:1.2
--- pkgsrc/sysutils/collectd/patches/patch-src_utils__dns.c:1.1 Tue Apr  7 13:20:41 2015
+++ pkgsrc/sysutils/collectd/patches/patch-src_utils__dns.c     Wed Dec  7 17:28:39 2016
@@ -1,15 +1,15 @@
-$NetBSD: patch-src_utils__dns.c,v 1.1 2015/04/07 13:20:41 fhajny Exp $
+$NetBSD: patch-src_utils__dns.c,v 1.2 2016/12/07 17:28:39 fhajny Exp $
 
 Resolve conflict with pkgsrc PCAP on NetBSD 7.
---- src/utils_dns.c.orig       2015-02-26 10:43:48.496180984 +0000
+--- src/utils_dns.c.orig       2016-11-30 08:52:01.328910078 +0000
 +++ src/utils_dns.c
-@@ -96,6 +96,9 @@
+@@ -91,6 +91,9 @@
  #endif
  
  #if HAVE_PCAP_H
 +# if defined(DLT_MATCHING_MAX)
 +#  undef DLT_MATCHING_MAX
 +# endif
- # include <pcap.h>
+ #include <pcap.h>
  #endif
  
Index: pkgsrc/sysutils/collectd/patches/patch-src_utils__format__kairosdb.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_utils__format__kairosdb.c:1.1 pkgsrc/sysutils/collectd/patches/patch-src_utils__format__kairosdb.c:1.2
--- pkgsrc/sysutils/collectd/patches/patch-src_utils__format__kairosdb.c:1.1    Sun Nov 20 22:11:28 2016
+++ pkgsrc/sysutils/collectd/patches/patch-src_utils__format__kairosdb.c        Wed Dec  7 17:28:39 2016
@@ -1,18 +1,16 @@
-$NetBSD: patch-src_utils__format__kairosdb.c,v 1.1 2016/11/20 22:11:28 joerg Exp $
+$NetBSD: patch-src_utils__format__kairosdb.c,v 1.2 2016/12/07 17:28:39 fhajny Exp $
 
---- src/utils_format_kairosdb.c.orig   2016-11-19 12:00:24.000000000 +0000
+--- src/utils_format_kairosdb.c.orig   2016-11-30 08:52:01.332909704 +0000
 +++ src/utils_format_kairosdb.c
-@@ -83,11 +83,11 @@ static int kairosdb_escape_string (char 
-   BUFFER_ADD ('"');
-   for (size_t src_pos = 0; string[src_pos] != 0; src_pos++)
-   {
--    if (isalnum(string[src_pos]) ||
-+    if (isalnum((unsigned char)string[src_pos]) ||
-       0x2d == string[src_pos] ||
-       0x2e == string[src_pos] ||
-       0x5f == string[src_pos])
--        BUFFER_ADD (tolower(string[src_pos]));
-+        BUFFER_ADD (tolower((unsigned char)string[src_pos]));
+@@ -80,9 +80,9 @@ static int kairosdb_escape_string(char *
+   /* authorize -_. and alpha num but also escapes " */
+   BUFFER_ADD('"');
+   for (size_t src_pos = 0; string[src_pos] != 0; src_pos++) {
+-    if (isalnum(string[src_pos]) || 0x2d == string[src_pos] ||
++    if ((unsigned char)isalnum(string[src_pos]) || 0x2d == string[src_pos] ||
+         0x2e == string[src_pos] || 0x5f == string[src_pos])
+-      BUFFER_ADD(tolower(string[src_pos]));
++      BUFFER_ADD(tolower((unsigned char)string[src_pos]));
    } /* for */
-   BUFFER_ADD ('"');
+   BUFFER_ADD('"');
    buffer[dst_pos] = 0;

Index: pkgsrc/sysutils/collectd/patches/patch-src_entropy.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_entropy.c:1.6 pkgsrc/sysutils/collectd/patches/patch-src_entropy.c:1.7
--- pkgsrc/sysutils/collectd/patches/patch-src_entropy.c:1.6    Sat Dec 12 22:23:32 2015
+++ pkgsrc/sysutils/collectd/patches/patch-src_entropy.c        Wed Dec  7 17:28:39 2016
@@ -1,50 +1,49 @@
-$NetBSD: patch-src_entropy.c,v 1.6 2015/12/12 22:23:32 he Exp $
+$NetBSD: patch-src_entropy.c,v 1.7 2016/12/07 17:28:39 fhajny Exp $
 
 Provide a NetBSD implementation for graphing available entropy.
 This version tries to keep /dev/urandom open (for repeated use),
 instead of constantly re-opening/closing it, since the latter will
 needlessly reduce the kernel's entropy estimate.
 
---- src/entropy.c.orig 2015-03-10 14:14:45.000000000 +0000
+--- src/entropy.c.orig 2016-11-30 08:52:01.312911569 +0000
 +++ src/entropy.c
-@@ -28,27 +28,16 @@
+@@ -29,27 +29,16 @@
  #include "common.h"
  #include "plugin.h"
  
 -#if !KERNEL_LINUX
--# error "No applicable input method."
--#endif
--
--#define ENTROPY_FILE "/proc/sys/kernel/random/entropy_avail"
--
--static void entropy_submit (double entropy)
--{
--      value_t values[1];
--      value_list_t vl = VALUE_LIST_INIT;
+-#error "No applicable input method."
 +static void entropy_submit (double);
 +static int entropy_read (void);
- 
--      values[0].gauge = entropy;
++
 +#if !KERNEL_LINUX && !KERNEL_NETBSD
 +#  error "No applicable input method."
-+#endif
+ #endif
  
--      vl.values = values;
--      vl.values_len = 1;
--      sstrncpy (vl.host, hostname_g, sizeof (vl.host));
--      sstrncpy (vl.plugin, "entropy", sizeof (vl.plugin));
--      sstrncpy (vl.type, "entropy", sizeof (vl.type));
 +#if KERNEL_LINUX
+ #define ENTROPY_FILE "/proc/sys/kernel/random/entropy_avail"
  
--      plugin_dispatch_values (&vl);
+-static void entropy_submit(double entropy) {
+-  value_t values[1];
+-  value_list_t vl = VALUE_LIST_INIT;
+-
+-  values[0].gauge = entropy;
+-
+-  vl.values = values;
+-  vl.values_len = 1;
+-  sstrncpy(vl.host, hostname_g, sizeof(vl.host));
+-  sstrncpy(vl.plugin, "entropy", sizeof(vl.plugin));
+-  sstrncpy(vl.type, "entropy", sizeof(vl.type));
+-
+-  plugin_dispatch_values(&vl);
 -}
-+#define ENTROPY_FILE "/proc/sys/kernel/random/entropy_avail"
- 
- static int entropy_read (void)
- {
-@@ -74,6 +63,68 @@ static int entropy_read (void)
+-
+ static int entropy_read(void) {
+   double entropy;
+   FILE *fh;
+@@ -72,6 +61,68 @@ static int entropy_read(void) {
  
-       return (0);
+   return (0);
  }
 +#endif /* KERNEL_LINUX */
 +
@@ -69,45 +68,45 @@ needlessly reduce the kernel's entropy e
 +static int
 +entropy_read (void)
 +{
-+      rndpoolstat_t rs;
-+      static int fd;
++  rndpoolstat_t rs;
++  static int fd;
 +
-+      if (fd == 0) {
-+              fd = open(_PATH_URANDOM, O_RDONLY, 0644);
-+              if (fd < 0) {
-+                      fd = 0;
-+                      return -1;
-+              }
-+      }
-+
-+      if (ioctl(fd, RNDGETPOOLSTAT, &rs) < 0) {
-+              (void) close(fd);
-+              fd = 0; /* signal a reopening on next attempt */
-+              return -1;
-+      }
++  if (fd == 0) {
++    fd = open(_PATH_URANDOM, O_RDONLY, 0644);
++    if (fd < 0) {
++      fd = 0;
++      return -1;
++    }
++  }
++
++  if (ioctl(fd, RNDGETPOOLSTAT, &rs) < 0) {
++    (void) close(fd);
++    fd = 0; /* signal a reopening on next attempt */
++    return -1;
++  }
 +
-+      entropy_submit (rs.curentropy);
++  entropy_submit (rs.curentropy);
 +
-+      return 0;
++  return 0;
 +}
 +
 +#endif /* KERNEL_NETBSD */
 +
 +static void entropy_submit (double entropy)
 +{
-+      value_t values[1];
-+      value_list_t vl = VALUE_LIST_INIT;
++  value_t values[1];
++  value_list_t vl = VALUE_LIST_INIT;
 +
-+      values[0].gauge = entropy;
++  values[0].gauge = entropy;
 +
-+      vl.values = values;
-+      vl.values_len = 1;
-+      sstrncpy (vl.host, hostname_g, sizeof (vl.host));
-+      sstrncpy (vl.plugin, "entropy", sizeof (vl.plugin));
-+      sstrncpy (vl.type, "entropy", sizeof (vl.type));
++  vl.values = values;
++  vl.values_len = 1;
++  sstrncpy (vl.host, hostname_g, sizeof (vl.host));
++  sstrncpy (vl.plugin, "entropy", sizeof (vl.plugin));
++  sstrncpy (vl.type, "entropy", sizeof (vl.type));
 +
-+      plugin_dispatch_values (&vl);
++  plugin_dispatch_values (&vl);
 +}
  
- void module_register (void)
- {
+ void module_register(void) {
+   plugin_register_read("entropy", entropy_read);

Index: pkgsrc/sysutils/collectd/patches/patch-src_irq.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_irq.c:1.3 pkgsrc/sysutils/collectd/patches/patch-src_irq.c:1.4
--- pkgsrc/sysutils/collectd/patches/patch-src_irq.c:1.3        Thu Oct 13 15:17:28 2016
+++ pkgsrc/sysutils/collectd/patches/patch-src_irq.c    Wed Dec  7 17:28:39 2016
@@ -1,8 +1,8 @@
-$NetBSD: patch-src_irq.c,v 1.3 2016/10/13 15:17:28 fhajny Exp $
+$NetBSD: patch-src_irq.c,v 1.4 2016/12/07 17:28:39 fhajny Exp $
 
 Provide a port to NetBSD.
 
---- src/irq.c.orig     2016-09-11 08:10:25.263038721 +0000
+--- src/irq.c.orig     2016-11-30 08:52:01.316911197 +0000
 +++ src/irq.c
 @@ -27,10 +27,20 @@
  #include "plugin.h"
@@ -10,7 +10,7 @@ Provide a port to NetBSD.
  
 -#if !KERNEL_LINUX
 +#if !KERNEL_LINUX && !KERNEL_NETBSD
- # error "No applicable input method."
+ #error "No applicable input method."
  #endif
  
 +#if KERNEL_NETBSD
@@ -26,17 +26,17 @@ Provide a port to NetBSD.
  /*
   * (Module-)Global variables
   */
-@@ -90,6 +100,7 @@ static void irq_submit (const char *irq_
-       plugin_dispatch_values (&vl);
+@@ -79,6 +89,7 @@ static void irq_submit(const char *irq_n
+   plugin_dispatch_values(&vl);
  } /* void irq_submit */
  
 +#if KERNEL_LINUX
- static int irq_read (void)
- {
-       FILE *fh;
-@@ -188,6 +199,64 @@ static int irq_read (void)
+ static int irq_read(void) {
+   FILE *fh;
+   char buffer[1024];
+@@ -171,6 +182,64 @@ static int irq_read(void) {
  
-       return (0);
+   return (0);
  } /* int irq_read */
 +#endif /* KERNEL_LINUX */
 +
@@ -44,58 +44,58 @@ Provide a port to NetBSD.
 +static int
 +irq_read (void)
 +{
-+      const int mib[4] = {
-+              CTL_KERN,
-+              KERN_EVCNT,
-+              EVCNT_TYPE_INTR,
-+              KERN_EVCNT_COUNT_NONZERO
-+      };
-+      size_t buflen = 0;
-+      void *buf = NULL;
-+      const struct evcnt_sysctl *evs, *last_evs;
-+
-+      for (;;) {
-+              size_t newlen;
-+              int error;
-+
-+              newlen = buflen;
-+              if (buflen)
-+                      buf = malloc(buflen);
-+              error = sysctl(mib, __arraycount(mib),
-+                             buf, &newlen, NULL, 0);
-+              if (error) {
-+                      ERROR("irq plugin: failed to get event count");
-+                      return -1;
-+              }
-+              if (newlen <= buflen) {
-+                      buflen = newlen;
-+                      break;
-+              }
-+              if (buf)
-+                      free(buf);
-+              buflen = newlen;
-+      }
-+      evs = buf;
-+      last_evs = (void*)((char *)buf + buflen);
-+      buflen /= sizeof(uint64_t);
-+      while(evs < last_evs
-+            && buflen > sizeof(*evs) / sizeof(uint64_t)
-+            && buflen >= evs->ev_len)
-+      {
-+              char irqname[80];
-+
-+              snprintf(irqname, 80, "%s-%s", evs->ev_strings,
-+                       evs->ev_strings + evs->ev_grouplen + 1);
-+
-+              irq_submit(irqname, evs->ev_count);
-+
-+              buflen -= evs->ev_len;
-+              evs =(const void*)((const uint64_t *)evs + evs->ev_len);
-+      }
-+      free(buf);
-+      return 0;
++  const int mib[4] = {
++    CTL_KERN,
++    KERN_EVCNT,
++    EVCNT_TYPE_INTR,
++    KERN_EVCNT_COUNT_NONZERO
++  };
++  size_t buflen = 0;
++  void *buf = NULL;
++  const struct evcnt_sysctl *evs, *last_evs;
++
++  for (;;) {
++    size_t newlen;
++    int error;
++
++    newlen = buflen;
++    if (buflen)
++      buf = malloc(buflen);
++    error = sysctl(mib, __arraycount(mib),
++                   buf, &newlen, NULL, 0);
++    if (error) {
++      ERROR("irq plugin: failed to get event count");
++      return -1;
++    }
++    if (newlen <= buflen) {
++      buflen = newlen;
++      break;
++    }
++    if (buf)
++            free(buf);
++    buflen = newlen;
++  }
++  evs = buf;
++  last_evs = (void*)((char *)buf + buflen);
++  buflen /= sizeof(uint64_t);
++  while(evs < last_evs
++    && buflen > sizeof(*evs) / sizeof(uint64_t)
++    && buflen >= evs->ev_len)
++  {
++    char irqname[80];
++
++    snprintf(irqname, 80, "%s-%s", evs->ev_strings,
++      evs->ev_strings + evs->ev_grouplen + 1);
++
++    irq_submit(irqname, evs->ev_count);
++
++    buflen -= evs->ev_len;
++    evs =(const void*)((const uint64_t *)evs + evs->ev_len);
++  }
++  free(buf);
++  return 0;
 +}
 +#endif /* KERNEL_NETBSD */
  
- void module_register (void)
- {
+ void module_register(void) {
+   plugin_register_config("irq", irq_config, config_keys, config_keys_num);
Index: pkgsrc/sysutils/collectd/patches/patch-src_memory.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_memory.c:1.3 pkgsrc/sysutils/collectd/patches/patch-src_memory.c:1.4
--- pkgsrc/sysutils/collectd/patches/patch-src_memory.c:1.3     Thu Oct 13 15:17:28 2016
+++ pkgsrc/sysutils/collectd/patches/patch-src_memory.c Wed Dec  7 17:28:39 2016
@@ -1,9 +1,9 @@
-$NetBSD: patch-src_memory.c,v 1.3 2016/10/13 15:17:28 fhajny Exp $
+$NetBSD: patch-src_memory.c,v 1.4 2016/12/07 17:28:39 fhajny Exp $
 
 Add a port for NetBSD using VM_UVMEXP2, and preferring
 sysctl over sysctlbyname.
 
---- src/memory.c.orig  2016-09-11 08:10:25.267038716 +0000
+--- src/memory.c.orig  2016-11-30 08:52:01.316911197 +0000
 +++ src/memory.c
 @@ -66,6 +66,10 @@ static mach_port_t port_host;
  static vm_size_t pagesize;
@@ -28,7 +28,7 @@ sysctl over sysctlbyname.
  /* no global variables */
  /* endif HAVE_LIBSTATGRAB */
 @@ -94,6 +94,10 @@ static int pagesize;
- # error "No applicable input method."
+ #error "No applicable input method."
  #endif
  
 +#if KERNEL_NETBSD
@@ -38,89 +38,87 @@ sysctl over sysctlbyname.
  static _Bool values_absolute = 1;
  static _Bool values_percentage = 0;
  
-@@ -121,6 +125,15 @@ static int memory_init (void)
-       host_page_size (port_host, &pagesize);
+@@ -120,6 +124,14 @@ static int memory_init(void) {
+   host_page_size(port_host, &pagesize);
  /* #endif HAVE_HOST_STATISTICS */
  
 +#elif HAVE_SYSCTL
-+      pagesize = getpagesize ();
-+      if (pagesize <= 0)
-+      {
-+              ERROR ("memory plugin: Invalid pagesize: %i", pagesize);
-+              return (-1);
-+      }
++  pagesize = getpagesize();
++  if (pagesize <= 0) {
++    ERROR("memory plugin: Invalid pagesize: %i", pagesize);
++    return (-1);
++  }
 +/* #endif HAVE_SYSCTL */
 +
  #elif HAVE_SYSCTLBYNAME
  /* no init stuff */
  /* #endif HAVE_SYSCTLBYNAME */
-@@ -145,15 +158,6 @@ static int memory_init (void)
+@@ -142,14 +154,6 @@ static int memory_init(void) {
  
  /* #endif HAVE_LIBKSTAT */
  
 -#elif HAVE_SYSCTL
--      pagesize = getpagesize ();
--      if (pagesize <= 0)
--      {
--              ERROR ("memory plugin: Invalid pagesize: %i", pagesize);
--              return (-1);
--      }
+-  pagesize = getpagesize();
+-  if (pagesize <= 0) {
+-    ERROR("memory plugin: Invalid pagesize: %i", pagesize);
+-    return (-1);
+-  }
 -/* #endif HAVE_SYSCTL */
 -
  #elif HAVE_LIBSTATGRAB
  /* no init stuff */
  /* #endif HAVE_LIBSTATGRAB */
-@@ -227,6 +231,46 @@ static int memory_read_internal (value_l
+@@ -221,6 +225,46 @@ static int memory_read_internal(value_li
  /* #endif HAVE_HOST_STATISTICS */
  
  #elif HAVE_SYSCTLBYNAME
 +
 +#if HAVE_SYSCTL && defined(KERNEL_NETBSD)
-+      int mib[] = {CTL_VM, VM_UVMEXP2};
-+      struct uvmexp_sysctl uvmexp;
-+      gauge_t mem_active;
-+      gauge_t mem_inactive;
-+      gauge_t mem_free;
-+      gauge_t mem_wired;
-+      gauge_t mem_kernel;
-+      size_t size;
-+
-+      memset (&uvmexp, 0, sizeof (uvmexp));
-+      size = sizeof (uvmexp);
-+
-+      if (sysctl (mib, 2, &uvmexp, &size, NULL, 0) < 0) {
-+              char errbuf[1024];
-+              WARNING ("memory plugin: sysctl failed: %s",
-+                      sstrerror (errno, errbuf, sizeof (errbuf)));
-+              return (-1);
-+      }
-+
-+      assert (pagesize > 0);
-+      mem_active   = (gauge_t) (uvmexp.active * pagesize);
-+      mem_inactive = (gauge_t) (uvmexp.inactive * pagesize);
-+      mem_free     = (gauge_t) (uvmexp.free * pagesize);
-+      mem_wired    = (gauge_t) (uvmexp.wired * pagesize);
-+      mem_kernel   = (gauge_t) ((uvmexp.npages - (
-+                                      uvmexp.active + uvmexp.inactive +
-+                                      uvmexp.free + uvmexp.wired
-+                                      )) * pagesize);
-+
-+      MEMORY_SUBMIT ("active",   mem_active,
-+                     "inactive", mem_inactive,
-+                     "free",     mem_free,
-+                     "wired",    mem_wired,
-+                     "kernel",   mem_kernel);
++  int mib[] = {CTL_VM, VM_UVMEXP2};
++  struct uvmexp_sysctl uvmexp;
++  gauge_t mem_active;
++  gauge_t mem_inactive;
++  gauge_t mem_free;
++  gauge_t mem_wired;
++  gauge_t mem_kernel;
++  size_t size;
++
++  memset (&uvmexp, 0, sizeof (uvmexp));
++  size = sizeof (uvmexp);
++
++  if (sysctl (mib, 2, &uvmexp, &size, NULL, 0) < 0) {
++    char errbuf[1024];
++    WARNING ("memory plugin: sysctl failed: %s",
++      sstrerror (errno, errbuf, sizeof (errbuf)));
++    return (-1);
++  }
++
++  assert (pagesize > 0);
++  mem_active   = (gauge_t) (uvmexp.active * pagesize);
++  mem_inactive = (gauge_t) (uvmexp.inactive * pagesize);
++  mem_free     = (gauge_t) (uvmexp.free * pagesize);
++  mem_wired    = (gauge_t) (uvmexp.wired * pagesize);
++  mem_kernel   = (gauge_t) ((uvmexp.npages - (
++    uvmexp.active + uvmexp.inactive +
++    uvmexp.free + uvmexp.wired
++    )) * pagesize);
++
++  MEMORY_SUBMIT ("active",   mem_active,
++                 "inactive", mem_inactive,
++                 "free",     mem_free,
++                 "wired",    mem_wired,
++                 "kernel",   mem_kernel);
 +/* #endif HAVE_SYSCTL && defined(KERNEL_NETBSD) */
 +
 +#else /* Other HAVE_SYSCTLBYNAME providers */
 +
-       /*
-        * vm.stats.vm.v_page_size: 4096
-        * vm.stats.vm.v_page_count: 246178
-@@ -276,6 +320,8 @@ static int memory_read_internal (value_l
-                      "active",   (gauge_t) sysctl_vals[4],
-                      "inactive", (gauge_t) sysctl_vals[5],
-                      "cache",    (gauge_t) sysctl_vals[6]);
+   /*
+    * vm.stats.vm.v_page_size: 4096
+    * vm.stats.vm.v_page_count: 246178
+@@ -259,6 +303,8 @@ static int memory_read_internal(value_li
+                 (gauge_t)sysctl_vals[3], "active", (gauge_t)sysctl_vals[4],
+                 "inactive", (gauge_t)sysctl_vals[5], "cache",
+                 (gauge_t)sysctl_vals[6]);
 +
 +#endif /* HAVE_SYSCTL && KERNEL_NETBSD */
  /* #endif HAVE_SYSCTLBYNAME */
Index: pkgsrc/sysutils/collectd/patches/patch-src_processes.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_processes.c:1.3 pkgsrc/sysutils/collectd/patches/patch-src_processes.c:1.4
--- pkgsrc/sysutils/collectd/patches/patch-src_processes.c:1.3  Tue Sep  1 09:00:04 2015
+++ pkgsrc/sysutils/collectd/patches/patch-src_processes.c      Wed Dec  7 17:28:39 2016
@@ -1,249 +1,253 @@
-$NetBSD: patch-src_processes.c,v 1.3 2015/09/01 09:00:04 he Exp $
+$NetBSD: patch-src_processes.c,v 1.4 2016/12/07 17:28:39 fhajny Exp $
 
 Add a port to NetBSD.
 
---- src/processes.c.orig       2015-05-20 12:04:47.000000000 +0000
+--- src/processes.c.orig       2016-11-30 08:52:01.324910450 +0000
 +++ src/processes.c
-@@ -94,13 +94,13 @@
- #  endif
+@@ -95,14 +95,14 @@
  /* #endif KERNEL_LINUX */
  
--#elif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD)
-+#elif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD)
- #  include <kvm.h>
- #  include <sys/param.h>
- #  include <sys/sysctl.h>
- #  include <sys/user.h>
- #  include <sys/proc.h>
--/* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD) */
-+/* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD) */
+ #elif HAVE_LIBKVM_GETPROCS &&                                                  \
+-    (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD)
++    (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD)
+ #include <kvm.h>
+ #include <sys/param.h>
+ #include <sys/proc.h>
+ #include <sys/sysctl.h>
+ #include <sys/user.h>
+ /* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD ||
+- * HAVE_STRUCT_KINFO_PROC_OPENBSD) */
++ * HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD) */
  
  #elif HAVE_PROCINFO_H
- #  include <procinfo.h>
-@@ -229,9 +229,14 @@ static mach_msg_type_number_t     pset_l
- static long pagesize_g;
+ #include <procinfo.h>
+@@ -244,10 +244,15 @@ static long pagesize_g;
  /* #endif KERNEL_LINUX */
  
--#elif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD)
-+#elif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD)
+ #elif HAVE_LIBKVM_GETPROCS &&                                                  \
+-    (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD)
++    (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD)
  static int pagesize;
--/* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD) */
 +
 +#if KERNEL_NETBSD
 +int maxslp;
 +#endif
 +
-+/* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD) */
+ /* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD ||
+- * HAVE_STRUCT_KINFO_PROC_OPENBSD) */
++ * HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD) */
  
  #elif HAVE_PROCINFO_H
- static  struct procentry64 procentry[MAXPROCENTRY];
-@@ -638,9 +643,20 @@ static int ps_init (void)
-                       pagesize_g, CONFIG_HZ);
+ static struct procentry64 procentry[MAXPROCENTRY];
+@@ -607,10 +612,21 @@ static int ps_init(void) {
  /* #endif KERNEL_LINUX */
  
--#elif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD)
-+#elif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD)
+ #elif HAVE_LIBKVM_GETPROCS &&                                                  \
+-    (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD)
++    (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD)
 +#if KERNEL_NETBSD
-+      int mib[2];
-+      size_t size;
++  int mib[2];
++  size_t size;
 +
-+      mib[0] = CTL_VM;
-+      mib[1] = VM_MAXSLP;
-+      size = sizeof(maxslp);
-+      if (sysctl(mib, 2, &maxslp, &size, NULL, 0) == -1)
-+              maxslp = 20;    /* reasonable default? */
++  mib[0] = CTL_VM;
++  mib[1] = VM_MAXSLP;
++  size = sizeof(maxslp);
++  if (sysctl(mib, 2, &maxslp, &size, NULL, 0) == -1)
++    maxslp = 20;    /* reasonable default? */
 +#endif
 +
-       pagesize = getpagesize();
--/* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD) */
-+/* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD || HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD) */
+   pagesize = getpagesize();
+ /* #endif HAVE_LIBKVM_GETPROCS && (HAVE_STRUCT_KINFO_PROC_FREEBSD ||
+- * HAVE_STRUCT_KINFO_PROC_OPENBSD) */
++ * HAVE_STRUCT_KINFO_PROC_OPENBSD || HAVE_STRUCT_KINFO_PROC2_NETBSD) */
  
  #elif HAVE_PROCINFO_H
-       pagesize = getpagesize();
-@@ -1940,6 +1956,186 @@ static int ps_read (void)
-               ps_submit_proc_list (ps_ptr);
+   pagesize = getpagesize();
+@@ -1917,6 +1933,187 @@ static int ps_read(void) {
+     ps_submit_proc_list(ps_ptr);
  /* #endif HAVE_LIBKVM_GETPROCS && HAVE_STRUCT_KINFO_PROC_FREEBSD */
  
 +#elif HAVE_LIBKVM_GETPROCS && HAVE_STRUCT_KINFO_PROC2_NETBSD
-+      int running  = 0;
-+      int sleeping = 0;
-+      int zombies  = 0;
-+      int stopped  = 0;
-+      int blocked  = 0;
-+      int idle     = 0;
-+      int wait     = 0;
-+
-+      kvm_t *kd;
-+      char errbuf[_POSIX2_LINE_MAX];
-+      struct kinfo_proc2 *procs;          /* array of processes */
-+      struct kinfo_proc2 *proc_ptr = NULL;
-+      struct kinfo_proc2 *p;
-+      int count;                         /* returns number of processes */
-+      int i;
-+      int l, nlwps;
-+      struct kinfo_lwp *kl;
-+
-+      procstat_t *ps_ptr;
-+      procstat_entry_t pse;
-+
-+      ps_list_reset ();
-+
-+      /* Open the kvm interface, get a descriptor */
-+      kd = kvm_openfiles (NULL, NULL, NULL, KVM_NO_FILES, errbuf);
-+      if (kd == NULL)
-+      {
-+              ERROR ("processes plugin: Cannot open kvm interface: %s",
-+                              errbuf);
-+              return (0);
-+      }
-+
-+      /* Get the list of processes. */
-+      procs = kvm_getproc2(kd, KERN_PROC_ALL, 0,
-+                           sizeof(struct kinfo_proc2), &count);
-+      if (procs == NULL)
-+      {
-+              ERROR ("processes plugin: Cannot get kvm processes list: %s",
-+                              kvm_geterr(kd));
-+              kvm_close (kd);
-+              return (0);
-+      }
-+
-+      /* Iterate through the processes in kinfo_proc */
-+      for (i = 0; i < count; i++)
-+      {
-+              /* Create only one process list entry per _process_, i.e.
-+               * filter out threads (duplicate PID entries). */
-+              if ((proc_ptr == NULL) || (proc_ptr->p_pid != procs[i].p_pid))
-+              {
-+                      char cmdline[CMDLINE_BUFFER_SIZE] = "";
-+                      _Bool have_cmdline = 0;
-+
-+                      proc_ptr = &(procs[i]);
-+                      /* Don't probe system processes and processes without arguments */
-+                      if (((procs[i].p_flag & P_SYSTEM) == 0)
-+                                      && (procs[i].p_comm[0] != 0))
-+                      {
-+                              char **argv;
-+                              int argc;
-+                              int status;
-+
-+                              /* retrieve the arguments */
-+                              argv = kvm_getargv2 (kd, proc_ptr, 0);
-+                              argc = 0;
-+                              if ((argv != NULL) && (argv[0] != NULL))
-+                              {
-+                                      while (argv[argc] != NULL)
-+                                              argc++;
-+
-+                                      status = strjoin (cmdline, sizeof (cmdline), argv, argc, " ");
-+                                      if (status < 0)
-+                                              WARNING ("processes plugin: Command line did not fit into buffer.");
-+                                      else
-+                                              have_cmdline = 1;
-+                              }
-+                      } /* if (process has argument list) */
-+
-+                      pse.id       = procs[i].p_pid;
-+                      pse.age      = 0;
-+
-+                      pse.num_proc = 1;
-+                      pse.num_lwp  = procs[i].p_nlwps;
-+
-+                      pse.vmem_size = procs[i].p_uru_maxrss * pagesize;
-+                      pse.vmem_rss = procs[i].p_vm_rssize * pagesize;
-+                      pse.vmem_data = procs[i].p_vm_dsize * pagesize;
-+                      pse.vmem_code = procs[i].p_vm_tsize * pagesize;
-+                      pse.stack_size = procs[i].p_vm_ssize * pagesize;
-+                      pse.vmem_minflt = 0;
-+                      pse.vmem_minflt_counter = procs[i].p_uru_minflt;
-+                      pse.vmem_majflt = 0;
-+                      pse.vmem_majflt_counter = procs[i].p_uru_majflt;
-+
-+                      pse.cpu_user = 0;
-+                      pse.cpu_system = 0;
-+                      pse.cpu_user_counter = 0;
-+                      pse.cpu_system_counter = 0;
-+                      /*
-+                       * The u-area might be swapped out, and we can't get
-+                       * at it because we have a crashdump and no swap.
-+                       * If it's here fill in these fields, otherwise, just
-+                       * leave them 0.
-+                       */
-+                      if (procs[i].p_flag & P_INMEM)
-+                      {
-+                              pse.cpu_user_counter = procs[i].p_uutime_usec
-+                                      + (1000000lu * procs[i].p_uutime_sec);
-+                              pse.cpu_system_counter = procs[i].p_ustime_usec
-+                                      + (1000000lu * procs[i].p_ustime_sec);
-+                      }
-+
-+                      /* no I/O data */
-+                      pse.io_rchar = -1;
-+                      pse.io_wchar = -1;
-+                      pse.io_syscr = procs[i].p_uru_inblock;
-+                      pse.io_syscw = procs[i].p_uru_oublock;
-+
-+                      ps_list_add (procs[i].p_comm, have_cmdline ? cmdline : NULL, &pse);
-+              } /* if ((proc_ptr == NULL) || (proc_ptr->ki_pid != procs[i].ki_pid)) */
-+
-+                /* system processes' LWPs end up in "running" state */
-+              if ((procs[i].p_flag & P_SYSTEM) != 0)
-+                      continue; 
-+
-+              switch (procs[i].p_realstat)
-+              {
-+              case SSTOP:
-+              case SACTIVE:
-+              case SIDL:
-+                      p = &(procs[i]);
-+                      /* get info about LWPs */
-+                      kl = kvm_getlwps(kd, p->p_pid, (u_long)p->p_paddr,
-+                                       sizeof(struct kinfo_lwp), &nlwps);
-+
-+                      for (l = 0; kl && l < nlwps; l++) {
-+                              switch (kl[l].l_stat) {
-+                              case LSONPROC:
-+                              case LSRUN:
-+                                      running++;
-+                                      break;
-+                              case LSSLEEP:
-+                                      if (kl[l].l_flag & L_SINTR) {
-+                                              if (kl[l].l_slptime > maxslp)
-+                                                      idle++;
-+                                              else
-+                                                      sleeping++;
-+                                      } else
-+                                              blocked++;
-+                                      break;
-+                              case LSSTOP:
-+                                      stopped++; break;
-+                              case LSIDL:
-+                                      idle++; break;
-+                              }
-+                      }
-+                      break;
-+              case SZOMB:     
-+              case SDYING:
-+              case SDEAD:
-+                      zombies++; break;
-+                      
-+              }
-+      }
-+
-+      kvm_close(kd);
-+
-+      ps_submit_state ("running",  running);
-+      ps_submit_state ("sleeping", sleeping);
-+      ps_submit_state ("zombies",  zombies);
-+      ps_submit_state ("stopped",  stopped);
-+      ps_submit_state ("blocked",  blocked);
-+      ps_submit_state ("idle",     idle);
-+      ps_submit_state ("wait",     wait);
++  int running  = 0;
++  int sleeping = 0;
++  int zombies  = 0;
++  int stopped  = 0;
++  int blocked  = 0;
++  int idle     = 0;
++  int wait     = 0;
++
++  kvm_t *kd;
++  char errbuf[_POSIX2_LINE_MAX];
++  struct kinfo_proc2 *procs;          /* array of processes */
++  struct kinfo_proc2 *proc_ptr = NULL;
++  struct kinfo_proc2 *p;
++  int count;                         /* returns number of processes */
++  int i;
++  int l, nlwps;
++  struct kinfo_lwp *kl;
++
++  procstat_t *ps_ptr;
++  procstat_entry_t pse;
++
++  ps_list_reset ();
++
++  /* Open the kvm interface, get a descriptor */
++  kd = kvm_openfiles (NULL, NULL, NULL, KVM_NO_FILES, errbuf);
++  if (kd == NULL)
++  {
++    ERROR ("processes plugin: Cannot open kvm interface: %s",
++      errbuf);
++    return (0);
++  }
++
++  /* Get the list of processes. */
++  procs = kvm_getproc2(kd, KERN_PROC_ALL, 0,
++                       sizeof(struct kinfo_proc2), &count);
++  if (procs == NULL)
++  {
++    ERROR ("processes plugin: Cannot get kvm processes list: %s",
++           kvm_geterr(kd));
++    kvm_close (kd);
++    return (0);
++  }
++
++  /* Iterate through the processes in kinfo_proc */
++  for (i = 0; i < count; i++)
++  {
++    /* Create only one process list entry per _process_, i.e.
++     * filter out threads (duplicate PID entries). */
++    if ((proc_ptr == NULL) || (proc_ptr->p_pid != procs[i].p_pid))
++    {
++      char cmdline[CMDLINE_BUFFER_SIZE] = "";
++      _Bool have_cmdline = 0;
++
++      proc_ptr = &(procs[i]);
++      /* Don't probe system processes and processes without arguments */
++      if (((procs[i].p_flag & P_SYSTEM) == 0)
++          && (procs[i].p_comm[0] != 0))
++      {
++        char **argv;
++        int argc;
++        int status;
++
++        /* retrieve the arguments */
++        argv = kvm_getargv2 (kd, proc_ptr, 0);
++        argc = 0;
++        if ((argv != NULL) && (argv[0] != NULL))
++        {
++          while (argv[argc] != NULL)
++            argc++;
++
++          status = strjoin (cmdline, sizeof (cmdline), argv, argc, " ");
++          if (status < 0)
++            WARNING ("processes plugin: Command line did not fit into buffer.");
++          else
++            have_cmdline = 1;
++        }
++      } /* if (process has argument list) */
++
++      pse.id = procs[i].p_pid;
++      pse.age = 0;
++
++      pse.num_proc = 1;
++      pse.num_lwp = procs[i].p_nlwps;
++
++      pse.vmem_size = procs[i].p_uru_maxrss * pagesize;
++      pse.vmem_rss = procs[i].p_vm_rssize * pagesize;
++      pse.vmem_data = procs[i].p_vm_dsize * pagesize;
++      pse.vmem_code = procs[i].p_vm_tsize * pagesize;
++      pse.stack_size = procs[i].p_vm_ssize * pagesize;
++      pse.vmem_minflt = 0;
++      pse.vmem_minflt_counter = procs[i].p_uru_minflt;
++      pse.vmem_majflt = 0;
++      pse.vmem_majflt_counter = procs[i].p_uru_majflt;
++
++      pse.cpu_user = 0;
++      pse.cpu_system = 0;
++      pse.cpu_user_counter = 0;
++      pse.cpu_system_counter = 0;
++      /*
++       * The u-area might be swapped out, and we can't get
++       * at it because we have a crashdump and no swap.
++       * If it's here fill in these fields, otherwise, just
++       * leave them 0.
++       */
++      if (procs[i].p_flag & P_INMEM)
++      {
++        pse.cpu_user_counter = procs[i].p_uutime_usec
++          + (1000000lu * procs[i].p_uutime_sec);
++        pse.cpu_system_counter = procs[i].p_ustime_usec
++          + (1000000lu * procs[i].p_ustime_sec);
++      }
++
++      /* no I/O data */
++      pse.io_rchar = -1;
++      pse.io_wchar = -1;
++      pse.io_syscr = procs[i].p_uru_inblock;
++      pse.io_syscw = procs[i].p_uru_oublock;
++
++      ps_list_add (procs[i].p_comm, have_cmdline ? cmdline : NULL, &pse);
++    } /* if ((proc_ptr == NULL) || (proc_ptr->ki_pid != procs[i].ki_pid)) */
++
++     /* system processes' LWPs end up in "running" state */
++    if ((procs[i].p_flag & P_SYSTEM) != 0)
++      continue;
++
++    switch (procs[i].p_realstat)
++    {
++    case SSTOP:
++    case SACTIVE:
++    case SIDL:
++      p = &(procs[i]);
++      /* get info about LWPs */
++      kl = kvm_getlwps(kd, p->p_pid, (u_long)p->p_paddr,
++                       sizeof(struct kinfo_lwp), &nlwps);
++
++      for (l = 0; kl && l < nlwps; l++) {
++        switch (kl[l].l_stat) {
++        case LSONPROC:
++        case LSRUN:
++          running++;
++          break;
++        case LSSLEEP:
++          if (kl[l].l_flag & L_SINTR) {
++            if (kl[l].l_slptime > maxslp)
++              idle++;
++            else
++              sleeping++;
++          } else
++              blocked++;
++          break;
++        case LSSTOP:
++          stopped++; break;
++        case LSIDL:
++          idle++; break;
++        }
++      }
++      break;
++    case SZOMB:
++    case SDYING:
++    case SDEAD:
++      zombies++; break;
++
++    }
++  }
++
++  kvm_close(kd);
++
++  ps_submit_state ("running",  running);
++  ps_submit_state ("sleeping", sleeping);
++  ps_submit_state ("zombies",  zombies);
++  ps_submit_state ("stopped",  stopped);
++  ps_submit_state ("blocked",  blocked);
++  ps_submit_state ("idle",     idle);
++  ps_submit_state ("wait",     wait);
 +
-+      for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next)
-+              ps_submit_proc_list (ps_ptr);
++  for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next)
++       ps_submit_proc_list (ps_ptr);
 +/* #endif HAVE_LIBKVM_GETPROCS && HAVE_STRUCT_KINFO_PROC2_NETBSD */
 +
++
  #elif HAVE_LIBKVM_GETPROCS && HAVE_STRUCT_KINFO_PROC_OPENBSD
-       int running  = 0;
-       int sleeping = 0;
+   int running = 0;
+   int sleeping = 0;
Index: pkgsrc/sysutils/collectd/patches/patch-src_swap.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_swap.c:1.3 pkgsrc/sysutils/collectd/patches/patch-src_swap.c:1.4
--- pkgsrc/sysutils/collectd/patches/patch-src_swap.c:1.3       Thu Oct 13 15:17:28 2016
+++ pkgsrc/sysutils/collectd/patches/patch-src_swap.c   Wed Dec  7 17:28:39 2016
@@ -1,17 +1,17 @@
-$NetBSD: patch-src_swap.c,v 1.3 2016/10/13 15:17:28 fhajny Exp $
+$NetBSD: patch-src_swap.c,v 1.4 2016/12/07 17:28:39 fhajny Exp $
 
 Extend support for NetBSD, and add per-swap-device
 reporting for HAVE_SWAPCTL_THREE_ARGS.
 
---- src/swap.c.orig    2016-09-11 08:10:25.271038709 +0000
+--- src/swap.c.orig    2016-11-30 08:52:01.324910450 +0000
 +++ src/swap.c
-@@ -77,9 +77,12 @@ static _Bool report_bytes = 0;
+@@ -78,9 +78,12 @@ static _Bool report_bytes = 0;
  static _Bool report_by_device = 0;
  /* #endif KERNEL_LINUX */
  
 -#elif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS
 +#elif HAVE_SWAPCTL && (HAVE_SWAPCTL_TWO_ARGS || HAVE_SWAPCTL_THREE_ARGS)
- # define SWAP_HAVE_REPORT_BY_DEVICE 1
+ #define SWAP_HAVE_REPORT_BY_DEVICE 1
  static derive_t pagesize;
 +#if KERNEL_NETBSD
 +static _Bool report_bytes = 0;
@@ -19,35 +19,35 @@ reporting for HAVE_SWAPCTL_THREE_ARGS.
  static _Bool report_by_device = 0;
  /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS */
  
-@@ -117,7 +120,7 @@ static int swap_config (oconfig_item_t *
-       {
-               oconfig_item_t *child = ci->children + i;
-               if (strcasecmp ("ReportBytes", child->key) == 0)
+@@ -117,7 +120,7 @@ static int swap_config(oconfig_item_t *c
+   for (int i = 0; i < ci->children_num; i++) {
+     oconfig_item_t *child = ci->children + i;
+     if (strcasecmp("ReportBytes", child->key) == 0)
 -#if KERNEL_LINUX
 +#if KERNEL_LINUX || KERNEL_NETBSD
-                       cf_util_get_boolean (child, &report_bytes);
+       cf_util_get_boolean(child, &report_bytes);
  #else
-                       WARNING ("swap plugin: The \"ReportBytes\" option "
-@@ -150,7 +153,7 @@ static int swap_init (void) /* {{{ */
-       pagesize = (derive_t) sysconf (_SC_PAGESIZE);
+       WARNING("swap plugin: The \"ReportBytes\" option "
+@@ -149,7 +152,7 @@ static int swap_init(void) /* {{{ */
+   pagesize = (derive_t)sysconf(_SC_PAGESIZE);
  /* #endif KERNEL_LINUX */
  
 -#elif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS
 +#elif HAVE_SWAPCTL && (HAVE_SWAPCTL_TWO_ARGS || HAVE_SWAPCTL_THREE_ARGS)
-       /* getpagesize(3C) tells me this does not fail.. */
-       pagesize = (derive_t) getpagesize ();
+   /* getpagesize(3C) tells me this does not fail.. */
+   pagesize = (derive_t)getpagesize();
  /* #endif HAVE_SWAPCTL */
-@@ -216,7 +219,7 @@ static void swap_submit_usage (char cons
-                               other_name, other_value, NULL);
+@@ -209,7 +212,7 @@ static void swap_submit_usage(char const
+                                free, other_name, other_value, NULL);
  } /* }}} void swap_submit_usage */
  
 -#if KERNEL_LINUX || HAVE_PERFSTAT
 +#if KERNEL_LINUX || HAVE_PERFSTAT || KERNEL_NETBSD
- __attribute__((nonnull(1)))
- static void swap_submit_derive (char const *type_instance, /* {{{ */
-               derive_t value)
-@@ -618,6 +621,43 @@ static int swap_read (void) /* {{{ */
- /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS */
+ __attribute__((nonnull(1))) static void
+ swap_submit_derive(char const *type_instance, /* {{{ */
+                    derive_t value) {
+@@ -579,6 +582,43 @@ static int swap_read(void) /* {{{ */
+   /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS */
  
  #elif HAVE_SWAPCTL && HAVE_SWAPCTL_THREE_ARGS
 +#if KERNEL_NETBSD
@@ -56,90 +56,89 @@ reporting for HAVE_SWAPCTL_THREE_ARGS.
 +static int
 +swap_read_io (void) /* {{{ */
 +{
-+      static int uvmexp_mib[] = { CTL_VM, VM_UVMEXP2 };
-+      struct uvmexp_sysctl uvmexp;
-+      size_t ssize;
-+      derive_t swap_in, swap_out;
-+
-+      ssize = sizeof(uvmexp);
-+      memset(&uvmexp, 0, ssize);
-+      if (sysctl(uvmexp_mib, __arraycount(uvmexp_mib), &uvmexp,
-+              &ssize, NULL, 0) == -1) {
-+                      char errbuf[1024];
-+                      WARNING ("swap: sysctl for uvmexp failed: %s",
-+                              sstrerror (errno, errbuf, sizeof (errbuf)));
-+                      return (-1);
-+      }
-+
-+      swap_in  = uvmexp.pgswapin;
-+      swap_out = uvmexp.pgswapout;
-+
-+      if (report_bytes)
-+      {
-+              swap_in = swap_in * pagesize;
-+              swap_out = swap_out * pagesize;
-+      }
++  static int uvmexp_mib[] = { CTL_VM, VM_UVMEXP2 };
++  struct uvmexp_sysctl uvmexp;
++  size_t ssize;
++  derive_t swap_in, swap_out;
++
++  ssize = sizeof(uvmexp);
++  memset(&uvmexp, 0, ssize);
++  if (sysctl(uvmexp_mib, __arraycount(uvmexp_mib), &uvmexp,
++    &ssize, NULL, 0) == -1) {
++      char errbuf[1024];
++      WARNING ("swap: sysctl for uvmexp failed: %s",
++        sstrerror (errno, errbuf, sizeof (errbuf)));
++      return (-1);
++  }
++
++  swap_in  = uvmexp.pgswapin;
++  swap_out = uvmexp.pgswapout;
++
++  if (report_bytes)
++  {
++    swap_in = swap_in * pagesize;
++    swap_out = swap_out * pagesize;
++  }
 +
-+      swap_submit_derive ("in",  swap_in);
-+      swap_submit_derive ("out", swap_out);
++  swap_submit_derive ("in",  swap_in);
++  swap_submit_derive ("out", swap_out);
 +
-+      return (0);
++  return (0);
 +} /* }}} */
 +#endif
 +
- static int swap_read (void) /* {{{ */
+ static int swap_read(void) /* {{{ */
  {
-       struct swapent *swap_entries;
-@@ -663,12 +703,33 @@ static int swap_read (void) /* {{{ */
-        * swap_entries[i].se_path */
-       for (int i = 0; i < swap_num; i++)
-       {
-+              char path[PATH_MAX];
-+              gauge_t this_used;
-+              gauge_t this_total;
-+
-               if ((swap_entries[i].se_flags & SWF_ENABLE) == 0)
-                       continue;
- 
--              used  += ((gauge_t) swap_entries[i].se_inuse) * C_SWAP_BLOCK_SIZE;
--              total += ((gauge_t) swap_entries[i].se_nblks) * C_SWAP_BLOCK_SIZE;
--      }
-+              this_used = ((gauge_t) swap_entries[i].se_inuse)
-+                      * C_SWAP_BLOCK_SIZE;
-+              this_total = ((gauge_t) swap_entries[i].se_nblks)
-+                      * C_SWAP_BLOCK_SIZE;
-+
-+
-+              /* Shortcut for the "combined" setting (default) */
-+              if (!report_by_device)
-+              {
-+                      used  += this_used;
-+                      total += this_total;
-+                      continue;
-+              }
-+
-+              sstrncpy (path, swap_entries[i].se_path, sizeof (path));
-+              escape_slashes (path, sizeof (path));
-+
-+              swap_submit_usage (path, this_used, this_total - this_used,
-+                                NULL, NAN);
-+      } /* for (swap_num) */
- 
-       if (total < used)
-       {
-@@ -679,8 +740,15 @@ static int swap_read (void) /* {{{ */
-       }
- 
-       swap_submit_usage (NULL, used, total - used, NULL, NAN);
-+      /* If the "separate" option was specified (report_by_device == 1), all
-+       * values have already been dispatched from within the loop. */
-+      if (!report_by_device)
-+              swap_submit_usage (NULL, used, total - used, NULL, NAN);
+   struct swapent *swap_entries;
+@@ -617,12 +657,32 @@ static int swap_read(void) /* {{{ */
+   /* TODO: Report per-device stats. The path name is available from
+    * swap_entries[i].se_path */
+   for (int i = 0; i < swap_num; i++) {
++    char path[PATH_MAX];
++    gauge_t this_used;
++    gauge_t this_total;
++
+     if ((swap_entries[i].se_flags & SWF_ENABLE) == 0)
+       continue;
+ 
+-    used += ((gauge_t)swap_entries[i].se_inuse) * C_SWAP_BLOCK_SIZE;
+-    total += ((gauge_t)swap_entries[i].se_nblks) * C_SWAP_BLOCK_SIZE;
+-  }
++    this_used = ((gauge_t) swap_entries[i].se_inuse)
++      * C_SWAP_BLOCK_SIZE;
++    this_total = ((gauge_t) swap_entries[i].se_nblks)
++      * C_SWAP_BLOCK_SIZE;
++
++    /* Shortcut for the "combined" setting (default) */
++    if (!report_by_device)
++    {
++      used  += this_used;
++      total += this_total;
++      continue;
++    }
++
++    sstrncpy (path, swap_entries[i].se_path, sizeof (path));
++    escape_slashes (path, sizeof (path));
++
++    swap_submit_usage (path, this_used, this_total - this_used,
++                       NULL, NAN);
++  } /* for (swap_num) */
+ 
+   if (total < used) {
+     ERROR(
+@@ -633,8 +693,15 @@ static int swap_read(void) /* {{{ */
+   }
+ 
+   swap_submit_usage(NULL, used, total - used, NULL, NAN);
++  /* If the "separate" option was specified (report_by_device == 1), all
++   * values have already been dispatched from within the loop. */
++  if (!report_by_device)
++    swap_submit_usage (NULL, used, total - used, NULL, NAN);
  
-       sfree (swap_entries);
+   sfree(swap_entries);
 +#if KERNEL_NETBSD
-+      swap_read_io ();
++  swap_read_io ();
 +#endif
-       return (0);
+   return (0);
  } /* }}} int swap_read */
- /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_THREE_ARGS */
+   /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_THREE_ARGS */

Index: pkgsrc/sysutils/collectd/patches/patch-src_tcpconns.c
diff -u pkgsrc/sysutils/collectd/patches/patch-src_tcpconns.c:1.5 pkgsrc/sysutils/collectd/patches/patch-src_tcpconns.c:1.6
--- pkgsrc/sysutils/collectd/patches/patch-src_tcpconns.c:1.5   Tue Aug 11 13:19:21 2015
+++ pkgsrc/sysutils/collectd/patches/patch-src_tcpconns.c       Wed Dec  7 17:28:39 2016
@@ -1,14 +1,26 @@
-$NetBSD: patch-src_tcpconns.c,v 1.5 2015/08/11 13:19:21 he Exp $
+$NetBSD: patch-src_tcpconns.c,v 1.6 2016/12/07 17:28:39 fhajny Exp $
 
 Include <sys/param.h>
+Re-order to fix build on NetBSD.
 
---- src/tcpconns.c.orig        2015-05-20 12:04:47.191035542 +0000
+--- src/tcpconns.c.orig        2016-11-30 08:52:01.328910078 +0000
 +++ src/tcpconns.c
-@@ -948,6 +948,7 @@ static int conn_init (void)
+@@ -111,9 +111,9 @@
+ #include <net/route.h>
+ #include <netdb.h>
+ #include <netinet/in.h>
++#include <netinet/ip.h>
+ #include <netinet/in_pcb.h>
+ #include <netinet/in_systm.h>
+-#include <netinet/ip.h>
+ #include <netinet/ip_var.h>
+ #include <netinet/tcp.h>
+ #include <netinet/tcp_timer.h>
+@@ -820,6 +820,7 @@ static int conn_init(void) {
    return (0);
  } /* int conn_init */
  
 +#include <sys/param.h>
- static int conn_read (void)
- {
+ static int conn_read(void) {
    struct inpcbtable table;
+ #if !defined(__OpenBSD__) &&                                                   \



Home | Main Index | Thread Index | Old Index