From d24d0749fc41b1a72edcee4b200885ee392f4e43 Mon Sep 17 00:00:00 2001 From: "Eric A. Miller" Date: Sun, 20 Oct 2013 22:36:50 -0400 Subject: [PATCH 1/2] Better logic for determining VLANs in use on ports for macsuck on community string indexed devices. The previous logic did not exclude VLAN interfaces, effectively ignoring the macsuck_all_vlans default setting of false. --- Netdisco/lib/App/Netdisco/Core/Macsuck.pm | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Core/Macsuck.pm b/Netdisco/lib/App/Netdisco/Core/Macsuck.pm index 1d03a261..9ef41ff1 100644 --- a/Netdisco/lib/App/Netdisco/Core/Macsuck.pm +++ b/Netdisco/lib/App/Netdisco/Core/Macsuck.pm @@ -192,13 +192,26 @@ sub _get_vlan_list { my (%vlans, %vlan_names); my $i_vlan = $snmp->i_vlan || {}; + my $trunks = $snmp->i_vlan_membership || {}; + my $i_type = $snmp->i_type || {}; # get list of vlans in use while (my ($idx, $vlan) = each %$i_vlan) { # hack: if vlan id comes as 1.142 instead of 142 $vlan =~ s/^\d+\.//; - - ++$vlans{$vlan}; + + # VLANs are ports interfaces capture VLAN, but don't count as in use + # Port channels are also 'propVirtual', but capture while checking + # trunk VLANs below + if (exists $i_type->{$idx} and $i_type->{$idx} eq 'propVirtual') { + $vlans{$vlan} ||= 0; + } + else { + ++$vlans{$vlan}; + } + foreach my $t_vlan (@{$trunks->{$idx}}) { + ++$vlans{$t_vlan}; + } } unless (scalar keys %vlans) { @@ -214,7 +227,8 @@ sub _get_vlan_list { (my $vlan = $idx) =~ s/^\d+\.//; # just in case i_vlan is different to v_name set - ++$vlans{$vlan}; + # capture the VLAN, but it's not in use on a port + $vlans{$vlan} ||= 0; $vlan_names{$vlan} = $name; } @@ -267,8 +281,7 @@ sub _get_vlan_list { } # check in use by a port on this device - if (scalar keys %$i_vlan and not exists $vlans{$vlan} - and not setting('macsuck_all_vlans')) { + if (!$vlans{$vlan} && !setting('macsuck_all_vlans')) { debug sprintf ' [%s] macsuck VLAN %s/%s - not in use by any port - skipping.', From 5ec0a3bf64d1cd2d8fb74129986e3642453270b9 Mon Sep 17 00:00:00 2001 From: "Eric A. Miller" Date: Mon, 21 Oct 2013 00:04:25 -0400 Subject: [PATCH 2/2] Make macsuck_no_vlan option consistent with netdisco 1.x. fddi-default,token-ring-default,fddinet-default,trnet-default may be added to trunk ports even though not in use on device. --- Netdisco/lib/App/Netdisco/Manual/Configuration.pod | 3 ++- Netdisco/share/config.yml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Manual/Configuration.pod b/Netdisco/lib/App/Netdisco/Manual/Configuration.pod index c2700aca..617cef76 100644 --- a/Netdisco/lib/App/Netdisco/Manual/Configuration.pod +++ b/Netdisco/lib/App/Netdisco/Manual/Configuration.pod @@ -390,7 +390,8 @@ VLAN which is not defined in the VLAN database. =head3 C -Value: List of VLAN names or numbers. Default: Empty List. +Value: List of VLAN names or numbers. Default: fddi-default, +token-ring-default,fddinet-default,trnet-default. On some devices, per-VLAN macsuck will timeout with specific VLAN numbers. You can put those numbers (or their names) into this list to have them skipped. diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index fc64639d..0b2482e2 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -79,7 +79,7 @@ macsuck_no: [] macksuck_only: [] macsuck_all_vlans: false macsuck_no_unnamed: false -macsuck_no_vlan: [] +macsuck_no_vlan: [fddi-default,token-ring-default,fddinet-default,trnet-default] macsuck_no_devicevlan: [] macsuck_bleed: false macsuck_min_age: 0