- 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:
@@ -92,7 +92,7 @@ use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
|||||||
'qb_cv_untagged' => 'dot1qVlanCurrentUntaggedPorts',
|
'qb_cv_untagged' => 'dot1qVlanCurrentUntaggedPorts',
|
||||||
'qb_cv_stat' => 'dot1qVlanStatus',
|
'qb_cv_stat' => 'dot1qVlanStatus',
|
||||||
# Q-BRIDGE-MIB : dot1qVlanStaticTable
|
# Q-BRIDGE-MIB : dot1qVlanStaticTable
|
||||||
'qb_v_name' => 'dot1qVlanStaticName',
|
'v_name' => 'dot1qVlanStaticName',
|
||||||
'qb_v_egress' => 'dot1qVlanStaticEgressPorts',
|
'qb_v_egress' => 'dot1qVlanStaticEgressPorts',
|
||||||
'qb_v_fbdn_egress' => 'dot1qVlanForbiddenEgressPorts',
|
'qb_v_fbdn_egress' => 'dot1qVlanForbiddenEgressPorts',
|
||||||
'qb_v_untagged' => 'dot1qVlanStaticUntaggedPorts',
|
'qb_v_untagged' => 'dot1qVlanStaticUntaggedPorts',
|
||||||
@@ -231,6 +231,19 @@ sub i_stp_bridge {
|
|||||||
return \%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 {
|
sub i_vlan {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -268,15 +281,21 @@ sub i_vlan_membership {
|
|||||||
|
|
||||||
# Use VlanCurrentTable if available since it will include dynamic
|
# Use VlanCurrentTable if available since it will include dynamic
|
||||||
# VLANs. However, some devices do not populate the table.
|
# 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 = {};
|
my $i_vlan_membership = {};
|
||||||
foreach my $idx (keys %$v_ports) {
|
foreach my $idx (keys %$v_ports) {
|
||||||
|
next unless (defined $v_ports->{$idx});
|
||||||
my $portlist = [split(//, unpack("B*", $v_ports->{$idx}))];
|
my $portlist = [split(//, unpack("B*", $v_ports->{$idx}))];
|
||||||
my $ret = [];
|
my $ret = [];
|
||||||
my $vlan;
|
my $vlan;
|
||||||
# Strip TimeFilter if we're using VlanCurrentTable
|
# Strip TimeFilter if we're using VlanCurrentTable
|
||||||
($vlan = $idx) =~ s/^\d+\.//;
|
#($vlan = $idx) =~ s/^\d+\.//;
|
||||||
|
|
||||||
# Convert portlist bit array to bp_index array
|
# Convert portlist bit array to bp_index array
|
||||||
for (my $i = 0; $i <= $#$portlist; $i++) {
|
for (my $i = 0; $i <= $#$portlist; $i++) {
|
||||||
|
|||||||
@@ -302,6 +302,34 @@ sub bp_index {
|
|||||||
# VLAN methods. Newer HPs use Q-BRIDGE, older use proprietary MIB. Use
|
# VLAN methods. Newer HPs use Q-BRIDGE, older use proprietary MIB. Use
|
||||||
# Q-BRIDGE if available.
|
# 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 {
|
sub i_vlan {
|
||||||
my $hp = shift;
|
my $hp = shift;
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
|||||||
'rc_i_vlan_tag' => 'rcVlanPortPerformTagging',
|
'rc_i_vlan_tag' => 'rcVlanPortPerformTagging',
|
||||||
# From RAPID-CITY::rcVlanTable
|
# From RAPID-CITY::rcVlanTable
|
||||||
'rc_vlan_id' => 'rcVlanId',
|
'rc_vlan_id' => 'rcVlanId',
|
||||||
'rc_vlan_name' => 'rcVlanName',
|
'v_name' => 'rcVlanName',
|
||||||
'rc_vlan_color' => 'rcVlanColor',
|
'rc_vlan_color' => 'rcVlanColor',
|
||||||
'rc_vlan_if' => 'rcVlanIfIndex',
|
'rc_vlan_if' => 'rcVlanIfIndex',
|
||||||
'rc_vlan_stg' => 'rcVlanStgId',
|
'rc_vlan_stg' => 'rcVlanStgId',
|
||||||
@@ -267,6 +267,13 @@ sub set_i_speed_admin {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub v_index {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $rapidcity->rc_vlan_id($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub i_vlan {
|
sub i_vlan {
|
||||||
my $rapidcity = shift;
|
my $rapidcity = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|||||||
Reference in New Issue
Block a user