Compare commits

...

109 Commits

Author SHA1 Message Date
Oliver Gorwits
43d1718618 bump ver for release, remove VERSION_CVS variable
update MANIFEST
2011-09-28 11:17:26 +01:00
Oliver Gorwits
d64f0d4a5e added doc stubs for two new classes HPVC and AdslLine 2011-09-28 11:08:18 +01:00
Alexander Hartmaier
4a13ee8991 switched ChangeLog format to Moose style 2011-09-27 11:05:06 +02:00
Alexander Hartmaier
8764916086 Support for ADSL-LINE-MIB in new class AdslLine 2011-09-27 10:19:17 +02:00
Alexander Hartmaier
78b0b77e38 Added i_stack_status method that can be used for finding the parent interface for e.g. ADSL interface speed determination 2011-09-27 10:11:26 +02:00
Jeroen van Ingen
8a7376f6df Update ChangeLog wrt patch SF #3408506 2011-09-23 11:54:07 +02:00
Michael Borgelt
c9a36f12e6 Fix Use of uninitialized value in substr at /usr/share/perl5/SNMP/Info/IPv6.pm line 113. It is caused by an empty mac in local loopback interface on cisco devices.
Signed-off-by: Jeroen van Ingen <jeroen@utwente.nl>
2011-09-23 11:41:53 +02:00
Michael Borgelt
8199e2a973 Fix failure in POD.
Signed-off-by: Jeroen van Ingen <jeroen@utwente.nl>
2011-09-22 17:21:50 +02:00
Jeroen van Ingen
e1f3fb3a44 Fix generic device classification bug for devices w/o L1-L3 support
Commit 52275e92 made a small change in generic device classification
based on sysObjectID for devices that don't report Layer1 - Layer3
capabilities, in order to skip generic assignment if a more specific
class had already been determined. However this change contained an
error causing generic classification to fail.
Nex fix explicitly checks if class isn't more specific than SNMP::Info
before attempting to classify based on sysObjectID.
2011-09-21 17:04:48 +02:00
Jeroen van Ingen
52275e92af New class L2::HPVC for VirtualConnect blade switches
HP VirtualConnect product family includes ethernet-switch-like products
with their own MIBs. This new class adds basic support for these devices.
2011-09-09 17:49:52 +02:00
Jeroen van Ingen
5d9eec0992 New Layer3::Mikrotik class added to MANIFEST
The Layer3/Mikrotik.pm file should be in MANIFEST for the next release.
2011-09-09 17:42:54 +02:00
Jeroen van Ingen
cd9c637ba5 test_class.pl script: also test devices without layers / sysServices
The test_class.pl script refused to test devices that don't implement
sysServices. Since SNMP::Info has been modified to check connectivity
by testing sysDescr as well, test_class.pl should follow that behaviour.
2011-09-09 17:14:01 +02:00
Jeroen van Ingen
0bc405792a Updated changelog to reflect previous 2 commits 2011-09-05 12:43:14 +02:00
Jeroen van Ingen
8fb36625bc Add proper classing for Cisco blade switches to Layer2 section as well, for CBS devices reporting L2 capability only 2011-09-05 11:35:32 +02:00
Jeroen van Ingen
674eca23b9 POD clarification on how i_speed() is munged to human friendly values 2011-09-05 10:06:31 +02:00
Jeroen van Ingen
cfc1ead848 New L3::Mikrotik class for Mikrotik devices running RouterOS. Initial, very basic version. 2011-08-31 15:11:13 +02:00
Jeroen van Ingen
c41ffdfd2d Documentation fix: add reference to Layer3::PacketFront class in POD 2011-08-30 13:17:35 +02:00
Jeroen van Ingen
df4708383b Updated ChangeLog to reflect chages from commits 2c2f4a9e and 497c81a0 2011-08-15 17:16:16 +02:00
Jeroen van Ingen
497c81a0c6 Updates to Layer2::HP class to get os_ver & serial from web managed
HP ProCurve switches. Based on patch & bug report from J R Binks,
SF #3344843.
2011-08-11 14:37:42 +02:00
Jeroen van Ingen
2c2f4a9ea1 Add Layer3::PacketFront device class to support PacketFront DRG devices 2011-08-05 12:26:34 +02:00
Brian De Wolf
5c44fc0b28 Fix ordering in Info::CiscoStats POD
The header for a section got moved away from its content.
2011-06-23 13:57:25 -07:00
Brian De Wolf
a54b446dae Avoid Perl warnings in Info::CiscoStack
These two points in CiscoStack use a value from a hash in a numerical
comparison without verifying they exist.  If they don't, Perl warnings get
emitted.  Instead, we check for existence first, then compare the value.
2011-06-23 13:51:43 -07:00
Oliver Gorwits
631010ed3f prep for 2.05 CPAN release 2011-06-23 21:12:27 +01:00
Brian De Wolf
8506638e5c Promote L2::Aruba to L3::Aruba
Aruba controllers can act as L3 devices and provide L3 information through the
standard MIBs.  This change makes Aruba devices get recognized as such.
Layer2.pm and Layer3.pm provide roughly the same functionality so there should
be little to no impact for Aruba devices only acting as L2 entities.
2011-06-23 12:40:36 -07:00
Brian De Wolf
c0f3a8eb2b Fix call in L2::Aironet
A call to a function in Aironet was wrong and has been corrected.
2011-06-22 13:35:26 -07:00
Oliver Gorwits
662d870ad7 added Oliver to the AUTHORS list 2011-04-25 07:44:03 +00:00
Jeroen van Ingen
08746d6b10 Fixed i_speed_raw not returning raw values (Alexander Hartmaier)
(forgot to commit the updated Changelog when committing the patch to Info.pm)
2011-03-31 15:44:56 +00:00
Oliver Gorwits
bc8c8a6061 prep for 2.04 release 2011-03-31 08:34:57 +00:00
Oliver Gorwits
d09e5de229 renamed Ipv6.pm to IPv6.pm 2011-03-31 08:24:29 +00:00
Oliver Gorwits
1df1bda641 change from Ipv6 to IPv6 everywhere 2011-03-31 08:04:52 +00:00
Jeroen van Ingen
e8612e3779 Method i_speed_raw didn't return raw values; patch by Alexander Hartmaier. 2011-03-30 12:39:00 +00:00
Carlos Vicente
a58d060310 Adding missing method for mapping v6 addresses with prefixes 2011-02-23 04:32:14 +00:00
Brian de Wolf
a77c539f38 These are actually listed as not-accessible so they shoudn't be defined. Their information has to be extracted from n2p_paddr instead. 2011-01-19 00:04:07 +00:00
Oliver Gorwits
b5107b5634 shorten abstract for Ipv6.pm 2011-01-09 20:42:41 +00:00
Oliver Gorwits
6c880bb7b3 add doc links to Info.pm for new Ipv6 and Pf modules 2011-01-09 18:55:31 +00:00
Jeroen van Ingen
9297c70d11 Added switch models 2915, 2615, 2520G and 1810G to HP class. Won't be
correctly identified until hpicfoid mib is updated to include these models.
2011-01-04 15:00:22 +00:00
Eric Miller
bfafdc99d9 Update port indexing for newer code and switches (5698) 2010-11-23 13:50:16 +00:00
Eric Miller
ab111a8e93 Modify detection for newer code levels 2010-11-17 23:18:39 +00:00
Eric Miller
c2ce3d81e1 Improve os detection for newer versions. Improve forward compatibility. 2010-11-17 23:17:04 +00:00
Carlos Vicente
fb9813af51 C2970 and C2960 were not being correctly recognized if has_layer(3) was true 2010-11-16 00:41:00 +00:00
Bill Fenner
4fb63d8a7b Implement peth_port_neg_power, reporting the actual negotiated value
in CiscoPower and the max for the class in the generic PowerEthernet.
2010-11-08 07:49:40 +00:00
Jeroen van Ingen
77982188bd Match for ME340x in Layer3 section, class as L3::C3550 for proper macsuck
(ME340x requires community-based indexing)
2010-10-29 13:03:44 +00:00
Jeroen van Ingen
8748932460 Enable IPv6 support in Layer3 base class by including Layer3::Ipv6 2010-10-21 10:29:57 +00:00
Brian de Wolf
6c88df1ac0 Fix error in FWSM support patch that caused FWSMs to not be detected. 2010-10-04 23:34:14 +00:00
Carlos Vicente
cacb0777b7 POD fixes to pass tests 2010-09-22 23:18:22 +00:00
Carlos Vicente
bdf5a80868 Adding LLDP support for Juniper and C3550 classes 2010-09-22 21:45:08 +00:00
Jeroen van Ingen
ad1f1933e2 Move Cisco CBS3xxx from generic L3::Cisco to L3::C6500 (mainly for community
based indexing, to succesfully retrieve forwarding tables).
2010-09-01 16:16:43 +00:00
Carlos Vicente
d7fe49a028 Additions to extract IPv6 addresses used in device interfaces 2010-08-25 00:09:42 +00:00
Jeroen van Ingen
e802ccdc6e Revert to status of rev 1.7, "peth_port_power" sub as a placeholder didn't
work as expected (behaved as override, but should have been overridden)
2010-08-23 14:45:04 +00:00
Jeroen van Ingen
af2a881142 Fixed error in IPv6 support for Extreme 2010-08-23 12:02:10 +00:00
Jeroen van Ingen
0ccf5409ca Fixed potential warnings about "Use of uninitialized value in string eq" 2010-08-23 11:47:58 +00:00
Jeroen van Ingen
2529305803 Add placeholder method peth_port_power() to PowerEthernet class; overrides
to actually return data in Cisco, Extreme and HP classes.
2010-08-23 11:38:55 +00:00
Jeroen van Ingen
bb8fb9d01a Initial version for Info::Ipv6 class. Not to be used directly, intended
use is to be inherited by Info::Layer3.

This class provides mapping of IPv6 network addresses to Ethernet media
addresses (MACs) and interface indexes. It will try various MIBs; with
debug on, when data is returned, a message will be logged to inform which
MIB contained the relevant data.
2010-08-11 16:41:29 +00:00
Jeroen van Ingen
665f33a482 Small fix for sysServices ("layers") check 2010-07-26 14:31:41 +00:00
Jeroen van Ingen
e5f948acda Allow support for devices without sysServices 2010-07-26 11:39:37 +00:00
Jeroen van Ingen
c28bbd5728 Changes to Info.pm to support devices that don't return sysServices.0 2010-07-26 11:32:48 +00:00
Jeroen van Ingen
262fa5a3cd Incorporate patch from jrbinks to support obscure Proxim/Orinoco device (item
2688801 on SF). Fallback for all Agere (11898) devices to Orinoco class.
2010-07-23 15:39:03 +00:00
Jeroen van Ingen
a58b774443 Added "vendor_i_type()" method to HP classes as suggested by Mikat1 on SF.
Tracker artifact 2599795. Method can be used to determine more detailed
type information about a port, eg 10/100 interface, 1000Base-LX, etc.
Details are vendor specific.
2010-07-23 15:07:58 +00:00
Brian de Wolf
6deceb6bd1 Fix for C1900 bp_index not containing interfaces. 2010-05-25 23:30:20 +00:00
Max Baker
808d3fd5c6 add PF Support 2010-05-07 00:01:33 +00:00
Max Baker
b82d3b82d9 update copyright and developers 2010-05-04 20:58:32 +00:00
Jeroen van Ingen
cb8d780d70 Added os_bin() method to CiscoStats. Determines ROM version on several
Cisco switches and routers by scanning for version string in rom_id().
2010-05-04 14:18:37 +00:00
Jeroen van Ingen
01cd78c75d Added table methods to %FUNCS in CDP.pm to retrieve management addresses
of connected devices. Useful for improving neighbor detection in Netdisco.
2010-05-03 14:51:35 +00:00
Brian de Wolf
e7b289c399 Add L3::CiscoFWSM for Cisco Firewall Services Modules. 2010-04-28 17:08:32 +00:00
Bill Fenner
a9b28c2270 For Cisco WLCs, pretend to have the CISCO-DOT11-MIB for signal strengths, etc. 2010-03-23 18:00:08 +00:00
Bill Fenner
5b059e6286 "arpnip" on Airespace: use the controller's snooping on the
IP addresses of its clients, plus the knowledge of the APs'
IP and ethernet MAC addresses, to arpnip.  This is useful
when there is communication (between controller and AP,
or between wireless and wired devices) that does not cross
routers.
2010-03-23 17:58:30 +00:00
Jeroen van Ingen
2c84636b7f Update to Juniper class: use Q-BRIDGE-MIB for switch forwarding tables 2010-02-06 12:52:54 +00:00
Jeroen van Ingen
2aba8dd8f1 Moved older HP Procurve switch models to separate L2:HP4000 class. Reimplemented VLAN changing for Procurve switches; several updates to MODEL_MAP. 2009-12-03 07:55:12 +00:00
Max Baker
41d68936b0 add some recent questions to DEVELOP 2009-12-02 17:49:27 +00:00
Max Baker
cb750624f9 *** empty log message *** 2009-11-28 20:05:49 +00:00
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
95 changed files with 5833 additions and 838 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,5 +1,79 @@
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
ChangeLog $Id$
version 2.06 (2011-09-28)
[NEW FEATURES]
* Support for PacketFront devices in new class L3::PacketFront
* Support for Mikrotik devices in new class L3::Mikrotik
* Support for HP VirtualConnect switches in new class L2::HPVC
* Support for ADSL-LINE-MIB in new class AdslLine
[ENHANCEMENTS]
* POD clarification on i_speed() munging by Info.pm
* Added i_stack_status method that can be used for finding the parent
interface for e.g. ADSL interface speed determination
[BUG FIXES]
* [3344843] Fix returning serial() and os_ver() for web-managable HP
switches, introduced by HP/HP4000 class split, reported by J R Binks
* [2809033] Put L2-only Cisco blade switches in L3::C6500
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
incomplete (Michael Borgelt)
version 2.05 (2011-06-23)
+ Fix broken function call in L2::Aironet
+ Promote L2::Aruba to L3::Aruba, as Aruba devices can be L3 entities and
provide L3 information.
version 2.04 (2011-03-31)
+ Support for older HP switch models moved to new L2::HP4000 class
+ Fix VLAN changing in L2::HP and L2::HP4000 classes
* Updated model lists in HP classes
+ [2980782] Added L3::CiscoFWSM for Cisco Firewall Services Modules
(Brian De Wolf)
+ Added L3::Pf for FreeBSD PFSense Firewalls (max)
* Added specific functions for neighbor mgmt addresses to CDP class
* Implemented os_bin() method in CiscoStats
+ [2980787] Fix for C1900 bp_index not containing interfaces.
(Brian De Wolf)
+ [2599795] Added vendor_i_type() method to HP and HP4000 clases
+ [2688801] Minor modification for obscure Proxim/Orinoco device
(jrbinks)
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
classes (jeroenvi)
* Minor tweaks to support devices without sysServices
* Added Cisco CBS3xxx blade switches to L3::C6500
* Fix for FWSMs not being detected properly. Special thanks goes to
Jukka Pirhonen for pointing it out. (Brian De Wolf)
+ Added support for IPv6 to physical address mapping
* Added ME340x to L3::C3550
* Added new ProCurve models to HP class
* Fixed i_speed_raw not returning raw values (Alexander Hartmaier)
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

29
DEVELOP Normal file
View File

@@ -0,0 +1,29 @@
SNMP::Info Developer Guidelines
Coding Guidelines:
- tab-width of 4, no tab characters
- keep POD documentation up-to-date
- always update ChangeLog before committing
- always update DeviceMatrix.txt before committing
- check-in required mibs to netdisco-mibs and release new package if needed
Release and Testing Instructions:
- Please see misc/RELEASE in Netdisco
( http://netdisco.cvs.sourceforge.net/viewvc/netdisco/misc/RELEASE?view=markup )
and follow all testing and release guidelines
FAQ:
- Do I have to update the version number and timestamp in modified files before committing?
-> No. These are RCS tags that are automatically updated by CVS when you commit
- Should I add changes at the top of the ChangeLog?
-> Yes. The changelog is created one commit at a time. If there isn't a
section for the current version, then add one at the top and put your
changes after. You can leave the date field for the release empty ().
- What should I change the $VERSION to?
-> If you are the first person to get to a file after a release, update it
to either release++ or "release++ dash cvs".
Example: File is marked 2.01, change it to 2.02-cvs with your new changes.
Example: File is marked 2.02-cvs, no change until packaging for release when the -cvs is removed.
TODO: Is there still an odd/even scheme as introduced by Eric?

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: Layer3::Aruba
device: All
#
# Allied
#
device-vendor: Allied Telesyn
cdp:no
class: Layer1::Allied
@@ -40,21 +61,43 @@ 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
arpnip: yes
macsuck: yes
portmac: yes
duplex: no
class: Layer2::Aruba
note: Uses proprietary MIBs to provide MAC to port mapping. APs appear as switch ports.
class: Layer3::Aruba
device-family: Aruba Wireless Controllers
note: Uses proprietary MIBs to provide MAC to port mapping. APs appear as switch ports.
device: 5000
device: 6000
#
# Asante
#
device-vendor: Asante
class: Layer1::Asante
ver: 1
@@ -66,16 +109,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 +137,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 +173,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 +193,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 +220,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 +231,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 +277,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 +293,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
@@ -268,19 +303,21 @@ class: Layer3::C6500
device: 3750
device-family: Catalyst Blade Switch 3xxx
macsuck: vlan
class: Layer3::C6500
note: Cisco Blade switches for Dell, FSC, HP and IBM blade system chassis. Limited testing done.
device-family: Catalyst 4000
duplex: write
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 +334,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 +363,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 +401,27 @@ 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 Modules (FWSM)
note: !Arpnip only available for 4.x software releases.
class: Layer3::CiscoFWSM
arpnip: yes
#
# Cyclades
#
device-vendor: Cyclades
class: Layer1::Cyclades
device-family: All
device: All
#
# Dell
#
device-vendor: Dell
arpnip: no
macsuck: yes
@@ -399,7 +441,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 +461,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 +484,20 @@ device-family: Alpine and Summit
device: Alpine 3808
device: Summit 7i, 48si
#
# FreeBSD
#
device-vendor: FreeBSD
device-famly: Pf
class: Layer3::Pf
arpnip: yes
cdp: no
note: LLDP support might be available. See note in Layer3::Pf
#
# Foundry
#
device-vendor: Foundry Networks
note: CDP --> FDP.
vlan: yes
modules: no
@@ -467,52 +529,103 @@ 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
device-family: HP ProCurve
device-family: HP ProCurve (old)
class: Layer2::HP4000
duplex: both
macsuck: yes
arpnip: no
cdp: yes
vlan: write
note: CDP only available with newer ROM versions.
note: devices in this class only have CDP support
note: VLAN info in HP-VLAN MIB
device: 2512
ver: 1
device: 2524
ver: 1
device: 4000
device: 1600M,2400,2424M,4000,8000
duplex: link
note: duplex issues?
device: 4104GL
duplex: link
device: 4108GL,8000,2626,2650,8000
device-family: HP ProCurve (recent)
class: Layer2::HP
duplex: both
macsuck: yes
arpnip: no
cdp: yes
vlan: write
note: old firmware versions only have CDP support, more recent have LLDP
note: VLAN info in Q-BRIDGE-MIB
device: 2312,2324,2512,2524
ver: 1
device: 2510,2600,2610,2800,2810,2900,2910al
device: 3124,3324XL,3400cl,3500,3500yl
device: 4100GL,4200vl,5300XL,5400yy,5400zl
device: 6108,6200yl,6400cl,6410cl,6600,6600ml,8200zl
#
# 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 +637,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 +664,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 +702,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 +771,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 +822,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 +837,9 @@ device: AP-1000,AP-2000,AP-4000
device: WavePOINT-II
#
# Sun
#
device-vendor: Sun
class: Layer3::Sun
@@ -747,11 +847,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)

363
Info.pm
View File

@@ -1,8 +1,8 @@
# SNMP::Info - Max Baker
# $Id$
# SNMP::Info
#
# Copyright (c) 2003-2008 Max Baker
# Copyright (c) 2003-2010 Max Baker and SNMP::Info Developers
# All rights reserved.
#
# Portions Copyright (c) 2002-2003, Regents of the University of California
# All rights reserved.
#
@@ -23,7 +23,7 @@ use vars
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
$NOSUCH $BIGINT $REPEATERS/;
$VERSION = '2.00';
$VERSION = '2.06';
=head1 NAME
@@ -31,15 +31,22 @@ SNMP::Info - Object Oriented Perl5 Interface to Network devices and MIBs through
=head1 VERSION
SNMP::Info - Version 2.00
SNMP::Info - Version 2.06
=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,
Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits.
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 +114,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 +154,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 +167,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.
@@ -227,6 +226,14 @@ For more info run C<perldoc> on any of the following module names.
=over
=item SNMP::Info::AdslLine
SNMP Interface to the ADSL-LINE-MIB for ADSL interfaces.
Requires the F<ADSL-LINE-MIB>, downloadable from Cisco.
See documentation in L<SNMP::Info::AdslLine> for details.
=item SNMP::Info::Airespace
F<AIRESPACE-WIRELESS-MIB> and F<AIRESPACE-SWITCHING-MIB>. Inherited by
@@ -267,6 +274,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 +300,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 +329,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.
@@ -321,6 +340,14 @@ Foundry Discovery Protocol. F<FOUNDRY-SN-SWITCH-GROUP-MIB>
See documentation in L<SNMP::Info::FDP> for details.
=item SNMP::Info::IPv6
SNMP Interface for obtaining configured IPv6 addresses and mapping IPv6
addresses to MACs and interfaces, using information from F<IP-MIB>,
F<IPV6-MIB> and/or F<CISCO-IETF-IP-MIB>.
See documentation in L<SNMP::Info::IPv6> for details.
=item SNMP::Info::IEEE802dot11
F<IEEE802dot11-MIB>. A collection of OIDs providing information about
@@ -348,6 +375,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.
@@ -447,12 +480,6 @@ Allied Telesys switches.
See documentation in L<SNMP::Info::Layer2::Allied> for details.
=item SNMP::Info::Layer2::Aruba
Subclass for Aruba wireless switches.
See documentation in L<SNMP::Info::Layer2::Aruba> for details.
=item SNMP::Info::Layer2::Bay
Depreciated. Use BayStack.
@@ -505,12 +532,26 @@ Depreciated. Use SNMP::Info::Layer3::Foundry.
=item SNMP::Info::Layer2::HP
Subclass for HP Procurve Switches
Subclass for more recent HP Procurve Switches
Requires F<HP-ICF-OID> and F<ENTITY-MIB> downloaded from HP.
See documentation in L<SNMP::Info::Layer2::HP> for details.
=item SNMP::Info::Layer2::HP4000
Subclass for older HP Procurve Switches
Requires F<HP-ICF-OID> and F<ENTITY-MIB> downloaded from HP.
See documentation in L<SNMP::Info::Layer2::HP4000> for details.
=item SNMP::Info::Layer2::HPVC
Subclass for HP VirtualConnect Switches
See documentation in L<SNMP::Info::Layer2::HPVC> for details.
=item SNMP::Info::Layer2::N2270
Subclass for Nortel 2270 wireless switches.
@@ -523,6 +564,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 +603,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 +616,20 @@ 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::Aruba
Subclass for Aruba wireless switches.
See documentation in L<SNMP::Info::Layer3::Aruba> for details.
=item SNMP::Info::Layer3::BayRS
Subclass for Nortel Multiprotocol/BayRS routers. This includes BCN, BLN, ASN,
@@ -595,6 +662,12 @@ This is a simple wrapper around Layer3 for IOS devices. It adds on CiscoVTP.
See documentation in L<SNMP::Info::Layer3::Cisco> for details.
=item SNMP::Info::Layer3::CiscoFWSM
Subclass for Cisco Firewall Services Modules.
See documentation in L<SNMP::Info::Layer3::CiscoFWSM> for details.
=item SNMP::Info::Layer3::Contivity
Subclass for Nortel Contivity/VPN Routers.
@@ -630,7 +703,7 @@ See documentation in L<SNMP::Info::Layer3::Foundry> for details.
=item SNMP::Info::Layer3::HP9300
Subclass for HP network devices which Foundry Networks was the
Original Equipment Manufacturer (OEM) such as the HP ProCurve 9300 series.
Original Equipment Manufacturer (OEM) such as the HP ProCurve 9300 and 6300 series.
See documentation in L<SNMP::Info::Layer3::HP9300> for details.
@@ -646,6 +719,12 @@ Subclass for Generic Microsoft Routers running Microsoft Windows OS.
See documentation in L<SNMP::Info::Layer3::Microsoft> for details.
=item SNMP::Info::Layer3::Mikrotik
Subclass for Mikrotik devices running RouterOS.
See documentation in L<SNMP::Info::Layer3::Mikrotik> for details.
=item SNMP::Info::Layer3::N1600
Subclass for Nortel Ethernet Routing Switch 1600 series.
@@ -664,6 +743,12 @@ Subclass for Juniper NetScreen.
See documentation in L<SNMP::Info::Layer3::Netscreen> for details.
=item SNMP::Info::Layer3::PacketFront
Subclass for PacketFront DRG series CPE.
See documentation in L<SNMP::Info::Layer3::PacketFront> for details.
=item SNMP::Info::Layer3::Passport
Subclass for Nortel Ethernet Routing Switch/Passport 8000 series and Accelar
@@ -671,12 +756,24 @@ series switches.
See documentation in L<SNMP::Info::Layer3::Passport> for details.
=item SNMP::Info::Layer3::Pf
Subclass for FreeBSD-Based Firewalls using Pf /Pf Sense
See documentation in L<SNMP::Info::Layer3::Pf> for details.
=item SNMP::Info::Layer3::Sun
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 +1194,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
@@ -1170,18 +1204,23 @@ sub device_type {
my $objtype = "SNMP::Info";
my $layers = $info->layers();
# if we dont have sysServices, we dont have anything else either probably.
return unless ( defined $layers and length($layers) );
my $layers = $info->layers() || '00000000';
my $desc = $info->description() || 'undef';
$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";
# Some devices don't implement sysServices, but do return a description.
# In that case, log a warning and continue.
if ( $layers eq '00000000' ) {
if ($desc ne 'undef') {
carp("Device doesn't implement sysServices but did return sysDescr. Might give unexpected results.\n") if $info->debug();
} else {
# No sysServices, no sysDescr
return undef;
}
}
my $id = $info->id() || 'undef';
# Hash for generic fallback to a device class if unable to determine using
# the sysDescr regex.
@@ -1199,10 +1238,15 @@ 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',
9303 => 'SNMP::Info::Layer3::PacketFront',
12325 => 'SNMP::Info::Layer3::Pf',
14988 => 'SNMP::Info::Layer3::Mikrotik',
30065 => 'SNMP::Info::Layer3::Arista',
);
my %l2sysoidmap = (
@@ -1217,13 +1261,19 @@ sub device_type {
2925 => 'SNMP::Info::Layer1::Cyclades',
4526 => 'SNMP::Info::Layer2::Netgear',
5624 => 'SNMP::Info::Layer3::Enterasys',
11898 => 'SNMP::Info::Layer2::Orinoco',
14179 => 'SNMP::Info::Layer2::Airespace',
14823 => 'SNMP::Info::Layer2::Aruba',
14823 => 'SNMP::Info::Layer3::Aruba',
);
# 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\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 +1299,23 @@ 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)/;
# Cisco 2970
$objtype = 'SNMP::Info::Layer3::C6500'
if ( $desc =~ /(C2970|C2960)/ );
# Cisco 3400 w/ Layer3 capable image
$objtype = 'SNMP::Info::Layer3::C3550'
if ( $desc =~ /(ME340x)/ );
# Various Cisco blade switches, CBS30x0 and CBS31x0 models
$objtype = 'SNMP::Info::Layer3::C6500'
if ( $desc =~ /cisco/i and $desc =~ /CBS3[0-9A-Za-z]{3}/ );
# HP, older ProCurve models (1600, 2400, 2424m, 4000, 8000)
$objtype = 'SNMP::Info::Layer2::HP4000'
if $desc =~ /\b(J4093A|J4110A|J4120A|J4121A|J4122A|J4122B)\b/;
# HP, Foundry OEM
$objtype = 'SNMP::Info::Layer3::HP9300'
@@ -1269,12 +1335,20 @@ sub device_type {
if $desc =~ /Alteon\s[1A][8D]/;
# Nortel Contivity
$objtype = 'SNMP::Info::Layer3::Contivity' if $desc =~ /\bCES\b/;
$objtype = 'SNMP::Info::Layer3::Contivity' if $desc =~ /(\bCES\b|\bNVR\sV\d)/;
# 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 );
# Cisco FWSM
$objtype = 'SNMP::Info::Layer3::CiscoFWSM'
if ( $desc =~ /Cisco Firewall Services Module/i );
# HP VirtualConnect blade switches
$objtype = 'SNMP::Info::Layer2::HPVC'
if ( $desc =~ /HP\sVC\s/ );
# Generic device classification based upon sysObjectID
if ( ( $objtype eq 'SNMP::Info::Layer3' )
and ( defined($id) )
@@ -1298,7 +1372,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}/ );
@@ -1308,10 +1382,18 @@ sub device_type {
$objtype = 'SNMP::Info::Layer3::C3550'
if ( $desc =~ /(C3550|ME340x)/ );
# Cisco blade switches, CBS30x0 and CBS31x0 models with L2 only
$objtype = 'SNMP::Info::Layer3::C6500'
if ( $desc =~ /cisco/i and $desc =~ /CBS3[0-9A-Za-z]{3}/ );
# Cisco 2970
$objtype = 'SNMP::Info::Layer3::C6500'
if ( $desc =~ /(C2970|C2960)/ );
# HP, older ProCurve models (1600, 2400, 2424m, 4000, 8000)
$objtype = 'SNMP::Info::Layer2::HP4000'
if $desc =~ /\b(J4093A|J4110A|J4120A|J4121A|J4122A|J4122B)\b/;
# HP, Foundry OEM
$objtype = 'SNMP::Info::Layer3::HP9300'
if $desc =~ /\b(J4874A|J4138A|J4139A|J4840A|J4841A)\b/;
@@ -1346,7 +1428,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,11 +1441,19 @@ 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 (
$desc =~ /Nortel\s+(Networks\s+)??WLAN\s+-\s+Security\s+Switch/ );
# HP VirtualConnect blade switches
$objtype = 'SNMP::Info::Layer2::HPVC'
if ( $desc =~ /HP\sVC\s/ );
# Generic device classification based upon sysObjectID
if ( ( $objtype eq 'SNMP::Info::Layer2' )
and ( defined($id) )
@@ -1386,8 +1476,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 );
@@ -1398,11 +1488,11 @@ sub device_type {
if ( $desc =~ /8-port .DSL Module\(Annex .\)/i );
# Aruba wireless switches
$objtype = 'SNMP::Info::Layer2::Aruba'
$objtype = 'SNMP::Info::Layer3::Aruba'
if ( $desc =~ /(ArubaOS|AirOS)/ );
# Alcatel-Lucent branded Aruba
$objtype = 'SNMP::Info::Layer2::Aruba'
$objtype = 'SNMP::Info::Layer3::Aruba'
if ( $desc =~ /^AOS-W/ );
#Juniper NetScreen
@@ -1416,6 +1506,19 @@ sub device_type {
# Cisco ASA
$objtype = 'SNMP::Info::Layer3::Cisco'
if ( $desc =~ /Cisco Adaptive Security Appliance/i );
# HP VirtualConnect blade switches
$objtype = 'SNMP::Info::Layer2::HPVC'
if ( $desc =~ /HP\sVC\s/ );
# Generic device classification based upon sysObjectID
if ( defined($id) and $objtype eq 'SNMP::Info') {
if ( defined $l3sysoidmap{$id} ) {
$objtype = $l3sysoidmap{$id};
} elsif ( defined $l2sysoidmap{$id}) {
$objtype = $l2sysoidmap{$id};
}
}
}
return $objtype;
@@ -1729,6 +1832,11 @@ sub i_speed_raw {
my $info = shift;
my $partial = shift;
# remove the speed formating
my $munge_i_speed = delete $info->{munge}{i_speed};
# also for highspeed interfaces e.g. TenGigabitEthernet
my $munge_i_speed_high = delete $info->{munge}{i_speed_high};
my $i_speed_raw = $info->orig_i_speed($partial);
my $i_speed_high = undef;
@@ -1740,6 +1848,11 @@ sub i_speed_raw {
if ( $i_speed_high->{$i} );
}
}
# restore the speed formating
$info->{munge}{i_speed} = $munge_i_speed;
$info->{munge}{i_speed_high} = $munge_i_speed_high;
return $i_speed_raw;
}
@@ -2199,6 +2312,9 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
'i_qlen_out' => 'ifOutQLen',
'i_specific' => 'ifSpecific',
# IF-MIB::IfStackTable
'i_stack_status' => 'ifStackStatus',
# IP Address Table
'ip_index' => 'ipAdEntIfIndex',
'ip_table' => 'ipAdEntAddr',
@@ -2485,6 +2601,11 @@ Makes human friendly speed ratings using %SPEED_MAP
'2488000000' => 'OC-48',
)
Note: high speed interfaces (usually 1 Gbps or faster) have their link
speed in C<ifHighSpeed>. i_speed() automatically determines whether to use
C<ifSpeed> or C<ifHighSpeed>; if the latter is used, the value is munged by
munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
=cut
%SPEED_MAP = (
@@ -2678,10 +2799,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 +2812,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 +3783,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-2010 Max Baker and SNMP::Info Developers
All rights reserved.
Original Code is:
Copyright (c) 2002-2003, Regents of the University of California

172
Info/AdslLine.pm Normal file
View File

@@ -0,0 +1,172 @@
# SNMP::Info::AdslLine
#
# Copyright (c) 2009 Alexander Hartmaier
# 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::AdslLine;
use strict;
use Exporter;
use SNMP::Info;
@SNMP::Info::AdslLine::ISA = qw/SNMP::Info Exporter/;
@SNMP::Info::AdslLine::EXPORT_OK = qw//;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.06';
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
%GLOBALS = ();
%FUNCS = (
# ADSL-LINE-MIB::adslAtucChanTable
'adsl_atuc_interleave_delay' => 'adslAtucChanInterleaveDelay',
'adsl_atuc_curr_tx_rate' => 'adslAtucChanCurrTxRate',
'adsl_atuc_prev_tx_rate' => 'adslAtucChanPrevTxRate',
'adsl_atuc_crc_block_len' => 'adslAtucChanCrcBlockLength',
# ADSL-LINE-MIB::adslAturChanTable
'adsl_atur_interleave_delay' => 'adslAturChanInterleaveDelay',
'adsl_atur_curr_tx_rate' => 'adslAturChanCurrTxRate',
'adsl_atur_prev_tx_rate' => 'adslAturChanPrevTxRate',
'adsl_atur_crc_block_len' => 'adslAturChanCrcBlockLength',
);
%MUNGE = ();
1;
__END__
=head1 NAME
SNMP::Info::AdslLine - SNMP Interface to the ADSL-LINE-MIB
=head1 AUTHOR
Alexander Hartmaier
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $info = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myrouter',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $info->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
SNMP::Info::AdslLine is a subclass of SNMP::Info that provides
information about the adsl interfaces of a device.
Use or create in a subclass of SNMP::Info. Do not use directly.
=head2 Inherited Classes
none.
=head2 Required MIBs
=over
=item F<ADSL-LINE-MIB>
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
=over
=item none
=back
=head1 TABLE METHODS
=head2 ATUC channel table (C<adslAtucChanTable>)
This table provides one row for each ATUC channel.
ADSL channel interfaces are those ifEntries where ifType
is equal to adslInterleave(124) or adslFast(125).
=over
=item $info->adsl_atuc_interleave_delay()
(C<adslAtucChanInterleaveDelay>)
=item $info->adsl_atuc_curr_tx_rate()
(C<adslAtucChanCurrTxRate>)
=item $info->adsl_atuc_prev_tx_rate()
(C<adslAtucChanPrevTxRate>)
=item $info->adsl_atuc_crc_block_len()
(C<adslAtucChanCrcBlockLength>)
=back
=head2 ATUR channel table (C<adslAturChanTable>)
This table provides one row for each ATUR channel.
ADSL channel interfaces are those ifEntries where ifType
is equal to adslInterleave(124) or adslFast(125).
=over
=item $info->adsl_atur_interleave_delay()
(C<adslAturChanInterleaveDelay>)
=item $info->adsl_atur_curr_tx_rate()
(C<adslAturChanCurrTxRate>)
=item $info->adsl_atur_prev_tx_rate()
(C<adslAturChanPrevTxRate>)
=item $info->adsl_atur_crc_block_len()
(C<adslAturChanCrcBlockLength>)
=back
=cut

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::MIBS,
@@ -85,16 +85,17 @@ $VERSION = '2.00';
'airespace_ess_aclname' => 'bsnDot11EssAclName',
# AIRESPACE-WIRELESS-MIB::bsnAPTable
'airespace_ap_mac' => 'bsnAPDot3MacAddress',
'airespace_ap_name' => 'bsnAPName',
'airespace_ap_ip' => 'bsnApIpAddress',
'airespace_ap_loc' => 'bsnAPLocation',
'airespace_ap_sw' => 'bsnAPSoftwareVersion',
'airespace_ap_fw' => 'bsnAPBootVersion',
'airespace_ap_model' => 'bsnAPModel',
'airespace_ap_serial' => 'bsnAPSerialNumber',
'airespace_ap_type' => 'bsnAPType',
'airespace_ap_status' => 'bsnAPAdminStatus',
'airespace_ap_mac' => 'bsnAPDot3MacAddress',
'airespace_ap_name' => 'bsnAPName',
'airespace_ap_ip' => 'bsnApIpAddress',
'airespace_ap_loc' => 'bsnAPLocation',
'airespace_ap_sw' => 'bsnAPSoftwareVersion',
'airespace_ap_fw' => 'bsnAPBootVersion',
'airespace_ap_model' => 'bsnAPModel',
'airespace_ap_serial' => 'bsnAPSerialNumber',
'airespace_ap_type' => 'bsnAPType',
'airespace_ap_status' => 'bsnAPAdminStatus',
'airespace_ap_ethermac' => 'bsnAPEthernetMacAddress',
# AIRESPACE-WIRELESS-MIB::bsnAPIfTable
'airespace_apif_slot' => 'bsnAPIfSlotId',
@@ -112,6 +113,7 @@ $VERSION = '2.00';
'airespace_sta_ess_idx' => 'bsnMobileStationEssIndex',
'airespace_sta_ssid' => 'bsnMobileStationSsid',
'airespace_sta_delete' => 'bsnMobileStationDeleteAction',
'airespace_sta_ip' => 'bsnMobileStationIpAddress',
# AIRESPACE-WIRELESS-MIB::bsnUsersTable
'airespace_user_name' => 'bsnUserName',
@@ -148,15 +150,16 @@ $VERSION = '2.00';
%MUNGE = (
%SNMP::Info::MUNGE,
'airespace_ap_mac' => \&SNMP::Info::munge_mac,
'fw_port' => \&SNMP::Info::munge_mac,
'airespace_bl_mac' => \&SNMP::Info::munge_mac,
'airespace_if_mac' => \&SNMP::Info::munge_mac,
'airespace_sta_mac' => \&SNMP::Info::munge_mac,
'airespace_ap_mac' => \&SNMP::Info::munge_mac,
'airespace_ap_ethermac' => \&SNMP::Info::munge_mac,
'fw_port' => \&SNMP::Info::munge_mac,
'airespace_bl_mac' => \&SNMP::Info::munge_mac,
'airespace_if_mac' => \&SNMP::Info::munge_mac,
'airespace_sta_mac' => \&SNMP::Info::munge_mac,
);
sub layers {
return '00000011';
return '00000111';
}
sub serial {
@@ -896,6 +899,47 @@ sub e_parent {
return \%e_parent;
}
# arpnip:
#
# This is the controller snooping on the MAC->IP mappings.
# Pretending this is arpnip data allows us to get MAC->IP
# mappings even for stations that only communicate locally.
# Also use the controller's knowledge of the APs' MAC and
# IP addresses to augment the data.
sub at_paddr {
my $airespace = shift;
my $mac2ip = $airespace->airespace_sta_ip();
my $apethermac = $airespace->airespace_ap_ethermac();
my $ret = {};
foreach my $idx ( keys %$mac2ip ) {
next if ( $mac2ip->{ $idx } eq '0.0.0.0' );
my $mac = join( ":", map { sprintf "%02x", $_ } split /\./, $idx );
$ret->{$idx} = $mac;
}
foreach my $idx ( keys %$apethermac ) {
$ret->{$idx} = $apethermac->{$idx};
}
return $ret;
}
sub at_netaddr {
my $airespace = shift;
my $mac2ip = $airespace->airespace_sta_ip();
my $ap2ip = $airespace->airespace_ap_ip();
my $ret = {};
foreach my $idx ( keys %$mac2ip ) {
next if ( $mac2ip->{ $idx } eq '0.0.0.0' );
$ret->{$idx} = $mac2ip->{ $idx };
}
foreach my $idx ( keys %$ap2ip ) {
$ret->{$idx} = $ap2ip->{ $idx };
}
return $ret;
}
1;
__END__
@@ -1074,6 +1118,9 @@ switch.
Returns 00000011. Class emulates Layer 2 functionality for Thin APs through
proprietary MIBs.
=item $airespace->at_netaddr()
=item $airespace->at_paddr()
=item $airespace->serial()
(C<agentInventorySerialNumber>)

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
# Five data structures required by SNMP::Info
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
@@ -69,6 +69,10 @@ $VERSION = '2.00';
'c_vlan' => 'cdpCacheNativeVLAN',
'c_duplex' => 'cdpCacheDuplex',
'c_power' => 'cdpCachePowerConsumption',
'c_pri_mgmt_type'=> 'cdpCachePrimaryMgmtAddrType',
'c_pri_mgmt_addr'=> 'cdpCachePrimaryMgmtAddr',
'c_sec_mgmt_type'=> 'cdpCacheSecondaryMgmtAddrType',
'c_sec_mgmt_addr'=> 'cdpCacheSecondaryMgmtAddr',
);
%MUNGE = (

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%MIBS = (
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',

View File

@@ -39,13 +39,17 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex' );
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
%GLOBALS = ();
%FUNCS = ( 'cpeth_ent_phy' => 'cpeExtPsePortEntPhyIndex', );
%FUNCS = (
'cpeth_ent_phy' => 'cpeExtPsePortEntPhyIndex',
'peth_port_power' => 'cpeExtPsePortPwrConsumption',
);
%MUNGE = ();
@@ -69,6 +73,31 @@ sub peth_port_ifindex {
return $peth_port_ifindex;
}
# peth_port_neg_power uses the same index as the other peth_port_* tables.
# However, cdpCachePowerConsumption uses <ifIndex>.<neighbor>.
# Therefore, we have to invert peth_port_ifindex, to get to
# the index that is expected and the rest of the code can re-invert it.
sub peth_port_neg_power {
my $cpeth = shift;
my $partial = shift;
# Ignoring partial, since it's not easy to implement properly.
my $index = $cpeth->peth_port_ifindex();
my %inverse_index;
foreach my $i ( keys %$index ) {
$inverse_index{ $index->{$i} } = $i;
}
my $neg_power = $cpeth->cdpCachePowerConsumption();
my $peth_port_neg_power = {};
foreach my $i ( keys %$neg_power ) {
my( $ifIndex, $nbrIndex ) = split( /\./, $i );
if ( defined( $inverse_index{ $ifIndex } ) ) {
$peth_port_neg_power->{ $inverse_index{ $ifIndex } } = $neg_power->{ $i };
}
}
return $peth_port_neg_power;
}
1;
__END__
@@ -143,6 +172,22 @@ to a hash.
Maps the C<pethPsePortTable> to C<ifIndex> by way of the F<ENTITY-MIB>.
=item $poe->peth_port_power()
Power supplied by PoE ports, in milliwatts
("cpeExtPsePortPwrConsumption")
=back
=head2 CDP Port table
=over
=item $poe->peth_port_neg_power()
Power negotiated using CDP, in milliwats
("cdpCachePowerConsumption")
=back
=cut

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
@@ -159,7 +159,7 @@ sub i_duplex {
next if ( defined $partial and $iid !~ /^$partial$/ );
# Test for gigabit
if ( $p_duplex_cap->{$port} == 0 ) {
if ( $p_duplex_cap->{$port} && $p_duplex_cap->{$port} == 0 ) {
$i_duplex->{$iid} = 'full';
}
@@ -194,7 +194,7 @@ sub i_duplex_admin {
next if ( defined $partial and $iid !~ /^$partial$/ );
# Test for gigabit
if ( $p_duplex_cap->{$port} == 0 ) {
if ( $p_duplex_cap->{$port} && $p_duplex_cap->{$port} == 1 ) {
$i_duplex_admin->{$iid} = 'full';
}

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.06';
%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.
@@ -74,6 +76,7 @@ $VERSION = '2.00';
# OLD-CISCO-SYSTEM-MIB
'write_mem' => 'writeMem',
'rom_id' => 'romId',
);
%FUNCS = (
@@ -88,6 +91,10 @@ $VERSION = '2.00';
%MUNGE = ();
sub vendor {
return 'cisco';
}
sub os {
my $l2 = shift;
my $descr = $l2->description() || '';
@@ -96,6 +103,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 +149,69 @@ 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;
}
sub os_bin {
my $self = shift;
my $rom_id = $self->rom_id();
if ($rom_id =~ m/Version ([^,]+),/) {
return $1;
}
return;
}
@@ -214,7 +307,7 @@ Devices
=head1 AUTHOR
Max Baker
Eric Miller, Max Baker, Sam Stickland
=head1 SYNOPSIS
@@ -263,6 +356,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
@@ -287,14 +382,65 @@ Returns ios_cpu_5min() or cat_cpu5min(), whichever is available.
Returns mem_free() + mem_used()
=item $ciscostats->vendor()
'cisco'
=item $ciscostats->os()
Tries to parse if device is running IOS or CatOS from description()
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()
=item $ciscostats->os_bin()
Tries to parse ROMMON version from rom_id() string
=item $ciscostats->ios_cpu()
Current CPU usage in percent.

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.06';
@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.06';
%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.06';
%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.06';
%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.06';
%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.06';
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );

475
Info/IPv6.pm Normal file
View File

@@ -0,0 +1,475 @@
# SNMP::Info::IPv6
#
# Copyright (c) 2010 Jeroen van Ingen and 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 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::IPv6;
use strict;
use Exporter;
use SNMP::Info;
@SNMP::Info::IPv6::ISA = qw/SNMP::Info Exporter/;
@SNMP::Info::IPv6::EXPORT_OK = qw//;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE $METHOD/;
use constant {
IPMIB => 1,
CISCO => 2,
IPV6MIB => 3,
};
$VERSION = '2.06';
%MIBS = (
'IP-MIB' => 'ipv6InterfaceTableLastChange',
'IPV6-MIB' => 'ipv6IfTableLastChange',
'CISCO-IETF-IP-MIB' => 'cInetNetToMediaNetAddress',
);
%GLOBALS = ();
%FUNCS = (
'ip_n2p_phys_addr' => 'ipNetToPhysicalPhysAddress', # IP-MIB
'c_inet_phys_addr' => 'cInetNetToMediaPhysAddress', # CISCO-IETF-IP-MIB
'i6_n2p_phys_addr' => 'ipv6NetToMediaNetAddress', # IPV6-MIB
'ip_n2p_phys_type' => 'ipNetToPhysicalType', # IP-MIB
'c_inet_phys_type' => 'cInetNetToMediaType', # CISCO-IETF-IP-MIB
'i6_n2p_phys_type' => 'ipv6NetToMediaType', # IPV6-MIB
'ip_n2p_phys_state' => 'ipNetToPhysicalState', # IP-MIB
'c_inet_phys_state' => 'cInetNetToMediaState', # CISCO-IETF-IP-MIB
'i6_n2p_phys_state' => 'ipv6NetToMediaState', # IPV6-MIB
'ip_pfx_origin' => 'ipAddressPrefixOrigin', # IP-MIB
'c_pfx_origin' => 'cIpAddressPfxOrigin', # CISCO-IETF-IP-MIB
'ip_addr6_pfx' => 'ipAddressPrefix', # IP-MIB
'c_addr6_pfx' => 'cIpAddressPrefix', # CISCO-IETF-IP-MIB
'ip_addr6_index' => 'ipAddressIfIndex', # IP-MIBw
'c_addr6_index' => 'cIpAddressIfIndex', # CISCO-IETF-IP-MIB
'ip_addr6_type' => 'ipAddressType', # IP-MIB
'c_addr6_type' => 'cIpAddressType', # CISCO-IETF-IP-MIB
);
%MUNGE = (
'ip_n2p_phys_addr' => \&SNMP::Info::munge_mac,
'c_inet_phys_addr' => \&munge_physaddr,
'i6_n2p_phys_addr' => \&SNMP::Info::munge_mac,
);
sub ipv6_n2p_mac {
my $info = shift;
my $return;
my $phys_addr = &_test_methods( $info, {
ip_n2p_phys_addr => IPMIB,
c_inet_phys_addr => CISCO,
i6_n2p_phys_addr => IPV6MIB,
});
return unless defined $phys_addr;
foreach my $row (keys %$phys_addr) {
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
if ($info::METHOD == IPV6MIB) {
# IPV6-MIB doesn't include the addrtype in the index;
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
$addrtype = 2;
}
if (($addrtype == 2) && (defined $phys_addr->{$row})) { # IPv6
$return->{$row} = substr($phys_addr->{$row}, 0, 17);
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_n2p_addr {
my $info = shift;
my $return;
my $net_addr = &_test_methods( $info, {
ip_n2p_phys_addr => IPMIB,
c_inet_phys_addr => CISCO,
i6_n2p_phys_addr => IPV6MIB,
});
return unless defined $net_addr;
foreach my $row (keys %$net_addr) {
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
if ($info::METHOD == IPV6MIB) {
# IPV6-MIB doesn't include the addrtype in the index;
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
$addrtype = 2;
}
if ($addrtype == 2) { # IPv6
my $v6_packed = pack("C*", split(/\./, $v6addr));
$v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
$return->{$row} = $v6addr;
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_n2p_if {
my $info = shift;
my $return;
my $phys_addr = &_test_methods( $info, {
ip_n2p_phys_addr => IPMIB,
c_inet_phys_addr => CISCO,
i6_n2p_phys_addr => IPV6MIB,
});
return unless defined $phys_addr;
foreach my $row (keys %$phys_addr) {
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
if ($info::METHOD == IPV6MIB) {
# IPV6-MIB doesn't include the addrtype in the index;
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
$addrtype = 2;
}
if ($addrtype == 2) { # IPv6
$return->{$row} = $ifindex;
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_n2p_type {
my $info = shift;
my $return;
my $phys_type = &_test_methods( $info, {
ip_n2p_phys_type => IPMIB,
c_inet_phys_type => CISCO,
i6_n2p_phys_type => IPV6MIB,
});
return unless defined $phys_type;
foreach my $row (keys %$phys_type) {
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
if ($info::METHOD == IPV6MIB) {
# IPV6-MIB doesn't include the addrtype in the index;
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
$addrtype = 2;
}
if ($addrtype == 2) { # IPv6
$return->{$row} = $phys_type->{$row};
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_n2p_state {
my $info = shift;
my $return;
my $phys_state = &_test_methods( $info, {
ip_n2p_phys_state => IPMIB,
c_inet_phys_state => CISCO,
i6_n2p_phys_state => IPV6MIB,
});
return unless defined $phys_state;
foreach my $row (keys %$phys_state) {
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
if ($info::METHOD == IPV6MIB) {
# IPV6-MIB doesn't include the addrtype in the index;
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
$addrtype = 2;
}
if ($addrtype == 2) { # IPv6
$return->{$row} = $phys_state->{$row};
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_index {
my $info = shift;
my $return;
my $ipv6_index = &_test_methods( $info, {
ip_addr6_index => IPMIB,
c_addr6_index => CISCO,
});
return unless defined $ipv6_index;
foreach my $row (keys %$ipv6_index){
if ($row =~ /^(\d+)\.([\d\.]+)$/) {
my $addrtype = $1; my $v6addr = $2;
if ($addrtype == 2) { # IPv6
$return->{$row} = $ipv6_index->{$row};
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_type {
my $info = shift;
my $return;
my $ipv6_type = &_test_methods( $info, {
ip_addr6_type => IPMIB,
c_addr6_type => CISCO,
});
return unless defined $ipv6_type;
foreach my $row (keys %$ipv6_type){
if ($row =~ /^(\d+)\.([\d\.]+)$/) {
my $addrtype = $1; my $v6addr = $2;
if ($addrtype == 2) { # IPv6
$return->{$row} = $ipv6_type->{$row};
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_pfx_origin {
my $info = shift;
my $return;
my $ipv6_pfx_origin = &_test_methods( $info, {
ip_pfx_origin => IPMIB,
c_pfx_origin => CISCO,
});
return unless defined $ipv6_pfx_origin;
foreach my $row (keys %$ipv6_pfx_origin){
if ($row =~ /^(\d+)\.(\d+)\.([\d\.]+)\.(\d+)$/) {
my $ifindex = $1; my $type = $2; my $pfx = $3; my $len = $4;
if ($type == 2) { # IPv6
$return->{$row} = $ipv6_pfx_origin->{$row};
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_addr_prefix {
my $info = shift;
my $return;
my $ipv6_addr_prefix = &_test_methods( $info, {
ip_addr6_pfx => IPMIB,
c_addr6_pfx => CISCO,
});
return unless defined $ipv6_addr_prefix;
foreach my $row (keys %$ipv6_addr_prefix){
if ($row =~ /^(\d+)\.[\d\.]+$/) {
my $type = $1;
if ($type == 2) { # IPv6
# Remove the OID part from the value
my $val = $ipv6_addr_prefix->{$row};
if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
$val = $1;
$return->{$row} = $val;
}
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub _method_used {
my $info = shift;
my $return = 'none of the MIBs';
if (defined $info::METHOD) {
if ($info::METHOD eq IPMIB) {
$return = 'IP-MIB';
} elsif ($info::METHOD eq IPV6MIB) {
$return = 'IPV6-MIB';
} elsif ($info::METHOD eq CISCO) {
$return = 'CISCO-IETF-IP-MIB';
}
}
return $return;
}
sub _test_methods {
my $info = shift;
my $test = shift;
my $return = {};
foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
$return = $info->$method || {};
if (scalar keys %$return) {
$info::METHOD = $test->{$method};
last;
}
}
return $return;
}
sub _my_sub_name {
my @callinfo = caller(1);
return $callinfo[3];
}
sub munge_physaddr {
my $addr = shift;
return unless defined $addr;
return unless length $addr;
$addr = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $addr ) );
return $addr;
}
1;
__END__
=head1 NAME
SNMP::Info::IPv6 - SNMP Interface for obtaining IPv6 addresses and IPv6
address mappings
=head1 AUTHOR
Jeroen van Ingen and Carlos Vicente
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $info = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $info->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
The SNMP::Info::IPv6 class implements functions to for mapping IPv6 addresses
to MAC addresses, interfaces and more. It will use data from the IP-MIB, IPV6-MIB
or the CISCO-IETF-IP-MIB, whichever is supported by the device.
This class is inherited by Info::Layer3 to provide IPv6 node tracking across
device classes.
For debugging purposes you can call this class directly as you would
SNMP::Info
my $info = new SNMP::Info::IPv6 (...);
=head2 Inherited Classes
none.
=head2 Required MIBs
=over
=item F<IP-MIB>
=item F<IPV6-MIB>
=item F<CISCO-IETF-IP-MIB>
=back
=head1 GLOBALS
none.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Internet Address Table
=over
=item $info->ipv6_n2p_addr()
=item $info->ipv6_n2p_if()
=item $info->ipv6_n2p_mac()
=item $info->ipv6_n2p_state()
=item $info->ipv6_n2p_type()
=item $info->ipv6_index()
Maps an IPv6 address to an interface C<ifIndex>
=item $info->ipv6_type()
Maps an IPv6 address to its type (unicast, anycast, etc.)
=item $info->ipv6_pfx_origin()
Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
=item $info->ipv6_addr_prefix()
Maps IPv6 addresses with their prefixes
=back
=head2 Internet Address Translation Table
=over
=item $info->c_inet_phys_address()
Maps an address of type C<cInetNetToMediaNetAddressType> on interface C<ifIndex> to a physical address.
=back
=head1 MUNGES
=over
=item munge_physaddr()
Takes an octet stream (HEX-STRING) and returns a colon separated ASCII hex
string.
=back
=cut

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
# 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.06';
# 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.06';
%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.06';
%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.06';
%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.06';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -41,11 +41,13 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
%SNMP::Info::CDP::MIBS, %SNMP::Info::Airespace::MIBS,
'AIRESPACE-SWITCHING-MIB' => 'agentInterfaceVlanId',
'CISCO-LWAPP-DOT11-CLIENT-MIB' => 'cldcClientCurrentTxRateSet',
);
%GLOBALS = (
@@ -56,11 +58,26 @@ $VERSION = '2.00';
%FUNCS = (
%SNMP::Info::FUNCS, %SNMP::Info::Bridge::FUNCS,
%SNMP::Info::CDP::FUNCS, %SNMP::Info::Airespace::FUNCS,
# This needs to be cleaned up, but for now we pretend to
# have the CISCO-DOT11-MIB for signal strengths, etc.
'cd11_sigstrength' => 'bsnMobileStationRSSI', # kinda
'cd11_sigqual' => 'bsnMobileStationSnr', # kinda
'cd11_rxbyte' => 'bsnMobileStationBytesReceived',
'cd11_txbyte' => 'bsnMobileStationBytesSent',
'cd11_rxpkt' => 'bsnMobileStationPacketsReceived',
'cd11_txpkt' => 'bsnMobileStationPacketsSent',
'cd11_txrate' => 'cldcClientCurrentTxRateSet',
'cd11_rateset' => 'cldcClientDataRateSet',
);
%MUNGE = (
%SNMP::Info::MUNGE, %SNMP::Info::Bridge::MUNGE,
%SNMP::Info::CDP::MUNGE, %SNMP::Info::Airespace::MUNGE,
'cd11_rxpkt' => \&munge_64bits,
'cd11_txpkt' => \&munge_64bits,
'cd11_txrate' => \&munge_cd11_txrate,
'cd11_rateset' => \&munge_cd11_rateset,
);
sub os {
@@ -79,6 +96,42 @@ sub model {
return $model;
}
# vlan:
# AIRESPACE-SWITCHING-MIB::agentInterfaceVlanId
sub cd11_mac {
my $airespace = shift;
my $cd11_sigstrength = $airespace->cd11_sigstrength();
my $ret = {};
foreach my $idx ( keys %$cd11_sigstrength ) {
my $mac = join( ":", map { sprintf "%02x", $_ } split /\./, $idx );
$ret->{$idx} = $mac
}
return $ret;
}
sub munge_cd11_txrate {
my $rate = shift;
if ( $rate ) {
return [ $rate * 1.0 ];
} else {
return [ 0.0 ];
}
}
sub munge_cd11_rateset {
my $rates = shift;
return [ map { $_ * 1.0 } split /,/, $rates ];
}
sub munge_64bits {
# The controller sometimes hands off a ridiculous value for packets.
# Just truncate it to 32 bits.
my $value = shift;
return $value & 0xffffffff;
}
1;
__END__
@@ -181,14 +234,14 @@ See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
These are methods that return tables of information in the form of a reference
to a hash.
=over
=item cd11_mac()
=back
=head2 Overrides
=over
=item None
=back
=head2 Table Methods imported from SNMP::Info::Airespace
See documentation in L<SNMP::Info::Airespace/"TABLE METHODS"> for details.
@@ -201,4 +254,16 @@ See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
=head1 MUNGES
=over
=item munge_64bits()
=item munge_cd11_rateset()
=item munge_cd11_txrate()
=back
=cut

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.06';
%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,
);
@@ -189,7 +193,7 @@ sub _aironet_breakout_dot11idx {
sub fw_mac {
my $aironet = shift;
return qb_fw_mac($aironet) unless _aironet_special($aironet);
return $aironet->qb_fw_mac() unless _aironet_special($aironet);
my $c_dot11subif = $aironet->c_dot11subif();
my $fw_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.06';
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
# 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.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
@@ -82,20 +82,26 @@ sub os {
my $descr = $baystack->description();
my $model = $baystack->model();
if (( defined $model
and $model
=~ /(325|420|425|470|460|BPS|2500|3510|4524|4526|4548|4550|5510|5520|5530)/
)
and ( defined $descr and $descr =~ m/SW:v[3-5]/i )
)
{
return 'boss';
}
if ( ( defined $descr and $descr =~ /Business Ethernet Switch.*SW:v/i ) )
{
return 'bes';
}
return 'baystack';
if (
(
(defined $model and $model =~ /(420|425|BPS)/ )
and
(defined $descr and $descr =~ m/SW:v[1-2]/i )
)
or
(
(defined $model and $model =~ /(410|450|380)/ )
)
)
{
return 'baystack';
}
return 'boss';
}
sub os_bin {
@@ -210,14 +216,23 @@ sub index_factor {
my $baystack = shift;
my $model = $baystack->model();
my $os = $baystack->os();
my $os_ver = $baystack->os_ver();
my $op_mode = $baystack->ns_op_mode();
$op_mode = 'pure' unless defined $op_mode;
if ( $os_ver =~ m/^(\d+)\./ ) {
$os_ver = $1;
} else {
$os_ver = 1;
}
my $index_factor = 32;
$index_factor = 64
if ( ( defined $model and $model =~ /(470)/ )
or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
$index_factor = 128
if ( ( defined $model and $model =~ /(5[56]\d\d)/ )
and ( $os_ver >= 6 ) );
return $index_factor;
}

View File

@@ -46,7 +46,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
@@ -251,6 +251,18 @@ sub i_vlan_membership {
return $i_vlan_membership;
}
sub bp_index {
my $c1900 = shift;
my $partial = shift;
my $if_index = $c1900->i_index($partial);
my $index = $c1900->orig_bp_index($partial) || {};
foreach my $iid ( keys %$if_index ) {
$index->{$iid} = $iid if(!defined $index->{$iid});
}
return $index;
}
1;
__END__
@@ -432,6 +444,13 @@ bridge group IDs.
print "Port: $port VLAN: $vlan\n";
}
=item $c1900->bp_index()
Returns a bp_index that contains the original bp_index entries and extra
entries for those interfaces listed in if_index, as some C1900 devices do not
return complete bp_indexes.
=back
=head2 F<STAND-ALONE-ETHERNET-SWITCH-MIB> Switch Port Table Entries:

View File

@@ -47,7 +47,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%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.06';
%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.06';
%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.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -55,12 +55,13 @@ $VERSION = '2.00';
%SNMP::Info::CDP::MIBS,
'RFC1271-MIB' => 'logDescription',
'HP-ICF-OID' => 'hpSwitch4000',
'HP-VLAN' => 'hpVlanMemberIndex',
'STATISTICS-MIB' => 'hpSwitchCpuStat',
'NETSWITCH-MIB' => 'hpMsgBufFree',
'CONFIG-MIB' => 'hpSwitchConfig',
'SEMI-MIB' => 'hpHttpMgSerialNumber',
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
'SEMI-MIB' => 'hpHttpMgSerialNumber',
);
%GLOBALS = (
@@ -75,9 +76,10 @@ $VERSION = '2.00';
'mem_free' => 'hpGlobalMemFreeBytes.1',
'mem_used' => 'hpGlobalMemAllocBytes.1',
'os_version' => 'hpSwitchOsVersion.0',
'os_version2' => 'hpHttpMgVersion.0',
'os_bin' => 'hpSwitchRomVersion.0',
'mac' => 'hpSwitchBaseMACAddress.0',
'hp_vlans' => 'hpVlanNumber',
'rstp_ver' => 'hpicfBridgeRstpForceVersion',
);
%FUNCS = (
@@ -85,104 +87,129 @@ $VERSION = '2.00';
%SNMP::Info::MAU::FUNCS,
%SNMP::Info::LLDP::FUNCS,
%SNMP::Info::CDP::FUNCS,
'bp_index2' => 'dot1dBasePortIfIndex',
'i_type2' => 'ifType',
# RFC1271
'l_descr' => 'logDescription',
# HP-VLAN-MIB
'hp_v_index' => 'hpVlanDot1QID',
'hp_v_name' => 'hpVlanIdentName',
'hp_v_state' => 'hpVlanIdentState',
'hp_v_type' => 'hpVlanIdentType',
'hp_v_status' => 'hpVlanIdentStatus',
'hp_v_mac' => 'hpVlanAddrPhysAddress',
'hp_v_if_index' => 'hpVlanMemberIndex',
'hp_v_if_tag' => 'hpVlanMemberTagged2',
# CONFIG-MIB::hpSwitchPortTable
'hp_duplex' => 'hpSwitchPortEtherMode',
'hp_duplex_admin' => 'hpSwitchPortFastEtherMode',
'vendor_i_type' => 'hpSwitchPortType',
# HP-ICF-CHASSIS
'hp_s_oid' => 'hpicfSensorObjectId',
'hp_s_name' => 'hpicfSensorDescr',
'hp_s_status' => 'hpicfSensorStatus',
# HP-ICF-POE-MIB
'peth_port_power' => 'hpicfPoePethPsePortPower',
);
%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, reverse sorted by common model name (sort -k2 -r)
# Potential sources for model information: http://www.hp.com/rnd/software/switches.htm or HP-ICF-OID MIB
%MODEL_MAP = (
'J4093A' => '2424M',
'J4110A' => '8000M',
'J4120A' => '1600M',
'J4121A' => '4000M',
'J4122A' => '2400M',
'J4122B' => '2424M',
'J4138A' => '9308M',
'J4139A' => '9304M',
'J4812A' => '2512',
'J4813A' => '2524',
'J4815A' => '3324XL',
'J4819A' => '5308XL',
'J4840A' => '6308M-SX',
'J4841A' => '6208M-SX',
'J4850A' => '5304XL',
'J4851A' => '3124',
'J4865A' => '4108GL',
'J4874A' => '9315M',
'J4887A' => '4104GL',
'J4899A' => '2650',
'J4899B' => '2650-CR',
'J4900A' => '2626',
'J4900B' => '2626-CR',
'J4902A' => '6108',
'J4903A' => '2824',
'J4904A' => '2848',
'J4905A' => '3400cl-24G',
'J4906A' => '3400cl-48G',
'J8130A' => 'WAP-420-NA',
'J8131A' => 'WAP-420-WW',
'J8130A' => 'WAP-420-NA',
'J8133A' => 'AP520WL',
'J8164A' => '2626-PWR',
'J8165A' => '2650-PWR',
'J8433A' => 'CX4-6400cl-6XG',
'J8474A' => 'MF-6400cl-6XG',
'J8680A' => '9608sl',
'J8692A' => '3500yl-24G-PWR',
'J8693A' => '3500yl-48G-PWR',
'J8697A' => '5406zl',
'J8698A' => '5412zl',
'J8718A' => '5404yl',
'J8719A' => '5408yl',
'J8770A' => '4204vl',
'J8771A' => '4202vl-48G',
'J8772A' => '4202vl-72',
'J8773A' => '4208vl',
'J8762A' => '2600-8-PWR',
'J8680A' => '9408sl',
'J9091A' => '8212zl',
'J9475A' => '8206zl',
'J9265A' => '6600ml-24XG',
'J9264A' => '6600ml-24G-4XG',
'J9263A' => '6600ml-24G',
'J9452A' => '6600-48G-4XG',
'J9451A' => '6600-48G',
'J8474A' => '6410cl-6XG',
'J8433A' => '6400cl-6XG',
'J8992A' => '6200yl-24G',
'J9019A' => '2510-24A',
'J9020A' => '2510-48A',
'J9021A' => '2810-24G',
'J9022A' => '2810-48G',
'J9028A' => '1800-24G',
'J9029A' => '1800-8G',
'J4902A' => '6108',
'J8698A' => '5412zl',
'J8719A' => '5408yl',
'J8697A' => '5406zl',
'J8718A' => '5404yl',
'J4819A' => '5308XL',
'J4850A' => '5304XL',
'J8773A' => '4208vl',
'J8770A' => '4204vl',
'J8772A' => '4202vl-72',
'J9032A' => '4202vl-68G',
'J9031A' => '4202vl-68',
'J8771A' => '4202vl-48G',
'J4865A' => '4108GL',
'J4887A' => '4104GL',
'J8693A' => '3500yl-48G-PWR',
'J8692A' => '3500yl-24G-PWR',
'J9473A' => '3500-48-PoE',
'J9472A' => '3500-48',
'J9471A' => '3500-24-PoE',
'J9470A' => '3500-24',
'J4906A' => '3400cl-48G',
'J4905A' => '3400cl-24G',
'J4815A' => '3324XL',
'J4851A' => '3124',
'J9562A' => '2915-8G-PoE',
'J9148A' => '2910al-48G-PoE+',
'J9147A' => '2910al-48G',
'J9146A' => '2910al-24G-PoE+',
'J9145A' => '2910al-24G',
'J9050A' => '2900-48G',
'J9049A' => '2900-24G',
'J9032A' => '4202vl-68G',
'J9091A' => '8212zl',
'J4904A' => '2848',
'J4903A' => '2824',
'J9022A' => '2810-48G',
'J9021A' => '2810-24G',
'J8165A' => '2650-PWR',
'J4899B' => '2650-CR',
'J4899C' => '2650C',
'J4899A' => '2650',
'J8164A' => '2626-PWR',
'J4900B' => '2626-CR',
'J4900C' => '2626C',
'J4900A' => '2626',
'J9565A' => '2615-8-PoE',
'J9089A' => '2610-48-PWR',
'J9088A' => '2610-48',
'J9087A' => '2610-24-PWR',
'J9086A' => '2610-24/12PWR',
'J9085A' => '2610-24',
'J8762A' => '2600-8-PWR',
'J4813A' => '2524',
'J9137A' => '2520-8-PoE',
'J9138A' => '2520-24-PoE',
'J9298A' => '2520G-8-PoE',
'J9299A' => '2520G-24-PoE',
'J4812A' => '2512',
'J9280A' => '2510G-48',
'J9279A' => '2510G-24',
'J9020A' => '2510-48A',
'J9019B' => '2510-24B',
'J9019A' => '2510-24A',
'J4818A' => '2324',
'J4817A' => '2312',
'J9449A' => '1810G-8',
'J9450A' => '1810G-24',
'J9029A' => '1800-8G',
'J9028A' => '1800-24G',
);
# Method Overrides
sub stp_ver {
my $hp = shift;
return $hp->rstp_ver() || $hp->SUPER::stp_ver();
}
sub cpu {
my $hp = shift;
return $hp->hp_cpu();
@@ -199,7 +226,7 @@ sub os {
sub os_ver {
my $hp = shift;
my $os_version = $hp->os_version();
my $os_version = $hp->os_version() || $hp->os_version2();
return $os_version if defined $os_version;
# Some older ones don't have this value,so we cull it from the description
@@ -210,6 +237,16 @@ sub os_ver {
return;
}
# Regular managed ProCurve switches have the serial num in entity mib,
# the web-managed models in the semi mib (hphttpmanageable).
sub serial {
my $hp = shift;
my $serial = $hp->serial1() || $hp->serial2() || undef;;
return $serial;
}
# Lookup model number, and translate the part number to the common number
sub model {
my $hp = shift;
@@ -223,15 +260,6 @@ sub model {
return defined $MODEL_MAP{$model} ? $MODEL_MAP{$model} : $model;
}
# Some have the serial in entity mib, some have it in SEMI-MIB::hphttpmanageable
sub serial {
my $hp = shift;
my $serial = $hp->serial1() || $hp->serial2() || undef;
return $serial;
}
sub interfaces {
my $hp = shift;
my $interfaces = $hp->i_index();
@@ -371,116 +399,7 @@ sub _sensor {
return $result;
}
# Bridge MIB does not map Bridge Port to ifIndex correctly on all models
sub bp_index {
my $hp = shift;
my $partial = shift;
my $if_index = $hp->i_index($partial);
my $model = $hp->model();
my $bp_index = $hp->bp_index2($partial);
unless ( defined $model and $model =~ /(1600|2424|4000|8000)/ ) {
return $bp_index;
}
my %mod_bp_index;
foreach my $iid ( keys %$if_index ) {
$mod_bp_index{$iid} = $iid;
}
return \%mod_bp_index;
}
# VLAN methods. Newer HPs use Q-BRIDGE, older use proprietary MIB. Use
# Q-BRIDGE if available.
sub v_index {
my $hp = shift;
my $partial = shift;
# Newer devices
my $q_index = $hp->SUPER::v_index($partial);
if ( defined $q_index and scalar( keys %$q_index ) ) {
return $q_index;
}
# Older devices
return $hp->hp_v_index($partial);
}
sub v_name {
my $hp = shift;
my $partial = shift;
# Newer devices
my $q_name = $hp->SUPER::v_name($partial);
if ( defined $q_name and scalar( keys %$q_name ) ) {
return $q_name;
}
# Older devices
return $hp->hp_v_name($partial);
}
sub i_vlan {
my $hp = shift;
# Newer devices use Q-BRIDGE-MIB
my $qb_i_vlan = $hp->SUPER::i_vlan();
if ( defined $qb_i_vlan and scalar( keys %$qb_i_vlan ) ) {
return $qb_i_vlan;
}
# HP4000 ... get it from HP-VLAN
# the hpvlanmembertagged2 table has an entry in the form of
# vlan.interface = /untagged/no/tagged/auto
my $i_vlan = {};
my $hp_v_index = $hp->hp_v_index();
my $hp_v_if_tag = $hp->hp_v_if_tag();
foreach my $row ( keys %$hp_v_if_tag ) {
my ( $index, $if ) = split( /\./, $row );
my $tag = $hp_v_if_tag->{$row};
my $vlan = $hp_v_index->{$index};
next unless ( defined $tag and $tag =~ /untagged/ );
$i_vlan->{$if} = $vlan if defined $vlan;
}
return $i_vlan;
}
sub i_vlan_membership {
my $hp = shift;
# Newer devices use Q-BRIDGE-MIB
my $qb_i_vlan = $hp->SUPER::i_vlan_membership();
if ( defined $qb_i_vlan and scalar( keys %$qb_i_vlan ) ) {
return $qb_i_vlan;
}
# Older get it from HP-VLAN
my $i_vlan_membership = {};
my $hp_v_index = $hp->hp_v_index();
my $hp_v_if_tag = $hp->hp_v_if_tag();
foreach my $row ( keys %$hp_v_if_tag ) {
my ( $index, $if ) = split( /\./, $row );
my $tag = $hp_v_if_tag->{$row};
my $vlan = $hp_v_index->{$index};
next unless ( defined $tag );
next if ( $tag eq 'no' );
push( @{ $i_vlan_membership->{$if} }, $vlan );
}
return $i_vlan_membership;
}
# Use CDP and/or LLDP
sub hasCDP {
my $hp = shift;
@@ -553,7 +472,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 +488,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;
@@ -627,6 +558,75 @@ sub peth_port_ifindex {
return $peth_port_ifindex;
}
sub set_i_vlan {
my $hp = shift;
my $rv;
my $qb_i_vlan = $hp->qb_i_vlan_t();
if (defined $qb_i_vlan and scalar(keys %$qb_i_vlan)){
my $vlan = shift;
my $iid = shift;
my $qb_v_egress = $hp->qb_v_egress();
if (defined $qb_v_egress and scalar($qb_v_egress->{$vlan})) {
# store current untagged VLAN to remove it from the port list later
my $old_untagged = $qb_i_vlan->{$iid};
# set new untagged / native VLAN
$rv = $hp->set_qb_i_vlan($vlan, $iid);
# If change is successful, the old native VLAN will now be a tagged VLAN on the port. This is generally not what we want.
# We'll have to remove this VLAN from the "egress list" on the port.
if (defined $rv and $old_untagged != $vlan) {
if (defined $old_untagged and defined $qb_v_egress and scalar($qb_v_egress->{$vlan})){
# First, get the egress list of the old native VLAN (arrayref structure)
my $egressports = $qb_v_egress->{$old_untagged};
# Since arrays are zero-based, we have to change the element at Index - 1
$egressports->[$iid-1] = "0";
# After changing, pack the array into a binary structure (expected by set_qb_v_egress) and set the new value on the device.
my $new_egresslist = pack("B*", join('', @$egressports));
$rv = $hp->set_qb_v_egress($new_egresslist, $old_untagged);
}
}
} else {
$hp->error_throw(sprintf("Requested VLAN %s doesn't seem to exist on device...", $vlan));
}
}
return $rv;
}
sub set_i_vlan_tagged {
my $hp = shift;
my $rv;
my $qb_i_vlan = $hp->qb_i_vlan_t();
if (defined $qb_i_vlan and scalar(keys %$qb_i_vlan)){
my $vlan = shift;
my $iid = shift;
my $qb_v_egress = $hp->qb_v_egress();
if (defined $qb_v_egress and scalar($qb_v_egress->{$vlan})) {
# First, get the egress list of the VLAN we want to add to the port.
my $egressports = $qb_v_egress->{$vlan};
# Since arrays are zero-based, we have to change the element at Index - 1
$egressports->[$iid-1] = "1";
# After changing, pack the array into a binary structure (expected by set_qb_v_egress) and set the new value on the device.
my $new_egresslist = pack("B*", join('', @$egressports));
$rv = $hp->set_qb_v_egress($new_egresslist, $vlan);
return $rv;
} else {
$hp->error_throw(sprintf("Requested VLAN %s doesn't seem to exist on device...", $vlan));
}
}
}
1;
__END__
@@ -689,8 +689,6 @@ Included in V2 mibs from Cisco
=item F<HP-ICF-OID>
=item F<HP-VLAN>
(this MIB new with SNMP::Info 0.8)
=item F<STATISTICS-MIB>
@@ -699,9 +697,13 @@ Included in V2 mibs from Cisco
=item F<CONFIG-MIB>
=item F<HP-ICF-BRIDGE>
=item F<HP-ICF-POE-MIB>
=back
The last five MIBs listed are from HP and can be found at
The last four MIBs listed are from HP and can be found at
L<http://www.hp.com/rnd/software> or
L<http://www.hp.com/rnd/software/MIBs.htm>
@@ -742,66 +744,84 @@ Returns bytes of used memory
Returns the model number of the HP Switch. Will translate between the HP Part
number and the common model number with this map :
%MODEL_MAP = (
'J4093A' => '2424M',
'J4110A' => '8000M',
'J4120A' => '1600M',
'J4121A' => '4000M',
'J4122A' => '2400M',
'J4122B' => '2424M',
'J4138A' => '9308M',
'J4139A' => '9304M',
'J4812A' => '2512',
'J4813A' => '2524',
'J4815A' => '3324XL',
'J4819A' => '5308XL',
'J4840A' => '6308M-SX',
'J4841A' => '6208M-SX',
'J4850A' => '5304XL',
'J4851A' => '3124',
'J4865A' => '4108GL',
'J4874A' => '9315M',
'J4887A' => '4104GL',
'J4899A' => '2650',
'J4899B' => '2650-CR',
'J4900A' => '2626',
'J4900B' => '2626-CR',
'J4902A' => '6108',
'J4903A' => '2824',
'J4904A' => '2848',
'J4905A' => '3400cl-24G',
'J4906A' => '3400cl-48G',
'J8130A' => 'WAP-420-NA',
'J8131A' => 'WAP-420-WW',
'J8133A' => 'AP520WL',
'J8164A' => '2626-PWR',
'J8165A' => '2650-PWR',
'J8433A' => 'CX4-6400cl-6XG',
'J8474A' => 'MF-6400cl-6XG',
'J8680A' => '9608sl',
'J8692A' => '3500yl-24G-PWR',
'J8693A' => '3500yl-48G-PWR',
'J8697A' => '5406zl',
'J8698A' => '5412zl',
'J8718A' => '5404yl',
'J8719A' => '5408yl',
'J8770A' => '4204vl',
'J8771A' => '4202vl-48G',
'J8772A' => '4202vl-72',
'J8773A' => '4208vl',
'J8762A' => '2600-8-PWR',
'J8992A' => '6200yl-24G',
'J9019A' => '2510-24A',
'J9020A' => '2510-48A',
'J9021A' => '2810-24G',
'J9022A' => '2810-48G',
'J9028A' => '1800-24G',
'J9029A' => '1800-8G',
'J9050A' => '2900-48G',
'J9049A' => '2900-24G',
'J9032A' => '4202vl-68G',
'J9091A' => '8212zl',
);
%MODEL_MAP = (
'J8131A' => 'WAP-420-WW',
'J8130A' => 'WAP-420-NA',
'J8133A' => 'AP520WL',
'J8680A' => '9408sl',
'J9091A' => '8212zl',
'J9475A' => '8206zl',
'J9265A' => '6600ml-24XG',
'J9264A' => '6600ml-24G-4XG',
'J9263A' => '6600ml-24G',
'J9452A' => '6600-48G-4XG',
'J9451A' => '6600-48G',
'J8474A' => '6410cl-6XG',
'J8433A' => '6400cl-6XG',
'J8992A' => '6200yl-24G',
'J4902A' => '6108',
'J8698A' => '5412zl',
'J8719A' => '5408yl',
'J8697A' => '5406zl',
'J8718A' => '5404yl',
'J4819A' => '5308XL',
'J4850A' => '5304XL',
'J8773A' => '4208vl',
'J8770A' => '4204vl',
'J8772A' => '4202vl-72',
'J9032A' => '4202vl-68G',
'J9031A' => '4202vl-68',
'J8771A' => '4202vl-48G',
'J4865A' => '4108GL',
'J4887A' => '4104GL',
'J8693A' => '3500yl-48G-PWR',
'J8692A' => '3500yl-24G-PWR',
'J9473A' => '3500-48-PoE',
'J9472A' => '3500-48',
'J9471A' => '3500-24-PoE',
'J9470A' => '3500-24',
'J4906A' => '3400cl-48G',
'J4905A' => '3400cl-24G',
'J4815A' => '3324XL',
'J4851A' => '3124',
'J9148A' => '2910al-48G-PoE+',
'J9147A' => '2910al-48G',
'J9146A' => '2910al-24G-PoE+',
'J9145A' => '2910al-24G',
'J9050A' => '2900-48G',
'J9049A' => '2900-24G',
'J4904A' => '2848',
'J4903A' => '2824',
'J9022A' => '2810-48G',
'J9021A' => '2810-24G',
'J8165A' => '2650-PWR',
'J4899B' => '2650-CR',
'J4899C' => '2650C',
'J4899A' => '2650',
'J8164A' => '2626-PWR',
'J4900B' => '2626-CR',
'J4900C' => '2626C',
'J4900A' => '2626',
'J9089A' => '2610-48-PWR',
'J9088A' => '2610-48',
'J9087A' => '2610-24-PWR',
'J9086A' => '2610-24/12PWR',
'J9085A' => '2610-24',
'J8762A' => '2600-8-PWR',
'J4813A' => '2524',
'J9137A' => '2520-8-PoE',
'J9138A' => '2520-24-PoE',
'J4812A' => '2512',
'J9280A' => '2510G-48',
'J9279A' => '2510G-24',
'J9020A' => '2510-48A',
'J9019B' => '2510-24B',
'J9019A' => '2510-24A',
'J4818A' => '2324',
'J4817A' => '2312',
'J9029A' => '1800-8G',
'J9028A' => '1800-24G',
);
=item $hp->os()
@@ -844,6 +864,16 @@ Power supply 1 status
Power supply 2 status
=item $hp->peth_port_power()
Power supplied by PoE ports, in milliwatts
("hpicfPoePethPsePortPower")
=item $hp->stp_ver()
Returns what version of STP the device is running.
("hpicfBridgeRstpForceVersion" with fallback to inherited stp_ver())
=back
=head2 Globals imported from SNMP::Info::Layer2
@@ -879,53 +909,14 @@ Returns reference to map of IIDs to current link duplex.
Returns reference to hash of IIDs to admin duplex setting.
=item $hp->vendor_i_type()
Returns reference to hash of IIDs to HP specific port type (hpSwitchPortType).
=item $hp->i_name()
Crosses i_name() with $hp->e_name() using $hp->e_port() and i_alias()
=item $hp->i_vlan()
Returns a mapping between C<ifIndex> and the PVID (default VLAN) or untagged
port when using F<HP-VLAN>.
Looks in F<Q-BRIDGE-MIB> first (L<SNMP::Info::Bridge/"TABLE METHODS">) and for
older devices looks in F<HP-VLAN>.
=item $hp->i_vlan_membership()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the egress list for the port.
It is the union of tagged, untagged, and auto ports when using F<HP-VLAN>.
Looks in F<Q-BRIDGE-MIB> first (L<SNMP::Info::Bridge/"TABLE METHODS">) and for
older devices looks in F<HP-VLAN>.
Example:
my $interfaces = $hp->interfaces();
my $vlans = $hp->i_vlan_membership();
foreach my $iid (sort keys %$interfaces) {
my $port = $interfaces->{$iid};
my $vlan = join(',', sort(@{$vlans->{$iid}}));
print "Port: $port VLAN: $vlan\n";
}
=item $hp->v_index()
Returns VLAN IDs
=item $hp->v_name()
Returns VLAN names
=item $hp->bp_index()
Returns reference to hash of bridge port table entries map back to interface
identifier (iid)
Returns (C<ifIndex>) for both key and value for 1600, 2424, 4000, and 8000
models since they seem to have problems with F<BRIDGE-MIB>
=item $hp->peth_port_ifindex()
Returns reference to hash of power Ethernet port table entries map back to
@@ -992,4 +983,27 @@ 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
=head1 SET METHODS
These are methods that provide SNMP set functionality for overridden methods
or provide a simpler interface to complex set operations. See
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
operations.
=over
=item set_i_vlan()
=item set_i_vlan_tagged()
=cut

721
Info/Layer2/HP4000.pm Normal file
View File

@@ -0,0 +1,721 @@
# SNMP::Info::Layer2::HP4000 - SNMP Interface to older HP ProCurve Switches (1600, 2400, 2424M, 4000 and 8000)
#
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
#
# Copyright (c) 2002,2003 Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::HP4000;
use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::MAU;
use SNMP::Info::CDP;
@SNMP::Info::Layer2::HP4000::ISA
= qw/SNMP::Info::Layer3 SNMP::Info::MAU
SNMP::Info::CDP Exporter/;
@SNMP::Info::Layer2::HP4000::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::MAU::MIBS,
%SNMP::Info::LLDP::MIBS,
%SNMP::Info::CDP::MIBS,
'RFC1271-MIB' => 'logDescription',
'HP-ICF-OID' => 'hpSwitch4000',
'HP-VLAN' => 'hpVlanMemberIndex',
'STATISTICS-MIB' => 'hpSwitchCpuStat',
'NETSWITCH-MIB' => 'hpMsgBufFree',
'CONFIG-MIB' => 'hpSwitchConfig',
'SEMI-MIB' => 'hpHttpMgSerialNumber',
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::MAU::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
'serial1' => 'hpHttpMgSerialNumber.0',
'hp_cpu' => 'hpSwitchCpuStat.0',
'hp_mem_total' => 'hpGlobalMemTotalBytes.1',
'mem_free' => 'hpGlobalMemFreeBytes.1',
'mem_used' => 'hpGlobalMemAllocBytes.1',
'os_version' => 'hpSwitchOsVersion.0',
'os_bin' => 'hpSwitchRomVersion.0',
'mac' => 'hpSwitchBaseMACAddress.0',
'hp_vlans' => 'hpVlanNumber',
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::MAU::FUNCS,
%SNMP::Info::CDP::FUNCS,
'bp_index2' => 'dot1dBasePortIfIndex',
'i_type2' => 'ifType',
# RFC1271
'l_descr' => 'logDescription',
# HP-VLAN-MIB
'hp_v_index' => 'hpVlanDot1QID',
'hp_v_name' => 'hpVlanIdentName',
'hp_v_state' => 'hpVlanIdentState',
'hp_v_type' => 'hpVlanIdentType',
'hp_v_status' => 'hpVlanIdentStatus',
'hp_v_mac' => 'hpVlanAddrPhysAddress',
'hp_v_if_index' => 'hpVlanMemberIndex',
'hp_v_if_tag' => 'hpVlanMemberTagged2',
# CONFIG-MIB::hpSwitchPortTable
'hp_duplex' => 'hpSwitchPortEtherMode',
'hp_duplex_admin' => 'hpSwitchPortFastEtherMode',
'vendor_i_type' => 'hpSwitchPortType',
# HP-ICF-CHASSIS
'hp_s_oid' => 'hpicfSensorObjectId',
'hp_s_name' => 'hpicfSensorDescr',
'hp_s_status' => 'hpicfSensorStatus',
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::MAU::MUNGE,
%SNMP::Info::CDP::MUNGE
);
%MODEL_MAP = (
'J4093A' => '2424M',
'J4110A' => '8000M',
'J4120A' => '1600M',
'J4121A' => '4000M',
'J4122A' => '2400M',
'J4122B' => '2424M',
);
# Method Overrides
sub cpu {
my $hp = shift;
return $hp->hp_cpu();
}
sub mem_total {
my $hp = shift;
return $hp->hp_mem_total();
}
sub os {
return 'hp';
}
sub os_ver {
my $hp = shift;
my $os_version = $hp->os_version();
return $os_version if defined $os_version;
# Some older ones don't have this value,so we cull it from the description
my $descr = $hp->description();
if ( $descr =~ m/revision ([A-Z]{1}\.\d{2}\.\d{2})/ ) {
return $1;
}
return;
}
# Lookup model number, and translate the part number to the common number
sub model {
my $hp = shift;
my $id = $hp->id();
return unless defined $id;
my $model = &SNMP::translateObj($id);
return $id unless defined $model;
$model =~ s/^hpswitch//i;
return defined $MODEL_MAP{$model} ? $MODEL_MAP{$model} : $model;
}
sub interfaces {
my $hp = shift;
my $interfaces = $hp->i_index();
my $i_descr = $hp->i_description();
my %if;
foreach my $iid ( keys %$interfaces ) {
my $descr = $i_descr->{$iid};
next unless defined $descr;
$if{$iid} = $descr if ( defined $descr and length $descr );
}
return \%if
}
sub i_name {
my $hp = shift;
my $i_alias = $hp->i_alias();
my $e_name = $hp->e_name();
my $e_port = $hp->e_port();
my %i_name;
foreach my $port ( keys %$e_name ) {
my $iid = $e_port->{$port};
next unless defined $iid;
my $alias = $i_alias->{$iid};
next unless defined $iid;
$i_name{$iid} = $e_name->{$port};
# Check for alias
$i_name{$iid} = $alias if ( defined $alias and length($alias) );
}
return \%i_name;
}
sub i_duplex {
my $hp = shift;
return $hp->mau_i_duplex();
}
sub i_duplex_admin {
my $hp = shift;
my $partial = shift;
# Try HP MIB first
my $hp_duplex = $hp->hp_duplex_admin($partial);
if ( defined $hp_duplex and scalar( keys %$hp_duplex ) ) {
my %i_duplex;
foreach my $if ( keys %$hp_duplex ) {
my $duplex = $hp_duplex->{$if};
next unless defined $duplex;
$duplex = 'half' if $duplex =~ /half/i;
$duplex = 'full' if $duplex =~ /full/i;
$duplex = 'auto' if $duplex =~ /auto/i;
$i_duplex{$if} = $duplex;
}
return \%i_duplex;
}
else {
return $hp->mau_i_duplex_admin();
}
}
sub vendor {
return 'hp';
}
sub log {
my $hp = shift;
my $log = $hp->l_descr();
my $logstring = undef;
foreach my $val ( values %$log ) {
next if $val =~ /^Link\s+(Up|Down)/;
$logstring .= "$val\n";
}
return $logstring;
}
sub slots {
my $hp = shift;
my $e_name = $hp->e_name();
return unless defined $e_name;
my $slots;
foreach my $slot ( keys %$e_name ) {
$slots++ if $e_name->{$slot} =~ /slot/i;
}
return $slots;
}
sub fan {
my $hp = shift;
return &_sensor( $hp, 'fan' );
}
sub ps1_status {
my $hp = shift;
return &_sensor( $hp, 'power', '^power supply 1' )
|| &_sensor( $hp, 'power', '^power supply sensor' );
}
sub ps2_status {
my $hp = shift;
return &_sensor( $hp, 'power', '^power supply 2' )
|| &_sensor( $hp, 'power', '^redundant' );
}
sub _sensor {
my $hp = shift;
my $search_type = shift || 'fan';
my $search_name = shift || '';
my $hp_s_oid = $hp->hp_s_oid();
my $result;
foreach my $sensor ( keys %$hp_s_oid ) {
my $sensortype = &SNMP::translateObj( $hp_s_oid->{$sensor} );
if ( $sensortype =~ /$search_type/i ) {
my $sensorname = $hp->hp_s_name()->{$sensor};
my $sensorstatus = $hp->hp_s_status()->{$sensor};
if ( $sensorname =~ /$search_name/i ) {
$result = $sensorstatus;
}
}
}
return $result;
}
# Bridge MIB does not map Bridge Port to ifIndex correctly on older models, but Bridge Port equals ifIndex in these devices
sub bp_index {
my $hp = shift;
my $partial = shift;
my $if_index = $hp->i_index($partial);
my %mod_bp_index;
foreach my $iid ( keys %$if_index ) {
$mod_bp_index{$iid} = $iid;
}
return \%mod_bp_index;
}
# VLAN methods. Devices in this class use the proprietary HP-VLAN-MIB.
sub v_index {
my $hp = shift;
my $partial = shift;
return $hp->hp_v_index($partial);
}
sub v_name {
my $hp = shift;
my $partial = shift;
return $hp->hp_v_name($partial);
}
sub i_vlan {
my $hp = shift;
# the hpvlanmembertagged2 table has an entry in the form of
# vlan.interface = /untagged/no/tagged/auto
my $i_vlan = {};
my $hp_v_index = $hp->hp_v_index();
my $hp_v_if_tag = $hp->hp_v_if_tag();
foreach my $row ( keys %$hp_v_if_tag ) {
my ( $index, $if ) = split( /\./, $row );
my $tag = $hp_v_if_tag->{$row};
my $vlan = $hp_v_index->{$index};
next unless ( defined $tag and $tag =~ /untagged/ );
$i_vlan->{$if} = $vlan if defined $vlan;
}
return $i_vlan;
}
sub i_vlan_membership {
my $hp = shift;
my $i_vlan_membership = {};
my $hp_v_index = $hp->hp_v_index();
my $hp_v_if_tag = $hp->hp_v_if_tag();
foreach my $row ( keys %$hp_v_if_tag ) {
my ( $index, $if ) = split( /\./, $row );
my $tag = $hp_v_if_tag->{$row};
my $vlan = $hp_v_index->{$index};
next unless ( defined $tag );
next if ( $tag eq 'no' );
push( @{ $i_vlan_membership->{$if} }, $vlan );
}
return $i_vlan_membership;
}
sub set_i_vlan {
my $hp = shift;
my $rv;
my $hp_v_index = $hp->hp_v_index();
my $hp_v_if_tag = $hp->hp_v_if_tag();
if (defined $hp_v_index and scalar(keys %$hp_v_index)){
my $vlan = shift;
my $iid = shift;
my $old_untagged;
# Hash to lookup VLAN index of the VID (dot1q tag)
my %vl_trans = reverse %$hp_v_index;
# Translate the VLAN identifier (tag) value to the index used by the HP-VLAN MIB
my $vlan_index = $vl_trans{$vlan};
if (defined $vlan_index) {
# First, loop through table to determine current untagged vlan for the port we're about to change
foreach my $row (keys %$hp_v_if_tag){
my ($index,$if) = split(/\./,$row);
if ($if == $iid and $hp_v_if_tag->{$row} =~ /untagged/) {
# Store the row information of the current untagged VLAN and temporarily set it to tagged
$old_untagged = $row;
$rv = $hp->set_hp_v_if_tag(1, $row);
last;
}
}
# Then set our port untagged in the desired VLAN
my $rv = $hp->set_hp_v_if_tag(2, "$vlan_index.$iid");
if (defined $rv) {
# If vlan change is successful, remove VLAN that used to be untagged from the port
if (defined $old_untagged) {
$rv = $hp->set_hp_v_if_tag(3, $old_untagged);
$hp->error_throw("Error removing previous untagged vlan from port, should never happen...\n") unless defined $rv;
}
} else {
# If vlan change was not succesful, try to revert to the old situation.
if (defined $old_untagged) {
$rv = $hp->set_hp_v_if_tag(2, $old_untagged) if defined $old_untagged;
if (defined $rv) {
$hp->error_throw("VLAN change failed, restored port to previous configuration.\n");
} else {
$hp->error_throw("VLAN change failed, unable to restore old configuration. Check device.\n");
}
}
}
} else {
$hp->error_throw("Requested VLAN (VLAN ID: $vlan) not available on device.\n");
}
} else {
$hp->error_throw("Error retrieving VLAN information from device.\n");
}
return $rv;
}
sub set_i_vlan_tagged {
my $hp = shift;
my $vlan = shift;
my $iid = shift;
my $rv;
my $hp_v_index = $hp->hp_v_index();
if (defined $hp_v_index and scalar(keys %$hp_v_index)){
# Hash to lookup VLAN index of the VID (dot1q tag)
my %vl_trans = reverse %$hp_v_index;
# Translate the VLAN identifier (tag) value to the index used by the HP-VLAN MIB
my $vlan_index = $vl_trans{$vlan};
if (defined $vlan_index) {
# Set our port tagged in the desired VLAN
$rv = $hp->set_hp_v_if_tag(1, "$vlan_index.$iid");
} else {
$hp->error_throw("Requested VLAN (VLAN ID: $vlan) not available on device.\n");
}
}
return $rv;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer2::HP4000 - SNMP Interface to older HP ProCurve Switches (1600, 2400, 2424M, 4000 and 8000)
=head1 AUTHOR
Max Baker
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $hp = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $hp->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
HP ProCurve Switch via SNMP.
Note: Some HP Switches will connect via SNMP version 1, but a lot of config
data will not be available. Make sure you try and connect with Version 2
first, and then fail back to version 1.
For speed or debugging purposes you can call the subclass directly, but not
after determining a more specific class using the method above.
my $hp = new SNMP::Info::Layer2::HP4000(...);
=head2 Inherited Classes
=over
=item SNMP::Info::Layer2
=item SNMP::Info::MAU
=back
=head2 Required MIBs
=over
=item F<RFC1271-MIB>
Included in V2 mibs from Cisco
=item F<HP-ICF-OID>
=item F<HP-VLAN>
(this MIB new with SNMP::Info 0.8)
=item F<STATISTICS-MIB>
=item F<NETSWITCH-MIB>
=item F<CONFIG-MIB>
=back
The last five MIBs listed are from HP and can be found at
L<http://www.hp.com/rnd/software> or
L<http://www.hp.com/rnd/software/MIBs.htm>
=head1 Change Log
Version 0.4 - Removed F<ENTITY-MIB> e_*() methods to separate sub-class -
SNMP::Info::Entity
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $hp->cpu()
Returns CPU Utilization in percentage.
=item $hp->log()
Returns all the log entries from the switch's log that are not Link up or
down messages.
=item $hp->mem_free()
Returns bytes of free memory
=item $hp->mem_total()
Return bytes of total memory
=item $hp->mem_used()
Returns bytes of used memory
=item $hp->model()
Returns the model number of the HP Switch. Will translate between the HP Part
number and the common model number with this map :
%MODEL_MAP = (
'J4093A' => '2424M',
'J4110A' => '8000M',
'J4120A' => '1600M',
'J4121A' => '4000M',
'J4122A' => '2400M',
'J4122B' => '2424M',
);
=item $hp->os()
Returns hp
=item $hp->os_bin()
C<hpSwitchRomVersion.0>
=item $hp->os_ver()
Tries to use os_version() and if that fails will try and cull the version from
the description field.
=item $hp->os_version()
C<hpSwitchOsVersion.0>
=item $hp->serial()
Returns serial number if available through SNMP
=item $hp->slots()
Returns number of entries in $hp->e_name that have 'slot' in them.
=item $hp->vendor()
hp
=item $hp->fan()
Returns fan status
=item $hp->ps1_status()
Power supply 1 status
=item $hp->ps2_status()
Power supply 2 status
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $hp->interfaces()
Uses $hp->i_description()
=item $hp->i_duplex()
Returns reference to map of IIDs to current link duplex.
=item $hp->i_duplex_admin()
Returns reference to hash of IIDs to admin duplex setting.
=item $hp->vendor_i_type()
Returns reference to hash of IIDs to HP specific port type (hpSwitchPortType).
=item $hp->i_name()
Crosses i_name() with $hp->e_name() using $hp->e_port() and i_alias()
=item $hp->i_vlan()
Returns a mapping between C<ifIndex> and the PVID (default VLAN) or untagged
port when using F<HP-VLAN>.
=item $hp->i_vlan_membership()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the egress list for the port.
It is the union of tagged, untagged, and auto ports.
Example:
my $interfaces = $hp->interfaces();
my $vlans = $hp->i_vlan_membership();
foreach my $iid (sort keys %$interfaces) {
my $port = $interfaces->{$iid};
my $vlan = join(',', sort(@{$vlans->{$iid}}));
print "Port: $port VLAN: $vlan\n";
}
=item $hp->v_index()
Returns VLAN IDs
=item $hp->v_name()
Returns VLAN names
=item $hp->bp_index()
Returns reference to hash of bridge port table entries map back to interface
identifier (iid)
Returns (C<ifIndex>) for both key and value for 1600, 2424, 4000, and 8000
models since they seem to have problems with F<BRIDGE-MIB>
=back
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
=head1 SET METHODS
These are methods that provide SNMP set functionality for overridden methods
or provide a simpler interface to complex set operations. See
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
operations.
=over
=item set_i_vlan()
=item set_i_vlan_tagged()
=cut

209
Info/Layer2/HPVC.pm Normal file
View File

@@ -0,0 +1,209 @@
# SNMP::Info::Layer2::HPVC - SNMP Interface to HP VirtualConnect Switches
#
# Copyright (c) 2011 Jeroen van Ingen
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::HPVC;
use strict;
use Exporter;
use SNMP::Info::Layer2;
@SNMP::Info::Layer2::HPVC::ISA
= qw/SNMP::Info::Layer2 Exporter/;
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer2::MIBS,
'HPVC-MIB' => 'vcDomainName',
'CPQSINFO-MIB' => 'cpqSiSysSerialNum',
'HPVCMODULE-MIB' => 'vcModuleDomainName',
);
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
'serial1' => 'cpqSiSysSerialNum.0',
'os_ver' => 'cpqHoSWRunningVersion.1',
'os_bin' => 'cpqHoFwVerVersion.1',
'productname' => 'cpqSiProductName.0',
);
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::Layer2::MUNGE,
);
# Method Overrides
sub os {
return 'hpvc';
}
sub vendor {
return 'hp';
}
sub model {
my $hp = shift;
return $hp->productname();
}
1;
__END__
=head1 NAME
SNMP::Info::Layer2::HPVC - SNMP Interface to HP VirtualConnect Switches
=head1 AUTHOR
Jeroen van Ingen
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $hp = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $hp->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
HP VirtualConnect Switch via SNMP.
For speed or debugging purposes you can call the subclass directly, but not
after determining a more specific class using the method above.
my $hp = new SNMP::Info::Layer2::HPVC(...);
=head2 Inherited Classes
=over
=item SNMP::Info::Layer2
=back
=head2 Required MIBs
=over
=item F<HPVC-MIB>
=item F<CPQSINFO-MIB>
=item F<HPVCMODULE-MIB>
=back
All required MIBs can be found in the netdisco-mibs package.
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $hp->os()
Returns hpvc
=item $hp->os_bin()
C<cpqHoFwVerVersion.1>
=item $hp->os_ver()
C<cpqHoSWRunningVersion.1>
=item $hp->serial()
C<cpqSiSysSerialNum.0>
=item $hp->vendor()
hp
=item $hp->model()
C<cpqSiProductName.0>
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=back
=head2 Table Methods imported from SNMP::Info::Layer2
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
=head1 MUNGES
=over
=back
=head1 SET METHODS
These are methods that provide SNMP set functionality for overridden methods
or provide a simpler interface to complex set operations. See
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
operations.
=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.06';
%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.06';
%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.06';
%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.06';
%MIBS = (
%SNMP::Info::Layer2::MIBS,
@@ -114,6 +114,8 @@ sub model {
return $1 if ( $descr =~ /(AP-\d+)/ );
return 'WavePOINT-II' if ( $descr =~ /WavePOINT-II/ );
return 'Outdoor Router' if ( $descr =~ /Wireless Router/ );
return;
}

View File

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

View File

@@ -39,22 +39,28 @@ use SNMP::Info::Bridge;
use SNMP::Info::EtherLike;
use SNMP::Info::Entity;
use SNMP::Info::PowerEthernet;
use SNMP::Info::IPv6;
use SNMP::Info::AdslLine;
@SNMP::Info::Layer3::ISA = qw/SNMP::Info::PowerEthernet
@SNMP::Info::Layer3::ISA = qw/
SNMP::Info::PowerEthernet SNMP::Info::IPv6
SNMP::Info::Entity SNMP::Info::EtherLike
SNMP::Info::Bridge SNMP::Info Exporter/;
SNMP::Info::Bridge SNMP::Info::AdslLine
SNMP::Info Exporter/;
@SNMP::Info::Layer3::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::MIBS,
%SNMP::Info::AdslLine::MIBS,
%SNMP::Info::Bridge::MIBS,
%SNMP::Info::EtherLike::MIBS,
%SNMP::Info::Entity::MIBS,
%SNMP::Info::PowerEthernet::MIBS,
%SNMP::Info::IPv6::MIBS,
'IP-MIB' => 'ipNetToMediaIfIndex',
'OSPF-MIB' => 'ospfRouterId',
'BGP4-MIB' => 'bgpIdentifier',
@@ -64,10 +70,12 @@ $VERSION = '2.00';
# Inherit the super class ones
%SNMP::Info::GLOBALS,
%SNMP::Info::AdslLine::GLOBALS,
%SNMP::Info::Bridge::GLOBALS,
%SNMP::Info::EtherLike::GLOBALS,
%SNMP::Info::Entity::GLOBALS,
%SNMP::Info::PowerEthernet::GLOBALS,
%SNMP::Info::IPv6::GLOBALS,
'mac' => 'ifPhysAddress.1',
'serial1' =>
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
@@ -78,10 +86,12 @@ $VERSION = '2.00';
%FUNCS = (
%SNMP::Info::FUNCS,
%SNMP::Info::AdslLine::FUNCS,
%SNMP::Info::Bridge::FUNCS,
%SNMP::Info::EtherLike::FUNCS,
%SNMP::Info::Entity::FUNCS,
%SNMP::Info::PowerEthernet::FUNCS,
%SNMP::Info::IPv6::FUNCS,
# Obsolete Address Translation Table (ARP Cache)
'old_at_index' => 'atIfIndex',
@@ -120,18 +130,29 @@ $VERSION = '2.00';
'bgp_peer_in_upd' => 'bgpPeerInUpdates',
'bgp_peer_out_tot_msgs' => 'bgpPeerOutTotalMessages',
'bgp_peer_out_upd' => 'bgpPeerOutUpdates',
# IP-MIB Net to Physical Table (ARP Cache)
'n2p_paddr' => 'ipNetToPhysicalPhysAddress',
'n2p_lastupdate' => 'ipNetToPhysicalLastUpdated',
'n2p_ptype' => 'ipNetToPhysicalType',
'n2p_pstate' => 'ipNetToPhysicalState',
'n2p_pstatus' => 'ipNetToPhysicalRowStatus',
);
%MUNGE = (
# Inherit all the built in munging
%SNMP::Info::MUNGE,
%SNMP::Info::AdslLine::MUNGE,
%SNMP::Info::Bridge::MUNGE,
%SNMP::Info::EtherLike::MUNGE,
%SNMP::Info::Entity::MUNGE,
%SNMP::Info::PowerEthernet::MUNGE,
%SNMP::Info::IPv6::MUNGE,
'old_at_paddr' => \&SNMP::Info::munge_mac,
'at_paddr' => \&SNMP::Info::munge_mac,
'n2p_paddr' => \&SNMP::Info::munge_mac,
);
# Method OverRides
@@ -286,7 +307,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 );
@@ -380,6 +406,10 @@ after determining a more specific class using the method above.
=item SNMP::Info::Entity
=item SNMP::Info::PowerEthernet
=item SNMP::Info::IPv6
=back
=head2 Required MIBs
@@ -404,6 +434,10 @@ See L<SNMP::Info::EtherLike/"Required MIBs"> for its MIB requirements.
See L<SNMP::Info::Entity/"Required MIBs"> for its MIB requirements.
See L<SNMP::Info::PowerEthernet/"Required MIBs"> for its MIB requirements.
See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
=head1 GLOBALS
These are methods that return scalar value from SNMP
@@ -744,4 +778,12 @@ See L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
See L<SNMP::Info::Entity/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::PowerEthernet
See L<SNMP::Info::PowerEthernet/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::IPv6
See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
=cut

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%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.06';
%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.06';
%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

@@ -1,4 +1,4 @@
# SNMP::Info::Layer2::Aruba
# SNMP::Info::Layer3::Aruba
# $Id$
#
# Copyright (c) 2008 Eric Miller
@@ -28,31 +28,31 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::Aruba;
package SNMP::Info::Layer3::Aruba;
use strict;
use Exporter;
use SNMP::Info::Layer2;
use SNMP::Info::Layer3;
@SNMP::Info::Layer2::Aruba::ISA = qw/SNMP::Info::Layer2 Exporter/;
@SNMP::Info::Layer2::Aruba::EXPORT_OK = qw//;
@SNMP::Info::Layer3::Aruba::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::Aruba::EXPORT_OK = qw//;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer2::MIBS,
%SNMP::Info::Layer3::MIBS,
'WLSX-SWITCH-MIB' => 'wlsxHostname',
'WLSX-WLAN-MIB' => 'wlanAPFQLN',
'WLSR-AP-MIB' => 'wlsrHideSSID',
#'ALCATEL-IND1-TP-DEVICES' => 'familyOmniAccessWireless',
);
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS, );
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, );
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
%SNMP::Info::Layer3::FUNCS,
# WLSX-SWITCH-MIB::wlsxSwitchAccessPointTable
# Table index leafs do not return information
@@ -79,10 +79,10 @@ $VERSION = '2.00';
'fw_user' => 'staUserName',
);
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
sub layers {
return '00000011';
return '00000111';
}
sub os {
@@ -421,7 +421,7 @@ __END__
=head1 NAME
SNMP::Info::Layer2::Aruba - SNMP Interface to Aruba wireless switches
SNMP::Info::Layer3::Aruba - SNMP Interface to Aruba wireless switches
=head1 AUTHOR
@@ -444,7 +444,7 @@ Eric Miller
=head1 DESCRIPTION
SNMP::Info::Layer2::Aruba is a subclass of SNMP::Info that provides an
SNMP::Info::Layer3::Aruba is a subclass of SNMP::Info that provides an
interface to Aruba wireless switches. The Aruba platform utilizes
intelligent wireless switches which control thin access points. The thin
access points themselves are unable to be polled for end station information.
@@ -456,13 +456,13 @@ the end station is using for communication.
For speed or debugging purposes you can call the subclass directly, but not
after determining a more specific class using the method above.
my $aruba = new SNMP::Info::Layer2::Aruba(...);
my $aruba = new SNMP::Info::Layer3::Aruba(...);
=head2 Inherited Classes
=over
=item SNMP::Info::Layer2
=item SNMP::Info::Layer3
=back
@@ -478,7 +478,7 @@ after determining a more specific class using the method above.
=head2 Inherited MIBs
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
See L<SNMP::Info::Layer3/"Required MIBs"> for its MIB requirements.
=head1 GLOBALS
@@ -516,9 +516,9 @@ proprietary MIBs.
=back
=head2 Globals imported from SNMP::Info::Layer2
=head2 Globals imported from SNMP::Info::Layer3
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
See L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head1 TABLE METHODS
@@ -641,8 +641,8 @@ Returns F<aruba_perap_fqln> indexed by BSSID instead of by AP.
=back
=head2 Table Methods imported from SNMP::Info::Layer2
=head2 Table Methods imported from SNMP::Info::Layer3
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
See L<SNMP::Info::Layer3/"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.06';
%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.
#
@@ -35,62 +35,82 @@ use strict;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CiscoStack;
use SNMP::Info::LLDP;
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::LLDP
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.06';
# 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::LLDP::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::LLDP::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::LLDP::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::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::LLDP::MUNGE, %SNMP::Info::CDP::MUNGE,
%SNMP::Info::CiscoStack::MUNGE, %SNMP::Info::CiscoStpExtensions::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE,
);
@@ -115,14 +135,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
@@ -216,6 +236,141 @@ sub cisco_comm_indexing {
return 1;
}
# Use CDP and/or LLDP
sub hasCDP {
my $c3550 = shift;
return $c3550->hasLLDP() || $c3550->SUPER::hasCDP();
}
sub c_ip {
my $c3550 = shift;
my $partial = shift;
my $cdp = $c3550->SUPER::c_ip($partial) || {};
my $lldp = $c3550->lldp_ip($partial) || {};
my %c_ip;
foreach my $iid ( keys %$cdp ) {
my $ip = $cdp->{$iid};
next unless defined $ip;
$c_ip{$iid} = $ip;
}
foreach my $iid ( keys %$lldp ) {
my $ip = $lldp->{$iid};
next unless defined $ip;
$c_ip{$iid} = $ip;
}
return \%c_ip;
}
sub c_if {
my $c3550 = shift;
my $partial = shift;
my $cdp = $c3550->SUPER::c_if($partial) || {};
my %c_if;
foreach my $iid ( keys %$cdp ) {
my $if = $cdp->{$iid};
next unless defined $if;
$c_if{$iid} = $if;
}
# We need to match the lldp key with the ifIndex
# via lldpLocPortId and ifName
my $i_name = $c3550->ifName($partial) || {};
my $i_name_rev = {};
while ( my($key,$val) = each %$i_name ){
$i_name_rev->{$val} = $key;
}
my $loc_port_id = $c3550->lldpLocPortId($partial) || {};
my $lldp = $c3550->lldp_if($partial) || {};
foreach my $iid ( keys %$lldp ) {
my $if = $lldp->{$iid} || next;
my $name = $loc_port_id->{$if} || next;
my $i_index = $i_name_rev->{$name} || next;
$c_if{$iid} = $i_index;
}
return \%c_if;
}
sub c_port {
my $c3550 = shift;
my $partial = shift;
my $lldp = $c3550->lldp_port($partial) || {};
my $cdp = $c3550->SUPER::c_port($partial) || {};
my %c_port;
foreach my $iid ( keys %$cdp ) {
my $port = $cdp->{$iid};
next unless defined $port;
$c_port{$iid} = $port;
}
foreach my $iid ( keys %$lldp ) {
my $port = $lldp->{$iid};
next unless defined $port;
$c_port{$iid} = $port;
}
return \%c_port;
}
sub c_id {
my $c3550 = shift;
my $partial = shift;
my $lldp = $c3550->lldp_id($partial) || {};
my $cdp = $c3550->SUPER::c_id($partial) || {};
my %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;
}
return \%c_id;
}
sub c_platform {
my $c3550 = shift;
my $partial = shift;
my $lldp = $c3550->lldp_rem_sysdesc($partial) || {};
my $cdp = $c3550->SUPER::c_platform($partial) || {};
my %c_platform;
foreach my $iid ( keys %$cdp ) {
my $platform = $cdp->{$iid};
next unless defined $platform;
$c_platform{$iid} = $platform;
}
foreach my $iid ( keys %$lldp ) {
my $platform = $lldp->{$iid};
next unless defined $platform;
$c_platform{$iid} = $platform;
}
return \%c_platform;
}
1;
__END__
@@ -263,6 +418,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
@@ -273,6 +430,8 @@ after determining a more specific class using the method above.
=item SNMP::Info::CDP
=item SNMP::Info::LLDP
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoImage
@@ -287,6 +446,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
@@ -302,6 +463,8 @@ See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
@@ -331,10 +494,31 @@ Returns 1. Use vlan indexing.
=back
=head2 Topology information
Based upon the firmware version Cisco devices may support Link Layer Discovery
Protocol (LLDP) in addition to Cisco Discovery Protocol (CDP). These methods
will query both and return the combination of all information. As a result,
there may be identical topology information returned from the two protocols
causing duplicate entries. It is the calling program's responsibility to
identify any duplicate entries and remove duplicates if necessary.
=over
=item $c3550->hasCDP()
Returns true if the device is running either CDP or LLDP.
=back
=head2 Globals imported from SNMP::Info::Layer3
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.
@@ -355,6 +539,10 @@ See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::CiscoStats
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
@@ -368,6 +556,40 @@ See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
These are methods that return tables of information in the form of a reference
to a hash.
=over
=item $c3550->c_if()
Returns reference to hash. Key: iid Value: local device port (interfaces)
=item $c3550->c_ip()
Returns reference to hash. Key: iid Value: remote IPv4 address
If multiple entries exist with the same local port, c_if(), with the same IPv4
address, c_ip(), it may be a duplicate entry.
If multiple entries exist with the same local port, c_if(), with different
IPv4 addresses, c_ip(), there is either a non-CDP/LLDP device in between two
or more devices or multiple devices which are not directly connected.
Use the data from the Layer2 Topology Table below to dig deeper.
=item $c3550->c_port()
Returns reference to hash. Key: iid Value: remote port (interfaces)
=item $c3550->c_id()
Returns reference to hash. Key: iid Value: string value used to identify the
chassis component associated with the remote system.
=item $c3550->c_platform()
Returns reference to hash. Key: iid Value: Remote Device Type
=back
=head2 Overrides
=over
@@ -412,6 +634,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.
@@ -433,6 +659,10 @@ See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::CiscoStats
See documentation in L<SNMP::Info::CiscoStats/"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.06';
%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.06';
# 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.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

223
Info/Layer3/CiscoFWSM.pm Normal file
View File

@@ -0,0 +1,223 @@
# SNMP::Info::Layer3::CiscoFWSM
# $Id$
#
# Copyright (c) 2010 Brian De Wolf
# 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::CiscoFWSM;
use strict;
use Exporter;
use SNMP::Info::Layer3::Cisco;
@SNMP::Info::Layer3::CiscoFWSM::ISA = qw/SNMP::Info::Layer3::Cisco
Exporter/;
@SNMP::Info::Layer3::CiscoFWSM::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer3::Cisco::MIBS,
);
%GLOBALS = (
%SNMP::Info::Layer3::Cisco::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::Cisco::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::Cisco::MUNGE,
);
# For FWSMs, the ipNetToPhysicalPhysAddress table appears to be of the form:
# $ifindex.$inetaddresstype.$proto.$ip_address -> $mac_address
#
# Using the output of ipNetToPhysicalPhysAddress, we can emulate the other
# functions.
#
# This doesn't really line up to what at_* return, so we munge it
sub at_paddr {
my ($fwsm) = shift;
my ($partial) = shift;
my $paddrs = $fwsm->n2p_paddr($partial);
my $n_paddrs = {};
foreach my $key (keys %$paddrs) {
my $paddr = $paddrs->{$key};
my @parts = split /\./, $key;
my ($ifindex, $addrtype, $proto) = splice @parts, 0, 3;
my $ip = join ".", @parts;
next if($proto != 4); # at_paddr doesn't support non-IPv4
$n_paddrs->{"$ifindex.$ip"} = $paddr;
}
return $n_paddrs;
}
sub at_netaddr {
my ($fwsm) = shift;
my ($partial) = shift;
my $paddrs = $fwsm->n2p_paddr($partial);
my $netaddrs = {};
foreach my $key (keys %$paddrs) {
my $paddr = $paddrs->{$key};
my @parts = split /\./, $key;
my ($ifindex, $addrtype, $proto) = splice @parts, 0, 3;
my $ip = join ".", @parts;
next if($proto != 4); # at_netaddr doesn't support non-IPv4
$netaddrs->{"$ifindex.$ip"} = $ip;
}
return $netaddrs;
}
sub at_ifaddr {
my ($fwsm) = shift;
my ($partial) = shift;
my $paddrs = $fwsm->n2p_paddr($partial);
my $ifaddrs = {};
foreach my $key (keys %$paddrs) {
my $paddr = $paddrs->{$key};
my @parts = split /\./, $key;
my ($ifindex, $addrtype, $proto) = splice @parts, 0, 3;
my $ip = join ".", @parts;
next if($proto != 4); # at_ifaddr doesn't support non-IPv4
$ifaddrs->{"$ifindex.$ip"} = $ip;
}
return $ifaddrs;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules for
features not covered elsewhere.
=head1 AUTHOR
Brian De Wolf
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $fwsm = 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 = $fwsm->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Cisco Firewall Services Modules
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3::Cisco
=back
=head2 Required MIBs
=over
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
=head2 Global Methods imported from SNMP::Info::Layer3::Cisco
See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=over
=back
=head2 Overrides
=over
=item $fwsm->at_paddr()
This function derives the at_paddr information from the n2p_paddr() table as
the MIB to provide that information isn't supported on FWSMs.
=item $fwsm->at_netaddr()
This function derives the at_netaddr information from the n2p_paddr() table as
the MIB to provide that information isn't supported on FWSMs.
=item $fwsm->at_ifaddr()
This function derives the at_ifaddr information from the n2p_paddr() table as
the MIB to provide that information isn't supported on FWSMs.
=back
=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
=cut

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer3::Contivity
# $Id$
#
# Copyright (c) 2008 Eric Miller
# Copyright (c) 2010 Eric Miller
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
@@ -77,7 +77,7 @@ sub model {
my $model = $e_model->{1} || undef;
return $1 if ( defined $model and $model =~ /(CES\d+)/i );
return $1 if ( defined $model and $model =~ /(CES\d+|NVR\d+)/i );
return;
}

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -52,6 +52,7 @@ $VERSION = '2.00';
'EXTREME-SYSTEM-MIB' => 'extremeSystem',
'EXTREME-FDB-MIB' => 'extremeSystem',
'EXTREME-VLAN-MIB' => 'extremeVlan',
'EXTREME-POE-MIB' => 'extremePethSystemAdminEnable',
);
%GLOBALS = (
@@ -82,6 +83,8 @@ $VERSION = '2.00';
# EXTREME-VLAN-MIB:extremeVlanEncapsIfTable
'ex_vlan_encap_tag' => 'extremeVlanEncapsIfTag',
'peth_port_power' => 'extremePethPortMeasuredPower',
);
%MUNGE = (
@@ -587,6 +590,8 @@ my $extreme = new SNMP::Info::Layer3::Extreme(...);
=item F<EXTREME-VLAN-MIB>
=item F<EXTREME-POE-MIB>
=item Inherited Classes' MIBs
See classes listed above for their required MIBs.
@@ -748,6 +753,11 @@ identifier (iid)
Returns (C<ifIndex>) for both key and value since we're using
F<EXTREME-FDB-MIB> rather than F<BRIDGE-MIB>.
=item $extreme->peth_port_power()
Power supplied by PoE ports, in milliwatts
("extremePethPortMeasuredPower")
=back
=head2 Table Methods imported from SNMP::Info::Layer3
@@ -808,6 +818,7 @@ with the numeric VLAN ID and port C<ifIndex>.
$extreme->set_remove_i_vlan_tagged('2', $if_map{'FastEthernet0/1'})
or die "Couldn't add port to egress list. ",$extreme->error(1);
=back
=head1 Data Munging Callback Subroutines

View File

@@ -44,7 +44,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -33,25 +33,33 @@ package SNMP::Info::Layer3::Juniper;
use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::LLDP;
@SNMP::Info::Layer3::Juniper::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::Juniper::ISA = qw/SNMP::Info::Layer3 SNMP::Info::LLDP Exporter/;
@SNMP::Info::Layer3::Juniper::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::LLDP::MIBS,
'JUNIPER-CHASSIS-DEFINES-MIB' => 'jnxChassisDefines',
'JUNIPER-MIB' => 'jnxBoxAnatomy',
);
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, 'serial' => 'jnxBoxSerialNo.0', );
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
'serial' => 'jnxBoxSerialNo.0', );
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
%FUNCS = ( %SNMP::Info::Layer3::FUNCS,
%SNMP::Info::LLDP::FUNCS,
);
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
%MUNGE = ( %SNMP::Info::Layer3::MUNGE,
%SNMP::Info::LLDP::MUNGE,
);
sub vendor {
return 'juniper';
@@ -115,6 +123,65 @@ sub i_vlan {
return \%i_vlan;
}
# Use Q-BRIDGE-MIB for bridge forwarding tables
sub fw_mac {
my $juniper = shift;
my $partial = shift;
return $juniper->qb_fw_mac($partial);
}
sub fw_port {
my $juniper = shift;
my $partial = shift;
return $juniper->qb_fw_port($partial);
}
# Use LLDP
sub hasCDP {
my $juniper = shift;
return $juniper->hasLLDP();
}
sub c_ip {
my $juniper = shift;
my $partial = shift;
return $juniper->lldp_ip($partial);
}
sub c_if {
my $juniper = shift;
my $partial = shift;
return $juniper->lldp_if($partial);
}
sub c_port {
my $juniper = shift;
my $partial = shift;
return $juniper->lldp_port($partial);
}
sub c_id {
my $juniper = shift;
my $partial = shift;
return $juniper->lldp_id($partial);
}
sub c_platform {
my $juniper = shift;
my $partial = shift;
return $juniper->lldp_rem_sysdesc($partial);
}
1;
__END__
@@ -151,6 +218,8 @@ Subclass for Generic Juniper Routers running JUNOS
=item SNMP::Info::Layer3
=item SNMP::Info::LLDP
=back
=head2 Required MIBs
@@ -161,6 +230,8 @@ Subclass for Generic Juniper Routers running JUNOS
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
@@ -192,12 +263,20 @@ Returns serial number
(C<jnxBoxSerialNo.0>)
=item $juniper->hasCDP()
Returns whether LLDP is enabled.
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
@@ -210,10 +289,53 @@ to a hash.
Returns the list of interfaces whose C<ifType> is l2vlan(135), and
the VLAN ID extracted from the interface description.
=item $juniper->c_id()
Returns LLDP information.
=item $juniper->c_if()
Returns LLDP information.
=item $juniper->c_ip()
Returns LLDP information.
=item $juniper->c_platform()
Returns LLDP information.
=item $juniper->c_port()
Returns LLDP information.
=back
=head2 Forwarding Table (C<dot1dTpFdbEntry>)
=over
=item $juniper->fw_mac()
Returns reference to hash of forwarding table MAC Addresses
(C<dot1dTpFdbAddress>)
=item $juniper->fw_port()
Returns reference to hash of forwarding table entries port interface
identifier (iid)
(C<dot1dTpFdbPort>)
=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::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View File

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

175
Info/Layer3/Mikrotik.pm Normal file
View File

@@ -0,0 +1,175 @@
# SNMP::Info::Layer3::Mikrotik
# $Id$
#
# Copyright (c) 2011 Jeroen van Ingen
# 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::Mikrotik;
use strict;
use Exporter;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::Mikrotik::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::Mikrotik::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
'HOST-RESOURCES-MIB' => 'hrSystem',
'MIKROTIK-MIB' => 'mtxrLicVersion',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
'hrSystemUptime' => 'hrSystemUptime',
'os_ver' => 'mtxrLicVersion',
);
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
sub vendor {
return 'mikrotik';
}
sub model {
my $mikrotik = shift;
my $descr = $mikrotik->description() || '';
my $model = undef;
$model = $1 if ( $descr =~ /^RouterOS\s+(\S+)$/i );
return $model;
}
sub os {
return 'routeros';
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::Mikrotik - SNMP Interface to Mikrotik devices
=head1 AUTHORS
Jeroen van Ingen
initial version based on SNMP::Info::Layer3::NetSNMP by Bradley Baetz and Bill Fenner
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $mikrotik = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myrouter',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $mikrotik->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Mikrotik devices
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
=over
=item F<HOST-RESOURCES-MIB>
=item F<MIKROTIK-MIB>
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3> for its own MIB requirements.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $mikrotik->vendor()
Returns 'mikrotik'.
=item $mikrotik->os()
Returns 'routeros'.
=item $mikrotik->model()
Tries to extract the device model from C<sysDescr>.
=item $mikrotik->os_ver()
Returns the value of C<mtxrLicVersion>.
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3> for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
None.
=over
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3> for details.
=cut

View File

@@ -41,7 +41,7 @@ use SNMP::Info::SONMP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

220
Info/Layer3/PacketFront.pm Normal file
View File

@@ -0,0 +1,220 @@
# SNMP::Info::Layer3::PacketFront
# $Id$
#
# Copyright (c) 2011 Jeroen van Ingen
# 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::PacketFront;
use strict;
use Exporter;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::PacketFront::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::PacketFront::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
'UCD-SNMP-MIB' => 'versionTag',
'NET-SNMP-TC' => 'netSnmpAgentOIDs',
'HOST-RESOURCES-MIB' => 'hrSystem',
'PACKETFRONT-PRODUCTS-MIB' => 'drg100',
'PACKETFRONT-DRG-MIB' => 'productName',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
'snmpd_vers' => 'versionTag',
'hrSystemUptime' => 'hrSystemUptime',
);
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
sub vendor {
return 'packetfront';
}
sub os {
# Only DRGOS for now (not tested with other product lines than DRG series)
my $pfront = shift;
my $descr = $pfront->description();
if ( $descr =~ /drgos/i ) {
return 'drgos';
} else {
return undef;
}
}
sub os_ver {
my $pfront = shift;
my $descr = $pfront->description();
my $os_ver = undef;
if ( $descr =~ /Version:\sdrgos-(\w+)-([\w\-\.]+)/ ) {
$os_ver = $2;
}
return $os_ver;
}
sub serial {
my $pfront = shift;
return $pfront->productSerialNo();
}
sub i_ignore {
my $l3 = shift;
my $partial = shift;
my $interfaces = $l3->interfaces($partial) || {};
my %i_ignore;
foreach my $if ( keys %$interfaces ) {
# lo0 etc
if ( $interfaces->{$if} =~ /\blo\d*\b/i ) {
$i_ignore{$if}++;
}
}
return \%i_ignore;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::PacketFront - SNMP Interface to PacketFront devices
=head1 AUTHORS
Jeroen van Ingen
initial version based on SNMP::Info::Layer3::NetSNMP by Bradley Baetz and Bill Fenner
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $pfront = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myrouter',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $pfront->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for PacketFront devices
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
=over
=item F<UCD-SNMP-MIB>
=item F<NET-SNMP-TC>
=item F<HOST-RESOURCES-MIB>
=item F<PACKETFRONT-PRODUCTS-MIB>
=item F<PACKETFRONT-DRG-MIB>
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3> for its own MIB requirements.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $pfront->vendor()
Returns 'packetfront'.
=item $pfront->os()
Returns the OS extracted from C<sysDescr>.
=item $pfront->os_ver()
Returns the software version extracted from C<sysDescr>.
=item $pfront->serial()
Returns the value of productSerialNo.
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3> for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $pfront->i_ignore()
Returns reference to hash. Increments value of IID if port is to be ignored.
Ignores loopback
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3> for details.
=cut

View File

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

294
Info/Layer3/Pf.pm Normal file
View File

@@ -0,0 +1,294 @@
# SNMP::Info::Layer3::Pf
# $Id$
#
# Copyright (c) 2010 Max Baker
# 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 Pf 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::Pf;
use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::LLDP;
@SNMP::Info::Layer3::Pf::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::Pf::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.06';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::LLDP::MIBS,
# Enterprise container where BEGEMOT-* lives
'FOKUS-MIB' => 'fokus',
# MIBs used included in Layer3 and above:
# UDP-MIB
# TCP-MIB
# IF-MIB
#
# Stuff in these MIBs but not used for Netdisco yet for my test device:
#
#'BEGEMOT-SNMPD-MIB',
#'BEGEMOT-PF-MIB',
#'BEGEMOT-NETGRAPH-MIB',
#'BEGEMOT-MIB2-MIB',
#'BEGEMOT-HOSTRES-MIB',
# HOST-RESOURCES-MIB
# IP-FORWARD-MIB
#
# Nothing in these MIBs for my test device:
#
#'BEGEMOT-IP-MIB',
#'BEGEMOT-MIB',
#'BEGEMOT-BRIDGE-MIB',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::LLDP::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::LLDP::MUNGE,
);
sub vendor {
return 'FreeBSD';
}
sub model {
my $pf = shift;
my $descr = $pf->description() || '';
my $model = undef;
$model = $1 if ( $descr =~ /FreeBSD\s+(\S+)/ );
return $model if defined $model;
return $pf->os_ver();
}
sub os {
return 'Pf';
}
sub os_ver {
my $pf = shift;
my $id = $pf->id();
my $os_ver = &SNMP::translateObj($id);
return $id unless defined $os_ver;
# From /usr/share/snmp/defs/tree.def on a Pf Machine
# (2 begemotSnmpdDefs
# (1 begemotSnmpdAgent
# (1 begemotSnmpdAgentFreeBSD OID op_dummy)
# We're leaving the 1.1 and trimming off up to the 2
$os_ver =~ s/fokus.1.1.2.//;
return $os_ver;
}
# Use LLDP
sub hasCDP {
my $pf = shift;
return $pf->hasLLDP();
}
sub c_ip {
my $pf = shift;
my $partial = shift;
return $pf->lldp_ip($partial);
}
sub c_if {
my $pf = shift;
my $partial = shift;
return $pf->lldp_if($partial);
}
sub c_port {
my $pf = shift;
my $partial = shift;
return $pf->lldp_port($partial);
}
sub c_id {
my $pf = shift;
my $partial = shift;
return $pf->lldp_id($partial);
}
sub c_platform {
my $pf = shift;
my $partial = shift;
return $pf->lldp_rem_sysdesc($partial);
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::Pf - SNMP Interface to FreeBSD-Based Firewalls using Pf /Pf Sense
=head1 AUTHOR
Max Baker
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $pf = 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 = $pf->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Free-BSD PF-Based devices
=head1 LLDP Support
LLDP Support is included but untested in this Device Class. It is reported
that the available CDP/LLDP modules for net-snmp don't work on FreeBSD (on
which pfSense is based) as they assume certain Linux specific Ethernet
structures. This problem is apparently solved on PF based firewall appliances
by using the ladvd package, for which a port may be found here:
L<http://www.freshports.org/net/ladvd/>. I'm not sure if this module ties into
Net-SNMP or not.
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=item SNMP::Info::LLDP
=back
=head2 Required MIBs
=over
=item F<FOKUS-MIB>
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3/"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 $pf->vendor()
Returns 'FreeBSD'
=item $pf->hasCDP()
Returns whether LLDP is enabled.
=item $pf->model()
Grabs the os version from C<sysDescr>
=item $pf->os()
Returns 'Pf'
=item $pf->os_ver()
Tries to reference $pf->id() to one of the product MIBs listed above.
Will probably return a truncation of the default OID for pf-based systems
C<enterprises.12325.1.1.2.1.1>.
=back
=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 $pf->c_id()
Returns LLDP information.
=item $pf->c_if()
Returns LLDP information.
=item $pf->c_ip()
Returns LLDP information.
=item $pf->c_platform()
Returns LLDP information.
=item $pf->c_port()
Returns LLDP information.
=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::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%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.06';
%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.06';
%MIBS = (

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%MIBS = ( 'POWER-ETHERNET-MIB' => 'pethPsePortDetectionStatus' );
@@ -89,6 +89,28 @@ sub peth_port_ifindex {
return $peth_port_ifindex;
}
# Subclasses are encouraged to override this method to report
# what has actually been negotiated with the device, if a
# protocol with more values (e.g., CDP) has been used.
sub peth_port_neg_power {
my $peth = shift;
my $partial = shift;
my $peth_port_status = $peth->peth_port_status($partial);
my $peth_port_class = $peth->peth_port_class($partial);
my $poemax = { 'class0' => 12950, 'class1' => 3840, 'class2' => 6490, 'class3' => 12950,
'class4' => 25500 };
my $peth_port_neg_power = {};
foreach my $i ( keys %$peth_port_status ) {
if ($peth_port_status->{$i} eq 'deliveringPower') {
$peth_port_neg_power->{$i} = $poemax->{ $peth_port_class->{$i} };
}
}
return $peth_port_neg_power;
}
1;
__END__
@@ -187,6 +209,14 @@ implement; the MIB gives only very weak guidance.
A given device class may implement its own version
of this function (e.g., see Info::CiscoPower).
=item $poe->peth_port_neg_power()
The power, in milliwatts, that has been committed to this port.
This value is derived from the 802.3af class of the device being
powered, but may be overridden by a subclass that has information
from another source (e.g., if a different protocol, such as CDP,
was used to negotiate the power level.)
=back
=head2 Power Supply Table

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '2.00';
$VERSION = '2.06';
%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.06';
%MIBS = (
'SYNOPTICS-ROOT-MIB' => 'synoptics',

View File

@@ -1,7 +1,9 @@
ChangeLog
COPYRIGHT
DEVELOP
DeviceMatrix.txt
Info.pm
Info/AdslLine.pm
Info/Airespace.pm
Info/Bridge.pm
Info/CDP.pm
@@ -13,11 +15,13 @@ Info/CiscoQOS.pm
Info/CiscoRTT.pm
Info/CiscoStack.pm
Info/CiscoStats.pm
Info/CiscoStpExtensions.pm
Info/CiscoVTP.pm
Info/Entity.pm
Info/EtherLike.pm
Info/FDP.pm
Info/IEEE802dot11.pm
Info/IPv6.pm
Info/Layer1.pm
Info/Layer1/Allied.pm
Info/Layer1/Asante.pm
@@ -28,7 +32,6 @@ Info/Layer2.pm
Info/Layer2/Airespace.pm
Info/Layer2/Aironet.pm
Info/Layer2/Allied.pm
Info/Layer2/Aruba.pm
Info/Layer2/Bay.pm
Info/Layer2/Baystack.pm
Info/Layer2/C1900.pm
@@ -38,6 +41,8 @@ Info/Layer2/Centillion.pm
Info/Layer2/Cisco.pm
Info/Layer2/Foundry.pm
Info/Layer2/HP.pm
Info/Layer2/HP4000.pm
Info/Layer2/HPVC.pm
Info/Layer2/N2270.pm
Info/Layer2/NAP222x.pm
Info/Layer2/Netgear.pm
@@ -47,11 +52,15 @@ 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/Aruba.pm
Info/Layer3/BayRS.pm
Info/Layer3/C3550.pm
Info/Layer3/C4000.pm
Info/Layer3/C6500.pm
Info/Layer3/Cisco.pm
Info/Layer3/CiscoFWSM.pm
Info/Layer3/Contivity.pm
Info/Layer3/Dell.pm
Info/Layer3/Enterasys.pm
@@ -60,10 +69,13 @@ Info/Layer3/Foundry.pm
Info/Layer3/HP9300.pm
Info/Layer3/Juniper.pm
Info/Layer3/Microsoft.pm
Info/Layer3/Mikrotik.pm
Info/Layer3/N1600.pm
Info/Layer3/Netscreen.pm
Info/Layer3/NetSNMP.pm
Info/Layer3/PacketFront.pm
Info/Layer3/Passport.pm
Info/Layer3/Pf.pm
Info/Layer3/Sun.pm
Info/Layer3/Timetra.pm
Info/LLDP.pm
@@ -81,4 +93,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

View File

@@ -3,6 +3,7 @@
\bCVS\b
,v$
\B\.svn\b
\B\.git\b
# Makemaker generated files and dirs.
^MANIFEST\.

230
README
View File

@@ -5,15 +5,23 @@ NAME
VERSION
SNMP::Info - Version 2.00
SNMP::Info - Version 2.06
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, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits.
Currently being 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
@@ -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.
@@ -152,11 +154,13 @@ DESIGN GOALS
1. Use of textual MIB leaf identifier and enumerated values
* All values are retrieved via MIB Leaf node names
* All values are retrieved via MIB Leaf node names
For example SNMP::Info has an entry in its %GLOBALS hash for
``sysName'' instead of 1.3.6.1.2.1.1.5.
* Data returned is in the enumerated value form.
* Data returned is in the enumerated value form.
For Example instead of looking up 1.3.6.1.2.1.2.2.1.3 and
getting back 23
@@ -190,6 +194,13 @@ SUBCLASSES
For more info run "perldoc" on any of the following module names.
SNMP::Info::AdslLine
SNMP Interface to the ADSL-LINE-MIB for ADSL interfaces.
Requires the ADSL-LINE-MIB, downloadable from Cisco.
See documentation in SNMP::Info::AdslLine for details.
SNMP::Info::Airespace
AIRESPACE-WIRELESS-MIB and AIRESPACE-SWITCHING-MIB. Inherited by
devices based on the Airespace wireless platform.
@@ -225,6 +236,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 +258,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 +282,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.
@@ -271,6 +292,13 @@ SUBCLASSES
See documentation in SNMP::Info::FDP for details.
SNMP::Info::IPv6
SNMP Interface for obtaining configured IPv6 addresses and mapping
IPv6 addresses to MACs and interfaces, using information from
IP-MIB, IPV6-MIB and/or CISCO-IETF-IP-MIB.
See documentation in SNMP::Info::IPv6 for details.
SNMP::Info::IEEE802dot11
IEEE802dot11-MIB. A collection of OIDs providing information about
standards based 802.11 wireless devices.
@@ -294,6 +322,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.
@@ -372,11 +405,6 @@ SUBCLASSES
See documentation in SNMP::Info::Layer2::Allied for details.
SNMP::Info::Layer2::Aruba
Subclass for Aruba wireless switches.
See documentation in SNMP::Info::Layer2::Aruba for details.
SNMP::Info::Layer2::Bay
Depreciated. Use BayStack.
@@ -423,12 +451,24 @@ SUBCLASSES
Depreciated. Use SNMP::Info::Layer3::Foundry.
SNMP::Info::Layer2::HP
Subclass for HP Procurve Switches
Subclass for more recent HP Procurve Switches
Requires HP-ICF-OID and ENTITY-MIB downloaded from HP.
See documentation in SNMP::Info::Layer2::HP for details.
SNMP::Info::Layer2::HP4000
Subclass for older HP Procurve Switches
Requires HP-ICF-OID and ENTITY-MIB downloaded from HP.
See documentation in SNMP::Info::Layer2::HP4000 for details.
SNMP::Info::Layer2::HPVC
Subclass for HP VirtualConnect Switches
See documentation in SNMP::Info::Layer2::HPVC for details.
SNMP::Info::Layer2::N2270
Subclass for Nortel 2270 wireless switches.
@@ -439,6 +479,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 +511,29 @@ 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::Aruba
Subclass for Aruba wireless switches.
See documentation in SNMP::Info::Layer3::Aruba for details.
SNMP::Info::Layer3::BayRS
Subclass for Nortel Multiprotocol/BayRS routers. This includes
BCN, BLN, ASN, ARN, AN, 2430, and 5430 routers.
@@ -501,6 +563,11 @@ SUBCLASSES
See documentation in SNMP::Info::Layer3::Cisco for details.
SNMP::Info::Layer3::CiscoFWSM
Subclass for Cisco Firewall Services Modules.
See documentation in SNMP::Info::Layer3::CiscoFWSM for details.
SNMP::Info::Layer3::Contivity
Subclass for Nortel Contivity/VPN Routers.
@@ -531,7 +598,7 @@ SUBCLASSES
SNMP::Info::Layer3::HP9300
Subclass for HP network devices which Foundry Networks was the
Original Equipment Manufacturer (OEM) such as the HP ProCurve
9300 series.
9300 and 6300 series.
See documentation in SNMP::Info::Layer3::HP9300 for details.
@@ -546,6 +613,11 @@ SUBCLASSES
See documentation in SNMP::Info::Layer3::Microsoft for details.
SNMP::Info::Layer3::Mikrotik
Subclass for Mikrotik devices running RouterOS.
See documentation in SNMP::Info::Layer3::Mikrotik for details.
SNMP::Info::Layer3::N1600
Subclass for Nortel Ethernet Routing Switch 1600 series.
@@ -561,17 +633,33 @@ SUBCLASSES
See documentation in SNMP::Info::Layer3::Netscreen for details.
SNMP::Info::Layer3::PacketFront
Subclass for PacketFront DRG series CPE.
See documentation in SNMP::Info::Layer3::PacketFront for
details.
SNMP::Info::Layer3::Passport
Subclass for Nortel Ethernet Routing Switch/Passport 8000 series
and Accelar series switches.
See documentation in SNMP::Info::Layer3::Passport for details.
SNMP::Info::Layer3::Pf
Subclass for FreeBSD-Based Firewalls using Pf /Pf Sense
See documentation in SNMP::Info::Layer3::Pf for details.
SNMP::Info::Layer3::Sun
Subclass for Generic Sun Routers running SunOS.
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 +842,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
@@ -1197,6 +1223,7 @@ USAGE
-- route to a non-local
indirect(4) -- host/network/sub-network
"The type of route. Note that the values
direct(3) and indirect(4) refer to the notion of
direct and indirect routing in the IP
@@ -1409,6 +1436,7 @@ EXTENDING SNMP::INFO
'super_hero_powers' => 'SuperHeroIfPowers'
);
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE,
'super_hero_powers' => \&munge_powers
@@ -1533,6 +1561,12 @@ SNMP::INFO INTERNALS
'2488000000' => 'OC-48',
)
Note: high speed interfaces (usually 1 Gbps or faster) have their
link speed in "ifHighSpeed". i_speed() automatically determines
whether to use "ifSpeed" or "ifHighSpeed"; if the latter is used,
the value is munged by munge_highspeed(). SNMP::Info can return
speeds up to terabit levels this way.
munge_highspeed()
Makes human friendly speed ratings for "ifHighSpeed"
@@ -1565,9 +1599,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 +1691,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 +1783,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-2010
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.06';
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,16 +73,19 @@ 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();
my $descr = $dev->description();
unless (defined $layers){
die "Are you sure you got the right community string and version?\nCan't fetch layers.\n";
unless (defined $layers or defined $descr){
die "Are you sure you got the right community string and version?\nCan't fetch layers or description.\n";
}
print "Fetching global info...\n\n";
@@ -182,6 +201,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;