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 ($device, $snmp) = @_;
|
||||||
my @aliases;
|
my @aliases;
|
||||||
|
|
||||||
my $ipv6_index = $snmp->ipv6_index;
|
my $ipv6_index = $snmp->ipv6_index || {};
|
||||||
my $ipv6_addr = $snmp->ipv6_addr;
|
my $ipv6_addr = $snmp->ipv6_addr || {};
|
||||||
my $ipv6_type = $snmp->ipv6_type;
|
my $ipv6_type = $snmp->ipv6_type || {};
|
||||||
my $ipv6_pfxlen = $snmp->ipv6_addr_prefixlength;
|
my $ipv6_pfxlen = $snmp->ipv6_addr_prefixlength || {};
|
||||||
my $interfaces = $snmp->interfaces;
|
my $interfaces = $snmp->interfaces || {};
|
||||||
|
|
||||||
# Get IP Table per VRF if supported
|
# Get IP Table per VRF if supported
|
||||||
my @vrf_list = _get_vrf_list($device, $snmp);
|
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) };
|
my $guard = guard { snmp_comm_reindex($snmp, $device, 0) };
|
||||||
foreach my $vrf (@vrf_list) {
|
foreach my $vrf (@vrf_list) {
|
||||||
snmp_comm_reindex($snmp, $device, $vrf);
|
snmp_comm_reindex($snmp, $device, $vrf);
|
||||||
$ipv6_index = { %$ipv6_index, %{$snmp->ipv6_index} };
|
$ipv6_index = { %$ipv6_index, %{$snmp->ipv6_index || {}} };
|
||||||
$ipv6_addr = { %$ipv6_addr, %{$snmp->ipv6_addr} };
|
$ipv6_addr = { %$ipv6_addr, %{$snmp->ipv6_addr || {}} };
|
||||||
$ipv6_type = { %$ipv6_type, %{$snmp->ipv6_type} };
|
$ipv6_type = { %$ipv6_type, %{$snmp->ipv6_type || {}} };
|
||||||
$ipv6_pfxlen = { %$ipv6_pfxlen, %{$snmp->ipv6_addr_prefixlength} };
|
$ipv6_pfxlen = { %$ipv6_pfxlen, %{$snmp->ipv6_addr_prefixlength || {}} };
|
||||||
$interfaces = { %$interfaces, %{$snmp->interfaces} };
|
$interfaces = { %$interfaces, %{$snmp->interfaces} };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -379,3 +379,4 @@ sub _get_ipv6_aliases {
|
|||||||
}
|
}
|
||||||
|
|
||||||
true;
|
true;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user