diff --git a/database-update.sql b/database-update.sql index efa3daa9f..b8a50da48 100644 --- a/database-update.sql +++ b/database-update.sql @@ -44,6 +44,7 @@ ALTER TABLE `ports` DROP INDEX `snmpid`; CREATE TABLE IF NOT EXISTS `ospf_areas` ( `device_id` int(11) NOT NULL, `ospfAreaId` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfAuthType` varchar(64) COLLATE utf8_unicode_ci NOT NULL, `ospfImportAsExtern` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `ospfSpfRuns` int(11) NOT NULL, `ospfAreaBdrRtrCount` int(11) NOT NULL, `ospfAsBdrRtrCount` int(11) NOT NULL, `ospfAreaLsaCount` int(11) NOT NULL, `ospfAreaLsaCksumSum` int(11) NOT NULL, `ospfAreaSummary` varchar(64) COLLATE utf8_unicode_ci NOT NULL, `ospfAreaStatus` varchar(64) COLLATE utf8_unicode_ci NOT NULL, UNIQUE KEY `device_area` (`device_id`,`ospfAreaId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `ospf_instances` ( `device_id` int(11) NOT NULL, `ospf_instance_id` int(11) NOT NULL, `ospfRouterId` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfAdminStat` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfVersionNumber` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfAreaBdrRtrStatus` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfASBdrRtrStatus` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfExternLsaCount` int(11) NOT NULL, `ospfExternLsaCksumSum` int(11) NOT NULL, `ospfTOSSupport` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfOriginateNewLsas` int(11) NOT NULL, `ospfRxNewLsas` int(11) NOT NULL, `ospfExtLsdbLimit` int(11) DEFAULT NULL, `ospfMulticastExtensions` int(11) DEFAULT NULL, `ospfExitOverflowInterval` int(11) DEFAULT NULL, `ospfDemandExtensions` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, UNIQUE KEY `device_id` (`device_id`,`ospf_instance_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `ospf_ports` ( `device_id` int(11) NOT NULL, `interface_id` int(11) NOT NULL, `ospf_port_id` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfIfIpAddress` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfAddressLessIf` int(11) NOT NULL, `ospfIfAreaId` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfIfType` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfAdminStat` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfRtrPriority` int(11) DEFAULT NULL, `ospfIfTransitDelay` int(11) DEFAULT NULL, `ospfIfRetransInterval` int(11) DEFAULT NULL, `ospfIfHelloInterval` int(11) DEFAULT NULL, `ospfIfRtrDeadInterval` int(11) DEFAULT NULL, `ospfIfPollInterval` int(11) DEFAULT NULL, `ospfIfState` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfDesignatedRouter` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfBackupDesignatedRouter` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfEvents` int(11) DEFAULT NULL, `ospfIfAuthKey` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfStatus` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfMulticastForwarding` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfDemand` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `ospfIfAuthType` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, UNIQUE KEY `device_id` (`device_id`,`interface_id`,`ospf_port_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +CREATE TABLE IF NOT EXISTS `ospf_nbrs` ( `device_id` int(11) NOT NULL, `interface_id` int(11) NOT NULL, `ospf_nbr_id` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfNbrIpAddr` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfNbrAddressLessIndex` int(11) NOT NULL, `ospfNbrRtrId` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfNbrOptions` int(11) NOT NULL, `ospfNbrPriority` int(11) NOT NULL, `ospfNbrState` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfNbrEvents` int(11) NOT NULL, `ospfNbrLsRetransQLen` int(11) NOT NULL, `ospfNbmaNbrStatus` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfNbmaNbrPermanence` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `ospfNbrHelloSuppressed` varchar(32) COLLATE utf8_unicode_ci NOT NULL, UNIQUE KEY `device_id` (`device_id`,`ospf_nbr_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `ports_stack` (`interface_id_high` INT NOT NULL ,`interface_id_low` INT NOT NULL) ENGINE = INNODB; ALTER TABLE `ports_stack` ADD `device_id` INT NOT NULL; ALTER TABLE `ports_stack` ADD `ifStackStatus` VARCHAR(32); diff --git a/html/includes/graphs/macaccounting/auth.inc.php b/html/includes/graphs/macaccounting/auth.inc.php index d21dde9b1..7aa3ece80 100644 --- a/html/includes/graphs/macaccounting/auth.inc.php +++ b/html/includes/graphs/macaccounting/auth.inc.php @@ -17,7 +17,7 @@ if (is_numeric($id)) $device = device_by_id_cache($port['device_id']); $title = generate_device_link($device); $title .= " :: Port ".generate_port_link($port); - $title .= " :: " . $acc['mac']; + $title .= " :: " . formatMac($acc['mac']); $auth = TRUE; } diff --git a/html/includes/print-menubar.php b/html/includes/print-menubar.php index 743c465b0..569a84a5b 100644 --- a/html/includes/print-menubar.php +++ b/html/includes/print-menubar.php @@ -272,6 +272,19 @@ foreach (array_keys($menu_sensors) as $item) = '5') { echo(' @@ -279,10 +292,19 @@ if ($_SESSION['userlevel'] >= '5')
');
print_optionbar_start('', '');
+echo("Graphs » ");
+
$sep = "";
$query = mysql_query("SELECT * FROM device_graphs WHERE device_id = '".$device['device_id']."'");
diff --git a/html/pages/device/health.inc.php b/html/pages/device/health.inc.php
index b2bc60504..326b13f18 100644
--- a/html/pages/device/health.inc.php
+++ b/html/pages/device/health.inc.php
@@ -13,7 +13,7 @@ $current = mysql_result(mysql_query("select count(*) from sensors WHERE sensor_c
$freqs = mysql_result(mysql_query("select count(*) from sensors WHERE sensor_class='frequency' AND device_id = '" . $device['device_id'] . "'"), 0);
$power = mysql_result(mysql_query("select count(*) from sensors WHERE sensor_class='power' AND device_id = '" . $device['device_id'] . "'"), 0);
-
+unset($datas);
$datas[] = 'overview';
if ($processor) { $datas[] = 'processor'; }
if ($mempools) { $datas[] = 'mempool'; }
@@ -42,6 +42,8 @@ $type_text['power'] = "Power";
print_optionbar_start();
+echo("Health » ");
+
if (!$_GET['opta']) { $_GET['opta'] = "overview"; }
unset($sep);
diff --git a/html/pages/device/routing.inc.php b/html/pages/device/routing.inc.php
index 1493e4e3b..7c62c2638 100644
--- a/html/pages/device/routing.inc.php
+++ b/html/pages/device/routing.inc.php
@@ -1,19 +1,19 @@
');
}
- echo(" " . $type_text[$type] ." (".$routing_count[$type].")");
+ echo(" " . $type_text[$type] ." (".$device_routing_count[$type].")");
if ($_GET['opta'] == $type) { echo(""); }
$sep = " | ";
}
diff --git a/html/pages/device/routing/ospf.inc.php b/html/pages/device/routing/ospf.inc.php
index debb248d6..d9b968474 100644
--- a/html/pages/device/routing/ospf.inc.php
+++ b/html/pages/device/routing/ospf.inc.php
@@ -17,6 +17,8 @@ while($instance = mysql_fetch_assoc($query))
$area_count = mysql_result(mysql_query("SELECT COUNT(*) FROM `ospf_areas` WHERE `device_id` = '".$device['device_id']."'"),0);
$port_count = mysql_result(mysql_query("SELECT COUNT(*) FROM `ospf_ports` WHERE `device_id` = '".$device['device_id']."'"),0);
$port_count_enabled = mysql_result(mysql_query("SELECT COUNT(*) FROM `ospf_ports` WHERE `ospfIfAdminStat` = 'enabled' AND `device_id` = '".$device['device_id']."'"),0);
+ $nbr_count = mysql_result(mysql_query("SELECT COUNT(*) FROM `ospf_nbrs` WHERE `device_id` = '".$device['device_id']."'"),0);
+
$query = "SELECT * FROM ipv4_addresses AS A, ports AS I WHERE ";
$query .= "(A.ipv4_address = '".$peer['bgpPeerIdentifier']."' AND I.interface_id = A.interface_id)";
@@ -35,7 +37,7 @@ while($instance = mysql_fetch_assoc($query))
echo(' ' . $asbr . ' | ');
echo(' ' . $area_count . ' | ');
echo(' ' . $port_count . '('.$port_count_enabled.') | ');
- echo(' ' . ($neighbour_count+0) . ' | ');
+ echo(' ' . $nbr_count . ' | ');
echo(' |
| '.generate_device_link($device). ' | '); + echo(''.generate_device_link($device, 0, "routing/ospf/"). ' | '); echo(''.$instance['ospfRouterId'] . ' | '); echo('' . $enabled . ' | '); echo('' . $abr . ' | '); diff --git a/includes/polling/ospf.inc.php b/includes/polling/ospf.inc.php index b6ab293fd..2fe53576d 100644 --- a/includes/polling/ospf.inc.php +++ b/includes/polling/ospf.inc.php @@ -185,7 +185,7 @@ if($debug) { ### Loop array of entries and update if (is_array($ospf_ports_db)){ - foreach($ospf_ports_db as $ospf_port_db) + foreach($ospf_ports_db as $ospf_port_id => $ospf_port_db) { if(is_array($ospf_ports_poll[$ospf_port_db['ospf_port_id']])) { $ospf_port_poll = $ospf_ports_poll[$ospf_port_db['ospf_port_id']]; @@ -205,7 +205,7 @@ if (is_array($ospf_ports_db)){ #log_event("$oid -> ".$this_port[$oid], $device, 'ospf', $port['interface_id']); ## FIXME } } - if($update) + if($ospf_port_update) { $query = "UPDATE `ospf_ports` SET `ospf_port_id` = '".$ospf_port_db['ospf_port_id']."'".$ospf_port_update." WHERE `device_id` = '".$device['device_id']."' AND `ospf_port_id` = '".$ospf_port_id."'"; mysql_query($query); @@ -225,6 +225,97 @@ if (is_array($ospf_ports_db)){ } } +#OSPF-MIB::ospfNbrIpAddr.172.22.203.98.0 172.22.203.98 +#OSPF-MIB::ospfNbrAddressLessIndex.172.22.203.98.0 0 +#OSPF-MIB::ospfNbrRtrId.172.22.203.98.0 172.22.203.128 +#OSPF-MIB::ospfNbrOptions.172.22.203.98.0 2 +#OSPF-MIB::ospfNbrPriority.172.22.203.98.0 0 +#OSPF-MIB::ospfNbrState.172.22.203.98.0 full +#OSPF-MIB::ospfNbrEvents.172.22.203.98.0 6 +#OSPF-MIB::ospfNbrLsRetransQLen.172.22.203.98.0 1 +#OSPF-MIB::ospfNbmaNbrStatus.172.22.203.98.0 active +#OSPF-MIB::ospfNbmaNbrPermanence.172.22.203.98.0 dynamic +#OSPF-MIB::ospfNbrHelloSuppressed.172.22.203.98.0 false + +echo(' Neighbours: '); + +$ospf_nbr_oids_db = array('ospfNbrIpAddr', 'ospfNbrAddressLessIndex', 'ospfNbrRtrId', 'ospfNbrOptions', 'ospfNbrPriority', 'ospfNbrState', 'ospfNbrEvents', 'ospfNbrLsRetransQLen', 'ospfNbmaNbrStatus', 'ospfNbmaNbrPermanence', 'ospfNbrHelloSuppressed'); +$ospf_nbr_oids_rrd = array(); +$ospf_nbr_oids = array_merge($ospf_nbr_oids_db, $ospf_nbr_oids_rrd); + +### Build array of existing entries +$nbr_query = mysql_query("SELECT * FROM `ospf_nbrs` WHERE `device_id` = '".$device['device_id']."'"); +while($nbr_entry = mysql_fetch_assoc($nbr_query)) +{ + $ospf_nbrs_db[$nbr_entry['ospf_nbr_id']] = $nbr_entry; +} + +### Pull data from device +$ospf_nbrs_poll = snmpwalk_cache_oid($device, "OSPF-MIB::ospfNbrEntry", array(), "OSPF-MIB"); + +foreach($ospf_nbrs_poll as $ospf_nbr_id => $ospf_nbr) +{ + ### If the entry doesn't already exist in the prebuilt array, insert into the database and put into the array + if(!isset($ospf_nbrs_db[$ospf_nbr_id])) + { + mysql_query("INSERT INTO `ospf_nbrs` (`device_id`, `ospf_nbr_id`) VALUES ('".$device['device_id']."','".$ospf_nbr_id."') "); + echo("+"); + $entry = mysql_fetch_assoc(mysql_query("SELECT * FROM `ospf_nbrs` WHERE `device_id` = '".$device['device_id']."' AND `ospf_nbr_id` = '".$ospf_nbr_id."'")); + $ospf_nbrs_db[$entry['ospf_nbr_id']] = $entry; + } +} + +if($debug) { + echo("\nPolled: "); + print_r($ospf_nbrs_poll); + echo("Database: "); + print_r($ospf_nbrs_db); + echo("\n"); +} + +### Loop array of entries and update +if (is_array($ospf_nbrs_db)){ + foreach($ospf_nbrs_db as $ospf_nbr_id => $ospf_nbr_db) + { + if(is_array($ospf_nbrs_poll[$ospf_nbr_db['ospf_nbr_id']])) { + $ospf_nbr_poll = $ospf_nbrs_poll[$ospf_nbr_db['ospf_nbr_id']]; + + $ospf_nbr_poll['interface_id'] = @mysql_result(mysql_query("SELECT A.`interface_id` FROM ipv4_addresses AS A, nbrs AS I WHERE A.ipv4_address = '".$ospf_nbr_poll['ospfNbrIpAddr']."' AND I.interface_id = A.interface_id AND I.device_id = '".$device['device_id']."'"),0); + + if ($ospf_nbr_db['interface_id'] != $ospf_nbr_poll['interface_id']) + { + $ospf_nbr_update = " "; + } + + foreach ($ospf_nbr_oids as $oid) + { // Loop the OIDs + echo($ospf_nbr_db[$oid]."|".$ospf_nbr_poll[$oid]."\n"); + if ($ospf_nbr_db[$oid] != $ospf_nbr_poll[$oid]) + { // If data has changed, build a query + $ospf_nbr_update .= ", `$oid` = '".mres($ospf_nbr_poll[$oid])."'"; + #log_event("$oid -> ".$this_nbr[$oid], $device, 'ospf', $nbr['interface_id']); ## FIXME + } + } + if($ospf_nbr_update) + { + $query = "UPDATE `ospf_nbrs` SET `interface_id` = '".$ospf_nbr_poll['interface_id']."'".$ospf_nbr_update." WHERE `device_id` = '".$device['device_id']."' AND `ospf_nbr_id` = '".$ospf_nbr_id."'"; + mysql_query($query); + if($debug) { echo("$query"); } + echo("U"); + unset($ospf_nbr_update); + } else { + echo("."); + } + unset($ospf_nbr_poll); + unset($ospf_nbr_db); + $ospf_nbr_count++; + } else { + mysql_query("DELETE FROM `ospf_nbrs` WHERE `device_id` = '".$device['device_id']."' AND `ospf_nbr_id` = '".$ospf_nbr_db['ospf_nbr_id']."'"); + echo("-"); + } + } +} + ## Create device-wide statistics RRD $filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("ospf-statistics.rrd"); diff --git a/includes/static-config.php b/includes/static-config.php index 76b7d647d..b797d6b6e 100644 --- a/includes/static-config.php +++ b/includes/static-config.php @@ -848,6 +848,8 @@ $config['graph_types']['device']['uptime']['section'] = 'system'; $config['graph_types']['device']['uptime']['order'] = '0'; $config['graph_types']['device']['uptime']['descr'] = 'System Uptime'; +#$config['graph_types']['macaccounting']['bits']['descr'] = "MAC Accounting (Bits/sec)"; +#$config['graph_types']['macaccounting']['bits']['descr'] = "MAC Accounting (Packets/sec)"; ### Device Types