ports/86572: net-snmp doesn't know how to fill in hrSWRunType

wollman at csail.mit.edu wollman at csail.mit.edu
Mon Sep 26 02:50:17 UTC 2005


>Number:         86572
>Category:       ports
>Synopsis:       net-snmp doesn't know how to fill in hrSWRunType
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Sep 26 02:50:15 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Garrett Wollman
>Release:        FreeBSD 6.0-BETA5 i386
>Organization:
MIT CSAIL
>Environment:
System: FreeBSD wollman-random-testing.csail.mit.edu 6.0-BETA5 FreeBSD 6.0-BETA5 #0: Fri Sep 23 13:22:35 EDT 2005 root at wollman-random-testing.csail.mit.edu:/usr/obj/usr/src/sys/XYZ i386


>Description:

hrSWRunType is an enumeration, which can be unknown (1), operatingSystem (2),
deviceDriver (3), or application (4).  Right now, net-snmp fills in every
process as "application", which is clearly wrong.  It should probably be
saying "unknown".  The enclosed patch gets the correct values; it is a
replacement for files/patch-hr_swrun.c in the port.  It has also been
submitted to the net-snmp project as patch #1304400.

I have arbitrarily decided that ithreads should map to deviceDriver and
all other system processes should map to operatingSystem.

>How-To-Repeat:
snmpget hrSWRunType.0

>Fix:

--- ../../work.orig/net-snmp-5.2.1.2/agent/mibgroup/host/hr_swrun.c	Tue Jun  8 16:56:03 2004
+++ agent/mibgroup/host/hr_swrun.c	Sun Sep 25 22:02:35 2005
@@ -585,7 +585,7 @@
         string[ sizeof(string)-1 ] = 0;
 #endif
 #elif HAVE_KVM_GETPROCS
-    #if defined(freebsd5)
+    #if defined(freebsd5) && __FreeBSD_version >= 500014
         strcpy(string, proc_table[LowProcIndex].ki_comm);
     #else
         strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);
@@ -694,7 +694,7 @@
         *cp1 = 0;
 #endif
 #elif HAVE_KVM_GETPROCS
-    #if defined(freebsd5)
+    #if defined(freebsd5) && __FreeBSD_version >= 500014
         strcpy(string, proc_table[LowProcIndex].ki_comm);
     #else
         strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);
@@ -857,8 +857,25 @@
         if (pid < PID_MAXSYS)
             long_return = 2;    /* operatingSystem */
         else
-#endif
             long_return = 4;    /* application */
+#elif HAVE_KVM_GETPROCS
+    #if defined(freebsd5) && __FreeBSD_version >= 500014
+	if (proc_table[LowProcIndex].ki_flag & P_SYSTEM) {
+	    if (proc_table[LowProcIndex].ki_pri.pri_class == PRI_ITHD)
+		long_return = 3;/* deviceDriver */
+	    else
+		long_return = 2;/* operatingSystem */
+	} else
+	    long_return = 4;	/* application */
+    #else
+        if (proc_table[LowProcIndex].kp_proc.p_flag & P_SYSTEM)
+	    long_return = 2;	/* operatingSystem */
+	else
+	    long_return = 4;	/* application */
+    #endif
+#else
+	long_return = 4;	/* application */
+#endif
         return (u_char *) & long_return;
     case HRSWRUN_STATUS:
 #if defined(cygwin)
@@ -889,7 +906,7 @@
         }
 #else
 #if HAVE_KVM_GETPROCS
-    #if defined(freebsd5)
+    #if defined(freebsd5) && __FreeBSD_version >= 500014
         switch (proc_table[LowProcIndex].ki_stat) {
     #else
         switch (proc_table[LowProcIndex].kp_proc.p_stat) {
@@ -988,7 +1005,13 @@
         long_return = proc_buf->p_utime * 100 + proc_buf->p_stime * 100;
 #endif
 #elif HAVE_KVM_GETPROCS
-    #if defined(freebsd5)
+    #if defined(freebsd5) && __FreeBSD_version >= 500014
+        /* XXX: Accessing ki_paddr causes sig10 ...
+        long_return = proc_table[LowProcIndex].ki_paddr->p_uticks +
+            proc_table[LowProcIndex].ki_paddr->p_sticks +
+            proc_table[LowProcIndex].ki_paddr->p_iticks; */
+        long_return = 0;
+    #elif defined(freebsd5)
         long_return = proc_table[LowProcIndex].ki_runtime / 100000;
     #else
         long_return = proc_table[LowProcIndex].kp_proc.p_uticks +
@@ -1063,7 +1086,14 @@
         long_return = proc_buf->p_swrss;
 #endif
 #elif HAVE_KVM_GETPROCS
-#if defined(freebsd3) && !defined(darwin)
+#if defined(freebsd5) && __FreeBSD_version >= 500014
+	    /* XXX
+	    long_return = proc_table[LowProcIndex].ki_vmspace->vm_tsize +
+			  proc_table[LowProcIndex].ki_vmspace->vm_ssize +
+			  proc_table[LowProcIndex].ki_vmspace->vm_dsize;
+	    long_return = long_return * (getpagesize() / 1024); */
+	    long_return = 0;
+#elif defined(freebsd3) && !defined(darwin)
         long_return =
     #if defined(freebsd5)
             proc_table[LowProcIndex].ki_size / 1024;
@@ -1349,7 +1379,7 @@
 #elif defined(solaris2)
         return proc_table[current_proc_entry++];
 #elif HAVE_KVM_GETPROCS
-    #if defined(freebsd5)
+    #if defined(freebsd5) && __FreeBSD_version >= 500014
         if (proc_table[current_proc_entry].ki_stat != 0)
             return proc_table[current_proc_entry++].ki_pid;
     #else
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list