mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
merging
This commit is contained in:
@@ -714,6 +714,7 @@ $config['poller_modules']['mib'] = 0;
|
||||
$config['poller_modules']['cisco-voice'] = 1;
|
||||
$config['poller_modules']['cisco-cbqos'] = 1;
|
||||
$config['poller_modules']['stp'] = 1;
|
||||
$config['poller_modules']['cisco-otv'] = 1;
|
||||
|
||||
// List of discovery modules. Need to be in this array to be
|
||||
// considered for execution.
|
||||
@@ -748,6 +749,7 @@ $config['discovery_modules']['services'] = 1;
|
||||
$config['discovery_modules']['charge'] = 1;
|
||||
$config['discovery_modules']['cisco-cbqos'] = 0;
|
||||
$config['discovery_modules']['stp'] = 1;
|
||||
$config['discovery_modules']['cisco-otv'] = 1;
|
||||
|
||||
$config['modules_compat']['rfc1628']['liebert'] = 1;
|
||||
$config['modules_compat']['rfc1628']['netmanplus'] = 1;
|
||||
|
260
includes/discovery/cisco-otv.inc.php
Normal file
260
includes/discovery/cisco-otv.inc.php
Normal file
@@ -0,0 +1,260 @@
|
||||
<?php
|
||||
/*
|
||||
* LibreNMS module to capture Cisco OTV Details
|
||||
*
|
||||
* Copyright (c) 2015 Aaron Daniels <aaron@daniels.id.au>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version. Please see LICENSE.txt at the top level of
|
||||
* the source code distribution for details.
|
||||
*/
|
||||
|
||||
if ($device['os_group'] == 'cisco') {
|
||||
|
||||
// Define some error messages
|
||||
$error_vpn = array();
|
||||
$error_vpn[0] = "Other";
|
||||
$error_vpn[1] = "Configuration changed";
|
||||
$error_vpn[2] = "Control Group information is unavailable";
|
||||
$error_vpn[3] = "Data Group range information is unavailable";
|
||||
$error_vpn[4] = "Join or Source interface information is unavailable";
|
||||
$error_vpn[5] = "VPN name is unavailable";
|
||||
$error_vpn[6] = "IP address is missing for Join Interface";
|
||||
$error_vpn[7] = "Join Interface is down";
|
||||
$error_vpn[8] = "Overlay is administratively shutdown";
|
||||
$error_vpn[9] = "Overlay is in delete hold down phase";
|
||||
$error_vpn[10] = "VPN is reinitializing";
|
||||
$error_vpn[11] = "Site ID information is unavailable";
|
||||
$error_vpn[12] = "Site ID mismatch has occurred";
|
||||
$error_vpn[13] = "IP address is missing for Source Interface";
|
||||
$error_vpn[14] = "Source interface is down";
|
||||
$error_vpn[15] = "Changing site identifier";
|
||||
$error_vpn[16] = "Changing control group";
|
||||
$error_vpn[17] = "Device ID information is unavailable";
|
||||
$error_vpn[18] = "Changing device ID";
|
||||
$error_vpn[19] = "Cleanup in progress";
|
||||
|
||||
$error_aed = array();
|
||||
$error_aed[0] = "Other";
|
||||
$error_aed[1] = "Overlay is Down";
|
||||
$error_aed[2] = "Site ID is not configured";
|
||||
$error_aed[3] = "Site ID mismatch";
|
||||
$error_aed[4] = "Version mismatch";
|
||||
$error_aed[5] = "Site VLAN is Down";
|
||||
$error_aed[6] = "No extended VLAN is operationally up";
|
||||
$error_aed[7] = "No Overlay Adjacency is up";
|
||||
$error_aed[8] = "LSPDB sync incomplete";
|
||||
$error_aed[9] = "Overlay state down event in progress";
|
||||
$error_aed[10] = "ISIS control group sync pending";
|
||||
|
||||
$error_overlay = array();
|
||||
$error_overlay[1] = "active";
|
||||
$error_overlay[2] = "notInService";
|
||||
$error_overlay[3] = "notReady";
|
||||
$error_overlay[4] = "createAndGo";
|
||||
$error_overlay[5] = "createAndWait";
|
||||
$error_overlay[6] = "destroy";
|
||||
|
||||
$module = 'Cisco-OTV';
|
||||
echo $module.': ';
|
||||
|
||||
require_once 'includes/component.php';
|
||||
$component = new component();
|
||||
$components = $component->getComponents($device['device_id'],array('type'=>$module));
|
||||
|
||||
// We only care about our device id.
|
||||
$components = $components[$device['device_id']];
|
||||
|
||||
// Begin our master array, all other values will be processed into this array.
|
||||
$tblOTV = array();
|
||||
$tblEndpoints = array();
|
||||
|
||||
// Let's gather some data..
|
||||
$tblOverlayEntry = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.2.1.1');
|
||||
$tblAdjacencyDatabaseEntry = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.3.1.1', 0);
|
||||
$tblAdjacentDevName = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.3.1.1.4', 0);
|
||||
|
||||
/*
|
||||
* False == no object found - this is not an error, there is no QOS configured
|
||||
* null == timeout or something else that caused an error, there may be QOS configured but we couldn't get it.
|
||||
*/
|
||||
if ( is_null($tblOverlayEntry) || is_null($tblAdjacencyDatabaseEntry) || is_null($tblAdjacentDevName) ) {
|
||||
// We have to error here or we will end up deleting all our components.
|
||||
echo "Error\n";
|
||||
}
|
||||
else {
|
||||
// No Error, lets process things.
|
||||
|
||||
// Add each overlay to the array.
|
||||
foreach ($tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.2'] as $index => $name) {
|
||||
$result = array();
|
||||
$message = false;
|
||||
$result['index'] = $index;
|
||||
$result['label'] = $name;
|
||||
if ($tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.15'][$index] == 1) {
|
||||
$result['transport'] = 'Multicast';
|
||||
}
|
||||
else {
|
||||
$result['transport'] = 'Unicast';
|
||||
}
|
||||
$result['otvtype'] = 'overlay';
|
||||
$result['UID'] = $result['otvtype']."-".$result['index'];
|
||||
$result['vpn_state'] = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.3'][$index];
|
||||
if ($result['vpn_state'] != 2) {
|
||||
$message .= "VPN Down: ".$error_vpn[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.4'][$index]]."\n";
|
||||
}
|
||||
$result['aed_state'] = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.13'][$index];
|
||||
if ($result['aed_state'] == 2) {
|
||||
$message .= "AED Down: ".$error_aed[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.14'][$index]]."\n";
|
||||
}
|
||||
$result['overlay_state'] = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.23'][$index];
|
||||
if ($result['overlay_state'] == 2) {
|
||||
$message .= "Overlay Down: ".$error_overlay[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.24'][$index]]."\n";
|
||||
}
|
||||
|
||||
// If we have set a message, we have an error, activate alert.
|
||||
if ($message !== false) {
|
||||
$result['error'] = $message;
|
||||
$result['status'] = 0;
|
||||
}
|
||||
else {
|
||||
$result['error'] = "";
|
||||
$result['status'] = 1;
|
||||
}
|
||||
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nOverlay: ".$result['label']."\n");
|
||||
d_echo(" Index: ".$result['index']."\n");
|
||||
d_echo(" UID: ".$result['UID']."\n");
|
||||
d_echo(" Transport: ".$result['transport']."\n");
|
||||
d_echo(" Type: ".$result['otvtype']."\n");
|
||||
d_echo(" Status: ".$result['status']."\n");
|
||||
d_echo(" Message: ".$result['error']."\n");
|
||||
|
||||
// Add the result to the parent array.
|
||||
$tblOTV[] = $result;
|
||||
}
|
||||
|
||||
// Add each adjacency to the array.
|
||||
foreach ($tblAdjacentDevName as $key => $value) {
|
||||
preg_match('/^1.3.6.1.4.1.9.9.810.1.3.1.1.4.(\d+).1.4.(\d+.\d+.\d+.\d+)$/', $key, $matches);
|
||||
$result = array();
|
||||
$result['index'] = $matches[1];
|
||||
$result['endpoint'] = $matches[2];
|
||||
$tblEndpoints[$value] = true;
|
||||
$result['otvtype'] = 'adjacency';
|
||||
$result['UID'] = $result['otvtype']."-".$result['index']."-".str_replace(' ', '', $tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.3.'.$result['index'].'.1.4.'.$result['endpoint']]);
|
||||
$result['uptime'] = $tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.6.'.$result['index'].'.1.4.'.$result['endpoint']];
|
||||
$message = false;
|
||||
if ($tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.5.'.$result['index'].'.1.4.'.$result['endpoint']] != 1) {
|
||||
$message .= "Adjacency is Down\n";
|
||||
}
|
||||
|
||||
// If we have set a message, we have an error, activate alert.
|
||||
if ($message !== false) {
|
||||
$result['error'] = $message;
|
||||
$result['status'] = 0;
|
||||
}
|
||||
else {
|
||||
$result['error'] = "";
|
||||
$result['status'] = 1;
|
||||
}
|
||||
|
||||
// Set a default name, if for some unknown reason we cant find the parent VPN.
|
||||
$result['label'] = "Unknown (".$result['index'].") - ".$value;
|
||||
// We need to search the existing array to build the name
|
||||
foreach ($tblOTV as $item) {
|
||||
if (($item['otvtype'] == 'overlay') && ($item['index'] == $result['index'])) {
|
||||
$result['label'] = $item['label']." - ".$value;
|
||||
}
|
||||
}
|
||||
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nAdjacency: ".$result['label']."\n");
|
||||
d_echo(" Endpoint: ".$result['endpoint']."\n");
|
||||
d_echo(" Index: ".$result['index']."\n");
|
||||
d_echo(" UID: ".$result['UID']."\n");
|
||||
d_echo(" Status: ".$result['status']."\n");
|
||||
d_echo(" Message: ".$result['error']."\n");
|
||||
|
||||
// Add the result to the parent array.
|
||||
$tblOTV[] = $result;
|
||||
}
|
||||
|
||||
// We retain a list of all endpoints to tie the RRD to.
|
||||
foreach ($tblEndpoints as $k => $v) {
|
||||
$result['label'] = "Endpoint: ".$k;
|
||||
$result['otvtype'] = 'endpoint';
|
||||
$result['endpoint'] = $k;
|
||||
$result['UID'] = $result['otvtype']."-".$k;
|
||||
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nEndpoint: ".$result['label']."\n");
|
||||
d_echo(" UID: ".$result['UID']."\n");
|
||||
d_echo(" Type: ".$result['otvtype']."\n");
|
||||
|
||||
// Add the result to the parent array.
|
||||
$tblOTV[] = $result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ok, we have our 2 array's (Components and SNMP) now we need
|
||||
* to compare and see what needs to be added/updated.
|
||||
*
|
||||
* Let's loop over the SNMP data to see if we need to ADD or UPDATE any components.
|
||||
*/
|
||||
foreach ($tblOTV as $key => $array) {
|
||||
$component_key = false;
|
||||
|
||||
// Loop over our components to determine if the component exists, or we need to add it.
|
||||
foreach ($components as $compid => $child) {
|
||||
if ($child['UID'] === $array['UID']) {
|
||||
$component_key = $compid;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$component_key) {
|
||||
// The component doesn't exist, we need to ADD it - ADD.
|
||||
$new_component = $component->createComponent($device['device_id'],$module);
|
||||
$component_key = key($new_component);
|
||||
$components[$component_key] = array_merge($new_component[$component_key], $array);
|
||||
echo "+";
|
||||
}
|
||||
else {
|
||||
// The component does exist, merge the details in - UPDATE.
|
||||
$components[$component_key] = array_merge($components[$component_key], $array);
|
||||
echo ".";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop over the Component data to see if we need to DELETE any components.
|
||||
*/
|
||||
foreach ($components as $key => $array) {
|
||||
// Guilty until proven innocent
|
||||
$found = false;
|
||||
|
||||
foreach ($tblOTV as $k => $v) {
|
||||
if ($array['UID'] == $v['UID']) {
|
||||
// Yay, we found it...
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($found === false) {
|
||||
// The component has not been found. we should delete it.
|
||||
echo "-";
|
||||
$component->deleteComponent($key);
|
||||
}
|
||||
}
|
||||
|
||||
// Write the Components back to the DB.
|
||||
$component->setComponentPrefs($device['device_id'],$components);
|
||||
echo "\n";
|
||||
|
||||
} // End if not error
|
||||
|
||||
}
|
@@ -1,351 +1,350 @@
|
||||
<?php
|
||||
|
||||
if ($config['enable_bgp']) {
|
||||
foreach (dbFetchRows('SELECT * FROM bgpPeers WHERE device_id = ?', array($device['device_id'])) as $peer) {
|
||||
//add context if exist
|
||||
$device['context_name']= $peer['context_name'];
|
||||
|
||||
// Poll BGP Peer
|
||||
$peer2 = false;
|
||||
echo 'Checking BGP peer '.$peer['bgpPeerIdentifier'].' ';
|
||||
|
||||
if (!empty($peer['bgpPeerIdentifier'])) {
|
||||
if (!strstr($peer['bgpPeerIdentifier'], ':') || $device['os'] != 'junos') {
|
||||
// v4 BGP4 MIB
|
||||
// FIXME - needs moved to function
|
||||
$peer_data_check = snmpwalk_cache_oid($device, 'cbgpPeer2RemoteAs', array(), 'CISCO-BGP4-MIB', $config['mibdir']);
|
||||
if (count($peer_data_check) > 0) {
|
||||
$peer2 = true;
|
||||
}
|
||||
$peers = dbFetchRows('SELECT * FROM bgpPeers WHERE device_id = ?', array($device['device_id']));
|
||||
|
||||
if ($peer2 === true) {
|
||||
if (strstr($peer['bgpPeerIdentifier'], ':')) {
|
||||
$bgp_peer_ident = ipv62snmp($peer['bgpPeerIdentifier']);
|
||||
}
|
||||
else {
|
||||
$bgp_peer_ident = $peer['bgpPeerIdentifier'];
|
||||
if (!empty($peers)) {
|
||||
|
||||
if ($device['os'] != 'junos') {
|
||||
$peer_data_check = snmpwalk_cache_oid($device, 'cbgpPeer2RemoteAs', array(), 'CISCO-BGP4-MIB', $config['mibdir']);
|
||||
}
|
||||
|
||||
foreach ($peers as $peer) {
|
||||
//add context if exist
|
||||
$device['context_name']= $peer['context_name'];
|
||||
|
||||
// Poll BGP Peer
|
||||
$peer2 = false;
|
||||
echo 'Checking BGP peer '.$peer['bgpPeerIdentifier'].' ';
|
||||
|
||||
if (!empty($peer['bgpPeerIdentifier'])) {
|
||||
if (!strstr($peer['bgpPeerIdentifier'], ':') || $device['os'] != 'junos') {
|
||||
// v4 BGP4 MIB
|
||||
if (count($peer_data_check) > 0) {
|
||||
$peer2 = true;
|
||||
}
|
||||
|
||||
if (strstr($peer['bgpPeerIdentifier'], ':')) {
|
||||
$ip_type = 2;
|
||||
$ip_len = 16;
|
||||
$ip_ver = 'ipv6';
|
||||
}
|
||||
else {
|
||||
$ip_type = 1;
|
||||
$ip_len = 4;
|
||||
$ip_ver = 'ipv4';
|
||||
}
|
||||
|
||||
$peer_identifier = $ip_type.'.'.$ip_len.'.'.$bgp_peer_ident;
|
||||
$peer_data_tmp = snmp_get_multi(
|
||||
$device,
|
||||
' cbgpPeer2State.'.$peer_identifier.' cbgpPeer2AdminStatus.'.$peer_identifier.' cbgpPeer2InUpdates.'.$peer_identifier.' cbgpPeer2OutUpdates.'.$peer_identifier.' cbgpPeer2InTotalMessages.'.$peer_identifier.' cbgpPeer2OutTotalMessages.'.$peer_identifier.' cbgpPeer2FsmEstablishedTime.'.$peer_identifier.' cbgpPeer2InUpdateElapsedTime.'.$peer_identifier.' cbgpPeer2LocalAddr.'.$peer_identifier,
|
||||
'-OQUs',
|
||||
'CISCO-BGP4-MIB',
|
||||
$config['mibdir']
|
||||
);
|
||||
$ident = "$ip_ver.\"".$bgp_peer_ident.'"';
|
||||
unset($peer_data);
|
||||
$ident_key = array_keys($peer_data_tmp);
|
||||
foreach ($peer_data_tmp[$ident_key[0]] as $k => $v) {
|
||||
if (strstr($k, 'cbgpPeer2LocalAddr')) {
|
||||
if ($ip_ver == 'ipv6') {
|
||||
$v = str_replace('"', '', $v);
|
||||
$v = rtrim($v);
|
||||
$v = preg_replace('/(\S+\s+\S+)\s/', '$1:', $v);
|
||||
$v = strtolower($v);
|
||||
}
|
||||
else {
|
||||
$v = hex_to_ip($v);
|
||||
}
|
||||
if ($peer2 === true) {
|
||||
if (strstr($peer['bgpPeerIdentifier'], ':')) {
|
||||
$bgp_peer_ident = ipv62snmp($peer['bgpPeerIdentifier']);
|
||||
}
|
||||
else {
|
||||
$bgp_peer_ident = $peer['bgpPeerIdentifier'];
|
||||
}
|
||||
|
||||
$peer_data .= "$v\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
// $peer_cmd = $config['snmpget'].' -M '.$config['mibdir'].' -m BGP4-MIB -OUvq '.snmp_gen_auth($device).' '.$device['hostname'].':'.$device['port'].' ';
|
||||
$oids = "bgpPeerState." . $peer['bgpPeerIdentifier'] . " bgpPeerAdminStatus." . $peer['bgpPeerIdentifier'] . " bgpPeerInUpdates." . $peer['bgpPeerIdentifier'] . " bgpPeerOutUpdates." . $peer['bgpPeerIdentifier'] . " bgpPeerInTotalMessages." . $peer['bgpPeerIdentifier'] . " ";
|
||||
$oids .= "bgpPeerOutTotalMessages." . $peer['bgpPeerIdentifier'] . " bgpPeerFsmEstablishedTime." . $peer['bgpPeerIdentifier'] . " bgpPeerInUpdateElapsedTime." . $peer['bgpPeerIdentifier'] . " ";
|
||||
$oids .= "bgpPeerLocalAddr." . $peer['bgpPeerIdentifier'] . "";
|
||||
$peer_data=snmp_get_multi($device,$oids,'-OUQs','BGP4-MIB');
|
||||
$peer_data= array_pop($peer_data);
|
||||
if($debug){
|
||||
var_dump($peer_data);
|
||||
}
|
||||
}//end if
|
||||
$bgpPeerState= !empty($peer_data['bgpPeerState'])?$peer_data['bgpPeerState']:'';
|
||||
$bgpPeerAdminStatus= !empty($peer_data['bgpPeerAdminStatus'])?$peer_data['bgpPeerAdminStatus']:'';
|
||||
$bgpPeerInUpdates= !empty($peer_data['bgpPeerInUpdates'])?$peer_data['bgpPeerInUpdates']:'';
|
||||
$bgpPeerOutUpdates= !empty($peer_data['bgpPeerOutUpdates'])?$peer_data['bgpPeerOutUpdates']:'';
|
||||
$bgpPeerInTotalMessages= !empty($peer_data['bgpPeerInTotalMessages'])?$peer_data['bgpPeerInTotalMessages']:'';
|
||||
$bgpPeerOutTotalMessages= !empty($peer_data['bgpPeerOutTotalMessages'])?$peer_data['bgpPeerOutTotalMessages']:'';
|
||||
$bgpPeerFsmEstablishedTime= !empty($peer_data['bgpPeerFsmEstablishedTime'])?$peer_data['bgpPeerFsmEstablishedTime']:'';
|
||||
$bgpPeerInUpdateElapsedTime= !empty($peer_data['bgpPeerInUpdateElapsedTime'])?$peer_data['bgpPeerInUpdateElapsedTime']:'';
|
||||
$bgpLocalAddr= !empty($peer_data['bgpPeerLocalAddr'])?$peer_data['bgpPeerLocalAddr']:'';
|
||||
//list($bgpPeerState, $bgpPeerAdminStatus, $bgpPeerInUpdates, $bgpPeerOutUpdates, $bgpPeerInTotalMessages, $bgpPeerOutTotalMessages, $bgpPeerFsmEstablishedTime, $bgpPeerInUpdateElapsedTime, $bgpLocalAddr) = explode("\n", $peer_data);
|
||||
$bgpLocalAddr = str_replace('"', '', str_replace(' ', '', $bgpLocalAddr));
|
||||
unset($peer_data);
|
||||
}
|
||||
else if ($device['os'] == 'junos') {
|
||||
// v6 for JunOS via Juniper MIB
|
||||
$peer_ip = ipv62snmp($peer['bgpPeerIdentifier']);
|
||||
if (strstr($peer['bgpPeerIdentifier'], ':')) {
|
||||
$ip_type = 2;
|
||||
$ip_len = 16;
|
||||
$ip_ver = 'ipv6';
|
||||
}
|
||||
else {
|
||||
$ip_type = 1;
|
||||
$ip_len = 4;
|
||||
$ip_ver = 'ipv4';
|
||||
}
|
||||
|
||||
if (!isset($junos_v6)) {
|
||||
echo "\nCaching Oids...";
|
||||
// FIXME - needs moved to function
|
||||
//$peer_cmd = $config['snmpwalk'].' -M '.$config['mibdir'].'/junos -m BGP4-V2-MIB-JUNIPER -OUnq -'.$device['snmpver'].' '.snmp_gen_auth($device).' '.$device['hostname'].':'.$device['port'];
|
||||
|
||||
foreach (explode("\n",snmp_get($device,'jnxBgpM2PeerStatus.0.ipv6"','-OUnq','BGP4-V2-MIB-JUNIPER',$config['mibdir'] . "/junos")) as $oid){
|
||||
list($peer_oid) = explode(' ', $oid);
|
||||
$peer_id = explode('.', $peer_oid);
|
||||
$junos_v6[implode('.', array_slice($peer_id, 35))] = implode('.', array_slice($peer_id, 18));
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME - move to function (and clean up, wtf?)
|
||||
|
||||
$oids = " jnxBgpM2PeerState.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerStatus.0.ipv6." . $junos_v6[$peer_ip]; # Should be jnxBgpM2CfgPeerAdminStatus but doesn't seem to be implemented?
|
||||
$oids .= " jnxBgpM2PeerInUpdates.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerOutUpdates.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerInTotalMessages.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerOutTotalMessages.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerFsmEstablishedTime.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerInUpdatesElapsedTime.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerLocalAddr.0.ipv6." . $junos_v6[$peer_ip];
|
||||
//$peer_cmd .= '|grep -v "No Such Instance"'; WHAT TO DO WITH THIS??,USE TO SEE -Ln??
|
||||
$peer_data=snmp_get_multi($device,$oids,'-OUQs -Ln','BGP4-V2-MIB-JUNIPER',$config['mibdir'] . "/junos");
|
||||
$peer_data= array_pop($peer_data);
|
||||
if($debug){
|
||||
var_dump($peer_data);
|
||||
}
|
||||
$bgpPeerState= !empty($peer_data['bgpPeerState'])?$peer_data['bgpPeerState']:'';
|
||||
$bgpPeerAdminStatus= !empty($peer_data['bgpPeerAdminStatus'])?$peer_data['bgpPeerAdminStatus']:'';
|
||||
$bgpPeerInUpdates= !empty($peer_data['bgpPeerInUpdates'])?$peer_data['bgpPeerInUpdates']:'';
|
||||
$bgpPeerOutUpdates= !empty($peer_data['bgpPeerOutUpdates'])?$peer_data['bgpPeerOutUpdates']:'';
|
||||
$bgpPeerInTotalMessages= !empty($peer_data['bgpPeerInTotalMessages'])?$peer_data['bgpPeerInTotalMessages']:'';
|
||||
$bgpPeerOutTotalMessages= !empty($peer_data['bgpPeerOutTotalMessages'])?$peer_data['bgpPeerOutTotalMessages']:'';
|
||||
$bgpPeerFsmEstablishedTime= !empty($peer_data['bgpPeerFsmEstablishedTime'])?$peer_data['bgpPeerFsmEstablishedTime']:'';
|
||||
$bgpPeerInUpdateElapsedTime= !empty($peer_data['bgpPeerInUpdateElapsedTime'])?$peer_data['bgpPeerInUpdateElapsedTime']:'';
|
||||
$bgpLocalAddr= !empty($peer_data['bgpPeerLocalAddr'])?$peer_data['bgpPeerLocalAddr']:'';
|
||||
|
||||
unset($peer_data);
|
||||
|
||||
d_echo("State = $bgpPeerState - AdminStatus: $bgpPeerAdminStatus\n");
|
||||
|
||||
$bgpLocalAddr = str_replace('"', '', str_replace(' ', '', $bgpLocalAddr));
|
||||
if ($bgpLocalAddr == '00000000000000000000000000000000') {
|
||||
$bgpLocalAddr = '';
|
||||
// Unknown?
|
||||
}
|
||||
else {
|
||||
$bgpLocalAddr = strtolower($bgpLocalAddr);
|
||||
for ($i = 0; $i < 32; $i += 4) {
|
||||
$bgpLocalAddr6[] = substr($bgpLocalAddr, $i, 4);
|
||||
}
|
||||
|
||||
$bgpLocalAddr = Net_IPv6::compress(implode(':', $bgpLocalAddr6));
|
||||
unset($bgpLocalAddr6);
|
||||
}
|
||||
}//end if
|
||||
}//end if
|
||||
|
||||
if ($bgpPeerFsmEstablishedTime) {
|
||||
if (!(is_array($config['alerts']['bgp']['whitelist']) && !in_array($peer['bgpPeerRemoteAs'], $config['alerts']['bgp']['whitelist'])) && ($bgpPeerFsmEstablishedTime < $peer['bgpPeerFsmEstablishedTime'] || $bgpPeerState != $peer['bgpPeerState'])) {
|
||||
if ($peer['bgpPeerState'] == $bgpPeerState) {
|
||||
log_event('BGP Session Flap: '.$peer['bgpPeerIdentifier'].' (AS'.$peer['bgpPeerRemoteAs'].')', $device, 'bgpPeer', $bgpPeer_id);
|
||||
}
|
||||
else if ($bgpPeerState == 'established') {
|
||||
log_event('BGP Session Up: '.$peer['bgpPeerIdentifier'].' (AS'.$peer['bgpPeerRemoteAs'].')', $device, 'bgpPeer', $bgpPeer_id);
|
||||
}
|
||||
else if ($peer['bgpPeerState'] == 'established') {
|
||||
log_event('BGP Session Down: '.$peer['bgpPeerIdentifier'].' (AS'.$peer['bgpPeerRemoteAs'].')', $device, 'bgpPeer', $bgpPeer_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$peerrrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('bgp-'.$peer['bgpPeerIdentifier'].'.rrd');
|
||||
if (!is_file($peerrrd)) {
|
||||
$create_rrd = 'DS:bgpPeerOutUpdates:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerInUpdates:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerOutTotal:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerInTotal:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerEstablished:GAUGE:600:0:U '.$config['rrd_rra'];
|
||||
|
||||
rrdtool_create($peerrrd, $create_rrd);
|
||||
}
|
||||
|
||||
$fields = array(
|
||||
'bgpPeerOutUpdates' => $bgpPeerOutUpdates,
|
||||
'bgpPeerInUpdates' => $bgpPeerInUpdates,
|
||||
'bgpPeerOutTotal' => $bgpPeerOutTotalMessages,
|
||||
'bgpPeerInTotal' => $bgpPeerInTotalMessages,
|
||||
'bgpPeerEstablished' => $bgpPeerFsmEstablishedTime,
|
||||
);
|
||||
rrdtool_update("$peerrrd", $fields);
|
||||
|
||||
$tags = array('bgpPeerIdentifier' => $peer['bgpPeerIdentifier']);
|
||||
influx_update($device,'bgp',$tags,$fields);
|
||||
|
||||
$peer['update']['bgpPeerState'] = $bgpPeerState;
|
||||
$peer['update']['bgpPeerAdminStatus'] = $bgpPeerAdminStatus;
|
||||
$peer['update']['bgpPeerFsmEstablishedTime'] = $bgpPeerFsmEstablishedTime;
|
||||
$peer['update']['bgpPeerInUpdates'] = $bgpPeerInUpdates;
|
||||
$peer['update']['bgpLocalAddr'] = $bgpLocalAddr;
|
||||
$peer['update']['bgpPeerOutUpdates'] = $bgpPeerOutUpdates;
|
||||
|
||||
dbUpdate($peer['update'], 'bgpPeers', '`device_id` = ? AND `bgpPeerIdentifier` = ?', array($device['device_id'], $peer['bgpPeerIdentifier']));
|
||||
|
||||
if ($device['os_group'] == 'cisco' || $device['os'] == 'junos') {
|
||||
// Poll each AFI/SAFI for this peer (using CISCO-BGP4-MIB or BGP4-V2-JUNIPER MIB)
|
||||
$peer_afis = dbFetchRows('SELECT * FROM bgpPeers_cbgp WHERE `device_id` = ? AND bgpPeerIdentifier = ?', array($device['device_id'], $peer['bgpPeerIdentifier']));
|
||||
foreach ($peer_afis as $peer_afi) {
|
||||
$afi = $peer_afi['afi'];
|
||||
$safi = $peer_afi['safi'];
|
||||
d_echo("$afi $safi\n");
|
||||
|
||||
if ($device['os_group'] == 'cisco') {
|
||||
$bgp_peer_ident = ipv62snmp($peer['bgpPeerIdentifier']);
|
||||
if (strstr($peer['bgpPeerIdentifier'], ':')) {
|
||||
$ip_type = 2;
|
||||
$ip_len = 16;
|
||||
$ip_ver = 'ipv6';
|
||||
}
|
||||
else {
|
||||
$ip_type = 1;
|
||||
$ip_len = 4;
|
||||
$ip_ver = 'ipv4';
|
||||
}
|
||||
|
||||
$ip_cast = 1;
|
||||
if ($peer_afi['safi'] == 'multicast') {
|
||||
$ip_cast = 2;
|
||||
}
|
||||
else if ($peer_afi['safi'] == 'unicastAndMulticast') {
|
||||
$ip_cast = 3;
|
||||
}
|
||||
else if ($peer_afi['safi'] == 'vpn') {
|
||||
$ip_cast = 128;
|
||||
}
|
||||
|
||||
$check = snmp_get($device, 'cbgpPeer2AcceptedPrefixes.'.$ip_type.'.'.$ip_len.'.'.$bgp_peer_ident.'.'.$ip_type.'.'.$ip_cast, '', 'CISCO-BGP4-MIB', $config['mibdir']);
|
||||
|
||||
if (!empty($check)) {
|
||||
$cgp_peer_identifier = $ip_type.'.'.$ip_len.'.'.$bgp_peer_ident.'.'.$ip_type.'.'.$ip_cast;
|
||||
$cbgp_data_tmp = snmp_get_multi(
|
||||
$peer_identifier = $ip_type.'.'.$ip_len.'.'.$bgp_peer_ident;
|
||||
$peer_data_tmp = snmp_get_multi(
|
||||
$device,
|
||||
' cbgpPeer2AcceptedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2DeniedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2PrefixAdminLimit.'.$cgp_peer_identifier.' cbgpPeer2PrefixThreshold.'.$cgp_peer_identifier.' cbgpPeer2PrefixClearThreshold.'.$cgp_peer_identifier.' cbgpPeer2AdvertisedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2SuppressedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2WithdrawnPrefixes.'.$cgp_peer_identifier,
|
||||
' cbgpPeer2State.'.$peer_identifier.' cbgpPeer2AdminStatus.'.$peer_identifier.' cbgpPeer2InUpdates.'.$peer_identifier.' cbgpPeer2OutUpdates.'.$peer_identifier.' cbgpPeer2InTotalMessages.'.$peer_identifier.' cbgpPeer2OutTotalMessages.'.$peer_identifier.' cbgpPeer2FsmEstablishedTime.'.$peer_identifier.' cbgpPeer2InUpdateElapsedTime.'.$peer_identifier.' cbgpPeer2LocalAddr.'.$peer_identifier,
|
||||
'-OQUs',
|
||||
'CISCO-BGP4-MIB',
|
||||
$config['mibdir']
|
||||
);
|
||||
$ident = "$ip_ver.\"".$peer['bgpPeerIdentifier'].'"'.'.'.$ip_type.'.'.$ip_cast;
|
||||
unset($cbgp_data);
|
||||
$temp_keys = array_keys($cbgp_data_tmp);
|
||||
unset($temp_data);
|
||||
$temp_data['cbgpPeer2AcceptedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2AcceptedPrefixes'];
|
||||
$temp_data['cbgpPeer2DeniedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2DeniedPrefixes'];
|
||||
$temp_data['cbgpPeer2PrefixAdminLimit'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2PrefixAdminLimit'];
|
||||
$temp_data['cbgpPeer2PrefixThreshold'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2PrefixThreshold'];
|
||||
$temp_data['cbgpPeer2PrefixClearThreshold'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2PrefixClearThreshold'];
|
||||
$temp_data['cbgpPeer2AdvertisedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2AdvertisedPrefixes'];
|
||||
$temp_data['cbgpPeer2SuppressedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2SuppressedPrefixes'];
|
||||
$temp_data['cbgpPeer2WithdrawnPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2WithdrawnPrefixes'];
|
||||
foreach ($temp_data as $k => $v) {
|
||||
$cbgp_data .= "$v\n";
|
||||
}
|
||||
$ident = "$ip_ver.\"".$bgp_peer_ident.'"';
|
||||
unset($peer_data);
|
||||
$ident_key = array_keys($peer_data_tmp);
|
||||
foreach ($peer_data_tmp[$ident_key[0]] as $k => $v) {
|
||||
if (strstr($k, 'cbgpPeer2LocalAddr')) {
|
||||
if ($ip_ver == 'ipv6') {
|
||||
$v = str_replace('"', '', $v);
|
||||
$v = rtrim($v);
|
||||
$v = preg_replace('/(\S+\s+\S+)\s/', '$1:', $v);
|
||||
$v = strtolower($v);
|
||||
}
|
||||
else {
|
||||
$v = hex_to_ip($v);
|
||||
}
|
||||
}
|
||||
|
||||
d_echo("$cbgp_data\n");
|
||||
$peer_data .= "$v\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
// FIXME - move to function
|
||||
|
||||
|
||||
$oids = " cbgpPeerAcceptedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerDeniedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerPrefixAdminLimit." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerPrefixThreshold." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerPrefixClearThreshold." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerAdvertisedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerSuppressedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerWithdrawnPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
|
||||
d_echo("$oids\n");
|
||||
|
||||
$cbgp_data= snmp_get_multi($device,$oids,'-OUQs ','CISCO-BGP4-MIB');
|
||||
$cbgp_data= array_pop($cbgp_data);
|
||||
|
||||
d_echo("$cbgp_data\n");
|
||||
|
||||
|
||||
// $peer_cmd = $config['snmpget'].' -M '.$config['mibdir'].' -m BGP4-MIB -OUvq '.snmp_gen_auth($device).' '.$device['hostname'].':'.$device['port'].' ';
|
||||
$oids = "bgpPeerState." . $peer['bgpPeerIdentifier'] . " bgpPeerAdminStatus." . $peer['bgpPeerIdentifier'] . " bgpPeerInUpdates." . $peer['bgpPeerIdentifier'] . " bgpPeerOutUpdates." . $peer['bgpPeerIdentifier'] . " bgpPeerInTotalMessages." . $peer['bgpPeerIdentifier'] . " ";
|
||||
$oids .= "bgpPeerOutTotalMessages." . $peer['bgpPeerIdentifier'] . " bgpPeerFsmEstablishedTime." . $peer['bgpPeerIdentifier'] . " bgpPeerInUpdateElapsedTime." . $peer['bgpPeerIdentifier'] . " ";
|
||||
$oids .= "bgpPeerLocalAddr." . $peer['bgpPeerIdentifier'] . "";
|
||||
$peer_data=snmp_get_multi($device,$oids,'-OUQs','BGP4-MIB');
|
||||
$peer_data= array_pop($peer_data);
|
||||
if($debug){
|
||||
var_dump($peer_data);
|
||||
}
|
||||
}//end if
|
||||
|
||||
$cbgpPeerAcceptedPrefixes= !empty($cbgp_data['cbgpPeerAcceptedPrefixes'])?$cbgp_data['cbgpPeerAcceptedPrefixes']:'';
|
||||
$cbgpPeerDeniedPrefixes= !empty($cbgp_data['cbgpPeerDeniedPrefixes'])?$cbgp_data['cbgpPeerDeniedPrefixes']:'';
|
||||
$cbgpPeerPrefixAdminLimit= !empty($cbgp_data['cbgpPeerPrefixAdminLimit'])?$cbgp_data['cbgpPeerPrefixAdminLimit']:'';
|
||||
$cbgpPeerPrefixThreshold= !empty($cbgp_data['cbgpPeerPrefixThreshold'])?$cbgp_data['cbgpPeerPrefixThreshold']:'';
|
||||
$cbgpPeerPrefixClearThreshold= !empty($cbgp_data['cbgpPeerPrefixClearThreshold'])?$cbgp_data['cbgpPeerPrefixClearThreshold']:'';
|
||||
$cbgpPeerAdvertisedPrefixes= !empty($cbgp_data['cbgpPeerAdvertisedPrefixes'])?$cbgp_data['cbgpPeerAdvertisedPrefixes']:'';
|
||||
$cbgpPeerSuppressedPrefixes= !empty($cbgp_data['cbgpPeerSuppressedPrefixes'])?$cbgp_data['cbgpPeerSuppressedPrefixes']:'';
|
||||
$cbgpPeerWithdrawnPrefixes= !empty($cbgp_data['cbgpPeerWithdrawnPrefixes'])?$cbgp_data['cbgpPeerWithdrawnPrefixes']:'';
|
||||
|
||||
unset($cbgp_data);
|
||||
$bgpPeerState= !empty($peer_data['bgpPeerState'])?$peer_data['bgpPeerState']:'';
|
||||
$bgpPeerAdminStatus= !empty($peer_data['bgpPeerAdminStatus'])?$peer_data['bgpPeerAdminStatus']:'';
|
||||
$bgpPeerInUpdates= !empty($peer_data['bgpPeerInUpdates'])?$peer_data['bgpPeerInUpdates']:'';
|
||||
$bgpPeerOutUpdates= !empty($peer_data['bgpPeerOutUpdates'])?$peer_data['bgpPeerOutUpdates']:'';
|
||||
$bgpPeerInTotalMessages= !empty($peer_data['bgpPeerInTotalMessages'])?$peer_data['bgpPeerInTotalMessages']:'';
|
||||
$bgpPeerOutTotalMessages= !empty($peer_data['bgpPeerOutTotalMessages'])?$peer_data['bgpPeerOutTotalMessages']:'';
|
||||
$bgpPeerFsmEstablishedTime= !empty($peer_data['bgpPeerFsmEstablishedTime'])?$peer_data['bgpPeerFsmEstablishedTime']:'';
|
||||
$bgpPeerInUpdateElapsedTime= !empty($peer_data['bgpPeerInUpdateElapsedTime'])?$peer_data['bgpPeerInUpdateElapsedTime']:'';
|
||||
$bgpLocalAddr= !empty($peer_data['bgpPeerLocalAddr'])?$peer_data['bgpPeerLocalAddr']:'';
|
||||
//list($bgpPeerState, $bgpPeerAdminStatus, $bgpPeerInUpdates, $bgpPeerOutUpdates, $bgpPeerInTotalMessages, $bgpPeerOutTotalMessages, $bgpPeerFsmEstablishedTime, $bgpPeerInUpdateElapsedTime, $bgpLocalAddr) = explode("\n", $peer_data);
|
||||
$bgpLocalAddr = str_replace('"', '', str_replace(' ', '', $bgpLocalAddr));
|
||||
unset($peer_data);
|
||||
}
|
||||
else if ($device['os'] == 'junos') {
|
||||
// v6 for JunOS via Juniper MIB
|
||||
$peer_ip = ipv62snmp($peer['bgpPeerIdentifier']);
|
||||
|
||||
if (!isset($junos_v6)) {
|
||||
echo "\nCaching Oids...";
|
||||
// FIXME - needs moved to function
|
||||
//$peer_cmd = $config['snmpwalk'].' -M '.$config['mibdir'].'/junos -m BGP4-V2-MIB-JUNIPER -OUnq -'.$device['snmpver'].' '.snmp_gen_auth($device).' '.$device['hostname'].':'.$device['port'];
|
||||
|
||||
foreach (explode("\n",snmp_get($device,'jnxBgpM2PeerStatus.0.ipv6"','-OUnq','BGP4-V2-MIB-JUNIPER',$config['mibdir'] . "/junos")) as $oid){
|
||||
list($peer_oid) = explode(' ', $oid);
|
||||
$peer_id = explode('.', $peer_oid);
|
||||
$junos_v6[implode('.', array_slice($peer_id, 35))] = implode('.', array_slice($peer_id, 18));
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME - move to function (and clean up, wtf?)
|
||||
$oids = " jnxBgpM2PeerState.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerStatus.0.ipv6." . $junos_v6[$peer_ip]; # Should be jnxBgpM2CfgPeerAdminStatus but doesn't seem to be implemented?
|
||||
$oids .= " jnxBgpM2PeerInUpdates.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerOutUpdates.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerInTotalMessages.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerOutTotalMessages.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerFsmEstablishedTime.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerInUpdatesElapsedTime.0.ipv6." . $junos_v6[$peer_ip];
|
||||
$oids .= " jnxBgpM2PeerLocalAddr.0.ipv6." . $junos_v6[$peer_ip];
|
||||
//$peer_cmd .= '|grep -v "No Such Instance"'; WHAT TO DO WITH THIS??,USE TO SEE -Ln??
|
||||
$peer_data=snmp_get_multi($device,$oids,'-OUQs -Ln','BGP4-V2-MIB-JUNIPER',$config['mibdir'] . "/junos");
|
||||
$peer_data= array_pop($peer_data);
|
||||
if($debug){
|
||||
var_dump($peer_data);
|
||||
}
|
||||
$bgpPeerState= !empty($peer_data['bgpPeerState'])?$peer_data['bgpPeerState']:'';
|
||||
$bgpPeerAdminStatus= !empty($peer_data['bgpPeerAdminStatus'])?$peer_data['bgpPeerAdminStatus']:'';
|
||||
$bgpPeerInUpdates= !empty($peer_data['bgpPeerInUpdates'])?$peer_data['bgpPeerInUpdates']:'';
|
||||
$bgpPeerOutUpdates= !empty($peer_data['bgpPeerOutUpdates'])?$peer_data['bgpPeerOutUpdates']:'';
|
||||
$bgpPeerInTotalMessages= !empty($peer_data['bgpPeerInTotalMessages'])?$peer_data['bgpPeerInTotalMessages']:'';
|
||||
$bgpPeerOutTotalMessages= !empty($peer_data['bgpPeerOutTotalMessages'])?$peer_data['bgpPeerOutTotalMessages']:'';
|
||||
$bgpPeerFsmEstablishedTime= !empty($peer_data['bgpPeerFsmEstablishedTime'])?$peer_data['bgpPeerFsmEstablishedTime']:'';
|
||||
$bgpPeerInUpdateElapsedTime= !empty($peer_data['bgpPeerInUpdateElapsedTime'])?$peer_data['bgpPeerInUpdateElapsedTime']:'';
|
||||
$bgpLocalAddr= !empty($peer_data['bgpPeerLocalAddr'])?$peer_data['bgpPeerLocalAddr']:'';
|
||||
|
||||
unset($peer_data);
|
||||
|
||||
d_echo("State = $bgpPeerState - AdminStatus: $bgpPeerAdminStatus\n");
|
||||
|
||||
$bgpLocalAddr = str_replace('"', '', str_replace(' ', '', $bgpLocalAddr));
|
||||
if ($bgpLocalAddr == '00000000000000000000000000000000') {
|
||||
$bgpLocalAddr = '';
|
||||
// Unknown?
|
||||
}
|
||||
else {
|
||||
$bgpLocalAddr = strtolower($bgpLocalAddr);
|
||||
for ($i = 0; $i < 32; $i += 4) {
|
||||
$bgpLocalAddr6[] = substr($bgpLocalAddr, $i, 4);
|
||||
}
|
||||
|
||||
$bgpLocalAddr = Net_IPv6::compress(implode(':', $bgpLocalAddr6));
|
||||
unset($bgpLocalAddr6);
|
||||
}
|
||||
}//end if
|
||||
}//end if
|
||||
|
||||
// FIXME THESE FIELDS DO NOT EXIST IN THE DATABASE!
|
||||
$update = 'UPDATE bgpPeers_cbgp SET';
|
||||
$peer['c_update']['AcceptedPrefixes'] = $cbgpPeerAcceptedPrefixes;
|
||||
$peer['c_update']['DeniedPrefixes'] = $cbgpPeerDeniedPrefixes;
|
||||
$peer['c_update']['PrefixAdminLimit'] = $cbgpPeerAdminLimit;
|
||||
$peer['c_update']['PrefixThreshold'] = $cbgpPeerPrefixThreshold;
|
||||
$peer['c_update']['PrefixClearThreshold'] = $cbgpPeerPrefixClearThreshold;
|
||||
$peer['c_update']['AdvertisedPrefixes'] = $cbgpPeerAdvertisedPrefixes;
|
||||
$peer['c_update']['SuppressedPrefixes'] = $cbgpPeerSuppressedPrefixes;
|
||||
$peer['c_update']['WithdrawnPrefixes'] = $cbgpPeerWithdrawnPrefixes;
|
||||
|
||||
|
||||
$oids = array(
|
||||
'AcceptedPrefixes',
|
||||
'DeniedPrefixes',
|
||||
'AdvertisedPrefixes',
|
||||
'SuppressedPrefixes',
|
||||
'WithdrawnPrefixes',
|
||||
);
|
||||
|
||||
foreach ($oids as $oid) {
|
||||
$peer['c_update'][$oid.'_delta'] = $peer['c_update'][$oid] - $peer_afi[$oid];
|
||||
$peer['c_update'][$oid.'_prev'] = $peer_afi[$oid];
|
||||
if ($bgpPeerFsmEstablishedTime) {
|
||||
if (!(is_array($config['alerts']['bgp']['whitelist']) && !in_array($peer['bgpPeerRemoteAs'], $config['alerts']['bgp']['whitelist'])) && ($bgpPeerFsmEstablishedTime < $peer['bgpPeerFsmEstablishedTime'] || $bgpPeerState != $peer['bgpPeerState'])) {
|
||||
if ($peer['bgpPeerState'] == $bgpPeerState) {
|
||||
log_event('BGP Session Flap: '.$peer['bgpPeerIdentifier'].' (AS'.$peer['bgpPeerRemoteAs'].')', $device, 'bgpPeer', $bgpPeer_id);
|
||||
}
|
||||
else if ($bgpPeerState == 'established') {
|
||||
log_event('BGP Session Up: '.$peer['bgpPeerIdentifier'].' (AS'.$peer['bgpPeerRemoteAs'].')', $device, 'bgpPeer', $bgpPeer_id);
|
||||
}
|
||||
else if ($peer['bgpPeerState'] == 'established') {
|
||||
log_event('BGP Session Down: '.$peer['bgpPeerIdentifier'].' (AS'.$peer['bgpPeerRemoteAs'].')', $device, 'bgpPeer', $bgpPeer_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dbUpdate($peer['c_update'], 'bgpPeers_cbgp', '`device_id` = ? AND bgpPeerIdentifier = ? AND afi = ? AND safi = ?', array($device['device_id'], $peer['bgpPeerIdentifier'], $afi, $safi));
|
||||
$peerrrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('bgp-'.$peer['bgpPeerIdentifier'].'.rrd');
|
||||
if (!is_file($peerrrd)) {
|
||||
$create_rrd = 'DS:bgpPeerOutUpdates:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerInUpdates:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerOutTotal:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerInTotal:COUNTER:600:U:100000000000
|
||||
DS:bgpPeerEstablished:GAUGE:600:0:U '.$config['rrd_rra'];
|
||||
|
||||
$cbgp_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('cbgp-'.$peer['bgpPeerIdentifier'].".$afi.$safi.rrd");
|
||||
if (!is_file($cbgp_rrd)) {
|
||||
$rrd_create = 'DS:AcceptedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:DeniedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:AdvertisedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:SuppressedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:WithdrawnPrefixes:GAUGE:600:U:100000000000 '.$config['rrd_rra'];
|
||||
rrdtool_create($cbgp_rrd, $rrd_create);
|
||||
}
|
||||
rrdtool_create($peerrrd, $create_rrd);
|
||||
}
|
||||
|
||||
$fields = array(
|
||||
'AcceptedPrefixes' => $cbgpPeerAcceptedPrefixes,
|
||||
'DeniedPrefixes' => $cbgpPeerDeniedPrefixes,
|
||||
'AdvertisedPrefixes' => $cbgpPeerAdvertisedPrefixes,
|
||||
'SuppressedPrefixes' => $cbgpPeerSuppressedPrefixes,
|
||||
'WithdrawnPrefixes' => $cbgpPeerWithdrawnPrefixes,
|
||||
);
|
||||
rrdtool_update("$cbgp_rrd", $fields);
|
||||
$fields = array(
|
||||
'bgpPeerOutUpdates' => $bgpPeerOutUpdates,
|
||||
'bgpPeerInUpdates' => $bgpPeerInUpdates,
|
||||
'bgpPeerOutTotal' => $bgpPeerOutTotalMessages,
|
||||
'bgpPeerInTotal' => $bgpPeerInTotalMessages,
|
||||
'bgpPeerEstablished' => $bgpPeerFsmEstablishedTime,
|
||||
);
|
||||
rrdtool_update("$peerrrd", $fields);
|
||||
|
||||
$tags = array('bgpPeerIdentifier' => $peer['bgpPeerIdentifier'], 'afi' => $afi, 'safi' => $safi);
|
||||
influx_update($device,'cbgp',$tags,$fields);
|
||||
$tags = array('bgpPeerIdentifier' => $peer['bgpPeerIdentifier']);
|
||||
influx_update($device,'bgp',$tags,$fields);
|
||||
|
||||
} //end foreach
|
||||
} //end if
|
||||
echo "\n";
|
||||
unset($device['context_name']);
|
||||
} //end foreach
|
||||
$peer['update']['bgpPeerState'] = $bgpPeerState;
|
||||
$peer['update']['bgpPeerAdminStatus'] = $bgpPeerAdminStatus;
|
||||
$peer['update']['bgpPeerFsmEstablishedTime'] = $bgpPeerFsmEstablishedTime;
|
||||
$peer['update']['bgpPeerInUpdates'] = $bgpPeerInUpdates;
|
||||
$peer['update']['bgpLocalAddr'] = $bgpLocalAddr;
|
||||
$peer['update']['bgpPeerOutUpdates'] = $bgpPeerOutUpdates;
|
||||
|
||||
dbUpdate($peer['update'], 'bgpPeers', '`device_id` = ? AND `bgpPeerIdentifier` = ?', array($device['device_id'], $peer['bgpPeerIdentifier']));
|
||||
|
||||
if ($device['os_group'] == 'cisco' || $device['os'] == 'junos') {
|
||||
// Poll each AFI/SAFI for this peer (using CISCO-BGP4-MIB or BGP4-V2-JUNIPER MIB)
|
||||
$peer_afis = dbFetchRows('SELECT * FROM bgpPeers_cbgp WHERE `device_id` = ? AND bgpPeerIdentifier = ?', array($device['device_id'], $peer['bgpPeerIdentifier']));
|
||||
foreach ($peer_afis as $peer_afi) {
|
||||
$afi = $peer_afi['afi'];
|
||||
$safi = $peer_afi['safi'];
|
||||
d_echo("$afi $safi\n");
|
||||
|
||||
if ($device['os_group'] == 'cisco') {
|
||||
$bgp_peer_ident = ipv62snmp($peer['bgpPeerIdentifier']);
|
||||
if (strstr($peer['bgpPeerIdentifier'], ':')) {
|
||||
$ip_type = 2;
|
||||
$ip_len = 16;
|
||||
$ip_ver = 'ipv6';
|
||||
}
|
||||
else {
|
||||
$ip_type = 1;
|
||||
$ip_len = 4;
|
||||
$ip_ver = 'ipv4';
|
||||
}
|
||||
|
||||
$ip_cast = 1;
|
||||
if ($peer_afi['safi'] == 'multicast') {
|
||||
$ip_cast = 2;
|
||||
}
|
||||
else if ($peer_afi['safi'] == 'unicastAndMulticast') {
|
||||
$ip_cast = 3;
|
||||
}
|
||||
else if ($peer_afi['safi'] == 'vpn') {
|
||||
$ip_cast = 128;
|
||||
}
|
||||
|
||||
$check = snmp_get($device, 'cbgpPeer2AcceptedPrefixes.'.$ip_type.'.'.$ip_len.'.'.$bgp_peer_ident.'.'.$ip_type.'.'.$ip_cast, '', 'CISCO-BGP4-MIB', $config['mibdir']);
|
||||
|
||||
if (!empty($check)) {
|
||||
$cgp_peer_identifier = $ip_type.'.'.$ip_len.'.'.$bgp_peer_ident.'.'.$ip_type.'.'.$ip_cast;
|
||||
$cbgp_data_tmp = snmp_get_multi(
|
||||
$device,
|
||||
' cbgpPeer2AcceptedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2DeniedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2PrefixAdminLimit.'.$cgp_peer_identifier.' cbgpPeer2PrefixThreshold.'.$cgp_peer_identifier.' cbgpPeer2PrefixClearThreshold.'.$cgp_peer_identifier.' cbgpPeer2AdvertisedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2SuppressedPrefixes.'.$cgp_peer_identifier.' cbgpPeer2WithdrawnPrefixes.'.$cgp_peer_identifier,
|
||||
'-OQUs',
|
||||
'CISCO-BGP4-MIB',
|
||||
$config['mibdir']
|
||||
);
|
||||
$ident = "$ip_ver.\"".$peer['bgpPeerIdentifier'].'"'.'.'.$ip_type.'.'.$ip_cast;
|
||||
unset($cbgp_data);
|
||||
$temp_keys = array_keys($cbgp_data_tmp);
|
||||
unset($temp_data);
|
||||
$temp_data['cbgpPeer2AcceptedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2AcceptedPrefixes'];
|
||||
$temp_data['cbgpPeer2DeniedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2DeniedPrefixes'];
|
||||
$temp_data['cbgpPeer2PrefixAdminLimit'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2PrefixAdminLimit'];
|
||||
$temp_data['cbgpPeer2PrefixThreshold'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2PrefixThreshold'];
|
||||
$temp_data['cbgpPeer2PrefixClearThreshold'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2PrefixClearThreshold'];
|
||||
$temp_data['cbgpPeer2AdvertisedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2AdvertisedPrefixes'];
|
||||
$temp_data['cbgpPeer2SuppressedPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2SuppressedPrefixes'];
|
||||
$temp_data['cbgpPeer2WithdrawnPrefixes'] = $cbgp_data_tmp[$temp_keys[0]]['cbgpPeer2WithdrawnPrefixes'];
|
||||
foreach ($temp_data as $k => $v) {
|
||||
$cbgp_data .= "$v\n";
|
||||
}
|
||||
|
||||
d_echo("$cbgp_data\n");
|
||||
}
|
||||
else {
|
||||
// FIXME - move to function
|
||||
$oids = " cbgpPeerAcceptedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerDeniedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerPrefixAdminLimit." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerPrefixThreshold." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerPrefixClearThreshold." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerAdvertisedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerSuppressedPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
$oids .= " cbgpPeerWithdrawnPrefixes." . $peer['bgpPeerIdentifier'] . ".$afi.$safi";
|
||||
|
||||
d_echo("$oids\n");
|
||||
|
||||
$cbgp_data= snmp_get_multi($device,$oids,'-OUQs ','CISCO-BGP4-MIB');
|
||||
$cbgp_data= array_pop($cbgp_data);
|
||||
d_echo("$cbgp_data\n");
|
||||
}//end if
|
||||
$cbgpPeerAcceptedPrefixes= !empty($cbgp_data['cbgpPeerAcceptedPrefixes'])?$cbgp_data['cbgpPeerAcceptedPrefixes']:'';
|
||||
$cbgpPeerDeniedPrefixes= !empty($cbgp_data['cbgpPeerDeniedPrefixes'])?$cbgp_data['cbgpPeerDeniedPrefixes']:'';
|
||||
$cbgpPeerPrefixAdminLimit= !empty($cbgp_data['cbgpPeerPrefixAdminLimit'])?$cbgp_data['cbgpPeerPrefixAdminLimit']:'';
|
||||
$cbgpPeerPrefixThreshold= !empty($cbgp_data['cbgpPeerPrefixThreshold'])?$cbgp_data['cbgpPeerPrefixThreshold']:'';
|
||||
$cbgpPeerPrefixClearThreshold= !empty($cbgp_data['cbgpPeerPrefixClearThreshold'])?$cbgp_data['cbgpPeerPrefixClearThreshold']:'';
|
||||
$cbgpPeerAdvertisedPrefixes= !empty($cbgp_data['cbgpPeerAdvertisedPrefixes'])?$cbgp_data['cbgpPeerAdvertisedPrefixes']:'';
|
||||
$cbgpPeerSuppressedPrefixes= !empty($cbgp_data['cbgpPeerSuppressedPrefixes'])?$cbgp_data['cbgpPeerSuppressedPrefixes']:'';
|
||||
$cbgpPeerWithdrawnPrefixes= !empty($cbgp_data['cbgpPeerWithdrawnPrefixes'])?$cbgp_data['cbgpPeerWithdrawnPrefixes']:'';
|
||||
unset($cbgp_data);
|
||||
}//end if
|
||||
|
||||
// FIXME THESE FIELDS DO NOT EXIST IN THE DATABASE!
|
||||
$update = 'UPDATE bgpPeers_cbgp SET';
|
||||
$peer['c_update']['AcceptedPrefixes'] = $cbgpPeerAcceptedPrefixes;
|
||||
$peer['c_update']['DeniedPrefixes'] = $cbgpPeerDeniedPrefixes;
|
||||
$peer['c_update']['PrefixAdminLimit'] = $cbgpPeerAdminLimit;
|
||||
$peer['c_update']['PrefixThreshold'] = $cbgpPeerPrefixThreshold;
|
||||
$peer['c_update']['PrefixClearThreshold'] = $cbgpPeerPrefixClearThreshold;
|
||||
$peer['c_update']['AdvertisedPrefixes'] = $cbgpPeerAdvertisedPrefixes;
|
||||
$peer['c_update']['SuppressedPrefixes'] = $cbgpPeerSuppressedPrefixes;
|
||||
$peer['c_update']['WithdrawnPrefixes'] = $cbgpPeerWithdrawnPrefixes;
|
||||
|
||||
|
||||
$oids = array(
|
||||
'AcceptedPrefixes',
|
||||
'DeniedPrefixes',
|
||||
'AdvertisedPrefixes',
|
||||
'SuppressedPrefixes',
|
||||
'WithdrawnPrefixes',
|
||||
);
|
||||
|
||||
foreach ($oids as $oid) {
|
||||
$peer['c_update'][$oid.'_delta'] = $peer['c_update'][$oid] - $peer_afi[$oid];
|
||||
$peer['c_update'][$oid.'_prev'] = $peer_afi[$oid];
|
||||
}
|
||||
|
||||
dbUpdate($peer['c_update'], 'bgpPeers_cbgp', '`device_id` = ? AND bgpPeerIdentifier = ? AND afi = ? AND safi = ?', array($device['device_id'], $peer['bgpPeerIdentifier'], $afi, $safi));
|
||||
|
||||
$cbgp_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('cbgp-'.$peer['bgpPeerIdentifier'].".$afi.$safi.rrd");
|
||||
if (!is_file($cbgp_rrd)) {
|
||||
$rrd_create = 'DS:AcceptedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:DeniedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:AdvertisedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:SuppressedPrefixes:GAUGE:600:U:100000000000
|
||||
DS:WithdrawnPrefixes:GAUGE:600:U:100000000000 '.$config['rrd_rra'];
|
||||
rrdtool_create($cbgp_rrd, $rrd_create);
|
||||
}
|
||||
|
||||
$fields = array(
|
||||
'AcceptedPrefixes' => $cbgpPeerAcceptedPrefixes,
|
||||
'DeniedPrefixes' => $cbgpPeerDeniedPrefixes,
|
||||
'AdvertisedPrefixes' => $cbgpPeerAdvertisedPrefixes,
|
||||
'SuppressedPrefixes' => $cbgpPeerSuppressedPrefixes,
|
||||
'WithdrawnPrefixes' => $cbgpPeerWithdrawnPrefixes,
|
||||
);
|
||||
rrdtool_update("$cbgp_rrd", $fields);
|
||||
|
||||
$tags = array('bgpPeerIdentifier' => $peer['bgpPeerIdentifier'], 'afi' => $afi, 'safi' => $safi);
|
||||
influx_update($device,'cbgp',$tags,$fields);
|
||||
|
||||
} //end foreach
|
||||
} //end if
|
||||
echo "\n";
|
||||
} //end foreach
|
||||
} //end if
|
||||
} //end if
|
||||
|
206
includes/polling/cisco-otv.inc.php
Normal file
206
includes/polling/cisco-otv.inc.php
Normal file
@@ -0,0 +1,206 @@
|
||||
<?php
|
||||
/*
|
||||
* LibreNMS module to capture Cisco Class-Based QoS Details
|
||||
*
|
||||
* Copyright (c) 2015 Aaron Daniels <aaron@daniels.id.au>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version. Please see LICENSE.txt at the top level of
|
||||
* the source code distribution for details.
|
||||
*/
|
||||
|
||||
if ($device['os_group'] == "cisco") {
|
||||
|
||||
// Define some error messages
|
||||
$error_vpn = array();
|
||||
$error_vpn[0] = "Other";
|
||||
$error_vpn[1] = "Configuration changed";
|
||||
$error_vpn[2] = "Control Group information is unavailable";
|
||||
$error_vpn[3] = "Data Group range information is unavailable";
|
||||
$error_vpn[4] = "Join or Source interface information is unavailable";
|
||||
$error_vpn[5] = "VPN name is unavailable";
|
||||
$error_vpn[6] = "IP address is missing for Join Interface";
|
||||
$error_vpn[7] = "Join Interface is down";
|
||||
$error_vpn[8] = "Overlay is administratively shutdown";
|
||||
$error_vpn[9] = "Overlay is in delete hold down phase";
|
||||
$error_vpn[10] = "VPN is reinitializing";
|
||||
$error_vpn[11] = "Site ID information is unavailable";
|
||||
$error_vpn[12] = "Site ID mismatch has occurred";
|
||||
$error_vpn[13] = "IP address is missing for Source Interface";
|
||||
$error_vpn[14] = "Source interface is down";
|
||||
$error_vpn[15] = "Changing site identifier";
|
||||
$error_vpn[16] = "Changing control group";
|
||||
$error_vpn[17] = "Device ID information is unavailable";
|
||||
$error_vpn[18] = "Changing device ID";
|
||||
$error_vpn[19] = "Cleanup in progress";
|
||||
|
||||
$error_aed = array();
|
||||
$error_aed[0] = "Other";
|
||||
$error_aed[1] = "Overlay is Down";
|
||||
$error_aed[2] = "Site ID is not configured";
|
||||
$error_aed[3] = "Site ID mismatch";
|
||||
$error_aed[4] = "Version mismatch";
|
||||
$error_aed[5] = "Site VLAN is Down";
|
||||
$error_aed[6] = "No extended VLAN is operationally up";
|
||||
$error_aed[7] = "No Overlay Adjacency is up";
|
||||
$error_aed[8] = "LSPDB sync incomplete";
|
||||
$error_aed[9] = "Overlay state down event in progress";
|
||||
$error_aed[10] = "ISIS control group sync pending";
|
||||
|
||||
$error_overlay = array();
|
||||
$error_overlay[1] = "active";
|
||||
$error_overlay[2] = "notInService";
|
||||
$error_overlay[3] = "notReady";
|
||||
$error_overlay[4] = "createAndGo";
|
||||
$error_overlay[5] = "createAndWait";
|
||||
$error_overlay[6] = "destroy";
|
||||
|
||||
$module = 'Cisco-OTV';
|
||||
|
||||
require_once 'includes/component.php';
|
||||
$component = new component();
|
||||
$options['filter']['type'] = array('=',$module);
|
||||
$options['filter']['disabled'] = array('=',0);
|
||||
$components = $component->getComponents($device['device_id'],$options);
|
||||
|
||||
// We only care about our device id.
|
||||
$components = $components[$device['device_id']];
|
||||
|
||||
// Only collect SNMP data if we have enabled components
|
||||
if (count($components > 0)) {
|
||||
// Let's gather the stats..
|
||||
$tblOverlayEntry = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.2.1.1');
|
||||
$tblAdjacencyDatabaseEntry = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.3.1.1', 0);
|
||||
$tblRouteNextHopAddr = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.5.1.1.8', 0);
|
||||
$tblVlanEdgeDevIsAed = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.2.2.1.6', 2);
|
||||
|
||||
// Let's create an array of each remote OTV endpoint and the count of MAC addresses that are reachable via.
|
||||
$count_mac = array();
|
||||
foreach ($tblRouteNextHopAddr as $k => $v) {
|
||||
$count_mac[$v]++;
|
||||
}
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nMAC Addresses: ".print_r($count_mac,TRUE));
|
||||
|
||||
// Loop through the components and extract the data.
|
||||
foreach ($components as $key => &$array) {
|
||||
|
||||
if ($array['otvtype'] == 'overlay') {
|
||||
// Let's check the various status' of the overlay
|
||||
$message = false;
|
||||
$vpn_state = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.3'][$array['index']];
|
||||
if ($vpn_state != 2) {
|
||||
$message .= "VPN Down: ".$error_vpn[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.4'][$array['index']]];
|
||||
}
|
||||
$aed_state = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.13'][$array['index']];
|
||||
if ($aed_state == 2) {
|
||||
$message .= "AED Down: ".$error_aed[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.14'][$array['index']]];
|
||||
}
|
||||
$overlay_state = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.23'][$array['index']];
|
||||
if ($overlay_state == 2) {
|
||||
$message .= "Overlay Down: ".$error_overlay[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.24'][$array['index']]];
|
||||
}
|
||||
|
||||
// If we have set a message, we have an error, activate alert.
|
||||
if ($message !== false) {
|
||||
$array['error'] = $message;
|
||||
$array['status'] = 0;
|
||||
}
|
||||
else {
|
||||
$array['error'] = "";
|
||||
$array['status'] = 1;
|
||||
}
|
||||
|
||||
// Time to graph the count of the active VLAN's on this overlay.
|
||||
$count_vlan = 0;
|
||||
foreach ($tblVlanEdgeDevIsAed['1.3.6.1.4.1.9.9.810.1.2.2.1.6'][$array['index']] as $v) {
|
||||
if ($v == 1) {
|
||||
$count_vlan++;
|
||||
}
|
||||
}
|
||||
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nOverlay Component: ".$key."\n");
|
||||
d_echo(" Label: ".$array['label']."\n");
|
||||
d_echo(" Index: ".$array['index']."\n");
|
||||
d_echo(" Status: ".$array['status']."\n");
|
||||
d_echo(" Message: ".$array['error']."\n");
|
||||
d_echo(" VLAN Count: ".$count_vlan."\n");
|
||||
|
||||
$filename = "cisco-otv-".$array['label']."-vlan.rrd";
|
||||
$rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename ($filename);
|
||||
|
||||
if (!file_exists ($rrd_filename)) {
|
||||
rrdtool_create ($rrd_filename, " DS:count:GAUGE:600:0:U" . $config['rrd_rra']);
|
||||
}
|
||||
$rrd['count'] = $count_vlan;
|
||||
|
||||
// Update RRD
|
||||
rrdtool_update ($rrd_filename, $rrd);
|
||||
|
||||
}
|
||||
elseif ($array['otvtype'] == 'adjacency') {
|
||||
$array['uptime'] = $tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.6.'.$array['index'].'.1.4.'.$array['endpoint']];
|
||||
$message = false;
|
||||
if ($tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.5.'.$array['index'].'.1.4.'.$array['endpoint']] != 1) {
|
||||
$message .= "Adjacency is Down\n";
|
||||
}
|
||||
if ($tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.6.'.$array['index'].'.1.4.'.$array['endpoint']] < $array['uptime']) {
|
||||
$message .= "Adjacency has been reset\n";
|
||||
}
|
||||
|
||||
// If we have set a message, we have an error, activate alert.
|
||||
if ($message !== false) {
|
||||
$array['error'] = $message;
|
||||
$array['status'] = 0;
|
||||
}
|
||||
else {
|
||||
$array['error'] = "";
|
||||
$array['status'] = 1;
|
||||
}
|
||||
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nAdjacency Component: ".$key."\n");
|
||||
d_echo(" Label: ".$array['label']."\n");
|
||||
d_echo(" Index: ".$array['index']."\n");
|
||||
d_echo(" Status: ".$array['status']."\n");
|
||||
d_echo(" Message: ".$array['error']."\n");
|
||||
}
|
||||
elseif ($array['otvtype'] == 'endpoint') {
|
||||
if (isset($count_mac[$array['endpoint']])) {
|
||||
$rrd['count'] = $count_mac[$array['endpoint']];
|
||||
}
|
||||
else {
|
||||
$rrd['count'] = "0";
|
||||
}
|
||||
|
||||
// Let's log some debugging
|
||||
d_echo("\n\nEndpoint Component: ".$key."\n");
|
||||
d_echo(" Label: ".$array['label']."\n");
|
||||
d_echo(" MAC Count: ".$rrd['count']."\n");
|
||||
|
||||
$filename = "cisco-otv-".$array['endpoint']."-mac.rrd";
|
||||
$rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename ($filename);
|
||||
|
||||
if (!file_exists ($rrd_filename)) {
|
||||
rrdtool_create ($rrd_filename, " DS:count:GAUGE:600:0:U" . $config['rrd_rra']);
|
||||
}
|
||||
|
||||
// Update RRD
|
||||
rrdtool_update ($rrd_filename, $rrd);
|
||||
|
||||
} // End If
|
||||
|
||||
} // End foreach components
|
||||
|
||||
// Write the Components back to the DB.
|
||||
$component->setComponentPrefs($device['device_id'],$components);
|
||||
|
||||
echo $module." ";
|
||||
} // end if count components
|
||||
|
||||
// Clean-up after yourself!
|
||||
unset($components, $component, $module);
|
||||
}
|
@@ -203,7 +203,6 @@ function poll_device($device, $options) {
|
||||
$poll_separator = ', ';
|
||||
|
||||
dbUpdate(array('status' => $status, 'status_reason' => $response['status_reason']), 'devices', 'device_id=?', array($device['device_id']));
|
||||
dbInsert(array('importance' => '0', 'device_id' => $device['device_id'], 'message' => 'Device is '.($status == '1' ? 'up' : 'down')), 'alerts');
|
||||
|
||||
log_event('Device status changed to '.($status == '1' ? 'Up' : 'Down'), $device, ($status == '1' ? 'up' : 'down'));
|
||||
}
|
||||
|
Reference in New Issue
Block a user