Add i_vlan_membership_untagged() to L3::F5, L2::C1900, and L2::HP4000

This commit is contained in:
Eric A. Miller
2014-11-06 23:02:35 -05:00
parent ce8bb68200
commit 9aca213a5f
3 changed files with 62 additions and 0 deletions

View File

@@ -261,6 +261,8 @@ sub i_vlan_membership {
return $i_vlan_membership; return $i_vlan_membership;
} }
sub i_vlan_membership_untagged { return; }
sub bp_index { sub bp_index {
my $c1900 = shift; my $c1900 = shift;
my $partial = shift; my $partial = shift;
@@ -470,6 +472,9 @@ bridge group IDs.
print "Port: $port VLAN: $vlan\n"; print "Port: $port VLAN: $vlan\n";
} }
=item $c1900->i_vlan_membership_untagged()
Unsupported, returns nothing.
=item $c1900->bp_index() =item $c1900->bp_index()

View File

@@ -376,6 +376,20 @@ sub i_vlan_membership {
return $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 { sub set_i_vlan {
my $hp = shift; my $hp = shift;
my $rv; my $rv;
@@ -680,6 +694,12 @@ It is the union of tagged, untagged, and auto ports.
print "Port: $port VLAN: $vlan\n"; print "Port: $port VLAN: $vlan\n";
} }
=item $hp->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=item $hp->v_index() =item $hp->v_index()
Returns VLAN IDs Returns VLAN IDs

View File

@@ -255,6 +255,37 @@ sub i_vlan_membership {
return $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; 1;
__END__ __END__
@@ -391,6 +422,12 @@ IDs.
print "Port: $port VLAN: $vlan\n"; print "Port: $port VLAN: $vlan\n";
} }
=item $f5->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=item $f5->v_index() =item $f5->v_index()
Returns VLAN IDs Returns VLAN IDs