[erlang-bugs] OTP-OS-MON-MIB bugs

Edwin Fine erlang-questions_efine@REDACTED
Thu May 29 00:12:26 CEST 2008


I need to thank Martin Bjorkland for helping me recognize this bug.

I believe that the file OTP-OS-MON-MIB.mib has two sets of bugs, one more
serious than the other. Fixing the first bug also showed up a potential
third bug (see later).

*The More Serious One*

The following objects in OTP-OS-MON-MIB.mib are defined as type Gauge32, and
cause problems when the values returned are actually greater than a 32-bit
value can represent:

    loadSystemTotalMemory           Gauge32,
    loadSystemUsedMemory            Gauge32,
    loadLargestErlProcessUsedMemory Gauge32,

To reproduce this problem, simply do an snmpwalk on a 64-bit system that has
more than 4 GB of memory (mine is Ubuntu 7.10 x86_64 with 8 GB) and try to
get the loadSystemTotalMemory.0 object.

*Example of error:*

$ snmpwalk -m ALL -u initial 127.0.0.1:4000 loadSystemTotalMemory.0
Error in packet.
Reason: (genError) A general failure occured
Failed object: OTP-OS-MON-MIB::loadSystemTotalMemory.""

OTP-OS-MON-MIB::loadSystemTotalMemory."" = No Such Instance currently exists
at this OID

-------------
*Agent error message*

I believe the agent error message below shows that the value of 8386678784
(not coincidentally, about 8 GB) is out of range.

=ERROR REPORT==== 28-May-2008::00:26:03 ===
** User error: Got 8386678784 from {os_mon_mib,load_table,[]}. Using
wrongValue

--------------
*Proposed Solution*

The solution according to Martin is to change the Gauge32 types to be
CounterBasedGauge64, from HCNUM-TC.

I tried this in OTP-OS-MON-MIB as follows:

   1. cd /usr/local/lib/erlang/lib/os_mon-2.1.5/mibs
   2. cp OTP-OS-MON-MIB.mib OTP-OS-MON-MIB.mib.buggy
   3. (Modified OTP-OS-MON-MIB.mib as shown in the diff output at the end of
   this email.)
   4. cp /usr/share/snmp/mibs/HCNUM-TC.txt ./HCNUM-TC.mib
   5. erlc -o ../priv/mibs/ -I ../priv/mibs -I
   ../../otp_mibs-1.0.4.1/priv/mibs HCNUM-TC.mib OTP-OS-MON-MIB.mib
   6. Reloaded the agent

This fixed the error, but exposed another possible bug. If otp-mib is not
loaded into the agent, then the snmpwalk causes this error below. This is
reproducible. I would think that if otp-mib was absent, the agent would at
least show that a required dependency was not loaded and not crash.

*** [2008:05:28 22:07:30 4113] SNMP MASTER-AGENT LOG ***

   apply: os_mon_mib,disk_table,[get_next,[],[0]]

*** [2008:05:28 22:07:30 4113] SNMP MASTER-AGENT INFO ***
   Call to:
   Module:   os_mon_mib
   Function: disk_table
   Args:     [get_next,[],[0]]

resulted in an exit

   {{badmatch,false},
    [{snmp_generic,table_info,1},
     {snmp_generic_mnesia,table_func,4},
     {os_mon_mib,update_disk_table,0},
     {snmp_shadow_table,update,3},
     {snmp_shadow_table,table_func,4},
     {snmpa_agent,dbg_apply,3},
     {snmpa_agent,get_next_values_all_rows,6},
     {snmpa_agent,get_next_table,4}]}

=ERROR REPORT==== 28-May-2008::18:07:30 ===
** User error: Invalid return value
{'EXIT',{{badmatch,false},[{snmp_generic,table_info,1},{snmp_generic_mnesia,table_func,4},{os_mon_mib,update_disk_table,0},{snmp_shadow_table,update,3},{snmp_shadow_table,table_func,4},{snmpa_agent,dbg_apply,3},{snmpa_agent,get_next_values_all_rows,6},{snmpa_agent,get_next_table,4}]}}
from {os_mon_mib,disk_table,[]} (get_next)
--------------------------------------
----------------------
$ diff -U 0 OTP-OS-MON-MIB.mib.buggy OTP-OS-MON-MIB.mib
--- OTP-OS-MON-MIB.mib.buggy    2008-05-06 10:02:27.000000000 -0400
+++ OTP-OS-MON-MIB.mib  2008-05-28 17:28:42.000000000 -0400
@@ -14,0 +15,2 @@
+    CounterBasedGauge64
+        FROM HCNUM-TC
@@ -111,2 +113,2 @@
-    loadSystemTotalMemory           Gauge32,
-    loadSystemUsedMemory            Gauge32,
+    loadSystemTotalMemory           CounterBasedGauge64,
+    loadSystemUsedMemory            CounterBasedGauge64,
@@ -114 +116 @@
-    loadLargestErlProcessUsedMemory Gauge32,
+    loadLargestErlProcessUsedMemory CounterBasedGauge64,
@@ -129 +131 @@
-    SYNTAX      Gauge32
+    SYNTAX      CounterBasedGauge64
@@ -138 +140 @@
-    SYNTAX      Gauge32
+    SYNTAX      CounterBasedGauge64
@@ -156 +158 @@
-    SYNTAX      Gauge32
+    SYNTAX      CounterBasedGauge64
@@ -283,4 +285,4 @@
-        GROUP loadAlarmsGroup
-        DESCRIPTION
-            "This group is optional for systems implementing the
-            load supervison functionality."
+        --GROUP loadAlarmsGroup
+        --DESCRIPTION
+        --   "This group is optional for systems implementing the
+        --    load supervison functionality."
@@ -291,4 +293,4 @@
-        GROUP diskAlarmsGroup
-        DESCRIPTION
-            "This group is optional for systems implementing the
-            disk supervison functionality."
+        --GROUP diskAlarmsGroup
+        --DESCRIPTION
+        --    "This group is optional for systems implementing the
+        --    disk supervison functionality."

--------------------------------------------
*The less serious bug

*Maybe this is not a bug, but two groups are referenced that do not exist in
OTP-OS-MON-MIB.mib:

        GROUP loadAlarmsGroup
        GROUP diskAlarmsGroup

This causes snmpwalk to emit error messages. Commenting out the above lines
seemed to have no effect other than stopping the snmpwalk error messages.

Regards,
Edwin Fine
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20080528/024eaec6/attachment.htm>


More information about the erlang-bugs mailing list