2009-04-13 19:16:22 +00:00
< ? php
2015-07-13 20:10:26 +02:00
echo 'IPv4 Addresses : ' ;
2016-01-25 11:17:06 +01:00
if ( key_exists ( 'vrf_lite_cisco' , $device ) && ( count ( $device [ 'vrf_lite_cisco' ]) != 0 ) ){
2016-01-20 15:13:53 +01:00
$vrfs_lite_cisco = $device [ 'vrf_lite_cisco' ];
}
2016-01-25 11:17:06 +01:00
else {
2016-01-20 15:13:53 +01:00
$vrfs_lite_cisco = array ( array ( 'context_name' => null ));
}
foreach ( $vrfs_lite_cisco as $vrf ) {
$device [ 'context_name' ] = $vrf [ 'context_name' ];
2015-07-13 20:10:26 +02:00
2016-01-20 15:13:53 +01:00
$oids = trim ( snmp_walk ( $device , 'ipAdEntIfIndex' , '-Osq' , 'IP-MIB' ));
$oids = str_replace ( 'ipAdEntIfIndex.' , '' , $oids );
foreach ( explode ( " \n " , $oids ) as $data ) {
$data = trim ( $data );
list ( $oid , $ifIndex ) = explode ( ' ' , $data );
$mask = trim ( snmp_get ( $device , " ipAdEntNetMask. $oid " , '-Oqv' , 'IP-MIB' ));
$addr = Net_IPv4 :: parseAddress ( " $oid / $mask " );
$network = $addr -> network . '/' . $addr -> bitmask ;
$cidr = $addr -> bitmask ;
2015-07-13 20:10:26 +02:00
2016-01-20 15:13:53 +01:00
if ( dbFetchCell ( 'SELECT COUNT(*) FROM `ports` WHERE device_id = ? AND `ifIndex` = ?' , array ( $device [ 'device_id' ], $ifIndex )) != '0' && $oid != '0.0.0.0' && $oid != 'ipAdEntIfIndex' ) {
$port_id = dbFetchCell ( 'SELECT `port_id` FROM `ports` WHERE `device_id` = ? AND `ifIndex` = ?' , array ( $device [ 'device_id' ], $ifIndex ));
2015-07-13 20:10:26 +02:00
2016-02-02 12:21:45 +01:00
if ( dbFetchCell ( 'SELECT COUNT(*) FROM `ipv4_networks` WHERE `ipv4_network` = ?' , array ( $network )) < '1' ) {
2016-01-20 15:13:53 +01:00
dbInsert ( array ( 'ipv4_network' => $network , 'context_name' => $device [ 'context_name' ]), 'ipv4_networks' );
// echo("Create Subnet $network\n");
echo 'S' ;
}
2016-02-02 12:21:45 +01:00
else {
//Update Context
dbUpdate ( array ( 'context_name' => $device [ 'context_name' ]), 'ipv4_networks' , '`ipv4_network` = ?' , array ( $network ) );
echo 's' ;
}
2016-01-20 15:13:53 +01:00
2016-02-02 12:21:45 +01:00
$ipv4_network_id = dbFetchCell ( 'SELECT `ipv4_network_id` FROM `ipv4_networks` WHERE `ipv4_network` = ?' , array ( $network ));
2016-01-20 15:13:53 +01:00
2016-02-02 12:21:45 +01:00
if ( dbFetchCell ( 'SELECT COUNT(*) FROM `ipv4_addresses` WHERE `ipv4_address` = ? AND `ipv4_prefixlen` = ? AND `port_id` = ? ' , array ( $oid , $cidr , $port_id )) == '0' ) {
dbInsert ( array ( 'ipv4_address' => $oid , 'ipv4_prefixlen' => $cidr , 'ipv4_network_id' => $ipv4_network_id , 'port_id' => $port_id , 'context_name' => $device [ 'context_name' ]), 'ipv4_addresses' );
2016-01-20 15:13:53 +01:00
// echo("Added $oid/$cidr to $port_id ( $hostname $ifIndex )\n $i_query\n");
echo '+' ;
}
else {
2016-02-02 12:21:45 +01:00
//Update Context
dbUpdate ( array ( 'context_name' => $device [ 'context_name' ]), 'ipv4_addresses' , 'ipv4_address` = ? AND `ipv4_prefixlen` = ? AND `port_id` = ?' , array ( $oid , $cidr , $port_id ) );
2016-01-20 15:13:53 +01:00
echo '.' ;
}
$full_address = " $oid / $cidr | $ifIndex " ;
$valid_v4 [ $full_address ] = 1 ;
}
2015-07-13 20:10:26 +02:00
else {
2016-01-20 15:13:53 +01:00
echo '!' ;
} //end if
} //end foreach
2015-07-13 20:10:26 +02:00
2016-02-02 12:21:45 +01:00
$sql = " SELECT * FROM ipv4_addresses AS A, ports AS I WHERE I.device_id = ' " . $device [ 'device_id' ] . " ' AND A.port_id = I.port_id " ;
2016-01-20 15:13:53 +01:00
foreach ( dbFetchRows ( $sql ) as $row ) {
$full_address = $row [ 'ipv4_address' ] . '/' . $row [ 'ipv4_prefixlen' ] . '|' . $row [ 'ifIndex' ];
if ( ! $valid_v4 [ $full_address ]) {
echo '-' ;
$query = dbDelete ( 'ipv4_addresses' , '`ipv4_address_id` = ?' , array ( $row [ 'ipv4_address_id' ]));
if ( ! dbFetchCell ( 'SELECT COUNT(*) FROM `ipv4_addresses` WHERE `ipv4_network_id` = ?' , array ( $row [ 'ipv4_network_id' ]))) {
$query = dbDelete ( 'ipv4_networks' , '`ipv4_network_id` = ?' , array ( $row [ 'ipv4_network_id' ]));
}
2015-07-13 20:10:26 +02:00
}
2010-12-03 15:56:57 +00:00
}
2009-04-13 19:16:22 +00:00
2016-01-20 15:13:53 +01:00
echo " \n " ;
unset ( $device [ 'context_name' ]);
unset ( $valid_v4 );
}
unset ( $vrfs_c );