2007-04-03 14:10:23 +00:00
#!/usr/bin/php
### Clean up the database removing old IPs and links
2009-09-07 11:07:59 +00:00
< ? php
2010-02-27 14:44:38 +00:00
include ( " includes/defaults.inc.php " );
2007-04-03 14:10:23 +00:00
include ( " config.php " );
include ( " includes/functions.php " );
2010-02-20 17:22:22 +00:00
$query = " SELECT *,A.id as id FROM ipv4_addresses AS A, ports as I, devices as D
2008-11-19 12:12:54 +00:00
WHERE A . interface_id = I . interface_id AND I . device_id = D . device_id AND D . status = '1' " ;
2007-04-03 14:10:23 +00:00
2008-11-19 12:12:54 +00:00
$data = mysql_query ( $query );
while ( $row = mysql_fetch_array ( $data )) {
2008-04-13 16:27:05 +00:00
2009-08-11 16:24:50 +00:00
$mask = trim ( shell_exec ( $config [ 'ipcalc' ] . " " . $row [ 'ipv4_address' ] . " / " . $row [ 'ipv4_prefixlen' ] . " | grep Netmask: | cut -d \" \" -f 4 " ));
$response = trim ( `snmpget -v2c -Osq -c $row[community] $row[hostname]:$row[port] ipAdEntIfIndex.".$row['ipv4_address']." | cut -d " " -f 2` );
$maskcheck = trim ( `snmpget -v2c -Osq -c $row[community] $row[hostname]:$row[port] ipAdEntNetMask.".$row['ipv4_address']." | cut -d " " -f 2` );
2008-11-19 12:12:54 +00:00
if ( $response == $row [ 'ifIndex' ] && $mask == $maskcheck ) {
} else {
2009-08-11 16:24:50 +00:00
mysql_query ( " delete from ipv4_address where id = ' " . $row [ 'ipv4_address_id' ] . " ' " );
echo ( " Deleted " . $row [ 'ipv4_address' ] . " from $row[hostname] \n " );
2008-11-19 12:12:54 +00:00
}
}
2007-04-03 14:10:23 +00:00
2008-04-13 16:27:05 +00:00
$sql = " SELECT * FROM devices WHERE status = '1' " ;
$query = mysql_query ( $sql );
while ( $device = mysql_fetch_array ( $query )) {
echo ( $device [ 'hostname' ] . " \n \n " );
2009-02-02 16:00:11 +00:00
$oids = shell_exec ( " snmpwalk -v2c -c " . $device [ 'community' ] . " " . $device [ 'hostname' ] . " : " . $device [ 'port' ] . " ipAddressIfIndex.ipv6 -Osq " );
2008-04-13 16:27:05 +00:00
$oids = str_replace ( " ipAddressIfIndex.ipv6. " , " " , $oids ); $oids = str_replace ( " \" " , " " , $oids ); $oids = trim ( $oids );
unset ( $valid_ips );
foreach ( explode ( " \n " , $oids ) as $data ) {
$data = trim ( $data );
list ( $ipv6addr , $ifIndex ) = explode ( " " , $data );
$valid_ips [] = $ipv6addr ;
}
2010-02-20 17:22:22 +00:00
$sql = " SELECT * FROM ip6addr AS A, ports AS I, devices as D WHERE A.interface_id = I.interface_id AND I.device_id = ' " . $device [ 'device_id' ] . " ' " ;
2008-04-13 16:27:05 +00:00
$data = mysql_query ( $sql );
while ( $row = mysql_fetch_array ( $data )) {
echo ( $row [ 'addr' ] . " \n " );
unset ( $valid );
foreach ( $valid_ips as $valid_ip ) {
echo ( $row [ 'addr' ] . " = $valid_ip ? \n " );
}
2007-04-03 14:10:23 +00:00
}
}
2008-04-13 16:27:05 +00:00
2010-02-20 17:22:22 +00:00
$query = " SELECT * FROM ports AS I, devices as D
2008-04-10 14:52:51 +00:00
WHERE I . device_id = D . device_id AND D . status = '1' " ;
2007-04-03 14:10:23 +00:00
$data = mysql_query ( $query );
while ( $row = mysql_fetch_array ( $data )) {
2010-01-31 17:30:16 +00:00
$index = $row [ 'ifIndex' ];
2007-04-03 14:10:23 +00:00
$hostname = $row [ 'hostname' ];
2009-02-02 16:00:11 +00:00
$community = $row [ 'community' ];
$port = $row [ 'port' ];
$response = trim ( `snmpget -v2c -Osq -c $community $hostname:$port ifIndex.$index | cut -d " " -f 2` );
2007-04-03 14:10:23 +00:00
if ( $response != $index ) {
2010-02-20 17:22:22 +00:00
mysql_query ( " DELETE from ports where interface_id = ' " . $row [ 'interface_id' ] . " ' " );
2007-04-09 01:58:25 +00:00
mysql_query ( " DELETE from `adjacencies` WHERE `interface_id` = ' " . $row [ 'interface_id' ] . " ' " );
2010-02-15 23:56:30 +00:00
mysql_query ( " DELETE from `links` WHERE `local_interface_id` = ' " . $row [ 'interface_id' ] . " ' " );
mysql_query ( " DELETE from `links` WHERE `remote_interface_id` = ' " . $row [ 'interface_id' ] . " ' " );
2007-04-09 01:58:25 +00:00
mysql_query ( " DELETE from `ipaddr` WHERE `interface_id` = ' " . $row [ 'interface_id' ] . " ' " );
echo ( " Removed interface " . $row [ 'ifDescr' ] . " from " . $row [ 'hostname' ] . " <br /> " );
2007-04-03 14:10:23 +00:00
}
}
2010-02-20 17:22:22 +00:00
echo ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `ports` " ), 0 ) . " ports at start \n " );
$interface_query = mysql_query ( " SELECT interface_id,device_id FROM `ports` " );
2007-04-03 14:10:23 +00:00
while ( $interface = mysql_fetch_array ( $interface_query )) {
2007-04-07 21:15:23 +00:00
$device_id = $interface [ 'device_id' ];
$interface_id = $interface [ 'interface_id' ];
2007-04-09 01:58:25 +00:00
if ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `devices` WHERE `device_id` = ' $device_id ' " ), 0 ) == '0' ) {
2010-02-20 17:22:22 +00:00
mysql_query ( " delete from ports where `interface_id` = ' $interface_id ' " );
2007-04-07 21:15:23 +00:00
echo ( " Deleting if $interface_id \n " );
2007-04-03 14:10:23 +00:00
}
}
2010-02-20 17:22:22 +00:00
echo ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `ports` " ), 0 ) . " ports at end \n " );
2007-04-03 14:10:23 +00:00
2008-04-10 14:52:51 +00:00
echo ( mysql_result ( mysql_query ( " SELECT COUNT(id) FROM `links` " ), 0 ) . " links at start \n " );
2010-02-15 23:56:30 +00:00
$link_query = mysql_query ( " SELECT id,local_interface_id,remote_interface_id FROM `links` " );
2007-04-03 14:10:23 +00:00
while ( $link = mysql_fetch_array ( $link_query )) {
$id = $link [ 'id' ];
2010-02-15 23:56:30 +00:00
$src = $link [ 'local_interface_id' ];
$dst = $link [ 'remote_interface_id' ];
2010-02-20 17:22:22 +00:00
if ( mysql_result ( mysql_query ( " SELECT COUNT(interface_id) FROM `ports` WHERE `interface_id` = ' $src ' " ), 0 ) == '0' || mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `ports` WHERE `interface_id` = ' $dst ' " ), 0 ) == '0' ) {
2007-04-03 14:10:23 +00:00
mysql_query ( " delete from links where `id` = ' $id ' " );
echo ( " Deleting link $id \n " );
}
}
echo ( mysql_result ( mysql_query ( " SELECT COUNT(id) FROM `links` " ), 0 ) . " links at end \n " );
echo ( mysql_result ( mysql_query ( " SELECT COUNT(adj_id) FROM `adjacencies` " ), 0 ) . " adjacencies at start \n " );
2010-02-20 17:22:22 +00:00
$link_query = mysql_query ( " SELECT * FROM `adjacencies` AS A, `ports` AS I, `devices` AS D, networks AS N WHERE I.interface_id = A.interface_id AND D.device_id = I.device_id AND N.id = A.network_id " );
2007-04-03 14:10:23 +00:00
while ( $link = mysql_fetch_array ( $link_query )) {
$id = $link [ 'adj_id' ];
$netid = $link [ 'network_id' ];
$ifid = $link [ 'interface_id' ];
2010-02-20 17:22:22 +00:00
if ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `ports` WHERE `interface_id` = ' $ifid ' " ), 0 ) == '0' || mysql_result ( mysql_query ( " SELECT COUNT(id) FROM `networks` WHERE `id` = ' $netid ' " ), 0 ) == '0' ) {
2007-04-03 18:26:21 +00:00
$remove = 1 ;
echo ( " Removed Interface! \n " );
}
2008-03-23 15:40:58 +00:00
list ( $network , $cidr ) = explode ( " / " , $link [ 'cidr' ]);
2007-04-03 18:12:55 +00:00
2008-03-23 15:40:58 +00:00
$checksql = " SELECT COUNT(*) FROM `ipaddr` WHERE `interface_id` = ' " . $link [ 'interface_id' ] . " ' AND `cidr` = ' $cidr ' AND `network` = ' $network ' " ;
if ( mysql_result ( mysql_query ( $checksql ), 0 ) == 0 ) { $remove = 1 ; }
# echo($link['if'] . " (" . $link['interface_id'] . ") -> " . $link['cidr'] . " \n");
2007-04-03 18:12:55 +00:00
2007-04-03 18:26:21 +00:00
if ( $link [ 'cidr' ] == " " ) { $remove = 1 ; echo ( " Broken CIDR entry! " ); }
if ( $remove ) {
mysql_query ( " delete from adjacencies where `adj_id` = ' $id ' " );
2008-03-23 15:40:58 +00:00
echo ( " Deleting link $id ( " . $link [ 'cidr' ] . " - " . $link [ 'hostname' ] . " - " . $link [ 'ifDescr' ] . " ) \n " );
2007-04-03 14:10:23 +00:00
}
2007-04-03 18:26:21 +00:00
unset ( $remove );
2007-04-03 14:10:23 +00:00
}
echo ( mysql_result ( mysql_query ( " SELECT COUNT(adj_id) FROM `adjacencies` " ), 0 ) . " adjacencies at end \n " );
2007-04-03 18:12:55 +00:00
2007-04-03 14:10:23 +00:00
?>