Compare commits

..

39 Commits

Author SHA1 Message Date
Max Baker
bf3a37195b 2.01 update 2009-06-12 22:47:50 +00:00
Max Baker
1e37f80368 *** empty log message *** 2009-06-12 22:36:50 +00:00
Max Baker
5f9c2d3e62 pod updates 2009-06-12 22:25:32 +00:00
Max Baker
c88449151e up version to 2.01 2009-06-12 22:24:25 +00:00
Max Baker
9c4f031581 update MANIFEST 2009-06-12 22:17:22 +00:00
Max Baker
3cac59adf4 simple script to launch a single test 2009-06-12 21:59:50 +00:00
Max Baker
77bcf720d3 simple script to push out a version number to each module 2009-06-12 21:59:05 +00:00
Max Baker
e6b4c607e0 add check for package documentation in Info.pm 2009-06-12 21:58:49 +00:00
Max Baker
cbeb41c728 fix for PerlCritic 2009-06-12 20:48:44 +00:00
Max Baker
101aaa0a68 fix up spelling 2009-06-12 18:56:22 +00:00
Max Baker
2233511fad add missing POD 2009-06-12 18:36:00 +00:00
Max Baker
8efa868ca3 bring POD uptodate and clean-up module a litte 2009-06-12 18:35:06 +00:00
Max Baker
e738d502ef change inheritance order in @ISA, add POD, and remove tabs 2009-06-12 18:11:52 +00:00
Max Baker
2a7d5b51d9 update to 2009 2009-06-12 18:03:45 +00:00
Max Baker
67c4f160aa Update to sorta match 2.0 2009-06-12 18:03:03 +00:00
Max Baker
6d87313283 fix subtle bug in the loading order of CiscoVTP vs CiscoStpExtensions because of a conflict between Bridge::v_name and CiscoVTP::v_name 2009-06-11 21:49:37 +00:00
Max Baker
98e07690be add qb_v_name for completeness and to match POD 2009-06-11 21:48:11 +00:00
Max Baker
c0bc769be9 add CVS revision number to debugging output to aid future email dumps 2009-06-11 18:06:15 +00:00
Max Baker
01d9b0f291 minor pod bug 2009-06-10 16:43:50 +00:00
Max Baker
2539692016 Add Cisco FWSM detection 2009-06-08 22:06:24 +00:00
Max Baker
3a3fc548ca Added Sam's patch to support more weird cisco crap :) 2009-06-08 02:28:31 +00:00
Max Baker
84d6cd18fb [2020353] Added L3::Altiga class 2009-06-07 23:35:06 +00:00
Max Baker
2d7b94e5a7 *** empty log message *** 2009-06-07 22:52:09 +00:00
Max Baker
98eceb7c57 add cisco id by OID for vendor for some problem devices. c/o Sam Stickland 2009-06-07 22:50:04 +00:00
Max Baker
be92ec0379 fix case on mib name per alexander H 2009-06-07 01:33:12 +00:00
Bill Fenner
34d4ec66a3 Add Info/CiscoStpExtensions.pm 2009-03-27 07:14:52 +00:00
Bill Fenner
35c8ed6038 Add MBSSID-aware i_ssidlist and i_ssidbcast methods
Add CiscoConfig, remove dangling CiscoVTP
Add cd11_rateset
2009-03-23 21:29:11 +00:00
Bill Fenner
dd10a88ee2 Add Arista and EOS, also sort -f 2009-03-23 21:19:26 +00:00
Bill Fenner
71f0947988 Turn Arista vendor name to 'arista', to match, e.g., 'cisco' and 'juniper' 2009-03-23 19:30:30 +00:00
Carlos Vicente
d7cd3ff9e7 Updating copyright 2009-03-20 17:34:59 +00:00
Carlos Vicente
2567d6a5c9 Committing missing file 2009-03-20 17:13:12 +00:00
Carlos Vicente
5831d9e4ae Adding keyword for detecting C6500 with Sup32 PISA engine 2009-03-12 22:28:55 +00:00
Carlos Vicente
690bc6bfa0 Add support for other CDP/LLDP binary formatted values (ID 1909147) 2009-03-10 16:57:37 +00:00
Carlos Vicente
5f0e73bcb4 Adding support for CISCO-STP-EXTENSIONS-MIB (ID 1872450) 2009-03-10 16:52:08 +00:00
Carlos Vicente
b1a7b67ae7 Adding Cisco WLC module support (ID 2231376) 2009-03-10 01:25:52 +00:00
Max Baker
f0539d51ff update test_class.pl to add mib dirs, relative path, and more debug info 2009-03-09 19:12:55 +00:00
Bill Fenner
1af34e3e25 Patch from Thomas Ristic to recognize CIGESM as C2900. 2009-03-06 22:30:53 +00:00
Bill Fenner
0510dbfafc Add Layer3::Arista.
Work around Net-SNMP's failure to load IF-MIB because it prefers the
obsolete RFC1213-MIB more completely: add the new ifOperState values
explicitly (e.g., lowerLayerDown, dormant, notPresent,...)
2009-03-06 20:09:38 +00:00
Bill Fenner
ca35689475 Use orig_i_name, so that setting an interface description does not
change the netdisco port name.
2009-03-06 20:07:41 +00:00
85 changed files with 2036 additions and 448 deletions

View File

@@ -1,5 +1,5 @@
All code from version 0.7 on
Copyright (c) 2003,2004 Max Baker
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
All rights reserved.
Original Code

View File

@@ -1,6 +1,28 @@
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
ChangeLog $Id$
version 2.01 (06/12/09)
+ Added CiscoStpExtensions Class (Carlos Vicente)
+ Added Layer3::Arista (fenner)
+ [2020353] Added L3::Altiga for Cisco (Altiga) VPN3000 Concentrators
(Jeroen van Ingen)
* Fixed RFC1213-MIB vs IF-MIB collision in ifOperStatus
* Updated test_class.pl for better debug info and relative path
* Add cisco vendor detection by OID in Layer3.pm (Sam Stickland)
* Fix CaSe of EtherLike-MIB in EtherLike.pm (Alexander Hartmaier)
* Added Cisco FWSM to L3::Cisco
* Added s222_rp to L3::C6500
* Added CIGESM to L2::C2900
* Added Airespace WLC to L2::Airespace
* Updated POD and DeviceMatrix quite a bit
* Added ENTITY-MIB to CiscoStats for better model handling above
* Fix networkaddress handling in LLDP-MIB
* Added CiscoConfig to L2::Aironet, L3::C3550 classes
* Better SSID capabilities for L2::Aironet
* Fix CDP vs LLDP in c_id() for HP Class
* test_class.pl improvements
version 2.00 (08/01/08)
+ Support for Alcatel-Lucent OmniSwitch via L3::AlcatelLucent
+ Support for Alcatel-Lucent Service Router via L3::Timetra

View File

@@ -6,7 +6,9 @@
# $Id$
#
# Airespace (pre-Cisco)
#
device-vendor: Airespace
cdp:no
arpnip: no
@@ -16,14 +18,33 @@ duplex: both
vlan: yes
modules: yes
class: Layer2::Airespace
device-family: Airespace Wireless Controllers
note: Uses proprietary MIBs to provide MAC to port mapping. APs appear as switch ports.
note: Device will only communicate with SNMP version configured in the controller.
device-family: Airespace Wireless Controllers
device: 3500, 4101, 4102
#
# Alcatel-Lucent
#
device-vendor: Alcatel-Lucent
device-family: L3
class: Layer3::AlcatelLucent
device: All
device-family: Timetra
class: Layer3::Timetra
device: All
device-family: AOS
class: Layer2::Aruba
device: All
#
# Allied
#
device-vendor: Allied Telesyn
cdp:no
class: Layer1::Allied
@@ -40,21 +61,41 @@ device-family: AT-8000 Switches
class: Layer2::Allied
ver: 2
macsuck: yes
device: All
#
# Altiga
#
device-vendor: Altiga
class: Layer3::Altiga
note: See Cisco/Altiga
#
# Arista
#
device-vendor: Arista
class: Layer3::Arista
device-family: All
device: All
#
# Aruba
#
device-vendor: Aruba
arpnip: no
macsuck: yes
portmac: yes
duplex: no
class: Layer2::Aruba
note: Uses proprietary MIBs to provide MAC to port mapping. APs appear as switch ports.
device-family: Aruba Wireless Controllers
note: Uses proprietary MIBs to provide MAC to port mapping. APs appear as switch ports.
device: 5000
#
# Asante
#
device-vendor: Asante
class: Layer1::Asante
ver: 1
@@ -66,16 +107,19 @@ device-family: Asante Hubs
device: 1012
#
# Bay
#
device-vendor: Bay
note: See Nortel
#
# CISCO
#
device-vendor: Cisco
cdp: yes
ver: 2
modules: yes
note: Error in CISCO-TC-MIB. See README for how to patch.
device-family: Aironet
note: IOS and Aironet OS versions
@@ -91,6 +135,12 @@ note: Aironet based device
device: AP350, AP340, CAP350, CAP340, 1200, AP4800
note: Aironet based device
device-family: Altiga
class: Layer3::Altiga
device: VPN3000
note: The Cisco 3000 device can return duplicate interface names, while Netdisco expects unique interface names. To ensure unique device names I append numbers only when an interface name would not be unique without one. Interfaces with unique names keep their ifDescr name.
device-family: 1000
duplex: no
ver: 1
@@ -121,11 +171,7 @@ arpnip: yes
macsuck: yes
class: Layer3::Cisco
device:2610,2610XM,2611,2620,2620XM,2621,2621XM
device:2651XM
device:2691
device:2610, 2610XM, 2611, 2620, 2620XM, 2621, 2621XM, 2651XM, 2691
device-family: 2800
duplex: link
@@ -145,14 +191,15 @@ duplex: no
device-family:7200
class: Layer3::Cisco
note: !"When scanning my network with netdisco I would find that my 7200 series router running Cisco IOS Software Release 12.2(1) would reboot when scanning for CDP neighbours, to solve the issue I upgraded to Cisco IOS Software Release Version 12.2(37)"
device:all
#note: Unconfirmed problem : "When scanning my network with netdisco I would find that my 7200 series router running Cisco IOS Software Release 12.2(1) would reboot when scanning for CDP neighbours, to solve the issue I upgraded to Cisco IOS Software Release Version 12.2(37)"
device-family: 7500
class: Layer3::Cisco
device: 7507
duplex: no
note: !Duplex settings are falsely reported in older IOS versions
note: !Duplex settings are falsely reported in ancient IOS versions
device-family: AS5000
duplex: no
@@ -171,11 +218,7 @@ duplex: both
vlan: write
class: Layer2::C1900
device: wsc1900c
device-family: Catalyst 1900
device: wsc1900
device-family: Catalyst 1900
device: wsc1900c, wsc1900
device-family: Catalyst 2900
note: IOS
@@ -186,18 +229,14 @@ class: Layer2::C2900
portmac: yes
note: !Pre IOS 11.2 (8) SA3 - PortMAC shows up in CAM table.
device: 2912MfXL, 2924CXL, 2924CXLv
device: 2908xl
note: !Pre IOS 11.2 (8.6) some features (duplex...) aren't present.
device: 2912MfXL
device: 2924MXL
ver: 1
device: 2924CXL
device: 2924CXLv
device-family: Catalyst 2940
note: IOS
macsuck: vlan
@@ -236,11 +275,7 @@ note: L2 only IOS devices - Just like Catalyst 2900 series from SNMP
note: IOS Version 12.0(5)XP is buggy and doesn't do VLAN Community indexing correctly.
class: Layer2::C2900
device: 3508GXL
device: 3524XL
device: 3548XL
device: 3508GXL, 3524XL, 3548XL
device-family: Catalyst 3550
macsuck: vlan
@@ -256,11 +291,9 @@ device: 3550-12T
device: 3400 w/ MetroBase Image
device: 3550
device: 3550, 3560, 3550-24, 3550-48
note: L2/L3 Switch
arpnip: yes
device: 3550-24, 3550-48
macsuck: vlan
device-family: Catalyst 3750
@@ -274,13 +307,10 @@ macsuck: vlan
vlan: write
class: Layer2::Catalyst
note: Comes in IOS and CatOS versions like the 6k series.
note: CatOS versions like L2::Catalyst just fine.
note: !Reported problems with SNMP taking up all the CPU. Requests take significantly longer.
note: !Reported problems with SNMP taking up all the CPU on older SW. Requests take significantly longer.
note: !IOS Version 12.1.8a reported not to respond to BRIDGE-MIB calls.
device: wsc4003, wsc4006
device: wsc4503, wsc4506
device: wsc4003, wsc4006, wsc4503, wsc4506
device: wsc4912g
note: Dedicated 12 port gig-e switch
@@ -297,26 +327,19 @@ class: Layer3::C4000
note: !Has serious slowdown/timeout problems with SNMP
note: !IOS Software Release 12.2(20)EW or higher required for duplex support
device-family: Catalyst 5000
duplex: write
vlan: write
class: Layer2::Catalyst
note: Port info in CISCO-STACK-MIB
device: wsc2926
note: !Can give false information over SNMP at times.
device: wsc2948g
device: wsc2980g
note: !Macsuck not working?
device: wsc2948g, wsc2980g, wsc5500, wsc5505, wsc5509
device: wsc5000
note: !Has nasty tendency to not give you all SNMP data ,flaky for some older Catalyst versions.
device: wsc5500,wsc5505,wsc5509
device: wsx5302
arpnip: yes
class: Layer3
@@ -333,17 +356,9 @@ note: Native Mode (IOS) versions seem to have SNMP problems with L2 data.
note: !Problem with IOS 12.2.17d-SXB ... upgrade to -SXB1 or higher.
note: !Sup720-3B and NativeIOS 12.2 (17d)SXB10 may report 127.0.0.51 as CDP neighbor address.
device: 6503
macsuck:no
note: !Macsuck failing even under vlan mode
device: 6503, 6509, sp72033, s3223, s32p3, s222
note: Native mode (IOS) reports L2+L3
device: 6509
duplex: link
macsuck:no
note: Native mode (IOS) reports L2+L3
note: !Macsuck failing even under vlan mode
device: wsc6509
duplex: write
class: Layer2::Catalyst
@@ -379,7 +394,23 @@ note: Device will only communicate with SNMP version configured in the controlle
device: 2006, 4112, 4124, 4136, 4402, 4404
device-family: Firewall
class: Layer3::Cisco
device: PIX Security Appliance
device: Adaptive Security Applicance
device: Firewall Services Moduels (FWSM)
#
# Cyclades
#
device-vendor: Cyclades
class: Layer1::Cyclades
device-family: All
device: All
#
# Dell
#
device-vendor: Dell
arpnip: no
macsuck: yes
@@ -399,7 +430,15 @@ device: 5324
device-family: Dell PowerConnect 3000 Series
device: 3348, 3448P, 3424, 3424P
device-family: IBM BladeCenter Ethernet Switch
device: All
device-family: Linksys 2048
device: All
#
# Enterasys
#
device-vendor: Enterasys Networks
arpnip: yes
macsuck: yes
@@ -411,14 +450,15 @@ class: Layer3::Enterasys
device-family: SuperStack C-Series
device: C3G124-24, C3G124-48
device: C2G124-24, C2G124-48
device: C3G124-24, C3G124-48, C2G124-24, C2G124-48
device-family: Matrix
device: Matrix N-Series DFE
#
# Extreme
#
device-vendor: Extreme Networks
arpnip: yes
macsuck: yes
@@ -433,9 +473,10 @@ device-family: Alpine and Summit
device: Alpine 3808
device: Summit 7i, 48si
#
# Foundry
#
device-vendor: Foundry Networks
note: CDP --> FDP.
vlan: yes
modules: no
@@ -467,9 +508,12 @@ device: FWSX424
device: ServerIronGT
device: FLS624, FLS648
#
# HP
#
device-vendor: HP
class: Layer2::HP
note: HP Devices are very widely supported.
ver: 2
modules: yes
@@ -479,40 +523,75 @@ macsuck: yes
arpnip: no
cdp: yes
vlan: write
note: CDP only available with newer ROM versions.
note: CDP and LLDP support are very firmware version dependent
note: This list hasn't been updated since 2003
device: 2512
device: 2512, 2524
ver: 1
device: 2524
ver: 1
device: 4000
note: duplex issues?
device: 4104GL
device: 4000,4104GL
duplex: link
note: duplex issues?
device: 4108GL,8000,2626,2650,8000
note: VLAN info in Q-BRIDGE-MIB
#
# Juniper
#
device-vendor: Juniper
arpnip: yes
device-family: M-series router
class: Layer3::Juniper
device: M-series router
device: All
device-family: NetScreen
class: Layer3::Netscreen
device: Netscreen
device: All
#
# Linksys
#
device-vendor: Linksys
device-family: Generic L2 Device
class: Layer2
device: Some
device-family: Generic L3 Device
class: Layer3
device: Some
device-family: 2048
class: Layer3::Dell
device: All
#
# Microsoft
#
device-vendor: Microsoft
device-family: Windows
class: Layer3::Microsoft
device: Windows Router
#
# Netgear
#
device-vendor: NetGear
device-family: Switches
class: Layer2::Netgear
device: All
#
# NetScreen
#
device-vendor: NetScreen
note: See Juniper
#
# Net-SNMP
#
device-vendor: Net-SNMP
class: Layer3
ver: 2
@@ -524,11 +603,13 @@ device: Linux routers
device-family: BSD
device: BSD routers
#
# NORTEL
#
device-vendor: Nortel
macsuck: yes
cdp: proprietary
note: CDP --> SONMP.
note: SONMP Discovery Protocol Supported
device-family: BayStack Hub
duplex: both
@@ -549,23 +630,13 @@ vlan: write
modules: yes
class: Layer2::Baystack
device: 303,304
device: 350
device: 380
device: 410
device: 420,425
device: 303, 304, 350, 380, 410, 420, 425, 460, 470
device: 450
note: !Some versions > 4.X in stacked configuration have SNMP timeout issues.
note: Labels full duplex as 20Mbit connection.
device: 460,470
device: BPS
device: Business Policy Switch (BPS)
device-family: Ethernet Routing Switch/Baystack Switch
arpnip: yes
@@ -597,13 +668,8 @@ vlan: yes
class: Layer2::Centillion
note: !Must be on version 4.x or 5.x (VLAN based) software.
device: 5000BH
device: 5005BH
device: C100
device: C50
device: 5000BH, 5005BH
device: C50,C100
device-family: AP222x
duplex: both
@@ -671,11 +737,7 @@ class: Layer3::Passport
note: !8600 Code versions < 3.2 vlan based mac-suck and are unsupported. Upgrade code.
note: !8600 3.2 code versions < 3.2.2.2 have Bridge MIB loop. Upgrade code.
device: 8603,8606,8610
device: 8610co
device: 8106,8110
device: 8603,8606,8610, 8610co, 8106, 8110
device: 1050,1100,1150,1200
@@ -726,7 +788,9 @@ note: Uses proprietary MIBs to provide MAC to port mapping. APs appear as switc
device: 2270
#
# Proxim
#
device-vendor: Proxim
macsuck: yes
duplex: no
@@ -739,7 +803,9 @@ device: AP-1000,AP-2000,AP-4000
device: WavePOINT-II
#
# Sun
#
device-vendor: Sun
class: Layer3::Sun
@@ -747,11 +813,15 @@ device-family: Sun routers
device: Sun routers
#
# Synoptics
#
device-vendor: Synoptics
note: See Nortel
#
# Zyxel
#
device-vendor: Zyxel
class: Layer2::ZyXEL_DSLAM
note: Doesn't report sysServices (layers)

205
Info.pm
View File

@@ -1,8 +1,8 @@
# SNMP::Info - Max Baker
# $Id$
# SNMP::Info
#
# Copyright (c) 2003-2008 Max Baker
# Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
# All rights reserved.
#
# Portions Copyright (c) 2002-2003, Regents of the University of California
# All rights reserved.
#
@@ -20,10 +20,11 @@ use Math::BigInt;
@SNMP::Info::EXPORT_OK = qw//;
use vars
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
qw/$VERSION $VERSION_CVS %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
$NOSUCH $BIGINT $REPEATERS/;
$VERSION = '2.00';
$VERSION = '2.01';
$VERSION_CVS = '$Id$';
=head1 NAME
@@ -31,15 +32,22 @@ SNMP::Info - Object Oriented Perl5 Interface to Network devices and MIBs through
=head1 VERSION
SNMP::Info - Version 2.00
SNMP::Info - Version 2.01
=head1 AUTHOR
SNMP::Info was created at UCSC for the netdisco project (www.netdisco.org)
and was originally written by Max Baker.
SNMP::Info is maintained by team of Open Source authors headed by Eric Miller
and Bill Fenner.
Currently being maintained by team of Open Source authors headed by
Eric Miller and Bill Fenner.
Please visit L<http://sourceforge.net/projects/snmp-info/> for most up-to-date
list of developers.
SNMP::Info was originally created at UCSC for the Netdisco project L<http://netdisco.org>
by Max Baker.
=head1 DEVICES SUPPORTED
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details.
=head1 SYNOPSIS
@@ -107,9 +115,6 @@ Mailing List at <http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
SNMP::Info gives an object oriented interface to information obtained through
SNMP.
This module lives at http://snmp-info.sourceforge.net Check for newest
version and documentation.
This module is geared towards network devices. Subclasses exist for a number
of network devices and common MIBs.
@@ -150,12 +155,9 @@ distribution.
Net-SNMP can be found at http://net-snmp.sourceforge.net
Version 5.1.2 or greater is recommended.
Version 5.3.2 or greater is recommended.
Various version 4's and 5.0 and 5.1 series will work. 5.0.1 is kinda flaky
on the Perl side.
Versions 5.0301 and 5.0203 have issues with bulkwalk, turn off bulkwalk.
Versions 5.0.1, 5.0301 and 5.0203 have issues with bulkwalk and are not supported.
B<Redhat Users>: Some versions that come with certain versions of
Redhat/Fedora don't have the Perl library installed. Uninstall the RPM and
@@ -166,9 +168,7 @@ install by hand.
SNMP::Info operates on textual descriptors found in MIBs.
If you are using SNMP::Info separate from Netdisco,
download the Netdisco MIB package at
http://sourceforge.net/project/showfiles.php?group_id=80033&package_id=135517
download the Netdisco MIB package at L<http://sourceforge.net/project/showfiles.php?group_id=80033&package_id=135517>
Make sure that your snmp.conf is updated to point to your MIB directory
and that the MIBs are world-readable.
@@ -267,6 +267,12 @@ F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>.
See documentation in L<SNMP::Info::CiscoPortSecurity> for details.
=item SNMP::Info::CiscoPower
F<CISCO-POWER-ETHERNET-EXT-MIB>.
See documentation in L<SNMP::Info::CiscoPower> for details.
=item SNMP::Info::CiscoQOS
F<CISCO-CLASS-BASED-QOS-MIB>. A collection of OIDs providing information about
@@ -287,6 +293,12 @@ F<CISCO-STACK-MIB>.
See documentation in L<SNMP::Info::CiscoStack> for details.
=item SNMP::Info::CiscoStpExtensions
F<CISCO-STP-EXTENSIONS-MIB>
See documentation in L<SNMP::Info::CiscoStpExtensions> for details.
=item SNMP::Info::CiscoStats
F<OLD-CISCO-CPU-MIB>, F<CISCO-PROCESS-MIB>, and F<CISCO-MEMORY-POOL-MIB>.
@@ -310,7 +322,7 @@ See documentation in L<SNMP::Info::Entity> for details.
=item SNMP::Info::EtherLike
F<ETHERLIKE-MIB> (RFC1398) - Some Layer3 devices implement this MIB, as well
F<EtherLike-MIB> (RFC1398) - Some Layer3 devices implement this MIB, as well
as some Aironet Layer 2 devices (non Cisco).
See documentation in L<SNMP::Info::EtherLike> for details.
@@ -348,6 +360,12 @@ F<S5-AGENT-MIB>, F<S5-CHASSIS-MIB>.
See documentation in L<SNMP::Info::NortelStack> for details.
=item SNMP::Info::PowerEthernet
F<POWER-ETHERNET-MIB>
See documentation in L<SNMP::Info::PowerEthernet> for details.
=item SNMP::Info::RapidCity
F<RAPID-CITY>. Inherited by Nortel switches for duplex and VLAN information.
@@ -523,6 +541,12 @@ Subclass for Nortel 222x series wireless access points.
See documentation in L<SNMP::Info::Layer2::NAP222x> for details.
=item SNMP::Info::Layer2::Netgear
Subclass for Netgear switches
See documentation in L<SNMP::Info::Layer2::Netgear> for details.
=item SNMP::Info::Layer2::Orinoco
Subclass for Orinoco/Proxim wireless access points.
@@ -556,6 +580,12 @@ Note Layer2::Aironet
See documentation in L<SNMP::Info::Layer3::Aironet> for details.
=item SNMP::Info::Layer3::AlcatelLucent
Alcatel-Lucent OmniSwitch Class.
See documentation in L<SNMP::Info::Layer3::AlcatelLucent> for details.
=item SNMP::Info::Layer3::AlteonAD
Subclass for Nortel Alteon Series Layer 2-7 load balancing switches
@@ -563,6 +593,14 @@ and Nortel BladeCenter Layer2-3 GbE Switch Modules.
See documentation in L<SNMP::Info::Layer3::AlteonAD> for details.
=item SNMP::Info::Layer3::Altiga
See documentation in L<SNMP::Info::Layer3::Altiga> for details.
=item SNMP::Info::Layer3::Arista
See documentation in L<SNMP::Info::Layer3::Arista> for details.
=item SNMP::Info::Layer3::BayRS
Subclass for Nortel Multiprotocol/BayRS routers. This includes BCN, BLN, ASN,
@@ -677,6 +715,12 @@ Subclass for Generic Sun Routers running SunOS.
See documentation in L<SNMP::Info::Layer3::Sun> for details.
=item SNMP::Info::Layer3::Timetra
Alcatel-Lucent SR Class.
See documentation in L<SNMP::Info::Layer3::Timetra> for details.
=back
=back
@@ -1097,71 +1141,8 @@ SNMP::Info::Layer3 subclasses.
If the device still can be connected to via SNMP::Info, then
SNMP::Info is returned.
Algorithm for Subclass Detection:
Layer3 Support -> SNMP::Info::Layer3
Aironet (BR500,AP340,350,1200) -> SNMP::Info::Layer3::Aironet
AP4800... All Non IOS
Alcatel-Lucent OmniSwitch -> SNMP::Info::Layer3::AlcatelLucent
Alcatel-Lucent Service Router -> SNMP::Info::Layer3::Timetra
Catalyst 3550,3548,3560 -> SNMP::Info::Layer3::C3550
Catalyst 4000,4500 -> SNMP::Info::Layer3::C4000
Catalyst 6500,3750 -> SNMP::Info::Layer3::C6500
Cisco Generic L3 IOS device -> SNMP::Info::Layer3::Cisco
Cyclades terminal server -> SNMP::Info::Layer1::Cyclades
Dell PowerConnect -> SNMP::Info::Layer3::Dell
D-Link -> SNMP::Info::Layer3::Dell
Enterasys -> SNMP::Info::Layer3::Enterasys
Extreme -> SNMP::Info::Layer3::Extreme
Foundry -> SNMP::Info::Layer3::Foundry
HP Procurve -> SNMP::Info::Layer2::HP
HP Procurve 9300 series -> SNMP::Info::Layer3::HP9300
Juniper -> SNMP::Info::Layer3::Juniper
Microsoft -> SNMP::Info::Layer3::Microsoft
Net-SNMP -> SNMP::Info::Layer3::NetSNMP
Nortel Passport/Accelar LAN -> SNMP::Info::Layer3::Passport
Nortel/Bay Baystack -> SNMP::Info::Layer2::Baystack
Alteon Ace Director -> SNMP::Info::Layer3::AlteonAD
Nortel Contivity -> SNMP::Info::Layer3::Contivity
Nortel BayRS Router -> SNMP::Info::Layer3::BayRS
Sun Router -> SNMP::Info::Layer3::Sun
Elsif Layer2 (no Layer3) -> SNMP::Info::Layer2
Aironet - IOS Devices -> SNMP::Info::Layer2::Aironet
Catalyst 1900 -> SNMP::Info::Layer2::C1900
Catalyst 2900XL,2940,2950,
3500XL -> SNMP::Info::Layer2::C2900
Catalyst 2960, 2970 -> SNMP::Info::Layer3::C6500
Catalyst 3550/3548 -> SNMP::Info::Layer3::C3550
Cisco 3400 w/ MetroBase -> SNMP::Info::Layer3::C3550
Catalyst WS-C 2926,5xxx -> SNMP::Info::Layer2::Catalyst
Cisco (Airespace) Wireless -> SNMP::Info::Layer2::Airespace
Cisco (not covered by above) -> SNMP::Info::Layer2::Cisco
Cyclades terminal server -> SNMP::Info::Layer1::Cyclades
Dell PowerConnect -> SNMP::Info::Layer3::Dell
D-Link -> SNMP::Info::Layer3::Dell
Enterasys -> SNMP::Info::Layer3::Enterasys
Extreme -> SNMP::Info::Layer3::Extreme
Foundry -> SNMP::Info::Layer3::Foundry
HP Procurve -> SNMP::Info::Layer2::HP
HP Procurve 9300 series -> SNMP::Info::Layer3::HP9300
IBM BladeCenter GbESM -> SNMP::Info::Layer3::Dell
Nortel/Bay Centillion ATM -> SNMP::Info::Layer2::Centillion
Nortel/Bay Baystack -> SNMP::Info::Layer2::Baystack
Nortel Business Ethernet Switch-> SNMP::Info::Layer2::Baystack
Nortel Passport/Accelar 8100 -> SNMP::Info::Layer3::Passport
Nortel AP 222x -> SNMP::Info::Layer2::NAP222x
Orinco AP -> SNMP::Info::Layer2::Orinoco
Nortel 2270 WSS -> SNMP::Info::Layer2::N2270
Elsif Layer1 Support -> SNMP::Info::Layer1
Allied -> SNMP::Info::Layer1::Allied
Asante -> SNMP::Info::Layer1::Asante
Nortel/Bay Hub -> SNMP::Info::Layer1::Bayhub
Bay/Synoptics Hub -> SNMP::Info::Layer1::S3000
Else -> SNMP::Info
ZyXEL_DSLAM -> SNMP::Info::Layer2::ZyXEL_DSLAM
Aruba wireless -> SNMP::Info::Layer2::Aruba
Alcatel OmniAccess -> SNMP::Info::Layer2::Aruba
Juniper NetScreen -> SNMP::Info::Layer3::Netscreen
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details
about device support, or view C<device_type()> in F<Info.pm>.
=cut
@@ -1179,10 +1160,6 @@ sub device_type {
$desc =~ s/[\r\n\l]+/ /g;
my $id = $info->id() || 'undef';
$info->debug()
and print
"SNMP::Info::device_type() layers:$layers id:$id sysDescr:\"$desc\"\n";
# Hash for generic fallback to a device class if unable to determine using
# the sysDescr regex.
my %l3sysoidmap = (
@@ -1199,10 +1176,12 @@ sub device_type {
2272 => 'SNMP::Info::Layer3::Passport',
2636 => 'SNMP::Info::Layer3::Juniper',
2925 => 'SNMP::Info::Layer1::Cyclades',
3076 => 'SNMP::Info::Layer3::Altiga',
5624 => 'SNMP::Info::Layer3::Enterasys',
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
6527 => 'SNMP::Info::Layer3::Timetra',
8072 => 'SNMP::Info::Layer3::NetSNMP',
30065 => 'SNMP::Info::Layer3::Arista',
);
my %l2sysoidmap = (
@@ -1224,6 +1203,11 @@ sub device_type {
# Get just the enterprise number for generic mapping
$id = $1 if ( defined($id) && $id =~ /^\.1\.3\.6\.1\.4\.1\.(\d+)/ );
if ($info->debug()) {
print "SNMP::Info $VERSION ($VERSION_CVS)\n";
print "SNMP::Info::device_type() layers:$layers id:$id sysDescr:\"$desc\"\n";
}
# Layer 3 Supported
# (usually has layer2 as well, so we check for 3 first)
if ( $info->has_layer(3) ) {
@@ -1249,7 +1233,7 @@ sub device_type {
$objtype = 'SNMP::Info::Layer3::C6500'
if ( $desc =~ /cisco/i and $desc =~ /3750/ );
$objtype = 'SNMP::Info::Layer3::C6500'
if $desc =~ /(s72033_rp|s3223_rp|s222_rp)/;
if $desc =~ /(s72033_rp|s3223_rp|s32p3_rp|s222_rp)/;
# HP, Foundry OEM
$objtype = 'SNMP::Info::Layer3::HP9300'
@@ -1271,7 +1255,7 @@ sub device_type {
# Nortel Contivity
$objtype = 'SNMP::Info::Layer3::Contivity' if $desc =~ /\bCES\b/;
# Allied Telesyn Layer2 managed switches. They report they have L3 support
# Allied Telesyn Layer2 managed switches. They report they have L3 support
$objtype = 'SNMP::Info::Layer2::Allied'
if ( $desc =~ /Allied.*AT-80\d{2}\S*/i );
@@ -1298,7 +1282,7 @@ sub device_type {
# Catalyst 2900 and 3500XL (IOS) series override
$objtype = 'SNMP::Info::Layer2::C2900'
if ( $desc =~ /(C2900XL|C2950|C3500XL|C2940|CGESM)/i );
if ( $desc =~ /(C2900XL|C2950|C3500XL|C2940|CGESM|CIGESM)/i );
# Catalyst WS-C series override 2926,4k,5k,6k in Hybrid
$objtype = 'SNMP::Info::Layer2::Catalyst' if ( $desc =~ /WS-C\d{4}/ );
@@ -1346,7 +1330,7 @@ sub device_type {
$objtype = 'SNMP::Info::Layer2::NAP222x'
if ( $desc =~ /Access\s+Point\s+222/ );
# Orinco
# Orinoco
$objtype = 'SNMP::Info::Layer2::Orinoco'
if ( $desc =~ /(AP-\d{3}|WavePOINT)/ );
@@ -1359,6 +1343,10 @@ sub device_type {
$objtype = 'SNMP::Info::Layer3::Aironet'
if ( $desc =~ /Cisco/ and $desc =~ /\D(BR500)\D/ );
# Airespace (WLC) Module
$objtype = 'SNMP::Info::Layer2::Airespace'
if ( $desc =~ /Cisco Controller/ );
#Nortel 2270
$objtype = 'SNMP::Info::Layer2::N2270'
if (
@@ -1386,8 +1374,8 @@ sub device_type {
$objtype = 'SNMP::Info::Layer1::Bayhub'
if ( $desc =~ /\bBay\s*Stack.*Hub/i );
# Synoptics Hub
# This will override Bay Hub only for specific devices supported by this class
# Synoptics Hub
# This will override Bay Hub only for specific devices supported by this class
$objtype = 'SNMP::Info::Layer1::S3000'
if ( $desc =~ /\bNMM\s+(281|3000|3030)/i );
@@ -1416,6 +1404,11 @@ sub device_type {
# Cisco ASA
$objtype = 'SNMP::Info::Layer3::Cisco'
if ( $desc =~ /Cisco Adaptive Security Appliance/i );
# Cisco FWSM
$objtype = 'SNMP::Info::Layer3::Cisco'
if ( $desc =~ /Cisco Firewall Services Module/i );
}
return $objtype;
@@ -2678,10 +2671,9 @@ sub munge_counter64 {
=item munge_i_up
There is a collision between data in C<IF-MIB> and C<RFC-1213>.
For devices that fully implement C<IF-MIB> it might return 7 for
a port that is down. This munges the data against the C<IF-MIB>
by hand.
Net-SNMP tends to load C<RFC1213-MIB> first, and so ignores the
updated enumeration for C<ifOperStatus> in C<IF-MIB>. This munge
handles the "newer" definitions for the enumeration in IF-MIB.
TODO: Get the precedence of MIBs and overriding of MIB data in Net-SNMP
figured out. Heirarchy/precendence of MIBS in SNMP::Info.
@@ -2692,9 +2684,11 @@ sub munge_i_up {
my $i_up = shift;
return unless defined $i_up;
$i_up = 'down' if $i_up eq '7';
return $i_up;
my %ifOperStatusMap = ( '4' => 'unknown',
'5' => 'dormant',
'6' => 'notPresent',
'7' => 'lowerLayerDown' );
return $ifOperStatusMap{$i_up} || $i_up;
}
=item munge_port_list
@@ -3661,7 +3655,8 @@ sub AUTOLOAD {
=head1 COPYRIGHT AND LICENSE
Changes from SNMP::Info Version 0.7 and on are:
Copyright (c) 2003-2008 Max Baker - All rights reserved.
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
All rights reserved.
Original Code is:
Copyright (c) 2002-2003, Regents of the University of California

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
@@ -55,9 +55,11 @@ $VERSION = '2.00';
'b_type' => 'dot1dBaseType',
# Spanning Tree Protocol
'stp_ver' => 'dot1dStpProtocolSpecification',
'stp_time' => 'dot1dStpTimeSinceTopologyChange',
'stp_root' => 'dot1dStpDesignatedRoot',
'stp_ver' => 'dot1dStpProtocolSpecification',
'stp_time' => 'dot1dStpTimeSinceTopologyChange',
'stp_root' => 'dot1dStpDesignatedRoot',
'stp_root_port' => 'dot1dStpRootPort',
'stp_priority' => 'dot1dStpPriority',
# Q-BRIDGE-MIB
'qb_vlans_max' => 'dot1qMaxSupportedVlans',
@@ -103,6 +105,7 @@ $VERSION = '2.00';
# Q-BRIDGE-MIB : dot1qVlanStaticTable
'v_name' => 'dot1qVlanStaticName',
'qb_v_name' => 'dot1qVlanStaticName',
'qb_v_egress' => 'dot1qVlanStaticEgressPorts',
'qb_v_fbdn_egress' => 'dot1qVlanForbiddenEgressPorts',
'qb_v_untagged' => 'dot1qVlanStaticUntaggedPorts',

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
$VERSION = '2.00';
$VERSION = '2.01';
# Five data structures required by SNMP::Info
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',

View File

@@ -38,7 +38,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );

View File

@@ -38,7 +38,7 @@ use Exporter;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );

View File

@@ -1,7 +1,7 @@
# SNMP::Info::CiscoStats
# $Id$
#
# Changes since Version 0.7 Copyright (c) 2008 Max Baker
# Changes since Version 0.7 Copyright (c) 2008-2009 Max Baker and SNMP::Info Developers
# All rights reserved.
#
# Copyright (c) 2003 Regents of the University of California
@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'SNMPv2-MIB' => 'sysDescr',
@@ -50,6 +50,7 @@ $VERSION = '2.00';
'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed',
'OLD-CISCO-SYSTEM-MIB' => 'writeMem',
'CISCO-PRODUCTS-MIB' => 'sysName',
'ENTITY-MIB' => 'entPhysicalSoftwareRev',
# some older catalysts live here
'CISCO-STACK-MIB' => 'wsc1900sysID',
@@ -59,6 +60,7 @@ $VERSION = '2.00';
%GLOBALS = (
'description' => 'sysDescr',
'ent_physical_software_rev' => 'entPhysicalSoftwareRev.1',
# We will use the numeric OID's so that we don't require people
# to install v1 MIBs, which can conflict.
@@ -88,6 +90,10 @@ $VERSION = '2.00';
%MUNGE = ();
sub vendor {
return 'cisco';
}
sub os {
my $l2 = shift;
my $descr = $l2->description() || '';
@@ -96,6 +102,35 @@ sub os {
# in their description field.
return 'ios' if ( $descr =~ /IOS/ );
return 'catalyst' if ( $descr =~ /catalyst/i );
return 'css' if ( $descr =~ /Content Switch SW/ );
return 'css-sca' if ( $descr =~ /Cisco Systems Inc CSS-SCA-/ );
return 'pix' if ( $descr =~ /Cisco PIX Security Appliance/ );
return 'asa' if ( $descr =~ /Cisco Adaptive Security Appliance/ );
if ( $descr =~ /Application Control Engine Service Module/ ) {
# Only the admin context implements the entity MIB
return 'ace-admin' if defined $l2->ent_physical_software_rev();
return 'ace-context';
}
# Pre-version 3 FWSMs
return 'fwsm' if ( $descr =~ /Cisco Secure FWSM Firewall/ );
# Version 3+ FWSMs (currently untested against version 4)
if ( $descr =~ /Firewall Services Module/ ) {
my $model = $l2->model();
if ( defined $model && $model eq "WsSvcFwm1sc" ) {
# Only the admin context implements the entity MIB
return 'fwsm-admin' if defined $l2->ent_physical_software_rev();
return 'fwsm-context';
}
# Non context mode FWSM
return 'fwsm';
}
return;
}
@@ -113,12 +148,60 @@ sub os_ver {
return $1;
}
if ( defined $os
and $os eq 'css'
and defined $descr
and $descr =~ m/Content Switch SW Version ([0-9\.\(\)]+) with SNMPv1\/v2c Agent/ )
{
return $1;
}
if ( defined $os
and $os eq 'css-sca'
and defined $descr
and $descr =~ m/Cisco Systems Inc CSS-SCA-2FE-K9, ([0-9\.\(\)]+) Release / )
{
return $1;
}
if ( defined $os
and $os eq 'pix'
and defined $descr
and $descr =~ m/Cisco PIX Security Appliance Version ([0-9\.\(\)]+)/ )
{
return $1;
}
if ( defined $os
and $os eq 'asa'
and defined $descr
and $descr =~ m/Cisco Adaptive Security Appliance Version ([0-9\.\(\)]+)/ )
{
return $1;
}
if ( defined $os
and $os =~ /^ace/ )
{
return $l2->ent_physical_software_rev();
}
if ( defined $os
and $os =~ /^fwsm/
and defined $descr
and $descr =~ m/Version (\d+\.\d+(\(\d+\)){0,1})/ )
{
return $1;
}
# Newer Catalysts and IOS devices
if ( defined $descr
and $descr =~ m/Version (\d+\.\d+\([^)]+\)[^,\s]*)(,|\s)+/ )
{
return $1;
}
return;
}
@@ -214,7 +297,7 @@ Devices
=head1 AUTHOR
Max Baker
Eric Miller, Max Baker, Sam Stickland
=head1 SYNOPSIS
@@ -263,6 +346,8 @@ None.
=item F<CISCO-FLASH-MIB>
=item F<ENTITY-MIB>
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
@@ -291,6 +376,53 @@ Returns mem_free() + mem_used()
Tries to parse if device is running IOS or CatOS from description()
=item $ciscostats->vendor()
'cisco'
Available values :
=over
=item pix
Cisco PIX
=item asa
Cisco ASA
=item fwsm
Single-mode FWSM
=item fwsm-admin
Admin context of multi-context FWSM
=item fwsm-context
Standard context of multi-context FWSM
=item ace-admin
Admin context of ACE module
=item ace-context
Standard context of ACE module (NB: No OS version detection
is available, but will be the same as it's 'ace admin')
=item css
Cisco Content Switch
=item css-sca
Cisco Content Switch Secure Content Acceleration
=back
=item $ciscostats->os_ver()
Tries to parse device operating system version from description()

353
Info/CiscoStpExtensions.pm Normal file
View File

@@ -0,0 +1,353 @@
# SNMP::Info::CiscoStpExtensions
#
# Copyright (c)2009 Carlos Vicente
# 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 author 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::CiscoStpExtensions;
use strict;
use Exporter;
use SNMP::Info;
use SNMP::Info::Bridge;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
$VERSION = '2.01';
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
%MIBS = (
%SNMP::Info::Bridge::MIBS,
'CISCO-STP-EXTENSIONS-MIB' => 'stpxSpanningTreeType',
);
%GLOBALS = (
%SNMP::Info::Bridge::GLOBALS,
'stpx_mst_config_digest' => 'stpxSMSTConfigDigest',
'stpx_mst_region_name' => 'stpxMSTRegionName',
'stpx_mst_region_rev' => 'stpxSMSTRegionRevision',
'stpx_stp_type' => 'stpxSpanningTreeType',
'stpx_bpduguard_enable' => 'stpxFastStartBpduGuardEnable',
'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
);
%FUNCS = (
%SNMP::Info::Bridge::FUNCS,
'stpx_rootguard_enabled' => 'stpxRootGuardConfigEnabled',
'stpx_loopguard_enabled' => 'stpxLoopGuardConfigEnabled',
'stpx_port_bpduguard_mode' => 'stpxFastStartPortBpduGuardMode',
'stpx_port_bpdufilter_mode' => 'stpxFastStartPortBpduFilterMode',
'stpx_smst_root' => 'stpxSMSTInstanceCISTRegionalRoot',
'stpx_smst_vlans_mapped_1k2k' => 'stpxSMSTInstanceVlansMapped1k2k',
'stpx_smst_vlans_mapped_3k4k' => 'stpxSMSTInstanceVlansMapped3k4k',
);
%MUNGE = (
%SNMP::Info::Bridge::MUNGE,
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
);
# Report version of STP via standard method
sub stp_ver {
my $self = shift;
my $stp_ver = $self->SUPER::stp_ver();
if ( $stp_ver eq 'unknown' ){
if ( defined $self->stpx_stp_type() ){
$stp_ver = $self->stpx_stp_type();
}
}
return $stp_ver;
}
sub mst_config_digest {
my $self = shift;
return $self->stpx_mst_config_digest;
}
sub mst_region_name {
my $self = shift;
return $self->stpx_mst_region_name;
}
sub mst_region_rev {
my $self = shift;
return $self->stpx_mst_region_rev;
}
sub mst_vlan2instance {
my $self = shift;
# Get MST vlan-to-instance mapping
my $m1k2k = $self->stpx_smst_vlans_mapped_1k2k;
my $m3k4k = $self->stpx_smst_vlans_mapped_3k4k;
# Get list of VLANs
my $vlan_membership = $self->i_vlan_membership;
my @vlans;
foreach my $iid ( keys %$vlan_membership ){
if ( my $vm = $vlan_membership->{$iid} ){
foreach my $vid ( @$vm ){
push @vlans, $vid;
}
}
}
my %res;
foreach my $vlan ( @vlans ){
if ( $vlan < 2048 ){
foreach my $inst ( keys %$m1k2k ){
my $list = $m1k2k->{$inst};
my $vlanlist = [split(//, unpack("B*", $list))];
if ( @$vlanlist[$vlan] ){
$res{$vlan} = $inst;
last;
}
}
}else{
foreach my $inst ( keys %$m3k4k ){
my $list = $m3k4k->{$inst};
my $vlanlist = [split(//, unpack("B*", $list))];
if ( @$vlanlist[$vlan-2048] ){
$res{$vlan} = $inst;
last;
}
}
}
}
return \%res;
}
sub i_rootguard_enabled {
my $self = shift;
my $partial = shift;
my $rg_enabled = $self->stpx_rootguard_enabled();
my $bp_index = $self->bp_index($partial);
my %res;
foreach my $index ( keys %$rg_enabled ){
my $enabled = $rg_enabled->{$index};
my $iid = $bp_index->{$index};
next unless defined $iid;
next unless defined $enabled;
$res{$iid} = $enabled;
}
return \%res;
}
sub i_loopguard_enabled {
my $self = shift;
my $partial = shift;
my $lg_enabled = $self->stpx_loopguard_enabled();
my $bp_index = $self->bp_index($partial);
my %res;
foreach my $index ( keys %$lg_enabled ){
my $enabled = $lg_enabled->{$index};
my $iid = $bp_index->{$index};
next unless defined $iid;
next unless defined $enabled;
$res{$iid} = $enabled;
}
return \%res;
}
sub i_bpduguard_enabled {
my $self = shift;
my $partial = shift;
my $bpdugm_default = $self->stpx_bpduguard_enable();
my $bp_index = $self->bp_index($partial);
my $bpdugm = $self->stpx_port_bpduguard_mode();
my %res;
foreach my $index ( keys %$bpdugm ){
my $mode = $bpdugm->{$index};
my $iid = $bp_index->{$index};
next unless defined $iid;
next unless defined $mode;
if ( $mode eq 'default' ){
$res{$iid} = $bpdugm_default;
}else{
$res{$iid} = $mode;
}
}
return \%res;
}
sub i_bpdufilter_enabled {
my $self = shift;
my $partial = shift;
my $bpdufm_default = $self->stpx_bpdufilter_enable();
my $bp_index = $self->bp_index($partial);
my $bpdufm = $self->stpx_port_bpdufilter_mode();
my %res;
foreach my $index ( keys %$bpdufm ){
my $mode = $bpdufm->{$index};
my $iid = $bp_index->{$index};
next unless defined $iid;
next unless defined $mode;
if ( $mode eq 'default' ){
$res{$iid} = $bpdufm_default;
}else{
$res{$iid} = $mode;
}
}
return \%res;
}
sub oct2str {
my ($v) = @_;
return sprintf('%s', unpack('H*', $v));
}
1;
__END__
=head1 NAME
SNMP::Info::CiscoStpExtensions - SNMP Interface to C<CISCO-STP-EXTENSIONS-MIB>
=head1 AUTHOR
Carlos Vicente
=head1 SYNOPSIS
=head1 DESCRIPTION
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 $stpx = new SNMP::Info::CiscoStpExtensions(...);
=head2 Inherited Classes
=over
=item SNMP::Info
=item SNMP::Info::Bridge
=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
=item $stpx->stp_ver()
Returns the particular STP version running on this device.
Meant to override SNMP::Info::Brigde::stp_ver()
Values: C<pvstPlus>, C<mistp>, C<mistpPvstPlus>, C<mst>, C<rapidPvstPlus>
(C<stpxSpanningTreeType>)
=back
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=over
=item $stpx->mst_config_digest()
Returns the Multiple Spanning Tree (MST) configuration digest
(C<stpxSMSTConfigDigest>)
=item $stpx->mst_region_name()
Returns the Multiple Spanning Tree (MST) region name
(C<stpxMSTRegionName>)
=item $stpx->mst_region_rev()
Returns the Multiple Spanning Tree (MST) region name
(C<stpxSMSTRegionRevision>)
=item $stpx->mst_vlan2instance()
Returns the mapping of vlan to MST instance in the form of a hash reference
with key = VLAN id, value = STP instance
=item $stpx->i_rootguard_enabled()
Returns 1 or 0 depending on whether C<RootGuard> is enabled on a given port.
Format is a hash reference with key = C<ifIndex>, value = [1|0]
(C<stpxRootGuardConfigEnabled>)
=item $stpx->i_loopguard_enabled()
Returns 1 or 0 depending on whether C<LoopGuard> is enabled on a given port.
Format is a hash reference with key = C<ifIndex>, value = [1|0]
(C<stpxLoopGuardConfigEnabled>)
=item $stpx->i_bpduguard_enabled()
Returns 1 or 0 depending on whether C<BpduGuard> is enabled on a given port.
Format is a hash reference with key = C<ifIndex>, value = [1|0]
(C<stpxFastStartPortBpduGuardMode>)
=item $stpx->i_bpdufilter_enabled()
Returns 1 or 0 depending on whether C<BpduFilter> is enabled on a given port.
Format is a hash reference with key = C<ifIndex>, value = [1|0]
(C<stpxFastStartBpduFilterEnable>)
=back
=head1 MUNGES
=over
=item oct2str()
Unpacks H* into a string
=back
=cut

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'CISCO-VTP-MIB' => 'vtpVlanName',

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );

View File

@@ -41,9 +41,9 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'ETHERLIKE-MIB' => 'etherMIB' );
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
%GLOBALS = ();

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );

View File

@@ -38,7 +38,7 @@ use Exporter;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'LLDP-MIB' => 'lldpLocSysCapEnabled',
@@ -191,7 +191,13 @@ sub lldp_id {
# May need to format other types in the future
if ( $type =~ /mac/ ) {
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
}
}elsif ($type eq 'networkAddress'){
if ( length(unpack('H*', $id)) == 10 ){
# IP address (first octet is sign, I guess)
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
$id = join '.', map { hex($_) } @octets;
}
}
$lldp_id{$key} = $id;
}
return \%lldp_id;

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer1::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -45,7 +45,7 @@ use SNMP::Info::PowerEthernet;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2::Aironet
# $Id$
#
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
#
# Copyright (c) 2003 Regents of the University of California
# All rights reserved.
@@ -38,17 +38,18 @@ use SNMP::Info::Layer2;
use SNMP::Info::Entity;
use SNMP::Info::EtherLike;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoConfig;
use SNMP::Info::CDP;
use SNMP::Info::IEEE802dot11;
@SNMP::Info::Layer2::Aironet::ISA
= qw/SNMP::Info::Layer2 SNMP::Info::Entity SNMP::Info::EtherLike
SNMP::Info::CiscoStats SNMP::Info::CDP Exporter/;
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
@SNMP::Info::Layer2::Aironet::EXPORT_OK = qw//;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%GLOBALS = (
%SNMP::Info::IEEE802dot11::GLOBALS,
@@ -56,6 +57,7 @@ $VERSION = '2.00';
%SNMP::Info::Entity::GLOBALS,
%SNMP::Info::EtherLike::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
'serial' => 'entPhysicalSerialNum.1',
'descr' => 'sysDescr'
@@ -67,11 +69,11 @@ $VERSION = '2.00';
%SNMP::Info::Entity::FUNCS,
%SNMP::Info::EtherLike::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CDP::FUNCS,
'i_ssidlist' => 'cd11IfAuxSsid',
'i_ssidbcast' => 'cd11IfAuxSsidBroadcastSsid',
'i_80211channel' => 'cd11IfPhyDsssCurrentChannel',
'c_dot11subif' => 'cDot11ClientSubIfIndex',
'cd11_rateset' => 'cDot11ClientDataRateSet',
'cd11_txrate' => 'cDot11ClientCurrentTxRateSet',
'cd11_uptime' => 'cDot11ClientUpTime',
'cd11_sigstrength' => 'cDot11ClientSignalStrength',
@@ -89,7 +91,7 @@ $VERSION = '2.00';
%SNMP::Info::Entity::MIBS,
%SNMP::Info::EtherLike::MIBS,
%SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CiscoVTP::MIBS,
%SNMP::Info::CiscoConfig::MIBS,
%SNMP::Info::CDP::MIBS,
'CISCO-DOT11-IF-MIB' => 'cd11IfAuxSsid',
'CISCO-DOT11-ASSOCIATION-MIB' => 'cDot11ClientSubIfIndex',
@@ -103,8 +105,10 @@ $VERSION = '2.00';
%SNMP::Info::Entity::MUNGE,
%SNMP::Info::EtherLike::MUNGE,
%SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CDP::MUNGE,
'cd11_txrate' => \&munge_cd11_txrate,
'cd11_rateset' => \&munge_cd11_txrate,
'mbss_mac_addr' => \&SNMP::Info::munge_mac,
);
@@ -314,6 +318,19 @@ sub cd11_mac {
return \%ret;
}
# Map VLAN N on interface I to its actual ifIndex.
sub _vlan_map_n_stack {
my $aironet = shift;
my $vlan_idx = $aironet->cviRoutedVlanIfIndex();
my $vlan_map = {};
foreach my $idx ( keys %$vlan_idx ) {
my ( $vlan, $num ) = split( /\./, $idx );
$vlan_map->{$vlan}->{$num} = $vlan_idx->{$idx};
}
return $vlan_map;
}
# When using MBSS, the ifTable reports the
# base MAC address, but the actual association is
# with a different MAC address for MBSS.
@@ -363,6 +380,63 @@ sub i_mac {
return $mbss_mac;
}
sub i_ssidlist {
my $aironet = shift;
# no partial is possible due to the levels
# of indirection.
my $ssid_row = $aironet->cdot11SecInterfSsidRowStatus();
my $ssid_vlan = $aironet->cdot11SecAuxSsidVlan();
if ( !defined($ssid_row) || !defined($ssid_vlan) ) {
return $aironet->cd11IfAuxSsid();
}
my $ssidlist = {};
my $if_ssidcount = {};
my $vlan_map = $aironet->_vlan_map_n_stack();
foreach my $idx ( keys %$ssid_row ) {
next unless $ssid_row->{$idx} eq 'active';
# ssid_row index is radio.ssid
my ( $interface, $ssid ) = split( /\./, $idx, 2 );
my ( $len, @ssidt ) = split( /\./, $ssid );
my $mappedintf = $vlan_map->{ $ssid_vlan->{$ssid} }->{$interface};
next unless $mappedintf;
if ( !$if_ssidcount->{$mappedintf} ) {
$if_ssidcount->{$mappedintf} = 1;
}
my $ssidlist_idx
= sprintf( "%s.%d", $mappedintf, $if_ssidcount->{$mappedintf} );
$ssidlist->{$ssidlist_idx} = pack( "C*", @ssidt );
$if_ssidcount->{$mappedintf}++;
}
return $ssidlist;
}
sub i_ssidbcast {
my $aironet = shift;
my $partial = shift;
my $mbss_bcast = $aironet->cdot11SecAuxSsidMbssidBroadcast();
if ( !defined($mbss_bcast) ) {
return $aironet->cd11IfAuxSsidBroadcastSsid($partial);
}
my $map = {};
foreach my $key ( keys %$mbss_bcast ) {
my (@idx) = split( /\./, $key );
my $len = shift(@idx);
$map->{ pack( "C*", @idx ) } = $mbss_bcast->{$key};
}
# This needs to return the same indexes as i_ssidlist.
# mbss_bcast maps ssid -> broadcasting
# so we just replace the i_ssidlist values with the mbss_bcast ones.
my $i_ssidlist = $aironet->i_ssidlist();
my $i_ssidbcast = {};
foreach my $key ( keys %$i_ssidlist ) {
$i_ssidbcast->{$key} = $map->{ $i_ssidlist->{$key} };
}
return $i_ssidbcast;
}
1;
__END__
@@ -424,7 +498,9 @@ my $aironet = new SNMP::Info::Layer2::Aironet(...);
=item SNMP::Info::EtherLike
=item SNMP::Info::CiscoVTP
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoConfig
=back
@@ -536,6 +612,17 @@ Returns VLAN IDs
Returns VLAN names
=item $aironet->i_ssidlist()
Returns a list of SSIDs associated with interfaces. This function
is C<MBSSID> aware, so when using C<MBSSID> can map SSIDs to the sub-interface
to which they belong.
=item $aironet->i_ssidbcast()
With the same keys as i_ssidlist, returns whether the given SSID is
being broadcast.
=back
=head2 Table Methods imported from SNMP::Info::Layer2

View File

@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
# Set for No CDP
%GLOBALS = (

View File

@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,

View File

@@ -46,7 +46,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,

View File

@@ -47,7 +47,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,

View File

@@ -49,7 +49,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -50,7 +50,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,

View File

@@ -44,7 +44,7 @@ use SNMP::Info::MAU;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::FDP::MIBS,

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
# $Id$
#
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
#
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
@@ -46,7 +46,7 @@ use SNMP::Info::CDP;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -112,12 +112,12 @@ $VERSION = '2.00';
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::MAU::MUNGE,
%SNMP::Info::LLDP::MUNGE,
%SNMP::Info::CDP::MUNGE
%SNMP::Info::CDP::MUNGE,
'c_id' => \&munge_hp_c_id,
);
%MODEL_MAP = (
@@ -553,7 +553,6 @@ sub c_port {
foreach my $iid ( keys %$lldp ) {
my $port = $lldp->{$iid};
next unless defined $port;
$c_port{$iid} = $port;
}
return \%c_port;
@@ -570,19 +569,32 @@ sub c_id {
foreach my $iid ( keys %$cdp ) {
my $id = $cdp->{$iid};
next unless defined $id;
$c_id{$iid} = $id;
}
foreach my $iid ( keys %$lldp ) {
my $id = $lldp->{$iid};
next unless defined $id;
$c_id{$iid} = $id;
my $id = $lldp->{$iid};
next unless defined $id;
$c_id{$iid} = $id;
}
return \%c_id;
}
sub munge_hp_c_id {
my ($v) = @_;
if ( length(unpack('H*', $v)) == 12 ){
return join(':',map { sprintf "%02x", $_ } unpack('C*', $v));
}if ( length(unpack('H*', $v)) == 10 ){
# IP address (first octet is sign, I guess)
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $v))[1..4];
return join '.', map { hex($_) } @octets;
}else{
return $v;
}
}
sub c_platform {
my $hp = shift;
my $partial = shift;
@@ -992,4 +1004,14 @@ See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
=head1 MUNGES
=over
=item munge_hp_c_id()
Munge for c_id which handles CDP and LLDP.
=back
=cut

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( %SNMP::Info::Layer2::MIBS, );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );

View File

@@ -47,7 +47,7 @@ use SNMP::Info::PowerEthernet;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS,
@@ -286,7 +286,12 @@ sub vendor {
my $l3 = shift;
my $descr = $l3->description();
my $id = $l3->id();
# .1.3.6.1.4.1.9.1 is the CISCO-PRODUCTS-MIB
# .1.3.6.1.4.1.9.9.368.4 is an old tree that Cisco CSSs were numbered from
return 'cisco' if $id =~ /^\Q.1.3.6.1.4.1.9.1.\E\d+$/;
return 'cisco' if $id =~ /^\Q.1.3.6.1.4.1.9.9.368.4.\E\d+/;
return 'cisco' if ( $descr =~ /(cisco|\bios\b)/i );
return 'foundry' if ( $descr =~ /foundry/i );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

400
Info/Layer3/Altiga.pm Normal file
View File

@@ -0,0 +1,400 @@
# SNMP::Info::Layer3::Altiga
# $Id$
#
# Copyright (c) 2008 Jeroen van Ingen Schenau
# 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::Altiga;
use strict;
use Exporter;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::Altiga::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::Altiga::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
$int_include_vpn $fake_idx $type_class/;
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
'ALTIGA-VERSION-STATS-MIB' => 'alVersionString',
'ALTIGA-SESSION-STATS-MIB' => 'alActiveSessionCount',
'ALTIGA-HARDWARE-STATS-MIB' => 'alHardwarePs1Type',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
# From ALTIGA-VERSION-STATS-MIB
'os_ver' => 'alVersionString',
# From ALTIGA-SESSION-STATS-MIB
'vpn_act_sess' => 'alActiveSessionCount',
'vpn_total_sess' => 'alTotalSessionCount',
'vpn_max_sess' => 'alMaxSessionCount',
'vpn_l2l_sess' => 'alActiveLanToLanSessionCount',
'vpn_mgmt_sess' => 'alActiveManagementSessionCount',
'vpn_ras_sess' => 'alActiveRemoteAccessSessionCount',
# From ALTIGA-HARDWARE-STATS-MIB
'ps1_type' => 'alHardwarePs1Type',
'ps1_3v_alarm' => 'alHardwarePs1Voltage3vAlarm',
'ps1_5v_alarm' => 'alHardwarePs1Voltage5vAlarm',
'ps2_type' => 'alHardwarePs2Type',
'ps2_3v_alarm' => 'alHardwarePs2Voltage3vAlarm',
'ps2_5v_alarm' => 'alHardwarePs2Voltage5vAlarm',
'fan1_alarm' => 'alHardwareFan1RpmAlarm',
'fan2_alarm' => 'alHardwareFan2RpmAlarm',
'fan3_alarm' => 'alHardwareFan3RpmAlarm',
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
'i_type2' => 'ifType',
'i_lastchange2' => 'ifLastChange',
'vpn_sess_status' => 'alActiveSessionRowStatus',
'vpn_sess_user' => 'alActiveSessionUserName',
'vpn_sess_peer_ip' => 'alActiveSessionIpAddress',
'vpn_sess_protocol' => 'alActiveSessionProtocol',
'vpn_sess_encr' => 'alActiveSessionEncrType',
'vpn_sess_start' => 'alActiveSessionStartTime',
'vpn_sess_conntime' => 'alActiveSessionConnectTime',
'vpn_sess_out_oct' => 'alActiveSessionOctetsSent',
'vpn_sess_in_oct' => 'alActiveSessionOctetsRcvd',
'vpn_sess_group' => 'alActiveSessionGroupName',
'vpn_sess_gid' => 'alActiveSessionGroupId',
'vpn_sess_rem_ip' => 'alActiveSessionPublicIpAddress',
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE,
'ps1_3v_alarm' => \&munge_alarm,
'ps1_5v_alarm' => \&munge_alarm,
'ps2_3v_alarm' => \&munge_alarm,
'ps2_5v_alarm' => \&munge_alarm,
'fan1_alarm' => \&munge_alarm,
'fan2_alarm' => \&munge_alarm,
'fan3_alarm' => \&munge_alarm,
);
# Variable to modify behaviour of "interfaces" subroutine.
# * When set to 0, "interfaces" returns only fixed interfaces from the IF-MIB,
# * When set to 1, "interfaces" returns fixed interfaces from IF-MIB and LAN-to-LAN tunnels from ALTIGA-SESSION-MIB
# TODO: This should be an instance method, not a class global
$int_include_vpn = 1;
# Variable to prepended to each tunnel index when tunnel is added to %interfaces, to avoid overwriting "real" ifIndex entries
$fake_idx = 3076;
# Variable to classify session types into categories: 0 - unclassified, 1 - LAN-to-LAN or fixed, 2 - RAS or dynamic, 3 - administrative
$type_class = {
'pptp' => 2,
'l2tp' => 2,
'ipsec' => 2,
'http' => 3,
'ftp' => 3,
'telnet' => 3,
'snmp' => 3,
'tftp' => 3,
'console' => 3,
'debugTelnet' => 3,
'debugConsole' => 3,
'other' => 3,
'ike' => 0,
'l2tpOverIpSec' => 2,
'ipsecLanToLan' => 1,
'ipsecOverUdp' => 2,
'ssh' => 3,
'vcaLanToLan' => 1,
'ipsecOverTcp' => 2,
'pppoe' => 2,
'ipsecOverNatT' => 2,
'ipsecLan2LanOverNatT' => 1,
'l2tpOverIpsecOverNatT' => 2,
'userHttps' => 2,
'pop3s' => 2,
'imap4s' => 2,
'smtps' => 2,
'httpsTunnel' => 2,
};
sub vendor {
return 'altiga';
}
sub os {
return 'altiga';
}
sub hasCDP {
return 0;
}
# $altiga->interfaces() - Map the Interfaces to their physical names
# Add interface number to interface name to prevent duplicate ifDescr
# Included statically configured VPN tunnels if ($int_include_vpn)
sub interfaces {
my $altiga = shift;
my $partial = shift;
my $interfaces = $altiga->i_index($partial);
my $descriptions = $altiga->i_description($partial);
my %int_rev = ();
my %interfaces = ();
foreach my $iid (sort {$a cmp $b} keys %$interfaces) {
my $desc = $descriptions->{$iid};
next unless defined $desc;
if (!exists $int_rev{$desc}) {
$interfaces{$iid} = $desc;
$int_rev{$desc} = $iid;
} else {
my $done = 0;
my $unique_desc;
my $cnt = 1;
until ($done) {
$cnt++;
$unique_desc = sprintf("%s (%d)", $desc, $cnt);
if (!exists $int_rev{$unique_desc}) {
$done++;
}
}
$int_rev{$unique_desc} = $iid;
$interfaces{$iid} = $unique_desc;
$interfaces{ $int_rev{$desc} } = sprintf("%s (%d)", $desc, 1);
}
}
if ($int_include_vpn) {
my $tun_type = $altiga->vpn_sess_protocol();
my $peer = $altiga->vpn_sess_peer_ip();
my $remote = $altiga->vpn_sess_rem_ip();
my $group = $altiga->vpn_sess_gid();
foreach my $tunnel (keys %$tun_type) {
if ($type_class->{$tun_type->{$tunnel}} eq 1) {
$interfaces{"$fake_idx.$tunnel"} = sprintf("%s VPN to %s", uc($tun_type->{$tunnel}), $remote->{$tunnel});
}
}
}
return \%interfaces;
}
sub i_type {
my $altiga = shift;
my $partial = shift;
my $types = $altiga->i_type2();
if ($int_include_vpn) {
my $tun_type = $altiga->vpn_sess_protocol();
foreach my $tunnel (keys %$tun_type) {
$types->{"$fake_idx.$tunnel"} = $tun_type->{$tunnel};
}
}
return $types;
}
sub i_lastchange {
my $altiga = shift;
my $partial = shift;
# TODO: This is what munges are for.
my $lastchange = $altiga->i_lastchange2();
if ($int_include_vpn) {
my $tun_start = $altiga->vpn_sess_start();
foreach my $tunnel (keys %$tun_start) {
$lastchange->{"$fake_idx.$tunnel"} = $tun_start->{$tunnel};
}
}
return $lastchange;
}
sub ps1_status {
my $altiga = shift;
my $alarm_3v = $altiga->ps1_3v_alarm() || "";
my $alarm_5v = $altiga->ps1_5v_alarm() || "";
return sprintf("3V: %s, 5V: %s", $alarm_3v, $alarm_5v);
}
sub ps2_status {
my $altiga = shift;
my $alarm_3v = $altiga->ps2_3v_alarm() || "";
my $alarm_5v = $altiga->ps2_5v_alarm() || "";
return sprintf("3V: %s, 5V: %s", $alarm_3v, $alarm_5v);
}
sub fan {
my $altiga = shift;
my $alarm_fan1 = $altiga->fan1_alarm() || "";
my $alarm_fan2 = $altiga->fan2_alarm() || "";
my $alarm_fan3 = $altiga->fan3_alarm() || "";
return sprintf("Fan 1: %s, Fan 2: %s, Fan 3: %s", $alarm_fan1, $alarm_fan2, $alarm_fan3);
}
sub munge_alarm {
my $alarm = shift;
if ($alarm eq 'false') {
return 'OK';
} elsif ($alarm eq 'true') {
return 'FAIL';
} else {
return "(n/a)";
}
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::Altiga - SNMP Interface to Cisco (formerly Altiga) VPN concentrators
=head1 AUTHOR
Jeroen van Ingen Schenau
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $altiga = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'my_vpn_host',
Community => 'public',
Version => 1
)
or die "Can't connect to DestHost.\n";
my $class = $altiga->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Cisco (formerly Altiga) VPN concentrators
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
=over
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
=back
=head1 Class Variables (options)
=over
=item $SNMP::Info::Layer3::Altiga::int_include_vpn
Variable to modify behavior of "interfaces" subroutine.
* When set to 0, "interfaces" returns only fixed interfaces from the IF-MIB,
* When set to 1, "interfaces" returns fixed interfaces from IF-MIB and
LAN-to-LAN tunnels from ALTIGA-SESSION-MIB (default)
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $altiga->vendor()
Returns 'altiga'
=item $altiga->os()
Returns 'altiga'
=item $altiga->os_ver()
Tries to determine OS version from the C<sysDescr.0> field. Returns version or C<sysDescr.0>
=item $altiga->fan()
Combines results from C<fan1_alarm>, C<fan2_alarm>, and C<fam3_alarm> methods.
=item $altiga->hasCDP()
No.
=item $altiga->ps1_status()
Combines C<ps1_3v_alarm> and C<ps1_5v_alarm> methods.
=item $altiga->ps2_status()
Combines C<ps2_3v_alarm> and C<ps2_5v_alarm> methods.
=back
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=over
=item $altiga->interfaces()
This method overrides the interfaces() method inherited from SNMP::Info.
It provides a mapping between the Interface Table Index (iid) and the physical
port name, adding a port number to the port name to prevent duplicate names.
=item $altiga->i_lastchange()
Filters out the results depending on the value of $SNMP::Info::Layer3::Altiga::int_include_vpn
=item $altiga->i_type()
Filters out the results depending on the value of $SNMP::Info::Layer3::Altiga::int_include_vpn
=back
=head1 MUNGES
=over
=item munge_alarm()
Changes C<true> and C<false> to C<FAIL>, C<OK>, and C<(n/a)>.
=back
=cut

324
Info/Layer3/Arista.pm Normal file
View File

@@ -0,0 +1,324 @@
# SNMP::Info::Layer3::Arista
# $Id$
#
# Copyright (c) 2008 Arista Networks, Inc.
# 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 Arista Networks, Inc. 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::Arista;
use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::MAU;
use SNMP::Info::LLDP;
@SNMP::Info::Layer3::Arista::ISA = qw/SNMP::Info::LLDP SNMP::Info::MAU
SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::MAU::MIBS,
%SNMP::Info::LLDP::MIBS,
'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::MAU::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::MAU::FUNCS,
%SNMP::Info::LLDP::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::MAU::MUNGE,
%SNMP::Info::LLDP::MUNGE,
);
# use MAU-MIB for admin. duplex and admin. speed
*SNMP::Info::Layer3::Arista::i_duplex_admin
= \&SNMP::Info::MAU::mau_i_duplex_admin;
*SNMP::Info::Layer3::Arista::i_speed_admin
= \&SNMP::Info::MAU::mau_i_speed_admin;
sub vendor {
return 'arista';
}
sub os {
return 'EOS';
}
sub os_ver {
my $arista = shift;
my $descr = $arista->description();
my $os_ver = undef;
$os_ver = $1 if ( $descr =~ /\s+EOS\s+version\s+(\S+)\s+/ );
return $os_ver;
}
sub model {
my $arista = shift;
my $id = $arista->id();
my $model = &SNMP::translateObj($id);
return $id unless defined $model;
$model =~ s/^arista//;
return $model;
}
# Use Q-BRIDGE-MIB
sub fw_mac {
my $arista = shift;
my $partial = shift;
return $arista->qb_fw_mac($partial);
}
sub fw_port {
my $arista = shift;
my $partial = shift;
return $arista->qb_fw_port($partial);
}
# Use LLDP
sub hasCDP {
my $arista = shift;
return $arista->hasLLDP();
}
sub c_ip {
my $arista = shift;
my $partial = shift;
return $arista->lldp_ip($partial);
}
sub c_if {
my $arista = shift;
my $partial = shift;
return $arista->lldp_if($partial);
}
sub c_port {
my $arista = shift;
my $partial = shift;
return $arista->lldp_port($partial);
}
sub c_id {
my $arista = shift;
my $partial = shift;
return $arista->lldp_id($partial);
}
sub c_platform {
my $arista = shift;
my $partial = shift;
return $arista->lldp_rem_sysdesc($partial);
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::Arista - SNMP Interface to Arista Networks EOS
=head1 AUTHOR
Bill Fenner
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $arista = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $arista->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Arista Networks EOS-based devices
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=item SNMP::Info::MAU
=item SNMP::Info::LLDP
=back
=head2 Required MIBs
=over
=item F<ARISTA-PRODUCTS-MIB>
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
These are methods that return scalar values from SNMP
=over
=item $arista->vendor()
Returns 'Arista Networks, Inc.'
=item $arista->hasCDP()
Returns whether LLDP is enabled.
=item $arista->model()
Tries to reference $arista->id() to one of the product MIBs listed above
Removes 'arista' from the name for readability.
=item $arista->os()
Returns 'EOS'
=item $arista->os_ver()
Grabs the os version from C<sysDescr>
=back
=head2 Global Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=over
=item $arista->fw_mac()
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
=item $arista->fw_port()
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
=item $arista->c_id()
Returns LLDP information.
=item $arista->c_if()
Returns LLDP information.
=item $arista->c_ip()
Returns LLDP information.
=item $arista->c_platform()
Returns LLDP information.
=item $arista->c_port()
Returns LLDP information.
=item $arista->i_duplex_admin()
Returns info from F<MAU-MIB>
=item $arista->i_speed_admin()
Returns info from F<MAU-MIB>
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
%MODID_MAP %PROCID_MAP/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer3::C3550
# $Id$
#
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
# Copyright (c) 2004 Regents of the University of California
# All rights reserved.
#
@@ -36,62 +36,76 @@ use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CiscoStack;
use SNMP::Info::CDP;
use SNMP::Info::CiscoConfig;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoImage;
use SNMP::Info::CiscoPortSecurity;
use SNMP::Info::CiscoPower;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::C3550::ISA
= qw/SNMP::Info::CiscoVTP SNMP::Info::CiscoStack
SNMP::Info::CDP SNMP::Info::CiscoStats
SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoImage SNMP::Info::CiscoPower
SNMP::Info::Layer3
Exporter/;
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
use SNMP::Info::CiscoStpExtensions;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
# NOTE : Top-most items gets precedence for @ISA
@SNMP::Info::Layer3::C3550::ISA = qw/
SNMP::Info::CiscoVTP
SNMP::Info::CiscoStpExtensions
SNMP::Info::CiscoStack
SNMP::Info::CDP
SNMP::Info::CiscoStats
SNMP::Info::CiscoImage
SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoConfig
SNMP::Info::CiscoPower
SNMP::Info::Layer3
Exporter/;
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
$VERSION = '2.01';
# NOTE: Order creates precedence
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
# Bridge is called from Layer3 and CiscoStpExtensions
# So we want CiscoVTP to come last to get the right one.
# The @ISA order should match these orders.
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,
%SNMP::Info::CiscoPortSecurity::MIBS, %SNMP::Info::CiscoImage::MIBS,
%SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoStack::MIBS, %SNMP::Info::CiscoVTP::MIBS,
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,
%SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS,
%SNMP::Info::CiscoStpExtensions::MIBS, %SNMP::Info::CiscoVTP::MIBS,
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::CiscoPower::GLOBALS,
%SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CiscoPortSecurity::GLOBALS,
%SNMP::Info::CiscoImage::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoStack::GLOBALS,
%SNMP::Info::CiscoStpExtensions::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
'ports2' => 'ifNumber',
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
%SNMP::Info::CiscoPortSecurity::FUNCS, %SNMP::Info::CiscoImage::FUNCS,
%SNMP::Info::CiscoStats::FUNCS, %SNMP::Info::CDP::FUNCS,
%SNMP::Info::CiscoStack::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
%SNMP::Info::CiscoStpExtensions::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoPortSecurity::MUNGE,
%SNMP::Info::CiscoImage::MUNGE,
%SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CDP::MUNGE,
%SNMP::Info::CiscoStack::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE,
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
%SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
);
sub vendor {
@@ -115,14 +129,14 @@ sub model {
sub ports {
my $c3550 = shift;
my $ports2 = $c3550->ports2();
my $id = $c3550->id();
my $model = &SNMP::translateObj($id);
if ( $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
return $1;
}
return $ports2;
my $ports = $c3550->orig_ports();
return $ports;
}
# Verions prior to 12.1(22)EA1a use the older CiscoStack method
@@ -263,6 +277,8 @@ after determining a more specific class using the method above.
=item SNMP::Info::Layer3
=item SNMP::Info::CiscoSTPExtensions
=item SNMP::Info::CiscoPower
=item SNMP::Info::CiscoPortSecurity
@@ -287,6 +303,8 @@ after determining a more specific class using the method above.
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
@@ -335,6 +353,10 @@ Returns 1. Use vlan indexing.
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::CiscoPower
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
@@ -412,6 +434,10 @@ Crosses $c3550->p_port() with $c3550->p_duplex() to utilize port C<ifIndex>.
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::CiscoPower
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.

View File

@@ -50,7 +50,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer3::C6500
# $Id$
#
# Copyright (c) 2008 Max Baker
# Copyright (c) 2008-2009 Max Baker
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -32,7 +32,6 @@ package SNMP::Info::Layer3::C6500;
use strict;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CiscoStack;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
@@ -41,28 +40,44 @@ use SNMP::Info::CiscoPortSecurity;
use SNMP::Info::CiscoConfig;
use SNMP::Info::CiscoPower;
use SNMP::Info::Layer3;
use SNMP::Info::CiscoStpExtensions;
use SNMP::Info::CiscoVTP;
@SNMP::Info::Layer3::C6500::ISA
= qw/SNMP::Info::CiscoVTP SNMP::Info::CiscoStack
SNMP::Info::CDP SNMP::Info::CiscoStats
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
# NOTE : Top-most items gets precedence for @ISA
@SNMP::Info::Layer3::C6500::ISA = qw/
SNMP::Info::CiscoVTP
SNMP::Info::CiscoStpExtensions
SNMP::Info::CiscoStack
SNMP::Info::CDP
SNMP::Info::CiscoImage
SNMP::Info::CiscoStats
SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoConfig
SNMP::Info::CiscoPower
SNMP::Info::Layer3
Exporter/;
Exporter
/;
@SNMP::Info::Layer3::C6500::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
# NOTE: Order creates precedence
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
# Bridge is called from Layer3 and CiscoStpExtensions
# So we want CiscoVTP to come last to get the right one.
# The @ISA order should match these orders.
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,
%SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS,
%SNMP::Info::CiscoVTP::MIBS,
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,
%SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS,
%SNMP::Info::CiscoStpExtensions::MIBS, %SNMP::Info::CiscoVTP::MIBS,
);
%GLOBALS = (
@@ -74,23 +89,25 @@ $VERSION = '2.00';
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoStack::GLOBALS,
%SNMP::Info::CiscoStpExtensions::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
%SNMP::Info::CiscoVTP::FUNCS,
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
%SNMP::Info::CiscoStpExtensions::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE,
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
%SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
);
sub vendor {
@@ -184,6 +201,7 @@ sub set_i_duplex_admin {
}
}
1;
__END__
@@ -247,6 +265,8 @@ after determining a more specific class using the method above.
=item SNMP::Info::Layer3
=item SNMP::Info::CiscoStpExtensions
=back
=head2 Required MIBs
@@ -274,6 +294,8 @@ See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
@@ -328,6 +350,10 @@ See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
@@ -406,9 +432,13 @@ See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
=cut

View File

@@ -52,7 +52,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -154,7 +154,7 @@ sub interfaces {
my $partial = shift;
my $i_descr = $dell->i_description($partial) || {};
my $i_name = $dell->i_name($partial) || {};
my $i_name = $dell->orig_i_name($partial) || {};
# Descriptions are all the same on some Dells, so use name instead if
# available

View File

@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::MAU;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -44,7 +44,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( %SNMP::Info::Layer3::MIBS, );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::SONMP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::RapidCity::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( %SNMP::Info::Layer3::MIBS, );

View File

@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', );

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'MAU-MIB' => 'mauMod' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'POWER-ETHERNET-MIB' => 'pethPsePortDetectionStatus' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = ( 'RAPID-CITY' => 'rapidCity', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.01';
%MIBS = (
'SYNOPTICS-ROOT-MIB' => 'synoptics',

View File

@@ -13,6 +13,7 @@ Info/CiscoQOS.pm
Info/CiscoRTT.pm
Info/CiscoStack.pm
Info/CiscoStats.pm
Info/CiscoStpExtensions.pm
Info/CiscoVTP.pm
Info/Entity.pm
Info/EtherLike.pm
@@ -47,6 +48,8 @@ Info/Layer3.pm
Info/Layer3/Aironet.pm
Info/Layer3/AlcatelLucent.pm
Info/Layer3/AlteonAD.pm
Info/Layer3/Altiga.pm
Info/Layer3/Arista.pm
Info/Layer3/BayRS.pm
Info/Layer3/C3550.pm
Info/Layer3/C4000.pm
@@ -81,4 +84,6 @@ t/make_dev_matrix.pl
t/pod-coverage.t
t/pod.t
t/prereq.t
t/push_ver
t/run_test
t/test_class.pl

155
README
View File

@@ -5,16 +5,24 @@ NAME
VERSION
SNMP::Info - Version 2.00
SNMP::Info - Version 2.01
AUTHOR
SNMP::Info was created at UCSC for the netdisco project
(www.netdisco.org) and was originally written by Max Baker.
Currently being maintained by team of Open Source authors headed by Eric
SNMP::Info is maintained by team of Open Source authors headed by Eric
Miller and Bill Fenner.
Please visit <http://sourceforge.net/projects/snmp-info/> for most
up-to-date list of developers.
SNMP::Info was originally created at UCSC for the Netdisco project
<http://netdisco.org> by Max Baker.
DEVICES SUPPORTED
See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt for
more details.
SYNOPSIS
use SNMP::Info;
@@ -82,9 +90,6 @@ DESCRIPTION
SNMP::Info gives an object oriented interface to information obtained
through SNMP.
This module lives at http://snmp-info.sourceforge.net Check for newest
version and documentation.
This module is geared towards network devices. Subclasses exist for a
number of network devices and common MIBs.
@@ -125,13 +130,10 @@ REQUIREMENTS
Net-SNMP can be found at http://net-snmp.sourceforge.net
Version 5.1.2 or greater is recommended.
Version 5.3.2 or greater is recommended.
Various version 4's and 5.0 and 5.1 series will work. 5.0.1 is kinda
flaky on the Perl side.
Versions 5.0301 and 5.0203 have issues with bulkwalk, turn off
bulkwalk.
Versions 5.0.1, 5.0301 and 5.0203 have issues with bulkwalk and are
not supported.
Redhat Users: Some versions that come with certain versions of
Redhat/Fedora don't have the Perl library installed. Uninstall the
@@ -142,8 +144,8 @@ REQUIREMENTS
If you are using SNMP::Info separate from Netdisco, download the
Netdisco MIB package at
http://sourceforge.net/project/showfiles.php?group_id=80033&package_id=135517
<http://sourceforge.net/project/showfiles.php?group_id=80033&package
_id=135517>
Make sure that your snmp.conf is updated to point to your MIB
directory and that the MIBs are world-readable.
@@ -225,6 +227,11 @@ SUBCLASSES
See documentation in SNMP::Info::CiscoPortSecurity for details.
SNMP::Info::CiscoPower
CISCO-POWER-ETHERNET-EXT-MIB.
See documentation in SNMP::Info::CiscoPower for details.
SNMP::Info::CiscoQOS
CISCO-CLASS-BASED-QOS-MIB. A collection of OIDs providing
information about a Cisco device's QOS config.
@@ -242,6 +249,11 @@ SUBCLASSES
See documentation in SNMP::Info::CiscoStack for details.
SNMP::Info::CiscoStpExtensions
CISCO-STP-EXTENSIONS-MIB
See documentation in SNMP::Info::CiscoStpExtensions for details.
SNMP::Info::CiscoStats
OLD-CISCO-CPU-MIB, CISCO-PROCESS-MIB, and CISCO-MEMORY-POOL-MIB.
Provides common interfaces for memory, cpu, and os statistics for
@@ -261,7 +273,7 @@ SUBCLASSES
See documentation in SNMP::Info::Entity for details.
SNMP::Info::EtherLike
ETHERLIKE-MIB (RFC1398) - Some Layer3 devices implement this MIB, as
EtherLike-MIB (RFC1398) - Some Layer3 devices implement this MIB, as
well as some Aironet Layer 2 devices (non Cisco).
See documentation in SNMP::Info::EtherLike for details.
@@ -294,6 +306,11 @@ SUBCLASSES
See documentation in SNMP::Info::NortelStack for details.
SNMP::Info::PowerEthernet
POWER-ETHERNET-MIB
See documentation in SNMP::Info::PowerEthernet for details.
SNMP::Info::RapidCity
RAPID-CITY. Inherited by Nortel switches for duplex and VLAN
information.
@@ -439,6 +456,11 @@ SUBCLASSES
See documentation in SNMP::Info::Layer2::NAP222x for details.
SNMP::Info::Layer2::Netgear
Subclass for Netgear switches
See documentation in SNMP::Info::Layer2::Netgear for details.
SNMP::Info::Layer2::Orinoco
Subclass for Orinoco/Proxim wireless access points.
@@ -466,12 +488,24 @@ SUBCLASSES
See documentation in SNMP::Info::Layer3::Aironet for details.
SNMP::Info::Layer3::AlcatelLucent
Alcatel-Lucent OmniSwitch Class.
See documentation in SNMP::Info::Layer3::AlcatelLucent for
details.
SNMP::Info::Layer3::AlteonAD
Subclass for Nortel Alteon Series Layer 2-7 load balancing
switches and Nortel BladeCenter Layer2-3 GbE Switch Modules.
See documentation in SNMP::Info::Layer3::AlteonAD for details.
SNMP::Info::Layer3::Altiga
See documentation in SNMP::Info::Layer3::Altiga for details.
SNMP::Info::Layer3::Arista
See documentation in SNMP::Info::Layer3::Arista for details.
SNMP::Info::Layer3::BayRS
Subclass for Nortel Multiprotocol/BayRS routers. This includes
BCN, BLN, ASN, ARN, AN, 2430, and 5430 routers.
@@ -572,6 +606,11 @@ SUBCLASSES
See documentation in SNMP::Info::Layer3::Sun for details.
SNMP::Info::Layer3::Timetra
Alcatel-Lucent SR Class.
See documentation in SNMP::Info::Layer3::Timetra for details.
Thanks
Thanks for testing and coding help (in no particular order) to :
@@ -754,71 +793,9 @@ USAGE
If the device still can be connected to via SNMP::Info, then
SNMP::Info is returned.
Algorithm for Subclass Detection:
Layer3 Support -> SNMP::Info::Layer3
Aironet (BR500,AP340,350,1200) -> SNMP::Info::Layer3::Aironet
AP4800... All Non IOS
Alcatel-Lucent OmniSwitch -> SNMP::Info::Layer3::AlcatelLucent
Alcatel-Lucent Service Router -> SNMP::Info::Layer3::Timetra
Catalyst 3550,3548,3560 -> SNMP::Info::Layer3::C3550
Catalyst 4000,4500 -> SNMP::Info::Layer3::C4000
Catalyst 6500,3750 -> SNMP::Info::Layer3::C6500
Cisco Generic L3 IOS device -> SNMP::Info::Layer3::Cisco
Cyclades terminal server -> SNMP::Info::Layer1::Cyclades
Dell PowerConnect -> SNMP::Info::Layer3::Dell
D-Link -> SNMP::Info::Layer3::Dell
Enterasys -> SNMP::Info::Layer3::Enterasys
Extreme -> SNMP::Info::Layer3::Extreme
Foundry -> SNMP::Info::Layer3::Foundry
HP Procurve -> SNMP::Info::Layer2::HP
HP Procurve 9300 series -> SNMP::Info::Layer3::HP9300
Juniper -> SNMP::Info::Layer3::Juniper
Microsoft -> SNMP::Info::Layer3::Microsoft
Net-SNMP -> SNMP::Info::Layer3::NetSNMP
Nortel Passport/Accelar LAN -> SNMP::Info::Layer3::Passport
Nortel/Bay Baystack -> SNMP::Info::Layer2::Baystack
Alteon Ace Director -> SNMP::Info::Layer3::AlteonAD
Nortel Contivity -> SNMP::Info::Layer3::Contivity
Nortel BayRS Router -> SNMP::Info::Layer3::BayRS
Sun Router -> SNMP::Info::Layer3::Sun
Elsif Layer2 (no Layer3) -> SNMP::Info::Layer2
Aironet - IOS Devices -> SNMP::Info::Layer2::Aironet
Catalyst 1900 -> SNMP::Info::Layer2::C1900
Catalyst 2900XL,2940,2950,
3500XL -> SNMP::Info::Layer2::C2900
Catalyst 2960, 2970 -> SNMP::Info::Layer3::C6500
Catalyst 3550/3548 -> SNMP::Info::Layer3::C3550
Cisco 3400 w/ MetroBase -> SNMP::Info::Layer3::C3550
Catalyst WS-C 2926,5xxx -> SNMP::Info::Layer2::Catalyst
Cisco (Airespace) Wireless -> SNMP::Info::Layer2::Airespace
Cisco (not covered by above) -> SNMP::Info::Layer2::Cisco
Cyclades terminal server -> SNMP::Info::Layer1::Cyclades
Dell PowerConnect -> SNMP::Info::Layer3::Dell
D-Link -> SNMP::Info::Layer3::Dell
Enterasys -> SNMP::Info::Layer3::Enterasys
Extreme -> SNMP::Info::Layer3::Extreme
Foundry -> SNMP::Info::Layer3::Foundry
HP Procurve -> SNMP::Info::Layer2::HP
HP Procurve 9300 series -> SNMP::Info::Layer3::HP9300
IBM BladeCenter GbESM -> SNMP::Info::Layer3::Dell
Nortel/Bay Centillion ATM -> SNMP::Info::Layer2::Centillion
Nortel/Bay Baystack -> SNMP::Info::Layer2::Baystack
Nortel Business Ethernet Switch-> SNMP::Info::Layer2::Baystack
Nortel Passport/Accelar 8100 -> SNMP::Info::Layer3::Passport
Nortel AP 222x -> SNMP::Info::Layer2::NAP222x
Orinco AP -> SNMP::Info::Layer2::Orinoco
Nortel 2270 WSS -> SNMP::Info::Layer2::N2270
Elsif Layer1 Support -> SNMP::Info::Layer1
Allied -> SNMP::Info::Layer1::Allied
Asante -> SNMP::Info::Layer1::Asante
Nortel/Bay Hub -> SNMP::Info::Layer1::Bayhub
Bay/Synoptics Hub -> SNMP::Info::Layer1::S3000
Else -> SNMP::Info
ZyXEL_DSLAM -> SNMP::Info::Layer2::ZyXEL_DSLAM
Aruba wireless -> SNMP::Info::Layer2::Aruba
Alcatel OmniAccess -> SNMP::Info::Layer2::Aruba
Juniper NetScreen -> SNMP::Info::Layer3::Netscreen
See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt
for more details about device support, or view "device_type()" in
Info.pm.
$info->error(no_clear)
Returns Error message if there is an error, or undef if there is
@@ -1565,9 +1542,9 @@ SNMP::INFO INTERNALS
See Math::BigInt for details.
munge_i_up
There is a collision between data in "IF-MIB" and "RFC-1213". For
devices that fully implement "IF-MIB" it might return 7 for a port
that is down. This munges the data against the "IF-MIB" by hand.
Net-SNMP tends to load "RFC1213-MIB" first, and so ignores the
updated enumeration for "ifOperStatus" in "IF-MIB". This munge
handles the "newer" definitions for the enumeration in IF-MIB.
TODO: Get the precedence of MIBs and overriding of MIB data in
Net-SNMP figured out. Heirarchy/precendence of MIBS in SNMP::Info.
@@ -1657,8 +1634,8 @@ SNMP::INFO INTERNALS
<obj> - One of the following forms:
1) leaf identifier (e.g., C<'sysContact'>)
2) An entry in either %FUNCS, %GLOBALS (e.g., 'contact')
<iid> - The dotted-decimal, instance identifier. For scalar MIB
objects use '0'
<iid> - The dotted-decimal, instance identifier. For scalar MIB objects
use '0'
<val> - The SNMP data value being set (e.g., 'netdisco')
<type> - Optional as the MIB should be loaded.
@@ -1749,8 +1726,8 @@ SNMP::INFO INTERNALS
COPYRIGHT AND LICENSE
Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2008
Max Baker - All rights reserved.
Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2009
Max Baker and SNMP::Info Developers All rights reserved.
Original Code is: Copyright (c) 2002-2003, Regents of the University of
California All rights reserved.

46
t/00_local_docininfo.t Normal file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/perl
# 00_local_versionsync.t - Private test to check that all modules are listed in Info.pm
# $Id$
use warnings;
use strict;
use File::Find;
use Test::More;
eval "use File::Slurp";
plan skip_all => "File::Slurp required for testing version sync"
if $@;
plan qw(no_plan);
my %Items;
# Grab all the =item's from Info.pm
open (I,"blib/lib/SNMP/Info.pm") or fail("Can't open Info.pm");
while (<I>) {
next unless /^\s*=item\s*(\S+)/;
$Items{$1}++;
}
close I;
#warn "items : ",join(', ',keys %Items),"\n";
# Check that each package is represented in Info.pm docs
find({wanted => \&check_version, no_chdir => 1}, 'blib');
sub check_version {
# $_ is the full path to the file
return unless (m{blib/lib/}xms and m{\.pm \z}xms);
my $content = read_file($_);
# Make sure that this package is listed in Info.pm
fail($_) unless $content =~ m/^\s*package\s+(\S+)\s*;/m;
my $package = $1;
return if $package eq 'SNMP::Info';
fail($_) unless defined $Items{$package};
pass($_);
}

View File

@@ -21,18 +21,23 @@ acl
adsl
af
agere
alteon
airespace
aironet
airos
Alcatel
alcatel
alteon
Altiga
altiga
AOS
ap
APs
Arista
arista
arn
arp
aruba
asa
asante
ascii
asn
@@ -87,17 +92,20 @@ dynamicgvrp
eapol
edgeiron
eigrp
enterasys
EOS
erszenyi
ess
etherlike
ethernet
enterasys
extranet
fastiron
fdb
fdp
fenner
fsm
FWSM
fwsm
gbe
gbesm
getnext
@@ -117,8 +125,8 @@ indices
ingen
ios
ip
IPv
IPV
IPv
jeroen
junos
kramarov
@@ -139,26 +147,29 @@ maxrepeaters
mbs
mckeown
mda
mib
MIB
mibdirs
mib
mibs
milliwatts
msb
mtu
multi
multicast
multiseg
multivlan
munge
munges
namespace
ndp
netdisco
netgear
netmask
netscreen
nmm
ndp
nopassword
nosuch
nortel
nosuch
oem
ofdm
oid
@@ -191,29 +202,32 @@ retrynosuch
rom
rtt
rttmon
sca
Schenau
sergienko
sieborger
SNMP
SNMP's
snmp
snmpwalk
SNMP's
snmpv2
snmpv3
snmpwalk
solaris
sonmp
ssid
SSID's
SSIDs
Stickland
stackable
stdout
stg
stp
subcomponents
subnet
supply's
sunos
supply's
synoptics
sys
todo
telesyn
telesys
tftp
@@ -221,6 +235,7 @@ tftpfilename
tftpserver
TiMOS
tmnxModel
todo
tuttle
ucsc
uninstall

View File

@@ -40,6 +40,7 @@ if ($@) {
$gvds->graph()->as_png($DevPNG);
}
print "Creating $DevHTML\n";
open (HTML, "> $DevHTML") or die "Can't open $DevHTML. $!\n";
$old_fh = select(HTML);
&html_head;

46
t/push_ver Executable file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/perl -w
# $Id$
use File::Glob qw/bsd_glob/;
my @pms = glob_rec("../Info");
$new_version = shift @ARGV || '2.01';
foreach my $p (@pms) {
print "$p\n";
rename($p,"$p.orig");
open (O,"<$p.orig") or die;
open (P,">$p") or die "Can't open $p for write. $!\n";
while (<O>) {
s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
print P;
}
close O;
close P or die "Can't write $p. $!\n";
#last;
}
sub glob_rec {
my $dir = shift;
my @files = bsd_glob("$dir/*");
my @pms;
foreach my $f (@files) {
next if $f eq '\.$';
if (-d $f) {
push @pms, glob_rec($f);
next;
}
push @pms,$f if $f =~ /.pm$/;
}
return @pms;
}

4
t/run_test Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
# Run this from ../
/usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/$1

View File

@@ -9,11 +9,14 @@
# $Id$
#
use lib '/usr/local/netdisco';
use FindBin;
use lib "$FindBin::Bin/../..";
#use lib '/usr/local/netdisco';
use SNMP::Info;
use Getopt::Long;
use strict;
use vars qw/$Class $Dev $Comm $Ver @Dump %Dumped $Debug %args $NoBulk/;
use vars qw/$Class $Dev $Comm $Ver @Dump %Dumped $Debug %args $NoBulk $MibDirs/;
# Default Values
$Class = '';
@@ -32,18 +35,31 @@ GetOptions ('c|class=s' => \$Class,
'p|print=s' => \@Dump,
'x|debug+' => \$Debug,
'n|nobulk' => \$NoBulk,
'm|mibdir=s@' => \$MibDirs,
);
&usage unless ($Dev and $Comm);
# Default MIB directories
my $n = '/usr/local/netdisco';
unless (defined $MibDirs) {
$MibDirs = ["$n/mibs/allied", "$n/mibs/asante", "$n/mibs/cisco", "$n/mibs/foundry",
"$n/mibs/hp", "$n/mibs/nortel", "$n/mibs/extreme", "$n/mibs/rfc",
"$n/mibs/net-snmp"];
}
$Class = $Class ? "SNMP::Info::$Class" : 'SNMP::Info';
eval "require $Class;";
if ($@) {
die "Can't load Class specified : $Class.\n\n$@\n";
}
print "Class $Class loaded.\n";
my $class_ver = 'undef';
{ no strict 'refs';
$class_ver = ${"${Class}::VERSION"};
}
print "Class $Class ($class_ver) loaded from SNMP::Info $SNMP::Info::VERSION.\n";
#print "MIB Dirs : ",join(', ',@$MibDirs),"\n";
print "Dumping : ",join(',',@Dump),"\n" if scalar @Dump;
%args = ();
@@ -57,11 +73,13 @@ my $dev = new $Class( 'AutoSpecify' => 0,
'Debug' => $Debug,
'DestHost' => $Dev,
'Community' => $Comm,
'MibDirs' => $MibDirs,
%args
) or die "\n";
print "Connected to $Dev.\n";
print "It's a ", $dev->device_type(), ".\n";
print "Detected Class: ", $dev->device_type(), "\n";
print "Using Class: $Class (-c to change)\n";
my $layers = $dev->layers();
@@ -182,6 +200,7 @@ test_class - Test a device against an SNMP::Info class
-p --print i_blah2
-x --debug debugging flag
-n --nobulk disable bulkwalk
-m --mibdirs directory (repeat as needed)
end_usage
exit;