Fix potential crash in Discover/Properties::_get_ipv6_aliases

* On e.g. Cisco N9K, ipv6 objects can be returned undef which crashes the ip alias discovery with `Can't use an undefined value as a HASH reference at .../Discover/Properties.pm line 346.`
 * Discovery continues but leaves device_ip empty, which in turn makes device->neighbor non-functional
 * Fixed by adding various `$snmp->x || {}` safeguards
This commit is contained in:
Christian Ramseyer
2019-09-20 13:52:34 +02:00
parent 8edbd515e7
commit 26960bdd34

View File

@@ -331,11 +331,11 @@ sub _get_ipv6_aliases {
my ($device, $snmp) = @_;
my @aliases;
my $ipv6_index = $snmp->ipv6_index;
my $ipv6_addr = $snmp->ipv6_addr;
my $ipv6_type = $snmp->ipv6_type;
my $ipv6_pfxlen = $snmp->ipv6_addr_prefixlength;
my $interfaces = $snmp->interfaces;
my $ipv6_index = $snmp->ipv6_index || {};
my $ipv6_addr = $snmp->ipv6_addr || {};
my $ipv6_type = $snmp->ipv6_type || {};
my $ipv6_pfxlen = $snmp->ipv6_addr_prefixlength || {};
my $interfaces = $snmp->interfaces || {};
# Get IP Table per VRF if supported
my @vrf_list = _get_vrf_list($device, $snmp);
@@ -343,10 +343,10 @@ sub _get_ipv6_aliases {
my $guard = guard { snmp_comm_reindex($snmp, $device, 0) };
foreach my $vrf (@vrf_list) {
snmp_comm_reindex($snmp, $device, $vrf);
$ipv6_index = { %$ipv6_index, %{$snmp->ipv6_index} };
$ipv6_addr = { %$ipv6_addr, %{$snmp->ipv6_addr} };
$ipv6_type = { %$ipv6_type, %{$snmp->ipv6_type} };
$ipv6_pfxlen = { %$ipv6_pfxlen, %{$snmp->ipv6_addr_prefixlength} };
$ipv6_index = { %$ipv6_index, %{$snmp->ipv6_index || {}} };
$ipv6_addr = { %$ipv6_addr, %{$snmp->ipv6_addr || {}} };
$ipv6_type = { %$ipv6_type, %{$snmp->ipv6_type || {}} };
$ipv6_pfxlen = { %$ipv6_pfxlen, %{$snmp->ipv6_addr_prefixlength || {}} };
$interfaces = { %$interfaces, %{$snmp->interfaces} };
}
}
@@ -379,3 +379,4 @@ sub _get_ipv6_aliases {
}
true;