2008-03-15 17:58:15 +00:00
< ?
### Discover BGP peers on Cisco devices
2008-03-22 23:09:35 +00:00
echo ( " BGP Sessions : " );
2008-03-15 17:58:15 +00:00
2009-02-02 16:00:11 +00:00
$as_cmd = $config [ 'snmpwalk' ] . " -CI -Oqvn - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ] . " : " . $device [ 'port' ] . " " ;
2008-03-15 17:58:15 +00:00
$as_cmd .= " .1.3.6.1.2.1.15.2 " ;
2008-03-16 15:17:40 +00:00
$bgpLocalAs = trim ( shell_exec ( $as_cmd ));
2008-03-15 17:58:15 +00:00
if ( $bgpLocalAs ) {
2008-03-22 23:09:35 +00:00
echo ( " AS $bgpLocalAs " );
2008-03-15 17:58:15 +00:00
if ( $bgpLocalAs != $device [ 'bgpLocalAs' ]) { mysql_query ( " UPDATE devices SET bgpLocalAs = ' $bgpLocalAs ' WHERE device_id = ' " . $device [ 'device_id' ] . " ' " ); echo ( " Updated AS \n " ); }
2009-02-02 16:00:11 +00:00
$peers_cmd = $config [ 'snmpwalk' ] . " -CI -Oq - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ] . " : " . $device [ 'port' ] . " " ;
2008-03-15 17:58:15 +00:00
$peers_cmd .= " BGP4-MIB::bgpPeerRemoteAs " ;
$peers = trim ( str_replace ( " BGP4-MIB::bgpPeerRemoteAs. " , " " , `$peers_cmd` ));
foreach ( explode ( " \n " , $peers ) as $peer ) {
if ( $peer ) {
list ( $peer_ip , $peer_as ) = split ( " " , $peer );
2008-03-17 00:23:52 +00:00
$peerlist [] = $device [ 'device_id' ] . " $peer_ip " ;
2008-12-09 13:55:41 +00:00
$astext = trim ( str_replace ( " \" " , " " , shell_exec ( " /usr/bin/dig +short AS $peer_as .asn.cymru.com TXT | cut -d '|' -f 5 | sed s/ \\ \" //g " )));
2008-03-15 17:58:15 +00:00
2008-03-22 23:09:35 +00:00
#echo(str_pad($peer_ip, 32). str_pad($astext, 32) . " $peer_as ");
2008-03-15 17:58:15 +00:00
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 ') " );
2008-03-22 23:09:35 +00:00
echo ( " + " );
2008-03-18 13:35:17 +00:00
} else {
2008-03-22 23:09:35 +00:00
echo ( " . " );
2008-03-18 13:35:17 +00:00
$update = mysql_query ( " UPDATE `bgpPeers` SET astext = ' $astext ' WHERE `device_id` = ' " . $device [ 'device_id' ] . " ' AND bgpPeerIdentifier = ' $peer_ip ' " );
}
2008-03-22 23:09:35 +00:00
} # If Peer
} # Foreach
} else { echo ( " No BGP on host " ); } # End if
2008-03-15 17:58:15 +00:00
2008-03-17 00:23:52 +00:00
## Delete removed peers
2008-03-15 17:58:15 +00:00
2008-03-22 23:09:35 +00:00
$sql = " SELECT * FROM bgpPeers AS B, devices AS D WHERE B.device_id = D.device_id AND D.device_id = ' " . $device [ 'device_id' ] . " ' " ;
2008-03-15 17:58:15 +00:00
$query = mysql_query ( $sql );
2008-03-17 00:23:52 +00:00
while ( $entry = mysql_fetch_array ( $query )) {
2008-03-15 17:58:15 +00:00
unset ( $exists );
$i = 0 ;
2008-03-17 00:23:52 +00:00
while ( $i < count ( $peerlist ) && ! $exists ) {
2008-03-22 23:09:35 +00:00
$checkme = $entry [ 'device_id' ] . " " . $entry [ 'bgpPeerIdentifier' ];
if ( $peerlist [ $i ] == $checkme ) { $exists = 1 ; }
2008-03-15 17:58:15 +00:00
$i ++ ;
}
if ( ! $exists ) {
2008-03-17 00:23:52 +00:00
mysql_query ( " DELETE FROM bgpPeers WHERE bgpPeer_id = ' " . $entry [ 'bgpPeer_id' ] . " ' " );
2008-03-22 23:09:35 +00:00
echo ( " - " );
2008-03-15 17:58:15 +00:00
}
}
?>