MIB discovery - systemORD table - feature parity
![](https://secure.gravatar.com/avatar/1280ab8004c08ad36f83942837b1423e.jpg?s=120&d=mm&r=g)
On some systems SNMPv2-MIB:: sysORTable contains a list of MIBs supported by the agent. Of interest is the:
sysORID
entry which is defined as:
An authoritative identification of a capabilities statement with respect to various MIB modules supported by the local SNMPv2 entity acting in an agent role.
and has the OID of those MIBs.
Below tiny patch allows these to be
1) automatically included in the (sensor) scan.
2) Provides an option to have some skipped ($config['autodiscovery']['snmp_sysord']['ignore’]).
Dw
Index: include-dir-mib.inc.php =================================================================== --- include-dir-mib.inc.php (revision HEAD) +++ include-dir-mib.inc.php (working copy) @@ -32,17 +32,39 @@
$include_lib = isset($include_lib) && $include_lib;
-foreach (get_device_mibs($device) as $mib) +$mibs = get_device_mibs($device); + +// Check for any (extra) advertized MIBs in the sysORD table; note that we are +// intentionally using 'all' - as we need the textual MIB name in order to +// create a possible file name. +// +$advertizedMIBs = snmpwalk_cache_multi_oid($device, "SNMPv2-MIB::sysORID", array(), "all"); +foreach($advertizedMIBs as $index=> $entry) { + $mib = strtoupper(reset($entry)); + if (!strstr($mib,'-mib')) { + $mib = preg_replace('/MIB$/','-MIB',$mib); + }; + + if (!preg_grep('/'.$mib.'/i',$config['autodiscovery']['snmp_sysord']['ignore']) + && !preg_grep('/'.$mib.'/i', $mibs)) + { + array_push($mibs, $mib); + }; +}; + +foreach ($mibs as $mib) { $inc_dir = $config['install_dir'] . '/' . $include_dir . '/' . strtolower($mib); $inc_file = $inc_dir . '.inc.php';
- if (is_device_mib($device, $mib)) + // We are bypassing the 'is part of the get_device_mibs list' check; as we are passing + // a list sourced from get_device_mibs with possibly additional discovery. + // + if (is_device_mib($device, $mib, TRUE, FALSE)) { if (is_file($inc_file)) { if (OBS_DEBUG) { echo("[[$mib]]"); } - include($inc_file);
if ($include_lib && is_file($inc_dir . '.lib.php’))
Index: common.inc.php =================================================================== --- common.inc.php (revision HEAD) +++ common.inc.php (working copy) @@ -2172,11 +2174,14 @@ // DOCME needs phpdoc block // TESTME needs unit testing // MOVEME to includes/functions.inc.php -function is_device_mib($device, $mib, $check_permissions = TRUE) +function is_device_mib($device, $mib, $check_permissions = TRUE, $check_in_mib_list = TRUE) { global $config;
- $mib_permitted = in_array($mib, get_device_mibs($device)); // Check if mib available for device + $mib_permitted = TRUE; + if ($check_in_mib_list) + $mib_permitted = in_array($mib, get_device_mibs($device)); // Check if mib available for device + if ($check_permissions && $mib_permitted && (!isset($config['mibs'][$mib]['enable']) || $config['mibs'][$mib]['enable'])) { // Check if MIB permitted by config Index: defaults.inc.php =================================================================== --- defaults.inc.php (revision HEAD) +++ defaults.inc.php (working copy) @@ -174,6 +174,7 @@ $config['snmp']['v3'][0]['cryptopass'] = ""; // Privacy (Encryption) Passphrase $config['snmp']['v3'][0]['cryptoalgo'] = "AES"; // AES | DES
+ // Autodiscovery Settings
$config['autodiscovery']['xdp'] = TRUE; // Autodiscover hosts via discovery protocols (CDP, LLDP, FDP, AMAP and other) @@ -186,6 +187,8 @@ $config['autodiscovery']['ip_nets'] = array("127.0.0.0/8", "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12"); // Networks to permit autodiscovery $config['autodiscovery']['ping_skip'] = FALSE; // Skip icmp echo checks during autodiscovery (beware timeouts during discovery!)
+$config['autodiscovery']['snmp_sysord']['ignore'] = array('snmpMPDCompliance',' usmMIBCompliance','snmpFrameworkMIBCompliance','vacmBasicGroup','snmpNotifyFullCompliance'); + $config['discover_services'] = FALSE; // Autodiscover services via SNMP on devices of type "server"
// Mailer backend Settings
![](https://secure.gravatar.com/avatar/21caf0a08d095be7196a1648d20942be.jpg?s=120&d=mm&r=g)
Hi Dirk,
I'm looking at implementing this (but somewhat differently than your code) into Observium, but most of my devices don't really report anything useful here. Do you happen to have a few example snmpwalks and types of devices that supply useful information in this table? Have you run into any that report supported MIBs we don't already link through our definitions?
Thanks, Tom
On 06/02/2016 16:00, Dirk-Willem van Gulik wrote:
On some systems SNMPv2-MIB:: sysORTable contains a list of MIBs supported by the agent. Of interest is the:
sysORID
entry which is defined as:
An authoritative identification of a capabilities statement with respect to various MIB modules supported by the local SNMPv2 entity acting in an agent role.
and has the OID of those MIBs.
Below tiny patch allows these to be
automatically included in the (sensor) scan.
Provides an option to have some skipped ($config['autodiscovery']['snmp_sysord']['ignore’]).
Dw
Index: include-dir-mib.inc.php
--- include-dir-mib.inc.php (revision HEAD) +++ include-dir-mib.inc.php (working copy) @@ -32,17 +32,39 @@
$include_lib = isset($include_lib) && $include_lib;
-foreach (get_device_mibs($device) as $mib) +$mibs = get_device_mibs($device);
+// Check for any (extra) advertized MIBs in the sysORD table; note that we are +// intentionally using 'all' - as we need the textual MIB name in order to +// create a possible file name. +// +$advertizedMIBs = snmpwalk_cache_multi_oid($device, "SNMPv2-MIB::sysORID", array(), "all"); +foreach($advertizedMIBs as $index=> $entry) {
- $mib = strtoupper(reset($entry));
- if (!strstr($mib,'-mib')) {
$mib = preg_replace('/MIB$/','-MIB',$mib);
- };
- if (!preg_grep('/'.$mib.'/i',$config['autodiscovery']['snmp_sysord']['ignore'])
&& !preg_grep('/'.$mib.'/i', $mibs))
- {
array_push($mibs, $mib);
- };
+};
+foreach ($mibs as $mib) { $inc_dir = $config['install_dir'] . '/' . $include_dir . '/' . strtolower($mib); $inc_file = $inc_dir . '.inc.php';
- if (is_device_mib($device, $mib))
- // We are bypassing the 'is part of the get_device_mibs list' check; as we are passing
- // a list sourced from get_device_mibs with possibly additional discovery.
- //
- if (is_device_mib($device, $mib, TRUE, FALSE)) { if (is_file($inc_file)) { if (OBS_DEBUG) { echo("[[$mib]]"); }
include($inc_file); if ($include_lib && is_file($inc_dir . '.lib.php’))
Index: common.inc.php
--- common.inc.php (revision HEAD) +++ common.inc.php (working copy) @@ -2172,11 +2174,14 @@ // DOCME needs phpdoc block // TESTME needs unit testing // MOVEME to includes/functions.inc.php -function is_device_mib($device, $mib, $check_permissions = TRUE) +function is_device_mib($device, $mib, $check_permissions = TRUE, $check_in_mib_list = TRUE) { global $config;
- $mib_permitted = in_array($mib, get_device_mibs($device)); // Check if mib available for device
- $mib_permitted = TRUE;
- if ($check_in_mib_list)
- $mib_permitted = in_array($mib, get_device_mibs($device)); // Check if mib available for device
- if ($check_permissions && $mib_permitted && (!isset($config['mibs'][$mib]['enable']) || $config['mibs'][$mib]['enable'])) { // Check if MIB permitted by config
Index: defaults.inc.php
--- defaults.inc.php (revision HEAD) +++ defaults.inc.php (working copy) @@ -174,6 +174,7 @@ $config['snmp']['v3'][0]['cryptopass'] = ""; // Privacy (Encryption) Passphrase $config['snmp']['v3'][0]['cryptoalgo'] = "AES"; // AES | DES
// Autodiscovery Settings
$config['autodiscovery']['xdp'] = TRUE; // Autodiscover hosts via discovery protocols (CDP, LLDP, FDP, AMAP and other)
@@ -186,6 +187,8 @@ $config['autodiscovery']['ip_nets'] = array("127.0.0.0/8", "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12"); // Networks to permit autodiscovery $config['autodiscovery']['ping_skip'] = FALSE; // Skip icmp echo checks during autodiscovery (beware timeouts during discovery!)
+$config['autodiscovery']['snmp_sysord']['ignore'] = array('snmpMPDCompliance',' usmMIBCompliance','snmpFrameworkMIBCompliance','vacmBasicGroup','snmpNotifyFullCompliance');
$config['discover_services'] = FALSE; // Autodiscover services via SNMP on devices of type "server"
// Mailer backend Settings
observium mailing list observium@observium.org http://postman.memetic.org/cgi-bin/mailman/listinfo/observium
![](https://secure.gravatar.com/avatar/1280ab8004c08ad36f83942837b1423e.jpg?s=120&d=mm&r=g)
On 07 Feb 2016, at 14:34, Tom Laermans tom.laermans@powersource.cx wrote:
I'm looking at implementing this (but somewhat differently than your code) into Observium, but most of my devices don't really report anything useful here. Do you happen to have a few example snmpwalks and types of devices that supply useful information in this table? Have you run into any that report supported MIBs we don't already link through our definitions?
An easy way to test this is to add to your snmpd.conf (and adding the relevant mibs/mibdirs to snmp.conf or as -M/-m to snmpd):
override sysORID.11 object_id .1.3.6.1.4.1.8072.2.255 override sysORDescr.11 octet_str “Answers to life.” pass .1.3.6.1.4.1.8072.2.255 /bin/sh /usr/local/local/passtest
with the script
http://sourceforge.net/p/net-snmp/code/ci/master/tree/local/passtest
as its backend. Typical walks below of two switches.
Comes into its own in more automated/SDN settings or settings where some automated provisioning/deployment ‘adds’ elements to the local SNMPd through AgentX; e.g. when there is mysql, mongodb,heroku, MSSQLSERVER-MIB or what not running. Or the more common ‘MONITOR-MIB’.
If you want to test/play - have a look at https://github.com/hjort/pgstatmib or http://www.masterzen.fr/software-contributions/mysql-snmp-monitor-mysql-with...
and add to snmpd.conf:
override sysORID.12 object_id enterprises.20267 override sysORDescr.12 octet_str “Implements the MYSQL-SERVER-MIB”
to pick it up. This is a fairly typical route.
Dw.
SNMPv2-MIB::sysORID.1 IF-MIB::interfaces SNMPv2-MIB::sysORID.2 SNMPv2-SMI::transmission.7.2 SNMPv2-MIB::sysORID.3 iso.0.8802.1.1.1.1.1 SNMPv2-MIB::sysORID.4 SNMPv2-SMI::mib-2.17.7.1.2 SNMPv2-MIB::sysORID.5 SNMPv2-SMI::mib-2.17.4.5 SNMPv2-MIB::sysORID.6 SNMPv2-SMI::mib-2.17 SNMPv2-MIB::sysORID.7 SNMPv2-SMI::mib-2.105.1.1 SNMPv2-MIB::sysORID.8 IP-MIB::ip SNMPv2-MIB::sysORID.9 SNMPv2-MIB::system SNMPv2-MIB::sysORID.10 TCP-MIB::tcp SNMPv2-MIB::sysORID.11 SNMPv2-SMI::enterprises.171.10.76.21.1.61 SNMPv2-MIB::sysORID.12 SNMPv2-SMI::mib-2.67.2.2.1.1 SNMPv2-MIB::sysORID.13 SNMPv2-SMI::mib-2.67.1.2.1.1 SNMPv2-MIB::sysORID.14 SNMPv2-SMI::mib-2.16.1.1 SNMPv2-MIB::sysORID.15 iso.0.8802.1.1.2 SNMPv2-MIB::sysORID.16 iso.0.8802.1.1.2.1.5.32962 SNMPv2-MIB::sysORID.17 iso.0.8802.1.1.2.1.5.4623 SNMPv2-MIB::sysORID.18 SNMPv2-SMI::enterprises.171.12.92 SNMPv2-MIB::sysORID.19 SNMPv2-SMI::enterprises.171.10.76.21.1.1 SNMPv2-MIB::sysORID.20 SNMPv2-SMI::enterprises.171.10.76.21.1.2 SNMPv2-MIB::sysORID.21 SNMPv2-SMI::enterprises.171.10.76.21.1.14.10 SNMPv2-MIB::sysORID.22 SNMPv2-SMI::enterprises.171.10.76.21.1.12 SNMPv2-MIB::sysORID.23 SNMPv2-SMI::enterprises.171.10.76.21.1.12.4 SNMPv2-MIB::sysORID.24 SNMPv2-SMI::enterprises.171.10.76.21.1.12.5 SNMPv2-MIB::sysORID.25 SNMPv2-SMI::enterprises.171.10.76.21.1.12.3 SNMPv2-MIB::sysORID.26 SNMPv2-SMI::enterprises.171.10.76.21.1.13.1 SNMPv2-MIB::sysORID.27 SNMPv2-SMI::enterprises.171.10.76.21.1.7 SNMPv2-MIB::sysORID.28 SNMPv2-SMI::enterprises.171.10.76.21.1.4 SNMPv2-MIB::sysORID.29 SNMPv2-SMI::enterprises.171.10.76.21.1.14.1 SNMPv2-MIB::sysORID.30 SNMPv2-SMI::enterprises.171.10.76.21.1.9 SNMPv2-MIB::sysORID.31 SNMPv2-SMI::enterprises.171.10.76.21.1.15.1.1 SNMPv2-MIB::sysORID.32 SNMPv2-SMI::enterprises.171.10.76.21.1.25 SNMPv2-MIB::sysORID.33 SNMPv2-SMI::enterprises.171.10.76.21.1.16 SNMPv2-MIB::sysORID.34 SNMPv2-SMI::enterprises.171.10.76.21.1.3 SNMPv2-MIB::sysORID.35 SNMPv2-SMI::enterprises.171.10.76.21.1.14.5 SNMPv2-MIB::sysORID.36 SNMPv2-SMI::enterprises.171.10.76.21.1.14.8 SNMPv2-MIB::sysORID.37 SNMPv2-SMI::enterprises.171.10.76.21.1.23 SNMPv2-MIB::sysORID.38 SNMPv2-SMI::enterprises.171.10.76.21.1.10.1 SNMPv2-MIB::sysORID.39 SNMPv2-SMI::enterprises.171.10.76.21.1.88.1 SNMPv2-MIB::sysORID.40 SNMPv2-SMI::enterprises.171.10.76.21.1.99 SNMPv2-MIB::sysORID.41 SNMPv2-SMI::enterprises.171.10.76.21.1.8.1 SNMPv2-MIB::sysORID.42 SNMPv2-SMI::enterprises.171.10.76.21.1.6.1 SNMPv2-MIB::sysORID.43 SNMPv2-SMI::enterprises.171.10.76.21.1.20 SNMPv2-MIB::sysORID.44 SNMPv2-SMI::enterprises.171.10.76.21.1.35 SNMPv2-MIB::sysORID.45 SNMPv2-SMI::enterprises.171.10.76.21.1.21.1 SNMPv2-MIB::sysORID.46 SNMPv2-SMI::enterprises.171.10.76.21.1.26.1 SNMPv2-MIB::sysORID.47 SNMPv2-SMI::enterprises.171.10.76.21.1.14.3 SNMPv2-MIB::sysORID.48 SNMPv2-SMI::enterprises.171.10.76.21.1.14.2.1 SNMPv2-MIB::sysORID.49 SNMPv2-SMI::enterprises.171.10.76.21.1.22 SNMPv2-MIB::sysORID.50 SNMPv2-SMI::enterprises.171.10.76.21.1.17 SNMPv2-MIB::sysORID.51 SNMPv2-SMI::enterprises.171.10.76.21.1.18 SNMPv2-MIB::sysORID.52 SNMPv2-SMI::enterprises.171.10.76.21.1.24 SNMPv2-MIB::sysORID.53 SNMPv2-SMI::enterprises.171.10.76.21.1.14.7 SNMPv2-MIB::sysORID.54 SNMPv2-SMI::enterprises.171.10.76.21.1.14.9.1 SNMPv2-MIB::sysORID.55 SNMPv2-SMI::enterprises.171.10.76.21.1.32 SNMPv2-MIB::sysORID.56 SNMPv2-SMI::enterprises.171.10.76.21.1.31 SNMPv2-MIB::sysORID.57 SNMPv2-SMI::enterprises.171.10.76.21.1.47 SNMPv2-MIB::sysORID.58 SNMPv2-SMI::enterprises.171.10.76.21.1.37 SNMPv2-MIB::sysORID.59 SNMPv2-SMI::enterprises.171.10.76.21.1.50 SNMPv2-MIB::sysORID.60 SNMPv2-SMI::enterprises.171.10.76.21.1.52.1.1 SNMPv2-MIB::sysORID.61 SNMPv2-SMI::enterprises.171.10.76.21.1.62 SNMPv2-MIB::sysORID.62 SNMPv2-SMI::enterprises.171.10.76.21.1.63
SNMPv2-MIB::sysORID.1 SNMPv2-MIB::snmpMIB SNMPv2-MIB::sysORID.2 SNMPv2-SMI::mib-2.16.20.8 SNMPv2-MIB::sysORID.3 SNMPv2-SMI::enterprises.4526 SNMPv2-MIB::sysORID.4 SNMP-COMMUNITY-MIB::snmpCommunityMIB SNMPv2-MIB::sysORID.5 SNMP-FRAMEWORK-MIB::snmpFrameworkMIB SNMPv2-MIB::sysORID.6 SNMP-MPD-MIB::snmpMPDMIB SNMPv2-MIB::sysORID.7 SNMP-TARGET-MIB::snmpTargetMIB SNMPv2-MIB::sysORID.8 SNMP-TARGET-MIB::snmpTargetMIB SNMPv2-MIB::sysORID.9 SNMP-USER-BASED-SM-MIB::snmpUsmMIB SNMPv2-MIB::sysORID.10 SNMP-VIEW-BASED-ACM-MIB::snmpVacmMIB SNMPv2-MIB::sysORID.11 SNMPv2-SMI::enterprises.99.12.35 SNMPv2-MIB::sysORID.12 iso.2.840.10006.300.43 SNMPv2-MIB::sysORID.13 SNMPv2-SMI::mib-2 SNMPv2-MIB::sysORID.14 SNMPv2-SMI::mib-2.17 SNMPv2-MIB::sysORID.15 SNMPv2-SMI::mib-2.17.6 SNMPv2-MIB::sysORID.16 SNMPv2-SMI::mib-2.17.7 SNMPv2-MIB::sysORID.17 SNMPv2-SMI::mib-2.47 SNMPv2-MIB::sysORID.18 IF-MIB::ifMIB SNMPv2-MIB::sysORID.19 SNMPv2-SMI::mib-2.35 SNMPv2-MIB::sysORID.20 SNMPv2-SMI::enterprises.4526.11.1 SNMPv2-MIB::sysORID.21 SNMPv2-SMI::enterprises.4526.11.13 SNMPv2-MIB::sysORID.22 SNMPv2-SMI::enterprises.4526.11.20 SNMPv2-MIB::sysORID.23 iso.0.8802.1.1.1.1 SNMPv2-MIB::sysORID.24 SNMPv2-SMI::enterprises.4526.11.8 SNMPv2-MIB::sysORID.25 SNMPv2-SMI::mib-2.67.2.2 SNMPv2-MIB::sysORID.26 SNMPv2-SMI::mib-2.67.1.2 SNMPv2-MIB::sysORID.27 SNMPv2-SMI::enterprises.4526.11.11 SNMPv2-MIB::sysORID.28 SNMPv2-SMI::enterprises.4526.11.3 SNMPv2-MIB::sysORID.29 SNMPv2-SMI::enterprises.4526.11.3.2 SNMPv2-MIB::sysORID.30 SNMPv2-SMI::enterprises.4526.11.3.3
participants (2)
-
Dirk-Willem van Gulik
-
Tom Laermans