discovery/ipv6: use snmp_xxx() functions and fix some bugs, patch by Corentin Chary

git-svn-id: http://www.observium.org/svn/observer/trunk@1799 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
Tom Laermans
2011-03-08 16:24:13 +00:00
parent ea05d08016
commit 802573cfd3

View File

@@ -2,19 +2,24 @@
echo("IPv6 Addresses : ");
$cmd = $config['snmpwalk']. " -M " . $config['mibdir'] ." -m IP-MIB -".$device['snmpver']." -Ln -c ".$device['community']." ".$device['hostname'].":".$device['port'];
$cmd .= " ipAddressIfIndex.ipv6 -Osq | grep -v No";
$oids = trim(trim(shell_exec($cmd)));
$oids = str_replace("ipAddressIfIndex.ipv6.", "", $oids); $oids = str_replace("\"", "", $oids); $oids = trim($oids);
foreach(explode("\n", $oids) as $data) {
if($data) {
$oids = snmp_walk($device, "ipAddressIfIndex.ipv6", "-Ln -Osq", "IP-MIB");
$oids = str_replace("ipAddressIfIndex.ipv6.", "", $oids);
$oids = str_replace("\"", "", $oids);
$oids = str_replace("IP-MIB::", "", $oids);
$oids = trim($oids);
foreach(explode("\n", $oids) as $data)
{
if($data)
{
$data = trim($data);
list($ipv6addr,$ifIndex) = explode(" ", $data);
$oid = "";
$sep = ''; $adsep = '';
unset($ipv6_address);
$do = '0';
foreach(explode(":", $ipv6addr) as $part) {
foreach(explode(":", $ipv6addr) as $part)
{
$n = hexdec($part);
$oid = "$oid" . "$sep" . "$n";
$sep = ".";
@@ -22,48 +27,55 @@ echo("IPv6 Addresses : ");
$do++;
if($do == 2) { $adsep = ":"; $do = '0'; } else { $adsep = "";}
}
$ipv6_prefixlen = trim(shell_exec($config['snmpget']. " -M " . $config['mibdir'] ." -m IP-MIB -".$device['snmpver']." -c ".$device['community']." ".$device['hostname'].":".$device['port']." .1.3.6.1.2.1.4.34.1.5.2.16.$oid | sed 's/.*\.//'"));
$ipv6_origin = trim(shell_exec($config['snmpget']. " -M " . $config['mibdir'] ." -m IP-MIB -Ovq -".$device['snmpver']." -c ".$device['community']." ".$device['hostname'].":".$device['port']." .1.3.6.1.2.1.4.34.1.6.2.16.$oid"));
$ipv6_prefixlen = snmp_get($device, ".1.3.6.1.2.1.4.34.1.5.2.16.$oid", "", "IP-MIB");
$ipv6_prefixlen = explode(".", $ipv6_prefixlen);
$ipv6_prefixlen = str_replace("\"", "", end($ipv6_prefixlen));
$ipv6_origin = snmp_get($device, ".1.3.6.1.2.1.4.34.1.6.2.16.$oid", "-Ovq", "IP-MIB");
discover_process_ipv6($ifIndex,$ipv6_address,$ipv6_prefixlen,$ipv6_origin);
} # if $data
} # foreach
} // if $data
} // foreach
if (!$oids)
{
$cmd = $config['snmpwalk']. " -M " . $config['mibdir'] ." -m IPV6-MIB -".$device['snmpver']." -Ln -c ".$device['community']." ".$device['hostname'].":".$device['port'];
$cmd .= " ipv6AddrPfxLength -Osq -OnU| grep -v No";
$oids = trim(trim(shell_exec($cmd)));
$oids = str_replace(".1.3.6.1.2.1.55.1.8.1.2.", "", $oids); $oids = str_replace("\"", "", $oids); $oids = trim($oids);
foreach(explode("\n", $oids) as $data) {
if($data) {
$data = trim($data);
list($if_ipv6addr,$ipv6_prefixlen) = explode(" ", $data);
list($ifIndex,$ipv6addr) = split("\\.",$if_ipv6addr,2);
$ipv6_address = snmp2ipv6($ipv6addr);
$oids = snmp_walk($device, "ipv6AddrPfxLength", "-Ln -Osq -OnU", "IPV6-MIB");
$oids = str_replace(".1.3.6.1.2.1.55.1.8.1.2.", "", $oids);
$oids = str_replace("\"", "", $oids); $oids = trim($oids);
$ipv6_origin = trim(shell_exec($config['snmpget']. " -M " . $config['mibdir'] ." -m IPV6-MIB -Ovq -".$device['snmpver']." -c ".$device['community']." ".$device['hostname'].":".$device['port']." IPV6-MIB::ipv6AddrType.$if_ipv6addr"));
discover_process_ipv6($ifIndex,$ipv6_address,$ipv6_prefixlen,$ipv6_origin);
} # if $data
} # foreach
} # if $oids
foreach(explode("\n", $oids) as $data)
{
if($data)
{
$data = trim($data);
list($if_ipv6addr,$ipv6_prefixlen) = explode(" ", $data);
list($ifIndex,$ipv6addr) = split("\\.",$if_ipv6addr,2);
$ipv6_address = snmp2ipv6($ipv6addr);
$ipv6_origin = snmp_get($device, "IPV6-MIB::ipv6AddrType.$if_ipv6addr", "-Ovq", "IPV6-MIB");
discover_process_ipv6($ifIndex,$ipv6_address,$ipv6_prefixlen,$ipv6_origin);
} // if $data
} // foreach
} // if $oids
$sql = "SELECT * FROM ipv6_addresses AS A, ports AS I WHERE I.device_id = '".$device['device_id']."' AND A.interface_id = I.interface_id";
$data = mysql_query($sql);
while($row = mysql_fetch_array($data)) {
while($row = mysql_fetch_array($data))
{
$full_address = $row['ipv6_address'] . "/" . $row['ipv6_prefixlen'];
$interface_id = $row['interface_id'];
$valid = $full_address . "-" . $interface_id;
if(!$valid_v6[$valid]) {
if(!$valid_v6[$valid])
{
echo("-");
$query = @mysql_query("DELETE FROM `ipv6_addresses` WHERE `ipv6_address_id` = '".$row['ipv6_address_id']."'");
if(!mysql_result(mysql_query("SELECT count(*) FROM ipv6_addresses WHERE ipv6_network_id = '".$row['ipv6_network_id']."'"),0)) {
if(!mysql_result(mysql_query("SELECT count(*) FROM ipv6_addresses WHERE ipv6_network_id = '".$row['ipv6_network_id']."'"),0))
{
$query = @mysql_query("DELETE FROM `ipv6_networks` WHERE `ipv6_network_id` = '".$row['ipv6_network_id']."'");
}
}
}
unset($valid_v6);
?>
?>