From dce37e3bef8c940d3e44302c44edcf3bb8edd592 Mon Sep 17 00:00:00 2001 From: Adam Amstrong Date: Sun, 13 Apr 2008 16:27:05 +0000 Subject: [PATCH] better bgp / ipv6 display, remove some pear stuff git-svn-id: http://www.observium.org/svn/observer/trunk@236 61d68cd4-352d-0410-923a-c4978735b2b8 --- cleanup.php | 46 +++-- html/includes/print-interface.inc | 89 ++++++++-- html/pages/bgp.php | 24 +-- includes/functions.php | 44 +++-- includes/ipv6-functions.php | 286 ------------------------------ ipv6.php | 24 ++- poll-device.php | 4 +- 7 files changed, 172 insertions(+), 345 deletions(-) delete mode 100644 includes/ipv6-functions.php diff --git a/cleanup.php b/cleanup.php index 5efa48e7f8..3e1b664f2d 100755 --- a/cleanup.php +++ b/cleanup.php @@ -6,22 +6,46 @@ include("config.php"); include("includes/functions.php"); -$query = "SELECT *,A.id as id FROM ipaddr AS A, interfaces as I, devices as D - WHERE A.interface_id = I.interface_id AND I.device_id = D.device_id AND D.status = '1'"; +#$query = "SELECT *,A.id as id FROM ipaddr AS A, interfaces as I, devices as D +# WHERE A.interface_id = I.interface_id AND I.device_id = D.device_id AND D.status = '1'"; -$data = mysql_query($query); -while($row = mysql_fetch_array($data)) { +#$data = mysql_query($query); +#while($row = mysql_fetch_array($data)) { - $mask = trim(shell_exec($config['ipcalc'] . " ".$row['addr']."/".$row['cidr']." | grep Netmask: | cut -d \" \" -f 4")); - $response = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname] ipAdEntIfIndex.$row[addr] | cut -d " " -f 2`); - $maskcheck = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname] ipAdEntNetMask.$row[addr] | cut -d " " -f 2`); - if($response == $row['ifIndex'] && $mask == $maskcheck) { - } else { - mysql_query("delete from ipaddr where id = '$row[id]'"); - echo("Deleted $row[addr] from $row[hostname]\n"); +# $mask = trim(shell_exec($config['ipcalc'] . " ".$row['addr']."/".$row['cidr']." | grep Netmask: | cut -d \" \" -f 4")); +# $response = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname] ipAdEntIfIndex.$row[addr] | cut -d " " -f 2`); +# $maskcheck = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname] ipAdEntNetMask.$row[addr] | cut -d " " -f 2`); +# if($response == $row['ifIndex'] && $mask == $maskcheck) { +# } else { +# mysql_query("delete from ipaddr where id = '$row[id]'"); +# echo("Deleted $row[addr] from $row[hostname]\n"); +# } +#} + +$sql = "SELECT * FROM devices WHERE status = '1'"; +$query = mysql_query($sql); +while($device = mysql_fetch_array($query)) { + echo($device['hostname'] . " \n\n"); + $oids = shell_exec("snmpwalk -v2c -c ".$device['community']." ".$device['hostname']." ipAddressIfIndex.ipv6 -Osq"); + $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; + } + $sql = "SELECT * FROM ip6addr AS A, interfaces AS I, devices as D WHERE A.interface_id = I.interface_id AND I.device_id = '".$device['device_id']."'"; + $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"); + } } } + $query = "SELECT * FROM interfaces AS I, devices as D WHERE I.device_id = D.device_id AND D.status = '1'"; $data = mysql_query($query); diff --git a/html/includes/print-interface.inc b/html/includes/print-interface.inc index ab23318700..7b7638707a 100644 --- a/html/includes/print-interface.inc +++ b/html/includes/print-interface.inc @@ -39,7 +39,13 @@ while($ip = mysql_fetch_Array($ipdata)) { echo("$break $ip[addr]/$ip[cidr]"); $break = "
"; - } + } + $ip6data = mysql_query("SELECT * FROM `ip6addr` WHERE `interface_id` = '" . $interface['interface_id'] . "'"); + while($ip6 = mysql_fetch_Array($ip6data)) { + echo("$break ".Net_IPv6::compress($ip6[addr])."/$ip6[cidr]"); + $break = "
"; + } + echo(""); echo(""); if($interface['ifOperStatus'] == "up") { @@ -80,9 +86,12 @@ echo(""); if ( strpos($ifDescr, "oopback") === false && !$dographs) { $link_query = mysql_query("select * from links AS L, interfaces AS I, devices AS D WHERE L.src_if = '$if_id' AND L.dst_if = I.interface_id AND I.device_id = D.device_id"); while($link = mysql_fetch_array($link_query)) { - echo("Directly Connected " . generateiflink($link, makeshortif($link['ifDescr'])) . " on " . generatedevicelink($link) . "
"); - $br = "
"; +# echo("Directly Connected " . generateiflink($link, makeshortif($link['ifDescr'])) . " on " . generatedevicelink($link) . "
"); +# $br = "
"; + $int_links[$link['interface_id']] = $link['interface_id']; + $int_links_phys[$link['interface_id']] = 1; } + unset($br); $adj_sql = "SELECT * FROM networks AS N, interfaces AS I, adjacencies AS A "; $adj_sql = $adj_sql . "WHERE I.interface_id = A.interface_id AND A.network_id = N.id "; @@ -92,29 +101,79 @@ echo(""); $network_id = $adjs['network_id']; $newsql = "SELECT * FROM adjacencies AS A, networks as N, interfaces as I, devices as D "; $newsql = $newsql . "WHERE N.id = '$network_id' AND A.network_id = N.id AND I.interface_id = A.interface_id AND D.device_id = I.device_id "; - $newsql = $newsql . "AND D.device_id != '$device[id]' AND I.ifDescr NOT LIKE '%loopback%' GROUP BY D.device_id ORDER BY D.hostname"; + $newsql = $newsql . "AND D.device_id != '".$device['device_id']."' AND I.ifDescr NOT LIKE '%loopback%' GROUP BY D.device_id ORDER BY D.hostname"; $new_query = mysql_query($newsql); while($new = mysql_fetch_array($new_query)) { - if ($new['status'] == '0') { $class = "red"; } else { $class = "blue"; } - if ($new['ignore'] == '1') { - $class = "grey"; - if ($new['status'] == '1') { $class = "green"; } - } + $this_ifid = $new['interface_id']; $this_hostid = $new['device_id']; $this_hostname = $new['hostname']; $this_ifname = fixifName($new['ifDescr']); $wq = mysql_query("select count(*) FROM links WHERE dst_if = '$this_ifid' AND src_if = $if_id;"); - if (@mysql_result($wq, 0) == '0' && $this_hostname != $hostname) { - $graph_url = "graph.php?if=$this_ifid&from=$twoday&to=$now&width=400&height=120&type=bits'"; - echo("$br  Same Subnet" . generateiflink($new, makeshortif($new['ifDescr'])) . " on " . generatedevicelink($new)); - $br = "
"; - } + + $int_links[$this_ifid] = $this_ifid; + $int_links_v4[$this_ifid] = 1; + + +# if (@mysql_result($wq, 0) == '0' && $this_hostname != $hostname) { +# $graph_url = "graph.php?if=$this_ifid&from=$twoday&to=$now&width=400&height=120&type=bits'"; +# echo("$br  Same Subnet" . generateiflink($new, makeshortif($new['ifDescr'])) . " on " . generatedevicelink($new)); +# $br = "
"; +# } } } unset($br); } - + + $sql = "SELECT network_id FROM ip6addr AS A, ip6networks AS N, interfaces AS I + WHERE A.interface_id = I.interface_id + AND A.network = N.cidr + AND I.interface_id = '".$interface['interface_id']."'"; + + $nets_query = mysql_query($sql); + + while($net = mysql_fetch_array($nets_query)) { + $network_id = $net['network_id']; + + $sql = "SELECT I.interface_id FROM ip6addr AS A, ip6networks AS N, interfaces AS I, devices AS D + WHERE A.interface_id = I.interface_id + AND A.network = N.cidr + AND N.network_id = '".$net['network_id']."' AND D.device_id = I.device_id and D.device_id != '".$device['device_id']."'"; + + $new_query = mysql_query($sql); + while($new = mysql_fetch_array($new_query)) { + + echo($new['network_id']); + + $this_ifid = $new['interface_id']; + $this_hostid = $new['device_id']; + $this_hostname = $new['hostname']; + $this_ifname = fixifName($new['ifDescr']); + + $int_links[$this_ifid] = $this_ifid; + $int_links_v6[$this_ifid] = 1; + + } + } + + foreach($int_links as $int_link) { + + $interface = mysql_fetch_array(mysql_query("SELECT * from interfaces AS I, devices AS D WHERE I.device_id = D.device_id and I.interface_id = '".$int_link."'")); + + echo("$br"); + + if($int_links_phys[$int_link]) { echo(" "); } else { + echo(" "); } + + echo("" . generateiflink($interface, makeshortif($interface['ifDescr'])) . " on " . generatedevicelink($interface) ); + + if($int_links_v6[$int_link]) { echo(" v6"); } + if($int_links_v4[$int_link]) { echo(" v4"); } + $br = "
"; + } + + unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br); + echo(""); // If we're showing graphs, generate the graph and print the img tags diff --git a/html/pages/bgp.php b/html/pages/bgp.php index 724eaca27a..ad242ca1f9 100644 --- a/html/pages/bgp.php +++ b/html/pages/bgp.php @@ -4,11 +4,11 @@ $i = "1"; - if($view == "alerted") { + if($_GET['view'] == "alerted") { $where = ""; - } elseif ($view == "external") { + } elseif ($_GET['view'] == "external") { $where = "AND D.bgpLocalAs != B.bgpPeerRemoteAs"; - } elseif ($view == "internal") { + } elseif ($_GET['view'] == "internal") { $where = "AND D.bgpLocalAs = B.bgpPeerRemoteAs"; } @@ -18,20 +18,22 @@ if(!is_integer($i/2)) { $bg_colour = $list_colour_a; } else { $bg_colour = $list_colour_b; } - if($peer['bgpPeerState'] == "established") { $col = "green"; } else { $col = "red"; $bg_colour = "#ffcccc"; } - if($peer['bgpPeerAdminStatus'] == "start") { $admin_col = "green"; } else { $admin_col = "red"; $bg_colour = "#cccccc"; } + if($peer['bgpPeerState'] == "established") { $col = "green"; } else { $col = "red"; $nobg_colour = "#ffcccc"; } + if($peer['bgpPeerAdminStatus'] == "start") { $admin_col = "green"; } else { $admin_col = "gray"; } - if($peer['bgpPeerRemoteAs'] == $device['bgpLocalAs']) { $peer_type = "iBGP"; } else { $peer_type = "eBGP"; } + if($peer['bgpPeerRemoteAs'] == $peer['bgpLocalAs']) { $peer_type = "iBGP"; } else { $peer_type = "eBGP"; + if($peer['bgpPeerRemoteAS'] >= '64512' && $peer['bgpPeerRemoteAS'] =< '65535') { $peer_type = "Priv eBGP"; } + } $peerhost = mysql_fetch_array(mysql_query("SELECT * FROM ipaddr AS A, interfaces AS I, devices AS D WHERE A.addr = '".$peer['bgpPeerIdentifier']."' AND I.interface_id = A.interface_id AND D.device_id = I.device_id")); - if($peerhost) { $peername = generatedevicelink($peerhost); } else { unset($peername); } + if($peerhost) { $peername = generatedevicelink($peerhost, shorthost($peerhost['hostname'])); } else { unset($peername); } echo(" -
$i
- ".generatedevicelink($peer)." - " . $peer['bgpPeerIdentifier'] . "
".$peername." - $peer_type +
$i
+ ".generatedevicelink($peer, shorthost($peer['hostname']))." + " . $peer['bgpPeerIdentifier'] . "
".$peername." + $peer_type AS" . $peer['bgpPeerRemoteAs'] . "
" . $peer['astext'] . " " . $peer['bgpPeerAdminStatus'] . "
" . $peer['bgpPeerState'] . "
" .formatUptime($peer['bgpPeerFsmEstablishedTime']). "
diff --git a/includes/functions.php b/includes/functions.php index 2a9284042d..150e87284a 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -1,18 +1,24 @@ 0) { - $match = ''; - foreach($zeros[0] as $zero) { - if (strlen($zero) > strlen($match)) - $match = $zero; - } - $cip = preg_replace('/' . $match . '/', ':', $cip, 1); - } - $cip = preg_replace('/((^:)|(:$))/', '' ,$cip); - $cip = preg_replace('/((^:)|(:$))/', '::' ,$cip); - } - if('' != $netmask) { - $cip = $cip.'/'.$netmask; - } - return $cip; - } - - function SplitV64($ip) { - $ip = Net_IPv6::removeNetmaskSpec($ip); - $ip = Net_IPv6::Uncompress($ip); - if (strstr($ip, '.')) { - $pos = strrpos($ip, ':'); - $ip{$pos} = '_'; - $ipPart = explode('_', $ip); - return $ipPart; - } else { - return array($ip, ""); - } - } - - function checkIPv6($ip) { - $ip = Net_IPv6::removeNetmaskSpec($ip); - $ipPart = Net_IPv6::SplitV64($ip); - $count = 0; - if (!empty($ipPart[0])) { - $ipv6 =explode(':', $ipPart[0]); - for ($i = 0; $i < count($ipv6); $i++) { - $dec = hexdec($ipv6[$i]); - $hex = strtoupper(preg_replace("/^[0]{1,3}(.*[0-9a-fA-F])$/", "\\1", $ipv6[$i])); - if ($ipv6[$i] >= 0 && $dec <= 65535 && $hex == strtoupper(dechex($dec))) { - $count++; - } - } - if (8 == $count) { - return true; - } elseif (6 == $count and !empty($ipPart[1])) { - $ipv4 = explode('.',$ipPart[1]); - $count = 0; - for ($i = 0; $i < count($ipv4); $i++) { - if ($ipv4[$i] >= 0 && (integer)$ipv4[$i] <= 255 && preg_match("/^\d{1,3}$/", $ipv4[$i])) { - $count++; - } - } - if (4 == $count) { - return true; - } - } else { - return false; - } - - } else { - return false; - } - } - - function _ip2Bin($ip) { - $binstr = ''; - $ip = Net_IPv6::removeNetmaskSpec($ip); - $ip = Net_IPv6::Uncompress($ip); - $parts = explode(':', $ip); - foreach($parts as $v) { - $str = base_convert($v, 16, 2); - $binstr .= str_pad($str, 16, '0', STR_PAD_LEFT); - } - return $binstr; - } - - function _bin2Ip($bin) { - $ip = ""; - if(strlen($bin)<128) { - $bin = str_pad($str, 128, '0', STR_PAD_LEFT); - } - $parts = str_split($bin, "16"); - foreach($parts as $v) { - $str = base_convert($v, 2, 16); - $ip .= $str.":"; - } - $ip = substr($ip, 0,-1); - return $ip; - } - -} - -?> diff --git a/ipv6.php b/ipv6.php index 352819ea13..86c0bea937 100755 --- a/ipv6.php +++ b/ipv6.php @@ -9,11 +9,13 @@ while ($device = mysql_fetch_array($q)) { echo("\n" . $device['hostname'] . " : "); - $oids = shell_exec("snmpwalk -v2c -c v05tr0n82 ".$device['hostname']." ipAddressIfIndex.ipv6 -Osq"); + $oids = shell_exec("snmpwalk -v2c -c ".$device['community']." ".$device['hostname']." ipAddressIfIndex.ipv6 -Osq"); $oids = str_replace("ipAddressIfIndex.ipv6.", "", $oids); $oids = str_replace("\"", "", $oids); $oids = trim($oids); + foreach(explode("\n", $oids) as $data) { $data = trim($data); list($ipv6addr,$ifIndex) = explode(" ", $data); + $oid = ""; $sep = ''; $adsep = ''; unset($address); @@ -33,6 +35,8 @@ while ($device = mysql_fetch_array($q)) { $network = trim(shell_exec($config['sipcalc']." $address/$cidr | grep Subnet | cut -f 2 -d '-'")); $comp = trim(shell_exec($config['sipcalc']." $address/$cidr | grep Compressed | cut -f 2 -d '-'")); + $valid_ips[] = $address . " " . $ifIndex; + if (mysql_result(mysql_query("SELECT count(*) FROM `interfaces` WHERE device_id = '".$device['device_id']."' AND `ifIndex` = '$ifIndex'"), 0) != '0' && $cidr > '0' && $cidr < '129' && $comp != '::1') { $i_query = "SELECT interface_id FROM `interfaces` WHERE device_id = '".$device['device_id']."' AND `ifIndex` = '$ifIndex'"; $interface_id = mysql_result(mysql_query($i_query), 0); @@ -49,7 +53,23 @@ while ($device = mysql_fetch_array($q)) { mysql_query("INSERT INTO `ip6adjacencies` (`network_id`, `interface_id`) VALUES ('$network_id', '$interface_id')"); echo("A"); } - } else { echo("."); } + } else { echo("."); } + } + + $sql = "SELECT * FROM ip6addr AS A, interfaces AS I WHERE A.interface_id = I.interface_id AND I.device_id = '".$device['device_id']."'"; + $data = mysql_query($sql); + while($row = mysql_fetch_array($data)) { + unset($valid); + foreach($valid_ips as $valid_ip) { + if($row['addr'] . " " . $row['ifIndex'] == $valid_ip) { $valid = 1; } + } + if(!$valid) { echo("-"); mysql_query("DELETE FROM ip6addr WHERE ip6addr_id = '".$row['ip6addr_id']."'");} + } + + unset($valid_ips); + + echo("\n"); + } ?> diff --git a/poll-device.php b/poll-device.php index 62bfe0cccc..cf5ef13d14 100755 --- a/poll-device.php +++ b/poll-device.php @@ -250,7 +250,7 @@ while ($device = mysql_fetch_array($device_query)) { if ($uptime) { - $old_uptime = mysql_result(mysql_query("SELECT `attrib_value` FROM `devices_attribs` WHERE `device_id` = '" . $device['device_id'] . "' AND `attrib_type` = 'uptime'"), 0); + $old_uptime = @mysql_result(mysql_query("SELECT `attrib_value` FROM `devices_attribs` WHERE `device_id` = '" . $device['device_id'] . "' AND `attrib_type` = 'uptime'"), 0); if( $uptime < $old_uptime ) { if($device['sysContact']) { $email = $device['sysContact']; } else { $email = $config['email_default']; } @@ -284,7 +284,7 @@ while ($device = mysql_fetch_array($device_query)) { $update_query = "UPDATE `devices` SET "; $update_query .= $update; $update_query .= " WHERE `device_id` = '" . $device['device_id'] . "'"; - echo("Updating " . $device['hostname'] . "\n" . $update_query . "\n"); + echo("Updating " . $device['hostname'] . "\n"); $update_result = mysql_query($update_query); } else { echo("No Changes to " . $device['hostname'] . "\n");