diff --git a/Info/Layer2/C1900.pm b/Info/Layer2/C1900.pm index 71fb7e4c..0d20dfd3 100644 --- a/Info/Layer2/C1900.pm +++ b/Info/Layer2/C1900.pm @@ -261,6 +261,8 @@ sub i_vlan_membership { return $i_vlan_membership; } +sub i_vlan_membership_untagged { return; } + sub bp_index { my $c1900 = shift; my $partial = shift; @@ -470,6 +472,9 @@ bridge group IDs. print "Port: $port VLAN: $vlan\n"; } +=item $c1900->i_vlan_membership_untagged() + +Unsupported, returns nothing. =item $c1900->bp_index() diff --git a/Info/Layer2/HP4000.pm b/Info/Layer2/HP4000.pm index 04c6dca9..12f32717 100644 --- a/Info/Layer2/HP4000.pm +++ b/Info/Layer2/HP4000.pm @@ -376,6 +376,20 @@ sub i_vlan_membership { return $i_vlan_membership; } +sub i_vlan_membership_untagged { + my $hp = shift; + my $partial = shift; + + my $vlans = $hp->i_vlan($partial); + my $i_vlan_membership = {}; + foreach my $port (keys %$vlans) { + my $vlan = $vlans->{$port}; + push( @{ $i_vlan_membership->{$port} }, $vlan ); + } + + return $i_vlan_membership; +} + sub set_i_vlan { my $hp = shift; my $rv; @@ -680,6 +694,12 @@ It is the union of tagged, untagged, and auto ports. print "Port: $port VLAN: $vlan\n"; } +=item $hp->i_vlan_membership_untagged() + +Returns reference to hash of arrays: key = C, value = array of VLAN +IDs. These are the VLANs which are members of the untagged egress list for +the port. + =item $hp->v_index() Returns VLAN IDs diff --git a/Info/Layer3/F5.pm b/Info/Layer3/F5.pm index b4f19600..e231d137 100644 --- a/Info/Layer3/F5.pm +++ b/Info/Layer3/F5.pm @@ -255,6 +255,37 @@ sub i_vlan_membership { return $i_vlan_membership; } +sub i_vlan_membership_untagged { + my $f5 = shift; + my $partial = shift; + + my $index = $f5->i_index($partial) || {}; + my $tagged = $f5->sys_vm_tagged() || {}; + my $vlans = $f5->v_index() || {}; + + my $i_vlan_membership = {}; + foreach my $iid ( keys %$tagged ) { + + next unless $tagged->{$iid} eq 'false'; + # IID is length.vlan name index.length.interface index + # Split out and use as the IID to get the VLAN ID and ifIndex + my @iid_array = split /\./, $iid; + my $len = $iid_array[0]; + my $v_idx = join '.', ( splice @iid_array, 0, $len + 1 ); + my $idx = join '.', @iid_array; + + # Check to make sure we can map to a port + my $p_idx = $index->{$idx}; + next unless $p_idx; + + my $vlan = $vlans->{$v_idx}; + next unless $vlan; + + push( @{ $i_vlan_membership->{$idx} }, $vlan ); + } + return $i_vlan_membership; +} + 1; __END__ @@ -391,6 +422,12 @@ IDs. print "Port: $port VLAN: $vlan\n"; } +=item $f5->i_vlan_membership_untagged() + +Returns reference to hash of arrays: key = C, value = array of VLAN +IDs. These are the VLANs which are members of the untagged egress list for +the port. + =item $f5->v_index() Returns VLAN IDs