refactor layer and pseudo checks
This commit is contained in:
		| @@ -193,6 +193,29 @@ __PACKAGE__->might_have( | ||||
|  | ||||
| =head1 ADDITIONAL METHODS | ||||
|  | ||||
| =head2 is_pseudo | ||||
|  | ||||
| Returns true if the vendor of the device is "netdisco". | ||||
|  | ||||
| =cut | ||||
|  | ||||
| sub not_pseudo { | ||||
|   my $device = shift; | ||||
|   return (defined $device->vendor and $device->vendor eq 'netdisco'); | ||||
| } | ||||
|  | ||||
| =head2 has_layer( $number ) | ||||
|  | ||||
| Returns true if the device provided sysServices and supports the given layer. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| sub has_layer { | ||||
|   my ($device, $layer) = @_; | ||||
|   return unless $layer and $layer =~ m/^[1-8]$/; | ||||
|   return $device->layers and substr($device->layers, (9-$layer), 1) == 1; | ||||
| } | ||||
|  | ||||
| =head2 renumber( $new_ip ) | ||||
|  | ||||
| Will update this device and all related database records to use the new IP | ||||
|   | ||||
| @@ -192,12 +192,10 @@ sub is_discoverable_now { | ||||
|   my ($ip, $remote_type) = @_; | ||||
|   my $device = get_device($ip) or return 0; | ||||
|  | ||||
|   if ($device->in_storage) { | ||||
|     if ($device->since_last_discover and setting('discover_min_age') | ||||
|         and $device->since_last_discover < setting('discover_min_age')) { | ||||
|   if ($device->since_last_discover and setting('discover_min_age') | ||||
|       and $device->since_last_discover < setting('discover_min_age')) { | ||||
|  | ||||
|         return _bail_msg("is_discoverable: time since last discover less than discover_min_age"); | ||||
|     } | ||||
|       return _bail_msg("is_discoverable: time since last discover less than discover_min_age"); | ||||
|   } | ||||
|  | ||||
|   return is_discoverable(@_); | ||||
| @@ -242,9 +240,6 @@ sub is_arpnipable_now { | ||||
|   my ($ip) = @_; | ||||
|   my $device = get_device($ip) or return 0; | ||||
|  | ||||
|   return _bail_msg("is_arpnipable: cannot arpnip an undiscovered device") | ||||
|     if not $device->in_storage; | ||||
|  | ||||
|   if ($device->since_last_arpnip and setting('arpnip_min_age') | ||||
|       and $device->since_last_arpnip < setting('arpnip_min_age')) { | ||||
|  | ||||
| @@ -293,9 +288,6 @@ sub is_macsuckable_now { | ||||
|   my ($ip) = @_; | ||||
|   my $device = get_device($ip) or return 0; | ||||
|  | ||||
|   return _bail_msg("is_macsuckable: cannot macsuck an undiscovered device") | ||||
|     if not $device->in_storage; | ||||
|  | ||||
|   if ($device->since_last_macsuck and setting('macsuck_min_age') | ||||
|       and $device->since_last_macsuck < setting('macsuck_min_age')) { | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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.'); | ||||
|   | ||||
| @@ -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', | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user