diff --git a/lib/App/Netdisco/DB/ResultSet/Device.pm b/lib/App/Netdisco/DB/ResultSet/Device.pm index dda4e04a..c53043b8 100644 --- a/lib/App/Netdisco/DB/ResultSet/Device.pm +++ b/lib/App/Netdisco/DB/ResultSet/Device.pm @@ -399,6 +399,8 @@ sub carrying_vlan { die "vlan number required for carrying_vlan\n" if ref {} ne ref $cond or !exists $cond->{vlan}; + return $rs unless $cond->{vlan}; + return $rs ->search_rs({ 'vlans.vlan' => $cond->{vlan} }, { @@ -449,6 +451,7 @@ sub carrying_vlan_name { die "vlan name required for carrying_vlan_name\n" if ref {} ne ref $cond or !exists $cond->{name}; + $cond->{'vlans.vlan'} = { '>' => 0 }; $cond->{'vlans.description'} = { '-ilike' => delete $cond->{name} }; return $rs diff --git a/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm b/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm index b5d504a9..e5111e07 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm @@ -17,7 +17,8 @@ get '/ajax/content/device/vlans' => require_login sub { my $device = schema('netdisco')->resultset('Device') ->search_for_device($q) or send_error('Bad device', 400); - my @results = $device->vlans->search( {}, { order_by => 'vlan' } )->hri->all; + my @results = $device->vlans->search( + { vlan => { '>' => 0 } }, { order_by => 'vlan' } )->hri->all; return unless scalar @results; diff --git a/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm b/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm index 9a2945d3..866753fe 100644 --- a/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm +++ b/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm @@ -16,7 +16,10 @@ register_report( get '/ajax/content/report/vlaninventory' => require_login sub { my @results = schema('netdisco')->resultset('DeviceVlan')->search( - { 'me.description' => { '!=', 'NULL' } }, + { 'me.description' => { '!=', 'NULL' }, + 'me.vlan' => { '>' => 0 }, + 'ports.vlan' => { '>' => 0 }, + }, { join => { 'ports' => 'vlan' }, select => [ 'me.vlan', diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm b/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm index adf0cf08..2bf99039 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm @@ -48,6 +48,7 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { my $type = $i_vlan_type->{$entry}; foreach my $vlan (@{ $i_vlan_membership_untagged->{$entry} || [] }) { + next unless $vlan; next if $this_port_vlans{$vlan}; my $native = ((defined $i_vlan->{$entry}) and ($vlan eq $i_vlan->{$entry})) ? 't' : 'f'; @@ -66,6 +67,7 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { } foreach my $vlan (@{ $i_vlan_membership->{$entry} || [] }) { + next unless $vlan; next if $this_port_vlans{$vlan}; my $native = ((defined $i_vlan->{$entry}) and ($vlan eq $i_vlan->{$entry})) ? 't' : 'f'; @@ -100,6 +102,7 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { # add named vlans to the device foreach my $entry (keys %$v_name) { my $vlan = $v_index->{$entry}; + next unless $vlan; next unless defined $vlan and $vlan; ++$d_seen{$vlan}; @@ -112,6 +115,7 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { # also add unnamed vlans to the device foreach my $vlan (keys %p_seen) { + next unless $vlan; next if $d_seen{$vlan}; push @devicevlans, { vlan => $vlan, diff --git a/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm b/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm index 9ea9dfb9..fc96e8f1 100644 --- a/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm +++ b/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm @@ -54,8 +54,9 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { # reverse sort allows vlan 0 entries to be included only as fallback foreach my $vlan (reverse sort keys %$fwtable) { foreach my $port (keys %{ $fwtable->{$vlan} }) { + my $vlabel = ($vlan ? $vlan : 'unknown'); debug sprintf ' [%s] macsuck - port %s vlan %s : %s nodes', - $device->ip, $port, $vlan, scalar keys %{ $fwtable->{$vlan}->{$port} }; + $device->ip, $port, $vlabel, scalar keys %{ $fwtable->{$vlan}->{$port} }; # make sure this port is UP in netdisco (unless it's a lag master, # because we can still see nodes without a functioning aggregate) @@ -200,7 +201,7 @@ sub get_vlan_list { } debug sprintf ' [%s] macsuck - VLANs: %s', $device->ip, - (join ',', sort keys %vlans); + (join ',', sort grep {$_} keys %vlans); my @ok_vlans = (); foreach my $vlan (sort keys %vlans) { @@ -240,11 +241,12 @@ sub get_vlan_list { next; } - if ($vlan == 0 or $vlan > 4094) { + if ($vlan > 4094) { debug sprintf ' [%s] macsuck - invalid VLAN number %s', $device->ip, $vlan; next; } + next if $vlan == 0; # quietly skip # check in use by a port on this device if (!$vlans{$vlan} && !setting('macsuck_all_vlans')) { diff --git a/share/views/ajax/device/ports.tt b/share/views/ajax/device/ports.tt index ec10e2df..d373a90b 100644 --- a/share/views/ajax/device/ports.tt +++ b/share/views/ajax/device/ports.tt @@ -189,14 +189,16 @@ data-field="c_pvid" data-for-device="[% device.ip | html_entity %]" data-for-port="[% row.port | html_entity %]">