$OpenBSD: patch-agent_mibgroup_host_data_access_swrun_kinfo_c,v 1.8 2012/12/18 21:38:12 sthen Exp $
--- agent/mibgroup/host/data_access/swrun_kinfo.c.orig	Tue Oct  9 16:28:58 2012
+++ agent/mibgroup/host/data_access/swrun_kinfo.c	Thu Dec  6 15:32:14 2012
@@ -3,7 +3,7 @@
  *     hrSWRunTable data access:
  *     kvm_getprocs() interface - FreeBSD, NetBSD, OpenBSD
  *
- * NB: later FreeBSD uses a different kinfo_proc structure
+ * NB: later FreeBSD and OpenBSD use different kinfo_proc structures
  */
 #include <net-snmp/net-snmp-config.h>
 
@@ -29,6 +29,9 @@
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
+#ifdef HAVE_SYS_PROC_H
+#include <sys/proc.h>
+#endif
 #ifdef HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
 #endif
@@ -59,11 +62,15 @@ extern kvm_t *kd;
 #define SWRUN_K_FLAG	ki_flag
 #define SWRUN_K_CLASS	ki_pri.pri_class
 
-#elif HAVE_KVM_GETPROC2
+#elif HAVE_KVM_GETPROC2 || defined(openbsd5)
     /*
      * newer NetBSD, OpenBSD kinfo_proc2 field names
      */
+#if defined(openbsd5)
+#define SWRUN_TABLE	kinfo_proc
+#else
 #define SWRUN_TABLE	kinfo_proc2
+#endif
 #define SWRUN_K_STAT	p_stat
 #define SWRUN_K_PID	p_pid
 #define SWRUN_K_COMM	p_comm
@@ -157,7 +164,9 @@ netsnmp_arch_swrun_container_load( netsnmp_container *
         DEBUGMSGTL(("swrun:load:arch"," Can't query kvm info\n"));
         return 1;     /* No handle for retrieving process table */
     }
-#if HAVE_KVM_GETPROC2
+#if defined(openbsd5)
+    proc_table = kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(struct kinfo_proc), &nprocs );
+#elif defined(HAVE_KVM_GETPROC2)
     proc_table = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(struct kinfo_proc2), &nprocs );
 #elif defined(KERN_PROC_PROC)
     proc_table = kvm_getprocs(kd, KERN_PROC_PROC, 0, &nprocs );
@@ -288,7 +297,7 @@ netsnmp_arch_swrun_container_load( netsnmp_container *
 	 entry->hrSWRunPerfCPU += (proc_table[i].ki_rusage_ch.ru_utime.tv_sec*1000000 + proc_table[i].ki_rusage_ch.ru_utime.tv_usec) / 10000;
 	 entry->hrSWRunPerfCPU += (proc_table[i].ki_rusage_ch.ru_stime.tv_sec*1000000 + proc_table[i].ki_rusage_ch.ru_stime.tv_usec) / 10000;
 	 entry->hrSWRunPerfMem  = proc_table[i].ki_rssize * (getpagesize()/1024);  /* in kB */
-#elif defined(HAVE_KVM_GETPROC2)
+#elif defined(HAVE_KVM_GETPROC2) || defined(openbsd5)
         /*
          * newer NetBSD, OpenBSD
          */
