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:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user