2012-01-19 08:49:26 +00:00
< ? php
echo ( " VLANs: \n " );
2012-05-02 15:04:31 +00:00
/// 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 ();
2012-01-19 08:49:26 +00:00
2012-05-02 15:12:04 +00:00
include ( " includes/discovery/vlans/q-bridge-mib.inc.php " );
include ( " includes/discovery/vlans/cisco-vtp.inc.php " );
2012-01-19 08:49:26 +00:00
2012-05-02 15:04:31 +00:00
/// Fetch switchport <> VLAN relationships. This is DIRTY.
foreach ( $device [ 'vlans' ] as $domain_id => $vlans )
2012-01-19 08:49:26 +00:00
{
2012-05-02 15:04:31 +00:00
foreach ( $vlans as $vlan_id => $vlan )
2012-01-19 08:49:26 +00:00
{
2012-05-02 15:04:31 +00:00
/// Pull Tables for this VLAN
2012-01-19 08:49:26 +00:00
2012-05-02 15:04:31 +00:00
#/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
2012-01-19 08:49:26 +00:00
2012-05-02 15:04:31 +00:00
### FIXME - do this only when vlan type == ethernet?
if ( is_numeric ( $vlan_id ) && ( $vlan_id < 1002 || $vlan_id > 1105 )) /// Ignore reserved VLAN IDs
2012-01-19 14:00:29 +00:00
{
2012-05-02 15:04:31 +00:00
if ( $device [ 'os_group' ] == " cisco " || $device [ 'os' ] == " ios " ) /// This shit only seems to work on IOS
{
$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 " );
}
2012-01-19 08:49:26 +00:00
2012-05-02 15:04:31 +00:00
echo ( " VLAN $vlan_id \n " );
2012-01-19 08:49:26 +00:00
2012-05-02 15:04:31 +00:00
if ( $vlan_data )
2012-01-19 08:49:26 +00:00
{
2012-05-02 15:04:31 +00:00
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 " );
2012-01-19 08:49:26 +00:00
}
2012-05-02 15:04:31 +00:00
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 " );
}
2012-01-19 08:49:26 +00:00
}
}
}
2012-05-02 15:04:31 +00:00
foreach ( $vlans_db as $domain_id => $vlans )
2012-01-19 08:49:26 +00:00
{
2012-05-02 15:04:31 +00:00
foreach ( $vlans as $vlan_id => $vlan )
2012-01-19 08:49:26 +00:00
{
2012-05-02 15:04:31 +00:00
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 ));
}
2012-01-19 08:49:26 +00:00
}
}
2012-05-02 15:04:31 +00:00
unset ( $device [ 'vlans' ]);
2012-01-19 08:49:26 +00:00
?>