Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Apr 2017 22:16:00 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r438995 - in head/net-mgmt/net-snmp: . files
Message-ID:  <201704202216.v3KMG0xQ026651@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius (src committer)
Date: Thu Apr 20 22:16:00 2017
New Revision: 438995
URL: https://svnweb.freebsd.org/changeset/ports/438995

Log:
  Fixing net-snmpd after src revision r317061 (struct vmmeter changes),
  I discovered that net-snmpd tries to read { CTL_VM, VM_TOTAL } mib into
  'struct vmmeter' variable, instead of 'struct vmtotal'.  Of course,
  sysctl(3) fails, but net-snmpd doesn't check for errors.  Basicly this
  is broken for all supported FreeBSD versions, and I believe for all
  unsupported as well.  OIDs that report interruprs, context switches,
  paging and swap in/out were returning garbage from the application
  stack.
  
  To patch that problem, provide dummy struct __vmmeter, which works
  both on pre-r317061 and after, and add block of code that reads all
  necessary stats one by one.  To keep with the style of the file, do
  not check for errors from sysctl(3).

Added:
  head/net-mgmt/net-snmp/files/patch-agent_mibgroup_hardware_cpu_cpu_sysctl.c   (contents, props changed)
Modified:
  head/net-mgmt/net-snmp/Makefile

Modified: head/net-mgmt/net-snmp/Makefile
==============================================================================
--- head/net-mgmt/net-snmp/Makefile	Thu Apr 20 20:55:21 2017	(r438994)
+++ head/net-mgmt/net-snmp/Makefile	Thu Apr 20 22:16:00 2017	(r438995)
@@ -3,7 +3,7 @@
 
 PORTNAME=	snmp
 PORTVERSION=	5.7.3
-PORTREVISION=	15
+PORTREVISION=	16
 CATEGORIES=	net-mgmt ipv6
 MASTER_SITES=	SF/net-${PORTNAME}/net-${PORTNAME}/${PORTVERSION}
 PKGNAMEPREFIX=	net-

Added: head/net-mgmt/net-snmp/files/patch-agent_mibgroup_hardware_cpu_cpu_sysctl.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net-mgmt/net-snmp/files/patch-agent_mibgroup_hardware_cpu_cpu_sysctl.c	Thu Apr 20 22:16:00 2017	(r438995)
@@ -0,0 +1,49 @@
+--- agent/mibgroup/hardware/cpu/cpu_sysctl.c.orig	2014-12-08 12:23:22.000000000 -0800
++++ agent/mibgroup/hardware/cpu/cpu_sysctl.c	2017-04-20 15:05:11.607496000 -0700
+@@ -130,8 +130,21 @@
+ #endif  /* VM_UVMEXP2 || VM_UVMEXP */
+ 
+ #elif defined(__FreeBSD__)                /* FreeBSD */
++#if __FreeBSD_version >= 1200028
++#define	VMMETER_TYPE	uint64_t
++#else
++#define	VMMETER_TYPE	u_int
++#endif
++struct __vmmeter {
++	VMMETER_TYPE	v_intr;
++	VMMETER_TYPE	v_swtch;
++	VMMETER_TYPE	v_swappgsin;
++	VMMETER_TYPE	v_swappgsout;
++	VMMETER_TYPE	v_swapin;
++	VMMETER_TYPE	v_swapout;
++};
+ #define NETSNMP_VM_STATS       VM_METER
+-#define NETSNMP_VM_STATS_TYPE  struct vmmeter
++#define NETSNMP_VM_STATS_TYPE  struct __vmmeter
+     #define NS_VM_INTR		v_intr
+     #define NS_VM_SWTCH		v_swtch
+     #define NS_VM_PAGEIN	v_swappgsin
+@@ -206,7 +219,23 @@
+          * Interrupt/Context Switch statistics
+          *   XXX - Do these really belong here ?
+          */
++#ifdef __FreeBSD__
++#define	GET_VM_STATS(space, name) sysctlbyname("vm.stats." #space "." #name, &mem_stats.name, &len, NULL, 0)
++    {
++	size_t len;
++
++	len = sizeof(VMMETER_TYPE);
++	GET_VM_STATS(sys, v_intr);
++	GET_VM_STATS(sys, v_swtch);
++	GET_VM_STATS(vm, v_swappgsin);
++	GET_VM_STATS(vm, v_swappgsout);
++	GET_VM_STATS(vm, v_swapin);
++	GET_VM_STATS(vm, v_swapout);
++    }
++#undef GET_VM_STATS
++#else
+     sysctl(mem_mib, 2, &mem_stats, &mem_size, NULL, 0);
++#endif
+     cpu->nInterrupts  = mem_stats.NS_VM_INTR;
+     cpu->nCtxSwitches = mem_stats.NS_VM_SWTCH;
+     cpu->swapIn       = mem_stats.NS_VM_SWAPIN;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704202216.v3KMG0xQ026651>