Compare commits
	
		
			7 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d2f67b2db2 | ||
| 
						 | 
					c4a4c3d5e6 | ||
| 
						 | 
					fa38fdbc2b | ||
| 
						 | 
					2e03e3faca | ||
| 
						 | 
					e448915e0b | ||
| 
						 | 
					37836bedac | ||
| 
						 | 
					a60663b238 | 
							
								
								
									
										10
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,6 +1,12 @@
 | 
				
			|||||||
SNMP::Info - Perl5 OO Interface to Network Devices and SNMP MIBs
 | 
					SNMP::Info - Perl5 OO Interface to Network Devices and SNMP MIBs
 | 
				
			||||||
ChangeLog $Id$
 | 
					ChangeLog $Id$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 0.5 ()
 | 
				
			||||||
 | 
					    * Added ability to get paritial tables.  For example to get the
 | 
				
			||||||
 | 
					      IP routing table for 128.114.*  you can do 
 | 
				
			||||||
 | 
					      $ipr = $dev->ipr_dest('128.114');
 | 
				
			||||||
 | 
					    * Added IP Routing Table entries from RFC1213 to SNMP::Info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
version 0.4 (04/29/03)
 | 
					version 0.4 (04/29/03)
 | 
				
			||||||
    * BIG CHANGE ! Internal Data structure has changed.  
 | 
					    * BIG CHANGE ! Internal Data structure has changed.  
 | 
				
			||||||
    * Added clear_cache() method
 | 
					    * Added clear_cache() method
 | 
				
			||||||
@@ -24,11 +30,11 @@ version 0.3 (03/06/03)
 | 
				
			|||||||
      and _load_attr
 | 
					      and _load_attr
 | 
				
			||||||
    * Added more debugging
 | 
					    * Added more debugging
 | 
				
			||||||
    * Added info and munging for c_capabilities in SNMP::Info::CD
 | 
					    * Added info and munging for c_capabilities in SNMP::Info::CD
 | 
				
			||||||
      Thanks to Martin Lorensen <martin@lorensen.dk>
 | 
					      Thanks to Martin Lorensen <martin /at- lorensen.dk>
 | 
				
			||||||
    * Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
 | 
					    * Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
 | 
				
			||||||
      so that the Module will install via CPAN without trying to install the old
 | 
					      so that the Module will install via CPAN without trying to install the old
 | 
				
			||||||
      4.2.0 version of SNMP on CPAN.  Will now fail in the test phase. 
 | 
					      4.2.0 version of SNMP on CPAN.  Will now fail in the test phase. 
 | 
				
			||||||
      Thanks again to Martin Lorensen <martin@lorensen.dk>
 | 
					      Thanks again to Martin Lorensen <martin /at- lorensen.dk>
 | 
				
			||||||
    * Moved tests from test.pl to t/*
 | 
					    * Moved tests from test.pl to t/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
version 0.2 (02/19/03)
 | 
					version 0.2 (02/19/03)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										209
									
								
								Info.pm
									
									
									
									
									
								
							
							
						
						
									
										209
									
								
								Info.pm
									
									
									
									
									
								
							@@ -85,6 +85,11 @@ SNMP::Info was created at UCSC for the netdisco project (www.netdisco.org)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SUPPORT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please direct all support, help, and bug requests to the snmp-info-users Mailing List
 | 
				
			||||||
 | 
					at L<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 DESCRIPTION 
 | 
					=head1 DESCRIPTION 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SNMP::Info gives an object oriented interface to information obtained through SNMP.
 | 
					SNMP::Info gives an object oriented interface to information obtained through SNMP.
 | 
				
			||||||
@@ -996,6 +1001,139 @@ Gives broadcast address for IP table entry.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head3 IP Routing Table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_route()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The route in question.  A value of 0.0.0.0 is the default gateway route.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteDest>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_if()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The interface (IID) that the route is on.  Use interfaces() to map.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteIfIndex>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_1()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Primary routing metric for this route. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteMetric1>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_2()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If metrics are not used, they should be set to -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteMetric2>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_3()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteMetric3>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_4()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteMetric4>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_5()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteMetric5>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_dest()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From RFC1213:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "The IP address of the next hop of this route.
 | 
				
			||||||
 | 
					  (In the case of a route bound to an interface
 | 
				
			||||||
 | 
					  which is realized via a broadcast media, the value
 | 
				
			||||||
 | 
					  of this field is the agent's IP address on that
 | 
				
			||||||
 | 
					  interface.)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteNextHop>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_type()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From RFC1213:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    other(1),        -- none of the following
 | 
				
			||||||
 | 
					    invalid(2),      -- an invalidated route
 | 
				
			||||||
 | 
					                     -- route to directly
 | 
				
			||||||
 | 
					    direct(3),       -- connected (sub-)network
 | 
				
			||||||
 | 
					                     -- route to a non-local
 | 
				
			||||||
 | 
					    indirect(4)      -- host/network/sub-network
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      "The type of route.  Note that the values
 | 
				
			||||||
 | 
					      direct(3) and indirect(4) refer to the notion of
 | 
				
			||||||
 | 
					      direct and indirect routing in the IP
 | 
				
			||||||
 | 
					      architecture.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Setting this object to the value invalid(2) has
 | 
				
			||||||
 | 
					      the effect of invalidating the corresponding entry
 | 
				
			||||||
 | 
					      in the ipRouteTable object.  That is, it
 | 
				
			||||||
 | 
					      effectively disassociates the destination
 | 
				
			||||||
 | 
					      identified with said entry from the route
 | 
				
			||||||
 | 
					      identified with said entry.  It is an
 | 
				
			||||||
 | 
					      implementation-specific matter as to whether the
 | 
				
			||||||
 | 
					      agent removes an invalidated entry from the table.
 | 
				
			||||||
 | 
					      Accordingly, management stations must be prepared
 | 
				
			||||||
 | 
					      to receive tabular information from agents that
 | 
				
			||||||
 | 
					      corresponds to entries not currently in use.
 | 
				
			||||||
 | 
					      Proper interpretation of such entries requires
 | 
				
			||||||
 | 
					      examination of the relevant ipRouteType object."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteType>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_proto()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From RFC1213:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    other(1),       -- none of the following
 | 
				
			||||||
 | 
					                    -- non-protocol information,
 | 
				
			||||||
 | 
					                    -- e.g., manually configured
 | 
				
			||||||
 | 
					    local(2),       -- entries
 | 
				
			||||||
 | 
					                    -- set via a network
 | 
				
			||||||
 | 
					    netmgmt(3),     -- management protocol
 | 
				
			||||||
 | 
					                    -- obtained via ICMP,
 | 
				
			||||||
 | 
					    icmp(4),        -- e.g., Redirect
 | 
				
			||||||
 | 
					                    -- the remaining values are
 | 
				
			||||||
 | 
					                    -- all gateway routing
 | 
				
			||||||
 | 
					                    -- protocols
 | 
				
			||||||
 | 
					    egp(5),
 | 
				
			||||||
 | 
					    ggp(6),
 | 
				
			||||||
 | 
					    hello(7),
 | 
				
			||||||
 | 
					    rip(8),
 | 
				
			||||||
 | 
					    is-is(9),
 | 
				
			||||||
 | 
					    es-is(10),
 | 
				
			||||||
 | 
					    ciscoIgrp(11),
 | 
				
			||||||
 | 
					    bbnSpfIgp(12),
 | 
				
			||||||
 | 
					    ospf(13),
 | 
				
			||||||
 | 
					    bgp(14)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteProto>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_age()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Seconds since route was last updated or validated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteAge>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_mask()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Subnet Mask of route. 0.0.0.0 for default gateway.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteMask>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipr_info()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reference to MIB definition specific to routing protocol.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<ipRouteInfo>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Setting data via SNMP
 | 
					=head2 Setting data via SNMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This section explains how to use SNMP::Info to do SNMP Set operations.
 | 
					This section explains how to use SNMP::Info to do SNMP Set operations.
 | 
				
			||||||
@@ -1126,7 +1264,21 @@ These are table entries, such as the IfIndex
 | 
				
			|||||||
            'i_pkts_multi_out64' => 'ifHCOutMulticastPkts',
 | 
					            'i_pkts_multi_out64' => 'ifHCOutMulticastPkts',
 | 
				
			||||||
            'i_pkts_bcast_in64'  => 'ifHCInBroadcastPkts',
 | 
					            'i_pkts_bcast_in64'  => 'ifHCInBroadcastPkts',
 | 
				
			||||||
            'i_pkts_bcast_out64' => 'ifHCOutBroadcastPkts',
 | 
					            'i_pkts_bcast_out64' => 'ifHCOutBroadcastPkts',
 | 
				
			||||||
            'i_alias'            => 'ifAlias'
 | 
					            'i_alias'            => 'ifAlias',
 | 
				
			||||||
 | 
					            # IP Routing Table
 | 
				
			||||||
 | 
					            'ipr_route'=> 'ipRouteDest',
 | 
				
			||||||
 | 
					            'ipr_if'   => 'ipRouteIfIndex',
 | 
				
			||||||
 | 
					            'ipr_1'    => 'ipRouteMetric1',
 | 
				
			||||||
 | 
					            'ipr_2'    => 'ipRouteMetric2',
 | 
				
			||||||
 | 
					            'ipr_3'    => 'ipRouteMetric3',
 | 
				
			||||||
 | 
					            'ipr_4'    => 'ipRouteMetric4',
 | 
				
			||||||
 | 
					            'ipr_5'    => 'ipRouteMetric5',
 | 
				
			||||||
 | 
					            'ipr_dest' => 'ipRouteNextHop',
 | 
				
			||||||
 | 
					            'ipr_type' => 'ipRouteType',
 | 
				
			||||||
 | 
					            'ipr_proto'=> 'ipRouteProto',
 | 
				
			||||||
 | 
					            'ipr_age'  => 'ipRouteAge',
 | 
				
			||||||
 | 
					            'ipr_mask' => 'ipRouteMask',
 | 
				
			||||||
 | 
					            'ipr_info' => 'ipRouteInfo',
 | 
				
			||||||
           );
 | 
					           );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item %MIBS
 | 
					=item %MIBS
 | 
				
			||||||
@@ -1751,20 +1903,37 @@ Called from $info->load_METHOD();
 | 
				
			|||||||
=cut
 | 
					=cut
 | 
				
			||||||
sub _load_attr {
 | 
					sub _load_attr {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
    my ($attr,$leaf) = @_;
 | 
					    my ($attr,$leaf,$partial) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $ver    = $self->snmp_ver();
 | 
					    my $ver    = $self->snmp_ver();
 | 
				
			||||||
    my $nosuch = $self->nosuch();
 | 
					    my $nosuch = $self->nosuch();
 | 
				
			||||||
    my $sess   = $self->session();
 | 
					    my $sess   = $self->session();
 | 
				
			||||||
    my $store  = $self->store();
 | 
					    my $store  = $self->store();
 | 
				
			||||||
 | 
					    my $munge  = $self->munge();
 | 
				
			||||||
    return undef unless defined $sess;
 | 
					    return undef unless defined $sess;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Get the callback hash for data munging
 | 
					    # Deal with partial entries.
 | 
				
			||||||
    my $munge = $self->munge();
 | 
					    my $varleaf = $leaf;
 | 
				
			||||||
 | 
					    if (defined $partial) {
 | 
				
			||||||
 | 
					        # If we aren't supplied an OID translate
 | 
				
			||||||
 | 
					        if ($leaf !~ /^[.\d]*$/) {
 | 
				
			||||||
 | 
					            # VarBind will not resolve mixed OID and leaf entries like
 | 
				
			||||||
 | 
					            #   "ipRouteMask.255.255".  So we convert to full OID
 | 
				
			||||||
 | 
					            my $oid = &SNMP::translateObj($leaf);
 | 
				
			||||||
 | 
					            unless (defined $oid) {
 | 
				
			||||||
 | 
					                $self->error_throw("SNMP::Info::_load_attr: Can't translate $leaf.$partial.  Missing MIB?\n");
 | 
				
			||||||
 | 
					                return undef;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $varleaf = "$oid.$partial";
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            $varleaf = "$leaf.$partial";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $self->debug() and print "SNMP::Info::_load_attr $attr : $leaf\n";
 | 
					    $self->debug() and print "SNMP::Info::_load_attr $attr : $leaf", 
 | 
				
			||||||
 | 
					        defined $partial ? "($partial)" : '', "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $var = new SNMP::Varbind([$leaf]);
 | 
					    my $var = new SNMP::Varbind([$varleaf]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # So devices speaking SNMP v.1 are not supposed to give out 
 | 
					    # So devices speaking SNMP v.1 are not supposed to give out 
 | 
				
			||||||
    # data from SNMP2, but most do.  Net-SNMP, being very precise 
 | 
					    # data from SNMP2, but most do.  Net-SNMP, being very precise 
 | 
				
			||||||
@@ -1776,11 +1945,13 @@ sub _load_attr {
 | 
				
			|||||||
    if ($ver == 1 and $nosuch and $errornum and $sess->{ErrorStr} =~ /nosuch/i){
 | 
					    if ($ver == 1 and $nosuch and $errornum and $sess->{ErrorStr} =~ /nosuch/i){
 | 
				
			||||||
        $errornum = 0; 
 | 
					        $errornum = 0; 
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    my $localstore = undef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (! $errornum ){
 | 
					    while (! $errornum ){
 | 
				
			||||||
        $sess->getnext($var);
 | 
					        $sess->getnext($var);
 | 
				
			||||||
        $errornum = $sess->{ErrorNum};
 | 
					        $errornum = $sess->{ErrorNum};
 | 
				
			||||||
 | 
					        #print "$var->[0] $var->[1] $var->[2] $var->[3]\n";
 | 
				
			||||||
        last if $var->[0] ne $leaf;
 | 
					        last if $var->[0] ne $leaf;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        my $iid = $var->[1];
 | 
					        my $iid = $var->[1];
 | 
				
			||||||
        my $val = $var->[2];
 | 
					        my $val = $var->[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1788,6 +1959,13 @@ sub _load_attr {
 | 
				
			|||||||
            $self->error_throw("SNMP::Info::_load_attr: $attr not here");
 | 
					            $self->error_throw("SNMP::Info::_load_attr: $attr not here");
 | 
				
			||||||
            next;
 | 
					            next;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Check to make sure we are still in partial land
 | 
				
			||||||
 | 
					        if (defined $partial and $iid !~ /^$partial$/ and $iid !~ /^$partial\./){
 | 
				
			||||||
 | 
					            #print "$iid makes us leave partial land.\n";
 | 
				
			||||||
 | 
					            last;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($val eq 'NOSUCHOBJECT'){
 | 
					        if ($val eq 'NOSUCHOBJECT'){
 | 
				
			||||||
            $self->error_throw("SNMP::Info::_load_atr: $attr :  NOSUCHOBJECT");
 | 
					            $self->error_throw("SNMP::Info::_load_atr: $attr :  NOSUCHOBJECT");
 | 
				
			||||||
            next;
 | 
					            next;
 | 
				
			||||||
@@ -1804,13 +1982,16 @@ sub _load_attr {
 | 
				
			|||||||
            $val = &$subref($val);
 | 
					            $val = &$subref($val);
 | 
				
			||||||
        } 
 | 
					        } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $store->{$attr}->{$iid}=$val;
 | 
					        $localstore->{$iid}=$val;
 | 
				
			||||||
    } 
 | 
					    } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # mark data as loaded
 | 
					    # Cache data if we are not getting partial data:
 | 
				
			||||||
    $self->{"_${attr}"}++;
 | 
					    if (!defined $partial){
 | 
				
			||||||
 | 
					        $self->{"_${attr}"}++;
 | 
				
			||||||
 | 
					        $store->{$attr}=$localstore;
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $store->{$attr};
 | 
					    return $localstore;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $info->_show_attr()
 | 
					=item $info->_show_attr()
 | 
				
			||||||
@@ -1911,9 +2092,9 @@ sub AUTOLOAD {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Otherwise we must be listed in %FUNCS 
 | 
					    # Otherwise we must be listed in %FUNCS 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Load data if not already cached
 | 
					    # Load data if it both not cached and we are not requesting partial info.
 | 
				
			||||||
    $self->_load_attr( $attr, $funcs{$attr} )
 | 
					    return $self->_load_attr( $attr, $funcs{$attr},@_ )
 | 
				
			||||||
        unless defined $self->{"_${attr}"};
 | 
					        unless (defined $self->{"_${attr}"} and !scalar(@_));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $self->_show_attr($attr);
 | 
					    return $self->_show_attr($attr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -208,7 +208,7 @@ Asante device through SNMP.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Download from http://www.mibdepot.com
 | 
					Download from http://www.mibdepot.com
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=items MIBs listed in SNMP::Info::Layer1
 | 
					=item MIBs listed in SNMP::Info::Layer1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,6 +80,7 @@ sub os {
 | 
				
			|||||||
sub os_ver {
 | 
					sub os_ver {
 | 
				
			||||||
    my $bay = shift;
 | 
					    my $bay = shift;
 | 
				
			||||||
    my $descr = $bay->description();
 | 
					    my $descr = $bay->description();
 | 
				
			||||||
 | 
					    return undef unless defined $descr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # 303 / 304
 | 
					    # 303 / 304
 | 
				
			||||||
    if ($descr =~ m/Rev: \d+\.\d+\.\d+\.\d+-(\d+\.\d+\.\d+\.\d+)/){
 | 
					    if ($descr =~ m/Rev: \d+\.\d+\.\d+\.\d+-(\d+\.\d+\.\d+\.\d+)/){
 | 
				
			||||||
@@ -96,6 +97,7 @@ sub os_ver {
 | 
				
			|||||||
sub os_bin {
 | 
					sub os_bin {
 | 
				
			||||||
    my $bay = shift;
 | 
					    my $bay = shift;
 | 
				
			||||||
    my $descr = $bay->description();
 | 
					    my $descr = $bay->description();
 | 
				
			||||||
 | 
					    return undef unless defined $descr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # 303 / 304
 | 
					    # 303 / 304
 | 
				
			||||||
    if ($descr =~ m/Rev: \d+\.(\d+\.\d+\.\d+)-\d+\.\d+\.\d+\.\d+/){
 | 
					    if ($descr =~ m/Rev: \d+\.(\d+\.\d+\.\d+)-\d+\.\d+\.\d+\.\d+/){
 | 
				
			||||||
@@ -152,7 +154,9 @@ sub i_mac {
 | 
				
			|||||||
sub model {
 | 
					sub model {
 | 
				
			||||||
    my $bay = shift;
 | 
					    my $bay = shift;
 | 
				
			||||||
    my $id = $bay->id();
 | 
					    my $id = $bay->id();
 | 
				
			||||||
 | 
					    return undef unless defined $id;
 | 
				
			||||||
    my $model = &SNMP::translateObj($id);
 | 
					    my $model = &SNMP::translateObj($id);
 | 
				
			||||||
 | 
					    return $id unless defined $model;
 | 
				
			||||||
    $model =~ s/^sreg-//i;
 | 
					    $model =~ s/^sreg-//i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $descr = $bay->description();
 | 
					    my $descr = $bay->description();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user