diff --git a/html/includes/print-vlan.inc.php b/html/includes/print-vlan.inc.php
index 1f4a3223f..61b937378 100644
--- a/html/includes/print-vlan.inc.php
+++ b/html/includes/print-vlan.inc.php
@@ -5,7 +5,7 @@ if (!is_integer($i/2)) { $bg_colour = $list_colour_a; } else { $bg_colour = $lis
echo("
");
echo("| Vlan " . $vlan['vlan_vlan'] . " | ");
-echo("" . $vlan['vlan_descr'] . " | ");
+echo("" . $vlan['vlan_name'] . " | ");
echo("");
$vlan_ports = array();
diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php
index c112ed8f0..837150ca7 100644
--- a/includes/defaults.inc.php
+++ b/includes/defaults.inc.php
@@ -120,8 +120,8 @@ $config['snmp']['transports'] = array('udp', 'udp6', 'tcp', 'tcp6');
### Or if one had a very fast I/O subsystem with no performance worries.
$config['rrd_rra'] = " RRA:AVERAGE:0.5:1:2016 RRA:AVERAGE:0.5:6:1440 RRA:AVERAGE:0.5:24:1440 RRA:AVERAGE:0.5:288:1440 ";
-$config['rrd_rra'] .= " RRA:MIN:0.5:6:1440 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 ";
-$config['rrd_rra'] .= " RRA:MAX:0.5:6:1440 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797 ";
+$config['rrd_rra'] .= " RRA:MAX:0.5:1:720 RRA:MIN:0.5:6:1440 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 ";
+$config['rrd_rra'] .= " RRA:MAX:0.5:1:720 RRA:MAX:0.5:6:1440 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797 ";
$config['rrd_rra'] .= " RRA:LAST:0.5:1:1440 ";
### Autodiscovery Settings
diff --git a/includes/discovery/cisco-vlans.inc.php b/includes/discovery/cisco-vlans.inc.php
index e26117fa2..5a55705f2 100755
--- a/includes/discovery/cisco-vlans.inc.php
+++ b/includes/discovery/cisco-vlans.inc.php
@@ -4,43 +4,31 @@ if ($device['os_group'] == "cisco")
{
echo("Cisco VLANs : ");
- $vtpversion_cmd = $config['snmpget'] . " -M " . $config['mibdir'] . " -m CISCO-VTP-MIB -Oqv -" . $device['snmpver'] . " -c " . $device['community'] . " ";
- $vtpversion_cmd .= $device['hostname'].":".$device['port'] . " .1.3.6.1.4.1.9.9.46.1.1.1.0";
- $vtpversion = trim(`$vtpversion_cmd 2>/dev/null`);
-
- if ($vtpversion == '1' || $vtpversion == '2' || $vtpversion == '3' || $vtpversion == 'one' || $vtpversion == 'two' || $vtpversion == 'three')
+ /// Not sure why we check for VTP, but this data comes from that MIB, so...
+ $vtpversion = snmp_get($device, "vtpVersion.0" , "-OnvQ", "CISCO-VTP-MIB");
+ if ($vtpversion == '1' || $vtpversion == '2' || $vtpversion == '3' || $vtpversion == 'one' || $vtpversion == 'two' || $vtpversion == 'three')
{
- $vtp_domain_cmd = $config['snmpget'] . " -M " . $config['mibdir'] . " -m CISCO-VTP-MIB -Oqv -" . $device['snmpver'] . " -c " . $device['community'] . " " . $device['hostname'].":".$device['port'];
- $vtp_domain_cmd .= " .1.3.6.1.4.1.9.9.46.1.2.1.1.2.1";
- $vtp_domain = trim(str_replace("\"", "", `$vtp_domain_cmd 2>/dev/null`));
- echo("VTP v$vtpversion $vtp_domain ");
+ ## FIXME - can have multiple VTP domains.
+ $vtpdomains = snmpwalk_cache_oid($device, "vlanManagementDomains", array(), "CISCO-VTP-MIB");
+ $vlans = snmpwalk_cache_twopart_oid($device, "vtpVlanEntry", array(), "CISCO-VTP-MIB");
- $vlans_cmd = $config['snmpwalk'] . " -M " . $config['mibdir'] . " -m CISCO-VTP-MIB -O qn -" . $device['snmpver'] . " -c " . $device['community'] . " " . $device['hostname'].":".$device['port'] . " ";
- $vlans_cmd .= "1.3.6.1.4.1.9.9.46.1.3.1.1.2.1 | sed s/.1.3.6.1.4.1.9.9.46.1.3.1.1.2.1.//g | cut -f 1 -d\" \"";
-
- $vlans = trim(`$vlans_cmd | grep -v o`);
-
- foreach (explode("\n", $vlans) as $vlan)
+ foreach($vtpdomains as $vtpdomain_id => $vtpdomain)
{
- $vlan_descr_cmd = $config['snmpget'] . " -M " . $config['mibdir'] . " -m CISCO-VTP-MIB -O nvq -" . $device['snmpver'] . " -c " . $device['community'] . " " . $device['hostname'].":".$device['port'] . " ";
- $vlan_descr_cmd .= ".1.3.6.1.4.1.9.9.46.1.3.1.1.4.1." . $vlan;
- $vlan_descr = shell_exec($vlan_descr_cmd);
-
- $vlan_descr = trim(str_replace("\"", "", $vlan_descr));
-
- if (mysql_result(mysql_query("SELECT COUNT(vlan_id) FROM `vlans` WHERE `device_id` = '" . $device['device_id'] . "' AND `vlan_domain` = '" . $vtp_domain . "' AND `vlan_vlan` = '" . $vlan . "'"), 0) == '0')
+ echo("VTP Domain ".$vtpdomain_id." ".$vtpdomain['managementDomainName']." ");
+ foreach ($vlans[$vtpdomain_id] as $vlan_id => $vlan)
{
- mysql_query("INSERT INTO `vlans` (`device_id`,`vlan_domain`,`vlan_vlan`, `vlan_descr`) VALUES (" . $device['device_id'] . ",'" . mres($vtp_domain) . "','$vlan', '" . mres($vlan_descr) . "')");
- echo("+");
- } else {
- echo(".");
- mysql_query("UPDATE `vlans` SET `vlan_descr`='" . mres($vlan_descr) . "' WHERE `device_id`='" . $device['device_id'] . "' AND `vlan_vlan`='" . $vlan . "' AND `vlan_domain`='" . $vtp_domain . "'");
+ echo(" $vlan_id");
+ if (is_array($vlans_db[$vtpdomain_id][$vlan_id]))
+ {
+ echo(".");
+ } else {
+ dbInsert(array('device_id' => $device['device_id'], 'vlan_domain' => $vtpdomain_id, 'vlan_vlan' => $vlan_id, 'vlan_name' => $vlan['vtpVlanName'], 'vlan_type' => $vlan['vtpVlanType']), 'vlans');
+ echo("+");
+ }
+ $device['vlans'][$vtpdomain_id][$vlan_id] = $vlan_id;
}
-
- $this_vlans[] = $vlan;
}
-
}
echo("\n");
diff --git a/includes/discovery/q-bridge-mib.inc.php b/includes/discovery/q-bridge-mib.inc.php
index 63c45ba96..3b55121a6 100644
--- a/includes/discovery/q-bridge-mib.inc.php
+++ b/includes/discovery/q-bridge-mib.inc.php
@@ -8,29 +8,21 @@ if ($vlanversion == 'version1')
{
echo("VLAN $vlanversion ");
- $vlans = snmp_walk($device, "dot1qVlanFdbId", "-Oqn", "Q-BRIDGE-MIB");
+ $vtpdomain_id = "1";
+ $vlans = snmpwalk_cache_oid($device, "dot1qVlanStaticName", array(), "Q-BRIDGE-MIB");
- $vlan_array = snmpwalk_cache_multi_oid($device, "dot1qVlanStaticName", $vlan_array, "Q-BRIDGE-MIB");
-
- foreach (explode("\n", $vlans) as $vlan_oid)
- {
- list($oid,$vlan_index) = explode(' ',$vlan_oid);
- $oid_ex = explode('.',$oid);
- $vlan = $oid_ex[count($oid_ex)-1];
-
- $vlan_descr = trim(str_replace("\"", "", $vlan_array[$vlan]['dot1qVlanStaticName']));
-
- if (mysql_result(mysql_query("SELECT COUNT(vlan_id) FROM `vlans` WHERE `device_id` = '" . $device['device_id'] . "' AND `vlan_domain` = '' AND `vlan_vlan` = '" . $vlan . "'"), 0) == '0')
- {
- mysql_query("INSERT INTO `vlans` (`device_id`,`vlan_domain`,`vlan_vlan`, `vlan_descr`) VALUES (" . $device['device_id'] . ",'','$vlan', '" . mres($vlan_descr) . "')");
- echo("+");
- } else {
- mysql_query("UPDATE `vlans` SET `vlan_descr`='" . mres($vlan_descr) . "' WHERE `device_id`='" . $device['device_id'] . "' AND `vlan_vlan`='" . $vlan . "'");
- echo(".");
- }
-
- $this_vlans[] = $vlan;
- }
+ foreach ($vlans as $vlan_id => $vlan)
+ {
+ echo(" $vlan_id");
+ if (is_array($vlans_db[$vtpdomain_id][$vlan_id]))
+ {
+ echo(".");
+ } else {
+ dbInsert(array('device_id' => $device['device_id'], 'vlan_domain' => $vtpdomain_id, 'vlan_vlan' => $vlan_id, 'vlan_name' => $vlan['dot1qVlanStaticName'], 'vlan_type' => array('NULL')), 'vlans');
+ echo("+");
+ }
+ $device['vlans'][$vtpdomain_id][$vlan_id] = $vlan_id;
+ }
}
diff --git a/includes/discovery/vlans.inc.php b/includes/discovery/vlans.inc.php
index 615a8dd12..a81793df4 100644
--- a/includes/discovery/vlans.inc.php
+++ b/includes/discovery/vlans.inc.php
@@ -2,88 +2,91 @@
echo("VLANs:\n");
-$this_vlans = array();
+/// Pre-cache the existing state of VLANs for this device from the database
+$vlans_db_raw = dbFetchRows("SELECT * FROM `vlans` WHERE `device_id` = ?", array($device['device_id']));
+foreach($vlans_db_raw as $vlan_db)
+{
+ $vlans_db[$vlan_db['vlan_domain']][$vlan_db['vlan_vlan']] = $vlan_db;
+}
+
+/// Create an empty array to record what VLANs we discover this session.
+$device['vlans'] = array();
include("includes/discovery/q-bridge-mib.inc.php");
include("includes/discovery/cisco-vlans.inc.php");
-foreach ($this_vlans as $vlan)
+/// Fetch switchport <> VLAN relationships. This is DIRTY.
+foreach ($device['vlans'] as $domain_id => $vlans)
{
+ foreach ($vlans as $vlan_id => $vlan)
+ {
/// Pull Tables for this VLAN
- #/usr/bin/snmpbulkwalk -v2c -c kglk5g3l454@988 -OQUs -m BRIDGE-MIB -M /opt/observium/mibs/ udp:sw2.ahf:161 dot1dStpPortEntry
- #/usr/bin/snmpbulkwalk -v2c -c kglk5g3l454@988 -OQUs -m BRIDGE-MIB -M /opt/observium/mibs/ udp:sw2.ahf:161 dot1dBasePortEntry
+ #/usr/bin/snmpbulkwalk -v2c -c kglk5g3l454@988 -OQUs -m BRIDGE-MIB -M /opt/observium/mibs/ udp:sw2.ahf:161 dot1dStpPortEntry
+ #/usr/bin/snmpbulkwalk -v2c -c kglk5g3l454@988 -OQUs -m BRIDGE-MIB -M /opt/observium/mibs/ udp:sw2.ahf:161 dot1dBasePortEntry
- if (is_numeric($vlan) && ($vlan <1002 || $vlan > 1105)) /// Ignore reserved VLAN IDs
- {
-
- if ($device['os_group'] == "cisco" || $device['os'] == "ios") /// This shit only seems to work on IOS
+ ### FIXME - do this only when vlan type == ethernet?
+ if (is_numeric($vlan_id) && ($vlan_id <1002 || $vlan_id > 1105)) /// Ignore reserved VLAN IDs
{
- $vlan_device = array_merge($device, array('community' => $device['community']."@".$vlan));
- $vlan_data = snmpwalk_cache_oid($vlan_device, "dot1dStpPortEntry", array(), "BRIDGE-MIB:Q-BRIDGE-MIB");
- $vlan_data = snmpwalk_cache_oid($vlan_device, "dot1dBasePortEntry", $vlan_data, "BRIDGE-MIB:Q-BRIDGE-MIB");
- }
-
- echo("VLAN $vlan \n");
-
- if ($vlan_data)
- {
- echo(str_pad("dot1d id", 10).str_pad("ifIndex", 10).str_pad("Port Name", 25).
- str_pad("Priority", 10).str_pad("State", 15).str_pad("Cost", 10)."\n");
- }
-
- foreach ($vlan_data as $vlan_port_id => $vlan_port)
- {
- $port = get_port_by_index_cache($device, $vlan_port['dot1dBasePortIfIndex']);
- echo(str_pad($vlan_port_id, 10).str_pad($vlan_port['dot1dBasePortIfIndex'], 10).
- str_pad($port['ifDescr'],25).str_pad($vlan_port['dot1dStpPortPriority'], 10).
- str_pad($vlan_port['dot1dStpPortState'], 15).str_pad($vlan_port['dot1dStpPortPathCost'], 10));
-
- $db_w = array('device_id' => $device['device_id'],
- 'interface_id' => $port['interface_id'],
- 'vlan' => $vlan);
-
- $db_a = array('baseport' => $vlan_port_id,
- 'priority' => $vlan_port['dot1dStpPortPriority'],
- 'state' => $vlan_port['dot1dStpPortState'],
- 'cost' => $vlan_port['dot1dStpPortPathCost']);
-
- $from_db = dbFetchRow("SELECT * FROM `ports_vlans` WHERE device_id = ? AND interface_id = ? AND `vlan` = ?", array($device['device_id'], $port['interface_id'], $vlan));
-
- if ($from_db['port_vlan_id'])
+ if ($device['os_group'] == "cisco" || $device['os'] == "ios") /// This shit only seems to work on IOS
{
- dbUpdate($db_a, 'ports_vlans', "`port_vlan_id` = ?", $from_db['port_vlan_id']);
- echo("Updated");
- } else {
- dbInsert(array_merge($db_w, $db_a), 'ports_vlans');
- echo("Inserted");
+ $vlan_device = array_merge($device, array('community' => $device['community']."@".$vlan_id));
+ $vlan_data = snmpwalk_cache_oid($vlan_device, "dot1dStpPortEntry", array(), "BRIDGE-MIB:Q-BRIDGE-MIB");
+ $vlan_data = snmpwalk_cache_oid($vlan_device, "dot1dBasePortEntry", $vlan_data, "BRIDGE-MIB:Q-BRIDGE-MIB");
}
- echo("\n");
+ echo("VLAN $vlan_id \n");
+ if ($vlan_data)
+ {
+ echo(str_pad("dot1d id", 10).str_pad("ifIndex", 10).str_pad("Port Name", 25).
+ str_pad("Priority", 10).str_pad("State", 15).str_pad("Cost", 10)."\n");
+ }
+
+ foreach ($vlan_data as $vlan_port_id => $vlan_port)
+ {
+ $port = get_port_by_index_cache($device, $vlan_port['dot1dBasePortIfIndex']);
+ echo(str_pad($vlan_port_id, 10).str_pad($vlan_port['dot1dBasePortIfIndex'], 10).
+ str_pad($port['ifDescr'],25).str_pad($vlan_port['dot1dStpPortPriority'], 10).
+ str_pad($vlan_port['dot1dStpPortState'], 15).str_pad($vlan_port['dot1dStpPortPathCost'], 10));
+
+ $db_w = array('device_id' => $device['device_id'],
+ 'interface_id' => $port['interface_id'],
+ 'vlan' => $vlan_id);
+
+ $db_a = array('baseport' => $vlan_port_id,
+ 'priority' => $vlan_port['dot1dStpPortPriority'],
+ 'state' => $vlan_port['dot1dStpPortState'],
+ 'cost' => $vlan_port['dot1dStpPortPathCost']);
+
+ $from_db = dbFetchRow("SELECT * FROM `ports_vlans` WHERE device_id = ? AND interface_id = ? AND `vlan` = ?", array($device['device_id'], $port['interface_id'], $vlan_id));
+
+ if ($from_db['port_vlan_id'])
+ {
+ dbUpdate($db_a, 'ports_vlans', "`port_vlan_id` = ?", $from_db['port_vlan_id']);
+ echo("Updated");
+ } else {
+ dbInsert(array_merge($db_w, $db_a), 'ports_vlans');
+ echo("Inserted");
+ }
+ echo("\n");
+ }
}
}
-
- unset($vlan_data);
-
}
-$device_vlans = mysql_query("SELECT * FROM `vlans` WHERE `device_id` = '" . $device['device_id'] . "'");
-while ($dev_vlan = mysql_fetch_assoc($device_vlans))
+
+foreach($vlans_db as $domain_id => $vlans)
{
- unset($vlan_exists);
- foreach ($this_vlans as $test_vlan)
+ foreach($vlans as $vlan_id => $vlan)
{
- if ($test_vlan == $dev_vlan['vlan_vlan']) { $vlan_exists = 1; }
- }
- if (!$vlan_exists)
- {
- mysql_query("DELETE FROM `vlans` WHERE `vlan_id` = '" . $dev_vlan['vlan_id'] . "'");
- echo("-");
- if ($debug) { echo("Deleted VLAN ". $dev_vlan['vlan_vlan'] ."\n"); }
+ if(empty($device['vlans'][$domain_id][$vlan_id]))
+ {
+ dbDelete('vlans', "`device_id` = ? AND vlan_domain = ? AND vlan_vlan = ?", array($device['device_id'], $domain_id, $vlan_id));
+ }
}
}
-unset($this_vlans);
+unset($device['vlans']);
?>
diff --git a/includes/versioncheck.inc.php b/includes/versioncheck.inc.php
index 5b3fb97e9..c33817968 100644
--- a/includes/versioncheck.inc.php
+++ b/includes/versioncheck.inc.php
@@ -42,18 +42,23 @@ if ($dataHandle)
} else {
if ($cur != $data)
{
- echo("Current Version : $cur_omnipotence.$cur_year.$cur_month.$cur_revision \n");
+ echo("Current Revision : $cur_revision\n");
- if ($omnipotence > $cur_omnipotence)
+ if ($omnipotence > $cur_revision)
{
- echo("New version : $omnipotence.$year.$month.$revision\n");
- } elseif ($year > $cur_year) {
- echo("New version : $omnipotence.$year.$month.$revision\n");
- } elseif ($month > $cur_month) {
- echo("New version : $omnipotence.$year.$month.$revision\n");
- } elseif ($revision > $cur_revision) {
- echo("New release : $omnipotence.$year.$month.$revision\n");
+ echo("New Revision : $omnipotence\n");
}
+
+# if ($omnipotence > $cur_omnipotence)
+# {
+# echo("New version : $omnipotence.$year.$month.$revision\n");
+# } elseif ($year > $cur_year) {
+# echo("New version : $omnipotence.$year.$month.$revision\n");
+# } elseif ($month > $cur_month) {
+# echo("New version : $omnipotence.$year.$month.$revision\n");
+# } elseif ($revision > $cur_revision) {
+# echo("New release : $omnipotence.$year.$month.$revision\n");
+# }
}
}
}
diff --git a/sql-schema/016.sql b/sql-schema/016.sql
new file mode 100644
index 000000000..998ba0165
--- /dev/null
+++ b/sql-schema/016.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `vlans` ADD `vlan_type` VARCHAR( 16 ) NULL;
+ALTER TABLE `vlans` CHANGE `vlan_domain` `vlan_domain` INT NULL DEFAULT NULL;
+ALTER TABLE `vlans` CHANGE `vlan_descr` `vlan_name` VARCHAR( 32 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
+ALTER TABLE `vlans` ADD `vlan_mtu` INT NULL;
|