diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm b/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm index c4f6d560..154b7038 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm @@ -5,8 +5,7 @@ use App::Netdisco::Worker::Plugin; use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Transport::SNMP (); -use App::Netdisco::Util::Device - qw/get_device match_devicetype is_discoverable/; +use App::Netdisco::Util::Device qw/get_device is_discoverable/; use App::Netdisco::Util::Permission 'check_acl_no'; use App::Netdisco::JobQueue 'jq_insert'; use Dancer::Plugin::DBIC 'schema'; @@ -127,7 +126,6 @@ sub store_neighbors { my $c_port = $snmp->c_port; my $c_id = $snmp->c_id; my $c_platform = $snmp->c_platform; - my $c_cap = $snmp->c_cap; # v4 and v6 neighbor tables my $c_ip = ($snmp->c_ip || {}); @@ -139,7 +137,7 @@ sub store_neighbors { # now combine them, v6 wins $c_ip = { %$c_ip, %c_ipv6 }; - foreach my $entry (sort (List::MoreUtils::uniq( (keys %$c_ip), (keys %$c_cap) ))) { + foreach my $entry (sort (List::MoreUtils::uniq( keys %$c_ip ))) { if (!defined $c_if->{$entry} or !defined $interfaces->{ $c_if->{$entry} }) { debug sprintf ' [%s] neigh - port for IID:%s not resolved, skipping', $device->ip, $entry; @@ -162,36 +160,17 @@ sub store_neighbors { next; } - my $remote_ip = $c_ip->{$entry}; - my $remote_port = undef; - my $remote_type = Encode::decode('UTF-8', $c_platform->{$entry} || ''); - my $remote_id = Encode::decode('UTF-8', $c_id->{$entry}); - my $remote_cap = $c_cap->{$entry} || []; - - # IP Phone and WAP detection type fixup - if (scalar @$remote_cap or $remote_type) { - my $phone_flag = grep {match_devicetype($_, 'phone_capabilities')} - @$remote_cap; - my $ap_flag = grep {match_devicetype($_, 'wap_capabilities')} - @$remote_cap; - - if ($phone_flag or match_devicetype($remote_type, 'phone_platforms')) { - $remote_type = 'IP Phone: '. $remote_type - if $remote_type !~ /ip.phone/i; - } - elsif ($ap_flag or match_devicetype($remote_type, 'wap_platforms')) { - $remote_type = 'AP: '. $remote_type; - } - - $portrow->update({remote_type => $remote_type}); - } - if ($portrow->manual_topo) { info sprintf ' [%s] neigh - %s has manually defined topology', $device->ip, $port; next; } + my $remote_ip = $c_ip->{$entry}; + my $remote_port = undef; + my $remote_type = Encode::decode('UTF-8', $c_platform->{$entry} || ''); + my $remote_id = Encode::decode('UTF-8', $c_id->{$entry}); + next unless $remote_ip; my $r_ip = NetAddr::IP::Lite->new($remote_ip) or next; $remote_ip = $r_ip->addr; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/PortProperties.pm b/lib/App/Netdisco/Worker/Plugin/Discover/PortProperties.pm index a3bb2a91..03663be8 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/PortProperties.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/PortProperties.pm @@ -7,6 +7,9 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; +use Encode; +use App::Netdisco::Util::Device 'match_devicetype'; + register_worker({ phase => 'main', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; @@ -26,22 +29,30 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { $properties{ $port }->{error_disable_cause} = $err_cause->{$idx}; } - my $lldp_if = $snmp->lldp_if || {}; - my $lldp_cap = $snmp->lldp_cap || {}; + my $c_if = $snmp->c_if || {}; + my $c_cap = $snmp->c_cap || {}; + my $c_platform = $snmp->c_platform || {}; + my $rem_media_cap = $snmp->lldp_media_cap || {}; my $rem_vendor = $snmp->lldp_rem_vendor || {}; my $rem_model = $snmp->lldp_rem_model || {}; my $rem_os_ver = $snmp->lldp_rem_sw_rev || {}; my $rem_serial = $snmp->lldp_rem_serial || {}; - foreach my $idx (keys %$lldp_if) { - my $port = $interfaces->{ $lldp_if->{$idx} }; + foreach my $idx (keys %$c_if) { + my $port = $interfaces->{ $c_if->{$idx} }; next unless $port; + my $remote_cap = $c_cap->{$idx} || []; + my $remote_type = Encode::decode('UTF-8', $c_platform->{$idx} || ''); + $properties{ $port }->{remote_is_wap} = 'true' - if scalar grep {defined && m/^wlanAccessPoint$/} @{ $lldp_cap->{$idx} }; + if scalar grep {match_devicetype($_, 'wap_capabilities')} @$remote_cap + or match_devicetype($remote_type, 'wap_platforms'); + $properties{ $port }->{remote_is_phone} = 'true' - if scalar grep {defined && m/^telephone$/} @{ $lldp_cap->{$idx} }; + if scalar grep {match_devicetype($_, 'phone_capabilities')} @$remote_cap + or match_devicetype($remote_type, 'phone_platforms'); next unless scalar grep {defined && m/^inventory$/} @{ $rem_media_cap->{$idx} };