diff -ruwN v42-patches/s/freebsd5.h net-snmp-4.2/s/freebsd5.h
--- v42-patches/s/freebsd5.h	Wed Dec 31 19:00:00 1969
+++ net-snmp-4.2/s/freebsd5.h	Fri Jun  4 02:10:18 2004
@@ -0,0 +1,29 @@
+#include "freebsd.h"
+
+/*
+ * freebsd4 is a superset of freebsd2 and freebsd3 
+ */
+#define freebsd2 1
+#define freebsd3 1
+/* freebsd5 is a superset of freebsd4 */
+#define freebsd4 1
+
+#undef IFADDR_SYMBOL
+#define IFADDR_SYMBOL "in_ifaddrhead"
+
+#undef PROC_SYMBOL
+#define PROC_SYMBOL "allproc"
+
+#undef NPROC_SYMBOL
+#define NPROC_SYMBOL "nprocs"
+
+#undef TOTAL_MEMORY_SYMBOL
+
+/* force hr_storage.c to use getfsstat */
+#undef MBSTAT_SYMBOL
+#undef HAVE_STATVFS
+#undef HAVE_SYS_STATVFS_H
+#undef STRUCT_STATVFS_HAS_F_FRSIZE
+/* force ucd-snmp/disk.c to ignore statvfs objects */
+#undef STRUCT_STATFS_HAS_F_FAVAIL
+

diff -ruw v42-patches/agent/auto_nlist.c net-snmp-4.2/agent/auto_nlist.c
--- v42-patches/agent/auto_nlist.c	Thu Feb  7 06:42:03 2002
+++ net-snmp-4.2/agent/auto_nlist.c	Fri Jun  4 02:10:18 2004
@@ -1,5 +1,9 @@
 #include <config.h>
 
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #ifdef CAN_USE_NLIST
 #if HAVE_STRING_H
 #include <string.h>

diff -ruw v42-patches/agent/mibgroup/host/hr_swrun.c net-snmp-4.2/agent/mibgroup/host/hr_swrun.c
--- v42-patches/agent/mibgroup/host/hr_swrun.c	Thu Dec 19 10:04:48 2002
+++ net-snmp-4.2/agent/mibgroup/host/hr_swrun.c	Fri Jun  4 02:10:18 2004
@@ -549,7 +549,11 @@
             string[ sizeof(string)-1 ] = 0;
 #endif
 #elif HAVE_KVM_GETPROCS
+    #if defined(freebsd5)
+            strcpy(string, proc_table[LowProcIndex].ki_comm);
+    #else
             strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);
+    #endif
 #elif defined(linux)
 	    sprintf( string, "/proc/%d/status", pid );
 	    if ((fp = fopen( string, "r")) == NULL) return NULL;
@@ -644,7 +648,11 @@
 	    *cp1 = 0;
 #endif
 #elif HAVE_KVM_GETPROCS
+    #if defined(freebsd5)
+            strcpy(string, proc_table[LowProcIndex].ki_comm);
+    #else
             strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);
+    #endif
 #elif defined(linux)
 	    sprintf( string, "/proc/%d/cmdline", pid );
 	    if ((fp = fopen( string, "r")) == NULL) return NULL;
@@ -819,7 +827,11 @@
 	    }
 #else
 #if HAVE_KVM_GETPROCS
+    #if defined(freebsd5)
+	    switch ( proc_table[LowProcIndex].ki_stat ) {
+    #else
 	    switch ( proc_table[LowProcIndex].kp_proc.p_stat ) {
+    #endif
 #elif defined(dynix)
 	    switch ( lowpsinfo.pr_state ) {
 #elif defined(solaris2)
@@ -915,9 +927,13 @@
 	    		  proc_buf->p_stime*100;
 #endif
 #elif HAVE_KVM_GETPROCS
+    #if defined(freebsd5)
+        long_return = proc_table[LowProcIndex].ki_runtime / 100000;
+    #else
 	    long_return = proc_table[LowProcIndex].kp_proc.p_uticks +
 	    		  proc_table[LowProcIndex].kp_proc.p_sticks +
 	    		  proc_table[LowProcIndex].kp_proc.p_iticks;
+    #endif
 #elif defined(linux)
 	    sprintf( string, "/proc/%d/stat", pid );
 	    if ((fp = fopen( string, "r")) == NULL) return NULL;
@@ -984,7 +1000,11 @@
 #endif
 #elif HAVE_KVM_GETPROCS
 #if defined(freebsd3) && !defined(darwin)
+   #if defined(freebsd5)
+	    long_return = proc_table[LowProcIndex].ki_size / 1024;
+   #else
 	    long_return = proc_table[LowProcIndex].kp_eproc.e_vm.vm_map.size/1024;
+   #endif
 #else
 	    long_return = proc_table[LowProcIndex].kp_eproc.e_vm.vm_tsize +
 			  proc_table[LowProcIndex].kp_eproc.e_vm.vm_ssize +
@@ -1246,8 +1266,13 @@
 #elif defined(solaris2)
 	return proc_table[current_proc_entry++];
 #elif HAVE_KVM_GETPROCS
+    #if defined(freebsd5)
+        if (proc_table[current_proc_entry].ki_stat != 0)
+            return proc_table[current_proc_entry++].ki_pid;
+    #else
 	if ( proc_table[current_proc_entry].kp_proc.p_stat != 0 )
 	    return proc_table[current_proc_entry++].kp_proc.p_pid;
+    #endif
 #else
 	if ( proc_table[current_proc_entry].p_stat != 0 )
 	    return proc_table[current_proc_entry++].p_pid;

diff -ruw v42-patches/agent/mibgroup/ucd-snmp/disk.c net-snmp-4.2/agent/mibgroup/ucd-snmp/disk.c
--- v42-patches/agent/mibgroup/ucd-snmp/disk.c	Wed May 14 06:17:46 2003
+++ net-snmp-4.2/agent/mibgroup/ucd-snmp/disk.c	Fri Jun  4 02:17:01 2004
@@ -346,9 +346,6 @@
   double totalblks, free, used, avail, availblks;
 #else
   static long avail;
-#if defined(STRUCT_STATVFS_HAS_F_FILES) || defined(STRUCT_STATFS_HAS_F_FILES)
-  int percent_inode;
-#endif
 #endif
   static long long_ret;
   static char errmsg[300];
@@ -425,17 +422,6 @@
   iserror = (disks[disknum].minimumspace >= 0 ?
              avail < disks[disknum].minimumspace :
              100-percent <= disks[disknum].minpercent) ? 1 : 0;
-#if defined(STRUCT_STATVFS_HAS_F_FILES) || defined(STRUCT_STATFS_HAS_F_AVAIL)
-  percent_inode = vfs.f_favail <= 0 ? 100 :
-    (int) ((double) (vfs.f_files - vfs.f_ffree) /
-           (double) (vfs.f_files - (vfs.f_ffree - vfs.f_favail)) * 100.0 + 0.5);
-#else
-#if defined(STRUCT_STATFS_HAS_F_FILES) && defined(STRUCT_STATFS_HAS_F_FREE)
-  percent_inode = vfs.f_ffiles <= 0 ? 100 :
-    (int) ((double) (vfs.f_files - vfs.f_ffree) /
-           (double) (vfs.f_files) * 100.0 + 0.5);
-#endif
-#endif
   switch (vp->magic) {
     case DISKTOTAL:
       long_ret = vfs.f_blocks * (vfs.f_bsize / 1024);
@@ -458,7 +444,18 @@
       return ((u_char *) (&long_ret));
 #if defined(STRUCT_STATVFS_HAS_F_FILES) || defined(STRUCT_STATFS_HAS_F_FILES)
     case DISKPERCENTNODE:
-      long_ret = percent_inode;
+      long_ret = 100;
+    #if defined(STRUCT_STATFS_HAS_F_AVAIL)
+      if (vfs.f_favail > 0)
+          long_ret = (long) ((double) (vfs.f_files - vfs.f_ffree) /
+           (double) (vfs.f_files - (vfs.f_ffree - vfs.f_favail)) * 100.0 + 0.5);
+    #else
+    #if defined(STRUCT_STATFS_HAS_F_FREE)
+      if (vfs.f_ffiles > 0)
+          long_ret = (long) ((double) (vfs.f_files - vfs.f_ffree) /
+           (double) (vfs.f_files) * 100.0 + 0.5);
+    #endif
+#endif
       return ((u_char *) (&long_ret));
 #endif
     case ERRORFLAG:

diff -ruw v42-patches/agent/mibgroup/ucd-snmp/memory_freebsd2.c net-snmp-4.2/agent/mibgroup/ucd-snmp/memory_freebsd2.c
--- v42-patches/agent/mibgroup/ucd-snmp/memory_freebsd2.c	Tue May  6 10:38:36 2003
+++ net-snmp-4.2/agent/mibgroup/ucd-snmp/memory_freebsd2.c	Fri Jun  4 02:10:18 2004
@@ -157,23 +157,14 @@
 
 void swapmode(void)
 {
-    int nswdev, dmmax, pagesize;
+    int pagesize;
     int i, n;
-    struct swdevt *sw;
     static kvm_t *kd = NULL;
     struct kvm_swap kswap[16];
 
     if (kd == NULL)
 	kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
 
-    auto_nlist(NSWDEV_SYMBOL, (char *)&nswdev, sizeof (nswdev));
-    auto_nlist(DMMAX_SYMBOL, (char *)&dmmax, sizeof (dmmax));
-
-    sw = (struct swdevt *)malloc(nswdev * sizeof(*sw));
-    if (sw == NULL) return;
-
-    auto_nlist(SWDEVT_SYMBOL, (char *)sw, nswdev * sizeof(*sw));
-
     n = kvm_getswapinfo(
         kd,
         kswap,
@@ -199,8 +190,6 @@
     swapTotal *= pagesize;
     swapUsed  *= pagesize;
     swapFree  *= pagesize;
-
-    free(sw); 
 }
 #endif
 
