[#68] Fix device_port entries for switches with non-unique ifDesc

This commit is contained in:
Eric A. Miller
2013-10-04 21:22:29 -04:00
parent cfce6296fb
commit 7d2cf97c06
3 changed files with 50 additions and 26 deletions

View File

@@ -14,6 +14,11 @@ version 3.08 ()
* [#69] set speed and duplex on Cisco VSS system (psychiatric) * [#69] set speed and duplex on Cisco VSS system (psychiatric)
* munge_null() now removes all non-printable control characters * munge_null() now removes all non-printable control characters
[BUG FIXES]
* [#68] Fix device_port entries for switches with non-unique
ifDesc (Nic Bernstein)
version 3.07 (2013-10-01) version 3.07 (2013-10-01)
[ENHANCEMENTS] [ENHANCEMENTS]

View File

@@ -123,8 +123,11 @@ sub serial {
# precedence # precedence
# serial2,chassis parse,serial1 # serial2,chassis parse,serial1
return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ ); return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
return $1
if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ); if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
return $1;
}
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ ); return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
return; return;
@@ -155,11 +158,19 @@ sub interfaces {
my $i_descr = $l2->i_description($partial) || {}; my $i_descr = $l2->i_description($partial) || {};
# Replace the Index with the ifDescr field. # Replace the Index with the ifDescr field.
# Check for duplicates in ifDescr, if so uniquely identify by adding
# ifIndex to repeated values
my %seen;
foreach my $iid ( keys %$i_descr ) { foreach my $iid ( keys %$i_descr ) {
my $port = $i_descr->{$iid}; my $port = $i_descr->{$iid};
next unless defined $port; next unless defined $port;
if ( $seen{$port}++ ) {
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
}
else {
$interfaces->{$iid} = $port; $interfaces->{$iid} = $port;
} }
}
return $interfaces; return $interfaces;
} }

View File

@@ -168,7 +168,7 @@ sub root_ip {
return $router_ip return $router_ip
if (( defined $router_ip ) if (( defined $router_ip )
and ( $router_ip ne '0.0.0.0' ) and ( $router_ip ne '0.0.0.0' )
and ( grep { $ospf_ip->{$_} eq $router_ip } (keys %$ospf_ip)) and ( grep { $ospf_ip->{$_} eq $router_ip } ( keys %$ospf_ip ) )
and ( $l3->snmp_connect_ip($router_ip) ) ); and ( $l3->snmp_connect_ip($router_ip) ) );
# return the first one found here (should be only one) # return the first one found here (should be only one)
@@ -215,8 +215,11 @@ sub serial {
# precedence # precedence
# serial2,chassis parse,serial1 # serial2,chassis parse,serial1
return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ ); return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
return $1
if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ); if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
return $1;
}
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ ); return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
return; return;
@@ -294,17 +297,22 @@ sub interfaces {
my $partial = shift; my $partial = shift;
my $interfaces = $l3->i_index($partial); my $interfaces = $l3->i_index($partial);
my $descriptions = $l3->i_description($partial); my $i_descr = $l3->i_description($partial);
my %interfaces = (); # Check for duplicates in ifDescr, if so uniquely identify by adding
foreach my $iid ( keys %$interfaces ) { # ifIndex to repeated values
my $desc = $descriptions->{$iid}; my %seen;
next unless defined $desc; foreach my $iid ( keys %$i_descr ) {
my $port = $i_descr->{$iid};
$interfaces{$iid} = $desc; next unless defined $port;
if ( $seen{$port}++ ) {
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
} }
else {
return \%interfaces; $interfaces->{$iid} = $port;
}
}
return $interfaces;
} }
sub vendor { sub vendor {