diff --git a/Netdisco/lib/App/Netdisco/Core/Discover.pm b/Netdisco/lib/App/Netdisco/Core/Discover.pm index 4f6059b7..eb64f1ca 100644 --- a/Netdisco/lib/App/Netdisco/Core/Discover.pm +++ b/Netdisco/lib/App/Netdisco/Core/Discover.pm @@ -708,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 @@ -791,10 +792,15 @@ sub store_neighbors { my $master = schema('netdisco')->resultset('DevicePort') ->single({ip => $device->ip, port => $portrow->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 => $remote_ip, - remote_port => - ($portrow->neighbor_port ? $portrow->neighbor_port->slave_of : undef), + remote_ip => ($peer ? $peer->ip : $remote_ip), + remote_port => ($peer ? $peer->slave_of : undef ), is_uplink => \"true", manual_topo => \"false", }); diff --git a/Netdisco/lib/App/Netdisco/DB/Result/DevicePort.pm b/Netdisco/lib/App/Netdisco/DB/Result/DevicePort.pm index 988f41c0..69c62c32 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/DevicePort.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/DevicePort.pm @@ -199,22 +199,6 @@ __PACKAGE__->belongs_to( } ); -=head2 neighbor_port - -Returns another row from the C table if this port has valid -C and C. - -=cut - -__PACKAGE__->belongs_to( - neighbor_port => 'App::Netdisco::DB::Result::DevicePort', { - 'foreign.ip' => 'self.remote_ip', - 'foreign.port' => 'self.remote_port', - }, { - join_type => 'LEFT', - } -); - =head2 neighbor_alias When a device port has an attached neighbor device, this relationship will @@ -267,7 +251,7 @@ __PACKAGE__->belongs_to( oui => 'App::Netdisco::DB::Result::Oui', =head1 ADDITIONAL METHODS -=head2 +=head2 neighbor Returns the Device entry for the neighbour Device on the given port.