From 8ee506f90825476db61abaa8638ec5ed0473ff04 Mon Sep 17 00:00:00 2001 From: Simon Kuhnle Date: Sat, 18 Apr 2009 11:16:41 +0200 Subject: [PATCH] memory plugin: Added support for OpenBSD and possibly other *BSDs. Signed-off-by: Simon Kuhnle Signed-off-by: Florian Forster --- src/memory.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/memory.c b/src/memory.c index 2d90de3c..0926c595 100644 --- a/src/memory.c +++ b/src/memory.c @@ -53,6 +53,10 @@ static mach_port_t port_host; static vm_size_t pagesize; /* #endif HAVE_HOST_STATISTICS */ +#elif HAVE_SYSCTL +static int pagesize; +/* #endif HAVE_SYSCTL */ + #elif HAVE_SYSCTLBYNAME /* no global variables */ /* #endif HAVE_SYSCTLBYNAME */ @@ -81,6 +85,10 @@ static int memory_init (void) host_page_size (port_host, &pagesize); /* #endif HAVE_HOST_STATISTICS */ +#elif HAVE_SYSCTL + pagesize = getpagesize (); +/* #endif HAVE_SYSCTL */ + #elif HAVE_SYSCTLBYNAME /* no init stuff */ /* #endif HAVE_SYSCTLBYNAME */ @@ -174,6 +182,32 @@ static int memory_read (void) memory_submit ("free", free); /* #endif HAVE_HOST_STATISTICS */ +#elif HAVE_SYSCTL + int mib[] = {CTL_VM, VM_METER}; + struct vmtotal vmtotal; + size_t size; + + if (pagesize <= 0) + { + ERROR ("memory plugin: Invalid pagesize: %i", pagesize); + return (-1); + } + + memset (&vmtotal, 0, sizeof (vmtotal)); + size = sizeof (vmtotal); + + if (sysctl (mib, 2, &vmtotal, &size, NULL, 0) < 0) { + char errbuf[1024]; + WARNING ("memory plugin: sysctl failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (-1); + } + + memory_submit ("active", vmtotal.t_arm * pagesize); + memory_submit ("inactive", (vmtotal.t_rm - vmtotal.t_arm) * pagesize); + memory_submit ("free", vmtotal.t_free * pagesize); +/* #endif HAVE_SYSCTL */ + #elif HAVE_SYSCTLBYNAME /* * vm.stats.vm.v_page_size: 4096 -- 2.11.0