snmp plugin: Check for SNMP_ENDOFMIBVIEW.
authorFlorian Forster <octo@collectd.org>
Fri, 7 Sep 2012 08:11:42 +0000 (10:11 +0200)
committerFlorian Forster <octo@collectd.org>
Fri, 7 Sep 2012 08:23:09 +0000 (10:23 +0200)
Some implementations of SNMP will send a special "variable" when you're
leaving the requested subtree with type "endOfMibView" aka.
"SNMP_ENDOFMIBVIEW". Examples of such implementations are Citrix
Netscalers and IBM's General Parallel File System (GPFS). Reading past
this special variable will result in weird values being returned.

This adds an appropriate check to csnmp_check_res_left_subtree().

Thanks to "Mark" for reporting this issue and clarifying.

src/snmp.c

index 5c6cce2..5f7d3e9 100644 (file)
@@ -886,10 +886,12 @@ static int csnmp_check_res_left_subtree (const host_definition_t *host,
       vb = vb->next_variable, i++)
   {
     num_checked++;
-    if (snmp_oid_ncompare (data->values[i].oid,
-         data->values[i].oid_len,
-         vb->name, vb->name_length,
-         data->values[i].oid_len) != 0)
+
+    if ((vb->type == SNMP_ENDOFMIBVIEW)
+       || (snmp_oid_ncompare (data->values[i].oid,
+           data->values[i].oid_len,
+           vb->name, vb->name_length,
+           data->values[i].oid_len) != 0))
       num_left_subtree++;
   }