LAG support.

Also, archive disappeared nodes from device after macsuck.

Squashed commit of the following:

commit 6d16cddaab
Merge: 37d9bda 3fdf780
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 19 15:48:41 2014 +0000

    Merge branch 'master' of ssh://git.code.sf.net/p/netdisco/netdisco-ng into og-agg

commit 37d9bda2bb
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 18:50:22 2014 +0000

    release 2.021000_004

commit 3939a2a51c
Merge: cf23636 571d57d
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 18:45:14 2014 +0000

    Merge branch 'og-agg' of ssh://olly_g@git.code.sf.net/p/netdisco/netdisco-ng into og-agg

commit cf23636ddf
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 18:43:59 2014 +0000

    archive disappeared nodes from device - really important!

commit 571d57dcc7
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 18:20:51 2014 +0000

    release 2.021000_003

commit 444bc1e81d
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 17:51:54 2014 +0000

    protect sprintf from undefined remote_type

commit 5b875c4641
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 17:49:40 2014 +0000

    tidy connected device+node layout

commit c09dddb7d1
Merge: 4f5501c 95fc6b1
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 17:46:39 2014 +0000

    Merge branch 'og-agg' of ssh://olly_g@git.code.sf.net/p/netdisco/netdisco-ng into og-agg

commit 4f5501c613
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 17:46:23 2014 +0000

    allow sanity checks on lag member before moving node

commit 95fc6b18dc
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 14:02:19 2014 +0000

    release 2.021000_002

commit 8b809c445f
Merge: 04d486e fe3e8e3
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 13:58:31 2014 +0000

    Merge branch 'og-agg' of ssh://git.code.sf.net/p/netdisco/netdisco-ng into og-agg

commit fe3e8e3ef2
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 13:57:31 2014 +0000

    do not set master neigh if master is a slave

commit 04d486e433
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 13:38:45 2014 +0000

    display remote ip if only remote ip

commit 14f9eb01ad
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 13:35:54 2014 +0000

    show all members of lag when searching for lag master

commit 5b2a0a0a4b
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 13:35:16 2014 +0000

    fix copy of remote master to local master remote_port

commit 86a9854f39
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 10:00:13 2014 +0000

    show both link and device type icons

commit 88510552e5
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 09:57:29 2014 +0000

    hide neighbor device ID and add sidebar option to show

commit 29da3097cb
Merge: 8bca30d 9fe92fb
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 09:04:15 2014 +0000

    Merge branch 'og-agg' of ssh://git.code.sf.net/p/netdisco/netdisco-ng into og-agg

commit 9fe92fb5e8
Merge: 6620a03 5557811
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 09:03:02 2014 +0000

    Merge branch 'og-agg' of ssh://olly_g@git.code.sf.net/p/netdisco/netdisco-ng into og-agg

commit 6620a03686
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 08:56:13 2014 +0000

    also store master neighbor port

commit 8bca30d085
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 00:41:46 2014 +0000

    release 2.021000_001

commit 5557811aeb
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Mon Jan 13 00:38:18 2014 +0000

    fix icon placement in editable device port cells

commit 25292e1ce8
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 22:20:08 2014 +0000

    fix name of class

commit 99ce56d794
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 22:13:53 2014 +0000

    remove brackets from lag name

commit 27aa80ed93
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 22:12:06 2014 +0000

    rename link agg legend

commit 84ed4c5008
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 22:11:15 2014 +0000

    move lag member icon into port icon column

commit 67c9c783ec
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 21:58:11 2014 +0000

    fix Cisco stack port ignore

commit 4531c61246
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 21:51:41 2014 +0000

    move nodes to lag master port

commit ffc6b9c315
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 20:45:58 2014 +0000

    use group icon for slave and master

commit 68fd345e37
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 20:34:01 2014 +0000

    indicate aggregate master

commit 79c69f5a0f
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 19:14:48 2014 +0000

    show aggreate parent in device ports

commit 3a4beed2f1
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 18:46:25 2014 +0000

    store aggregate port into db

commit fd7bb0cd62
Author: Oliver Gorwits <oliver@cpan.org>
Date:   Sun Jan 12 17:49:39 2014 +0000

    add device_port cols for aggregate links data
This commit is contained in:
Oliver Gorwits
2014-01-19 15:51:47 +00:00
parent 3fdf7802b6
commit 642546fd24
15 changed files with 199 additions and 69 deletions

View File

@@ -206,6 +206,7 @@ sub store_interfaces {
my $i_stp_state = $snmp->i_stp_state;
my $i_vlan = $snmp->i_vlan;
my $i_lastchange = $snmp->i_lastchange;
my $agg_ports = $snmp->agg_ports;
# clear the cached uptime and get a new one
my $dev_uptime = $snmp->load_uptime;
@@ -278,10 +279,22 @@ sub store_interfaces {
type => $i_type->{$entry},
vlan => $i_vlan->{$entry},
pvid => $i_vlan->{$entry},
is_master => 'false',
slave_of => undef,
lastchange => $lc,
};
}
# must do this after building %interfaces so that we can set is_master
foreach my $sidx (keys %$agg_ports) {
my $slave = $interfaces->{$sidx} or next;
my $master = $interfaces->{ $agg_ports->{$sidx} } or next;
next unless exists $interfaces{$slave} and exists $interfaces{$master};
$interfaces{$slave}->{slave_of} = $master;
$interfaces{$master}->{is_master} = 'true';
}
schema('netdisco')->resultset('DevicePort')->txn_do_locked(sub {
my $gone = $device->ports->delete({keep_nodes => 1});
debug sprintf ' [%s] interfaces - removed %d interfaces',
@@ -695,18 +708,19 @@ sub store_neighbors {
# IP Phone and WAP detection type fixup
if (defined $remote_type) {
my $phone_flag = grep {/phone/i} @$remote_cap;
my $ap_flag = grep {/wlanAccessPoint/} @$remote_cap;
if ($phone_flag or $remote_type =~ m/(mitel.5\d{3})/i) {
$remote_type = 'IP Phone: '. $remote_type
if $remote_type !~ /ip phone/i;
}
elsif ($ap_flag) {
$remote_type = 'AP: '. $remote_type;
}
else {
$remote_type ||= '';
}
my $phone_flag = grep {/phone/i} @$remote_cap;
my $ap_flag = grep {/wlanAccessPoint/} @$remote_cap;
if ($phone_flag or $remote_type =~ m/(mitel.5\d{3})/i) {
$remote_type = 'IP Phone: '. $remote_type
if $remote_type !~ /ip phone/i;
}
elsif ($ap_flag) {
$remote_type = 'AP: '. $remote_type;
}
else {
$remote_type ||= '';
}
}
# hack for devices seeing multiple neighbors on the port
@@ -719,7 +733,7 @@ sub store_neighbors {
foreach my $n (@$remote_ip) {
debug sprintf
' [%s] neigh - adding neighbor %s, type [%s], on %s to discovery queue',
$device->ip, $n, $remote_type, $port;
$device->ip, $n, ($remote_type || ''), $port;
push @to_discover, [$n, $remote_type];
}
}
@@ -733,7 +747,7 @@ sub store_neighbors {
if (wantarray) {
debug sprintf
' [%s] neigh - adding neighbor %s, type [%s], on %s to discovery queue',
$device->ip, $remote_ip, $remote_type, $port;
$device->ip, $remote_ip, ($remote_type || ''), $port;
push @to_discover, [$remote_ip, $remote_type];
}
@@ -773,6 +787,26 @@ sub store_neighbors {
is_uplink => \"true",
manual_topo => \"false",
});
if (defined $portrow->slave_of and
my $master = schema('netdisco')->resultset('DevicePort')
->single({ip => $device->ip, port => $portrow->slave_of})) {
if (not ($portrow->is_master or defined $master->slave_of)) {
# TODO needs refactoring - this is quite expensive
my $peer = schema('netdisco')->resultset('DevicePort')->find({
ip => $portrow->neighbor->ip,
port => $portrow->remote_port,
}) if $portrow->neighbor;
$master->update({
remote_ip => ($peer ? $peer->ip : $remote_ip),
remote_port => ($peer ? $peer->slave_of : undef ),
is_uplink => \"true",
manual_topo => \"false",
});
}
}
}
return @to_discover;
@@ -860,7 +894,7 @@ sub discover_new_neighbors {
if (not is_discoverable($device, $remote_type)) {
debug sprintf
' queue - %s, type [%s] excluded by discover_* config',
$ip, $remote_type;
$ip, ($remote_type || '');
next;
}