diff --git a/includes/common.php b/includes/common.php index f20e9a98b9..ed03bab390 100644 --- a/includes/common.php +++ b/includes/common.php @@ -1581,6 +1581,11 @@ function fahrenheit_to_celsius($scale, $value) return sprintf('%.02f', $value); } +function uw_to_dbm($value) +{ + return 10 * log10($value / 1000); +} + /** * @param $value * @param null $default diff --git a/includes/definitions/vrp.yaml b/includes/definitions/vrp.yaml index a1900bbd55..3d61260ed1 100644 --- a/includes/definitions/vrp.yaml +++ b/includes/definitions/vrp.yaml @@ -3,6 +3,12 @@ group: vrp text: 'Huawei VRP' type: network icon: huawei +over: + - { graph: device_bits, text: 'Device Traffic' } + - { graph: device_processor, text: 'Processor Usage' } + - { graph: device_mempool, text: 'Memory Usage' } +mib_dir: + - huawei discovery: - sysDescr: - VRP (R) Software diff --git a/includes/discovery/sensors/current/vrp.inc.php b/includes/discovery/sensors/current/vrp.inc.php new file mode 100644 index 0000000000..6a0deab173 --- /dev/null +++ b/includes/discovery/sensors/current/vrp.inc.php @@ -0,0 +1,52 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Neil Lathwood + * @author Neil Lathwood + */ + +if ($device['os'] === 'vrp') { + echo 'Huawei VRP '; + $data = $vrp_oids['hwEntityOpticalBiasCurrent']; + + foreach ($data as $index => $value) { + if (is_numeric($value) && $value >= 0) { + $oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.3.1.7.' . $index; + $descr = $vrp_oids['entPhysicalName'][$index]; + discover_sensor( + $valid['sensor'], + 'current', + $device, + $oid, + $index, + 'vrp', + $descr, + 1000, + 1, + 0, + 0, + 70, + 75, + $value + ); + } + } +} diff --git a/includes/discovery/sensors/dbm/vrp.inc.php b/includes/discovery/sensors/dbm/vrp.inc.php new file mode 100644 index 0000000000..7bc51917fc --- /dev/null +++ b/includes/discovery/sensors/dbm/vrp.inc.php @@ -0,0 +1,79 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Neil Lathwood + * @author Neil Lathwood + */ + +if ($device['os'] === 'vrp') { + echo 'Huawei VRP '; + $data = $vrp_oids['hwEntityOpticalRxPower']; + + foreach ($data as $index => $value) { + if (is_numeric($value) && $value >= 0) { + $value = uw_to_dbm($value); + $oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.3.1.8.' . $index; + $descr = $vrp_oids['entPhysicalName'][$index] . ' Rx'; + discover_sensor( + $valid['sensor'], + 'dbm', + $device, + $oid, + 'rx-' . $index, + 'vrp', + $descr, + 1, + 1, + 0, + 0, + 70, + 75, + $value + ); + } + } + + $data = $vrp_oids['hwEntityOpticalTxPower']; + + foreach ($data as $index => $value) { + if (is_numeric($value) && $value >= 0) { + $value = uw_to_dbm($value); + $oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.3.1.9.' . $index; + $descr = $vrp_oids['entPhysicalName'][$index] . ' Tx'; + discover_sensor( + $valid['sensor'], + 'dbm', + $device, + $oid, + 'tx-' . $index, + 'vrp', + $descr, + 1, + 1, + 0, + 0, + 70, + 75, + $value + ); + } + } +} diff --git a/includes/discovery/sensors/pre-cache/vrp.inc.php b/includes/discovery/sensors/pre-cache/vrp.inc.php new file mode 100644 index 0000000000..403b984b8a --- /dev/null +++ b/includes/discovery/sensors/pre-cache/vrp.inc.php @@ -0,0 +1,35 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Neil Lathwood + * @author Neil Lathwood + */ + +if ($device['os'] == 'vrp') { + echo 'Pre-cache VRP: '; + + $vrp_oids = array(); + echo 'Caching OIDs:'; + + $vrp_oids = snmpwalk_cache_index($device, '.1.3.6.1.4.1.2011.5.25.31.1.1.1.1', array(), 'HUAWEI-ENTITY-EXTENT-MIB'); + $vrp_oids = snmpwalk_cache_index($device, '.1.3.6.1.4.1.2011.5.25.31.1.1.3.1', $vrp_oids, 'HUAWEI-ENTITY-EXTENT-MIB'); + $vrp_oids = snmpwalk_cache_index($device, '.1.3.6.1.2.1.47.1.1.1.1.7', $vrp_oids, 'HUAWEI-ENTITY-EXTENT-MIB'); +} diff --git a/includes/discovery/sensors/temperatures/vrp.inc.php b/includes/discovery/sensors/temperatures/vrp.inc.php new file mode 100644 index 0000000000..0a4f4c9bee --- /dev/null +++ b/includes/discovery/sensors/temperatures/vrp.inc.php @@ -0,0 +1,80 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Neil Lathwood + * @author Neil Lathwood + */ + +if ($device['os'] === 'vrp') { + echo 'Huawei VRP '; + + $data = $vrp_oids['hwEntityTemperature']; + + foreach ($data as $index => $value) { + if (is_numeric($value) && $value > 0) { + $oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.1.1.11.' . $index; + $descr = $vrp_oids['entPhysicalName'][$index]; + $high_temp_thresh = $vrp_oids['hwEntityTemperatureThreshold'][$index]; + $low_temp_thresh = $vrp_oids['hwEntityTemperatureLowThreshold'][$index]; + discover_sensor( + $valid['sensor'], + 'temperature', + $device, + $oid, + $index, + 'vrp', + $descr, + 1, + 1, + $low_temp_thresh, + $low_temp_thresh, + $high_temp_thresh, + $high_temp_thresh, + $value + ); + } + } + + $data = $vrp_oids['hwEntityOpticalTemperature']; + + foreach ($data as $index => $value) { + if (is_numeric($value) && $value >= 0) { + $oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.3.1.5.' . $index; + $descr = $vrp_oids['entPhysicalName'][$index]; + discover_sensor( + $valid['sensor'], + 'temperature', + $device, + $oid, + $index, + 'vrp', + $descr, + 1, + 1, + 0, + 0, + 70, + 75, + $value + ); + } + } +} diff --git a/includes/discovery/sensors/voltages/vrp.inc.php b/includes/discovery/sensors/voltages/vrp.inc.php new file mode 100644 index 0000000000..43febee215 --- /dev/null +++ b/includes/discovery/sensors/voltages/vrp.inc.php @@ -0,0 +1,52 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Neil Lathwood + * @author Neil Lathwood + */ + +if ($device['os'] === 'vrp') { + echo 'Huawei VRP '; + $data = $vrp_oids['hwEntityOpticalVoltage']; + + foreach ($data as $index => $value) { + if (is_numeric($value) && $value >= 0) { + $oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.3.1.6.' . $index; + $descr = $vrp_oids['entPhysicalName'][$index]; + discover_sensor( + $valid['sensor'], + 'voltage', + $device, + $oid, + $index, + 'vrp', + $descr, + 1000, + 1, + 0, + 0, + 70, + 75, + $value + ); + } + } +} diff --git a/includes/polling/sensors/dbm/vrp.inc.php b/includes/polling/sensors/dbm/vrp.inc.php new file mode 100644 index 0000000000..f563eec1ac --- /dev/null +++ b/includes/polling/sensors/dbm/vrp.inc.php @@ -0,0 +1,26 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Neil Lathwood + * @author Neil Lathwood + */ + +$sensor_value = uw_to_dbm($sensor_value); diff --git a/includes/snmp.inc.php b/includes/snmp.inc.php index 4dc76c9f8d..211a53eb9b 100644 --- a/includes/snmp.inc.php +++ b/includes/snmp.inc.php @@ -443,6 +443,22 @@ function snmpwalk_cache_double_oid($device, $oid, $array, $mib = null, $mibdir = return $array; }//end snmpwalk_cache_double_oid() +function snmpwalk_cache_index($device, $oid, $array, $mib = null, $mibdir = null) +{ + $data = snmp_walk($device, $oid, '-OQUs', $mib, $mibdir); + + foreach (explode("\n", $data) as $entry) { + list($oid,$value) = explode('=', $entry, 2); + $oid = trim($oid); + $value = trim($value); + list($oid, $first) = explode('.', $oid); + if (!strstr($value, 'at this OID') && isset($oid) && isset($first)) { + $array[$oid][$first] = $value; + } + } + + return $array; +}//end snmpwalk_cache_double_oid() function snmpwalk_cache_triple_oid($device, $oid, $array, $mib = null, $mibdir = null) {