refactor layer and pseudo checks

This commit is contained in:
Oliver Gorwits
2017-09-13 19:22:40 +01:00
parent 753acc607f
commit 58cd488ccc
10 changed files with 40 additions and 33 deletions

View File

@@ -17,7 +17,10 @@ register_worker({ stage => 'check' }, sub {
unless $device->in_storage;
return Status->defer("arpnip skipped: $device is pseudo-device")
if $device->vendor and $device->vendor eq 'netdisco';
if $device->is_pseudo;
return Status->defer("arpnip skipped: $device has no layer 3 capability")
unless $device->has_layer(3);
return Status->defer("arpnip deferred: $device is not arpnipable")
unless is_arpnipable_now($device);

View File

@@ -18,9 +18,6 @@ register_worker({ stage => 'check', driver => 'snmp' }, sub {
my $snmp = App::Netdisco::Transport::SNMP->reader_for($device)
or return Status->defer("arpnip failed: could not SNMP connect to $device");
return Status->defer("Skipped arpnip for device $device without layer 3 capability")
unless $snmp->has_layer(3);
# get v4 arp table
my $v4 = get_arps($device, $snmp->at_paddr, $snmp->at_netaddr);
# get v6 neighbor cache

View File

@@ -17,9 +17,6 @@ register_worker({ stage => 'second', driver => 'snmp' }, sub {
my $snmp = App::Netdisco::Transport::SNMP->reader_for($device)
or return Status->defer("arpnip failed: could not SNMP connect to $device");
return Status->defer("Skipped arpnip for device $device without layer 3 capability")
unless $snmp->has_layer(3);
# get directly connected networks
my @subnets = gather_subnets($device, $snmp);
# TODO: IPv6 subnets

View File

@@ -13,15 +13,13 @@ register_worker({ stage => 'check' }, sub {
return Status->error('discover failed: unable to interpret device param')
unless defined $device;
my $host = $device->ip;
return Status->error("discover failed: no device param (need -d ?)")
if $host eq '0.0.0.0';
if $device->ip eq '0.0.0.0';
return Status->defer("discover skipped: $host is pseudo-device")
if $device->vendor and $device->vendor eq 'netdisco';
return Status->defer("discover skipped: $device is pseudo-device")
if $device->is_pseudo;
return Status->defer("discover deferred: $host is not discoverable")
return Status->defer("discover deferred: $device is not discoverable")
unless is_discoverable_now($device);
return Status->done('discover is able to run.');

View File

@@ -14,7 +14,7 @@ register_worker({ stage => 'second' }, sub {
# arpniped/macsucked, queue those jobs now
if ($device->in_storage
and $job->subaction and $job->subaction eq 'with-nodes') {
if (!defined $device->last_macsuck) {
if (!defined $device->last_macsuck and $device->has_layer(2)) {
jq_insert({
device => $device->ip,
action => 'macsuck',
@@ -23,7 +23,7 @@ register_worker({ stage => 'second' }, sub {
});
}
if (!defined $device->last_arpnip) {
if (!defined $device->last_arpnip and $device->has_layer(3)) {
jq_insert({
device => $device->ip,
action => 'arpnip',

View File

@@ -17,7 +17,10 @@ register_worker({ stage => 'check' }, sub {
unless $device->in_storage;
return Status->defer("macsuck skipped: $device is pseudo-device")
if $device->vendor and $device->vendor eq 'netdisco';
if $device->is_pseudo;
return Status->defer("arpnip skipped: $device has no layer 2 capability")
unless $device->has_layer(2);
return Status->defer("macsuck deferred: $device is not macsuckable")
unless is_macsuckable_now($device);

View File

@@ -21,9 +21,6 @@ register_worker({ stage => 'check', driver => 'snmp' }, sub {
my $snmp = App::Netdisco::Transport::SNMP->reader_for($device)
or return Status->defer("macsuck failed: could not SNMP connect to $device");
return Status->defer("Skipped macsuck for device $device without layer 2 capability")
unless $snmp->has_layer(2);
# would be possible just to use now() on updated records, but by using this
# same value for them all, we can if we want add a job at the end to
# select and do something with the updated set (see set archive, below)

View File

@@ -15,9 +15,6 @@ register_worker({ stage => 'second', driver => 'snmp' }, sub {
my $snmp = App::Netdisco::Transport::SNMP->reader_for($device)
or return Status->defer("macsuck failed: could not SNMP connect to $device");
return Status->defer("Skipped macsuck for device $device without layer 2 capability")
unless $snmp->has_layer(2);
my $now = 'to_timestamp('. (join '.', gettimeofday) .')';
my $cd11_txrate = $snmp->cd11_txrate;