From c9793a9b40fd0694de0a6f634faaabb34ab30d75 Mon Sep 17 00:00:00 2001 From: Tom Laermans Date: Sat, 9 Jan 2010 23:28:06 +0000 Subject: [PATCH] fixed bgp consolidation code git-svn-id: http://www.observium.org/svn/observer/trunk@651 61d68cd4-352d-0410-923a-c4978735b2b8 --- includes/discovery/bgp-peers.php | 79 +++++++++++++++++--------------- includes/polling/bgpPeer.inc.php | 2 +- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/includes/discovery/bgp-peers.php b/includes/discovery/bgp-peers.php index 1845e207bf..fdeadcfc44 100755 --- a/includes/discovery/bgp-peers.php +++ b/includes/discovery/bgp-peers.php @@ -60,52 +60,55 @@ ## Process disovered peers -foreach ($peerlist as $peer) +if (isset($peerlist)) { - $astext = get_astext($peer['as']); + foreach ($peerlist as $peer) + { + $astext = get_astext($peer['as']); - if(mysql_result(mysql_query("SELECT COUNT(*) FROM `bgpPeers` WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"),0) < '1') - { - $add = mysql_query("INSERT INTO bgpPeers (`device_id`, `bgpPeerIdentifier`, `bgpPeerRemoteAS`) VALUES ('".$device['device_id']."','".$peer['ip']."','".$peer['as']."')"); - echo("+"); - } else { - $update = mysql_query("UPDATE `bgpPeers` SET bgpPeerRemoteAs = " . $peer['as'] . ", astext = '" . mysql_escape_string($astext) . "' WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"); - echo("."); - } - - ## Get afi/safi and populate cbgp on cisco ios (xe/xr) - if ($device['os'] == "ios") - { - unset($af_list); - $af_cmd = $config['snmpwalk'] . " -CI -m CISCO-BGP4-MIB -OsQ -" . $device['snmpver'] . " -c" . $device['community'] . " " . $device['hostname'].":".$device['port'] . " "; - $af_cmd .= "cbgpPeerAddrFamilyName." . $peer['ip']; - $afs = trim(str_replace("cbgpPeerAddrFamilyName.".$peer['ip'].".", "", `$af_cmd`)); - foreach (explode("\n", $afs) as $af) + if(mysql_result(mysql_query("SELECT COUNT(*) FROM `bgpPeers` WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"),0) < '1') { - list($afisafi, $text) = explode(" = ", $af); - list($afi, $safi) = explode(".", $afisafi); - if($afi && $safi) + $add = mysql_query("INSERT INTO bgpPeers (`device_id`, `bgpPeerIdentifier`, `bgpPeerRemoteAS`) VALUES ('".$device['device_id']."','".$peer['ip']."','".$peer['as']."')"); + echo("+"); + } else { + $update = mysql_query("UPDATE `bgpPeers` SET bgpPeerRemoteAs = " . $peer['as'] . ", astext = '" . mysql_escape_string($astext) . "' WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"); + echo("."); + } + + ## Get afi/safi and populate cbgp on cisco ios (xe/xr) + if ($device['os'] == "ios") + { + unset($af_list); + $af_cmd = $config['snmpwalk'] . " -CI -m CISCO-BGP4-MIB -OsQ -" . $device['snmpver'] . " -c" . $device['community'] . " " . $device['hostname'].":".$device['port'] . " "; + $af_cmd .= "cbgpPeerAddrFamilyName." . $peer['ip']; + $afs = trim(str_replace("cbgpPeerAddrFamilyName.".$peer['ip'].".", "", `$af_cmd`)); + foreach (explode("\n", $afs) as $af) { - $af_list['$afi']['$safi'] = 1; - if(mysql_result(mysql_query("SELECT COUNT(*) FROM `bgpPeers_cbgp` WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."' AND afi = '$afi' AND safi = '$safi'"),0) == 0) + list($afisafi, $text) = explode(" = ", $af); + list($afi, $safi) = explode(".", $afisafi); + if($afi && $safi) { - mysql_query("INSERT INTO `bgpPeers_cbgp` (device_id,bgpPeerIdentifier, afi, safi) VALUES ('".$device['device_id']."','".$peer['ip']."','$afi','$safi')"); + $af_list['$afi']['$safi'] = 1; + if(mysql_result(mysql_query("SELECT COUNT(*) FROM `bgpPeers_cbgp` WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."' AND afi = '$afi' AND safi = '$safi'"),0) == 0) + { + mysql_query("INSERT INTO `bgpPeers_cbgp` (device_id,bgpPeerIdentifier, afi, safi) VALUES ('".$device['device_id']."','".$peer['ip']."','$afi','$safi')"); + } } } - } - $af_query = mysql_query("SELECT * FROM bgpPeers_cbgp WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"); - while ($entry = mysql_fetch_array($af_query)) - { - $afi = $entry['afi']; - $afi = $entry['safi']; - if (!$af_list['$afi']['$safi']) + $af_query = mysql_query("SELECT * FROM bgpPeers_cbgp WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"); + while ($entry = mysql_fetch_array($af_query)) { - mysql_query("DELETE FROM `bgpPeers_cbgp` WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."' AND afi = '$afi' AND safi = '$safi'"); - } - } # AF list - } # if os = ios -} # Foreach + $afi = $entry['afi']; + $afi = $entry['safi']; + if (!$af_list['$afi']['$safi']) + { + mysql_query("DELETE FROM `bgpPeers_cbgp` WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."' AND afi = '$afi' AND safi = '$safi'"); + } + } # AF list + } # if os = ios + } # Foreach +} # isset ## Delete removed peers @@ -127,6 +130,8 @@ while ($entry = mysql_fetch_array($query)) { } } +unset($peerlist); + echo("\n"); ?> diff --git a/includes/polling/bgpPeer.inc.php b/includes/polling/bgpPeer.inc.php index fcc692f14f..5f5f8ba4cb 100755 --- a/includes/polling/bgpPeer.inc.php +++ b/includes/polling/bgpPeer.inc.php @@ -51,7 +51,7 @@ if ($device['os'] == "junos") $peer_cmd .= " jnxBgpM2PeerFsmEstablishedTime.0.ipv6." . $junos_v6[$peer_ip]; $peer_cmd .= " jnxBgpM2PeerInUpdatesElapsedTime.0.ipv6." . $junos_v6[$peer_ip]; $peer_cmd .= " jnxBgpM2PeerLocalAddr.0.ipv6." . $junos_v6[$peer_ip]; - $peer_data = trim(`$peer_cmd`); + $peer_data = trim(`$peer_cmd . '|grep -v "No Such Instance"'`); if ($debug) echo "\n$peer_cmd\n"; list($bgpPeerState, $bgpPeerAdminStatus, $bgpPeerInUpdates, $bgpPeerOutUpdates, $bgpPeerInTotalMessages, $bgpPeerOutTotalMessages, $bgpPeerFsmEstablishedTime, $bgpPeerInUpdateElapsedTime, $bgpLocalAddr) = explode("\n", $peer_data);