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 aliased 'App::Netdisco::Worker::Status';
|
||||||
|
|
||||||
use App::Netdisco::Transport::SNMP ();
|
use App::Netdisco::Transport::SNMP ();
|
||||||
use App::Netdisco::Util::Device
|
use App::Netdisco::Util::Device qw/get_device is_discoverable/;
|
||||||
qw/get_device match_devicetype is_discoverable/;
|
|
||||||
use App::Netdisco::Util::Permission 'check_acl_no';
|
use App::Netdisco::Util::Permission 'check_acl_no';
|
||||||
use App::Netdisco::JobQueue 'jq_insert';
|
use App::Netdisco::JobQueue 'jq_insert';
|
||||||
use Dancer::Plugin::DBIC 'schema';
|
use Dancer::Plugin::DBIC 'schema';
|
||||||
@@ -127,7 +126,6 @@ sub store_neighbors {
|
|||||||
my $c_port = $snmp->c_port;
|
my $c_port = $snmp->c_port;
|
||||||
my $c_id = $snmp->c_id;
|
my $c_id = $snmp->c_id;
|
||||||
my $c_platform = $snmp->c_platform;
|
my $c_platform = $snmp->c_platform;
|
||||||
my $c_cap = $snmp->c_cap;
|
|
||||||
|
|
||||||
# v4 and v6 neighbor tables
|
# v4 and v6 neighbor tables
|
||||||
my $c_ip = ($snmp->c_ip || {});
|
my $c_ip = ($snmp->c_ip || {});
|
||||||
@@ -139,7 +137,7 @@ sub store_neighbors {
|
|||||||
# now combine them, v6 wins
|
# now combine them, v6 wins
|
||||||
$c_ip = { %$c_ip, %c_ipv6 };
|
$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} }) {
|
if (!defined $c_if->{$entry} or !defined $interfaces->{ $c_if->{$entry} }) {
|
||||||
debug sprintf ' [%s] neigh - port for IID:%s not resolved, skipping',
|
debug sprintf ' [%s] neigh - port for IID:%s not resolved, skipping',
|
||||||
$device->ip, $entry;
|
$device->ip, $entry;
|
||||||
@@ -162,36 +160,17 @@ sub store_neighbors {
|
|||||||
next;
|
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) {
|
if ($portrow->manual_topo) {
|
||||||
info sprintf ' [%s] neigh - %s has manually defined topology',
|
info sprintf ' [%s] neigh - %s has manually defined topology',
|
||||||
$device->ip, $port;
|
$device->ip, $port;
|
||||||
next;
|
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;
|
next unless $remote_ip;
|
||||||
my $r_ip = NetAddr::IP::Lite->new($remote_ip) or next;
|
my $r_ip = NetAddr::IP::Lite->new($remote_ip) or next;
|
||||||
$remote_ip = $r_ip->addr;
|
$remote_ip = $r_ip->addr;
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ use aliased 'App::Netdisco::Worker::Status';
|
|||||||
use App::Netdisco::Transport::SNMP ();
|
use App::Netdisco::Transport::SNMP ();
|
||||||
use Dancer::Plugin::DBIC 'schema';
|
use Dancer::Plugin::DBIC 'schema';
|
||||||
|
|
||||||
|
use Encode;
|
||||||
|
use App::Netdisco::Util::Device 'match_devicetype';
|
||||||
|
|
||||||
register_worker({ phase => 'main', driver => 'snmp' }, sub {
|
register_worker({ phase => 'main', driver => 'snmp' }, sub {
|
||||||
my ($job, $workerconf) = @_;
|
my ($job, $workerconf) = @_;
|
||||||
|
|
||||||
@@ -26,22 +29,30 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub {
|
|||||||
$properties{ $port }->{error_disable_cause} = $err_cause->{$idx};
|
$properties{ $port }->{error_disable_cause} = $err_cause->{$idx};
|
||||||
}
|
}
|
||||||
|
|
||||||
my $lldp_if = $snmp->lldp_if || {};
|
my $c_if = $snmp->c_if || {};
|
||||||
my $lldp_cap = $snmp->lldp_cap || {};
|
my $c_cap = $snmp->c_cap || {};
|
||||||
|
my $c_platform = $snmp->c_platform || {};
|
||||||
|
|
||||||
my $rem_media_cap = $snmp->lldp_media_cap || {};
|
my $rem_media_cap = $snmp->lldp_media_cap || {};
|
||||||
my $rem_vendor = $snmp->lldp_rem_vendor || {};
|
my $rem_vendor = $snmp->lldp_rem_vendor || {};
|
||||||
my $rem_model = $snmp->lldp_rem_model || {};
|
my $rem_model = $snmp->lldp_rem_model || {};
|
||||||
my $rem_os_ver = $snmp->lldp_rem_sw_rev || {};
|
my $rem_os_ver = $snmp->lldp_rem_sw_rev || {};
|
||||||
my $rem_serial = $snmp->lldp_rem_serial || {};
|
my $rem_serial = $snmp->lldp_rem_serial || {};
|
||||||
|
|
||||||
foreach my $idx (keys %$lldp_if) {
|
foreach my $idx (keys %$c_if) {
|
||||||
my $port = $interfaces->{ $lldp_if->{$idx} };
|
my $port = $interfaces->{ $c_if->{$idx} };
|
||||||
next unless $port;
|
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'
|
$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'
|
$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} };
|
next unless scalar grep {defined && m/^inventory$/} @{ $rem_media_cap->{$idx} };
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user