move wap and phone detection into portproperties worker
This commit is contained in:
		| @@ -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; | ||||
|   | ||||
| @@ -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} }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user