$NetBSD: patch-ah,v 1.5 2010/05/11 04:39:54 adam Exp $ --- agent/mibgroup/hardware/memory/memory_netbsd.c.orig 2006-03-06 16:23:52.000000000 +0000 +++ agent/mibgroup/hardware/memory/memory_netbsd.c 2010-04-21 21:58:02.000000000 +0000 @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -30,7 +31,7 @@ long pagesize; struct uvmexp uvmexp; - int uvmexp_size = sizeof(uvmexp); + size_t uvmexp_size = sizeof(uvmexp); int uvmexp_mib[] = { CTL_VM, VM_UVMEXP }; struct vmtotal total; @@ -40,16 +41,33 @@ long phys_mem; long user_mem; size_t mem_size = sizeof(phys_mem); +#if defined(__x86_64__) + int phys_mem_mib[] = { CTL_HW, HW_PHYSMEM64 }; + int user_mem_mib[] = { CTL_HW, HW_USERMEM64 }; +#else int phys_mem_mib[] = { CTL_HW, HW_PHYSMEM }; int user_mem_mib[] = { CTL_HW, HW_USERMEM }; +#endif /* * Retrieve the memory information from the underlying O/S... */ - sysctl(uvmexp_mib, 2, &uvmexp, &uvmexp_size, NULL, 0); - sysctl(total_mib, 2, &total, &total_size, NULL, 0); - sysctl(phys_mem_mib, 2, &phys_mem, &mem_size, NULL, 0); - sysctl(user_mem_mib, 2, &user_mem, &mem_size, NULL, 0); + if (sysctl(uvmexp_mib, 2, &uvmexp, &uvmexp_size, NULL, 0) == -1) { + snmp_log(LOG_ERR, "sysctl VM_UVMEXP failed (errno %d)\n", errno); + return -1; + } + if (sysctl(total_mib, 2, &total, &total_size, NULL, 0) == -1) { + snmp_log(LOG_ERR, "sysctl VM_METER failed (errno %d)\n", errno); + return -1; + } + if (sysctl(phys_mem_mib, 2, &phys_mem, &mem_size, NULL, 0) == -1) { + snmp_log(LOG_ERR, "sysctl HW_PHYSMEM failed (errno %d)\n", errno); + return -1; + } + if (sysctl(user_mem_mib, 2, &user_mem, &mem_size, NULL, 0) == -1) { + snmp_log(LOG_ERR, "sysctl HW_USERMEM failed (errno %d)\n", errno); + return -1; + } pagesize = uvmexp.pagesize; /*