[#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)
* 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)
[ENHANCEMENTS]

View File

@@ -123,8 +123,11 @@ sub serial {
# precedence
# serial2,chassis parse,serial1
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;
@@ -155,11 +158,19 @@ sub interfaces {
my $i_descr = $l2->i_description($partial) || {};
# 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 ) {
my $port = $i_descr->{$iid};
next unless defined $port;
if ( $seen{$port}++ ) {
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
}
else {
$interfaces->{$iid} = $port;
}
}
return $interfaces;
}

View File

@@ -215,8 +215,11 @@ sub serial {
# precedence
# serial2,chassis parse,serial1
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;
@@ -294,17 +297,22 @@ sub interfaces {
my $partial = shift;
my $interfaces = $l3->i_index($partial);
my $descriptions = $l3->i_description($partial);
my $i_descr = $l3->i_description($partial);
my %interfaces = ();
foreach my $iid ( keys %$interfaces ) {
my $desc = $descriptions->{$iid};
next unless defined $desc;
$interfaces{$iid} = $desc;
# Check for duplicates in ifDescr, if so uniquely identify by adding
# ifIndex to repeated values
my %seen;
foreach my $iid ( keys %$i_descr ) {
my $port = $i_descr->{$iid};
next unless defined $port;
if ( $seen{$port}++ ) {
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
}
return \%interfaces;
else {
$interfaces->{$iid} = $port;
}
}
return $interfaces;
}
sub vendor {