2009-09-07 11:07:59 +00:00
|
|
|
<?php
|
2007-04-10 23:43:42 +00:00
|
|
|
|
2015-07-13 20:10:26 +02:00
|
|
|
if ($device['os_group'] == 'cisco') {
|
2016-10-11 15:29:06 -06:00
|
|
|
echo "Cisco VLANs:\n";
|
2007-04-10 23:43:42 +00:00
|
|
|
|
2016-10-19 16:44:49 -05:00
|
|
|
$native_vlans = snmpwalk_cache_oid($device, 'vlanTrunkPortNativeVlan', array(), 'CISCO-VTP-MIB');
|
|
|
|
$native_vlans = snmpwalk_cache_oid($device, 'vmVlan', $native_vlans, 'CISCO-VLAN-MEMBERSHIP-MIB');
|
|
|
|
|
2015-07-13 20:10:26 +02:00
|
|
|
// 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' || $vtpversion == 'none') {
|
|
|
|
// 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');
|
2007-04-10 23:43:42 +00:00
|
|
|
|
2015-07-13 20:10:26 +02:00
|
|
|
foreach ($vtpdomains as $vtpdomain_id => $vtpdomain) {
|
2016-10-11 15:29:06 -06:00
|
|
|
echo 'VTP Domain '.$vtpdomain_id.' '.$vtpdomain['managementDomainName'].' ';
|
2015-07-13 20:10:26 +02:00
|
|
|
foreach ($vlans[$vtpdomain_id] as $vlan_id => $vlan) {
|
2016-10-11 15:29:06 -06:00
|
|
|
d_echo(" $vlan_id");
|
2015-07-13 20:10:26 +02:00
|
|
|
if (is_array($vlans_db[$vtpdomain_id][$vlan_id])) {
|
|
|
|
echo '.';
|
2016-08-28 12:32:58 -05:00
|
|
|
} else {
|
2015-07-13 20:10:26 +02:00
|
|
|
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;
|
2016-10-19 16:44:49 -05:00
|
|
|
|
|
|
|
if (is_numeric($vlan_id) && ($vlan_id < 1002 || $vlan_id > 1005)) {
|
|
|
|
// Ignore reserved VLAN IDs
|
|
|
|
// get dot1dStpPortEntry within the vlan context
|
|
|
|
$vlan_device = array_merge($device, array('community' => $device['community'] . '@' . $vlan_id, 'context_name' => "vlan-$vlan_id"));
|
|
|
|
$tmp_vlan_data = snmpwalk_cache_oid($vlan_device, 'dot1dStpPortEntry', array(), 'BRIDGE-MIB');
|
|
|
|
|
|
|
|
// may need to fetch additional dot1dBasePortIfIndex mappings
|
|
|
|
$tmp_vlan_data = snmpwalk_cache_oid($vlan_device, 'dot1dBasePortIfIndex', $tmp_vlan_data, 'BRIDGE-MIB');
|
|
|
|
$vlan_data = array();
|
|
|
|
// flatten the array, use ifIndex instead of dot1dBasePortId
|
|
|
|
foreach ($tmp_vlan_data as $index => $array) {
|
|
|
|
if (isset($array['dot1dBasePortIfIndex'])) {
|
|
|
|
$base_to_index[$index] = $array['dot1dBasePortIfIndex'];
|
|
|
|
$index_to_base[$array['dot1dBasePortIfIndex']] = $index;
|
|
|
|
}
|
|
|
|
$vlan_data[$base_to_index[$index]] = $array;
|
|
|
|
}
|
2017-02-08 04:54:30 +00:00
|
|
|
unset(
|
|
|
|
$tmp_vlan_data
|
|
|
|
);
|
2016-10-19 16:44:49 -05:00
|
|
|
|
|
|
|
$per_vlan_data[$vlan_id] = $vlan_data;
|
|
|
|
}
|
2015-07-13 20:10:26 +02:00
|
|
|
}
|
2016-10-11 15:29:06 -06:00
|
|
|
echo PHP_EOL;
|
2016-10-19 16:44:49 -05:00
|
|
|
|
|
|
|
// set all untagged vlans
|
|
|
|
foreach ($native_vlans as $ifIndex => $data) {
|
|
|
|
if (isset($data['vmVlan'])) {
|
|
|
|
$vlan_id = $data['vmVlan'];
|
|
|
|
} else {
|
|
|
|
$vlan_id = $data['vlanTrunkPortNativeVlan'];
|
|
|
|
}
|
|
|
|
$base = $index_to_base[$ifIndex];
|
|
|
|
echo "Vlan: $vlan_id tagged on $base (ifIndex $ifIndex)\n";
|
|
|
|
$per_vlan_data[$vlan_id][$ifIndex]['untagged'] = 1;
|
|
|
|
}
|
2017-02-08 04:54:30 +00:00
|
|
|
unset(
|
|
|
|
$data
|
|
|
|
);
|
2012-05-02 15:04:31 +00:00
|
|
|
}
|
2007-04-12 00:07:25 +00:00
|
|
|
}
|
2016-10-19 16:44:49 -05:00
|
|
|
echo PHP_EOL;
|
2010-02-28 22:04:15 +00:00
|
|
|
}
|