OK to include device ports when doing arpnip
This commit is contained in:
		| @@ -3,7 +3,6 @@ package App::Netdisco::Core::Arpnip; | ||||
| use Dancer qw/:syntax :script/; | ||||
| use Dancer::Plugin::DBIC 'schema'; | ||||
|  | ||||
| use App::Netdisco::Util::PortMAC 'get_port_macs'; | ||||
| use App::Netdisco::Util::SanityCheck 'check_mac'; | ||||
| use App::Netdisco::Util::DNS ':all'; | ||||
| use NetAddr::IP::Lite ':lower'; | ||||
| @@ -44,12 +43,10 @@ sub do_arpnip { | ||||
|       return; | ||||
|   } | ||||
|  | ||||
|   my $port_macs = get_port_macs($device); | ||||
|  | ||||
|   # get v4 arp table | ||||
|   my @v4 = _get_arps($device, $port_macs, $snmp->at_paddr, $snmp->at_netaddr); | ||||
|   my @v4 = _get_arps($device, $snmp->at_paddr, $snmp->at_netaddr); | ||||
|   # get v6 neighbor cache | ||||
|   my @v6 = _get_arps($device, $port_macs, $snmp->ipv6_n2p_mac, $snmp->ipv6_n2p_addr); | ||||
|   my @v6 = _get_arps($device, $snmp->ipv6_n2p_mac, $snmp->ipv6_n2p_addr); | ||||
|  | ||||
|   # get directly connected networks | ||||
|   my @subnets = _gather_subnets($device, $snmp); | ||||
| @@ -78,13 +75,13 @@ sub do_arpnip { | ||||
|  | ||||
| # get an arp table (v4 or v6) | ||||
| sub _get_arps { | ||||
|   my ($device, $port_macs, $paddr, $netaddr) = @_; | ||||
|   my ($device, $paddr, $netaddr) = @_; | ||||
|   my @arps = (); | ||||
|  | ||||
|   while (my ($arp, $node) = each %$paddr) { | ||||
|       my $ip = $netaddr->{$arp}; | ||||
|       next unless defined $ip; | ||||
|       next unless check_mac($device, $node, $port_macs); | ||||
|       next unless check_mac($device, $node); | ||||
|       push @arps, [$node, $ip, hostname_from_ip($ip)]; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -44,22 +44,25 @@ MAC address is well-formed (according to common formats) | ||||
|  | ||||
| MAC address is not all-zero, broadcast, CLIP, VRRP or HSRP | ||||
|  | ||||
| =back | ||||
|  | ||||
| Optionally pass a cached set of Device port MAC addresses as the third | ||||
| argument, in which case an additional check is added: | ||||
|  | ||||
| =over 4 | ||||
|  | ||||
| =item * | ||||
|  | ||||
| MAC address does not belong to an interface on any known Device | ||||
|  | ||||
| =back | ||||
|  | ||||
| Optionally pass a cached set of Device port MAC addresses as the third | ||||
| argument, or else C<check_mac> will retrieve this for itself from the | ||||
| database. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| sub check_mac { | ||||
|   my ($device, $node, $port_macs) = @_; | ||||
|   $port_macs ||= get_port_macs($device); | ||||
|   my $mac = Net::MAC->new(mac => $node, 'die' => 0, verbose => 0); | ||||
|   $port_macs ||= {}; | ||||
|  | ||||
|   # incomplete MAC addresses (BayRS frame relay DLCI, etc) | ||||
|   if ($mac->get_error) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user