#581 skip storing and displaying fabricated vlan 0

This commit is contained in:
Oliver Gorwits
2019-05-30 06:58:34 +01:00
parent 7d9c86cee1
commit 2c138a5690
6 changed files with 25 additions and 8 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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',

View File

@@ -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,

View File

@@ -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')) {

View File

@@ -189,14 +189,16 @@
data-field="c_pvid" data-for-device="[% device.ip | html_entity %]" data-for-port="[% row.port | html_entity %]">
<i class="icon-edit nd_edit-icon"></i>
<div class="nd_editable-cell-content">
[% IF row.vlan %][% row.vlan | html_entity %][% END %]
[% IF row.vlan AND row.vlan > 0 %][% row.vlan | html_entity %][% END %]
</div>
</td>
[% ELSE %]
<td>
[% IF row.vlan AND row.vlan > 0 %]
<a class="nd_linkcell"
href="[% uri_for('/search') %]?tab=vlan&q=[% row.vlan | uri %]">
[% row.vlan | html_entity %]</a>
[% END %]
</td>
[% END %]
[% END %]
@@ -204,14 +206,16 @@
[% IF params.c_vmember %]
<td>
[% IF vlans.$portname.vlan_count <= settings.devport_vlan_limit %]
[% SET vlan_count = vlans.$portname.vlan_count %]
[% SET output = '' %]
[% FOREACH vlan IN vlans.$portname.vlan_set.nsort %]
[% IF vlan == 0 %][% SET vlan_count = (vlan_count - 1) %][% NEXT %][% END %]
[% SET output = output _
'<a href="' _ uri_for('/search') _ '?tab=vlan&q=' _ vlan _ '">' _ vlan _ '</a>' %]
[% SET output = output _ ', ' IF NOT loop.last %]
[% END %]
[% IF vlans.$portname.vlan_count > 10 %] [%# TODO make this a settable variable %]
[% SET output = '<div class="nd_vlan-total">(' _ vlans.$portname.vlan_count
[% IF vlan_count > 10 %] [%# TODO make this a settable variable %]
[% SET output = '<div class="nd_vlan-total">(' _ vlan_count
_ ')</div><span class="nd_linkcell nd_collapse-vlans">
<div class="nd_arrow-up-down-left icon-chevron-up icon-large"></div>Show VLANs</span>
<div class="nd_collapsing nd_collapse-pre-hidden">' _ output %]