Factor out logic to determine serial number from ENTITY-MIB in Layer2 and Layer3 to new method entity_derived_serial in Entity class
Create new method entity_derived_os_ver in Entity class to determine OS version in a similar manner
This commit is contained in:
@@ -109,6 +109,57 @@ sub e_port {
|
||||
return \%e_port;
|
||||
}
|
||||
|
||||
sub entity_derived_serial {
|
||||
my $entity = shift;
|
||||
|
||||
my $e_parent = $entity->e_parent() || {};
|
||||
my $e_class = $entity->e_class() || {};
|
||||
|
||||
# Sort keys to return a consistent result between runs
|
||||
foreach my $iid ( sort keys %$e_parent ) {
|
||||
my $parent = $e_parent->{$iid};
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Only consider serial numbers for entries without a parent, or
|
||||
# if they are of type "chassis"
|
||||
if ( $parent eq '0' or $class eq 'chassis') {
|
||||
my $serial = $entity->e_serial($iid);
|
||||
if ( $serial && $serial->{$iid} ) {
|
||||
return $serial->{$iid};
|
||||
}
|
||||
else {
|
||||
my $descr = $entity->e_descr($iid);
|
||||
if ( $descr and $descr->{$iid} =~ /serial#?:\s*([a-z0-9]+)/i )
|
||||
{
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub entity_derived_os_ver {
|
||||
my $entity = shift;
|
||||
|
||||
my $e_parent = $entity->e_parent() || {};
|
||||
my $e_class = $entity->e_class() || {};
|
||||
|
||||
# Sort keys to return a consistent result between runs
|
||||
foreach my $iid ( sort keys %$e_parent ) {
|
||||
my $parent = $e_parent->{$iid};
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Only consider serial numbers for entries without a parent, or
|
||||
# if they are of type "chassis"
|
||||
if ( $parent eq '0' or $class eq 'chassis') {
|
||||
my $os_ver = $entity->e_swver($iid);
|
||||
if ( $os_ver && $os_ver->{$iid} ) {
|
||||
return $os_ver->{$iid};
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -173,6 +224,23 @@ none.
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $entity->entity_derived_serial()
|
||||
|
||||
Tries to determine the device serial number from the F<ENTITY-MIB>. Only
|
||||
considers serial numbers for entries without a parent, or if they are of type
|
||||
chassis. Looks at C<entPhysicalSerialNum> and then C<entPhysicalDescr> for
|
||||
serial number.
|
||||
|
||||
=item $entity->entity_derived_os_ver()
|
||||
|
||||
Tries to determine the device OS version from the F<ENTITY-MIB>. Only
|
||||
considers serial numbers for entries without a parent, or if they are of type
|
||||
chassis. Looks at C<entPhysicalSoftwareRev> for the version.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Entity Table
|
||||
|
||||
=over
|
||||
|
||||
@@ -118,24 +118,18 @@ sub vendor {
|
||||
sub serial {
|
||||
my $l2 = shift;
|
||||
|
||||
my $serial1 = $l2->serial1();
|
||||
my $e_descr = $l2->e_descr() || {};
|
||||
my $e_serial = $l2->e_serial() || {};
|
||||
|
||||
my $serial2 = $e_serial->{1} || undef;
|
||||
my $chassis = $e_descr->{1} || undef;
|
||||
|
||||
# precedence
|
||||
# serial2,chassis parse,serial1
|
||||
return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
|
||||
|
||||
if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
|
||||
return $1;
|
||||
my $entity_serial = $l2->entity_derived_serial();
|
||||
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||
return $entity_serial;
|
||||
}
|
||||
|
||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
||||
my $serial1 = $l2->serial1();
|
||||
if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
|
||||
return $serial1;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
sub interfaces {
|
||||
@@ -262,7 +256,7 @@ Tries to discover the vendor from $l2->model() and $l2->description()
|
||||
|
||||
=item $l2->serial()
|
||||
|
||||
Returns serial number if available through SNMP
|
||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
|
||||
|
||||
=back
|
||||
|
||||
|
||||
@@ -194,32 +194,18 @@ sub root_ip {
|
||||
sub serial {
|
||||
my $l3 = shift;
|
||||
|
||||
my $serial1 = $l3->serial1();
|
||||
my $e_parent = $l3->e_parent() || {};
|
||||
my $e_class = $l3->e_class() || {};
|
||||
|
||||
foreach my $iid ( keys %$e_parent ) {
|
||||
my $parent = $e_parent->{$iid};
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Only consider serial numbers for entries without a parent, or if they are of type "chassis"
|
||||
if ( $parent eq '0' or $class eq 'chassis') {
|
||||
my $serial = $l3->e_serial($iid);
|
||||
if ( $serial && $serial->{$iid} ) {
|
||||
return $serial->{$iid};
|
||||
}
|
||||
else {
|
||||
my $descr = $l3->e_descr($iid);
|
||||
if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i )
|
||||
{
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
}
|
||||
my $entity_serial = $l3->entity_derived_serial();
|
||||
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||
return $entity_serial;
|
||||
}
|
||||
|
||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
||||
my $serial1 = $l3->serial1();
|
||||
if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
|
||||
return $serial1;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
# $l3->model() - the sysObjectID returns an IID to an entry in
|
||||
@@ -493,8 +479,7 @@ Removes 'cisco' from cisco devices for readability.
|
||||
|
||||
=item $l3->serial()
|
||||
|
||||
Tries to cull a serial number from F<ENTITY-MIB>, description, and
|
||||
F<OLD-CISCO->... MIB.
|
||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
|
||||
|
||||
=item $l3->vendor()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user