I noticed the latest cvs copy of snmp-info was not showing the vlan memberships for vlans above 1024 from our C6500s, using the 'i_vlan_membership' method. Here's a patch that fixes that.
Regards,
cv
cvs diff: Diffing Info
Index: Info/CiscoVTP.pm
===================================================================
RCS file: /cvsroot/snmp-info/snmp-info/Info/CiscoVTP.pm,v
retrieving revision 1.14
diff -r1.14 CiscoVTP.pm
105c105,108
< 'vtp_trunk_native' => 'vlanTrunkPortNativeVlan',
---
> 'vtp_trunk_vlans2k' => 'vlanTrunkPortVlansEnabled2k',
> 'vtp_trunk_vlans3k' => 'vlanTrunkPortVlansEnabled3k',
> 'vtp_trunk_vlans4k' => 'vlanTrunkPortVlansEnabled4k',
> 'vtp_trunk_native' => 'vlanTrunkPortNativeVlan',
184c187,190
< my $ports_vlans = $vtp->vtp_trunk_vlans($partial) || {};
---
> my $ports_vlans = $vtp->vtp_trunk_vlans($partial) || {};
> my $ports_vlans2k = $vtp->vtp_trunk_vlans2k($partial) || {};
> my $ports_vlans3k = $vtp->vtp_trunk_vlans3k($partial) || {};
> my $ports_vlans4k = $vtp->vtp_trunk_vlans4k($partial) || {};
201c207,221
< # Get trunk ports
---
> # Get trunk ports. Determine which vlans are operational first.
> my %oper_vlans;
> foreach my $iid (keys %$vtp_vlans) {
> my $vlan = 0;
> my $vtp_dom = 0;
> my $state = $vtp_vlans->{$iid};
> next unless defined $state;
> next if $state !~ /operational/;
> if ($iid =~ /(\d+)\.(\d+)/ ) {
> $vtp_dom = $1;
> $vlan = $2;
> $oper_vlans{$vlan}++;
> }
> }
>
204,216c224,231
<
< foreach my $iid (keys %$vtp_vlans) {
< my $vlan = 0;
< my $vtp_dom =0;
< my $state = $vtp_vlans->{$iid};
< next unless defined $state;
< next if $state !~ /operational/;
< if ($iid =~ /(\d+)\.(\d+)/ ) {
< $vtp_dom = $1;
< $vlan = $2;
< }
<
< push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan]);
---
> foreach my $vlan (keys %oper_vlans) {
> push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan]);
> }
> }
> foreach my $port (keys %$ports_vlans2k) {
> my $vlanlist = [split(//, unpack("B*", $ports_vlans2k->{$port}))];
> foreach my $vlan (keys %oper_vlans) {
> push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan-1024]);
218a234,246
> foreach my $port (keys %$ports_vlans3k) {
> my $vlanlist = [split(//, unpack("B*", $ports_vlans3k->{$port}))];
> foreach my $vlan (keys %oper_vlans) {
> push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan-2048]);
> }
> }
> foreach my $port (keys %$ports_vlans4k) {
> my $vlanlist = [split(//, unpack("B*", $ports_vlans4k->{$port}))];
> foreach my $vlan (keys %oper_vlans) {
> push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan-3072]);
> }
> }
>
Logged In: YES
user_id=1368562
Originator: NO
here's a .patch file against CVS; note, it also includes a pvid hack, since Cisco does not implement Q-BRIDGE-MIB. I can't attach, so here it is inline.
--- /tmp/snmp-info-cvs/snmp-info/Info/CiscoVTP.pm 2007-02-19 20:06:04.000000000 -0700
+++ CiscoVTP.pm 2007-08-29 10:09:03.000000000 -0700
@@ -96,12 +96,17 @@
'i_vlan_2' => 'vmVlans2k',
'i_vlan_3' => 'vmVlans3k',
'i_vlan_4' => 'vmVlans4k',
+ 'i_voice_vlan' => 'vmVoiceVlanId',
+ 'i_pvid' => 'vlanTrunkPortNativeVlan',
# CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB
'v_cvi_if' => 'cviRoutedVlanIfIndex',
# CISCO-VTP-MIB::vlanTrunkPortTable
'vtp_trunk_mgmt_dom' => 'vlanTrunkPortManagementDomain',
'vtp_trunk_encaps_t' => 'vlanTrunkPortEncapsulationType',
'vtp_trunk_vlans' => 'vlanTrunkPortVlansEnabled',
+ 'vtp_trunk_vlans_2k' => 'vlanTrunkPortVlansEnabled2k',
+ 'vtp_trunk_vlans_3k' => 'vlanTrunkPortVlansEnabled3k',
+ 'vtp_trunk_vlans_4k' => 'vlanTrunkPortVlansEnabled4k',
'vtp_trunk_native' => 'vlanTrunkPortNativeVlan',
'vtp_trunk_rstat' => 'vlanTrunkPortRowStatus',
'vtp_trunk_dyn' => 'vlanTrunkPortDynamicState',
@@ -110,13 +115,32 @@
'vtp_trunk_encaps' => 'vlanTrunkPortEncapsulationOperType',
# TODO Add these tables if someone wants them..
# vtpEditControlTable
+ 'v_edit_operation' => 'vtpVlanEditOperation',
+ 'v_edit_apply_status' => 'vtpVlanApplyStatus',
+ 'v_edit_buffer_owner' => 'vtpVlanEditBufferOwner',
+ 'v_edit_config_rev' => 'vtpVlanEditConfigRevNumber',
+ 'v_edit_modified_vlan' => 'vtpVlanEditModifiedVlan',
+
# vtpVlanEditTable
+ 'v_edit_vlan_index' => 'vtpVlanEditIndex',
+ 'v_edit_vlan_state' => 'vtpVlanEditState',
+ 'v_edit_vlan_type' => 'vtpVlanEditType',
+ 'v_edit_vlan_name' => 'vtpVlanEditName',
# vtpStatsTable
);
%MUNGE = (
+ 'i_pvid' => \&munge_pvid,
);
+sub munge_pvid {
+ my $pvid = shift;
+ return undef if $pvid == 1;
+ return $pvid;
+}
+
+
+
sub v_index {
my $vtp = shift;
my $partial = shift;
@@ -173,7 +197,6 @@
$i_vlans{$iid} = $vlan;
}
}
-
return \%i_vlans;
}
@@ -182,6 +205,9 @@
my $partial = shift;
my $ports_vlans = $vtp->vtp_trunk_vlans($partial) || {};
+ my $ports_vlans_2k = $vtp->vtp_trunk_vlans_2k($partial) || {};
+ my $ports_vlans_3k = $vtp->vtp_trunk_vlans_3k($partial) || {};
+ my $ports_vlans_4k = $vtp->vtp_trunk_vlans_4k($partial) || {};
my $vtp_vlans = $vtp->v_state();
my $i_vlan = $vtp->i_vlan2($partial) || {};
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
@@ -199,9 +225,7 @@
}
# Get trunk ports
- foreach my $port (keys %$ports_vlans) {
- my $vlanlist = [split(//, unpack("B*", $ports_vlans->{$port}))];
-
+ my %oper_vlans;
foreach my $iid (keys %$vtp_vlans) {
my $vlan = 0;
my $vtp_dom =0;
@@ -212,10 +236,38 @@
$vtp_dom = $1;
$vlan = $2;
}
+ $oper_vlans{$vlan}++;
+ }
+ foreach my $port (keys %$ports_vlans) {
+ my $vlanlist = [split(//, unpack("B*", $ports_vlans->{$port}))];
+ foreach my $vlan (keys %oper_vlans) {
push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan]);
}
}
+
+ foreach my $port (keys %$ports_vlans_2k) {
+ my $vlanlist = [split(//, unpack("B*", $ports_vlans_2k->{$port}))];
+ foreach my $vlan (keys %oper_vlans) {
+ push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan-1024]);
+ }
+ }
+
+ foreach my $port (keys %$ports_vlans_3k) {
+ my $vlanlist = [split(//, unpack("B*", $ports_vlans_3k->{$port}))];
+ foreach my $vlan (keys %oper_vlans) {
+ push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan-2048]);
+ }
+ }
+
+ foreach my $port (keys %$ports_vlans_4k) {
+ my $vlanlist = [split(//, unpack("B*", $ports_vlans_4k->{$port}))];
+ foreach my $vlan (keys %oper_vlans) {
+ push(@{$i_vlan_membership->{$port}}, $vlan) if (@$vlanlist[$vlan-3072]);
+ }
+ }
+
+
return $i_vlan_membership;
}
Logged In: YES
user_id=1070425
Originator: YES
Any news on this patch (or the alternative one submitted by arcanez)? Thanks. cv
Logged In: YES
user_id=1135238
Originator: NO
Committed to CVS. Thanks.