Fix issue with retrieving CPU stats in 6.3-STABLE and upper. The problem

is that the cp_time symbol is no longer avaliable in the nevest kernels.
Use kern.cp_time sysctl which has been around for 8 years or so, so that
it should be present virtually in every FreeBSD version that is able
to use modern ports tree (4.x and upper). Sysctl is also better from the
security standpoint, as you don't need elevated privileges to get the data.
One should probably look at converting few others uses of KVM here, but
ENOTIME from me. The patch has been submitted to the vendor.

Approved by:	MAINTAINER
This commit is contained in:
Maxim Sobolev 2008-04-28 22:54:28 +00:00
parent 7c573e7caa
commit 7ce7d2ea63
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=212189
2 changed files with 23 additions and 1 deletions

View File

@ -7,7 +7,7 @@
PORTNAME= snmp
PORTVERSION= 5.3.2
PORTREVISION= 2
PORTREVISION= 3
CATEGORIES= net-mgmt ipv6
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= net-snmp

View File

@ -0,0 +1,22 @@
--- agent/mibgroup/ucd-snmp/vmstat_freebsd2.c.orig 2008-04-25 16:28:53.000000000 +0300
+++ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c 2008-04-25 16:29:01.000000000 +0300
@@ -174,6 +174,7 @@
static long cpu_total;
long cpu_sum;
double cpu_prc;
+ int mib[2], mib_len, cpu_new_len;
static struct vmmeter mem_old, mem_new;
@@ -195,7 +196,10 @@
/*
* CPU usage
*/
- auto_nlist(CPTIME_SYMBOL, (char *) cpu_new, sizeof(cpu_new));
+ mib_len = 2;
+ sysctlnametomib("kern.cp_time", mib, &mib_len);
+ cpu_new_len = sizeof(cpu_new);
+ sysctl(mib, mib_len, cpu_new, &cpu_new_len, NULL, 0);
cpu_total = 0;