- Implement v_index() and v_name() consistently across classes in support of Netdisco 0.96

- Don't query dynamic VLANs - table may be too large on some devices
This commit is contained in:
Eric Miller
2007-11-04 03:29:47 +00:00
parent b17f04e762
commit e51c9c1da2
3 changed files with 58 additions and 4 deletions

View File

@@ -92,7 +92,7 @@ use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
'qb_cv_untagged' => 'dot1qVlanCurrentUntaggedPorts',
'qb_cv_stat' => 'dot1qVlanStatus',
# Q-BRIDGE-MIB : dot1qVlanStaticTable
'qb_v_name' => 'dot1qVlanStaticName',
'v_name' => 'dot1qVlanStaticName',
'qb_v_egress' => 'dot1qVlanStaticEgressPorts',
'qb_v_fbdn_egress' => 'dot1qVlanForbiddenEgressPorts',
'qb_v_untagged' => 'dot1qVlanStaticUntaggedPorts',
@@ -231,6 +231,19 @@ sub i_stp_bridge {
return \%i_stp_bridge;
}
# Non-accessible, but needed for consistency with other classes
sub v_index {
my $bridge = shift;
my $partial = shift;
my $v_name = $bridge->v_name($partial);
my %v_index;
foreach my $idx (keys %$v_name) {
$v_index{$idx} = $idx;
}
return \%v_index;
}
sub i_vlan {
my $bridge = shift;
my $partial = shift;
@@ -268,15 +281,21 @@ sub i_vlan_membership {
# Use VlanCurrentTable if available since it will include dynamic
# VLANs. However, some devices do not populate the table.
my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
# 11/07 - Todo: Issue with some devices trying to query VlanCurrentTable
# as table may grow very large with frequent VLAN changes.
#my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
my $v_ports = $bridge->qb_v_egress() || {};
my $i_vlan_membership = {};
foreach my $idx (keys %$v_ports) {
next unless (defined $v_ports->{$idx});
my $portlist = [split(//, unpack("B*", $v_ports->{$idx}))];
my $ret = [];
my $vlan;
# Strip TimeFilter if we're using VlanCurrentTable
($vlan = $idx) =~ s/^\d+\.//;
#($vlan = $idx) =~ s/^\d+\.//;
# Convert portlist bit array to bp_index array
for (my $i = 0; $i <= $#$portlist; $i++) {

View File

@@ -302,6 +302,34 @@ sub bp_index {
# VLAN methods. Newer HPs use Q-BRIDGE, older use proprietary MIB. Use
# Q-BRIDGE if available.
sub v_index {
my $hp = shift;
my $partial = shift;
# Newer devices
my $q_index = $hp->SUPER::v_index($partial);
if (defined $q_index and scalar(keys %$q_index)){
return $q_index;
}
# Older devices
return $hp->hp_v_index($partial);
}
sub v_name {
my $hp = shift;
my $partial = shift;
# Newer devices
my $q_name = $hp->SUPER::v_name($partial);
if (defined $q_name and scalar(keys %$q_name)){
return $q_name;
}
# Older devices
return $hp->hp_v_name($partial);
}
sub i_vlan {
my $hp = shift;

View File

@@ -83,7 +83,7 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
'rc_i_vlan_tag' => 'rcVlanPortPerformTagging',
# From RAPID-CITY::rcVlanTable
'rc_vlan_id' => 'rcVlanId',
'rc_vlan_name' => 'rcVlanName',
'v_name' => 'rcVlanName',
'rc_vlan_color' => 'rcVlanColor',
'rc_vlan_if' => 'rcVlanIfIndex',
'rc_vlan_stg' => 'rcVlanStgId',
@@ -267,6 +267,13 @@ sub set_i_speed_admin {
return undef;
}
sub v_index {
my $rapidcity = shift;
my $partial = shift;
return $rapidcity->rc_vlan_id($partial);
}
sub i_vlan {
my $rapidcity = shift;
my $partial = shift;