2009-09-07 11:07:59 +00:00
< ? php
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-04-24 15:04:45 +00:00
$as_cmd = $config [ 'snmpwalk' ] . " -m BGP4-MIB -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
2009-08-07 11:53:10 +00:00
if ( $bgpLocalAs && ! strstr ( $bgpLocalAs , " " )) {
2008-03-15 17:58:15 +00:00
2009-03-30 11:20:18 +00:00
echo ( " AS $bgpLocalAs \n " );
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-04-24 15:04:45 +00:00
$peers_cmd = $config [ 'snmpwalk' ] . " -m BGP4-MIB -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 ) {
2009-09-03 15:13:53 +00:00
list ( $peer_ip , $peer_as ) = split ( " " , $peer );
if ( $peer && $peer_ip != " 0.0.0.0 " ) {
2008-03-15 17:58:15 +00:00
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
2009-03-30 11:20:18 +00:00
echo ( str_pad ( $peer_ip , 40 ) . " AS $peer_as " );
#echo("$peer_ip AS$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 {
$update = mysql_query ( " UPDATE `bgpPeers` SET astext = ' $astext ' WHERE `device_id` = ' " . $device [ 'device_id' ] . " ' AND bgpPeerIdentifier = ' $peer_ip ' " );
}
2009-03-30 11:20:18 +00:00
## Get afi/safi and populate cbgp on cisco IOS
2009-04-11 19:10:48 +00:00
if ( $device [ 'os' ] == " IOS " || $device [ 'os' ] == " IOS XE " ) {
2009-03-30 11:20:18 +00:00
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 ) {
list ( $afisafi , $text ) = explode ( " = " , $af );
list ( $afi , $safi ) = explode ( " . " , $afisafi );
if ( $afi && $safi ) {
echo ( " ( $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' ]) {
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 IOS
echo ( " \n " );
2008-03-22 23:09:35 +00:00
} # If Peer
} # Foreach
2009-08-07 11:53:10 +00:00
} else {
echo ( " No BGP on host " );
if ( $device [ 'bgpLocalAs' ]) {
mysql_query ( " UPDATE devices SET bgpLocalAs = NULL WHERE device_id = ' " . $device [ 'device_id' ] . " ' " ); echo ( " (Removed ASN) \n " );
} # End if
} # 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' ] . " ' " );
2009-04-13 19:16:22 +00:00
mysql_query ( " DELETE FROM bgpPeers_cbgp WHERE bgpPeer_id = ' " . $entry [ 'bgpPeer_id' ] . " ' " );
2008-03-22 23:09:35 +00:00
echo ( " - " );
2008-03-15 17:58:15 +00:00
}
}
?>