Compare commits

...

73 Commits

Author SHA1 Message Date
Max Baker
bd457307ff Module did not return 1 and failed to load under specify() 2003-06-18 16:25:08 +00:00
Max Baker
f988cecc4d version 0.5 prep 2003-06-10 16:50:44 +00:00
Max Baker
d2f67b2db2 Added partial table lookup capabilities 2003-05-30 21:04:56 +00:00
Max Baker
c4a4c3d5e6 *** empty log message *** 2003-05-30 21:04:06 +00:00
Max Baker
fa38fdbc2b Added IP Route Table 2003-05-30 19:22:15 +00:00
Max Baker
2e03e3faca added undef checking in os_*() 2003-05-27 15:38:59 +00:00
Max Baker
e448915e0b Added SUPPORT section 2003-05-14 01:07:28 +00:00
Max Baker
37836bedac minor undef warnings 2003-05-12 21:20:48 +00:00
Max Baker
a60663b238 doc change 2003-04-29 18:24:23 +00:00
Max Baker
5e879b6822 Version 4 2003-04-29 18:15:47 +00:00
Max Baker
c672b914db Version 4 readme 2003-04-29 18:15:31 +00:00
Max Baker
f703bdc910 doc change 2003-04-29 18:13:58 +00:00
Max Baker
0752a2403c doc change to 0.4 2003-04-29 18:13:34 +00:00
Max Baker
f0dc4c4b31 added CiscoStats as superclass; doc style to 0.4; removed HP mibs are requirement 2003-04-29 18:12:52 +00:00
Max Baker
7269476bad added CiscoStats as superclass and doc style to 0.4 2003-04-29 18:12:11 +00:00
Max Baker
42d56e62e1 ver 0.4 doc change 2003-04-29 18:11:16 +00:00
Max Baker
873fd257cd added all documentation
fixed regex in os_ver()
added RFC1213-MIB as requirement
2003-04-29 18:10:21 +00:00
Max Baker
43d01c5060 added full information from mib and ver 0.4 documentation style 2003-04-29 18:09:10 +00:00
Max Baker
1d45ab5522 doc change 2003-04-29 18:08:30 +00:00
Max Baker
2674536a55 added b_mac to MUNGE, 0.4 doc change 2003-04-29 18:06:20 +00:00
Max Baker
cc13a0f850 added ciscostats,entity and t/prereq.t 2003-04-29 18:04:59 +00:00
Max Baker
f9a97d7a3b fixed clear_cache() 2003-04-29 18:00:11 +00:00
Max Baker
d5f1a1ae95 doc change 2003-04-29 17:45:40 +00:00
Max Baker
466c0daec0 doc change 2003-04-29 17:42:58 +00:00
Max Baker
e127beb2d7 doc change 2003-04-29 17:42:07 +00:00
Max Baker
ff9cab9fe7 v4 doc changes 2003-04-29 17:32:32 +00:00
Max Baker
6d9ce57032 doc change to 0.4 2003-04-29 17:17:55 +00:00
Max Baker
77d854f58f - version 0.4 call and doc upgrade
- Added os_ver() os()
2003-04-29 17:10:11 +00:00
Max Baker
9e2ac2d880 - added STATISTICS and NETSWITCH mibs for CPU and memory stats
- added hp_cpu(), hp_mem_total(), mem_free(), mem_used(), os_version(),
  os_bin(), mac(), cpu(), os(), os_ver() methods
- changed to 0.4 doc style
2003-04-29 16:56:17 +00:00
Max Baker
4a52fccc20 small doc change 2003-04-29 16:54:12 +00:00
Max Baker
d7e524b4a3 - added os() , os_ver, and os_bin()
- doc change to 0.4 style
2003-04-29 16:53:46 +00:00
Max Baker
6da7d340a9 - Doc changes for 0.4
- added os() and os_ver()
- Got rid of %MYMIBS -> %MIBS indirection
2003-04-29 16:40:43 +00:00
Max Baker
e9fa153e45 doc changes for 0.4 2003-04-29 16:24:48 +00:00
Max Baker
fa99cb39ae - Added interfaces() to only use ifDescr
- Added os and os_ver to cull out oldddddddd catalyst versions
- Added i_name() to use c1900_p_name()
- doc changes for 0.4
2003-04-29 16:18:30 +00:00
Max Baker
622a35de01 doc changes for 0.4 2003-04-29 15:58:17 +00:00
Max Baker
74c85cae9e * added os() and os_ver()
* Documentation revamp
* prep for 0.4
2003-04-29 02:40:53 +00:00
Max Baker
3eba4c6c79 * Added os() and os_ver()
* Rev to 0.4
* Documentation revamp
2003-04-29 02:40:18 +00:00
Max Baker
3f179aa21a * Added NOSUCH support to fix bug with Version 1 data collection
* Major Documentation (pod) rewrite
* Changed debuging to object scope
* Added error throwing and checking
* clear_cache()
2003-04-29 02:22:45 +00:00
Max Baker
a6a8ed4c55 - Exported code from netdisco to c_if() to fake the interface table.
- Updated documentation to reflect autospecify methods of v0.4
2003-04-24 18:50:22 +00:00
Max Baker
d7b6fa2179 *** empty log message *** 2003-04-22 23:12:59 +00:00
Max Baker
69645321cd Major Changes.
1. Changed internal storage of function data from iid -> attr -> val to attr -> iid -> val
2. Changed object name space :
    $info{name}  is a object variable
    $info{_name} is a cached entry or flag for cached entry
3. Added error reporting for silent usage of class with $self->error()
4. Added more object instance methods for instance data for more OO like behavior
5. API HAS CHANGED -- load_all() and all() return new data structure.  These were internal functions,
   but listed in example (groan)
2003-04-21 21:43:39 +00:00
Max Baker
f2754b80bb - Removed ENTITY-MIB methods to SNMP::Info::Entity
- Removed %MY* crap
2003-04-17 21:23:53 +00:00
Max Baker
1f1ba32c1b *** empty log message *** 2003-04-17 21:22:59 +00:00
Max Baker
39ed601300 Added bigint req 2003-04-17 21:21:17 +00:00
Max Baker
c2bbd03c2f Lots of Changes.
- Added auto-specify code in new() and specify()
    - Added BigInt / 64 Bit Counter code
    - Added SNMP::Info::Layer2::Aironet
    - GLOBALs (scalar SNMP data) are now cached
    - Added Interface Statistics methods (i_pkts_*, i_octet_*)
2003-04-17 21:20:26 +00:00
Max Baker
3c3c040471 added check for undef port in fw_mac 2003-03-26 20:34:40 +00:00
Max Baker
af51ee7ea4 added check for undef port in c_ip() 2003-03-26 20:33:39 +00:00
Max Baker
e4e039e2e1 ver_03 2003-03-06 21:56:22 +00:00
Max Baker
6dac5dffb3 new 2003-03-06 21:47:37 +00:00
Max Baker
ddeb705f13 ver_03 2003-03-06 21:41:07 +00:00
Max Baker
b86cf86fa6 ver_03 2003-03-06 21:12:46 +00:00
Max Baker
0cd3ba27c0 removed snmp requirement 2003-03-06 21:02:56 +00:00
Max Baker
fe6157f900 changed to t/* 2003-03-06 21:01:44 +00:00
Max Baker
b4c1bf0900 error check 2003-03-05 19:29:22 +00:00
Max Baker
7f2e79c634 error check in serial() 2003-03-05 19:29:07 +00:00
Max Baker
947c8679c8 Added check in _global() for NOSUCHOBJECT response from SNMP 2003-03-04 20:18:19 +00:00
Max Baker
919906516d Speedup in device_type() and more debugging info for GET operations and new() 2003-02-21 18:23:08 +00:00
Max Baker
ad70c2345e *** empty log message *** 2003-02-19 23:46:18 +00:00
Max Baker
3035a9df7a *** empty log message *** 2003-02-19 17:53:59 +00:00
Max Baker
556441ba09 ver_02_prep 2003-02-19 17:50:56 +00:00
Max Baker
97eeeb4ae4 prep for v0.2 2003-02-19 17:38:30 +00:00
Max Baker
e0c1c79ce8 *** empty log message *** 2003-02-19 17:36:48 +00:00
Max Baker
c5fe50aa67 added 450 exclusion in model() 2003-02-13 19:47:11 +00:00
Max Baker
7d29cf4c13 removed cat/catalyst from model() 2003-02-13 19:43:53 +00:00
Max Baker
7a8967d924 Added cvs id string 2003-02-13 18:47:21 +00:00
Max Baker
c5b1b3c3d2 Added STP table entries and functions 2003-02-13 18:46:42 +00:00
Max Baker
95912047f7 docs 2003-02-13 18:46:20 +00:00
Max Baker
a1286a02f9 Added set() capabilities 2003-02-12 20:49:54 +00:00
Max Baker
543fc51d2f Added layer3/c3550.pm 2003-02-11 20:58:44 +00:00
Max Baker
e2b0f18b28 initial add 2003-02-11 20:58:22 +00:00
Max Baker
2b56fdbb85 removed HP MIBs and HP specific stuff in model() 2003-01-17 18:51:36 +00:00
Max Baker
3371ef7727 Added model() and MODEL_MAP 2003-01-17 18:51:04 +00:00
Max Baker
fd7cf06a07 Changed HP detection in device_type() 2003-01-17 18:49:38 +00:00
28 changed files with 5189 additions and 1774 deletions

View File

@@ -1,4 +1,4 @@
Copyright (c) 2002, Regents of the University of California
Copyright (c) 2002,2003 Regents of the University of California
All rights reserved.
Redistribution and use in source and binary forms, with or without

68
ChangeLog Normal file
View File

@@ -0,0 +1,68 @@
SNMP::Info - Perl5 OO Interface to Network Devices and SNMP MIBs
ChangeLog $Id$
version 0.5 (06/10/03)
* 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
* minor bug fixes
version 0.4 (04/29/03)
* BIG CHANGE ! Internal Data structure has changed.
* Added clear_cache() method
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
from SNMP Version 1 devices.
* Methods load_all() and all() have changed their return value. Sorry but the API had to change.
* New object methods snmp_comm(), snmp_ver(), store(), class(), nosuch() to make it more OO happy.
* Globals are now cached
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
detected in device_type()
* New method specify() returns a new subclass object
* Subclasses are automatically loaded when specify or autospecify is used!
* Added methods for Interface statistics (ifInOctets ...)
* Added methods for Memory and CPU statistics
* Added SNMP::Info::Entity, moved out of L2-HP
* Added SNMP::Info::Layer2::Aironet
version 0.3 (03/06/03)
* Fixed HP model() warning
* Added error checking for responses of NOSUCHOBJECT and NOSUCHINSTANCE in _global
and _load_attr
* Added more debugging
* Added info and munging for c_capabilities in SNMP::Info::CD
Thanks to Martin Lorensen <martin /at- lorensen.dk>
* 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
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
Thanks again to Martin Lorensen <martin /at- lorensen.dk>
* Moved tests from test.pl to t/*
version 0.2 (02/19/03)
* Added put_() methods and support for SNMP put commands
* Added SNMP::Info::Layer3::C3550 class for Cisco Catalyst 3550
* Fixed HP Detection in device_type()
* Added Spanning Tree Protocol (STP) methods to SNMP::Info::Bridge
* Removed HP Specific MIBS in SNMP::Info::Layer2 and cleaned up model()
* Added poke for Bay 450 Switches
* Mapped HP Part Numbers to model numbers J4812A => 2512 in SNMP::Info::Layer2::HP
version 0.1 (12/30/02)
* Initial Release
* SubClasses Included:
* SNMP::Info::Bridge
* SNMP::Info::CDP
* SNMP::Info::EtherLike
* SNMP::Info::MAU
* SNMP::Info::Layer1
o SNMP::Info::Layer1::Allied
o SNMP::Info::Layer1::Asante
* SNMP::Info::Layer2
o SNMP::Info::Layer2::Bay
o SNMP::Info::Layer2::C1900
o SNMP::Info::Layer2::C2900
o SNMP::Info::Layer2::Catalyst
o SNMP::Info::Layer2::HP
* SNMP::Info::Layer3
o SNMP::Info::Layer3::Aironet
o SNMP::Info::Layer3::Foundry

1622
Info.pm

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Bridge
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Bridge;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -43,11 +44,17 @@ $DEBUG=0;
$SNMP::debugging=$DEBUG;
$INIT = 0;
%MIBS = ('BRIDGE-MIB' => 'dot1dBaseBridgeAddress');
%MIBS = ('BRIDGE-MIB' => 'dot1dBaseBridgeAddress');
%GLOBALS = (
'b_mac' => 'dot1dBaseBridgeAddress',
'b_ports' => 'dot1dBaseNumPorts',
'b_type' => 'dot1dBaseType'
'b_type' => 'dot1dBaseType',
# Spanning Tree Protocol
'stp_ver' => 'dot1dStpProtocolSpecification',
'stp_time' => 'dot1dStpTimeSinceTopologyChange',
'stp_root' => 'dot1dStpDesignatedRoot',
);
%FUNCS = (
@@ -63,29 +70,55 @@ $INIT = 0;
'bs_port' => 'dot1dStaticReceivePort',
'bs_to' => 'dot1dStaticAllowedToGoTo',
'bs_status' => 'dot1dStaticStatus',
# Spanning Tree Protocol Table : dot1dStpPortTable
'stp_p_id' => 'dot1dStpPort',
'stp_p_priority' => 'dot1dStpPortPriority',
'stp_p_state' => 'dot1dStpPortState',
'stp_p_cost' => 'dot1dStpPortPathCost',
'stp_p_root' => 'dot1dStpPortDesignatedRoot',
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
'stp_p_port' => 'dot1dStpPortDesignatedPort',
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::MUNGE,
# Add ones for our class
'fw_mac' => \&SNMP::Info::munge_mac,
'bs_mac' => \&SNMP::Info::munge_mac,
'b_mac' => \&SNMP::Info::munge_mac,
'fw_mac' => \&SNMP::Info::munge_mac,
'bs_mac' => \&SNMP::Info::munge_mac,
'stp_root' => \&SNMP::Info::munge_mac,
'stp_p_root' => \&SNMP::Info::munge_mac,
'stp_p_bridge' => \&SNMP::Info::munge_mac,
'stp_p_port' => \&SNMP::Info::munge_mac
);
sub i_stp_state {
my $bridge = shift;
my $bp_index = $bridge->bp_index();
my $stp_p_state = $bridge->stp_p_state();
my %i_stp_state;
foreach my $index (keys %$stp_p_state){
my $state = $stp_p_state->{$index};
my $iid = $bp_index->{$index};
next unless defined $iid;
next unless defined $state;
$i_stp_state{$iid}=$state;
}
return \%i_stp_state;
}
1;
__END__
=head1 NAME
SNMP::Info::Bridge - Perl5 Interface to BRIDGE-MIB
=head1 DESCRIPTION
BRIDGE-MIB is used by most Layer 2 devices like Switches
Inherits all methods from SNMP::Info
SNMP::Info::Bridge - Perl5 Interface to SNMP data available through the BRIDGE-MIB (RFC1493)
=head1 AUTHOR
@@ -93,40 +126,59 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $bridge = new SNMP::Info::Bridge(DestHost => 'myswitch',
Community => 'public');
my $mac = $bridge->mac();
my $bridge = new SNMP::Info (
AutoSpecify => 1,
Debug => 1,
DestHost => 'switch',
Community => 'public',
Version => 2
);
=head1 CREATING AN OBJECT
my $class = $cdp->class();
print " Using device sub class : $class\n";
# Grab Forwarding Tables
my $interfaces = $bridge->interfaces();
my $fw_mac = $bridge->fw_mac();
my $fw_port = $bridge->fw_port();
my $bp_index = $bridge->bp_index();
foreach my $fw_index (keys %$fw_mac){
my $mac = $fw_mac->{$fw_index};
my $bp_id = $fw_mac->{$fw_index};
my $iid = $bp_index->{$bp_id};
my $port = $interfaces->{$iid};
print "Port:$port forwarding to $mac\n";
}
=head1 DESCRIPTION
BRIDGE-MIB is used by most Layer 2 devices, and holds information like the MAC Forwarding Table and Spanning Tree Protocol info.
Create or use a subclass of SNMP::Info that inherits this class. Do not use directly.
For debugging you can call new() directly as you would in SNMP::Info
my $bridge = new SNMP::Info::Bridge(...);
=head2 Inherited Classes
None.
=head2 Required MIBs
=over
=item new SNMP::Info::Bridge()
Arguments passed to new() are passed on to SNMP::Session::new()
my $bridge = new SNMP::Info::Bridge(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $bridge;
=item $bridge->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $bridge->session();
# Set
my $newsession = new SNMP::Session(...);
$bridge->session($newsession);
=item BRIDGE-MIB
=back
=head1 Bridge Global Configuration Values
BRIDGE-MIB needs to be extracted from ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
=head1 GLOBAL METHODS
These are methods that return scalar values from SNMP
=over
@@ -148,9 +200,30 @@ Returns the type? of the device
(B<dot1dBaseType>)
=item $bridge->stp_ver()
Returns what version of STP the device is running. Either decLb100 or ieee8021d.
(B<dot1dStpProtocolSpecification>)
=item $bridge->stp_time()
Returns time since last topology change detected. (100ths/second)
(B<dot1dStpTimeSinceTopologyChange>)
=item $bridge->stp_root()
Returns root of STP.
(B<dot1dStpDesignatedRoot>)
=back
=head1 TABLE ENTRIES
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Forwarding Table (dot1dTpFdbEntry)
@@ -193,4 +266,72 @@ Returns reference to hash of bridge port table entries physical port name.
(B<dot1dBasePortCircuit>)
=back
=head2 Spanning Tree Protocol Table (dot1dStpPortTable)
Descriptions are lifted straight from F<BRIDGE-MIB.my>
=over
=item $bridge->stp_p_id()
"The port number of the port for which this entry contains Spanning Tree Protocol management
information."
(B<dot1dStpPort>)
=item $bridge->stp_p_priority()
"The value of the priority field which is contained in the first (in network byte order)
octet of the (2 octet long) Port ID. The other octet of the Port ID is given by the value of
dot1dStpPort."
(B<dot1dStpPortPriority>)
=item $bridge->stp_p_state()
"The port's current state as defined by application of the Spanning Tree Protocol. This
state controls what action a port takes on reception of a frame. If the bridge has detected
a port that is malfunctioning it will place that port into the broken(6) state. For ports which
are disabled (see dot1dStpPortEnable), this object will have a value of disabled(1)."
disabled(1)
blocking(2)
listening(3)
learning(4)
forwarding(5)
broken(6)
(B<dot1dStpPortState>)
=item $bridge->stp_p_cost()
"The contribution of this port to the path cost of paths towards the spanning tree root which include
this port. 802.1D-1990 recommends that the default value of this parameter be in inverse
proportion to the speed of the attached LAN."
(B<dot1dStpPortPathCost>)
=item $bridge->stp_p_root()
"The unique Bridge Identifier of the Bridge recorded as the Root in the Configuration BPDUs
transmitted by the Designated Bridge for the segment to which the port is attached."
(B<dot1dStpPortDesignatedRoot>)
=item $bridge->stp_p_bridge()
"The Bridge Identifier of the bridge which this port considers to be the Designated Bridge for
this port's segment."
(B<dot1dStpPortDesignatedBridge>)
=item $bridge->stp_p_port()
(B<dot1dStpPortDesignatedPort>)
"The Port Identifier of the port on the Designated Bridge for this port's segment."
=back
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::CDP
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::CDP;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -58,7 +59,7 @@ $INIT = 0;
);
%FUNCS = (
'c_if' => 'cdpCacheIfIndex',
'c_index' => 'cdpCacheIfIndex',
'c_proto' => 'cdpCacheAddressType',
'c_ip' => 'cdpCacheAddress',
'c_ver' => 'cdpCacheVersion',
@@ -72,11 +73,20 @@ $INIT = 0;
);
%MUNGE = (
'c_capabilities' => \&SNMP::Info::munge_octet2hex,
'c_capabilities' => \&munge_caps,
'c_ip' => \&SNMP::Info::munge_ip
);
sub munge_caps {
my $caps = shift;
return undef unless defined $caps;
my $bits = substr(unpack("B*",$caps),-7);
return $bits;
}
sub hasCDP {
my $cdp = shift;
@@ -93,6 +103,34 @@ sub hasCDP {
return $cdp->cdp_run();
}
sub c_if {
my $cdp = shift;
# See if by some miracle Cisco implemented the cdpCacheIfIndex entry
my $c_index = $cdp->c_index();
return $c_index if defined $c_index;
# Nope, didn't think so. Now we fake it.
my $c_ip = $cdp->c_ip();
unless (defined $c_ip){
$cdp->{error} = "SNMP::Info::CDP::c_if() - Device doesn't have c_ip() data. Can't fake c_index()";
$DEBUG and carp($cdp->error(1));
return undef;
}
my %c_if;
foreach my $key (keys %$c_ip){
next unless defined $key;
my $iid = $key;
# Truncate .1 from cdp cache entry
$iid =~ s/\.\d+$//;
$c_if{$key} = $iid;
}
return \%c_if;
}
1;
__END__
@@ -100,56 +138,69 @@ __END__
SNMP::Info::CDP - Perl5 Interface to Cisco Discovery Protocol (CDP) using SNMP
=head1 DESCRIPTION
CDP provides Layer 2 discovery of attached devices that also
speak CDP, including switches, routers and hubs.
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $cdp = new SNMP::Info::CDP( DestHost => 'router' ,
Community => 'public' );
$hascdp = $cdp->hasCDP() ? 'yes' : 'no';
@neighbor_ips = values( %{$cdp->ip()} );
my $cdp = new SNMP::Info (
AutoSpecify => 1,
Debug => 1,
DestHost => 'router',
Community => 'public',
Version => 2
);
=head1 CREATING AN OBJECT
my $class = $cdp->class();
print " Using device sub class : $class\n";
=over
$hascdp = $cdp->hasCDP() ? 'yes' : 'no';
=item new SNMP::Info::CDP()
# Print out a map of device ports with CDP neighbors:
my $interfaces = $cdp->interfaces();
my $c_if = $cdp->c_if();
my $c_ip = $cdp->c_ip();
my $c_port = $cdp->c_port();
Arguments passed to new() are passed on to SNMP::Session::new()
foreach my $cdp_key (keys %$c_ip){
my $iid = $c_if->{$cdp_key};
my $port = $interfaces->{$iid};
my $neighbor = $c_ip->{$cdp_key};
my $neighbor_port = $c_port->{$cdp_key};
print "Port : $port connected to $neighbor / $neighbor_port\n";
}
=head1 DESCRIPTION
my $cdp = new SNMP::Info::CDP(
DestHost => $host,
Community => 'public'
)
die "Couldn't connect.\n" unless defined $cdp;
SNMP::Info::CDP is a subclass of SNMP::Info that provides an object oriented
interface to CDP information through SNMP.
=item $cdp->session()
CDP is a Layer 2 protocol that supplies topology information of devices that also speak CDP,
mostly switches and routers. CDP is implemented in Cisco and some HP devices.
Sets or returns the SNMP::Session object
# Get
my $sess = $cdp->session();
# Set
my $newsession = new SNMP::Session(...);
$cdp->session($newsession);
=back
=head2 Your Device May Vary
Create or use a device subclass that inherits this class. Do not use directly.
Each device implements a subset of the global and cache entries.
Check the return value to see if that data is held by the device.
=head1 CDP GLOBAL VALUES
=head2 Inherited Classes
None.
=head2 Required MIBs
=over
=item CISCO-CDP-MIB
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBAL METHODS
These are methods that return scalar values from SNMP
=over
@@ -161,7 +212,8 @@ Accounts for SNMP version 1 devices which may have CDP but not cdp_run()
=item $cdp->cdp_run()
Is CDP enabled on this device?
Is CDP enabled on this device? Note that a lot of Cisco devices that implement
CDP don't implement this value. @#%$!
(B<cdpGlobalRun>)
@@ -187,51 +239,44 @@ This is the device id broadcast via CDP to other devices, and is what is retriev
=back
=head1 CDP CACHE ENTRIES
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 CDP CACHE ENTRIES
=over
=item $cdp->c_proto()
Returns remote address type received. Usually IP.
(B<cdpCacheAddressType>)
=item $cdp->c_ip()
Returns remote IP address
(B<cdpCacheAddress>)
=item $cdp->c_ver()
Returns remote hardware version
(B<cdpCacheVersion>)
=item $cdp->c_id()
Returns remote device id string
(B<cdpCacheDeviceId>)
=item $cdp->c_port()
Returns remote port ID
(B<cdpDevicePort>)
=item $cdp->c_platform()
Returns remote platform id
(B<cdpCachePlatform>)
=item $cdp->c_capabilities()
Returns Device Functional Capabilities bitmap.
Returns Device Functional Capabilities. Results are munged into an ascii
binary string, 7 digits long, MSB. Each digit represents a bit from the
table below.
Anyone know where I can get info on how to decode this?
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
(Bit) - Description
=over
=item (0x40) - Provides level 1 functionality.
=item (0x20) - The bridge or switch does not forward IGMP Report packets on nonrouter ports.
=item (0x10) - Sends and receives packets for at least one network layer protocol. If the device is routing the protocol, this bit should not be set.
=item (0x08) - Performs level 2 switching. The difference between this bit and bit 0x02 is that a switch does not run the Spanning-Tree Protocol. This device is assumed to be deployed in a physical loop-free topology.
=item (0x04) - Performs level 2 source-route bridging. A source-route bridge would set both this bit and bit 0x02.
=item (0x02) - Performs level 2 transparent bridging.
=item (0x01) - Performs level 3 routing for at least one network layer protocol.
=back
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to this information.
(B<cdpCacheCapabilities>)
@@ -241,18 +286,92 @@ Returns remote VTP Management Domain as defined in CISCO-VTP-MIB::managementDoma
(B<cdpCacheVTPMgmtDomain>)
=item $cdp->c_vlan()
Returns the remote interface native VLAN.
(B<cdpCacheNativeVLAN>)
=item $cdp->c_duplex()
Returns the port duplex status from remote devices.
(B<cdpCacheDuplex>)
=item $cdp->c_id()
Returns remote device id string
(B<cdpCacheDeviceId>)
=item $cdp->c_if()
Returns the mapping to the SNMP Interface Table.
Note that a lot devices don't implement $cdp->c_index(), So if it isn't around,
we fake it.
In order to map the cdp table entry back to the interfaces() entry, we truncate the last number
off of it :
# it exists, yay.
my $c_index = $device->c_index();
return $c_index if defined $c_index;
# if not, let's fake it
my $c_ip = $device->c_ip();
my %c_if
foreach my $key (keys %$c_ip){
$iid = $key;
## Truncate off .1 from cdp response
$iid =~ s/\.\d+$//;
$c_if{$key} = $iid;
}
return \%c_if;
=item $cdp->c_index()
Returns the mapping to the SNMP2 Interface table for CDP Cache Entries.
Most devices don't implement this, so you probably want to use $cdp->c_if() instead.
See c_if() entry.
(B<cdpCacheIfIndex>)
=item $cdp->c_ip()
Returns remote IP address
(B<cdpCacheAddress>)
=item $cdp->c_platform()
Returns remote platform id
(B<cdpCachePlatform>)
=item $cdp->c_port()
Returns remote port ID
(B<cdpDevicePort>)
=item $cdp->c_proto()
Returns remote address type received. Usually IP.
(B<cdpCacheAddressType>)
=item $cdp->c_ver()
Returns remote hardware version
(B<cdpCacheVersion>)
=item $cdp->c_vlan()
Returns the remote interface native VLAN.
(B<cdpCacheNativeVLAN>)
=back
=cut

269
Info/CiscoStats.pm Normal file
View File

@@ -0,0 +1,269 @@
# SNMP::Info::CiscoStats
# Max Baker <max@warped.org>
#
# Copyright (c) 2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::CiscoStats;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
@SNMP::Info::CiscoStats::ISA = qw/SNMP::Info Exporter/;
@SNMP::Info::CiscoStats::EXPORT_OK = qw//;
$DEBUG=0;
$SNMP::debugging=$DEBUG;
$INIT = 0;
%MIBS = (
'RFC1213-MIB' => 'sysDescr',
'CISCO-PROCESS-MIB' => 'cpmCPUTotal5sec',
'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed'
);
%GLOBALS = (
'description' => 'sysDescr',
# We will use the numeric OID's so that we don't require people
# to install v1 MIBs, which can conflict.
# OLD-CISCO-CPU-MIB:avgBusyPer
'ios_cpu' => '1.3.6.1.4.1.9.2.1.56.0',
'ios_cpu_1min' => '1.3.6.1.4.1.9.2.1.57.0',
'ios_cpu_5min' => '1.3.6.1.4.1.9.2.1.58.0',
# CISCO-PROCESS-MIB
'cat_cpu' => 'cpmCPUTotal5sec.9',
'cat_cpu_1min' => 'cpmCPUTotal1min.9',
'cat_cpu_5min' => 'cpmCPUTotal5min.9',
# CISCO-MEMORY-POOL-MIB
'mem_free' => 'ciscoMemoryPoolFree.1',
'mem_used' => 'ciscoMemoryPoolUsed.1',
);
%FUNCS = (
);
%MUNGE = (
);
sub os {
my $l2 = shift;
my $descr = $l2->description();
return 'catalyst' if ($descr =~ /catalyst/i);
return 'ios' if ($descr =~ /IOS/);
return undef;
}
sub os_ver {
my $l2 = shift;
my $os = $l2->os();
my $descr = $l2->description();
# Older Catalysts
if ($os eq 'catalyst' and $descr =~ m/V(\d{1}\.\d{2}\.\d{2})/){
return $1;
}
# Newer Catalysts and IOS devices
if ($descr =~ m/Version (\d+\.\d+\([^)]+\)[^,\s]*)(,|\s)+/ ){
return $1;
}
return undef;
}
sub cpu {
my $self = shift;
my $ios_cpu = $self->ios_cpu();
return $ios_cpu if defined $ios_cpu;
my $cat_cpu = $self->cat_cpu();
return $cat_cpu;
}
sub cpu_1min {
my $self = shift;
my $ios_cpu_1min = $self->ios_cpu_1min();
return $ios_cpu_1min if defined $ios_cpu_1min;
my $cat_cpu_1min = $self->cat_cpu_1min();
return $cat_cpu_1min;
}
sub cpu_5min {
my $self = shift;
my $ios_cpu_5min = $self->ios_cpu_5min();
return $ios_cpu_5min if defined $ios_cpu_5min;
my $cat_cpu_5min = $self->cat_cpu_5min();
return $cat_cpu_5min;
}
sub mem_total {
my $self = shift;
my $mem_free = $self->mem_free();
my $mem_used = $self->mem_used();
return undef unless defined $mem_free and defined $mem_used;
return $mem_free + $mem_used;
}
1;
__END__
=head1 NAME
SNMP::Info::CiscoStats - Perl5 Interface to CPU and Memory stats for Cisco Devices
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $ciscostats = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $ciscostats->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
SNMP::Info::CiscoStats is a subclass of SNMP::Info that provides cpu, memory, os and
version information about Cisco Devices.
Use or create in a subclass of SNMP::Info. Do not use directly.
=head2 Inherited Classes
none.
=head2 Required MIBs
=over
=item CISCO-PROCESS-MIB
=item CISCO-MEMORY-POOL-MIB
=item RFC1213-MIB
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
=over
=item $ciscostats->cpu()
Returns ios_cpu() or cat_cpu(), whichever is available.
=item $ciscostats->cpu_1min()
Returns ios_cpu_1min() or cat_cpu1min(), whichever is available.
=item $ciscostats->cpu_5min()
Returns ios_cpu_5min() or cat_cpu5min(), whichever is available.
=item $ciscostats->mem_total()
Returns mem_free() + mem_used()
=item $ciscostats->os()
Trys to parse if device is running IOS or CatOS from description()
=item $ciscostats->os_ver()
Trys to parse device operating system version from description()
=item $ciscostats->ios_cpu()
Current CPU usage in percents of device.
B<1.3.6.1.4.1.9.2.1.56.0> =
B<OLD-CISCO-CPU-MIB:avgBusyPer>
=item $ciscostats->ios_cpu_1min()
Average CPU Usage in percents of device over last minute.
B<1.3.6.1.4.1.9.2.1.57.0>
=item $ciscostats->ios_cpu_5min()
Average CPU Usage in percents of device over last 5 minutes.
B<1.3.6.1.4.1.9.2.1.58.0>
=item $ciscostats->cat_cpu()
Current CPU usage in percents of device.
B<CISCO-PROCESS-MIB::cpmCPUTotal5sec.9>
=item $ciscostats->cat_cpu_1min()
Average CPU Usage in percents of device over last minute.
B<CISCO-PROCESS-MIB::cpmCPUTotal1min.9>
=item $ciscostats->cat_cpu_5min()
Average CPU Usage in percents of device over last 5 minutes.
B<CISCO-PROCESS-MIB::cpmCPUTotal5min.9>
=item $ciscostats->mem_free()
Main DRAM free in device. In bytes.
B<CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree.1>
=item $ciscostats->mem_used()
Main DRAM used in device. In bytes.
B<CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed.1>
=back
=head1 TABLE METHODS
None.
=cut

198
Info/Entity.pm Normal file
View File

@@ -0,0 +1,198 @@
# SNMP::Info::Entity
# Max Baker <max@warped.org>
#
# Copyright (c) 2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Entity;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
@SNMP::Info::Entity::ISA = qw/SNMP::Info Exporter/;
@SNMP::Info::Entity::EXPORT_OK = qw//;
$INIT = 0;
%MIBS = ('ENTITY-MIB' => 'entPhysicalSerialNum');
%GLOBALS = (
);
%FUNCS = (
'e_class' => 'entPhysicalClass',
'e_descr' => 'entPhysicalDescr',
'e_fwver' => 'entPhysicalFirmwareRev',
'e_hwver' => 'entPhysicalHardwareRev',
'e_map' => 'entAliasMappingIdentifier',
'e_model' => 'entPhysicalModelName',
'e_name' => 'entPhysicalName',
'e_parent' => 'entPhysicalContainedIn',
'e_serial' => 'entPhysicalSerialNum',
'e_swver' => 'entPhysicalSoftwareRev',
'e_type' => 'entPhysicalVendorType',
);
%MUNGE = (
);
sub e_port {
my $entity = shift;
my $e_map = $entity->e_map();
my %e_port;
foreach my $e_id (keys %$e_map) {
my $id = $e_id;
$id =~ s/\.0$//;
my $iid = $e_map->{$e_id};
$iid =~ s/.*\.//;
$e_port{$id} = $iid;
}
return \%e_port;
}
1;
=head1 NAME
SNMP::Info::Entity - Perl5 Interface to SNMP data stored in ENTITY-MIB.
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $entity = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $entity->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
ENTITY-MIB is used by some Layer 2 devices like HP Switches and Aironet Access Points
Create or use a device subclass that inherit this class. Do not use directly.
For debugging purposes you can call this class directly as you would SNMP::Info
my $entity = new SNMP::Info::Entity (...);
=head2 Inherited Classes
none.
=head2 Required MIBs
=over
=item ENTITY-MIB
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
none.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Entity Table
=over
=item $entity->e_class()
(C<entPhysicalClass>)
=item $entity->e_descr()
(C<entPhysicalClass>)
=item $entity->e_fwver()
(C<entPhysicalFirmwareRev>)
=item $entity->e_hwver()
(C<entPhysicalHardwareRev>)
=item $entity->e_map()
(C<entAliasMappingIdentifier>)
=item $entity->e_model()
(C<entPhysicalModelName>)
=item $entity->e_name()
(C<entPhysicalName>)
=item $entity->e_parent()
(C<entPhysicalContainedIn>)
=item $entity->e_port()
Maps EntityTable entries to the Interface Table (IfTable) using
$entity->e_map()
=item $entity->e_serial()
(C<entPhysicalSerialNum>)
=item $entity->e_swver()
(C<entPhysicalSoftwareRev>)
=item $entity->e_type()
(C<entPhysicalVendorType>)
=back
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::EtherLike
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::EtherLike;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -51,8 +52,25 @@ $INIT = 0;
%FUNCS = (
# EtherLike StatsTable
'el_index' => 'dot3StatsIndex',
'el_duplex' => 'dot3StatsDuplexStatus',
'el_chipset' => 'dot3StatsEtherChipSet',
'el_coll_excess' => 'dot3StatsExcessiveCollisions',
'el_coll_late' => 'dot3StatsLateCollisions',
'el_coll_mult' => 'dot3StatsMultipleCollisionFrames',
'el_coll_single' => 'dot3StatsSingleCollisionFrames',
'el_duplex' => 'dot3StatsDuplexStatus',
'el_error_alignment' => 'dot3StatsAlignmentErrors',
'el_error_fcs' => 'dot3StatsFCSErrors',
'el_error_cs' => 'dot3StatsCarrierSenseErrors',
'el_error_frame' => 'dot3StatsFrameTooLongs',
'el_error_mac_rec' => 'dot3StatsInternalMacReceiveErrors',
'el_error_mac_xmit' => 'dot3StatsInternalMacTransmitErrors',
'el_error_sqe' => 'dot3StatsSQETestErrors',
'el_error_symbol' => 'dot3StatsSymbolErrors',
'el_index' => 'dot3StatsIndex',
'el_xmit_defer' => 'dot3StatsDeferredTransmissions',
# Ethernet-like Collision Statistics Group
'el_coll_count' => 'dot3CollCount',
'el_coll_freq' => 'dot3CollFrequencies'
);
%MUNGE = ( %SNMP::Info::MUNGE );
@@ -65,62 +83,77 @@ __END__
SNMP::Info::EtherLike - Perl5 Interface to SNMP ETHERLIKE-MIB
=head1 DESCRIPTION
ETHERLIKE-MIB is used by some Layer 3 Devices such as Cisco routers.
Inherits all methods from SNMP::Info
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $el = new SNMP::Info::EtherLike(DestHost => 'myrouter',
Community => 'public');
my $el = new SNMP::Info (
AutoSpecify => 1,
Debug => 1,
DestHost => 'router',
Community => 'public',
Version => 2
);
my $el_decoder = $el->el_index();
my $el_duplex = $el->el_duplex();
my $class = $cdp->class();
print " Using device sub class : $class\n";
=head1 CREATING AN OBJECT
# Find the duplex setting for a port on a device that implements ETHERLIKE-MIB
my $interfaces = $el->interfaces();
my $el_index = $el->el_index();
my $el_duplex = $el->el_duplex();
foreach my $el_port (keys %$el_duplex){
my $duplex = $el_duplex->{$el_port};
my $iid = $el_index->{$el_port};
my $port = $interfaces->{$iid};
$duplex = 'half' if $duplex =~/half/i;
$duplex = 'full' if $duplex =~/full/i;
$duplex = 'auto' if $duplex =~/auto/i;
print "PORT:$port set to duplex:$duplex\n";
}
=head1 DESCRIPTION
SNMP::Info::EtherLike is a subclass of SNMP::Info that supplies
access to the ETHERLIKE-MIB used by some Layer 3 Devices such as Cisco routers.
Use or create a subclass of SNMP::Info that inherits this one. Do not use directly.
=head2 Inherited Classes
None.
=head2 Required MIBs
=over
=item new SNMP::Info::EtherLike()
Arguments passed to new() are passed on to SNMP::Session::new()
my $el = new SNMP::Info::EtherLike(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $el;
=item $el->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $el->session();
# Set
my $newsession = new SNMP::Session(...);
$el->session($newsession);
=item ETHERLIKE-MIB
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
These are methods that return scalar values from SNMP
=over
=item None
=back
=head1 ETHERLIKE STATS TABLE (dot3StatsTable)
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 ETHERLIKE STATS TABLE (dot3StatsTable)
=over
@@ -136,6 +169,70 @@ Returns reference to hash. Indexes Stats Table to Duplex Status of port.
(B<dot3StatsDuplexStatus>)
=item $el->el_chipset()
(B<dot3StatsEtherChipSet>)
=item $el->el_coll_excess()
(B<dot3StatsExcessiveCollisions>)
=item $el->el_coll_late()
(B<dot3StatsLateCollisions>)
=item $el->el_coll_mult()
(B<dot3StatsMultipleCollisionFrames>)
=item $el->el_coll_single()
(B<dot3StatsSingleCollisionFrames>)
=item $el->el_error_alignment()
(B<dot3StatsAlignmentErrors>)
=item $el->el_error_fcs()
(B<dot3StatsFCSErrors>)
=item $el->el_error_cs()
(B<dot3StatsCarrierSenseErrors>)
=item $el->el_error_frame()
(B<dot3StatsFrameTooLongs>)
=item $el->el_error_mac_rec()
(B<dot3StatsInternalMacReceiveErrors>)
=item $el->el_error_mac_xmit()
(B<dot3StatsInternalMacTransmitErrors>)
=item $el->el_error_sqe()
(B<dot3StatsSQETestErrors>)
=item $el->el_error_symbol()
(B<dot3StatsSymbolErrors>)
=item $el->el_xmit_defer()
(B<dot3StatsDeferredTransmissions>)
=item $el->el_coll_count()
(B<dot3CollCount>)
=item $el->el_coll_freq()
(B<dot3CollFrequencies>)
=back
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer1 - SNMP Interface to Layer1 Devices
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer1;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -162,24 +163,7 @@ __END__
=head1 NAME
SNMP::Info::Layer1 - Perl5 Interface to Layer1 network devices.
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Layer1 device through SNMP. Information is stored in a number of MIBs.
See super classes for descriptions of other available methods.
Inherits from:
SNMP::Info
MIBS:
MIBS listed in SNMP::Info
Cisco MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
SNMP::Info::Layer1 - Perl5 Interface to network devices serving Layer1 only.
=head1 AUTHOR
@@ -187,45 +171,72 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $l1 = new SNMP::Info::Layer1(DestHost => 'mybridge' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $l1 = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 1
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $l1->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
# Let's get some basic Port information
my $interfaces = $l1->interfaces();
my $i_up = $l1->i_up();
my $i_speed = $l1->i_speed();
foreach my $iid (keys %$interfaces) {
my $port = $interfaces->{$iid};
my $up = $i_up->{$iid};
my $speed = $i_speed->{$iid}
print "Port $port is $up. Port runs at $speed.\n";
}
=head1 DESCRIPTION
This class is usually used as a superclass for more specific device classes listed under
SNMP::Info::Layer1::* Please read all docs under SNMP::Info first.
Provides abstraction to the configuration information obtainable from a
Layer1 device through SNMP. Information is stored in a number of MIBs.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $l1 = new SNMP::Info::Layer1(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer1()
Arguments passed to new() are passed on to SNMP::Session::new()
my $l1 = new SNMP::Info::Layer1(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $l1;
=item $l1->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $l1->session();
# Set
my $newsession = new SNMP::Session(...);
$l1->session($newsession);
=item SNMP::Info
=back
=head1 GLOBALS
=head2 Required MIBs
=over
=item $l1->vendor()
=item SNMP-REPEATER-MIB
Trys to discover the vendor from $l1->model() and $l1->vendor()
=item Inherited Classes
MIBs required for SNMP::Info
=back
SNMP-REPEATER-MIB needs to be extracted from ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $l1->ports_managed()
@@ -233,6 +244,16 @@ Gets the number of ports under the interface mib
(B<ifNumber>)
=back
=head2 Overrides
=over
=item $l1->vendor()
Trys to discover the vendor from $l1->model() and $l1->vendor()
=item $l1->ports()
Adds the values from rptr_ports() and ports_managed()
@@ -245,8 +266,15 @@ Number of 'groups' in the Repeater MIB
=back
=head2 Globals imported from SNMP::Info
See documentation in SNMP::Info for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
@@ -291,4 +319,8 @@ Group (slot) Number for given port.
=back
=head2 Table Methods imported from SNMP::Info
See documentation in SNMP::Info for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer1::Allied
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer1::Allied;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
@@ -63,6 +64,19 @@ sub vendor {
return 'allied';
}
sub os {
return 'allied';
}
sub os_ver {
my $allied = shift;
my $descr = $allied->description();
if ($descr =~ m/version (\d+\.\d+)/){
return $1;
}
}
sub model {
my $allied = shift;
@@ -110,68 +124,74 @@ __END__
SNMP::Info::Layer1::Allied - SNMP Interface to old Allied Hubs
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Allied device through SNMP. See inherited classes' documentation for
inherited methods.
Inherits from:
SNMP::Info::Layer1
Required MIBs:
ATI-MIB - Download for your device from http://www.allied-telesyn.com/allied/support/
MIBs listed in SNMP::Info::Layer1
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $allied = new SNMP::Info::Layer1::Allied(DestHost => 'mycat1900' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $allied = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myhub',
Community => 'public',
Version => 1
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $l1->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Allied device through SNMP. See inherited classes' documentation for
inherited methods.
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer1::Allied()
=item SNMP::Info::Layer1
Arguments passed to new() are passed on to SNMP::Session::new()
=back
=head2 Required MIBs
my $allied = new SNMP::Info::Layer1::Allied(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $allied;
=over
=item $allied->session()
=item ATI-MIB
Sets or returns the SNMP::Session object
Download for your device from http://www.allied-telesyn.com/allied/support/
# Get
my $sess = $allied->session();
=item Inherited Classes
# Set
my $newsession = new SNMP::Session(...);
$allied->session($newsession);
MIBs listed in SNMP::Info::Layer1 and its inherited classes.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=head2 Overrides
=over
=item $allied->vendor()
Returns 'allied' :)
=item $allied->os()
Returns 'allied'
=item $allied->os_ver()
Culls Version from description()
=item $allied->root_ip()
Returns IP Address of Managed Hub.
@@ -184,6 +204,10 @@ Trys to cull out AT-nnnnX out of the description field.
=back
=head2 Global Methods imported from SNMP::Info::Layer1
See documentation in SNMP::Info::Layer1 for details.
=head1 TABLE ENTRIES
=head2 Overrides
@@ -215,4 +239,8 @@ the values of ati_up() to 'up' and 'down'.
=back
=head2 Table Methods imported from SNMP::Info::Layer1
See documentation in SNMP::Info::Layer1 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer1::Asante
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer1::Asante;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
@@ -79,6 +80,19 @@ sub interfaces {
return \%interfaces;
}
sub os {
return 'asante';
}
sub os_ver {
my $asante = shift;
my $descr = $asante->description();
if ($descr =~ /software v(\d+\.\d+)/){
return $1;
}
}
sub vendor {
return 'asante';
}
@@ -153,64 +167,65 @@ __END__
SNMP::Info::Layer1::Asante - SNMP Interface to old Asante 1012 Hubs
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Asante device through SNMP. See inherited classes' documentation for
inherited methods.
Inherits from:
SNMP::Info::Layer1
Required MIBs:
ASANTE-HUB1012-MIB - Download from http://www.mibdepot.com
MIBs listed in SNMP::Info::Layer1
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $asante = new SNMP::Info::Layer1::Asante(DestHost => 'mycat1900' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $asante = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $asante->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Asante device through SNMP.
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer1::Asante()
=item SNMP::Info::Layer1
Arguments passed to new() are passed on to SNMP::Session::new()
=back
=head2 Required MIBs
my $asante = new SNMP::Info::Layer1::Asante(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $asante;
=over
=item $asante->session()
=item ASANTE-HUB1012-MIB
Sets or returns the SNMP::Session object
Download from http://www.mibdepot.com
# Get
my $sess = $asante->session();
# Set
my $newsession = new SNMP::Session(...);
$asante->session($newsession);
=item MIBs listed in SNMP::Info::Layer1
=back
=head1 GLOBALS
=head2 Overrides
=over
=item $asante->os()
Returns 'asante'
=item $asante->os_ver()
Culls software version from description()
=item $asante->vendor()
Returns 'asante' :)
@@ -227,6 +242,10 @@ Trys to cull out AT-nnnnX out of the description field.
=back
=head2 Globals inherited from SNMP::Info::Layer1
See documentation in SNMP::Info::Layer1 for details.
=head1 TABLE ENTRIES
=head2 Overrides
@@ -258,4 +277,8 @@ the values of ati_up() to 'up' and 'down'.
=back
=head2 Table Methods imported from SNMP::Info::Layer1
See documentation in SNMP::Info::Layer1 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2 - SNMP Interface to Layer2 Devices
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -36,10 +37,11 @@ use Exporter;
use SNMP::Info;
use SNMP::Info::Bridge;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE $INIT/;
@SNMP::Info::Layer2::ISA = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::CDP Exporter/;
@SNMP::Info::Layer2::ISA = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::CDP SNMP::Info::CiscoStats Exporter/;
@SNMP::Info::Layer2::EXPORT_OK = qw//;
$DEBUG=0;
@@ -52,21 +54,23 @@ $INIT = 0;
%MIBS = ( %SNMP::Info::MIBS,
%SNMP::Info::Bridge::MIBS,
%SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoStats::MIBS,
'CISCO-PRODUCTS-MIB' => 'sysName',
'CISCO-STACK-MIB' => 'wsc1900sysID',
'HP-ICF-OID' => 'hpSwitch4000',
);
%GLOBALS = (
%SNMP::Info::GLOBALS,
%SNMP::Info::Bridge::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
);
%FUNCS = (
%SNMP::Info::FUNCS,
%SNMP::Info::Bridge::FUNCS,
%SNMP::Info::CDP::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
);
%MUNGE = (
@@ -74,6 +78,7 @@ $INIT = 0;
%SNMP::Info::MUNGE,
%SNMP::Info::Bridge::MUNGE,
%SNMP::Info::CDP::MUNGE,
%SNMP::Info::CiscoStats::MUNGE,
);
# Method OverRides
@@ -90,6 +95,8 @@ sub model {
# Cisco
$model =~ s/sysid$//i;
$model =~ s/^(cisco|catalyst)//i;
$model =~ s/^cat//i;
return $model;
}
@@ -157,31 +164,7 @@ __END__
=head1 NAME
SNMP::Info::Layer2 - Perl5 Interface to Layer2 network devices.
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Layer2 device through SNMP. Information is stored in a number of MIBs.
See super classes for descriptions of other available methods.
Inherits from:
SNMP::Info
SNMP::Info::Bridge
SNMP::Info::CDP
MIBS:
CISCO-PRODUCTS-MIB - Needed for ID of Cisco Products
CISCO-STACK-MIB - Needed for ID of Cisco Products
HP-ICF-OID - Needed for ID of HP Products
MIBS listed in SNMP::Info::Bridge and SNMP::Info::CDP
Cisco MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
HP MIBs can be found at http://www.hp.com/rnd/software
SNMP::Info::Layer2 - Perl5 Interface to network devices serving Layer2 only.
=head1 AUTHOR
@@ -189,46 +172,90 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $l2 = new SNMP::Info::Layer2(DestHost => 'mybridge' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $l2 = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $l2->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
# Let's get some basic Port information
my $interfaces = $l2->interfaces();
my $i_up = $l2->i_up();
my $i_speed = $l2->i_speed();
foreach my $iid (keys %$interfaces) {
my $port = $interfaces->{$iid};
my $up = $i_up->{$iid};
my $speed = $i_speed->{$iid}
print "Port $port is $up. Port runs at $speed.\n";
}
=head1 DESCRIPTION
This class is usually used as a superclass for more specific device classes listed under
SNMP::Info::Layer2::* Please read all docs under SNMP::Info first.
Provides abstraction to the configuration information obtainable from a
Layer2 device through SNMP. Information is stored in a number of MIBs.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $l2 = new SNMP::Info::Layer2(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer2()
=item SNMP::Info
Arguments passed to new() are passed on to SNMP::Session::new()
=item SNMP::Info::Bridge
=item SNMP::Info::CDP
my $l2 = new SNMP::Info::Layer2(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $l2;
=item $l2->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $l2->session();
# Set
my $newsession = new SNMP::Session(...);
$l2->session($newsession);
=item SNMP::Info::CiscoStats
=back
=head2 Required MIBs
=over
=item CISCO-PRODUCTS-MIB
Needed for ID of Cisco Products
=item CISCO-STACK-MIB
Needed for ID of Cisco Products
=item Inherited Classes
MIBs required by the inherited classes listed above.
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
These are methods that return scalar value from SNMP
=head2 Overrides
=over
=item $l2->model()
Cross references $l2->id() with product IDs in the
Cisco and HP specific MIBs.
Cisco MIBs.
For HP devices, removes 'hpswitch' from the name
@@ -236,11 +263,30 @@ For Cisco devices, removes 'sysid' from the name
=item $l2->vendor()
Trys to discover the vendor from $l2->model() and $l2->vendor()
Trys to discover the vendor from $l2->model() and $l2->description()
=back
=head1 TABLE ENTRIES
=head2 Globals imported from SNMP::Info
See documentation in SNMP::Info for details.
=head2 Globals imported from SNMP::Info::Bridge
See documentation in SNMP::Info::Bridge for details.
=head2 Globals imported from SNMP::Info::CDP
See documentation in SNMP::Info::CDP for details.
=head2 Globals imported from SNMP::Info::CiscoStats
See documentation in SNMP::Info::CiscoStats for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
@@ -260,4 +306,20 @@ Ignores ports with B<ifType> of loopback,propvirtual,other, and cpu
=back
=head2 Table Methods imported from SNMP::Info
See documentation in SNMP::Info for details.
=head2 Table Methods imported from SNMP::Info::Bridge
See documentation in SNMP::Info::Bridge for details.
=head2 Table Methods imported from SNMP::Info::CDP
See documentation in SNMP::Info::CDP for details.
=head2 Table Methods imported from SNMP::Info::CiscoStats
See documentation in SNMP::Info::CiscoStats for details.
=cut

238
Info/Layer2/Aironet.pm Normal file
View File

@@ -0,0 +1,238 @@
# SNMP::Info::Layer2::Aironet
# Max Baker <max@warped.org>
#
# Copyright (c) 2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::Aironet;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info::Layer2;
use SNMP::Info::Entity;
use SNMP::Info::EtherLike;
@SNMP::Info::Layer2::Aironet::ISA = qw/SNMP::Info::Layer2 SNMP::Info::Entity SNMP::Info::EtherLike Exporter/;
@SNMP::Info::Layer2::Aironet::EXPORT_OK = qw//;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
# Set for No CDP
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
%SNMP::Info::Entity::GLOBALS,
%SNMP::Info::EtherLike::GLOBALS,
'serial' => 'entPhysicalSerialNum.1',
'descr' => 'sysDescr'
);
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
%SNMP::Info::Entity::FUNCS,
%SNMP::Info::EtherLike::FUNCS
);
%MIBS = (
%SNMP::Info::Layer2::MIBS,
%SNMP::Info::Entity::MIBS,
%SNMP::Info::EtherLike::MIBS
);
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
%SNMP::Info::Entity::MUNGE,
%SNMP::Info::EtherLike::MUNGE
);
sub vendor {
# Sorry, but it's true.
return 'cisco';
}
sub interfaces {
my $aironet = shift;
my $i_description = $aironet->i_description();
return $i_description;
}
# Tag on e_descr.1
sub description {
my $aironet = shift;
my $descr = $aironet->descr();
my $e_descr = $aironet->e_descr();
$descr = "$e_descr->{1} $descr" if defined $e_descr->{1};
return $descr;
}
# Fetch duplex from EtherLike
sub i_duplex {
my $aironet = shift;
my $el_duplex = $aironet->el_duplex();
my %i_duplex;
foreach my $d (keys %$el_duplex){
my $val = $el_duplex->{$d};
next unless defined $val;
$i_duplex{$d} = 'full' if $val =~ /full/i;
$i_duplex{$d} = 'half' if $val =~ /half/i;
}
return \%i_duplex;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer2::Aironet - SNMP Interface to Cisco Aironet devices running IOS.
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $aironet = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $aironet->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides interface to SNMP Data available on newer Aironet devices running Cisco IOS.
Note there are two classes for Aironet devices :
=over
=item SNMP::Info::Layer3::Aironet
This class is for devices running Aironet software (older)
=item SNMP::Info::Layer2::Aironet
This class is for devices running Cisco IOS software (newer)
=back
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $aironet = new SNMP::Info::Layer2::Aironet(...);
=head2 Inherited Classes
=over
=item SNMP::Info::Layer2
=item SNMP::Info::Entity
=item SNMP::Info::EtherLike
=back
=head2 Required MIBs
=over
=item Inherited Classes
MIBs required by the inherited classes listed above.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $aironet->discription()
Adds info from method e_descr() from SNMP::Info::Entity
=item $aironet->vendor()
Returns 'cisco' :)
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=head2 Globals imported from SNMP::Info::Entity
See documentation in SNMP::Info::Entity for details.
=head2 Globals imported from SNMP::Info::EtherLike
See documentation in SNMP::Info::EtherLike for details.
=head1 TABLE ENTRIES
=head2 Overrides
=over
=item $aironet->interfaces()
Uses the i_description() field.
=item $aironet->i_duplex()
Crosses information from SNMP::Info::EtherLike to get duplex info for interfaces.
=back
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=head2 Table Methods imported from SNMP::Info::Entity
See documentation in SNMP::Info::Entity for details.
=head2 Table Methods imported from SNMP::Info::EtherLike
See documentation in SNMP::Info::EtherLike for details.
=cut

View File

@@ -1,5 +1,7 @@
# SNMP::Info::Layer2::Bay
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -24,11 +26,10 @@
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# SNMP::Info::Layer2::Bay
# Max Baker <max@warped.org>
package SNMP::Info::Layer2::Bay;
$VERSION = 0.1;
$VERSION = 0.6;
# $Id$
use strict;
use Exporter;
@@ -72,6 +73,44 @@ $SNMP::Info::SPEED_MAP{200_000_000} = '100 Mbps';
'i_mac2' => \&SNMP::Info::munge_mac ,
);
sub os {
return 'bay';
}
sub os_ver {
my $bay = shift;
my $descr = $bay->description();
return undef unless defined $descr;
# 303 / 304
if ($descr =~ m/Rev: \d+\.\d+\.\d+\.\d+-(\d+\.\d+\.\d+\.\d+)/){
return $1;
}
# 450
if ($descr =~ m/SW:v(\d+\.\d+\.\d+\.\d+)/){
return $1;
}
return undef;
}
sub os_bin {
my $bay = shift;
my $descr = $bay->description();
return undef unless defined $descr;
# 303 / 304
if ($descr =~ m/Rev: \d+\.(\d+\.\d+\.\d+)-\d+\.\d+\.\d+\.\d+/){
return $1;
}
# 450
if ($descr =~ m/FW:v(\d+\.\d+\.\d+\.\d+)/){
return $1;
}
return undef;
}
sub vendor {
# or nortel, or synopsis?
return 'bay';
@@ -115,13 +154,16 @@ sub i_mac {
sub model {
my $bay = shift;
my $id = $bay->id();
return undef unless defined $id;
my $model = &SNMP::translateObj($id);
return $id unless defined $model;
$model =~ s/^sreg-//i;
my $descr = $bay->description();
return '303' if ($descr =~ /\D303\D/);
return '304' if ($descr =~ /\D304\D/);
return '450' if ($model =~ /BayStack450/);
return $model;
}
@@ -134,6 +176,7 @@ sub c_if {
my %c_if;
foreach my $entry (keys %$bay_topo_port){
my $port = $bay_topo_port->{$entry};
next unless defined $port;
next if $port == 0;
$c_if{"$port.1"} = $port;
}
@@ -152,6 +195,7 @@ sub c_ip {
my %ip_port;
foreach my $entry (keys %$bay_topo_ip){
my $port = $bay_topo_port->{$entry};
next unless defined $port;
next if $port == 0;
my $ip = $bay_topo_ip->{$entry};
push(@{$ip_port{$port}},$ip);
@@ -178,6 +222,7 @@ sub c_port {
my %c_port;
foreach my $entry (keys %$bay_topo_seg){
my $port = $bay_topo_port->{$entry};
next unless defined $port;
next if $port == 0;
# For fake remotes (multiple IPs for a c_ip), use first found
@@ -216,27 +261,64 @@ sub c_platform {
return \%c_platform;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer2::Bay - SNMP Interface to old Bay Network Switches
SNMP::Info::Layer2::Bay - SNMP Interface to old Bay Network BayStack Switches
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $bay = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $bay->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Bay device through SNMP.
Inherits from
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
SNMP::Info::Layer2
my $bay = new SNMP::Info::Layer2::Bay(...);
Required MIBs:
=head2 Inherited Classes
SYNOPTICS-ROOT-MIB
S5-ETH-MULTISEG-TOPOLOGY-MIB
MIBS listed in SNMP::Info::Layer2
=over
=item SNMP::Info::Layer2
=back
=head2 Required MIBs
=over
=item SYNOPTICS-ROOT-MIB
=item S5-ETH-MULTISEG-TOPOLOGY-MIB
=item Inherited classes
MIBs required by SNMP::Info::Layer2 and its superclasses.
=back
Bay MIBs can be found on the CD that came with your product.
@@ -245,50 +327,12 @@ www.nortelnetworks.com
They have also been seen at : http://www.inotech.com/mibs/vendor/baynetworks/synoptics/synoptics.asp
Or http://www.oidview.com/mibs/detail.html under Synoptics.
You will need at least the two listed above, and probably a few more.
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $bay = new SNMP::Info::Layer2::Bay(DestHost => 'mybayswitch' ,
Community => 'public' );
=head1 CREATING AN OBJECT
=over
=item new SNMP::Info::Layer2::Bay()
Arguments passed to new() are passed on to SNMP::Session::new()
my $bay = new SNMP::Info::Layer2::Bay(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $bay;
=item $bay->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $bay->session();
# Set
my $newsession = new SNMP::Session(...);
$bay->session($newsession);
=back
Or http://www.oidview.com/mibs/detail.html under Synoptics. Check also www.mibdepot.com
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $bay->vendor()
@@ -317,8 +361,15 @@ Returns if the S5-ETH-MULTISEG-TOPOLOGY info is on for this device.
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
@@ -425,4 +476,8 @@ Returns reference to hash. Key: Table entry, Value:Boolean, if bay_topo_seg() i
=back
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2::C1900
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::C1900;
$VERSION = 0.1;
$VERSION = 0.6;
# $Id$
use strict;
use Exporter;
@@ -41,11 +42,13 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
# Set for No CDP
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS
%SNMP::Info::Layer2::GLOBALS,
'c1900_flash_status' => 'upgradeFlashBankStatus',
);
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
'i_type2' => 'ifType',
'i_name2' => 'ifName',
# ESSWITCH-MIB
'c1900_p_index' => 'swPortIndex',
'c1900_p_ifindex' => 'swPortIfIndex',
@@ -69,6 +72,35 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
sub vendor {
return 'cisco';
}
sub os {
return 'catalyst';
}
sub os_ver {
my $c1900 = shift;
# Check for superclass one
my $os_ver = $c1900->SUPER::os_ver();
return $os_ver if defined $os_ver;
my $c1900_flash_status = $c1900->c1900_flash_status();
return undef unless defined $c1900_flash_status;
if ($c1900_flash_status =~ m/V(\d+\.\d+(\.\d+)?)/){
return $1;
}
return undef;
}
sub interfaces {
my $c1900 = shift;
my $i_descr = $c1900->i_description();
foreach my $iid (keys %$i_descr){
$i_descr->{$iid} =~ s/\s*$//;
}
return $i_descr;
}
sub i_duplex {
my $c1900 = shift;
@@ -142,29 +174,28 @@ sub i_type {
return $i_type;
}
sub i_name {
my $c1900 = shift;
my $i_name = $c1900->i_name2();
my $c1900_p_name = $c1900->c1900_p_name();
foreach my $port (keys %$c1900_p_name){
my $name = $c1900_p_name->{$port};
next unless defined $name;
next unless $name !~ /^\s*$/;
$i_name->{$port} = $name;
}
return $i_name;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer2::C1900 - SNMP Interface to old C1900 Network Switches
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
C1900 device through SNMP. See inherited classes' documentation for
inherited methods.
Inherits from:
SNMP::Info::Layer2
Required MIBs:
STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
MIBs listed in SNMP::Info::Layer2
ESSWITCH-MIB is included in the Version 1 MIBS from Cisco.
They can be found at ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
SNMP::Info::Layer2::C1900 - Perl5 Interface to SNMP data from Cisco Catlyst 1900 Network Switches running CatOS
=head1 AUTHOR
@@ -172,48 +203,90 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $c1900 = new SNMP::Info::Layer2::C1900(DestHost => 'mycat1900' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $c1900 = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 1
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $c1900->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a Catalyst 1900 device through SNMP.
See SNMP::Info for full documentation
Note that most of these devices only talk SNMP version 1, but not all.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $c1900 = new SNMP::Info::Layer2::C1900(...);
=head2 Inherited classes
=over
=item new SNMP::Info::Layer2::C1900()
=item SNMP::Info::Layer2
Arguments passed to new() are passed on to SNMP::Session::new()
=back
=head2 Required MIBs
my $c1900 = new SNMP::Info::Layer2::C1900(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $c1900;
=over
=item $c1900->session()
=item STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
Sets or returns the SNMP::Session object
ESSWITCH-MIB is included in the Version 1 MIBS from Cisco.
# Get
my $sess = $c1900->session();
They can be found at ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
# Set
my $newsession = new SNMP::Session(...);
$c1900->session($newsession);
=item Inherited Classes' MIBs
MIBs listed in SNMP::Info::Layer2
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $c1900->c1900_flash_status()
Usually contains the version of the software loaded in flash.
Used by os_ver()
B<STAND-ALONE-ETHERNET-SWITCH-MIB::upgradeFlashBankStatus>
=item $c1900->os()
Returns 'catalyst'
=item $c1900->os_ver()
Returns CatOS version if obtainable. First tries to use
SNMP::Info::CiscoStats->os_ver() . If that fails then it
checks for the presence of $c1900->c1900_flash_status() and culls
the version from there.
=item $c1900->vendor()
Returns 'cisco' :)
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=head1 TABLE ENTRIES
=head2 Overrides
@@ -232,6 +305,10 @@ Returns reference to hash of IIDs to admin duplex setting
Crosses $c1900->c1900_p_index() with $c1900->c1900_p_duplex_admin;
=item $c1900->i_name()
Crosses ifName with c1900_p_name() and returns the human set port name if exists.
=item $c1900->i_type()
Returns reference to hash of IID to port type
@@ -290,4 +367,8 @@ B<swPortConnectorType>
=back
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2::C2900
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::C2900;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
@@ -137,16 +138,7 @@ __END__
=head1 NAME
SNMP::Info::Layer2::C2900 - SNMP Interface to Cisco Catalyst 2900 Network Switches
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
C2900 device through SNMP.
MIBS: CISCO-C2900-MIB
Inherits all SNMP::Info::Layer2 methods.
SNMP::Info::Layer2::C2900 - SNMP Interface to Cisco Catalyst 2900 Switches running IOS
=head1 AUTHOR
@@ -154,40 +146,54 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $c2900 = new SNMP::Info::Layer2::C2900(DestHost => 'mycat2900' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $c2900 = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $c2900->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
C2900 device through SNMP.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $c2900 = new SNMP::Info::Layer2::C2900(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer2::C2900()
=item SNMP::Info::Layer2
Arguments passed to new() are passed on to SNMP::Session::new()
=back
=head2 Required MIBs
my $c2900 = new SNMP::Info::Layer2::C2900(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $c2900;
=over
=item $c2900->session()
=item CISCO-C2900-MIB
Sets or returns the SNMP::Session object
# Get
my $sess = $c2900->session();
# Set
my $newsession = new SNMP::Session(...);
$c2900->session($newsession);
Part of the v2 MIBs from Cisco.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=head2 Overrides
=over
=item $c2900->vendor()
@@ -196,8 +202,15 @@ Sets or returns the SNMP::Session object
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
@@ -260,5 +273,8 @@ Sets or returns the SNMP::Session object
=back
=cut
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2::Catalyst
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,15 +28,15 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::Catalyst;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info::Layer2;
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT
%MYGLOBALS %MYMIBS %MYFUNCS %MYMUNGE %MUNGE $INIT/ ;
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE $INIT/ ;
@SNMP::Info::Layer2::Catalyst::ISA = qw/SNMP::Info::Layer2 Exporter/;
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
@@ -46,34 +46,29 @@ $DEBUG=0;
# the interworkings.
$INIT = 0;
%MYMIBS = (
'CISCO-STACK-MIB' => 'moduleType',
'CISCO-VTP-MIB' => 'vtpVlanIndex'
);
%MIBS = ( %SNMP::Info::Layer2::MIBS,
'CISCO-STACK-MIB' => 'moduleType',
'CISCO-VTP-MIB' => 'vtpVlanIndex'
);
%MIBS = ( %SNMP::Info::Layer2::MIBS,
%MYMIBS );
%MYGLOBALS = (
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
# these are in CISCO-STACK-MIB
'sysip' => 'sysIpAddr',
'netmask' => 'sysNetMask',
'broadcast' => 'sysBroadcast',
'serial' => 'chassisSerialNumberString',
'serial' => 'chassisSerialNumber',
'model' => 'chassisModel',
'ps1_type' => 'chassisPs1Type',
'ps1_status' => 'chassisPs1Status',
'ps2_type' => 'chassisPs2Type',
'ps2_status' => 'chassisPs2Status',
'slots' => 'chassisNumSlots',
'fan' => 'chassisFanStatus'
);
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
%MYGLOBALS
);
'fan' => 'chassisFanStatus',
);
%MYFUNCS = (
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
'i_type2' => 'ifType',
# CISCO-STACK-MIB::moduleEntry
# These are blades in a catalyst device
@@ -108,22 +103,13 @@ $INIT = 0;
'v_name' => 'vtpVlanName',
'v_mtu' => 'vtpVlanMtu',
);
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
%MYFUNCS
);
%MYMUNGE = (
%MUNGE = (
%SNMP::Info::Layer2::MUNGE,
'm_ports_status' => \&munge_port_status,
'p_duplex_admin' => \&SNMP::Info::munge_bits,
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer2::MUNGE,
%MYMUNGE
);
%PORTSTAT = (1 => 'other',
2 => 'ok',
3 => 'minorFault',
@@ -182,6 +168,7 @@ sub i_name {
my %i_name;
foreach my $port (keys %$p_name) {
my $iid = $p_port->{$port};
next unless defined $iid;
$i_name{$iid} = $p_name->{$port};
}
return \%i_name;
@@ -248,6 +235,23 @@ sub vendor {
return 'cisco';
}
sub os {
return 'catalyst';
}
sub os_ver {
my $cat = shift;
my $os_ver = $cat->SUPER::os_ver();
return $os_ver if defined $os_ver;
my $m_swver = $cat->m_swver();
return undef unless defined $m_swver;
# assume .1 entry is the chassis and the sw version we want.
return $m_swver->{1} if defined $m_swver->{1};
return undef;
}
1;
__END__
@@ -255,124 +259,168 @@ __END__
SNMP::Info::Layer2::Catalyst - Perl5 Interface to Cisco devices running Catalyst OS
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Catalyst device through SNMP. Information is stored in a number of
MIB's such as IF-MIB, CISCO-CDP-MIB, CISCO-STACK-MIB, CISCO-VTP-MIB,
and SWITCH-MIB.
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $cat = new SNMP::Info::Layer2::Catalyst(DestHost => 'router' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $cat = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $cat->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
SNMP::Info subclass to provide information for Cisco Catalyst switches running CatOS.
This subclass is not for all devices that have the name Catalyst. Note that some Catalyst
switches run IOS, like the 2900 and 3550 families. Cisco Catalyst 1900 switches use their
own MIB and have a separate subclass. Use the method above to have SNMP::Info determine the
appropriate subclass before using this class directly.
Note: Some older Catalyst switches will only talk SNMP version 1. Some newer ones will not
return all their data if connected via Version 1.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $cat = new SNMP::Info::Layer2::Catalyst(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer2::Catalyst()
Arguments passed to new() are passed on to SNMP::Session::new()
my $cat = new SNMP::Info::Layer2::Catalyst(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $cat;
=item $cat->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $cat->session();
# Set
my $newsession = new SNMP::Session(...);
$cat->session($newsession);
=item SNMP::Info::Layer2
=back
=head1 GLOBAL Values
=head2 Required MIBs
=over
=item $cat->netmask()
(B<sysNetMask>)
=item CISCO-STACK-MIB
=item CISCO-VTP-MIB
=item Inherited Classes' MIBs
See SNMP::Info::Layer2 for its own MIB requirements.
=back
These MIBs are found in the standard v2 MIBs from Cisco.
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $cat->broadcast()
(B<sysBroadcast>)
=item $cat->serial()
(B<chassisSerialNumberString>)
=item $cat->fan()
(B<chassisFanStatus>)
=item $cat->model()
(B<chassisModel>)
=item $cat->netmask()
(B<sysNetMask>)
=item $cat->os()
Returns 'catalyst'
=item $cat->os_ver()
Tries to use the value from SNMP::Info::CiscoStats->os_ver() and if it fails
it grabs $cat->m_swver()->{1} and uses that.
=item $cat->ps1_type()
(B<chassisPs1Type>)
=item $cat->ps2_type()
(B<chassisPs2Type>)
=item $cat->ps1_status()
(B<chassisPs1Status>)
=item $cat->ps2_status()
(B<chassisPs2Status>)
=item $cat->slots()
(B<chassisNumSlots>)
=item $cat->serial()
=item $cat->fan()
(B<chassisFanStatus>)
(B<chassisSerialNumberString>)
=item $cat->slots()
(B<chassisNumSlots>)
=item $cat->vendor()
Returns 'cisco'
Returns 'cisco'
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $cat->interfaces()
Crosses p_port() with i_index() to get physical names.
Crosses p_port() with i_index() to get physical names.
=item $cat->i_physical()
Returns a map to IID for ports that are physical ports, not vlans, etc.
Returns a map to IID for ports that are physical ports, not vlans, etc.
=item $cat->i_type()
Crosses p_port() with p_type() and returns the results.
Crosses p_port() with p_type() and returns the results.
Overrides with ifType if p_type() isn't available.
Overrides with ifType if p_type() isn't available.
=item $cat->i_name()
Crosses p_name with p_port and returns results.
Crosses p_name with p_port and returns results.
=item $cat->i_duplex()
Crosses p_duplex with p_port and returns results.
Crosses p_duplex with p_port and returns results.
=item $cat->i_duplex_admin()
Crosses p_duplex_admin with p_port.
Crosses p_duplex_admin with p_port.
Munges bit_string returned from p_duplex_admin to get duplex settings.
Munges bit_string returned from p_duplex_admin to get duplex settings.
=back
@@ -384,47 +432,62 @@ the Catalyst device.
=over
=item $cat->m_type()
(B<moduleType>)
=item $cat->m_model()
(B<moduleModel>)
=item $cat->m_serial()
(B<moduleSerialNumber>)
=item $cat->m_status()
(B<moduleStatus>)
=item $cat->m_name()
(B<moduleName>)
=item $cat->m_ports()
(B<moduleNumPorts>)
=item $cat->m_ports_status()
Returns a list of space separated status strings for the ports.
To see the status of port 4 :
@ports_status = split(' ', $cat->m_ports_status() );
$port4 = $ports_status[3];
Returns a list of space separated status strings for the ports.
To see the status of port 4 :
@ports_status = split(' ', $cat->m_ports_status() );
$port4 = $ports_status[3];
(B<modulePortStatus>)
=item $cat->m_ports_hwver()
(B<moduleHwVersion>)
=item $cat->m_ports_fwver()
(B<moduleFwVersion>)
=item $cat->m_ports_swver()
(B<moduleSwVersion>)
=item $cat->m_ports_ip()
(B<moduleIPAddress>)
=item $cat->m_ports_sub1()
(B<moduleSubType>)
=item $cat->m_ports_sub2()
(B<moduleSubType2>)
=back
@@ -434,12 +497,15 @@ the Catalyst device.
=over
=item $cat->m_ip()
(B<moduleIPAddress>)
=item $cat->m_sub1()
(B<moduleSubType>)
=item $cat->m_sub2()
(B<moduleSubType2>)
=back
@@ -449,24 +515,31 @@ the Catalyst device.
=over
=item $cat->p_name()
(B<portName>)
=item $cat->p_type()
(B<portType>)
=item $cat->p_status()
(B<portOperStatus>)
=item $cat->p_status2()
(B<portAdditionalStatus>)
=item $cat->p_speed()
(B<portAdminSpeed>)
=item $cat->p_duplex()
(B<portDuplex>)
=item $cat->p_port()
(B<portIfIndex>)
=back
@@ -476,9 +549,11 @@ the Catalyst device.
=over
=item $cat->p_speed_admin()
(B<portCpbSpeed>)
=item $cat->p_duplex_admin()
(B<portCpbDuplex>)
=back
@@ -488,21 +563,28 @@ the Catalyst device.
See ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html
for a good treaty of how to connect to the VLANs
=over
=item $cat->v_state()
(B<vtpVlanState>)
=item $cat->v_type()
(B<vtpVlanType>)
=item $cat->v_name()
(B<vtpVlanName>)
=item $cat->v_mtu()
(B<vtpVlanMtu>)
=back
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in SNMP::Info::Layer2 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,80 +28,112 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::HP;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info::Layer2;
use SNMP::Info::MAU;
use SNMP::Info::Entity;
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT
%MYGLOBALS %MYMIBS %MYFUNCS %MYMUNGE %MUNGE $INIT/ ;
@SNMP::Info::Layer2::HP::ISA = qw/SNMP::Info::Layer2 SNMP::Info::MAU Exporter/;
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE $INIT/ ;
@SNMP::Info::Layer2::HP::ISA = qw/SNMP::Info::Layer2 SNMP::Info::MAU SNMP::Info::Entity Exporter/;
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
$DEBUG=0;
$SNMP::debugging=$DEBUG;
# See SNMP::Info for the details of these data structures and
# the interworkings.
# See SNMP::Info for the details of these data structures and interworkings.
$INIT = 0;
%MYMIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum',
'RFC1271-MIB' => 'logDescription',
'HP-ICF-OID' => 'hpSwitch4000',
);
%MIBS = ( %SNMP::Info::Layer2::MIBS,
%SNMP::Info::MAU::MIBS,
%MYMIBS );
%SNMP::Info::Entity::MIBS,
'RFC1271-MIB' => 'logDescription',
'HP-ICF-OID' => 'hpSwitch4000',
'STATISTICS-MIB' => 'hpSwitchCpuStat',
'NETSWITCH-MIB' => 'hpMsgBufFree'
);
%MYGLOBALS = ('serial1' => 'entPhysicalSerialNum.1',
# 'model' => 'entPhysicalModelName.1',
);
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
%SNMP::Info::MAU::GLOBALS,
%MYGLOBALS
);
%MYFUNCS = (
'i_type2' => 'ifType',
'e_map' => 'entAliasMappingIdentifier',
'e_name' => 'entPhysicalName',
'e_class' => 'entPhysicalClass',
'e_parent' => 'entPhysicalContainedIn',
'e_descr' => 'entPhysicalDescr',
'e_type' => 'entPhysicalVendorType',
'e_model' => 'entPhysicalModelName',
'e_hwver' => 'entPhysicalHardwareRev',
'e_swver' => 'entPhysicalSoftwareRev',
'e_fwver' => 'entPhysicalFirmwareRev',
'e_serial' => 'entPhysicalSerialNum',
# RFC1271
'l_descr' => 'logDescription'
%SNMP::Info::Entity::GLOBALS,
'serial1' => 'entPhysicalSerialNum.1',
'hp_cpu' => 'hpSwitchCpuStat.0',
'hp_mem_total' => 'hpGlobalMemTotalBytes.1',
'mem_free' => 'hpGlobalMemFreeBytes.1',
'mem_used' => 'hpGlobalMemAllocBytes.1',
'os_version' => 'hpSwitchOsVersion.0',
'os_bin' => 'hpSwitchRomVersion.0',
'mac' => 'hpSwitchBaseMACAddress.0'
);
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
%SNMP::Info::MAU::FUNCS,
%MYFUNCS
);
%MYMUNGE = (
%SNMP::Info::Entity::FUNCS,
'i_type2' => 'ifType',
# RFC1271
'l_descr' => 'logDescription'
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer2::MUNGE,
%SNMP::Info::MAU::MUNGE,
%MYMUNGE
%SNMP::Info::Entity::MUNGE
);
%MODEL_MAP = (
'J4812A' => '2512',
'J4819A' => '5308XL',
'J4813A' => '2524',
'J4805A' => '5304XL',
'J4815A' => '3324XL',
'J4865A' => '4108GL',
'J4887A' => '4104GL',
'J4874A' => '9315',
);
# Method Overrides
sub cpu {
my $hp = shift;
return $hp->hp_cpu();
}
sub mem_total {
my $hp = shift;
return $hp->hp_mem_total();
}
sub os {
return 'hp';
}
sub os_ver {
my $hp = shift;
my $os_version = $hp->os_version();
return $os_version if defined $os_version;
# Some older ones don't have this value,so we cull it from the description
my $descr = $hp->description();
if ($descr =~ m/revision ([A-Z]{1}\.\d{2}\.\d{2})/) {
return $1;
}
return undef;
}
# Lookup model number, and translate the part number to the common number
sub model {
my $hp = shift;
my $id = $hp->id();
my $model = &SNMP::translateObj($id);
$model =~ s/^hpswitch//i;
return defined $MODEL_MAP{$model} ? $MODEL_MAP{$model} : $model;
}
# Some have the serial num in entity mib, some dont.
sub serial {
my $hp = shift;
@@ -109,6 +141,7 @@ sub serial {
# procurve 2xxx have this
my $serial = $hp->serial1();
return undef unless defined $serial;
# 4xxx dont
return undef if $serial =~ /nosuchobject/i;
@@ -124,7 +157,6 @@ sub interfaces {
foreach my $iid (keys %$interfaces){
my $descr = $i_descr->{$iid};
next unless defined $descr;
#$if{$iid} = $iid;
$if{$iid} = $descr if (defined $descr and length $descr);
}
@@ -132,26 +164,6 @@ sub interfaces {
}
# e_port maps EntityTable entries to IfTable
sub e_port {
my $hp = shift;
my $e_map = $hp->e_map();
my %e_port;
foreach my $e_id (keys %$e_map) {
my $id = $e_id;
$id =~ s/\.0$//;
my $iid = $e_map->{$e_id};
$iid =~ s/.*\.//;
$e_port{$id} = $iid;
}
return \%e_port;
}
sub i_type {
my $hp = shift;
my $e_descr = $hp->e_descr();
@@ -314,26 +326,6 @@ sub i_duplex_admin {
return \%i_duplex_admin;
}
#sub i_up_admin {
# my $hp = shift;
#
# my $mau_index = $hp->mau_index();
# my $mau_status = $hp->mau_status();
#
# my %i_up_admin;
# foreach my $mau_port (keys %$mau_status){
# my $iid = $mau_index->{$mau_port};
# next unless defined $iid;
# my $status = $mau_status->{$mau_port};
#
# $i_up_admin{$iid} = ($status =~ /shutdown/i) ?
# 'down' : 'up';
# }
#
# return \%i_up_admin;
#
#}
1;
__END__
@@ -341,207 +333,203 @@ __END__
SNMP::Info::Layer2::HP - SNMP Interface to HP Procurve Switches
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
HP device through SNMP. Information is stored in a number of
MIB's such as IF-MIB, ENTITY-MIB, RFC1271-MIB, HP-ICF-OID, MAU-MIB
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $hp = new SNMP::Info::Layer2::HP(DestHost => 'router' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $hp = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $hp->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
HP ProCurve Switch via SNMP.
Note: Some HP Switches will connect via SNMP version 1, but a lot of config data will
not be available. Make sure you try and connect with Version 2 first, and then fail back
to version 1.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $hp = new SNMP::Info::Layer2::HP(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer2::HP()
=item SNMP::Info::Layer2
Arguments passed to new() are passed on to SNMP::Session::new()
=item SNMP::Info::Entity
my $hp = new SNMP::Info::Layer2::HP(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $hp;
=item $hp->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $hp->session();
# Set
my $newsession = new SNMP::Session(...);
$hp->session($newsession);
=item $hp->all(), $hp->load_all()
Runs each of the HP List methods and returns a hash reference.
$hp->all() will call $hp->load_all() once and then return cahced valued.
Use $hp->load_all() to reload from the device.
=item SNMP::Info::MAU
=back
=head1 HP Global Configuration Values
=head2 Required MIBs
=over
=item $hp->name()
(B<sysName>)
=item RFC1271-MIB
=item $hp->ip()
(B<sysIpAddr>)
Included in V2 mibs from Cisco
=item $hp->netmask()
(B<sysNetMask>)
=item HP-ICF-OID
=item $hp->broadcast()
(B<sysBroadcast>)
=item STATISTICS-MIB
=item $hp->location()
(B<sysLocation>)
=item NETSWITCH-MIB
=item $hp->contact()
(B<sysContact>)
=back
=item $hp->description()
(B<sysDescr>)
The last three MIBs listed are from HP and can be found at http://www.hp.com/rnd/software
=item $hp->layers()
(B<sysServices>)
=head1 ChangeLog
=item $hp->serial()
(B<chassisSerialNumberString>)
Version 0.4 - Removed ENTITY-MIB e_*() methods to separate sub-class - SNMP::Info::Entity
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $hp->cpu()
Returns CPU Utilization in percentage.
=item $hp->log()
Returns all the log entries from the switch's log that are not Link up or down messages.
=item $hp->mem_free()
Returns bytes of free memory
=item $hp->mem_total()
Return bytes of total memory
=item $hp->mem_used()
Returns bytes of used memory
=item $hp->model()
(B<chassisModel>)
=item $hp->ps1_type()
(B<chassisPs1Type>)
Returns the model number of the HP Switch. Will translate between the HP Part number and
the common model number with this map :
=item $hp->ps2_type()
(B<chassisPs2Type>)
%MODEL_MAP = (
'J4812A' => '2512',
'J4819A' => '5308XL',
'J4813A' => '2524',
'J4805A' => '5304XL',
'J4815A' => '3324XL',
'J4865A' => '4108GL',
'J4887A' => '4104GL',
'J4874A' => '9315',
);
=item $hp->ps1_status()
(B<chassisPs1Status>)
=item $hp->os()
=item $hp->ps2_status()
(B<chassisPs2Status>)
Returns hp
=item $hp->os_bin()
B<hpSwitchRomVersion.0>
=item $hp->os_ver()
Tries to use os_version() and if that fails will try and cull the version from
the description field.
=item $hp->os_version()
B<hpSwitchOsVersion.0>
=item $hp->serial()
Returns serial number if available through SNMP
=item $hp->slots()
(B<chassisNumSlots>)
=item $hp->fan()
(B<chassisFanStatus>)
Returns number of entries in $hp->e_name that have 'slot' in them.
=item $hp->vendor()
hp
=back
=head1 CATALYST TABLE ENTRIES
=head2 Globals imported from SNMP::Info::Layer2
=head2 Module table
See documentation in SNMP::Info::Layer2 for details.
=head2 Globals imported from SNMP::Info::Entity
See documentation in SNMP::Info::Entity for details.
=head2 Globals imported from SNMP::Info::MAU
See documentation in SNMP::Info::MAU for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $hp->m_type(), $hp->load_m_type()
(B<moduleType>)
=item $hp->interfaces()
=item $hp->m_model(), $hp->load_m_model()
(B<moduleModel>)
Uses $hp->i_description()
=item $hp->m_serial(), $hp->load_m_serial()
(B<moduleSerialNumber>)
=item $hp->i_duplex()
=item $hp->m_status(), $hp->load_m_status()
(B<moduleStatus>)
Maps $hp->mau_index() with $hp->mau_link(). Methods inherited from
SNMP::Info::MAU.
=item $hp->m_name(), $hp->load_m_name()
(B<moduleName>)
=item $hp->i_duplex_admin()
=item $hp->m_ports(), $hp->load_m_ports()
(B<moduleNumPorts>)
Maps $hp->mau_index() with $hp->mau_auto(), $hp->mau_autostat(),
$hp->typeadmin(), and $mau_autosent(). Methods inherited from
SNMP::Info::MAU.
=item $hp->m_ports_status(), $hp->load_m_ports_status()
Returns a list of space separated status strings for the ports.
To see the status of port 4 :
@ports_status = split(' ', $hp->m_ports_status() );
$port4 = $ports_status[3];
=item $hp->i_name()
(B<modulePortStatus>)
Crosses i_name() with $hp->e_name() using $hp->e_port() and i_alias()
=item $hp->m_ports_hwver(), $hp->load_m_ports_hwver()
(B<moduleHwVersion>)
=item $hp->m_ports_fwver(), $hp->load_m_ports_fwver()
(B<moduleFwVersion>)
=item $hp->m_ports_swver(), $hp->load_m_ports_swver()
(B<moduleSwVersion>)
=item $hp->m_ports_ip(), $hp->load_m_ports_ip()
(B<moduleIPAddress>)
=item $hp->m_ports_sub1(), $hp->load_m_ports_sub1()
(B<moduleSubType>)
=item $hp->m_ports_sub2(), $hp->load_m_ports_sub2()
(B<moduleSubType2>)
=item $hp->i_type()
Crosses i_type() with $hp->e_descr() using $hp->e_port()
=back
=head2 Port Entry Table
=head2 Table Methods imported from SNMP::Info::Layer2
=over
See documentation in SNMP::Info::Layer2 for details.
=item $hp->p_name(), $hp->load_p_name()
(B<portName>)
=head2 Table Methods imported from SNMP::Info::Entity
=item $hp->p_type(), $hp->load_p_type()
(B<portType>)
See documentation in SNMP::Info::Entity for details.
=item $hp->p_status(), $hp->load_p_status()
(B<portOperStatus>)
=head2 Table Methods imported from SNMP::Info::MAU
=item $hp->p_status2(), $hp->load_p_status2()
(B<portAdditionalStatus>)
See documentation in SNMP::Info::MAU for details.
=item $hp->p_speed(), $hp->load_p_speed()
(B<portAdminSpeed>)
=item $hp->p_duplex(), $hp->load_p_duplex()
(B<portDuplex>)
=item $hp->p_port(), $hp->load_p_port()
(B<portIfIndex>)
=back
=head2 VLAN Entry Table
ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html
=over
=item $hp->v_state(), $hp->load_v_state()
(B<vtpVlanState>)
=item $hp->v_type(), $hp->load_v_type()
(B<vtpVlanType>)
=item $hp->v_name(), $hp->load_v_name()
(B<vtpVlanName>)
=item $hp->v_mtu(), $hp->load_v_mtu()
(B<vtpVlanMtu>)
=back
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer3 - SNMP Interface to Layer3 devices
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,19 +28,22 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer3;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use SNMP::Info::Bridge;
use SNMP::Info::EtherLike;
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
@SNMP::Info::Layer3::ISA = qw/SNMP::Info SNMP::Info::CDP SNMP::Info::Bridge SNMP::Info::EtherLike Exporter/;
@SNMP::Info::Layer3::ISA = qw/SNMP::Info SNMP::Info::CDP SNMP::Info::Bridge
SNMP::Info::EtherLike SNMP::Info::CiscoStats Exporter/;
@SNMP::Info::Layer3::EXPORT_OK = qw//;
$DEBUG=0;
@@ -49,11 +52,11 @@ $SNMP::debugging=$DEBUG;
$INIT = 0;
%MIBS = ( %SNMP::Info::MIBS,
%SNMP::Info::CDP::MIBS,
%SNMP::Info::Bridge::MIBS,
%SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::EtherLike::MIBS,
'ENTITY-MIB' => 'entPhysicalName',
'HP-ICF-OID' => 'hpSwitch4000',
'CISCO-PRODUCTS-MIB' => 'sysName',
'OSPF-MIB' => 'ospfRouterId',
);
@@ -62,6 +65,7 @@ $INIT = 0;
# Inherit the super class ones
%SNMP::Info::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::Bridge::GLOBALS,
%SNMP::Info::EtherLike::GLOBALS,
'mac' => 'ifPhysAddress.1',
@@ -72,6 +76,7 @@ $INIT = 0;
%FUNCS = (
%SNMP::Info::FUNCS,
%SNMP::Info::CDP::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::Bridge::FUNCS,
%SNMP::Info::EtherLike::FUNCS,
# IFMIB
@@ -87,6 +92,7 @@ $INIT = 0;
# Inherit all the built in munging
%SNMP::Info::MUNGE,
%SNMP::Info::CDP::MUNGE,
%SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::Bridge::MUNGE,
%SNMP::Info::EtherLike::MUNGE,
'at_paddr' => \&SNMP::Info::munge_mac,
@@ -146,6 +152,8 @@ sub model {
my $model = &SNMP::translateObj($id);
$model =~ s/^cisco//i;
$model =~ s/^catalyst//;
$model =~ s/^cat//;
return $model;
}
@@ -219,31 +227,7 @@ __END__
=head1 NAME
SNMP::Info::Layer3 - Perl5 Interface to network devices using Layer3
=head1 DESCRIPTION
Provides generic methods for accessing SNMP data for Layer 3 network devices.
Includes support for Layer2+3 devices. See super classes for other inherited
methods.
Inherits from:
SNMP::Info
SNMP::Info::Bridge
SNMP::Info::CDP
SNMP::Info::EtherLike
Required MIBs:
ENTITY-MIB - For model identification
CISCO-PRODUCTS-MIB - For model identification
HP-ICF-OID - For model identification
MIBS listed in SNMP::Info::CDP, SNMP::Info::Bridge, and SNMP::Info::Etherlike
Cisco MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
HP MIBs can be found at http://www.hp.com/rnd/software
SNMP::Info::Layer3 - Perl5 Interface to network devices serving Layer3 or Layers 2 & 3
=head1 AUTHOR
@@ -251,47 +235,83 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $l3 = new SNMP::Info::Layer3(DestHost => 'router' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $l3 = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $l3->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
# Let's get some basic Port information
my $interfaces = $l3->interfaces();
my $i_up = $l3->i_up();
my $i_speed = $l3->i_speed();
foreach my $iid (keys %$interfaces) {
my $port = $interfaces->{$iid};
my $up = $i_up->{$iid};
my $speed = $i_speed->{$iid}
print "Port $port is $up. Port runs at $speed.\n";
}
=head1 DESCRIPTION
This class is usually used as a superclass for more specific device classes listed under
SNMP::Info::Layer3::* Please read all docs under SNMP::Info first.
Provides generic methods for accessing SNMP data for Layer 3 network devices.
Includes support for Layer2+3 devices.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $l3 = new SNMP::Info::Layer3(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer3()
=item SNMP::Info
Arguments passed to new() are passed on to SNMP::Session::new()
=item SNMP::Info::Bridge
=item SNMP::Info::CDP
my $l3 = new SNMP::Info::Layer3(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $l3;
=item SNMP::Info::CiscoStats
=item $l3->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $l3->session();
# Set
my $newsession = new SNMP::Session(...);
$l3->session($newsession);
=item SNMP::Info::EtherLike
=back
=head1 GLOBALS
=head2 Required MIBs
=over
=item $l3->mac()
=item CISCO-PRODUCTS-MIB
Returns root port mac address
=item ENTITY-MIB
(B<ifPhysAddress.1>)
=item OSPF-MIB
=item Inherited Classes
MIBs required by the inherited classes listed above.
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $l3->chassis()
@@ -299,9 +319,21 @@ Returns Chassis type (model).
(B<entPhysicalDescr.1>)
=item $l3->serial()
=item $l3->mac()
Trys to cull a serial number from $l3->chassis()
Returns root port mac address
(B<ifPhysAddress.1>)
=item $l3->router_ip()
(B<ospfRouterId.0>)
=back
=head2 Overrides
=over
=item $l3->model()
@@ -309,14 +341,41 @@ Trys to reference $l3->id() to one of the product MIBs listed above
Removes 'cisco' from cisco devices for readability.
=item $l3->serial()
Trys to cull a serial number from $l3->chassis()
=item $l3->vendor()
Trys to cull a Vendor name from B<sysDescr>
=back
=head2 Globals imported from SNMP::Info
See documentation in SNMP::Info for details.
=head2 Globals imported from SNMP::Info::Bridge
See documentation in SNMP::Info::Bridge for details.
=head2 Globals imported from SNMP::Info::CDP
See documentation in SNMP::Info::CDP for details.
=head2 Globals imported from SNMP::Info::CiscoStats
See documentation in SNMP::Info::CiscoStats for details.
=head2 Globals imported from SNMP::Info::EtherLike
See documentation in SNMP::Info::EtherLike for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
@@ -374,4 +433,24 @@ Returns reference to hash of Arp Cache Entries to IP Address
=back
=head2 Table Methods imported from SNMP::Info
See documentation in SNMP::Info for details.
=head2 Table Methods imported from SNMP::Info::Bridge
See documentation in SNMP::Info::Bridge for details.
=head2 Table Methods imported from SNMP::Info::CDP
See documentation in SNMP::Info::CDP for details.
=head2 Table Methods imported from SNMP::Info::CiscoStats
See documentation in SNMP::Info::CiscoStats for details.
=head2 Table Methods imported from SNMP::Info::EtherLike
See documentation in SNMP::Info::EtherLike for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer3::Aironet
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer3::Aironet;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -81,6 +82,26 @@ $INIT = 0;
'fw_mac2' => \&SNMP::Info::munge_mac,
);
sub os {
return 'aironet';
}
sub os_ver {
my $aironet = shift;
my $descr = $aironet->description();
# CAP340 11.21
if ($descr =~ /AP\d{3}\s+(\d{2}\.\d{2})/){
return $1;
}
if ($descr =~ /Series\s*AP\s+(\d{2}\.\d{2})/){
return $1;
}
return undef;
}
# Override wireless port with static info
sub bp_index {
my $aironet = shift;
@@ -109,6 +130,7 @@ sub fw_mac {
# remove port 0 forwarding table entries, only port 0 static entries
foreach my $fw (keys %$fw_mac){
my $port = $fw_port->{$fw};
next unless defined $port;
delete $fw_mac->{$fw} if $port == 0;
}
@@ -188,11 +210,7 @@ __END__
=head1 NAME
SNMP::Info::Layer3::Aironet - Perl5 Interface to Cisco Aironet Wireless Devices
=head1 DESCRIPTION
Inherits all methods from SNMP::Info::Layer3
SNMP::Info::Layer3::Aironet - Perl5 Interface to Cisco Aironet Wireless Devices running Aironet software, not IOS
=head1 AUTHOR
@@ -200,48 +218,70 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $aironet = new SNMP::Info::Layer3::Aironet(DestHost => 'myswitch',
Community => 'public');
my $mac = $aironet->mac();
# Let SNMP::Info determine the correct subclass for you.
my $aironet = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $aironet->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
SNMP::Info subclass to provide access to SNMP data for an Aironet device running Aironet software,
not cisco IOS.
Note there are two classes for Aironet devices :
=over
=item new SNMP::Info::Layer3::Aironet()
=item SNMP::Info::Layer3::Aironet
Arguments passed to new() are passed on to SNMP::Session::new()
This class is for devices running Aironet software (older)
=item SNMP::Info::Layer2::Aironet
my $aironet = new SNMP::Info::Layer3::Aironet(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $aironet;
=item $aironet->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $aironet->session();
# Set
my $newsession = new SNMP::Session(...);
$aironet->session($newsession);
This class is for devices running Cisco IOS software (newer)
=back
=head1 Globals
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $aironet = new SNMP::Info::Layer3::Aironet(...);
=head2 Inherited Classes
=over
=item $aironet->mac()
=item SNMP::Info::Layer3
Gives the MAC Address of the wireless side
=back
B<dot11StationID.2>
=head2 Required MIBs
=over
=item AWCVX-MIB
=item IEEE802dot11-MIB
=back
These MIBs are now included in the v2.tar.gz archive available from ftp.cisco.com. Make sure you
have a current version.
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $aironet->awc_duplex()
@@ -249,47 +289,34 @@ Gives the admin duplex setting for the Ethernet Port.
B<awcEtherDuplex.0>
=item $aironet->mac()
Gives the MAC Address of the wireless side
B<dot11StationID.2>
=item $aironet->os()
'aironet'
=item $aironet->os_ver
Tries to cull the version from the description field.
=item $aironet->vendor()
Returns 'cisco'.
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in SNMP::Info::Layer3 for details.
=head1 TABLE ENTRIES
=head2 Aironet specific items
=over
=item $aironet->awc_default_mac()
Gives the default MAC address of each interface.
B<awcIfDefaultPhyAddress>
=item $aironet->awc_mac()
Gives the actual MAC address of each interface.
B<awcIfPhyAddress>
=item $aironet->awc_ip()
Gives the IP Address assigned to each interface.
B<awcIfIpAddress>
=item $aironet->awc_netmask()
Gives the NetMask for each interface.
B<awcIfIpNetMask>
=item $aironet->awc_msdu()
B<awcIfMSDUMaxLength>
=back
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
@@ -324,4 +351,42 @@ Ignores ports that are of type ``rptr'' and ``lo''.
=back
=head2 Aironet specific items
=over
=item $aironet->awc_default_mac()
Gives the default MAC address of each interface.
B<awcIfDefaultPhyAddress>
=item $aironet->awc_mac()
Gives the actual MAC address of each interface.
B<awcIfPhyAddress>
=item $aironet->awc_ip()
Gives the IP Address assigned to each interface.
B<awcIfIpAddress>
=item $aironet->awc_netmask()
Gives the NetMask for each interface.
B<awcIfIpNetMask>
=item $aironet->awc_msdu()
B<awcIfMSDUMaxLength>
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in SNMP::Info::Layer3 for details.
=cut

403
Info/Layer3/C3550.pm Normal file
View File

@@ -0,0 +1,403 @@
# SNMP::Info::Layer3::C3550
# Max Baker <max@warped.org>
#
# Copyright (c) 2003, Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer3::C3550;
$VERSION = 0.5;
# $Id$
use strict;
use Exporter;
use SNMP::Info::Layer3;
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE $INIT/ ;
@SNMP::Info::Layer3::C3550::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
$DEBUG=0;
# See SNMP::Info for the details of these data structures and
# the interworkings.
$INIT = 0;
%MIBS = (
%SNMP::Info::Layer3::MIBS,
'CISCO-STACK-MIB' => 'moduleType',
'CISCO-VTP-MIB' => 'vtpVlanIndex'
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
'ports2' => 'ifNumber',
# these are in CISCO-STACK-MIB
'serial' => 'chassisSerialNumberString',
'ps1_type' => 'chassisPs1Type',
'ps1_status' => 'chassisPs1Status',
'ps2_type' => 'chassisPs2Type',
'ps2_status' => 'chassisPs2Status',
'fan' => 'chassisFanStatus'
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
'i_type2' => 'ifType',
# CISCO-STACK-MIB::portEntry
'p_name' => 'portName',
'p_type' => 'portType',
'p_status' => 'portOperStatus',
'p_status2' => 'portAdditionalStatus',
'p_speed' => 'portAdminSpeed',
'p_duplex' => 'portDuplex',
'p_port' => 'portIfIndex',
# CISCO-STACK-MIB::PortCpbEntry
'p_speed_admin' => 'portCpbSpeed',
'p_duplex_admin' => 'portCpbDuplex',
# CISCO-VTP-MIB::VtpVlanEntry
'v_state' => 'vtpVlanState',
'v_type' => 'vtpVlanType',
'v_name' => 'vtpVlanName',
'v_mtu' => 'vtpVlanMtu',
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer3::MUNGE,
'm_ports_status' => \&munge_port_status,
'p_duplex_admin' => \&SNMP::Info::munge_bits,
);
%PORTSTAT = (1 => 'other',
2 => 'ok',
3 => 'minorFault',
4 => 'majorFault');
# Changes binary byte describing each port into ascii, and returns
# an ascii list separated by spaces.
sub munge_port_status {
my $status = shift;
my @vals = map($PORTSTAT{$_},unpack('C*',$status));
return join(' ',@vals);
}
# Overidden Methods
sub i_type {
my $c3550 = shift;
my $p_port = $c3550->p_port();
my $p_type = $c3550->p_type();
# Get more generic port types from IF-MIB
my $i_type = $c3550->i_type2();
# Now Override w/ port entries
foreach my $port (keys %$p_type) {
my $iid = $p_port->{$port};
$i_type->{$iid} = $p_type->{$port};
}
return $i_type;
}
sub i_duplex {
my $c3550 = shift;
my $p_port = $c3550->p_port();
my $p_duplex = $c3550->p_duplex();
my %i_duplex;
foreach my $port (keys %$p_duplex) {
my $iid = $p_port->{$port};
$i_duplex{$iid} = $p_duplex->{$port};
}
return \%i_duplex;
}
sub i_duplex_admin {
my $c3550 = shift;
my $p_port = $c3550->p_port();
my $p_duplex_admin = $c3550->p_duplex_admin();
my %i_duplex_admin;
foreach my $port (keys %$p_duplex_admin) {
my $iid = $p_port->{$port};
next unless defined $iid;
my $duplex = $p_duplex_admin->{$port};
next unless defined $duplex;
my $string = 'other';
# see CISCO-STACK-MIB for a description of the bits
$string = 'half' if ($duplex =~ /001$/ or $duplex =~ /0100.$/);
$string = 'full' if ($duplex =~ /010$/ or $duplex =~ /100.0$/);
# we'll call it auto if both full and half are turned on, or if the
# specifically 'auto' flag bit is set.
$string = 'auto'
if ($duplex =~ /1..$/ or $duplex =~ /110..$/ or $duplex =~ /..011$/);
$i_duplex_admin{$iid} = $string;
}
return \%i_duplex_admin;
}
sub vendor {
return 'cisco';
}
sub model {
my $c3550 = shift;
my $id = $c3550->id();
my $model = &SNMP::translateObj($id);
$model =~ s/^catalyst//;
$model =~ s/(24|48)$//;
return $model;
}
# Ports is encoded into the model number
sub ports {
my $c3550 = shift;
my $ports2 = $c3550->ports2();
my $id = $c3550->id();
my $model = &SNMP::translateObj($id);
if ($model =~ /(24|48)$/) {
return $1;
}
return $ports2;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::C3550 - Perl5 Interface to Cisco Catalyst 3550 Layer 2/3 Switches running IOS
=head1 AUTHOR
Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $c3550 = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $c3550->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Abstraction subclass for Cisco Catalyst 3550 Layer 2/3 Switches.
These devices run IOS but have some of the same charactersitics as the Catalyst WS-C family (5xxx,6xxx).
For example, forwarding tables are held in VLANs, and extened interface information
is gleened from CISCO-SWITCH-MIB.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above.
my $c3550 = new SNMP::Info::Layer3::C3550(...);
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
=over
=item CISCO-STACK-MIB
=item CISCO-VTP-MIB
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $c3550->serial()
(B<chassisSerialNumberString>)
=item $c3550->model()
(B<chassisModel>)
=item $c3550->ps1_type()
(B<chassisPs1Type>)
=item $c3550->ps2_type()
(B<chassisPs2Type>)
=item $c3550->ps1_status()
(B<chassisPs1Status>)
=item $c3550->ps2_status()
(B<chassisPs2Status>)
=item $c3550->slots()
(B<chassisNumSlots>)
=item $c3550->fan()
(B<chassisFanStatus>)
=item $c3550->vendor()
Returns 'cisco'
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in SNMP::Info::Layer3 for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $c3550->i_type()
Crosses p_port() with p_type() and returns the results.
Overrides with ifType if p_type() isn't available.
=item $c3550->i_name()
Crosses p_name with p_port and returns results.
=item $c3550->i_duplex()
Crosses p_duplex with p_port and returns results.
=item $c3550->i_duplex_admin()
Crosses p_duplex_admin with p_port.
Munges bit_string returned from p_duplex_admin to get duplex settings.
=back
=head2 Port Entry Table (CISCO-STACK-MIB::portTable)
=over
=item $c3550->p_name()
(B<portName>)
=item $c3550->p_type()
(B<portType>)
=item $c3550->p_status()
(B<portOperStatus>)
=item $c3550->p_status2()
(B<portAdditionalStatus>)
=item $c3550->p_speed()
(B<portAdminSpeed>)
=item $c3550->p_duplex()
(B<portDuplex>)
=item $c3550->p_port()
(B<portIfIndex>)
=back
=head2 Port Capability Table (CISCO-STACK-MIB::portCpbTable)
=over
=item $c3550->p_speed_admin()
(B<portCpbSpeed>)
=item $c3550->p_duplex_admin()
(B<portCpbDuplex>)
=back
=head2 VLAN Entry Table
See ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html
for a good treaty of how to connect to the VLANs
=over
=item $c3550->v_state()
(B<vtpVlanState>)
=item $c3550->v_type()
(B<vtpVlanType>)
=item $c3550->v_name()
(B<vtpVlanName>)
=item $c3550->v_mtu()
(B<vtpVlanMtu>)
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in SNMP::Info::Layer3 for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer3::Foundry - SNMP Interface to Foundry devices
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer3::Foundry;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -221,16 +222,7 @@ __END__
=head1 NAME
SNMP::Info::Layer3::Foundry - Perl5 Interface to Foundry Network Devices
=head1 DESCRIPTION
This module provides limited functionality from older Foundry devices.
Specifically designed for a FI4802
Data comes RFC1213 and FOUNDRY-SN-ROOT-MIB
Inherits all methods from both SNMP::Info and SNMP::Info::Bridge
SNMP::Info::Layer3::Foundry - Perl5 Interface to Foundry FastIron Network Devices
=head1 AUTHOR
@@ -238,136 +230,168 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $foundry = new SNMP::Info::Layer3::Foundry(DestHost => 'switch' ,
Community => 'public' );
# Let SNMP::Info determine the correct subclass for you.
my $foundry = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 1
)
or die "Can't connect to DestHost.\n";
=head1 CREATING AN OBJECT
my $class = $foundry->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
This subclass no longer supported.
This module provides limited functionality from older Foundry devices.
Specifically designed for a FI4802.
For speed or debugging purposes you can call the subclass directly, but not after determining
a more specific class using the method above. Turn off the AutoSpecify flag.
my $foundry = new SNMP::Info::Layer3::Foundry(...);
=head2 Inherited Classes
=over
=item new SNMP::Info::Layer3::Foundry()
=item SNMP::Info
Arguments passed to new() are passed on to SNMP::Session::new()
my $foundry = new SNMP::Info::Layer3::Foundry(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $foundry;
=item $foundry->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $foundry->session();
# Set
my $newsession = new SNMP::Session(...);
$foundry->session($newsession);
=item SNMP::Info::Bridge
=back
=head1 GLOBAL VALUES
=head2 Required MIBs
=over
=item FOUNDRY-SN-ROOT-MIB
=item Inherited Classes' MIBs
See classes listed above for their required MIBs.
=back
The Foundry MIBS can be downloaded from www.mibdepot.com and ??
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $foundry->model()
Returns model type. Checks $foundry->id() against the
FOUNDRY-SN-ROOT-MIB and then parses out xxNNNN
Returns model type. Checks $foundry->id() against the
FOUNDRY-SN-ROOT-MIB and then parses out xxNNNN
=item $foundry->vendor()
Returns 'foundry' :)
Returns 'foundry' :)
=item $foundry->mac()
Returns MAC Address of root port.
Returns MAC Address of root port.
(B<ifPhysAddress.1>)
(B<ifPhysAddress.1>)
=item $foundry->chassis()
Returns Chassis type.
Returns Chassis type.
(B<entPhysicalDescr.1>)
(B<entPhysicalDescr.1>)
=item $foundry->serial()
Returns serial number of device.
Returns serial number of device.
(B<snChasSerNum>)
(B<snChasSerNum>)
=item $foundry->temp()
Returns the chassis temperature
Returns the chassis temperature
(B<snChasActualTemperature>)
(B<snChasActualTemperature>)
=item $foundry->ps1_type()
Returns the Description for the power supply
Returns the Description for the power supply
(B<snChasPwrSupplyDescription.1>)
(B<snChasPwrSupplyDescription.1>)
=item $foundry->ps1_status()
Returns the status of the power supply.
Returns the status of the power supply.
(B<snChasPwrSupplyOperStatus.1>)
(B<snChasPwrSupplyOperStatus.1>)
=item $foundry->fan()
Returns the status of the chassis fan.
Returns the status of the chassis fan.
(B<snChasFanOperStatus.1>)
(B<snChasFanOperStatus.1>)
=back
=head2 Globals imported from SNMP::Info
See documentation in SNMP::Info for details.
=head2 Globals imported from SNMP::Info::Bridge
See documentation in SNMP::Info::Bridge for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $foundry->interfaces()
Returns reference to hash of interface names to iids.
Returns reference to hash of interface names to iids.
Uses B<ifDescr>.
Uses B<ifDescr>.
=item $foundry->i_name()
Returns reference to hash of interface names.
Trys for B<ifAlias> and Defaults to B<ifName>
Returns reference to hash of interface names.
Trys for B<ifAlias> and Defaults to B<ifName>
=item $foundry->i_ignore()
Returns reference to hash of interfaces to be ignored.
Returns reference to hash of interfaces to be ignored.
Ignores interfaces with descriptions of tunnel,loopback,null
Ignores interfaces with descriptions of tunnel,loopback,null
=item $foundry->i_duplex()
Returns reference to hash of interface link duplex status.
Returns reference to hash of interface link duplex status.
Crosses $foundry->sw_duplex() with $foundry->sw_index()
Crosses $foundry->sw_duplex() with $foundry->sw_index()
=item $foundry->i_type()
Returns reference to hash of interface types.
Returns reference to hash of interface types.
Crosses $foundry->sw_type() with $foundry->sw_index()
Crosses $foundry->sw_type() with $foundry->sw_index()
=item $foundry->i_speed()
Returns reference to hash of interface speeds .
Returns reference to hash of interface speeds .
Crosses $foundry->sw_speeD() with $foundry->sw_index() and
does a little munging.
Crosses $foundry->sw_speeD() with $foundry->sw_index() and
does a little munging.
=back
@@ -377,21 +401,21 @@ Sets or returns the SNMP::Session object
=item $foundry->at_index()
Returns reference to hash. Maps ARP table entries to Interface IIDs
Returns reference to hash. Maps ARP table entries to Interface IIDs
(B<ipNetToMediaIfIndex>)
(B<ipNetToMediaIfIndex>)
=item $foundry->at_paddr()
Returns reference to hash. Maps ARP table entries to MAC addresses.
Returns reference to hash. Maps ARP table entries to MAC addresses.
(B<ipNetToMediaPhysAddress>)
(B<ipNetToMediaPhysAddress>)
=item $foundry->at_netaddr()
Returns reference to hash. Maps ARP table entries to IPs
Returns reference to hash. Maps ARP table entries to IPs
(B<ipNetToMediaNetAddress>)
(B<ipNetToMediaNetAddress>)
=back
@@ -401,28 +425,36 @@ Sets or returns the SNMP::Session object
=item $foundry->sw_index()
Returns reference to hash. Maps Table to Interface IID.
Returns reference to hash. Maps Table to Interface IID.
(B<snSwPortIfIndex>)
(B<snSwPortIfIndex>)
=item $foundry->sw_duplex()
Returns reference to hash. Current duplex status for switch ports.
Returns reference to hash. Current duplex status for switch ports.
(B<snSwPortInfoChnMode>)
(B<snSwPortInfoChnMode>)
=item $foundry->sw_type()
Returns reference to hash. Current Port Type .
Returns reference to hash. Current Port Type .
(B<snSwPortInfoMediaType>)
(B<snSwPortInfoMediaType>)
=item $foundry->sw_speed()
Returns reference to hash. Current Port Speed.
Returns reference to hash. Current Port Speed.
(B<snSwPortInfoSpeed>)
(B<snSwPortInfoSpeed>)
=back
=head2 Table Methods imported from SNMP::Info
See documentation in SNMP::Info for details.
=head2 Table Methods imported from SNMP::Info::Bridge
See documentation in SNMP::Info::Bridge for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::MAU - Media Access Unit - RFC2668
# Max Baker <max@warped.org>
#
# Copyright (c) 2002, Regents of the University of California
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::MAU;
$VERSION = 0.1;
$VERSION = 0.5;
# $Id$
use strict;
@@ -108,15 +109,7 @@ __END__
=head1 NAME
SNMP::Info::MAU - Perl5 Interface to SNMP Medium Access Unit (MAU) MIB (RFC2668)
=head1 DESCRIPTION
MAU-MIB is used by Layer 2 devices like HP Switches . The MAU table
contains link and duplex info for the port itself and the device
connected to that port.
Inherits all methods from SNMP::Info
SNMP::Info::MAU - Perl5 Interface to Medium Access Unit (MAU) MIB (RFC2668) via SNMP
=head1 AUTHOR
@@ -124,46 +117,47 @@ Max Baker (C<max@warped.org>)
=head1 SYNOPSIS
my $mau = new SNMP::Info::MAU( DestHost => 'myswitch',
Community => 'public');
my $mau = new SNMP::Info (
AutoSpecify => 1,
Debug => 1,
DestHost => 'hpswitch',
Community => 'public',
Version => 2
);
=head1 CREATING AN OBJECT
my $class = $mau->class();
print " Using device sub class : $class\n";
=head1 DESCRIPTION
SNMP::Info::MAU is a sublcass of SNMP::Info that supplies access to the
MAU-MIB (RFC2668). This MIB is sometimes implemented on Layer 2 network devices like HP Switches.
MAU = Media Access Unit.
The MAU table contains link and duplex info for the port itself and the device
connected to that port.
Normally you use or create a subclass of SNMP::Info that inherits this one. Do not use directly.
For debugging purposes call the class directly as you would SNMP::Info
my $mau = new SNMP::Info::MAU(...);
=head2 Inherited Classes
None.
=head2 Required MIBs
=over
=item new SNMP::Info::MAU()
Arguments passed to new() are passed on to SNMP::Session::new()
my $mau = new SNMP::Info::MAU(
DestHost => $host,
Community => 'public',
Version => 3,...
)
die "Couldn't connect.\n" unless defined $mau;
=item $mau->session()
Sets or returns the SNMP::Session object
# Get
my $sess = $mau->session();
# Set
my $newsession = new SNMP::Session(...);
$mau->session($newsession);
=item $mau->all(), $mau->load_all()
Queries each of the methods listed in %FUNCS and returns a hash reference.
$mau->all() will call $mau->load_all() once and then return cahced valued.
Use $mau->load_all() to reload from the device.
=item MAU-MIB
=back
=head1 MAU Global Configuration Values
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
@@ -171,7 +165,12 @@ Use $mau->load_all() to reload from the device.
=back
=head1 MAU INTERFACE TABLE ENTRIES
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 MAU INTERFACE TABLE ENTRIES
=over
@@ -271,4 +270,5 @@ capabilities of the device on the other end.
high. Currently bits 10,12,15,17,19.
=back
=cut

View File

@@ -1,7 +1,10 @@
COPYRIGHT
ChangeLog
Info.pm
Info/Bridge.pm
Info/CDP.pm
Info/CiscoStats.pm
Info/Entity.pm
Info/EtherLike.pm
Info/Layer1.pm
Info/Layer1/Allied.pm
@@ -14,9 +17,10 @@ Info/Layer2/Catalyst.pm
Info/Layer2/HP.pm
Info/Layer3.pm
Info/Layer3/Aironet.pm
Info/Layer3/C3550.pm
Info/Layer3/Foundry.pm
Info/MAU.pm
MANIFEST
Makefile.PL
README
test.pl
t/prereq.t

View File

@@ -1,9 +1,16 @@
# SNMP::Info - Makefile.PL
# $Id$
use ExtUtils::MakeMaker;
WriteMakefile(
'NAME' => 'SNMP::Info',
'VERSION_FROM' => 'Info.pm',
'PREREQ_PM' => {'SNMP' => '4'},
'PREREQ_PM' => {
'Math::BigInt' => 0
# SNMP not available on CPAN .
# Install with net-snmp.sourceforge.net
# 'SNMP' => '4'
},
($] >= 5.005 ?
(ABSTRACT_FROM => 'Info.pm',
AUTHOR => 'Max Baker <max@warped.org>')

1030
README

File diff suppressed because it is too large Load Diff

81
t/prereq.t Executable file
View File

@@ -0,0 +1,81 @@
#!/usr/local/bin/perl -w
# prereq.t - Test file for prerequesites for SNMP::Info
# $Id$
use Test::More tests=> 3;
# Check for SNMP Module
my $have_snmp=0;
eval {
require SNMP;
};
if ($@){
print STDERR <<'end_snmp';
Net-SNMP not found. Net-SNMP installs the perl modules
SNMP and SNMP::Session. As of version 4.2.1 and greater the Perl
modules are no longer distributed on CPAN, as they are specific to different
versions of SNMP.
Install Net-SNMP from http://net-snmp.sourceforge.net and make sure you run
configure with the --with-perl-modules switch!
Note to Redhat Users: Redhat, in its infinite wisdom, does not install the
Perl modules as part of their 8.0 RPMS. Please uninstall them and install the
newest version by hand.
end_snmp
ok(0,'Net-SNMP not installed, or missing Perl modules.');
} else {
$have_snmp=1;
ok(1,'Net-SNMP installed');
}
# Check for version
SKIP: {
skip('SNMP not installed, no further testing',2) unless $have_snmp;
my $VERSION = $SNMP::VERSION;
ok(defined $VERSION ? 1 : 1, "found version for SNMP");
my ($ver_maj,$ver_min,$ver_rev) = split(/\./,$VERSION);
ok ($ver_maj >= 4, 'Net-SNMP ver 4 or higher');
if ($ver_maj == 4 and $ver_min == 2 and $ver_rev == 0){
print STDERR << "end_420";
SNMP module version 4.2.0 found. Please triple check that you have
version 4.2.0 of Net-SNMP installed, and that you did not accidently install
the SNMP module found on CPAN. All newer versions are bundled with
Net-SNMP, and are not available on CPAN. Please find them at
http://net-snmp.sourceforge.net . Make sure you run configure with the
--with-perl-modules switch.
end_420
}
if( $ver_maj == 5 and $ver_min == 0 and $ver_rev == 1 ){
print STDERR << "end_501";
Perl module of Net-SNMP 5.0.1 is buggy. Please upgrade.
end_501
}
}
print STDERR << "end_mibs";
Make sure you download and install the MIBS needed for SNMP::Info.
See Man page or perldoc for SNMP::Info.
end_mibs
# vim:syntax=perl

17
test.pl
View File

@@ -1,17 +0,0 @@
# SNMP::Info - test.pl
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
#
use Test;
BEGIN { plan tests => 1 };
use SNMP::Info;
ok(1);
# If we made it this far, we're ok.
#########################
# No tests yet.
print "No test's implemented yet. \n";