Compare commits
82 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
440bb002b6 | ||
|
|
6dd3f4b21a | ||
|
|
1278117b05 | ||
|
|
5c6c75b42e | ||
|
|
d78e5d6656 | ||
|
|
094c2d548d | ||
|
|
4913ac6cdd | ||
|
|
ac9efcf8ba | ||
|
|
6b4444d97a | ||
|
|
607d5f04bd | ||
|
|
b46aa416a0 | ||
|
|
800aa0b4f0 | ||
|
|
a0e0be2d68 | ||
|
|
3fa47dc2e6 | ||
|
|
25141d3c8e | ||
|
|
1f02aeaec4 | ||
|
|
5d4aada8f5 | ||
|
|
3bd7f78277 | ||
|
|
3994706465 | ||
|
|
12bf18ac02 | ||
|
|
5c6a8f3c45 | ||
|
|
ddddb703aa | ||
|
|
5ef4c78f8a | ||
|
|
05a7f104a4 | ||
|
|
da1183b4fa | ||
|
|
a51ad7ee88 | ||
|
|
df3e0e3b3a | ||
|
|
c156584417 | ||
|
|
74e649a033 | ||
|
|
342a45a424 | ||
|
|
7076c236ea | ||
|
|
0d90383ea3 | ||
|
|
fe59f88dd3 | ||
|
|
2f4704b18d | ||
|
|
c8c94bbd8b | ||
|
|
054e27e827 | ||
|
|
766f14d2bf | ||
|
|
4e52756a41 | ||
|
|
55fc398ddf | ||
|
|
a5e8e6c7cd | ||
|
|
bb8762835f | ||
|
|
7c8b1a8853 | ||
|
|
be8140a142 | ||
|
|
f7c57860b7 | ||
|
|
c44fc3ddbe | ||
|
|
c2fd3bd3a4 | ||
|
|
dfff2624ac | ||
|
|
91c40fddb6 | ||
|
|
cafeb36418 | ||
|
|
fa56c7b332 | ||
|
|
a52f1f3d37 | ||
|
|
476053c539 | ||
|
|
0530c5d9e9 | ||
|
|
b982e95c42 | ||
|
|
de286cbfa0 | ||
|
|
a94c685c6d | ||
|
|
58feb21dec | ||
|
|
81f0b821e3 | ||
|
|
ea8275677b | ||
|
|
c0891ec8c0 | ||
|
|
9dd38845a6 | ||
|
|
0d8aa25e63 | ||
|
|
f57c9333da | ||
|
|
f060b67b4a | ||
|
|
c59e13ac35 | ||
|
|
a49d1522b0 | ||
|
|
39e618f761 | ||
|
|
3d812e0eae | ||
|
|
4f1ac32865 | ||
|
|
d176570b1d | ||
|
|
393fb71b1a | ||
|
|
bd1be7e258 | ||
|
|
e296e93b23 | ||
|
|
bd457307ff | ||
|
|
f988cecc4d | ||
|
|
d2f67b2db2 | ||
|
|
c4a4c3d5e6 | ||
|
|
fa38fdbc2b | ||
|
|
2e03e3faca | ||
|
|
e448915e0b | ||
|
|
37836bedac | ||
|
|
a60663b238 |
@@ -1,3 +1,8 @@
|
|||||||
|
All code from version 0.7 on
|
||||||
|
Copyright (c) 2003,2004 Max Baker
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Original Code
|
||||||
Copyright (c) 2002,2003 Regents of the University of California
|
Copyright (c) 2002,2003 Regents of the University of California
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|||||||
46
ChangeLog
46
ChangeLog
@@ -1,6 +1,46 @@
|
|||||||
SNMP::Info - Perl5 OO Interface to Network Devices and SNMP MIBs
|
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
|
||||||
ChangeLog $Id$
|
ChangeLog $Id$
|
||||||
|
|
||||||
|
version 0.8 (03/21/04)
|
||||||
|
+ Added Q-BRIDGE-MIB support to SNMP::Info::Bridge
|
||||||
|
+ Added Aironet AP4800 to Layer3::Aironet class
|
||||||
|
+ Added C3500XL devices to the Layer2::C2900 class
|
||||||
|
+ Added Cisco 3750 (37xxstack) to Layer3::C6500 class
|
||||||
|
+ Added Cisco Catalyst 4000 to Layer3::C6500 class
|
||||||
|
+ Added Cisco Catalyst 2970 to Layer3::C6500 Class
|
||||||
|
* Made Cisco Commuinty string indexing a boolean method for clarification
|
||||||
|
* Added VLAN info for HP devices using Q-BRIDGE-MIB
|
||||||
|
* Fixed warning about uninitialized value in CiscoStats line 92
|
||||||
|
* Added for more serial# checking for L2 and L3
|
||||||
|
* Fixed warning in Layer2::Bay about non numeric port line 199
|
||||||
|
Contributions from Dmitry Sergienko:
|
||||||
|
+ Added Cisco Aironet BR500 and AP1200 to L2::Aironet Class
|
||||||
|
* Fixed the Port name alias for Catalyst 2900 devices
|
||||||
|
+ Added Support For ZiLEX DSLAMs and Allied Telesys Switches
|
||||||
|
|
||||||
|
version 0.7 (08/14/03)
|
||||||
|
* Added Class for Catalyst 6500 Series - Layer3::C6500
|
||||||
|
* Added CiscoVTP support to 3550,2900, and Catalyst classes
|
||||||
|
* Extracted VLAN stuff from Layer2::Catalyst to SNMP::Info::CiscoVTP
|
||||||
|
* Extracted CISCO-STACK-MIB from Layer2::Catalyst to SNMP::Info::CiscoStack
|
||||||
|
* Added 2950's to the Layer2::C2900 class
|
||||||
|
* Added 3548's and 350x's to the Layer3::C3550 class
|
||||||
|
* Broke out 3550's into separate device types (3550-24, 3550-48)
|
||||||
|
* Added T1,dual T1, and T3 , ATM over OC-12 ... to the SPEED_MAP
|
||||||
|
* Fixed speed map -- OC-1 -> OC-3
|
||||||
|
* Fixed Bug where Catalyst Switch running IOS would report CatOS as os()
|
||||||
|
|
||||||
|
version 0.6 (06/18/03)
|
||||||
|
* Minor Bug Fix. SNMP::Info::Layer2::Bay and SNMP::Info::Layer2::C1900
|
||||||
|
didn't return 1 and failed to load on some versions of Perl.
|
||||||
|
|
||||||
|
version 0.5 (06/10/03)
|
||||||
|
* Added ability to get paritial tables. For example to get the
|
||||||
|
IP routing table for 128.114.* you can do
|
||||||
|
$ipr = $dev->ipr_dest('128.114');
|
||||||
|
* Added IP Routing Table entries from RFC1213 to SNMP::Info
|
||||||
|
* minor bug fixes
|
||||||
|
|
||||||
version 0.4 (04/29/03)
|
version 0.4 (04/29/03)
|
||||||
* BIG CHANGE ! Internal Data structure has changed.
|
* BIG CHANGE ! Internal Data structure has changed.
|
||||||
* Added clear_cache() method
|
* Added clear_cache() method
|
||||||
@@ -24,11 +64,11 @@ version 0.3 (03/06/03)
|
|||||||
and _load_attr
|
and _load_attr
|
||||||
* Added more debugging
|
* Added more debugging
|
||||||
* Added info and munging for c_capabilities in SNMP::Info::CD
|
* Added info and munging for c_capabilities in SNMP::Info::CD
|
||||||
Thanks to Martin Lorensen <martin@lorensen.dk>
|
Thanks to Martin Lorensen <martin /at- lorensen.dk>
|
||||||
* Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
|
* Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
|
||||||
so that the Module will install via CPAN without trying to install the old
|
so that the Module will install via CPAN without trying to install the old
|
||||||
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
|
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
|
||||||
Thanks again to Martin Lorensen <martin@lorensen.dk>
|
Thanks again to Martin Lorensen <martin /at- lorensen.dk>
|
||||||
* Moved tests from test.pl to t/*
|
* Moved tests from test.pl to t/*
|
||||||
|
|
||||||
version 0.2 (02/19/03)
|
version 0.2 (02/19/03)
|
||||||
|
|||||||
345
DeviceMatrix.txt
Normal file
345
DeviceMatrix.txt
Normal file
@@ -0,0 +1,345 @@
|
|||||||
|
# SNMP Device Compatibility Matrix
|
||||||
|
# SNMP::Info - (C) 2004 Max Baker
|
||||||
|
|
||||||
|
# This file is meant to detail the cababilities
|
||||||
|
# of network devices to supply data via SNMP.
|
||||||
|
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
# Allied
|
||||||
|
device-vendor: Allied Telesyn
|
||||||
|
cdp:no
|
||||||
|
|
||||||
|
device-family: Allied Hubs
|
||||||
|
class: Layer1::Allied
|
||||||
|
ver: 1
|
||||||
|
arpnip: no
|
||||||
|
macsuck: no
|
||||||
|
duplex: no
|
||||||
|
|
||||||
|
device: AT-3624T
|
||||||
|
|
||||||
|
device-family: AT-8000 Switches
|
||||||
|
class: Layer2::Allied
|
||||||
|
ver: 2
|
||||||
|
macsuck: yes
|
||||||
|
|
||||||
|
# Asante
|
||||||
|
device-vendor: Asante
|
||||||
|
|
||||||
|
device-family: Asante Hubs
|
||||||
|
class: Layer1::Asante
|
||||||
|
ver: 1
|
||||||
|
arpnip: no
|
||||||
|
macsuck: no
|
||||||
|
duplex: no
|
||||||
|
|
||||||
|
device: 1012
|
||||||
|
|
||||||
|
# Bay
|
||||||
|
device-vendor: Bay Networks
|
||||||
|
class: Layer2::Bay
|
||||||
|
ver: 1
|
||||||
|
|
||||||
|
device-family: BayStack
|
||||||
|
macsuck: yes
|
||||||
|
cdp: proprietary
|
||||||
|
note: SNMP interface does not respond after 2+ months of uptime. Reboot to fix.
|
||||||
|
|
||||||
|
device: 303
|
||||||
|
device: 304
|
||||||
|
device: 450
|
||||||
|
note: Labels full duplex as 20Mbit connection.
|
||||||
|
|
||||||
|
# CISCO
|
||||||
|
device-vendor: Cisco
|
||||||
|
cdp: yes
|
||||||
|
ver: 2
|
||||||
|
note: Error in CISCO-TC-MIB. See README for how to patch.
|
||||||
|
|
||||||
|
device-family: Aironet
|
||||||
|
note: IOS and Aironet OS versions
|
||||||
|
class: Layer3::Aironet
|
||||||
|
|
||||||
|
device: AIRAP1100, AP1200, C1100
|
||||||
|
note: IOS based device
|
||||||
|
class: Layer2::Aironet
|
||||||
|
|
||||||
|
device: BR500
|
||||||
|
note: Aironet based device
|
||||||
|
|
||||||
|
device: AP350, AP340, CAP350, CAP340, 1200, AP4800
|
||||||
|
note: Aironet based device
|
||||||
|
|
||||||
|
device-family: 1000
|
||||||
|
duplex: no
|
||||||
|
ver: 1
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: 1003
|
||||||
|
|
||||||
|
device-family: 1700
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: 1710
|
||||||
|
duplex: link
|
||||||
|
|
||||||
|
device-family: 2500
|
||||||
|
duplex: no
|
||||||
|
macsuck: yes
|
||||||
|
arpnip: yes
|
||||||
|
ver: 1
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: 2501
|
||||||
|
|
||||||
|
device: 2503
|
||||||
|
|
||||||
|
device: AS2509RJ
|
||||||
|
|
||||||
|
device: AS2511RJ
|
||||||
|
|
||||||
|
device: 2511
|
||||||
|
|
||||||
|
device: 2514
|
||||||
|
|
||||||
|
device-family: 2600
|
||||||
|
duplex: link
|
||||||
|
arpnip: yes
|
||||||
|
macsuck: yes
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device:2610,2610XM,2611,2620,2620XM,2621
|
||||||
|
|
||||||
|
device:2621XM
|
||||||
|
|
||||||
|
device:2651XM
|
||||||
|
|
||||||
|
device:2691
|
||||||
|
|
||||||
|
device-family: 3600
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: 3620
|
||||||
|
|
||||||
|
device: 3640
|
||||||
|
duplex: no
|
||||||
|
|
||||||
|
device-family: 7500
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: 7507
|
||||||
|
duplex: no
|
||||||
|
note: !Duplex settings are falsely reported in older IOS versions
|
||||||
|
|
||||||
|
device-family: AS5000
|
||||||
|
duplex: no
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: AS5300
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cisco - Catalyst
|
||||||
|
#
|
||||||
|
device-family: Catalyst 1900
|
||||||
|
note: !Upgrade older (pre 9.0) versions of CatOS
|
||||||
|
ver: 1
|
||||||
|
class: Layer2::C1900
|
||||||
|
|
||||||
|
device: wsc1900c
|
||||||
|
device-family: Catalyst 1900
|
||||||
|
|
||||||
|
device: wsc1900
|
||||||
|
device-family: Catalyst 1900
|
||||||
|
|
||||||
|
device-family: Catalyst 2900
|
||||||
|
note: IOS
|
||||||
|
macsuck: vlan
|
||||||
|
class: Layer3::C2900
|
||||||
|
portmac: yes
|
||||||
|
note: !Pre IOS 11.2 (8) SA3 - PortMAC shows up in CAM table.
|
||||||
|
|
||||||
|
device: 2908xl
|
||||||
|
note: !Pre IOS 11.2 (8.6) some features (duplex...) aren't present.
|
||||||
|
|
||||||
|
device: 2912MfXL
|
||||||
|
|
||||||
|
device: 2924MXL
|
||||||
|
ver: 1
|
||||||
|
portmac: yes
|
||||||
|
|
||||||
|
device: 2924CXL
|
||||||
|
|
||||||
|
device: 2924CXLv
|
||||||
|
|
||||||
|
device-family: Catlayst 2940
|
||||||
|
|
||||||
|
device: 2940-8TT
|
||||||
|
|
||||||
|
device-family: Catalyst 2950
|
||||||
|
|
||||||
|
device: 2950-t24
|
||||||
|
|
||||||
|
device-family: Catalyst 2970
|
||||||
|
macsuck:vlan
|
||||||
|
note: Acts just like IOS Catalyst 6500 series
|
||||||
|
class: Layer3::C6500
|
||||||
|
|
||||||
|
device: 2970G-24T-E
|
||||||
|
|
||||||
|
device-family: Catalyst 3500 XL
|
||||||
|
portmac: yes
|
||||||
|
macsuck: vlan
|
||||||
|
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-family: Catalyst 3550
|
||||||
|
macsuck: vlan
|
||||||
|
duplex: both
|
||||||
|
class: Layer3::C3550
|
||||||
|
note: Run IOS
|
||||||
|
note: Has VLANs that don't accept SNMP connections. Don't know if they are standard (by name or number).
|
||||||
|
note: Uses CISCO-STACK-MIB like Catalyst 5000 series for serial,duplex,type but not name
|
||||||
|
note: Comes in flavors that support L2, L3 or combo.
|
||||||
|
|
||||||
|
device: 3550-12T
|
||||||
|
|
||||||
|
device: 3550
|
||||||
|
note: L2/L3 Switch
|
||||||
|
arpnip: yes
|
||||||
|
|
||||||
|
device: 3550-24, 3550-48
|
||||||
|
macsuck: vlan
|
||||||
|
|
||||||
|
device-family: Catalyst 3750
|
||||||
|
class: Layer3::C6500
|
||||||
|
|
||||||
|
device-family: Catalyst 4000
|
||||||
|
duplex: both
|
||||||
|
macsuck: vlan
|
||||||
|
class: Layer3::C6500
|
||||||
|
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.
|
||||||
|
|
||||||
|
device: wsc4006
|
||||||
|
|
||||||
|
device: 4507
|
||||||
|
note: !IOS device -- Test against C3550 and C6000 classes
|
||||||
|
class: Layer3
|
||||||
|
|
||||||
|
device: wsc4912g
|
||||||
|
note: Dedicated 12 port gig-e switch
|
||||||
|
|
||||||
|
device-family: Catalyst 5000
|
||||||
|
duplex: both
|
||||||
|
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: wsc5000
|
||||||
|
note: !Has nasty tendency to not give you all SNMP data ,flaky for some older Catalyst versions.
|
||||||
|
|
||||||
|
device: wsc5505
|
||||||
|
|
||||||
|
device: wsc5509
|
||||||
|
|
||||||
|
device: wsc5500
|
||||||
|
|
||||||
|
device: wsx5302
|
||||||
|
arpnip: yes
|
||||||
|
class: Layer3
|
||||||
|
note: Router blade that runs IOS
|
||||||
|
|
||||||
|
device-family: Catalyst 6500
|
||||||
|
macsuck:vlan
|
||||||
|
class: Layer3::C6500
|
||||||
|
note: Runs in two possible modes, native (IOS) and hybrid (IOS with CatOS on top).
|
||||||
|
note: Switch running Hybrid has WS-C in description field and loves L2::Catalyst class
|
||||||
|
note: Native Mode (IOS) versions seem to have SNMP problems with L2 data.
|
||||||
|
|
||||||
|
device: 6503
|
||||||
|
macsuck:no
|
||||||
|
note: !Macsuck failing even under vlan mode
|
||||||
|
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: both
|
||||||
|
class: Layer2::Catalyst
|
||||||
|
note: Hybrid Mode (Catalyst) reports L2 only
|
||||||
|
|
||||||
|
device: 6kMsfc
|
||||||
|
class: Layer3
|
||||||
|
note: IOS portion of Hybrid mode. VLAN and other L3 Services.
|
||||||
|
|
||||||
|
device: 6kMsfc2
|
||||||
|
class: Layer3
|
||||||
|
note: IOS portion of Hybrid mode. VLAN and other L3 Services.
|
||||||
|
|
||||||
|
device-family: Voice Gateway
|
||||||
|
class: Layer3
|
||||||
|
duplex: no
|
||||||
|
|
||||||
|
device: VG200
|
||||||
|
|
||||||
|
# Foundry
|
||||||
|
device-vendor: Foundry Networks
|
||||||
|
class: Layer3::Foundry
|
||||||
|
|
||||||
|
device-family: FastIron
|
||||||
|
ver: 1
|
||||||
|
|
||||||
|
# HP
|
||||||
|
device-vendor: HP
|
||||||
|
class: Layer2::HP
|
||||||
|
ver: 2
|
||||||
|
|
||||||
|
device-family: HP ProCurve
|
||||||
|
duplex: both
|
||||||
|
macsuck: yes
|
||||||
|
arpnip: no
|
||||||
|
cdp: yes
|
||||||
|
note: CDP only available with newer ROM versions.
|
||||||
|
|
||||||
|
device: 2512
|
||||||
|
ver: 1
|
||||||
|
|
||||||
|
device: 2524
|
||||||
|
ver: 1
|
||||||
|
|
||||||
|
device: 4000
|
||||||
|
note: duplex issues?
|
||||||
|
|
||||||
|
device: 4104GL
|
||||||
|
duplex: link
|
||||||
|
|
||||||
|
device: 4108GL,8000,2626,2650,8000
|
||||||
|
note: VLAN info in Q-BRIDGE-MIB
|
||||||
|
|
||||||
|
device-vendor: Zyxel
|
||||||
|
class: Layer2::ZyXEL_DSLAM
|
||||||
|
note: Doesn't report sysServices (layers)
|
||||||
|
|
||||||
|
device-family: Zyxel DSLAM
|
||||||
|
|
||||||
|
device:AAM10008-61, AAM1008-63
|
||||||
502
Info.pm
502
Info.pm
@@ -1,13 +1,15 @@
|
|||||||
# SNMP::Info - Max Baker <max@warped.org>
|
# SNMP::Info - Max Baker
|
||||||
# $Id$
|
# $Id$
|
||||||
#
|
#
|
||||||
|
# Portions Copyright (c) 2003,2004 Max Baker
|
||||||
|
# All rights reserved.
|
||||||
# Copyright (c) 2002-3, Regents of the University of California
|
# Copyright (c) 2002-3, Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# See COPYRIGHT at bottom
|
# See COPYRIGHT at bottom
|
||||||
|
|
||||||
package SNMP::Info;
|
package SNMP::Info;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
@@ -27,13 +29,14 @@ SNMP::Info - Object Oriented Perl5 Interface to Network devices and MIBs through
|
|||||||
|
|
||||||
=head1 VERSION
|
=head1 VERSION
|
||||||
|
|
||||||
SNMP::Info - Version 0.4
|
SNMP::Info - Version 0.8
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Max Baker (C<max@warped.org>)
|
Max Baker
|
||||||
|
|
||||||
SNMP::Info was created at UCSC for the netdisco project (www.netdisco.org)
|
SNMP::Info was created at UCSC for the netdisco project (www.netdisco.org)
|
||||||
|
and is written and maintained by Max Baker.
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
@@ -47,13 +50,13 @@ SNMP::Info was created at UCSC for the netdisco project (www.netdisco.org)
|
|||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
) or die "Can't connect to device.\n"
|
) or die "Can't connect to device.\n";
|
||||||
|
|
||||||
my $err = $info->error();
|
my $err = $info->error();
|
||||||
die "SNMP Community or Version probably wrong connecting to device. $err\n" if defined $err;
|
die "SNMP Community or Version probably wrong connecting to device. $err\n" if defined $err;
|
||||||
|
|
||||||
$name = $info->name();
|
$name = $info->name();
|
||||||
$class = $info->class()
|
$class = $info->class();
|
||||||
print "SNMP::Info is using this device class : $class\n";
|
print "SNMP::Info is using this device class : $class\n";
|
||||||
|
|
||||||
# Find out the Duplex status for the ports
|
# Find out the Duplex status for the ports
|
||||||
@@ -85,6 +88,11 @@ SNMP::Info was created at UCSC for the netdisco project (www.netdisco.org)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=head1 SUPPORT
|
||||||
|
|
||||||
|
Please direct all support, help, and bug requests to the snmp-info-users Mailing List
|
||||||
|
at L<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info gives an object oriented interface to information obtained through SNMP.
|
SNMP::Info gives an object oriented interface to information obtained through SNMP.
|
||||||
@@ -130,9 +138,7 @@ of the net-snmp distribution.
|
|||||||
Net-SNMP can be found at http://net-snmp.sourceforge.net
|
Net-SNMP can be found at http://net-snmp.sourceforge.net
|
||||||
|
|
||||||
Version 5.0.2 or greater is recommended. Various version 4's will work, and 5.0.1 is kinda flaky
|
Version 5.0.2 or greater is recommended. Various version 4's will work, and 5.0.1 is kinda flaky
|
||||||
on the Perl side.
|
on the Perl side. 5.1.x isn't tested but should work fine.
|
||||||
|
|
||||||
Note: Net-SNMP was previously called ucd-snmp.
|
|
||||||
|
|
||||||
=item 2. MIBS
|
=item 2. MIBS
|
||||||
|
|
||||||
@@ -140,7 +146,7 @@ SNMP::Info operates on textual descriptors found in MIBs. MIBs are text database
|
|||||||
are freely and easily obtainable on the Net.
|
are freely and easily obtainable on the Net.
|
||||||
|
|
||||||
Make sure that your snmp.conf is updated to point to your MIB directory
|
Make sure that your snmp.conf is updated to point to your MIB directory
|
||||||
and that the MIBs are world-readable.
|
and that the MIBs are world-readable.
|
||||||
|
|
||||||
Then run C<snmpconf> and setup that directory as default. Move F<snmp.conf>
|
Then run C<snmpconf> and setup that directory as default. Move F<snmp.conf>
|
||||||
into F</usr/local/share/snmp> when you are done.
|
into F</usr/local/share/snmp> when you are done.
|
||||||
@@ -173,13 +179,37 @@ Extract
|
|||||||
|
|
||||||
=item STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
|
=item STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
|
||||||
|
|
||||||
|
=item TOKEN-RING-RMON-MIB
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
by running
|
by running
|
||||||
|
|
||||||
mkdir -p /usr/local/share/snmp/mibs
|
mkdir -p /usr/local/share/snmp/mibs
|
||||||
cd /usr/local/share/snmp/mibs
|
cd /usr/local/share/snmp/mibs
|
||||||
tar xvfz /path/to/v1.tar.gz BRIDGE-MIB.my SNMP-REPEATER-MIB.my ESSWITCH-MIB.my
|
tar xvfz /path/to/v1.tar.gz BRIDGE-MIB.my SNMP-REPEATER-MIB.my ESSWITCH-MIB.my TOKEN-RING-RMON-MIB.my
|
||||||
|
|
||||||
|
=item Fix CISCO-TC-MIB
|
||||||
|
|
||||||
|
There is a problem with the Cisco file F<CISCO-TC.my> which
|
||||||
|
is included from lots of other MIBs. Make the following changes
|
||||||
|
if you run into errors about C<Unsigned32> in this file.
|
||||||
|
|
||||||
|
Edit F</usr/local/share/snmp/mibs/CISCO-TC.my>
|
||||||
|
|
||||||
|
Comment out line 192 that says C<SMI Unsigned32> with two dashes.
|
||||||
|
|
||||||
|
-- SMI Unsigned32
|
||||||
|
|
||||||
|
Add C<Unsigned32> to the imports after line 19:
|
||||||
|
|
||||||
|
IMPORTS
|
||||||
|
MODULE-IDENTITY,
|
||||||
|
Gauge32,
|
||||||
|
Integer32,
|
||||||
|
Counter64,
|
||||||
|
Unsigned32,
|
||||||
|
FROM SNMPv2-SMI
|
||||||
|
|
||||||
=item More Specific MIBs
|
=item More Specific MIBs
|
||||||
|
|
||||||
@@ -221,8 +251,9 @@ Or you can override any existing methods from a parent class by making a short s
|
|||||||
|
|
||||||
See the section EXTENDING SNMP::INFO for more details.
|
See the section EXTENDING SNMP::INFO for more details.
|
||||||
|
|
||||||
When you make a new subclass for a device, please be sure to send it
|
When you make a new subclass for a device, please be sure to send it back to
|
||||||
back to the developers at snmp@warped.org for inclusion in the next version.
|
the developers (via Source Forge or the mailing list) for inclusion in the next
|
||||||
|
version.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -241,12 +272,16 @@ used directly, but rather inherited from device subclasses.
|
|||||||
|
|
||||||
=item SNMP::Info::Bridge
|
=item SNMP::Info::Bridge
|
||||||
|
|
||||||
BRIDGE-MIB (RFC1286). Inherited by devices with Layer2 service.
|
BRIDGE-MIB (RFC1286). QBRIDGE-MIB. Inherited by devices with Layer2 support.
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
=item SNMP::Info::CDP
|
||||||
|
|
||||||
CISCO-CDP-MIB. Cisco Discovery Protocol (CDP) Support. Inherited by devices serving Layer2 or Layer3.
|
CISCO-CDP-MIB. Cisco Discovery Protocol (CDP) Support. Inherited by devices serving Layer2 or Layer3.
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
CISCO-STACK-MIB.
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
=item SNMP::Info::CiscoStats
|
||||||
|
|
||||||
Provides common interfaces for memory, cpu, and os statistics for Cisco devices. Provides methods for
|
Provides common interfaces for memory, cpu, and os statistics for Cisco devices. Provides methods for
|
||||||
@@ -303,6 +338,15 @@ Generic Layer2 Device subclass.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2::Aironet
|
||||||
|
|
||||||
|
Class for Cisco Aironet wireless devices that run IOS. See also
|
||||||
|
Layer3::Aironet for Aironet devices that don't run IOS.
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2::Allied
|
||||||
|
|
||||||
|
Allied Telesys switches.
|
||||||
|
|
||||||
=item SNMP::Info::Layer2::Bay
|
=item SNMP::Info::Layer2::Bay
|
||||||
|
|
||||||
Bay Networks BayStack switch Support. Provides translation from Bay Network Topology Table
|
Bay Networks BayStack switch Support. Provides translation from Bay Network Topology Table
|
||||||
@@ -318,12 +362,12 @@ Subclass for Cisco Catalyst 1900 and 1900c Devices running CatOS.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer2::C2900
|
=item SNMP::Info::Layer2::C2900
|
||||||
|
|
||||||
Subclass for Cisco Catalyst 2900 devices running IOS.
|
Subclass for Cisco Catalyst 2900, 2950, 3500XL, and 3548 devices running IOS.
|
||||||
|
|
||||||
=item SNMP::Info::Layer2::Catalyst
|
=item SNMP::Info::Layer2::Catalyst
|
||||||
|
|
||||||
Subclass for Cisco Catalyst switches running CatOS. These switches usually
|
Subclass for Cisco Catalyst switches running CatOS. These switches usually
|
||||||
report a model number that starts with ''wsc''. Note that this class
|
report a model number that starts with C<wsc>. Note that this class
|
||||||
does not support everything that has the name Catalyst.
|
does not support everything that has the name Catalyst.
|
||||||
|
|
||||||
=item SNMP::Info::Layer2::HP
|
=item SNMP::Info::Layer2::HP
|
||||||
@@ -334,6 +378,10 @@ Requires HP-ICF-OID and ENTITY-MIB downloaded from HP.
|
|||||||
|
|
||||||
See SNMP::Info::Layer2::HP for more info.
|
See SNMP::Info::Layer2::HP for more info.
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2::ZyXEL_DSLAM
|
||||||
|
|
||||||
|
Zyxel DSLAMs. Need I say more?
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
@@ -344,15 +392,16 @@ Generic Layer3 and Layer2+3 Device subclass.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer3::Aironet
|
=item SNMP::Info::Layer3::Aironet
|
||||||
|
|
||||||
Subclass for Cisco Aironet wireless access points (AP).
|
Subclass for Cisco Aironet wireless access points (AP) not running IOS. These are usually older
|
||||||
|
devices.
|
||||||
|
|
||||||
MIBs for these devices now included in v2.tar.gz available from ftp.cisco.com.
|
MIBs for these devices now included in v2.tar.gz available from ftp.cisco.com.
|
||||||
|
|
||||||
|
Note Layer2::Aironet
|
||||||
|
|
||||||
=item SNMP::Info::Layer3::Foundry
|
=item SNMP::Info::Layer3::Foundry
|
||||||
|
|
||||||
No longer supported.
|
Subclass for older Foundry Network devices. Outdated, but being updated for newer devices.
|
||||||
|
|
||||||
Subclass for older Foundry Network devices.
|
|
||||||
|
|
||||||
Requires FOUNDRY-SN-ROOT-MIB.
|
Requires FOUNDRY-SN-ROOT-MIB.
|
||||||
|
|
||||||
@@ -360,12 +409,23 @@ See SNMP::Info::Layer3::Foundry for more info.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer3::C3550
|
=item SNMP::Info::Layer3::C3550
|
||||||
|
|
||||||
Subclass for Cisco Catalyst 3550 2/3 switches running IOS.
|
Subclass for Cisco Catalyst 3550,354 2/3 switches running IOS.
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3::C6500
|
||||||
|
|
||||||
|
This class covers Catalyst 6500s in native mode, hybrid mode. Catalyst 4000's, 3750's, 2970's
|
||||||
|
and probably others.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Thanks
|
||||||
|
|
||||||
|
Thanks for testing and coding help (in no particular order) to :
|
||||||
|
Andy Ford, Brian Wilson, Jean-Philippe Luiggi, D<>na Watanabe, Bradley Baetz, and
|
||||||
|
people listed on the Netdisco README!
|
||||||
|
|
||||||
=head1 USAGE
|
=head1 USAGE
|
||||||
|
|
||||||
=head2 Constructor
|
=head2 Constructor
|
||||||
@@ -486,8 +546,8 @@ sub new {
|
|||||||
$new_obj->{store} = $store;
|
$new_obj->{store} = $store;
|
||||||
$new_obj->{sess} = $sess;
|
$new_obj->{sess} = $sess;
|
||||||
$new_obj->{args} = \%args;
|
$new_obj->{args} = \%args;
|
||||||
$new_obj->{snmp_ver} = $args{Version};
|
$new_obj->{snmp_ver} = $args{Version} || 2;
|
||||||
$new_obj->{snmp_comm} = $args{Community};
|
$new_obj->{snmp_comm} = $args{Community} || 'public';
|
||||||
|
|
||||||
return $auto_specific ?
|
return $auto_specific ?
|
||||||
$new_obj->specify() : $new_obj;
|
$new_obj->specify() : $new_obj;
|
||||||
@@ -567,20 +627,25 @@ SNMP::Info is returned.
|
|||||||
Algorithm for Subclass Detection:
|
Algorithm for Subclass Detection:
|
||||||
|
|
||||||
Layer3 Support -> SNMP::Info::Layer3
|
Layer3 Support -> SNMP::Info::Layer3
|
||||||
Aironet (non IOS) -> SNMP::Info::Layer3::Aironet
|
Aironet (BR500,AP340,350,1200) -> SNMP::Info::Layer3::Aironet
|
||||||
Catalyst 3550 -> SNMP::Info::Layer3::C3550
|
AP4800... All Non IOS
|
||||||
|
Catalyst 3550,3548 -> SNMP::Info::Layer3::C3550
|
||||||
|
Catalyst 6500, 4000, 3750 -> SNMP::Info::Layer3::C6500
|
||||||
Foundry -> SNMP::Info::Layer3::Foundry
|
Foundry -> SNMP::Info::Layer3::Foundry
|
||||||
Elsif Layer2 (no Layer3) -> SNMP::Info::Layer2
|
Elsif Layer2 (no Layer3) -> SNMP::Info::Layer2
|
||||||
Aironet (Cisco) AP1100 -> SNMP::Info::Layer2::Aironet
|
Aironet - IOS Devices -> SNMP::Info::Layer2::Aironet
|
||||||
Bay Networks -> SNMP::Info::Layer2::Bay
|
Bay Networks -> SNMP::Info::Layer2::Bay
|
||||||
Catalyst 1900 -> SNMP::Info::Layer2::C1900
|
Catalyst 1900 -> SNMP::Info::Layer2::C1900
|
||||||
Catalyst 2900XL (IOS) -> SNMP::Info::Layer2::C2900
|
Catalyst 2900XL,2950,3500XL -> SNMP::Info::Layer2::C2900
|
||||||
Catalyst WS-C (2926,5xxx,6xxx) -> SNMP::Info::Layer2::Catalyst
|
Catalyst 2970 -> SNMP::Info::Layer3::C6500
|
||||||
|
Catalyst 3550/3548 -> SNMP::Info::Layer3::C3550
|
||||||
|
Catalyst WS-C 2926,5xxx -> SNMP::Info::Layer2::Catalyst
|
||||||
HP Procurve -> SNMP::Info::Layer2::HP
|
HP Procurve -> SNMP::Info::Layer2::HP
|
||||||
Elsif Layer1 Support -> SNMP::Info::Layer1
|
Elsif Layer1 Support -> SNMP::Info::Layer1
|
||||||
Allied -> SNMP::Info::Layer1::Allied
|
Allied -> SNMP::Info::Layer1::Allied
|
||||||
Asante -> SNMP::Info::Layer1::Asante
|
Asante -> SNMP::Info::Layer1::Asante
|
||||||
Else -> SNMP::Info
|
Else -> SNMP::Info
|
||||||
|
ZyXEL_DSLAM -> SNMP::Info::Layer2::ZyXEL_DSLAM
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub device_type {
|
sub device_type {
|
||||||
@@ -592,7 +657,9 @@ sub device_type {
|
|||||||
# if we dont have sysServices, we dont have anything else either probably.
|
# if we dont have sysServices, we dont have anything else either probably.
|
||||||
return undef unless (defined $layers and length($layers));
|
return undef unless (defined $layers and length($layers));
|
||||||
|
|
||||||
my $desc = $info->description();
|
my $desc = $info->description() || 'undef';
|
||||||
|
$desc =~ s/[\r\n\l]+/ /g;
|
||||||
|
$info->debug() and print "SNMP::Info::device_type() layers:$layers sysDescr: \"$desc\".\n";
|
||||||
|
|
||||||
# Layer 3 Supported
|
# Layer 3 Supported
|
||||||
# (usually has layer2 as well, so we check for 3 first)
|
# (usually has layer2 as well, so we check for 3 first)
|
||||||
@@ -605,7 +672,17 @@ sub device_type {
|
|||||||
|
|
||||||
$objtype = 'SNMP::Info::Layer3::C3550' if $desc =~ /C3550/ ;
|
$objtype = 'SNMP::Info::Layer3::C3550' if $desc =~ /C3550/ ;
|
||||||
$objtype = 'SNMP::Info::Layer3::Foundry' if $desc =~ /foundry/i ;
|
$objtype = 'SNMP::Info::Layer3::Foundry' if $desc =~ /foundry/i ;
|
||||||
$objtype = 'SNMP::Info::Layer3::Aironet' if ($desc =~ /cisco/i and $desc =~ /\D3[45]0\D/) ;
|
# Aironet - older non-IOS
|
||||||
|
$objtype = 'SNMP::Info::Layer3::Aironet' if ($desc =~ /Cisco/ and $desc =~ /\D(CAP340|AP340|CAP350|350|1200)\D/) ;
|
||||||
|
$objtype = 'SNMP::Info::Layer3::Aironet' if ($desc =~ /Aironet/ and $desc =~ /\D(AP4800)\D/) ;
|
||||||
|
$objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /(c6sup2|c6sup1)/;
|
||||||
|
# Next two untested. Reported working by DA
|
||||||
|
$objtype = 'SNMP::Info::Layer3::C6500' if ($desc =~ /cisco/i and $desc =~ /3750/);
|
||||||
|
$objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /Catalyst 4000/;
|
||||||
|
$objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /s72033_rp/;
|
||||||
|
|
||||||
|
# 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);
|
||||||
|
|
||||||
# Layer 2 Supported
|
# Layer 2 Supported
|
||||||
} elsif ($info->has_layer(2)) {
|
} elsif ($info->has_layer(2)) {
|
||||||
@@ -618,27 +695,40 @@ sub device_type {
|
|||||||
# Catalyst 1900 series override
|
# Catalyst 1900 series override
|
||||||
$objtype = 'SNMP::Info::Layer2::C1900' if ($desc =~ /catalyst/i and $desc =~ /\D19\d{2}/);
|
$objtype = 'SNMP::Info::Layer2::C1900' if ($desc =~ /catalyst/i and $desc =~ /\D19\d{2}/);
|
||||||
|
|
||||||
# Catalyst 2900 (IOS) series override
|
# Catalyst 2900 and 3500XL (IOS) series override
|
||||||
$objtype = 'SNMP::Info::Layer2::C2900' if ($desc =~ /C2900XL/i );
|
$objtype = 'SNMP::Info::Layer2::C2900' if ($desc =~ /(C2900XL|C2950|C3500XL)/i );
|
||||||
|
|
||||||
# Catalyst WS-C series override (2926,5xxx,6xxx)
|
# Catalyst WS-C series override 2926,4k,5k,6k in Hybrid
|
||||||
$objtype = 'SNMP::Info::Layer2::Catalyst' if ($desc =~ /WS-C\d{4}/);
|
$objtype = 'SNMP::Info::Layer2::Catalyst' if ($desc =~ /WS-C\d{4}/);
|
||||||
|
|
||||||
|
# Catalyst 3550 / 3548 Layer2 only switches
|
||||||
|
$objtype = 'SNMP::Info::Layer3::C3550' if ($desc =~ /C3550/);
|
||||||
|
|
||||||
|
# Cisco 2970
|
||||||
|
$objtype = 'SNMP::Info::Layer3::C6500' if ($desc =~ /C2970/);
|
||||||
|
|
||||||
# HP
|
# HP
|
||||||
$objtype = 'SNMP::Info::Layer2::HP' if ($desc =~ /hp/i);
|
$objtype = 'SNMP::Info::Layer2::HP' if ($desc =~ /HP.*ProCurve/);
|
||||||
|
|
||||||
# Bay Switch
|
# Bay Switch
|
||||||
$objtype = 'SNMP::Info::Layer2::Bay' if ($desc =~ /bay/i);
|
$objtype = 'SNMP::Info::Layer2::Bay' if ($desc =~ /BayStack/);
|
||||||
|
|
||||||
# Aironet
|
# Aironet - IOS
|
||||||
$objtype = 'SNMP::Info::Layer2::Aironet' if ($desc =~ /C1100/);
|
$objtype = 'SNMP::Info::Layer2::Aironet' if ($desc =~ /(C1100|AP1200)/);
|
||||||
|
|
||||||
|
# Aironet - non IOS
|
||||||
|
$objtype = 'SNMP::Info::Layer3::Aironet' if ($desc =~ /Cisco/ and $desc =~ /\D(BR500)\D/) ;
|
||||||
|
|
||||||
} elsif ($info->has_layer(1)) {
|
} elsif ($info->has_layer(1)) {
|
||||||
$objtype = 'SNMP::Info::Layer1';
|
$objtype = 'SNMP::Info::Layer1';
|
||||||
# Allied crap-o-hub
|
# Allied crap-o-hub
|
||||||
$objtype = 'SNMP::Info::Layer1::Allied' if ($desc =~ /allied/i);
|
$objtype = 'SNMP::Info::Layer1::Allied' if ($desc =~ /allied/i);
|
||||||
$objtype = 'SNMP::Info::Layer1::Asante' if ($desc =~ /asante/i);
|
$objtype = 'SNMP::Info::Layer1::Asante' if ($desc =~ /asante/i);
|
||||||
}
|
|
||||||
|
# These devices don't claim to have Layer1-3 but we like em anyways.
|
||||||
|
} else {
|
||||||
|
$objtype = 'SNMP::Info::Layer2::ZyXEL_DSLAM' if ($desc =~ /8-port .DSL Module\(Annex .\)/i);
|
||||||
|
}
|
||||||
|
|
||||||
return $objtype;
|
return $objtype;
|
||||||
}
|
}
|
||||||
@@ -678,7 +768,7 @@ sub has_layer {
|
|||||||
|
|
||||||
=item $info->snmp_comm()
|
=item $info->snmp_comm()
|
||||||
|
|
||||||
Returns SNMP Community string used in conncetion
|
Returns SNMP Community string used in connection.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub snmp_comm {
|
sub snmp_comm {
|
||||||
@@ -708,7 +798,6 @@ Usually this method is called internally from new(AutoSpecify => 1)
|
|||||||
|
|
||||||
See device_type() entry for how a subclass is chosen.
|
See device_type() entry for how a subclass is chosen.
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub specify {
|
sub specify {
|
||||||
@@ -742,6 +831,20 @@ sub specify {
|
|||||||
return $sub_obj;
|
return $sub_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $info->cisco_comm_indexing()
|
||||||
|
|
||||||
|
Returns 0. Is an overridable method used for vlan indexing for
|
||||||
|
snmp calls on certain Cisco devices.
|
||||||
|
|
||||||
|
See L<ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
sub cisco_comm_indexing{
|
||||||
|
0;
|
||||||
|
}
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Globals (Scalar Methods)
|
=head2 Globals (Scalar Methods)
|
||||||
|
|
||||||
These are methods to return scalar data from RFC1213.
|
These are methods to return scalar data from RFC1213.
|
||||||
@@ -752,7 +855,7 @@ Some subset of these is probably available for any network device that speaks SN
|
|||||||
|
|
||||||
=item $info->uptime()
|
=item $info->uptime()
|
||||||
|
|
||||||
Uptime in hundreths of seconds since device became available.
|
Uptime in hundredths of seconds since device became available.
|
||||||
|
|
||||||
(B<sysUpTime>)
|
(B<sysUpTime>)
|
||||||
|
|
||||||
@@ -799,6 +902,7 @@ correspond with the number of physical ports
|
|||||||
Each of these methods returns a hash_reference to a hash keyed on the interface index in SNMP.
|
Each of these methods returns a hash_reference to a hash keyed on the interface index in SNMP.
|
||||||
|
|
||||||
Example : $info->interfaces() might return
|
Example : $info->interfaces() might return
|
||||||
|
|
||||||
{ '1.12' => 'FastEthernet/0',
|
{ '1.12' => 'FastEthernet/0',
|
||||||
'2.15' => 'FastEthernet/1',
|
'2.15' => 'FastEthernet/1',
|
||||||
'9.99' => 'FastEthernet/2'
|
'9.99' => 'FastEthernet/2'
|
||||||
@@ -807,6 +911,20 @@ Example : $info->interfaces() might return
|
|||||||
The key is what you would see if you were to do an snmpwalk, and in some cases changes between reboots of
|
The key is what you would see if you were to do an snmpwalk, and in some cases changes between reboots of
|
||||||
the network device.
|
the network device.
|
||||||
|
|
||||||
|
=head2 Partial Table Fetches
|
||||||
|
|
||||||
|
If you want to get only a part of an SNMP table and you know the IID for the part of the table that you
|
||||||
|
want, you can specify it in the call:
|
||||||
|
|
||||||
|
$local_routes = $info->ipr_route('192.168.0');
|
||||||
|
|
||||||
|
This will only fetch entries in the table that start with C<192.168.0>, which in this case are routes on the local
|
||||||
|
network.
|
||||||
|
|
||||||
|
Remember that you must supply the partial IID (a numeric OID).
|
||||||
|
|
||||||
|
Partial table results are not cached.
|
||||||
|
|
||||||
=head3 Interface Information
|
=head3 Interface Information
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -996,6 +1114,139 @@ Gives broadcast address for IP table entry.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head3 IP Routing Table
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $info->ipr_route()
|
||||||
|
|
||||||
|
The route in question. A value of 0.0.0.0 is the default gateway route.
|
||||||
|
|
||||||
|
(C<ipRouteDest>)
|
||||||
|
|
||||||
|
=item $info->ipr_if()
|
||||||
|
|
||||||
|
The interface (IID) that the route is on. Use interfaces() to map.
|
||||||
|
|
||||||
|
(C<ipRouteIfIndex>)
|
||||||
|
|
||||||
|
=item $info->ipr_1()
|
||||||
|
|
||||||
|
Primary routing metric for this route.
|
||||||
|
|
||||||
|
(C<ipRouteMetric1>)
|
||||||
|
|
||||||
|
=item $info->ipr_2()
|
||||||
|
|
||||||
|
If metrics are not used, they should be set to -1
|
||||||
|
|
||||||
|
(C<ipRouteMetric2>)
|
||||||
|
|
||||||
|
=item $info->ipr_3()
|
||||||
|
|
||||||
|
(C<ipRouteMetric3>)
|
||||||
|
|
||||||
|
=item $info->ipr_4()
|
||||||
|
|
||||||
|
(C<ipRouteMetric4>)
|
||||||
|
|
||||||
|
=item $info->ipr_5()
|
||||||
|
|
||||||
|
(C<ipRouteMetric5>)
|
||||||
|
|
||||||
|
=item $info->ipr_dest()
|
||||||
|
|
||||||
|
From RFC1213:
|
||||||
|
|
||||||
|
"The IP address of the next hop of this route.
|
||||||
|
(In the case of a route bound to an interface
|
||||||
|
which is realized via a broadcast media, the value
|
||||||
|
of this field is the agent's IP address on that
|
||||||
|
interface.)"
|
||||||
|
|
||||||
|
(C<ipRouteNextHop>)
|
||||||
|
|
||||||
|
=item $info->ipr_type()
|
||||||
|
|
||||||
|
From RFC1213:
|
||||||
|
|
||||||
|
other(1), -- none of the following
|
||||||
|
invalid(2), -- an invalidated route
|
||||||
|
-- route to directly
|
||||||
|
direct(3), -- connected (sub-)network
|
||||||
|
-- route to a non-local
|
||||||
|
indirect(4) -- host/network/sub-network
|
||||||
|
|
||||||
|
|
||||||
|
"The type of route. Note that the values
|
||||||
|
direct(3) and indirect(4) refer to the notion of
|
||||||
|
direct and indirect routing in the IP
|
||||||
|
architecture.
|
||||||
|
|
||||||
|
Setting this object to the value invalid(2) has
|
||||||
|
the effect of invalidating the corresponding entry
|
||||||
|
in the ipRouteTable object. That is, it
|
||||||
|
effectively disassociates the destination
|
||||||
|
identified with said entry from the route
|
||||||
|
identified with said entry. It is an
|
||||||
|
implementation-specific matter as to whether the
|
||||||
|
agent removes an invalidated entry from the table.
|
||||||
|
Accordingly, management stations must be prepared
|
||||||
|
to receive tabular information from agents that
|
||||||
|
corresponds to entries not currently in use.
|
||||||
|
Proper interpretation of such entries requires
|
||||||
|
examination of the relevant ipRouteType object."
|
||||||
|
|
||||||
|
(C<ipRouteType>)
|
||||||
|
|
||||||
|
=item $info->ipr_proto()
|
||||||
|
|
||||||
|
From RFC1213:
|
||||||
|
|
||||||
|
other(1), -- none of the following
|
||||||
|
-- non-protocol information,
|
||||||
|
-- e.g., manually configured
|
||||||
|
local(2), -- entries
|
||||||
|
-- set via a network
|
||||||
|
netmgmt(3), -- management protocol
|
||||||
|
-- obtained via ICMP,
|
||||||
|
icmp(4), -- e.g., Redirect
|
||||||
|
-- the remaining values are
|
||||||
|
-- all gateway routing
|
||||||
|
-- protocols
|
||||||
|
egp(5),
|
||||||
|
ggp(6),
|
||||||
|
hello(7),
|
||||||
|
rip(8),
|
||||||
|
is-is(9),
|
||||||
|
es-is(10),
|
||||||
|
ciscoIgrp(11),
|
||||||
|
bbnSpfIgp(12),
|
||||||
|
ospf(13),
|
||||||
|
bgp(14)
|
||||||
|
|
||||||
|
(C<ipRouteProto>)
|
||||||
|
|
||||||
|
=item $info->ipr_age()
|
||||||
|
|
||||||
|
Seconds since route was last updated or validated.
|
||||||
|
|
||||||
|
(C<ipRouteAge>)
|
||||||
|
|
||||||
|
=item $info->ipr_mask()
|
||||||
|
|
||||||
|
Subnet Mask of route. 0.0.0.0 for default gateway.
|
||||||
|
|
||||||
|
(C<ipRouteMask>)
|
||||||
|
|
||||||
|
=item $info->ipr_info()
|
||||||
|
|
||||||
|
Reference to MIB definition specific to routing protocol.
|
||||||
|
|
||||||
|
(C<ipRouteInfo>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Setting data via SNMP
|
=head2 Setting data via SNMP
|
||||||
|
|
||||||
This section explains how to use SNMP::Info to do SNMP Set operations.
|
This section explains how to use SNMP::Info to do SNMP Set operations.
|
||||||
@@ -1016,17 +1267,17 @@ Table Methods. Set iid of method to value.
|
|||||||
|
|
||||||
Returns undef if failed, or the return value from SNMP::Session::set() (snmp_errno)
|
Returns undef if failed, or the return value from SNMP::Session::set() (snmp_errno)
|
||||||
|
|
||||||
# Disable a port administratvely
|
# Disable a port administratively
|
||||||
my %if_map = reverse %{$info->interfaces()}
|
my %if_map = reverse %{$info->interfaces()}
|
||||||
$info->set_i_up_admin('down', $if_map{'FastEthernet0/0')
|
$info->set_i_up_admin('down', $if_map{'FastEthernet0/0')
|
||||||
or die "Couldn't disable the port. ",$info->error(1);
|
or die "Couldn't disable the port. ",$info->error(1);
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
NOTE: You must be connected to your device with a ReadWrite community string in order
|
NOTE: You must be connected to your device with a C<ReadWrite> community string in order
|
||||||
for set operations to work.
|
for set operations to work.
|
||||||
|
|
||||||
NOTE: This will only set data listed in %FUNCS and %GLOBALS. For data aquired from
|
NOTE: This will only set data listed in %FUNCS and %GLOBALS. For data acquired from
|
||||||
overriden methods (subroutines) specific set_METHOD() subroutines will need to be
|
overriden methods (subroutines) specific set_METHOD() subroutines will need to be
|
||||||
added.
|
added.
|
||||||
|
|
||||||
@@ -1126,7 +1377,21 @@ These are table entries, such as the IfIndex
|
|||||||
'i_pkts_multi_out64' => 'ifHCOutMulticastPkts',
|
'i_pkts_multi_out64' => 'ifHCOutMulticastPkts',
|
||||||
'i_pkts_bcast_in64' => 'ifHCInBroadcastPkts',
|
'i_pkts_bcast_in64' => 'ifHCInBroadcastPkts',
|
||||||
'i_pkts_bcast_out64' => 'ifHCOutBroadcastPkts',
|
'i_pkts_bcast_out64' => 'ifHCOutBroadcastPkts',
|
||||||
'i_alias' => 'ifAlias'
|
'i_alias' => 'ifAlias',
|
||||||
|
# IP Routing Table
|
||||||
|
'ipr_route'=> 'ipRouteDest',
|
||||||
|
'ipr_if' => 'ipRouteIfIndex',
|
||||||
|
'ipr_1' => 'ipRouteMetric1',
|
||||||
|
'ipr_2' => 'ipRouteMetric2',
|
||||||
|
'ipr_3' => 'ipRouteMetric3',
|
||||||
|
'ipr_4' => 'ipRouteMetric4',
|
||||||
|
'ipr_5' => 'ipRouteMetric5',
|
||||||
|
'ipr_dest' => 'ipRouteNextHop',
|
||||||
|
'ipr_type' => 'ipRouteType',
|
||||||
|
'ipr_proto'=> 'ipRouteProto',
|
||||||
|
'ipr_age' => 'ipRouteAge',
|
||||||
|
'ipr_mask' => 'ipRouteMask',
|
||||||
|
'ipr_info' => 'ipRouteInfo',
|
||||||
);
|
);
|
||||||
|
|
||||||
=item %MIBS
|
=item %MIBS
|
||||||
@@ -1253,9 +1518,10 @@ Let's make a sample Layer 2 Device subclass :
|
|||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
1; # don't forget this line
|
||||||
----------------------- snip --------------------------------
|
----------------------- snip --------------------------------
|
||||||
|
|
||||||
Be sure and send the debugged version to snmp@warped.org to be
|
Be sure and send the debugged version to snmp-info-users@lists.sourceforge.net to be
|
||||||
included in the next version of SNMP::Info.
|
included in the next version of SNMP::Info.
|
||||||
|
|
||||||
=head1 SNMP::INFO INTERNALS
|
=head1 SNMP::INFO INTERNALS
|
||||||
@@ -1311,55 +1577,78 @@ $NOSUCH = 1;
|
|||||||
Makes human friendly speed ratings using %SPEED_MAP
|
Makes human friendly speed ratings using %SPEED_MAP
|
||||||
|
|
||||||
%SPEED_MAP = (
|
%SPEED_MAP = (
|
||||||
|
'56000' => '56 kbps',
|
||||||
'64000' => '64 kbps',
|
'64000' => '64 kbps',
|
||||||
'1500000' => '1.5 Mbps',
|
'1500000' => '1.5 Mbps',
|
||||||
|
'1536000' => 'T1',
|
||||||
'1544000' => 'T1',
|
'1544000' => 'T1',
|
||||||
'2000000' => '2.0 Mbps',
|
'2000000' => '2.0 Mbps',
|
||||||
'2048000' => '2.048 Mbps',
|
'2048000' => '2.048 Mbps',
|
||||||
|
'3072000' => 'Dual T1',
|
||||||
|
'3088000' => 'Dual T1',
|
||||||
'4000000' => '4.0 Mbps',
|
'4000000' => '4.0 Mbps',
|
||||||
'10000000' => '10 Mbps',
|
'10000000' => '10 Mbps',
|
||||||
'11000000' => '11 Mbps',
|
'11000000' => '11 Mbps',
|
||||||
'20000000' => '20 Mbps',
|
'20000000' => '20 Mbps',
|
||||||
'16000000' => '16 Mbps',
|
'16000000' => '16 Mbps',
|
||||||
'45000000' => 'DS3',
|
'44210000' => 'T3',
|
||||||
'45045000' => 'DS3',
|
'44736000' => 'T3',
|
||||||
'64000000' => '64 Mbps',
|
|
||||||
'100000000' => '100 Mbps',
|
|
||||||
'149760000' => 'OC-1'
|
|
||||||
'155000000' => 'OC-1'
|
|
||||||
'400000000' => '400 Mbps',
|
|
||||||
'622000000' => 'OC-12',
|
|
||||||
'599040000' => 'OC-12',
|
|
||||||
'1000000000' => '1.0 Gbps',
|
|
||||||
);
|
|
||||||
|
|
||||||
=cut
|
|
||||||
%SPEED_MAP = (
|
|
||||||
'64000' => '64 kbps',
|
|
||||||
'1500000' => '1.5 Mbps',
|
|
||||||
'1544000' => 'T1',
|
|
||||||
'2000000' => '2.0 Mbps',
|
|
||||||
'2048000' => '2.048 Mbps',
|
|
||||||
'4000000' => '4.0 Mbps',
|
|
||||||
'10000000' => '10 Mbps',
|
|
||||||
'11000000' => '11 Mbps',
|
|
||||||
'20000000' => '20 Mbps',
|
|
||||||
'16000000' => '16 Mbps',
|
|
||||||
'45000000' => '45 Mbps',
|
'45000000' => '45 Mbps',
|
||||||
'45045000' => 'DS3',
|
'45045000' => 'DS3',
|
||||||
'64000000' => '64 Mbps',
|
'64000000' => '64 Mbps',
|
||||||
'100000000' => '100 Mbps',
|
'100000000' => '100 Mbps',
|
||||||
'149760000' => 'OC-1',
|
'149760000' => 'ATM on OC-3',
|
||||||
'155000000' => 'OC-1',
|
'155000000' => 'OC-3',
|
||||||
|
'155519000' => 'OC-3',
|
||||||
|
'155520000' => 'OC-3',
|
||||||
'400000000' => '400 Mbps',
|
'400000000' => '400 Mbps',
|
||||||
|
'599040000' => 'ATM on OC-12',
|
||||||
'622000000' => 'OC-12',
|
'622000000' => 'OC-12',
|
||||||
'599040000' => 'OC-12',
|
'622080000' => 'OC-12',
|
||||||
|
'1000000000' => '1.0 Gbps',
|
||||||
|
)
|
||||||
|
|
||||||
|
=cut
|
||||||
|
%SPEED_MAP = (
|
||||||
|
'56000' => '56 kbps',
|
||||||
|
'64000' => '64 kbps',
|
||||||
|
'115000' => '115 kpbs',
|
||||||
|
'1500000' => '1.5 Mbps',
|
||||||
|
'1536000' => 'T1',
|
||||||
|
'1544000' => 'T1',
|
||||||
|
'2000000' => '2.0 Mbps',
|
||||||
|
'2048000' => '2.048 Mbps',
|
||||||
|
'3072000' => 'Dual T1',
|
||||||
|
'3088000' => 'Dual T1',
|
||||||
|
'4000000' => '4.0 Mbps',
|
||||||
|
'10000000' => '10 Mbps',
|
||||||
|
'11000000' => '11 Mbps',
|
||||||
|
'20000000' => '20 Mbps',
|
||||||
|
'16000000' => '16 Mbps',
|
||||||
|
'44210000' => 'T3',
|
||||||
|
'44736000' => 'T3',
|
||||||
|
'45000000' => '45 Mbps',
|
||||||
|
'45045000' => 'DS3',
|
||||||
|
'51850000' => 'OC-1',
|
||||||
|
'64000000' => '64 Mbps',
|
||||||
|
'100000000' => '100 Mbps',
|
||||||
|
'149760000' => 'ATM on OC-3',
|
||||||
|
'155000000' => 'OC-3',
|
||||||
|
'155519000' => 'OC-3',
|
||||||
|
'155520000' => 'OC-3',
|
||||||
|
'400000000' => '400 Mbps',
|
||||||
|
'599040000' => 'ATM on OC-12',
|
||||||
|
'622000000' => 'OC-12',
|
||||||
|
'622080000' => 'OC-12',
|
||||||
'1000000000' => '1.0 Gbps',
|
'1000000000' => '1.0 Gbps',
|
||||||
);
|
);
|
||||||
|
|
||||||
sub munge_speed {
|
sub munge_speed {
|
||||||
my $speed = shift;
|
my $speed = shift;
|
||||||
return defined $SPEED_MAP{$speed} ? $SPEED_MAP{$speed} : $speed;
|
my $map = $SPEED_MAP{$speed};
|
||||||
|
|
||||||
|
#print " $speed -> $map " if (defined $map);
|
||||||
|
return $map || $speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
=item munge_ip()
|
=item munge_ip()
|
||||||
@@ -1512,7 +1801,7 @@ sub error_throw {
|
|||||||
$self->{error} = $error;
|
$self->{error} = $error;
|
||||||
|
|
||||||
if ($self->debug()){
|
if ($self->debug()){
|
||||||
$error .= "\n" unless $error =~ /\n$/;
|
$error =~ s/\n+$//;
|
||||||
carp($error);
|
carp($error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1596,7 +1885,7 @@ sub store {
|
|||||||
|
|
||||||
=item $info->_global()
|
=item $info->_global()
|
||||||
|
|
||||||
Used internally by AUTOLOAD to load dynmaic methods from %GLOBALS.
|
Used internally by AUTOLOAD to load dynamic methods from %GLOBALS.
|
||||||
|
|
||||||
Example: $info->name() calls autoload which calls $info->_global('name').
|
Example: $info->name() calls autoload which calls $info->_global('name').
|
||||||
|
|
||||||
@@ -1751,20 +2040,37 @@ Called from $info->load_METHOD();
|
|||||||
=cut
|
=cut
|
||||||
sub _load_attr {
|
sub _load_attr {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($attr,$leaf) = @_;
|
my ($attr,$leaf,$partial) = @_;
|
||||||
|
|
||||||
my $ver = $self->snmp_ver();
|
my $ver = $self->snmp_ver();
|
||||||
my $nosuch = $self->nosuch();
|
my $nosuch = $self->nosuch();
|
||||||
my $sess = $self->session();
|
my $sess = $self->session();
|
||||||
my $store = $self->store();
|
my $store = $self->store();
|
||||||
|
my $munge = $self->munge();
|
||||||
return undef unless defined $sess;
|
return undef unless defined $sess;
|
||||||
|
|
||||||
# Get the callback hash for data munging
|
# Deal with partial entries.
|
||||||
my $munge = $self->munge();
|
my $varleaf = $leaf;
|
||||||
|
if (defined $partial) {
|
||||||
|
# If we aren't supplied an OID translate
|
||||||
|
if ($leaf !~ /^[.\d]*$/) {
|
||||||
|
# VarBind will not resolve mixed OID and leaf entries like
|
||||||
|
# "ipRouteMask.255.255". So we convert to full OID
|
||||||
|
my $oid = &SNMP::translateObj($leaf);
|
||||||
|
unless (defined $oid) {
|
||||||
|
$self->error_throw("SNMP::Info::_load_attr: Can't translate $leaf.$partial. Missing MIB?\n");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
$varleaf = "$oid.$partial";
|
||||||
|
} else {
|
||||||
|
$varleaf = "$leaf.$partial";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$self->debug() and print "SNMP::Info::_load_attr $attr : $leaf\n";
|
$self->debug() and print "SNMP::Info::_load_attr $attr : $leaf",
|
||||||
|
defined $partial ? "($partial)" : '', "\n";
|
||||||
|
|
||||||
my $var = new SNMP::Varbind([$leaf]);
|
my $var = new SNMP::Varbind([$varleaf]);
|
||||||
|
|
||||||
# So devices speaking SNMP v.1 are not supposed to give out
|
# So devices speaking SNMP v.1 are not supposed to give out
|
||||||
# data from SNMP2, but most do. Net-SNMP, being very precise
|
# data from SNMP2, but most do. Net-SNMP, being very precise
|
||||||
@@ -1776,11 +2082,13 @@ sub _load_attr {
|
|||||||
if ($ver == 1 and $nosuch and $errornum and $sess->{ErrorStr} =~ /nosuch/i){
|
if ($ver == 1 and $nosuch and $errornum and $sess->{ErrorStr} =~ /nosuch/i){
|
||||||
$errornum = 0;
|
$errornum = 0;
|
||||||
}
|
}
|
||||||
|
my $localstore = undef;
|
||||||
|
|
||||||
while (! $errornum ){
|
while (! $errornum ){
|
||||||
$sess->getnext($var);
|
$sess->getnext($var);
|
||||||
$errornum = $sess->{ErrorNum};
|
$errornum = $sess->{ErrorNum};
|
||||||
|
#print "$var->[0] $var->[1] $var->[2] $var->[3]\n";
|
||||||
last if $var->[0] ne $leaf;
|
last if $var->[0] ne $leaf;
|
||||||
|
|
||||||
my $iid = $var->[1];
|
my $iid = $var->[1];
|
||||||
my $val = $var->[2];
|
my $val = $var->[2];
|
||||||
|
|
||||||
@@ -1788,6 +2096,13 @@ sub _load_attr {
|
|||||||
$self->error_throw("SNMP::Info::_load_attr: $attr not here");
|
$self->error_throw("SNMP::Info::_load_attr: $attr not here");
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check to make sure we are still in partial land
|
||||||
|
if (defined $partial and $iid !~ /^$partial$/ and $iid !~ /^$partial\./){
|
||||||
|
#print "$iid makes us leave partial land.\n";
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
|
||||||
if ($val eq 'NOSUCHOBJECT'){
|
if ($val eq 'NOSUCHOBJECT'){
|
||||||
$self->error_throw("SNMP::Info::_load_atr: $attr : NOSUCHOBJECT");
|
$self->error_throw("SNMP::Info::_load_atr: $attr : NOSUCHOBJECT");
|
||||||
next;
|
next;
|
||||||
@@ -1804,13 +2119,16 @@ sub _load_attr {
|
|||||||
$val = &$subref($val);
|
$val = &$subref($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
$store->{$attr}->{$iid}=$val;
|
$localstore->{$iid}=$val;
|
||||||
}
|
}
|
||||||
|
|
||||||
# mark data as loaded
|
# Cache data if we are not getting partial data:
|
||||||
$self->{"_${attr}"}++;
|
if (!defined $partial){
|
||||||
|
$self->{"_${attr}"}++;
|
||||||
|
$store->{$attr}=$localstore;
|
||||||
|
}
|
||||||
|
|
||||||
return $store->{$attr};
|
return $localstore;
|
||||||
}
|
}
|
||||||
|
|
||||||
=item $info->_show_attr()
|
=item $info->_show_attr()
|
||||||
@@ -1911,9 +2229,9 @@ sub AUTOLOAD {
|
|||||||
|
|
||||||
# Otherwise we must be listed in %FUNCS
|
# Otherwise we must be listed in %FUNCS
|
||||||
|
|
||||||
# Load data if not already cached
|
# Load data if it both not cached and we are not requesting partial info.
|
||||||
$self->_load_attr( $attr, $funcs{$attr} )
|
return $self->_load_attr( $attr, $funcs{$attr},@_ )
|
||||||
unless defined $self->{"_${attr}"};
|
unless (defined $self->{"_${attr}"} and !scalar(@_));
|
||||||
|
|
||||||
return $self->_show_attr($attr);
|
return $self->_show_attr($attr);
|
||||||
}
|
}
|
||||||
@@ -1921,6 +2239,10 @@ sub AUTOLOAD {
|
|||||||
|
|
||||||
=head1 COPYRIGHT AND LICENCE
|
=head1 COPYRIGHT AND LICENCE
|
||||||
|
|
||||||
|
Changes from SNMP::Info Version 0.7 and on are:
|
||||||
|
Copyright (c)2003, 2004 Max Baker - All rights reserved.
|
||||||
|
|
||||||
|
Original Code is:
|
||||||
Copyright (c) 2002-3, Regents of the University of California
|
Copyright (c) 2002-3, Regents of the University of California
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
# SNMP::Info::Bridge
|
# SNMP::Info::Bridge
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
|
#
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are met:
|
# modification, are permitted provided that the following conditions are met:
|
||||||
@@ -28,7 +32,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Bridge;
|
package SNMP::Info::Bridge;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -45,16 +49,21 @@ $SNMP::debugging=$DEBUG;
|
|||||||
|
|
||||||
$INIT = 0;
|
$INIT = 0;
|
||||||
|
|
||||||
%MIBS = ('BRIDGE-MIB' => 'dot1dBaseBridgeAddress');
|
%MIBS = ('BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||||
|
'Q-BRIDGE-MIB' => 'dot1qPvid',
|
||||||
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
'b_mac' => 'dot1dBaseBridgeAddress',
|
'b_mac' => 'dot1dBaseBridgeAddress',
|
||||||
'b_ports' => 'dot1dBaseNumPorts',
|
'b_ports' => 'dot1dBaseNumPorts',
|
||||||
'b_type' => 'dot1dBaseType',
|
'b_type' => 'dot1dBaseType',
|
||||||
# Spanning Tree Protocol
|
# Spanning Tree Protocol
|
||||||
'stp_ver' => 'dot1dStpProtocolSpecification',
|
'stp_ver' => 'dot1dStpProtocolSpecification',
|
||||||
'stp_time' => 'dot1dStpTimeSinceTopologyChange',
|
'stp_time' => 'dot1dStpTimeSinceTopologyChange',
|
||||||
'stp_root' => 'dot1dStpDesignatedRoot',
|
'stp_root' => 'dot1dStpDesignatedRoot',
|
||||||
|
# Q-BRIDGE-MIB
|
||||||
|
'qb_vlans_max' => 'dot1qMaxSupportedVlans',
|
||||||
|
'qb_vlans' => 'dot1qNumVlans',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -78,6 +87,11 @@ $INIT = 0;
|
|||||||
'stp_p_root' => 'dot1dStpPortDesignatedRoot',
|
'stp_p_root' => 'dot1dStpPortDesignatedRoot',
|
||||||
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
|
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
|
||||||
'stp_p_port' => 'dot1dStpPortDesignatedPort',
|
'stp_p_port' => 'dot1dStpPortDesignatedPort',
|
||||||
|
# Q-BRIDGE-MIB :
|
||||||
|
'qb_i_vlan' => 'dot1qPvid',
|
||||||
|
'qb_i_vlan_type' => 'dot1qPortAcceptableFrameTypes',
|
||||||
|
'qb_v_name' => 'dot1qVlanStaticName',
|
||||||
|
'qb_v_stat' => 'dot1qVlanStaticRowStatus',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -156,6 +170,9 @@ Max Baker (C<max@warped.org>)
|
|||||||
|
|
||||||
BRIDGE-MIB is used by most Layer 2 devices, and holds information like the MAC Forwarding Table and Spanning Tree Protocol info.
|
BRIDGE-MIB is used by most Layer 2 devices, and holds information like the MAC Forwarding Table and Spanning Tree Protocol info.
|
||||||
|
|
||||||
|
Q-BRIDGE-MIB holds 802.11q information -- VLANs and Trunking. Cisco tends not to use this MIB, but some
|
||||||
|
proprietary ones. HP and some nicer vendors use this. This is from C<RFC2674_q>.
|
||||||
|
|
||||||
Create or use a subclass of SNMP::Info that inherits this class. Do not use directly.
|
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
|
For debugging you can call new() directly as you would in SNMP::Info
|
||||||
@@ -172,6 +189,10 @@ None.
|
|||||||
|
|
||||||
=item BRIDGE-MIB
|
=item BRIDGE-MIB
|
||||||
|
|
||||||
|
=item Q-BRIDGE-MIB
|
||||||
|
|
||||||
|
f<rfc2674_q.mib>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
BRIDGE-MIB needs to be extracted from ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
|
BRIDGE-MIB needs to be extracted from ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
|
||||||
@@ -218,6 +239,16 @@ Returns root of STP.
|
|||||||
|
|
||||||
(B<dot1dStpDesignatedRoot>)
|
(B<dot1dStpDesignatedRoot>)
|
||||||
|
|
||||||
|
=item $bridge->qb_vlans_max()
|
||||||
|
|
||||||
|
(B<dot1qMaxSupportedVlans>)
|
||||||
|
|
||||||
|
=item $bridge->qb_vlans()
|
||||||
|
|
||||||
|
Number of VLANS on this device.
|
||||||
|
|
||||||
|
(B<dot1qNumVlans>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
@@ -334,4 +365,35 @@ this port's segment."
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Q-BRIDGE Data
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $bridge->qb_i_vlan()
|
||||||
|
|
||||||
|
Gives the vlan used by interfaces
|
||||||
|
|
||||||
|
(B<dot1qPvid>)
|
||||||
|
|
||||||
|
=item $bridge->qb_i_vlan_type()
|
||||||
|
|
||||||
|
Either C<admitAll> or C<admitOnlyVlanTagged>. This is a good spot to find
|
||||||
|
trunk ports.
|
||||||
|
|
||||||
|
(B<dot1qPortAcceptableFrameTypes>)
|
||||||
|
|
||||||
|
=item $bridge->qb_v_name()
|
||||||
|
|
||||||
|
Human-entered name for vlans.
|
||||||
|
|
||||||
|
(B<dot1qVlanStaticName>)
|
||||||
|
|
||||||
|
=item $bridge->qb_v_stat()
|
||||||
|
|
||||||
|
uhh. C<active> !
|
||||||
|
|
||||||
|
(B<dot1qVlanStaticRowStatus>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
# SNMP::Info::CDP
|
# SNMP::Info::CDP
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +31,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::CDP;
|
package SNMP::Info::CDP;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|||||||
484
Info/CiscoStack.pm
Normal file
484
Info/CiscoStack.pm
Normal file
@@ -0,0 +1,484 @@
|
|||||||
|
# SNMP::Info::CiscoStack
|
||||||
|
# Max Baker <max@warped.org>
|
||||||
|
#
|
||||||
|
# Copyright (c)2003,2004 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 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::CiscoStack;
|
||||||
|
$VERSION = 0.8;
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info;
|
||||||
|
|
||||||
|
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
||||||
|
@SNMP::Info::CiscoStack::ISA = qw/SNMP::Info Exporter/;
|
||||||
|
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
$DEBUG=0;
|
||||||
|
$SNMP::debugging=$DEBUG;
|
||||||
|
|
||||||
|
$INIT = 0;
|
||||||
|
%MIBS = (
|
||||||
|
'CISCO-STACK-MIB' => 'ciscoStackMIB',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
'sysip' => 'sysIpAddr',
|
||||||
|
'netmask' => 'sysNetMask',
|
||||||
|
'broadcast' => 'sysBroadcast',
|
||||||
|
'serial1' => 'chassisSerialNumber',
|
||||||
|
'serial2' => 'chassisSerialNumberString',
|
||||||
|
'model1' => 'chassisModel',
|
||||||
|
'ps1_type' => 'chassisPs1Type',
|
||||||
|
'ps1_status' => 'chassisPs1Status',
|
||||||
|
'ps2_type' => 'chassisPs2Type',
|
||||||
|
'ps2_status' => 'chassisPs2Status',
|
||||||
|
'slots' => 'chassisNumSlots',
|
||||||
|
'fan' => 'chassisFanStatus',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
'i_type2' => 'ifType',
|
||||||
|
# CISCO-STACK-MIB::moduleEntry
|
||||||
|
# These are blades in a catalyst device
|
||||||
|
'm_type' => 'moduleType',
|
||||||
|
'm_model' => 'moduleModel',
|
||||||
|
'm_serial' => 'moduleSerialNumber',
|
||||||
|
'm_status' => 'moduleStatus',
|
||||||
|
'm_name' => 'moduleName',
|
||||||
|
'm_ports' => 'moduleNumPorts',
|
||||||
|
'm_ports_status' => 'modulePortStatus',
|
||||||
|
'm_hwver' => 'moduleHwVersion',
|
||||||
|
'm_fwver' => 'moduleFwVersion',
|
||||||
|
'm_swver' => 'moduleSwVersion',
|
||||||
|
# Router Blades :
|
||||||
|
'm_ip' => 'moduleIPAddress',
|
||||||
|
'm_sub1' => 'moduleSubType',
|
||||||
|
'm_sub2' => 'moduleSubType2',
|
||||||
|
# CISCO-STACK-MIB::portEntry
|
||||||
|
'p_name' => 'portName',
|
||||||
|
'p_type' => 'portType',
|
||||||
|
'p_status' => 'portOperStatus',
|
||||||
|
'p_status2' => 'portAdditionalStatus',
|
||||||
|
'p_speed' => 'portAdminSpeed',
|
||||||
|
'p_duplex' => 'portDuplex',
|
||||||
|
'p_port' => 'portIfIndex',
|
||||||
|
# CISCO-STACK-MIB::PortCpbEntry
|
||||||
|
'p_speed_admin' => 'portCpbSpeed',
|
||||||
|
'p_duplex_admin' => 'portCpbDuplex',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
'm_ports_status' => \&munge_port_status,
|
||||||
|
'p_duplex_admin' => \&SNMP::Info::munge_bits,
|
||||||
|
);
|
||||||
|
|
||||||
|
%PORTSTAT = (1 => 'other',
|
||||||
|
2 => 'ok',
|
||||||
|
3 => 'minorFault',
|
||||||
|
4 => 'majorFault');
|
||||||
|
|
||||||
|
# Changes binary byte describing each port into ascii, and returns
|
||||||
|
# an ascii list separated by spaces.
|
||||||
|
sub munge_port_status {
|
||||||
|
my $status = shift;
|
||||||
|
my @vals = map($PORTSTAT{$_},unpack('C*',$status));
|
||||||
|
return join(' ',@vals);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $stack = shift;
|
||||||
|
my $serial1 = $stack->serial1();
|
||||||
|
my $serial2 = $stack->serial2();
|
||||||
|
|
||||||
|
return $serial1 if defined $serial1;
|
||||||
|
return $serial2 if defined $serial2;
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_type {
|
||||||
|
my $stack = shift;
|
||||||
|
|
||||||
|
my $p_port = $stack->p_port();
|
||||||
|
my $p_type = $stack->p_type();
|
||||||
|
|
||||||
|
# Get more generic port types from IF-MIB
|
||||||
|
my $i_type = $stack->i_type2();
|
||||||
|
|
||||||
|
# Now Override w/ port entries
|
||||||
|
foreach my $port (keys %$p_type) {
|
||||||
|
my $iid = $p_port->{$port};
|
||||||
|
$i_type->{$iid} = $p_type->{$port};
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
# p_* functions are indexed to physical port. let's index these
|
||||||
|
# to snmp iid
|
||||||
|
sub i_name {
|
||||||
|
my $stack = shift;
|
||||||
|
|
||||||
|
my $p_port = $stack->p_port();
|
||||||
|
my $p_name = $stack->p_name();
|
||||||
|
|
||||||
|
my %i_name;
|
||||||
|
foreach my $port (keys %$p_name) {
|
||||||
|
my $iid = $p_port->{$port};
|
||||||
|
next unless defined $iid;
|
||||||
|
$i_name{$iid} = $p_name->{$port};
|
||||||
|
}
|
||||||
|
return \%i_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_duplex {
|
||||||
|
my $stack = shift;
|
||||||
|
|
||||||
|
#my $i_duplex = $stack->SUPER::i_duplex();
|
||||||
|
my $p_port = $stack->p_port();
|
||||||
|
my $p_duplex = $stack->p_duplex();
|
||||||
|
|
||||||
|
my $i_duplex = {};
|
||||||
|
foreach my $port (keys %$p_duplex) {
|
||||||
|
my $iid = $p_port->{$port};
|
||||||
|
$i_duplex->{$iid} = $p_duplex->{$port};
|
||||||
|
}
|
||||||
|
return $i_duplex;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_duplex_admin {
|
||||||
|
my $stack = shift;
|
||||||
|
|
||||||
|
my $p_port = $stack->p_port();
|
||||||
|
my $p_duplex_admin = $stack->p_duplex_admin();
|
||||||
|
|
||||||
|
my %i_duplex_admin;
|
||||||
|
foreach my $port (keys %$p_duplex_admin) {
|
||||||
|
my $iid = $p_port->{$port};
|
||||||
|
next unless defined $iid;
|
||||||
|
my $duplex = $p_duplex_admin->{$port};
|
||||||
|
next unless defined $duplex;
|
||||||
|
|
||||||
|
my $string = 'other';
|
||||||
|
# see CISCO-STACK-MIB for a description of the bits
|
||||||
|
$string = 'half' if ($duplex =~ /001$/ or $duplex =~ /0100.$/);
|
||||||
|
$string = 'full' if ($duplex =~ /010$/ or $duplex =~ /100.0$/);
|
||||||
|
# we'll call it auto if both full and half are turned on, or if the
|
||||||
|
# specifically 'auto' flag bit is set.
|
||||||
|
$string = 'auto'
|
||||||
|
if ($duplex =~ /1..$/ or $duplex =~ /110..$/ or $duplex =~ /..011$/);
|
||||||
|
|
||||||
|
$i_duplex_admin{$iid} = $string;
|
||||||
|
}
|
||||||
|
return \%i_duplex_admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
# $stack->interfaces() - Maps the ifIndex table to a physical port
|
||||||
|
sub interfaces {
|
||||||
|
my $self = shift;
|
||||||
|
my $i_index = $self->i_index();
|
||||||
|
my $portnames = $self->p_port();
|
||||||
|
my %portmap = reverse %$portnames;
|
||||||
|
|
||||||
|
my %interfaces = ();
|
||||||
|
foreach my $iid (keys %$i_index) {
|
||||||
|
my $if = $i_index->{$iid};
|
||||||
|
my $port = $portmap{$iid};
|
||||||
|
$interfaces{$iid} = $port || $if;
|
||||||
|
}
|
||||||
|
|
||||||
|
return \%interfaces;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::CiscoStack - Perl5 Interface to CPU and Memory stats for Cisco Devices
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Max Baker (C<max@warped.org>)
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $ciscostats = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
# These arguments are passed directly on to SNMP::Session
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $ciscostats->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SNMP::Info::CiscoStack is a subclass of SNMP::Info that provides
|
||||||
|
an interface to the C<CISCO-STACK-MIB>. This MIB is used across
|
||||||
|
the Catalyst family under CatOS and IOS.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
none.
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item CISCO-STACK-MIB
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $stack->broadcast()
|
||||||
|
|
||||||
|
(B<sysBroadcast>)
|
||||||
|
|
||||||
|
=item $stack->fan()
|
||||||
|
|
||||||
|
(B<chassisFanStatus>)
|
||||||
|
|
||||||
|
=item $stack->model()
|
||||||
|
|
||||||
|
(B<chassisModel>)
|
||||||
|
|
||||||
|
=item $stack->netmask()
|
||||||
|
|
||||||
|
(B<sysNetMask>)
|
||||||
|
|
||||||
|
=item $stack->ps1_type()
|
||||||
|
|
||||||
|
(B<chassisPs1Type>)
|
||||||
|
|
||||||
|
=item $stack->ps2_type()
|
||||||
|
|
||||||
|
(B<chassisPs2Type>)
|
||||||
|
|
||||||
|
=item $stack->ps1_status()
|
||||||
|
|
||||||
|
(B<chassisPs1Status>)
|
||||||
|
|
||||||
|
=item $stack->ps2_status()
|
||||||
|
|
||||||
|
(B<chassisPs2Status>)
|
||||||
|
|
||||||
|
=item $stack->serial()
|
||||||
|
|
||||||
|
(B<chassisSerialNumberString>) or (B<chassisSerialNumber>)
|
||||||
|
|
||||||
|
=item $stack->slots()
|
||||||
|
|
||||||
|
(B<chassisNumSlots>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
=head2 Interface Tables
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $stack->interfaces()
|
||||||
|
|
||||||
|
Crosses p_port() with i_index() to get physical names.
|
||||||
|
|
||||||
|
=item $stack->i_physical()
|
||||||
|
|
||||||
|
Returns a map to IID for ports that are physical ports, not vlans, etc.
|
||||||
|
|
||||||
|
=item $stack->i_type()
|
||||||
|
|
||||||
|
Crosses p_port() with p_type() and returns the results.
|
||||||
|
|
||||||
|
Overrides with ifType if p_type() isn't available.
|
||||||
|
|
||||||
|
=item $stack->i_name()
|
||||||
|
|
||||||
|
Crosses p_name with p_port and returns results.
|
||||||
|
|
||||||
|
=item $stack->i_duplex()
|
||||||
|
|
||||||
|
Crosses p_duplex with p_port and returns results.
|
||||||
|
|
||||||
|
=item $stack->i_duplex_admin()
|
||||||
|
|
||||||
|
Crosses p_duplex_admin with p_port.
|
||||||
|
|
||||||
|
Munges bit_string returned from p_duplex_admin to get duplex settings.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Module table
|
||||||
|
|
||||||
|
This table holds configuration information for each of the blades installed in
|
||||||
|
the Catalyst device.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $stack->m_type()
|
||||||
|
|
||||||
|
(B<moduleType>)
|
||||||
|
|
||||||
|
=item $stack->m_model()
|
||||||
|
|
||||||
|
(B<moduleModel>)
|
||||||
|
|
||||||
|
=item $stack->m_serial()
|
||||||
|
|
||||||
|
(B<moduleSerialNumber>)
|
||||||
|
|
||||||
|
=item $stack->m_status()
|
||||||
|
|
||||||
|
(B<moduleStatus>)
|
||||||
|
|
||||||
|
=item $stack->m_name()
|
||||||
|
|
||||||
|
(B<moduleName>)
|
||||||
|
|
||||||
|
=item $stack->m_ports()
|
||||||
|
|
||||||
|
(B<moduleNumPorts>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_status()
|
||||||
|
|
||||||
|
Returns a list of space separated status strings for the ports.
|
||||||
|
|
||||||
|
To see the status of port 4 :
|
||||||
|
|
||||||
|
@ports_status = split(' ', $stack->m_ports_status() );
|
||||||
|
$port4 = $ports_status[3];
|
||||||
|
|
||||||
|
(B<modulePortStatus>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_hwver()
|
||||||
|
|
||||||
|
(B<moduleHwVersion>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_fwver()
|
||||||
|
|
||||||
|
(B<moduleFwVersion>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_swver()
|
||||||
|
|
||||||
|
(B<moduleSwVersion>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_ip()
|
||||||
|
|
||||||
|
(B<moduleIPAddress>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_sub1()
|
||||||
|
|
||||||
|
(B<moduleSubType>)
|
||||||
|
|
||||||
|
=item $stack->m_ports_sub2()
|
||||||
|
|
||||||
|
(B<moduleSubType2>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Modules - Router Blades
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $stack->m_ip()
|
||||||
|
|
||||||
|
(B<moduleIPAddress>)
|
||||||
|
|
||||||
|
=item $stack->m_sub1()
|
||||||
|
|
||||||
|
(B<moduleSubType>)
|
||||||
|
|
||||||
|
=item $stack->m_sub2()
|
||||||
|
|
||||||
|
(B<moduleSubType2>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Port Entry Table (CISCO-STACK-MIB::portTable)
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $stack->p_name()
|
||||||
|
|
||||||
|
(B<portName>)
|
||||||
|
|
||||||
|
=item $stack->p_type()
|
||||||
|
|
||||||
|
(B<portType>)
|
||||||
|
|
||||||
|
=item $stack->p_status()
|
||||||
|
|
||||||
|
(B<portOperStatus>)
|
||||||
|
|
||||||
|
=item $stack->p_status2()
|
||||||
|
|
||||||
|
(B<portAdditionalStatus>)
|
||||||
|
|
||||||
|
=item $stack->p_speed()
|
||||||
|
|
||||||
|
(B<portAdminSpeed>)
|
||||||
|
|
||||||
|
=item $stack->p_duplex()
|
||||||
|
|
||||||
|
(B<portDuplex>)
|
||||||
|
|
||||||
|
=item $stack->p_port()
|
||||||
|
|
||||||
|
(B<portIfIndex>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Port Capability Table (CISCO-STACK-MIB::portCpbTable)
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $stack->p_speed_admin()
|
||||||
|
|
||||||
|
(B<portCpbSpeed>)
|
||||||
|
|
||||||
|
=item $stack->p_duplex_admin()
|
||||||
|
|
||||||
|
(B<portCpbDuplex>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
# SNMP::Info::CiscoStats
|
# SNMP::Info::CiscoStats
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
# Copyright (c) 2003 Regents of the University of California
|
# Copyright (c) 2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +31,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::CiscoStats;
|
package SNMP::Info::CiscoStats;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -77,8 +80,9 @@ sub os {
|
|||||||
my $l2 = shift;
|
my $l2 = shift;
|
||||||
my $descr = $l2->description();
|
my $descr = $l2->description();
|
||||||
|
|
||||||
return 'catalyst' if ($descr =~ /catalyst/i);
|
# order here matters - there are Catalysts that run IOS and have catalyst in their description field.
|
||||||
return 'ios' if ($descr =~ /IOS/);
|
return 'ios' if ($descr =~ /IOS/);
|
||||||
|
return 'catalyst' if ($descr =~ /catalyst/i);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,12 +92,12 @@ sub os_ver {
|
|||||||
my $descr = $l2->description();
|
my $descr = $l2->description();
|
||||||
|
|
||||||
# Older Catalysts
|
# Older Catalysts
|
||||||
if ($os eq 'catalyst' and $descr =~ m/V(\d{1}\.\d{2}\.\d{2})/){
|
if (defined $os and $os eq 'catalyst' and defined $descr and $descr =~ m/V(\d{1}\.\d{2}\.\d{2})/){
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Newer Catalysts and IOS devices
|
# Newer Catalysts and IOS devices
|
||||||
if ($descr =~ m/Version (\d+\.\d+\([^)]+\)[^,\s]*)(,|\s)+/ ){
|
if (defined $descr and $descr =~ m/Version (\d+\.\d+\([^)]+\)[^,\s]*)(,|\s)+/ ){
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
return undef;
|
return undef;
|
||||||
|
|||||||
377
Info/CiscoVTP.pm
Normal file
377
Info/CiscoVTP.pm
Normal file
@@ -0,0 +1,377 @@
|
|||||||
|
# SNMP::Info::CiscoVTP
|
||||||
|
# Max Baker <max@warped.org>
|
||||||
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2003 Regents of the University of California
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::CiscoVTP;
|
||||||
|
$VERSION = 0.8;
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info;
|
||||||
|
|
||||||
|
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
||||||
|
@SNMP::Info::CiscoVTP::ISA = qw/SNMP::Info Exporter/;
|
||||||
|
@SNMP::Info::CiscoVTP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
$DEBUG=0;
|
||||||
|
$SNMP::debugging=$DEBUG;
|
||||||
|
|
||||||
|
$INIT = 0;
|
||||||
|
%MIBS = (
|
||||||
|
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||||
|
'CISCO-VLAN-MEMBERSHIP-MIB' => 'vmMembershipEntry',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
'vtp_version' => 'vtpVersion',
|
||||||
|
'vtp_maxstore' => 'vtpMaxVlanStorage',
|
||||||
|
'vtp_notify' => 'vtpNotificationsEnabled',
|
||||||
|
'vtp_notify_create' => 'vtpVlanCreatedNotifEnabled',
|
||||||
|
'vtp_notify_delete' => 'vtpVlanDeletedNotifEnabled',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
# Management Domain Table
|
||||||
|
'vtp_d_index' => 'managementDomainIndex',
|
||||||
|
'vtp_d_name' => 'managementDomainName',
|
||||||
|
'vtp_d_mode' => 'managementDomainLocalMode',
|
||||||
|
'vtp_d_rev' => 'managementDomainConfigRevNumber',
|
||||||
|
'vtp_d_updater' => 'managementDomainLastUpdater',
|
||||||
|
'vtp_d_last' => 'managementDomainLastChange',
|
||||||
|
'vtp_d_status' => 'managementDomainRowStatus',
|
||||||
|
'vtp_d_tftp' => 'managementDomainTftpServer',
|
||||||
|
'vtp_d_tftp_path' => 'managementDomainTftpPathname',
|
||||||
|
'vtp_d_pruning' => 'managementDomainPruningState',
|
||||||
|
'vtp_d_ver' => 'managementDomainVersionInUse',
|
||||||
|
# VLAN Table
|
||||||
|
'v_index' => 'vtpVlanIndex',
|
||||||
|
'v_state' => 'vtpVlanState',
|
||||||
|
'v_type' => 'vtpVlanType',
|
||||||
|
'v_name' => 'vtpVlanName',
|
||||||
|
'v_mtu' => 'vtpVlanMtu',
|
||||||
|
'v_said' => 'vtpVlanDot10Said',
|
||||||
|
'v_ring' => 'vtpVlanRingNumber',
|
||||||
|
'v_bridge' => 'vtpVlanBridgeNumber',
|
||||||
|
'v_stp' => 'vtpVlanStpType',
|
||||||
|
'v_parent' => 'vtpVlanParentVlan',
|
||||||
|
'v_trans1' => 'vtpVlanTranslationalVlan1',
|
||||||
|
'v_trans2' => 'vtpVlanTranslationalVlan2',
|
||||||
|
'v_btype' => 'vtpVlanBridgeType',
|
||||||
|
'v_hop_are' => 'vtpVlanAreHopCount',
|
||||||
|
'v_hop_ste' => 'vtpVlanSteHopCount',
|
||||||
|
'v_crf' => 'vtpVlanIsCRFBackup',
|
||||||
|
'v_type_ext' => 'vtpVlanTypeExt',
|
||||||
|
'v_if' => 'vtpVlanIfIndex',
|
||||||
|
|
||||||
|
# CISCO-VLAN-MEMBERSHIP-MIB
|
||||||
|
# VmMembershipTable
|
||||||
|
'i_vlan_type' => 'vmVlanType',
|
||||||
|
'i_vlan' => 'vmVlan',
|
||||||
|
'i_vlan_stat' => 'vmPortStatus',
|
||||||
|
'i_vlan_1' => 'vmVlans',
|
||||||
|
'i_vlan_2' => 'vmVlans2k',
|
||||||
|
'i_vlan_3' => 'vmVlans3k',
|
||||||
|
'i_vlan_4' => 'vmVlans4k',
|
||||||
|
# TODO Add these tables if someone wants them..
|
||||||
|
# vtpEditControlTable
|
||||||
|
# vtpVlanEditTable
|
||||||
|
# vtpStatsTable
|
||||||
|
# vlanTrunkPortTable
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
);
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::CiscoVTP - Perl5 Interface to Cisco's VLAN Management MIB - CISCO-VTP-MIB
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Max Baker (C<max@warped.org>)
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $vtp = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
# These arguments are passed directly on to SNMP::Session
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $vtp->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SNMP::Info::CiscoVTP is a subclass of SNMP::Info that provides
|
||||||
|
information about a switch's VLANs.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
none.
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item CISCO-VTP-MIB
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $vtp->vtp_version()
|
||||||
|
|
||||||
|
C<vtpVersion>
|
||||||
|
|
||||||
|
=item $vtp->vtp_maxstore()
|
||||||
|
|
||||||
|
C<vtpMaxVlanStorage>
|
||||||
|
|
||||||
|
=item $vtp->vtp_notify()
|
||||||
|
|
||||||
|
C<vtpNotificationsEnabled>
|
||||||
|
|
||||||
|
=item $vtp->vtp_notify_create()
|
||||||
|
|
||||||
|
C<vtpVlanCreatedNotifEnabled>
|
||||||
|
|
||||||
|
=item $vtp->vtp_notify_delete()
|
||||||
|
|
||||||
|
C<vtpVlanDeletedNotifEnabled>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
You device will only implement a subset of these methods.
|
||||||
|
|
||||||
|
=head2 VLAN Table
|
||||||
|
|
||||||
|
See ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html
|
||||||
|
for a good treaty of how to connect to the VLANs
|
||||||
|
|
||||||
|
This table is from CISCO-VTP-MIB::vtpVlanTable
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $vtp->v_index()
|
||||||
|
|
||||||
|
C<vtpVlanIndex>
|
||||||
|
|
||||||
|
=item $vtp->v_state()
|
||||||
|
|
||||||
|
C<vtpVlanState>
|
||||||
|
|
||||||
|
=item $vtp->v_type()
|
||||||
|
|
||||||
|
C<vtpVlanType>
|
||||||
|
|
||||||
|
=item $vtp->v_name()
|
||||||
|
|
||||||
|
C<vtpVlanName>
|
||||||
|
|
||||||
|
=item $vtp->v_mtu()
|
||||||
|
|
||||||
|
C<vtpVlanMtu>
|
||||||
|
|
||||||
|
=item $vtp->v_said()
|
||||||
|
|
||||||
|
C<vtpVlanDot10Said>
|
||||||
|
|
||||||
|
=item $vtp->v_ring()
|
||||||
|
|
||||||
|
C<vtpVlanRingNumber>
|
||||||
|
|
||||||
|
=item $vtp->v_bridge()
|
||||||
|
|
||||||
|
C<vtpVlanBridgeNumber>
|
||||||
|
|
||||||
|
=item $vtp->v_stp()
|
||||||
|
|
||||||
|
C<vtpVlanStpType>
|
||||||
|
|
||||||
|
=item $vtp->v_parent()
|
||||||
|
|
||||||
|
C<vtpVlanParentVlan>
|
||||||
|
|
||||||
|
=item $vtp->v_trans1()
|
||||||
|
|
||||||
|
C<vtpVlanTranslationalVlan1>
|
||||||
|
|
||||||
|
=item $vtp->v_trans2()
|
||||||
|
|
||||||
|
C<vtpVlanTranslationalVlan2>
|
||||||
|
|
||||||
|
=item $vtp->v_btype()
|
||||||
|
|
||||||
|
C<vtpVlanBridgeType>
|
||||||
|
|
||||||
|
=item $vtp->v_hop_are()
|
||||||
|
|
||||||
|
C<vtpVlanAreHopCount>
|
||||||
|
|
||||||
|
=item $vtp->v_hop_ste()
|
||||||
|
|
||||||
|
C<vtpVlanSteHopCount>
|
||||||
|
|
||||||
|
=item $vtp->v_crf()
|
||||||
|
|
||||||
|
C<vtpVlanIsCRFBackup>
|
||||||
|
|
||||||
|
=item $vtp->v_type_ext()
|
||||||
|
|
||||||
|
C<vtpVlanTypeExt>
|
||||||
|
|
||||||
|
=item $vtp->v_if()
|
||||||
|
|
||||||
|
C<vtpVlanIfIndex>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 VLAN Interface Table
|
||||||
|
|
||||||
|
This table is from CISCO-VLAN-MEMBERSHIP-MIB::VmMembershipTable
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_type()
|
||||||
|
|
||||||
|
Static, Dynamic, or multiVlan.
|
||||||
|
|
||||||
|
C<vmVlanType>
|
||||||
|
|
||||||
|
=item $vtp->i_vlan()
|
||||||
|
|
||||||
|
The VLAN that a port is assigned to.
|
||||||
|
|
||||||
|
0 for no VLAN assigned.
|
||||||
|
|
||||||
|
C<vmVlan>
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_stat()
|
||||||
|
|
||||||
|
Inactive, active, shutdown.
|
||||||
|
|
||||||
|
C<vmPortStatus>
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_1()
|
||||||
|
|
||||||
|
Each bit represents a VLAN. This is 0 through 1023
|
||||||
|
|
||||||
|
C<vmVlans>
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_2()
|
||||||
|
|
||||||
|
Each bit represents a VLAN. This is 1024 through 2047
|
||||||
|
|
||||||
|
C<vmVlans2k>
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_3()
|
||||||
|
|
||||||
|
Each bit represents a VLAN. This is 2048 through 3071
|
||||||
|
|
||||||
|
C<vmVlans3k>
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_4()
|
||||||
|
|
||||||
|
Each bit represents a VLAN. This is 3072 through 4095
|
||||||
|
|
||||||
|
C<vmVlans4k>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Managment Domain Table
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_index()
|
||||||
|
|
||||||
|
C<managementDomainIndex>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_name()
|
||||||
|
|
||||||
|
C<managementDomainName>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_mode()
|
||||||
|
|
||||||
|
C<managementDomainLocalMode>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_rev()
|
||||||
|
|
||||||
|
C<managementDomainConfigRevNumber>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_updater()
|
||||||
|
|
||||||
|
C<managementDomainLastUpdater>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_last()
|
||||||
|
|
||||||
|
C<managementDomainLastChange>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_status()
|
||||||
|
|
||||||
|
C<managementDomainRowStatus>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_tftp()
|
||||||
|
|
||||||
|
C<managementDomainTftpServer>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_tftp_path()
|
||||||
|
|
||||||
|
C<managementDomainTftpPathname>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_pruning()
|
||||||
|
|
||||||
|
C<managementDomainPruningState>
|
||||||
|
|
||||||
|
=item $vtp->vtp_d_ver()
|
||||||
|
|
||||||
|
C<managementDomainVersionInUse>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Entity
|
# SNMP::Info::Entity
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2003 Regents of the University of California
|
# Copyright (c) 2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Entity;
|
package SNMP::Info::Entity;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::EtherLike
|
# SNMP::Info::EtherLike
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::EtherLike;
|
package SNMP::Info::EtherLike;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer1 - SNMP Interface to Layer1 Devices
|
# SNMP::Info::Layer1 - SNMP Interface to Layer1 Devices
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer1;
|
package SNMP::Info::Layer1;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer1::Allied
|
# SNMP::Info::Layer1::Allied
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer1::Allied;
|
package SNMP::Info::Layer1::Allied;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer1::Asante
|
# SNMP::Info::Layer1::Asante
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer1::Asante;
|
package SNMP::Info::Layer1::Asante;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
@@ -208,7 +210,7 @@ Asante device through SNMP.
|
|||||||
|
|
||||||
Download from http://www.mibdepot.com
|
Download from http://www.mibdepot.com
|
||||||
|
|
||||||
=items MIBs listed in SNMP::Info::Layer1
|
=item MIBs listed in SNMP::Info::Layer1
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer2 - SNMP Interface to Layer2 Devices
|
# SNMP::Info::Layer2 - SNMP Interface to Layer2 Devices
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker -- All changes from Version 0.7 on
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2;
|
package SNMP::Info::Layer2;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -55,8 +57,9 @@ $INIT = 0;
|
|||||||
%SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::Bridge::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
%SNMP::Info::CiscoStats::MIBS,
|
||||||
'CISCO-PRODUCTS-MIB' => 'sysName',
|
'CISCO-PRODUCTS-MIB' => 'sysName', # for model()
|
||||||
'CISCO-STACK-MIB' => 'wsc1900sysID',
|
'CISCO-STACK-MIB' => 'wsc1900sysID', # some older catalysts live here
|
||||||
|
'ENTITY-MIB' => 'entPhysicalName', # for serial stuff
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -64,6 +67,7 @@ $INIT = 0;
|
|||||||
%SNMP::Info::Bridge::GLOBALS,
|
%SNMP::Info::Bridge::GLOBALS,
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
%SNMP::Info::CiscoStats::GLOBALS,
|
||||||
|
'serial1' => '.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -71,6 +75,8 @@ $INIT = 0;
|
|||||||
%SNMP::Info::Bridge::FUNCS,
|
%SNMP::Info::Bridge::FUNCS,
|
||||||
%SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CDP::FUNCS,
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
|
'ent_serial' => 'entPhysicalSerialNum',
|
||||||
|
'ent_chassis'=> 'entPhysicalDescr',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -89,7 +95,7 @@ sub model {
|
|||||||
my $l2 = shift;
|
my $l2 = shift;
|
||||||
my $id = $l2->id();
|
my $id = $l2->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
|
|
||||||
# HP
|
# HP
|
||||||
$model =~ s/^hpswitch//i;
|
$model =~ s/^hpswitch//i;
|
||||||
|
|
||||||
@@ -116,6 +122,25 @@ sub vendor {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $l2 = shift;
|
||||||
|
|
||||||
|
my $serial1 = $l2->serial1();
|
||||||
|
my $ent_chassis = $l2->ent_chassis() || {};
|
||||||
|
my $ent_serial = $l2->ent_serial() || {};
|
||||||
|
|
||||||
|
my $serial2 = $ent_serial->{1} || undef;
|
||||||
|
my $chassis = $ent_chassis->{1} || undef;
|
||||||
|
|
||||||
|
# precedence
|
||||||
|
# serial2,chassis parse,serial1
|
||||||
|
return $serial2 if (defined $serial2 and $serial2 !~ /^\s*$/);
|
||||||
|
return $1 if (defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i);
|
||||||
|
return $serial1 if (defined $serial1 and $serial1 !~ /^\s*$/);
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
sub i_ignore {
|
sub i_ignore {
|
||||||
my $l2 = shift;
|
my $l2 = shift;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer2::Aironet
|
# SNMP::Info::Layer2::Aironet
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2003 Regents of the University of California
|
# Copyright (c) 2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::Aironet;
|
package SNMP::Info::Layer2::Aironet;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
|||||||
246
Info/Layer2/Allied.pm
Normal file
246
Info/Layer2/Allied.pm
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
# SNMP::Info::Layer2::Allied
|
||||||
|
# Max Baker <max@warped.org>, Dmitry Sergienko <dmitry@trifle.net>
|
||||||
|
#
|
||||||
|
# Copyright (c) 2004 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 Netdisco 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::Allied;
|
||||||
|
$VERSION = 0.8;
|
||||||
|
# $Id$
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::Layer1;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Allied::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Allied::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
|
||||||
|
'ip_adresses'=> 'atNetAddress',
|
||||||
|
'ip_mac' => 'atPhysAddress',
|
||||||
|
'i_name' => 'ifName',
|
||||||
|
'i_up2' => 'ifOperStatus',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'AtiSwitch-MIB' => 'atiswitchProductType',
|
||||||
|
'AtiStackInfo-MIB' => 'atiswitchEnhancedStacking',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'allied';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'allied';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $allied = shift;
|
||||||
|
my $descr = $allied->description();
|
||||||
|
|
||||||
|
if ($descr =~ m/version (\d+\.\d+)/){
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $allied = shift;
|
||||||
|
|
||||||
|
my $desc = $allied->description();
|
||||||
|
|
||||||
|
if ($desc =~ /(AT-80\d{2}\S*)/){
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ip {
|
||||||
|
my $allied = shift;
|
||||||
|
my $ip_hash = $allied->ip_addresses();
|
||||||
|
my $ip;
|
||||||
|
my $found_ip;
|
||||||
|
|
||||||
|
foreach $ip (values %{$ip_hash}) {
|
||||||
|
my $found_ip = SNMP::Info::munge_ip($ip) if (defined $ip);
|
||||||
|
last; # this is only one IP address
|
||||||
|
}
|
||||||
|
return $found_ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub mac{
|
||||||
|
my $allied = shift;
|
||||||
|
my $mac_hash = $allied->ip_mac();
|
||||||
|
my $mac;
|
||||||
|
my $found_mac;
|
||||||
|
|
||||||
|
foreach $mac (values %{$mac_hash}) {
|
||||||
|
$found_mac = SNMP::Info::munge_mac($mac);
|
||||||
|
last; # this is only one MAC address
|
||||||
|
}
|
||||||
|
return $found_mac;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_up {
|
||||||
|
my $allied = shift;
|
||||||
|
|
||||||
|
my $i_up = SNMP::Info::Layer1::i_up($allied);
|
||||||
|
my $i_up2 = $allied->i_up2();
|
||||||
|
|
||||||
|
foreach my $port (keys %$ati_up){
|
||||||
|
my $up = $ati_up->{$port};
|
||||||
|
$i_up->{$port} = 'down' if $up eq 'linktesterror';
|
||||||
|
$i_up->{$port} = 'up' if $up eq 'nolinktesterror';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_up;
|
||||||
|
}
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Allied - SNMP Interface to Allied Telesyn switches
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Max Baker (C<max@warped.org>)
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $allied = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
# These arguments are passed directly on to SNMP::Session
|
||||||
|
DestHost => 'myhub',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 1
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $l1->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Provides abstraction to the configuration information obtainable from a
|
||||||
|
Allied device through SNMP. See inherited classes' documentation for
|
||||||
|
inherited methods.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer1
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item ATI-MIB
|
||||||
|
|
||||||
|
Download for your device from http://www.allied-telesyn.com/allied/support/
|
||||||
|
|
||||||
|
=item Inherited Classes
|
||||||
|
|
||||||
|
MIBs listed in SNMP::Info::Layer1 and its inherited classes.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $allied->vendor()
|
||||||
|
|
||||||
|
Returns 'allied' :)
|
||||||
|
|
||||||
|
=item $allied->os()
|
||||||
|
|
||||||
|
Returns 'allied'
|
||||||
|
|
||||||
|
=item $allied->os_ver()
|
||||||
|
|
||||||
|
Culls Version from description()
|
||||||
|
|
||||||
|
=item $allied->root_ip()
|
||||||
|
|
||||||
|
Returns IP Address of Managed Hub.
|
||||||
|
|
||||||
|
(B<actualIpAddr>)
|
||||||
|
|
||||||
|
=item $allied->model()
|
||||||
|
|
||||||
|
Trys to cull out AT-nnnnX out of the description field.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer1
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer1 for details.
|
||||||
|
|
||||||
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $allied->i_name()
|
||||||
|
|
||||||
|
Returns reference to map of IIDs to human-set port name.
|
||||||
|
|
||||||
|
=item $allied->i_up()
|
||||||
|
|
||||||
|
Returns reference to map of IIDs to link status. Changes
|
||||||
|
the values of ati_up() to 'up' and 'down'.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Allied MIB
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer2::Bay
|
# SNMP::Info::Layer2::Bay
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::Bay;
|
package SNMP::Info::Layer2::Bay;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
@@ -80,6 +82,7 @@ sub os {
|
|||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $bay = shift;
|
my $bay = shift;
|
||||||
my $descr = $bay->description();
|
my $descr = $bay->description();
|
||||||
|
return undef unless defined $descr;
|
||||||
|
|
||||||
# 303 / 304
|
# 303 / 304
|
||||||
if ($descr =~ m/Rev: \d+\.\d+\.\d+\.\d+-(\d+\.\d+\.\d+\.\d+)/){
|
if ($descr =~ m/Rev: \d+\.\d+\.\d+\.\d+-(\d+\.\d+\.\d+\.\d+)/){
|
||||||
@@ -96,6 +99,7 @@ sub os_ver {
|
|||||||
sub os_bin {
|
sub os_bin {
|
||||||
my $bay = shift;
|
my $bay = shift;
|
||||||
my $descr = $bay->description();
|
my $descr = $bay->description();
|
||||||
|
return undef unless defined $descr;
|
||||||
|
|
||||||
# 303 / 304
|
# 303 / 304
|
||||||
if ($descr =~ m/Rev: \d+\.(\d+\.\d+\.\d+)-\d+\.\d+\.\d+\.\d+/){
|
if ($descr =~ m/Rev: \d+\.(\d+\.\d+\.\d+)-\d+\.\d+\.\d+\.\d+/){
|
||||||
@@ -152,7 +156,9 @@ sub i_mac {
|
|||||||
sub model {
|
sub model {
|
||||||
my $bay = shift;
|
my $bay = shift;
|
||||||
my $id = $bay->id();
|
my $id = $bay->id();
|
||||||
|
return undef unless defined $id;
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
|
return $id unless defined $model;
|
||||||
$model =~ s/^sreg-//i;
|
$model =~ s/^sreg-//i;
|
||||||
|
|
||||||
my $descr = $bay->description();
|
my $descr = $bay->description();
|
||||||
@@ -192,7 +198,7 @@ sub c_ip {
|
|||||||
foreach my $entry (keys %$bay_topo_ip){
|
foreach my $entry (keys %$bay_topo_ip){
|
||||||
my $port = $bay_topo_port->{$entry};
|
my $port = $bay_topo_port->{$entry};
|
||||||
next unless defined $port;
|
next unless defined $port;
|
||||||
next if $port == 0;
|
next if ($port =~ /^[\d\.]+$/ and $port == 0);
|
||||||
my $ip = $bay_topo_ip->{$entry};
|
my $ip = $bay_topo_ip->{$entry};
|
||||||
push(@{$ip_port{$port}},$ip);
|
push(@{$ip_port{$port}},$ip);
|
||||||
}
|
}
|
||||||
@@ -257,7 +263,7 @@ sub c_platform {
|
|||||||
return \%c_platform;
|
return \%c_platform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer2::C1900
|
# SNMP::Info::Layer2::C1900
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,14 +30,15 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::C1900;
|
package SNMP::Info::Layer2::C1900;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::CiscoVTP;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::C1900::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::C1900::ISA = qw/SNMP::Info::Layer2 SNMP::Info::CiscoVTP Exporter/;
|
||||||
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||||
@@ -43,10 +46,12 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
|||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
'c1900_flash_status' => 'upgradeFlashBankStatus',
|
'c1900_flash_status' => 'upgradeFlashBankStatus',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
'i_type2' => 'ifType',
|
'i_type2' => 'ifType',
|
||||||
'i_name2' => 'ifName',
|
'i_name2' => 'ifName',
|
||||||
# ESSWITCH-MIB
|
# ESSWITCH-MIB
|
||||||
@@ -62,11 +67,13 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
|||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
# Also known as the ESSWITCH-MIB
|
# Also known as the ESSWITCH-MIB
|
||||||
'STAND-ALONE-ETHERNET-SWITCH-MIB' => 'series2000'
|
'STAND-ALONE-ETHERNET-SWITCH-MIB' => 'series2000'
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
|
||||||
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
@@ -92,6 +99,10 @@ sub os_ver {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cisco_comm_indexing {
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
my $c1900 = shift;
|
my $c1900 = shift;
|
||||||
my $i_descr = $c1900->i_description();
|
my $i_descr = $c1900->i_description();
|
||||||
@@ -189,6 +200,8 @@ sub i_name {
|
|||||||
|
|
||||||
return $i_name;
|
return $i_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer2::C2900
|
# SNMP::Info::Layer2::C2900
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,43 +30,52 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::C2900;
|
package SNMP::Info::Layer2::C2900;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::CiscoVTP;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2 SNMP::Info::CiscoVTP Exporter/;
|
||||||
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
|
'i_name' => 'ifAlias',
|
||||||
# C2900PortEntry
|
# C2900PortEntry
|
||||||
'c2900_p_index' => 'c2900PortIfIndex',
|
'c2900_p_index' => 'c2900PortIfIndex',
|
||||||
'c2900_p_duplex' => 'c2900PortDuplexStatus',
|
'c2900_p_duplex' => 'c2900PortDuplexStatus',
|
||||||
'c2900_p_duplex_admin' => 'c2900PortDuplexState',
|
'c2900_p_duplex_admin' => 'c2900PortDuplexState',
|
||||||
'c2900_p_speed_admin' => 'c2900PortAdminSpeed',
|
'c2900_p_speed_admin' => 'c2900PortAdminSpeed',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = ( %SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
'CISCO-C2900-MIB' => 'ciscoC2900MIB'
|
'CISCO-C2900-MIB' => 'ciscoC2900MIB',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE,
|
||||||
);
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cisco_comm_indexing {
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
sub i_duplex {
|
sub i_duplex {
|
||||||
my $c2900 = shift;
|
my $c2900 = shift;
|
||||||
|
|
||||||
@@ -134,6 +145,7 @@ sub interfaces {
|
|||||||
return \%if
|
return \%if
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
@@ -176,6 +188,8 @@ a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -186,6 +200,12 @@ a more specific class using the method above.
|
|||||||
|
|
||||||
Part of the v2 MIBs from Cisco.
|
Part of the v2 MIBs from Cisco.
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See SNMP::Info::Layer2 for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoVTP for its own MIB requirements.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -206,6 +226,10 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer2 for details.
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
=head1 TABLE ENTRIES
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
@@ -277,4 +301,8 @@ to a hash.
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer2 for details.
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
|
# Copyright (c) 2003,2004 Max Baker changes from version 0.8 and beyond
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@@ -28,16 +29,19 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::Catalyst;
|
package SNMP::Info::Layer2::Catalyst;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::CiscoVTP;
|
||||||
|
use SNMP::Info::CiscoStack;
|
||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE $INIT/ ;
|
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE $INIT/ ;
|
||||||
@SNMP::Info::Layer2::Catalyst::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::Catalyst::ISA = qw/SNMP::Info::CiscoStack SNMP::Info::Layer2
|
||||||
|
SNMP::Info::CiscoVTP Exporter/;
|
||||||
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
|
||||||
|
|
||||||
$DEBUG=0;
|
$DEBUG=0;
|
||||||
@@ -47,82 +51,28 @@ $DEBUG=0;
|
|||||||
$INIT = 0;
|
$INIT = 0;
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer2::MIBS,
|
%MIBS = ( %SNMP::Info::Layer2::MIBS,
|
||||||
'CISCO-STACK-MIB' => 'moduleType',
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
'CISCO-VTP-MIB' => 'vtpVlanIndex'
|
%SNMP::Info::CiscoStack::MIBS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
# these are in CISCO-STACK-MIB
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
'sysip' => 'sysIpAddr',
|
%SNMP::Info::CiscoStack::GLOBALS,
|
||||||
'netmask' => 'sysNetMask',
|
|
||||||
'broadcast' => 'sysBroadcast',
|
|
||||||
'serial' => 'chassisSerialNumber',
|
|
||||||
'model' => 'chassisModel',
|
|
||||||
'ps1_type' => 'chassisPs1Type',
|
|
||||||
'ps1_status' => 'chassisPs1Status',
|
|
||||||
'ps2_type' => 'chassisPs2Type',
|
|
||||||
'ps2_status' => 'chassisPs2Status',
|
|
||||||
'slots' => 'chassisNumSlots',
|
|
||||||
'fan' => 'chassisFanStatus',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
'i_type2' => 'ifType',
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
# CISCO-STACK-MIB::moduleEntry
|
%SNMP::Info::CiscoStack::FUNCS,
|
||||||
# These are blades in a catalyst device
|
|
||||||
'm_type' => 'moduleType',
|
|
||||||
'm_model' => 'moduleModel',
|
|
||||||
'm_serial' => 'moduleSerialNumber',
|
|
||||||
'm_status' => 'moduleStatus',
|
|
||||||
'm_name' => 'moduleName',
|
|
||||||
'm_ports' => 'moduleNumPorts',
|
|
||||||
'm_ports_status' => 'modulePortStatus',
|
|
||||||
'm_hwver' => 'moduleHwVersion',
|
|
||||||
'm_fwver' => 'moduleFwVersion',
|
|
||||||
'm_swver' => 'moduleSwVersion',
|
|
||||||
# Router Blades :
|
|
||||||
'm_ip' => 'moduleIPAddress',
|
|
||||||
'm_sub1' => 'moduleSubType',
|
|
||||||
'm_sub2' => 'moduleSubType2',
|
|
||||||
# CISCO-STACK-MIB::portEntry
|
|
||||||
'p_name' => 'portName',
|
|
||||||
'p_type' => 'portType',
|
|
||||||
'p_status' => 'portOperStatus',
|
|
||||||
'p_status2' => 'portAdditionalStatus',
|
|
||||||
'p_speed' => 'portAdminSpeed',
|
|
||||||
'p_duplex' => 'portDuplex',
|
|
||||||
'p_port' => 'portIfIndex',
|
|
||||||
# CISCO-STACK-MIB::PortCpbEntry
|
|
||||||
'p_speed_admin' => 'portCpbSpeed',
|
|
||||||
'p_duplex_admin' => 'portCpbDuplex',
|
|
||||||
# CISCO-VTP-MIB::VtpVlanEntry
|
|
||||||
'v_state' => 'vtpVlanState',
|
|
||||||
'v_type' => 'vtpVlanType',
|
|
||||||
'v_name' => 'vtpVlanName',
|
|
||||||
'v_mtu' => 'vtpVlanMtu',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
'm_ports_status' => \&munge_port_status,
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
'p_duplex_admin' => \&SNMP::Info::munge_bits,
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
%PORTSTAT = (1 => 'other',
|
|
||||||
2 => 'ok',
|
|
||||||
3 => 'minorFault',
|
|
||||||
4 => 'majorFault');
|
|
||||||
|
|
||||||
# Changes binary byte describing each port into ascii, and returns
|
|
||||||
# an ascii list separated by spaces.
|
|
||||||
sub munge_port_status {
|
|
||||||
my $status = shift;
|
|
||||||
my @vals = map($PORTSTAT{$_},unpack('C*',$status));
|
|
||||||
return join(' ',@vals);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Overidden Methods
|
# Overidden Methods
|
||||||
|
|
||||||
# i_physical sets a hash entry as true if the iid is a physical port
|
# i_physical sets a hash entry as true if the iid is a physical port
|
||||||
@@ -139,98 +89,6 @@ sub i_physical {
|
|||||||
return \%i_physical;
|
return \%i_physical;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_type {
|
|
||||||
my $cat = shift;
|
|
||||||
|
|
||||||
my $p_port = $cat->p_port();
|
|
||||||
my $p_type = $cat->p_type();
|
|
||||||
|
|
||||||
# Get more generic port types from IF-MIB
|
|
||||||
my $i_type = $cat->i_type2();
|
|
||||||
|
|
||||||
# Now Override w/ port entries
|
|
||||||
foreach my $port (keys %$p_type) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
$i_type->{$iid} = $p_type->{$port};
|
|
||||||
}
|
|
||||||
|
|
||||||
return $i_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
# p_* functions are indexed to physical port. let's index these
|
|
||||||
# to snmp iid
|
|
||||||
sub i_name {
|
|
||||||
my $cat = shift;
|
|
||||||
|
|
||||||
my $p_port = $cat->p_port();
|
|
||||||
my $p_name = $cat->p_name();
|
|
||||||
|
|
||||||
my %i_name;
|
|
||||||
foreach my $port (keys %$p_name) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
next unless defined $iid;
|
|
||||||
$i_name{$iid} = $p_name->{$port};
|
|
||||||
}
|
|
||||||
return \%i_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub i_duplex {
|
|
||||||
my $cat = shift;
|
|
||||||
|
|
||||||
my $p_port = $cat->p_port();
|
|
||||||
my $p_duplex = $cat->p_duplex();
|
|
||||||
|
|
||||||
my %i_duplex;
|
|
||||||
foreach my $port (keys %$p_duplex) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
$i_duplex{$iid} = $p_duplex->{$port};
|
|
||||||
}
|
|
||||||
return \%i_duplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub i_duplex_admin {
|
|
||||||
my $cat = shift;
|
|
||||||
|
|
||||||
my $p_port = $cat->p_port();
|
|
||||||
my $p_duplex_admin = $cat->p_duplex_admin();
|
|
||||||
|
|
||||||
my %i_duplex_admin;
|
|
||||||
foreach my $port (keys %$p_duplex_admin) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
next unless defined $iid;
|
|
||||||
my $duplex = $p_duplex_admin->{$port};
|
|
||||||
next unless defined $duplex;
|
|
||||||
|
|
||||||
my $string = 'other';
|
|
||||||
# see CISCO-STACK-MIB for a description of the bits
|
|
||||||
$string = 'half' if ($duplex =~ /001$/ or $duplex =~ /0100.$/);
|
|
||||||
$string = 'full' if ($duplex =~ /010$/ or $duplex =~ /100.0$/);
|
|
||||||
# we'll call it auto if both full and half are turned on, or if the
|
|
||||||
# specifically 'auto' flag bit is set.
|
|
||||||
$string = 'auto'
|
|
||||||
if ($duplex =~ /1..$/ or $duplex =~ /110..$/ or $duplex =~ /..011$/);
|
|
||||||
|
|
||||||
$i_duplex_admin{$iid} = $string;
|
|
||||||
}
|
|
||||||
return \%i_duplex_admin;
|
|
||||||
}
|
|
||||||
|
|
||||||
# $cat->interfaces() - Maps the ifIndex table to a physical port
|
|
||||||
sub interfaces {
|
|
||||||
my $self = shift;
|
|
||||||
my $interfaces = $self->i_index();
|
|
||||||
my $portnames = $self->p_port();
|
|
||||||
my %portmap = reverse %$portnames;
|
|
||||||
|
|
||||||
my %interfaces = ();
|
|
||||||
foreach my $iid (keys %$interfaces) {
|
|
||||||
my $if = $interfaces->{$iid};
|
|
||||||
$interfaces{$if} = $portmap{$iid};
|
|
||||||
}
|
|
||||||
|
|
||||||
return \%interfaces;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
@@ -252,12 +110,16 @@ sub os_ver {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cisco_comm_indexing {
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::Layer2::Catalyst - Perl5 Interface to Cisco devices running Catalyst OS
|
SNMP::Info::Layer2::Catalyst - Perl5 Interface to Cisco Catalyst 5000 series devices.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -281,13 +143,16 @@ Max Baker (C<max@warped.org>)
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info subclass to provide information for Cisco Catalyst switches running CatOS.
|
SNMP::Info subclass to provide information for Cisco Catalyst 5000 series switches running CatOS.
|
||||||
|
|
||||||
This subclass is not for all devices that have the name Catalyst. Note that some Catalyst
|
This subclass is not for all devices that have the name Catalyst. Note that some Catalyst
|
||||||
switches run IOS, like the 2900 and 3550 families. Cisco Catalyst 1900 switches use their
|
switches run IOS, like the 2900 and 3550 families. Cisco Catalyst 1900 switches use their
|
||||||
own MIB and have a separate subclass. Use the method above to have SNMP::Info determine the
|
own MIB and have a separate subclass. Use the method above to have SNMP::Info determine the
|
||||||
appropriate subclass before using this class directly.
|
appropriate subclass before using this class directly.
|
||||||
|
|
||||||
|
This class includes the Catalyst 2950 series devices, which fall under the
|
||||||
|
Catalyst 5000 family.
|
||||||
|
|
||||||
Note: Some older Catalyst switches will only talk SNMP version 1. Some newer ones will not
|
Note: Some older Catalyst switches will only talk SNMP version 1. Some newer ones will not
|
||||||
return all their data if connected via Version 1.
|
return all their data if connected via Version 1.
|
||||||
|
|
||||||
@@ -302,20 +167,24 @@ a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item CISCO-STACK-MIB
|
|
||||||
|
|
||||||
=item CISCO-VTP-MIB
|
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See SNMP::Info::Layer2 for its own MIB requirements.
|
See SNMP::Info::Layer2 for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoVTP for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoStack for its own MIB requirements.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
These MIBs are found in the standard v2 MIBs from Cisco.
|
These MIBs are found in the standard v2 MIBs from Cisco.
|
||||||
@@ -326,22 +195,6 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $cat->broadcast()
|
|
||||||
|
|
||||||
(B<sysBroadcast>)
|
|
||||||
|
|
||||||
=item $cat->fan()
|
|
||||||
|
|
||||||
(B<chassisFanStatus>)
|
|
||||||
|
|
||||||
=item $cat->model()
|
|
||||||
|
|
||||||
(B<chassisModel>)
|
|
||||||
|
|
||||||
=item $cat->netmask()
|
|
||||||
|
|
||||||
(B<sysNetMask>)
|
|
||||||
|
|
||||||
=item $cat->os()
|
=item $cat->os()
|
||||||
|
|
||||||
Returns 'catalyst'
|
Returns 'catalyst'
|
||||||
@@ -351,30 +204,6 @@ Returns 'catalyst'
|
|||||||
Tries to use the value from SNMP::Info::CiscoStats->os_ver() and if it fails
|
Tries to use the value from SNMP::Info::CiscoStats->os_ver() and if it fails
|
||||||
it grabs $cat->m_swver()->{1} and uses that.
|
it grabs $cat->m_swver()->{1} and uses that.
|
||||||
|
|
||||||
=item $cat->ps1_type()
|
|
||||||
|
|
||||||
(B<chassisPs1Type>)
|
|
||||||
|
|
||||||
=item $cat->ps2_type()
|
|
||||||
|
|
||||||
(B<chassisPs2Type>)
|
|
||||||
|
|
||||||
=item $cat->ps1_status()
|
|
||||||
|
|
||||||
(B<chassisPs1Status>)
|
|
||||||
|
|
||||||
=item $cat->ps2_status()
|
|
||||||
|
|
||||||
(B<chassisPs2Status>)
|
|
||||||
|
|
||||||
=item $cat->serial()
|
|
||||||
|
|
||||||
(B<chassisSerialNumberString>)
|
|
||||||
|
|
||||||
=item $cat->slots()
|
|
||||||
|
|
||||||
(B<chassisNumSlots>)
|
|
||||||
|
|
||||||
=item $cat->vendor()
|
=item $cat->vendor()
|
||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
@@ -385,206 +214,29 @@ Returns 'cisco'
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer2 for details.
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoStack for details.
|
||||||
|
|
||||||
=head1 TABLE ENTRIES
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
=over
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
=item $cat->interfaces()
|
|
||||||
|
|
||||||
Crosses p_port() with i_index() to get physical names.
|
|
||||||
|
|
||||||
=item $cat->i_physical()
|
|
||||||
|
|
||||||
Returns a map to IID for ports that are physical ports, not vlans, etc.
|
|
||||||
|
|
||||||
=item $cat->i_type()
|
|
||||||
|
|
||||||
Crosses p_port() with p_type() and returns the results.
|
|
||||||
|
|
||||||
Overrides with ifType if p_type() isn't available.
|
|
||||||
|
|
||||||
=item $cat->i_name()
|
|
||||||
|
|
||||||
Crosses p_name with p_port and returns results.
|
|
||||||
|
|
||||||
=item $cat->i_duplex()
|
|
||||||
|
|
||||||
Crosses p_duplex with p_port and returns results.
|
|
||||||
|
|
||||||
=item $cat->i_duplex_admin()
|
|
||||||
|
|
||||||
Crosses p_duplex_admin with p_port.
|
|
||||||
|
|
||||||
Munges bit_string returned from p_duplex_admin to get duplex settings.
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Module table
|
|
||||||
|
|
||||||
This table holds configuration information for each of the blades installed in
|
|
||||||
the Catalyst device.
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $cat->m_type()
|
|
||||||
|
|
||||||
(B<moduleType>)
|
|
||||||
|
|
||||||
=item $cat->m_model()
|
|
||||||
|
|
||||||
(B<moduleModel>)
|
|
||||||
|
|
||||||
=item $cat->m_serial()
|
|
||||||
|
|
||||||
(B<moduleSerialNumber>)
|
|
||||||
|
|
||||||
=item $cat->m_status()
|
|
||||||
|
|
||||||
(B<moduleStatus>)
|
|
||||||
|
|
||||||
=item $cat->m_name()
|
|
||||||
|
|
||||||
(B<moduleName>)
|
|
||||||
|
|
||||||
=item $cat->m_ports()
|
|
||||||
|
|
||||||
(B<moduleNumPorts>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_status()
|
|
||||||
|
|
||||||
Returns a list of space separated status strings for the ports.
|
|
||||||
|
|
||||||
To see the status of port 4 :
|
|
||||||
|
|
||||||
@ports_status = split(' ', $cat->m_ports_status() );
|
|
||||||
$port4 = $ports_status[3];
|
|
||||||
|
|
||||||
(B<modulePortStatus>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_hwver()
|
|
||||||
|
|
||||||
(B<moduleHwVersion>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_fwver()
|
|
||||||
|
|
||||||
(B<moduleFwVersion>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_swver()
|
|
||||||
|
|
||||||
(B<moduleSwVersion>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_ip()
|
|
||||||
|
|
||||||
(B<moduleIPAddress>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_sub1()
|
|
||||||
|
|
||||||
(B<moduleSubType>)
|
|
||||||
|
|
||||||
=item $cat->m_ports_sub2()
|
|
||||||
|
|
||||||
(B<moduleSubType2>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Modules - Router Blades
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $cat->m_ip()
|
|
||||||
|
|
||||||
(B<moduleIPAddress>)
|
|
||||||
|
|
||||||
=item $cat->m_sub1()
|
|
||||||
|
|
||||||
(B<moduleSubType>)
|
|
||||||
|
|
||||||
=item $cat->m_sub2()
|
|
||||||
|
|
||||||
(B<moduleSubType2>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Port Entry Table (CISCO-STACK-MIB::portTable)
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $cat->p_name()
|
|
||||||
|
|
||||||
(B<portName>)
|
|
||||||
|
|
||||||
=item $cat->p_type()
|
|
||||||
|
|
||||||
(B<portType>)
|
|
||||||
|
|
||||||
=item $cat->p_status()
|
|
||||||
|
|
||||||
(B<portOperStatus>)
|
|
||||||
|
|
||||||
=item $cat->p_status2()
|
|
||||||
|
|
||||||
(B<portAdditionalStatus>)
|
|
||||||
|
|
||||||
=item $cat->p_speed()
|
|
||||||
|
|
||||||
(B<portAdminSpeed>)
|
|
||||||
|
|
||||||
=item $cat->p_duplex()
|
|
||||||
|
|
||||||
(B<portDuplex>)
|
|
||||||
|
|
||||||
=item $cat->p_port()
|
|
||||||
|
|
||||||
(B<portIfIndex>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Port Capability Table (CISCO-STACK-MIB::portCpbTable)
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $cat->p_speed_admin()
|
|
||||||
|
|
||||||
(B<portCpbSpeed>)
|
|
||||||
|
|
||||||
=item $cat->p_duplex_admin()
|
|
||||||
|
|
||||||
(B<portCpbDuplex>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 VLAN Entry Table
|
|
||||||
|
|
||||||
See ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html
|
|
||||||
for a good treaty of how to connect to the VLANs
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $cat->v_state()
|
|
||||||
|
|
||||||
(B<vtpVlanState>)
|
|
||||||
|
|
||||||
=item $cat->v_type()
|
|
||||||
|
|
||||||
(B<vtpVlanType>)
|
|
||||||
|
|
||||||
=item $cat->v_name()
|
|
||||||
|
|
||||||
(B<vtpVlanName>)
|
|
||||||
|
|
||||||
=item $cat->v_mtu()
|
|
||||||
|
|
||||||
(B<vtpVlanMtu>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer2 for details.
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2::CiscoSTack
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2::CiscoStack for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
|
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::HP;
|
package SNMP::Info::Layer2::HP;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -51,22 +53,24 @@ $INIT = 0;
|
|||||||
%SNMP::Info::Entity::MIBS,
|
%SNMP::Info::Entity::MIBS,
|
||||||
'RFC1271-MIB' => 'logDescription',
|
'RFC1271-MIB' => 'logDescription',
|
||||||
'HP-ICF-OID' => 'hpSwitch4000',
|
'HP-ICF-OID' => 'hpSwitch4000',
|
||||||
|
'HP-VLAN' => 'hpVlanMemberIndex',
|
||||||
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
||||||
'NETSWITCH-MIB' => 'hpMsgBufFree'
|
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::MAU::GLOBALS,
|
%SNMP::Info::MAU::GLOBALS,
|
||||||
%SNMP::Info::Entity::GLOBALS,
|
%SNMP::Info::Entity::GLOBALS,
|
||||||
'serial1' => 'entPhysicalSerialNum.1',
|
'serial1' => 'entPhysicalSerialNum.1',
|
||||||
'hp_cpu' => 'hpSwitchCpuStat.0',
|
'hp_cpu' => 'hpSwitchCpuStat.0',
|
||||||
'hp_mem_total' => 'hpGlobalMemTotalBytes.1',
|
'hp_mem_total' => 'hpGlobalMemTotalBytes.1',
|
||||||
'mem_free' => 'hpGlobalMemFreeBytes.1',
|
'mem_free' => 'hpGlobalMemFreeBytes.1',
|
||||||
'mem_used' => 'hpGlobalMemAllocBytes.1',
|
'mem_used' => 'hpGlobalMemAllocBytes.1',
|
||||||
'os_version' => 'hpSwitchOsVersion.0',
|
'os_version' => 'hpSwitchOsVersion.0',
|
||||||
'os_bin' => 'hpSwitchRomVersion.0',
|
'os_bin' => 'hpSwitchRomVersion.0',
|
||||||
'mac' => 'hpSwitchBaseMACAddress.0'
|
'mac' => 'hpSwitchBaseMACAddress.0',
|
||||||
|
'hp_vlans' => 'hpVlanNumber',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -75,7 +79,16 @@ $INIT = 0;
|
|||||||
%SNMP::Info::Entity::FUNCS,
|
%SNMP::Info::Entity::FUNCS,
|
||||||
'i_type2' => 'ifType',
|
'i_type2' => 'ifType',
|
||||||
# RFC1271
|
# RFC1271
|
||||||
'l_descr' => 'logDescription'
|
'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',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -86,15 +99,32 @@ $INIT = 0;
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MODEL_MAP = (
|
%MODEL_MAP = (
|
||||||
'J4812A' => '2512',
|
'J4093A' => '2424M',
|
||||||
'J4819A' => '5308XL',
|
'J4110A' => '8000M',
|
||||||
'J4813A' => '2524',
|
'J4120A' => '1600M',
|
||||||
'J4805A' => '5304XL',
|
'J4121A' => '4000M',
|
||||||
'J4815A' => '3324XL',
|
'J4122A' => '2400M',
|
||||||
'J4865A' => '4108GL',
|
'J4138A' => '9308M',
|
||||||
'J4887A' => '4104GL',
|
'J4139A' => '9304M',
|
||||||
'J4874A' => '9315',
|
'J4812A' => '2512',
|
||||||
);
|
'J4813A' => '2524',
|
||||||
|
'J4819A' => '5308XL',
|
||||||
|
'J4840A' => '6308M-SX',
|
||||||
|
'J4841A' => '6208M-SX',
|
||||||
|
'J4850A' => '5304XL',
|
||||||
|
'J4865A' => '4108GL',
|
||||||
|
'J4874A' => '9315M',
|
||||||
|
'J4887A' => '4104GL',
|
||||||
|
'J4899A' => '2650',
|
||||||
|
'J4900A' => '2626',
|
||||||
|
'J4902A' => '6108',
|
||||||
|
'J4903A' => '2824',
|
||||||
|
'J4904A' => '2848',
|
||||||
|
'J8130A' => 'WAP-420-NA',
|
||||||
|
'J8131A' => 'WAP-420-WW',
|
||||||
|
'J8164A' => '2626-PWR',
|
||||||
|
'J8165A' => '2650-PWR',
|
||||||
|
);
|
||||||
|
|
||||||
# Method Overrides
|
# Method Overrides
|
||||||
|
|
||||||
@@ -326,6 +356,57 @@ sub i_duplex_admin {
|
|||||||
return \%i_duplex_admin;
|
return \%i_duplex_admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
=item $hp->i_vlan()
|
||||||
|
|
||||||
|
Looks in Q-BRIDGE-MIB -- see SNMP::Info::Bridge
|
||||||
|
|
||||||
|
and for older devices looks in HP-VLAN.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
sub i_vlan {
|
||||||
|
my $hp = shift;
|
||||||
|
|
||||||
|
my $interfaces = $hp->interfaces();
|
||||||
|
|
||||||
|
# Newer devices use Q-BRIDGE-MIB
|
||||||
|
my $qb_i_vlan = $hp->qb_i_vlan();
|
||||||
|
my $qb_i_vlan_type = $hp->qb_i_vlan_type();
|
||||||
|
|
||||||
|
my $i_vlan = {};
|
||||||
|
|
||||||
|
foreach my $if (keys %$qb_i_vlan){
|
||||||
|
my $vlan = $qb_i_vlan->{$if};
|
||||||
|
my $tagged = $qb_i_vlan_type->{$if};
|
||||||
|
$tagged = (defined $tagged and $tagged eq 'admitOnlyVlanTagged') ? 1 : 0;
|
||||||
|
next unless defined $vlan;
|
||||||
|
$i_vlan->{$if}= $tagged ? 'trunk' : $vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
# HP4000 ... get it from HP-VLAN
|
||||||
|
# the hpvlanmembertagged2 table has an entry in the form of
|
||||||
|
# vlan.interface = /untagged/no/tagged/auto
|
||||||
|
unless (defined $qb_i_vlan and scalar(keys %$qb_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;
|
||||||
|
$vlan = 'Trunk' if $tag eq 'tagged';
|
||||||
|
$vlan = 'Auto' if $tag eq 'auto';
|
||||||
|
undef $vlan if $tag eq 'no';
|
||||||
|
|
||||||
|
|
||||||
|
$i_vlan->{$if} = $vlan if defined $vlan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_vlan;
|
||||||
|
}
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -389,13 +470,18 @@ Included in V2 mibs from Cisco
|
|||||||
|
|
||||||
=item HP-ICF-OID
|
=item HP-ICF-OID
|
||||||
|
|
||||||
|
=item HP-VLAN
|
||||||
|
|
||||||
|
(this MIB new with SNMP::Info 0.8)
|
||||||
|
|
||||||
=item STATISTICS-MIB
|
=item STATISTICS-MIB
|
||||||
|
|
||||||
=item NETSWITCH-MIB
|
=item NETSWITCH-MIB
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
The last three MIBs listed are from HP and can be found at http://www.hp.com/rnd/software
|
The last three 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 ChangeLog
|
=head1 ChangeLog
|
||||||
|
|
||||||
|
|||||||
224
Info/Layer2/ZyXEL_DSLAM.pm
Normal file
224
Info/Layer2/ZyXEL_DSLAM.pm
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
# SNMP::Info::Layer2::ZyXEL_DSLAM
|
||||||
|
# Dmitry Sergienko <dmitry@trifle.net>
|
||||||
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker <max@warped.org>
|
||||||
|
# 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 Netdisco 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::ZyXEL_DSLAM;
|
||||||
|
$VERSION = 0.8;
|
||||||
|
# $Id$
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::ZyXEL_DSLAM::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::ZyXEL_DSLAM::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||||
|
|
||||||
|
# Set for No CDP
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS,
|
||||||
|
'ip_adresses' => 'ipAdEntAddr',
|
||||||
|
'i_name' => 'ifDescr',
|
||||||
|
'i_description' => 'adslLineConfProfile',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'ADSL-LINE-MIB' => 'adslLineConfProfile'
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
sub layers {
|
||||||
|
my $zyxel = shift;
|
||||||
|
my $layers = $zyxel->layers();
|
||||||
|
return $layers if defined $layers;
|
||||||
|
|
||||||
|
# If these don't claim to have any layers, so we'll give them 1+2
|
||||||
|
return '00000011';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'zyxel';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'zyxel';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $zyxel = shift;
|
||||||
|
my $descr = $zyxel->description();
|
||||||
|
|
||||||
|
if ($descr =~ m/version (\S+) /){
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $zyxel = shift;
|
||||||
|
|
||||||
|
my $desc = $zyxel->description();
|
||||||
|
|
||||||
|
if ($desc =~ /8-port ADSL Module\(Annex A\)/){
|
||||||
|
return "AAM1008-61";
|
||||||
|
} elsif ($desc =~ /8-port ADSL Module\(Annex B\)/){
|
||||||
|
return "AAM1008-63";
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ip{
|
||||||
|
my $zyxel = shift;
|
||||||
|
my $ip_hash = $zyxel->ip_addresses();
|
||||||
|
my $ip;
|
||||||
|
|
||||||
|
foreach $ip (keys %{$ip_hash}) {
|
||||||
|
my $found_ip = $ip if (defined $ip and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/);
|
||||||
|
}
|
||||||
|
return $ip;
|
||||||
|
}
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::ZyXEL_DSLAM - SNMP Interface to ZyXEL DSLAM
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Dmitry Sergienko (C<dmitry@trifle.net>)
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $zyxel = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
# These arguments are passed directly on to SNMP::Session
|
||||||
|
DestHost => 'myhub',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 1
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $l2->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Provides abstraction to the configuration information obtainable from a
|
||||||
|
ZyXEL device through SNMP. See inherited classes' documentation for
|
||||||
|
inherited methods.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item ADSL-LINE-MIB
|
||||||
|
|
||||||
|
This MIB assumedly obtainable through ZyXEL or possibly included with your device.
|
||||||
|
|
||||||
|
=item Inherited Classes
|
||||||
|
|
||||||
|
MIBs listed in SNMP::Info::Layer2 and their inherited classes.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $zyxel->vendor()
|
||||||
|
|
||||||
|
Returns 'ZyXEL' :)
|
||||||
|
|
||||||
|
=item $zyxel->os()
|
||||||
|
|
||||||
|
Returns 'ZyXEL'
|
||||||
|
|
||||||
|
=item $zyxel->os_ver()
|
||||||
|
|
||||||
|
Culls Version from description()
|
||||||
|
|
||||||
|
=item $zyxel->ip()
|
||||||
|
|
||||||
|
Returns IP Address of DSLAM.
|
||||||
|
|
||||||
|
(B<ipAdEntAddr>)
|
||||||
|
|
||||||
|
=item $zyxel->model()
|
||||||
|
|
||||||
|
Trys to cull out model out of the description field.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $zyxel->i_name()
|
||||||
|
|
||||||
|
Returns reference to map of IIDs to port name (B<ifDescr>).
|
||||||
|
|
||||||
|
=item $zyxel->i_description()
|
||||||
|
|
||||||
|
Returns reference to map of IIDs to human-set port description (profile name).
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer3 - SNMP Interface to Layer3 devices
|
# SNMP::Info::Layer3 - SNMP Interface to Layer3 devices
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker -- All changes from Version 0.7 on
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer3;
|
package SNMP::Info::Layer3;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -69,7 +71,7 @@ $INIT = 0;
|
|||||||
%SNMP::Info::Bridge::GLOBALS,
|
%SNMP::Info::Bridge::GLOBALS,
|
||||||
%SNMP::Info::EtherLike::GLOBALS,
|
%SNMP::Info::EtherLike::GLOBALS,
|
||||||
'mac' => 'ifPhysAddress.1',
|
'mac' => 'ifPhysAddress.1',
|
||||||
'chassis' => 'entPhysicalDescr.1',
|
'serial1' => '.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
||||||
'router_ip' => 'ospfRouterId.0',
|
'router_ip' => 'ospfRouterId.0',
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -85,7 +87,9 @@ $INIT = 0;
|
|||||||
'at_index' => 'atIfIndex',
|
'at_index' => 'atIfIndex',
|
||||||
'at_paddr' => 'atPhysAddress',
|
'at_paddr' => 'atPhysAddress',
|
||||||
'at_netaddr' => 'atNetAddress',
|
'at_netaddr' => 'atNetAddress',
|
||||||
'ospf_ip' => 'ospfHostIpAddress'
|
'ospf_ip' => 'ospfHostIpAddress',
|
||||||
|
'ent_serial' => 'entPhysicalSerialNum',
|
||||||
|
'ent_chassis'=> 'entPhysicalDescr',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -138,10 +142,20 @@ sub i_ignore {
|
|||||||
sub serial {
|
sub serial {
|
||||||
my $l3 = shift;
|
my $l3 = shift;
|
||||||
|
|
||||||
my $chassis = $l3->chassis();
|
my $serial1 = $l3->serial1();
|
||||||
|
my $ent_chassis = $l3->ent_chassis() || {};
|
||||||
|
my $ent_serial = $l3->ent_serial() || {};
|
||||||
|
|
||||||
|
my $serial2 = $ent_serial->{1} || undef;
|
||||||
|
my $chassis = $ent_chassis->{1} || undef;
|
||||||
|
|
||||||
|
# precedence
|
||||||
|
# serial2,chassis parse,serial1
|
||||||
|
return $serial2 if (defined $serial2 and $serial2 !~ /^\s*$/);
|
||||||
return $1 if (defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i);
|
return $1 if (defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i);
|
||||||
|
return $serial1 if (defined $serial1 and $serial1 !~ /^\s*$/);
|
||||||
|
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
# $l3->model() - the sysObjectID returns an IID to an entry in
|
# $l3->model() - the sysObjectID returns an IID to an entry in
|
||||||
@@ -149,8 +163,16 @@ sub serial {
|
|||||||
sub model {
|
sub model {
|
||||||
my $l3 = shift;
|
my $l3 = shift;
|
||||||
my $id = $l3->id();
|
my $id = $l3->id();
|
||||||
|
|
||||||
|
unless (defined $id){
|
||||||
|
print " SNMP::Info::Layer3::model() - Device does not support sysObjectID\n" if $DEBUG;
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
|
|
||||||
|
return $id unless defined $model;
|
||||||
|
|
||||||
$model =~ s/^cisco//i;
|
$model =~ s/^cisco//i;
|
||||||
$model =~ s/^catalyst//;
|
$model =~ s/^catalyst//;
|
||||||
$model =~ s/^cat//;
|
$model =~ s/^cat//;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer3::Aironet
|
# SNMP::Info::Layer3::Aironet
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer3::Aironet;
|
package SNMP::Info::Layer3::Aironet;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -90,9 +92,9 @@ sub os_ver {
|
|||||||
my $aironet = shift;
|
my $aironet = shift;
|
||||||
my $descr = $aironet->description();
|
my $descr = $aironet->description();
|
||||||
|
|
||||||
# CAP340 11.21
|
# CAP340 11.21, AP4800-E 11.21
|
||||||
if ($descr =~ /AP\d{3}\s+(\d{2}\.\d{2})/){
|
if ($descr =~ /AP\d{3,4}(-\D+)?\s+(\d{2}\.\d{2})/){
|
||||||
return $1;
|
return $2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($descr =~ /Series\s*AP\s+(\d{2}\.\d{2})/){
|
if ($descr =~ /Series\s*AP\s+(\d{2}\.\d{2})/){
|
||||||
@@ -135,7 +137,9 @@ sub fw_mac {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach my $bs (keys %$bs_mac){
|
foreach my $bs (keys %$bs_mac){
|
||||||
$fw_mac->{$bs} = $bs_mac->{$bs};
|
my $entry = $bs;
|
||||||
|
$entry =~ s/\.0$//;
|
||||||
|
$fw_mac->{$entry} = $bs_mac->{$bs};
|
||||||
}
|
}
|
||||||
|
|
||||||
return $fw_mac;
|
return $fw_mac;
|
||||||
@@ -149,7 +153,9 @@ sub fw_port {
|
|||||||
|
|
||||||
|
|
||||||
foreach my $bs (keys %$bs_port){
|
foreach my $bs (keys %$bs_port){
|
||||||
$fw_port->{$bs} = $bs_port->{$bs};
|
my $entry = $bs;
|
||||||
|
$entry =~ s/\.0$//;
|
||||||
|
$fw_port->{$entry} = $bs_port->{$bs};
|
||||||
}
|
}
|
||||||
|
|
||||||
return $fw_port;
|
return $fw_port;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# SNMP::Info::Layer3::C3550
|
# SNMP::Info::Layer3::C3550
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
# Copyright (c) 2003, Regents of the University of California
|
# Copyright (c) 2003, Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,16 +29,18 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer3::C3550;
|
package SNMP::Info::Layer3::C3550;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
use SNMP::Info::CiscoVTP;
|
||||||
|
use SNMP::Info::CiscoStack;
|
||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE $INIT/ ;
|
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE $INIT/ ;
|
||||||
@SNMP::Info::Layer3::C3550::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::C3550::ISA = qw/ SNMP::Info::Layer3 SNMP::Info::CiscoStack SNMP::Info::CiscoVTP Exporter/;
|
||||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
||||||
|
|
||||||
$DEBUG=0;
|
$DEBUG=0;
|
||||||
@@ -48,123 +51,38 @@ $INIT = 0;
|
|||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
'CISCO-STACK-MIB' => 'moduleType',
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
'CISCO-VTP-MIB' => 'vtpVlanIndex'
|
%SNMP::Info::CiscoStack::MIBS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoStack::GLOBALS,
|
||||||
'ports2' => 'ifNumber',
|
'ports2' => 'ifNumber',
|
||||||
# these are in CISCO-STACK-MIB
|
);
|
||||||
'serial' => 'chassisSerialNumberString',
|
|
||||||
'ps1_type' => 'chassisPs1Type',
|
|
||||||
'ps1_status' => 'chassisPs1Status',
|
|
||||||
'ps2_type' => 'chassisPs2Type',
|
|
||||||
'ps2_status' => 'chassisPs2Status',
|
|
||||||
'fan' => 'chassisFanStatus'
|
|
||||||
);
|
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
'i_type2' => 'ifType',
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
# CISCO-STACK-MIB::portEntry
|
%SNMP::Info::CiscoStack::FUNCS,
|
||||||
'p_name' => 'portName',
|
);
|
||||||
'p_type' => 'portType',
|
|
||||||
'p_status' => 'portOperStatus',
|
|
||||||
'p_status2' => 'portAdditionalStatus',
|
|
||||||
'p_speed' => 'portAdminSpeed',
|
|
||||||
'p_duplex' => 'portDuplex',
|
|
||||||
'p_port' => 'portIfIndex',
|
|
||||||
# CISCO-STACK-MIB::PortCpbEntry
|
|
||||||
'p_speed_admin' => 'portCpbSpeed',
|
|
||||||
'p_duplex_admin' => 'portCpbDuplex',
|
|
||||||
# CISCO-VTP-MIB::VtpVlanEntry
|
|
||||||
'v_state' => 'vtpVlanState',
|
|
||||||
'v_type' => 'vtpVlanType',
|
|
||||||
'v_name' => 'vtpVlanName',
|
|
||||||
'v_mtu' => 'vtpVlanMtu',
|
|
||||||
);
|
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
# Inherit all the built in munging
|
# Inherit all the built in munging
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
'm_ports_status' => \&munge_port_status,
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
'p_duplex_admin' => \&SNMP::Info::munge_bits,
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
%PORTSTAT = (1 => 'other',
|
# Pick and choose
|
||||||
2 => 'ok',
|
|
||||||
3 => 'minorFault',
|
|
||||||
4 => 'majorFault');
|
|
||||||
|
|
||||||
# Changes binary byte describing each port into ascii, and returns
|
*SNMP::Info::Layer3::C3550::serial = \&SNMP::Info::CiscoStack::serial;
|
||||||
# an ascii list separated by spaces.
|
*SNMP::Info::Layer3::C3550::interfaces = \&SNMP::Info::Layer3::interfaces;
|
||||||
sub munge_port_status {
|
*SNMP::Info::Layer3::C3550::i_duplex = \&SNMP::Info::CiscoStack::i_duplex;
|
||||||
my $status = shift;
|
*SNMP::Info::Layer3::C3550::i_duplex_admin = \&SNMP::Info::CiscoStack::i_duplex_admin;
|
||||||
my @vals = map($PORTSTAT{$_},unpack('C*',$status));
|
*SNMP::Info::Layer3::C3550::i_name = \&SNMP::Info::Layer3::i_name;
|
||||||
return join(' ',@vals);
|
*SNMP::Info::Layer3::C3550::i_type = \&SNMP::Info::CiscoStack::i_type;
|
||||||
}
|
|
||||||
|
|
||||||
# Overidden Methods
|
|
||||||
|
|
||||||
sub i_type {
|
|
||||||
my $c3550 = shift;
|
|
||||||
|
|
||||||
my $p_port = $c3550->p_port();
|
|
||||||
my $p_type = $c3550->p_type();
|
|
||||||
|
|
||||||
# Get more generic port types from IF-MIB
|
|
||||||
my $i_type = $c3550->i_type2();
|
|
||||||
|
|
||||||
# Now Override w/ port entries
|
|
||||||
foreach my $port (keys %$p_type) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
$i_type->{$iid} = $p_type->{$port};
|
|
||||||
}
|
|
||||||
|
|
||||||
return $i_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub i_duplex {
|
|
||||||
my $c3550 = shift;
|
|
||||||
|
|
||||||
my $p_port = $c3550->p_port();
|
|
||||||
my $p_duplex = $c3550->p_duplex();
|
|
||||||
|
|
||||||
my %i_duplex;
|
|
||||||
foreach my $port (keys %$p_duplex) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
$i_duplex{$iid} = $p_duplex->{$port};
|
|
||||||
}
|
|
||||||
return \%i_duplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub i_duplex_admin {
|
|
||||||
my $c3550 = shift;
|
|
||||||
|
|
||||||
my $p_port = $c3550->p_port();
|
|
||||||
my $p_duplex_admin = $c3550->p_duplex_admin();
|
|
||||||
|
|
||||||
my %i_duplex_admin;
|
|
||||||
foreach my $port (keys %$p_duplex_admin) {
|
|
||||||
my $iid = $p_port->{$port};
|
|
||||||
next unless defined $iid;
|
|
||||||
my $duplex = $p_duplex_admin->{$port};
|
|
||||||
next unless defined $duplex;
|
|
||||||
|
|
||||||
my $string = 'other';
|
|
||||||
# see CISCO-STACK-MIB for a description of the bits
|
|
||||||
$string = 'half' if ($duplex =~ /001$/ or $duplex =~ /0100.$/);
|
|
||||||
$string = 'full' if ($duplex =~ /010$/ or $duplex =~ /100.0$/);
|
|
||||||
# we'll call it auto if both full and half are turned on, or if the
|
|
||||||
# specifically 'auto' flag bit is set.
|
|
||||||
$string = 'auto'
|
|
||||||
if ($duplex =~ /1..$/ or $duplex =~ /110..$/ or $duplex =~ /..011$/);
|
|
||||||
|
|
||||||
$i_duplex_admin{$iid} = $string;
|
|
||||||
}
|
|
||||||
return \%i_duplex_admin;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'cisco';
|
return 'cisco';
|
||||||
@@ -173,10 +91,13 @@ sub vendor {
|
|||||||
sub model {
|
sub model {
|
||||||
my $c3550 = shift;
|
my $c3550 = shift;
|
||||||
my $id = $c3550->id();
|
my $id = $c3550->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id) || $id;
|
||||||
$model =~ s/^catalyst//;
|
$model =~ s/^catalyst//;
|
||||||
$model =~ s/(24|48)$//;
|
|
||||||
|
|
||||||
|
# turn 355048 into 3550-48
|
||||||
|
if ($model =~ /^(35\d\d)(\d\d[T]?)$/) {
|
||||||
|
$model = "$1-$2";
|
||||||
|
}
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,12 +109,17 @@ sub ports {
|
|||||||
|
|
||||||
my $id = $c3550->id();
|
my $id = $c3550->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
if ($model =~ /(24|48)$/) {
|
if ($model =~ /(12|24|48)[T]?$/) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
return $ports2;
|
return $ports2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cisco_comm_indexing {
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -240,15 +166,23 @@ a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item CISCO-STACK-MIB
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
=item CISCO-VTP-MIB
|
See SNMP::Info::Layer3 for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoVTP for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoStack for its own MIB requirements.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -258,30 +192,6 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $c3550->serial()
|
|
||||||
(B<chassisSerialNumberString>)
|
|
||||||
|
|
||||||
=item $c3550->model()
|
|
||||||
(B<chassisModel>)
|
|
||||||
|
|
||||||
=item $c3550->ps1_type()
|
|
||||||
(B<chassisPs1Type>)
|
|
||||||
|
|
||||||
=item $c3550->ps2_type()
|
|
||||||
(B<chassisPs2Type>)
|
|
||||||
|
|
||||||
=item $c3550->ps1_status()
|
|
||||||
(B<chassisPs1Status>)
|
|
||||||
|
|
||||||
=item $c3550->ps2_status()
|
|
||||||
(B<chassisPs2Status>)
|
|
||||||
|
|
||||||
=item $c3550->slots()
|
|
||||||
(B<chassisNumSlots>)
|
|
||||||
|
|
||||||
=item $c3550->fan()
|
|
||||||
(B<chassisFanStatus>)
|
|
||||||
|
|
||||||
=item $c3550->vendor()
|
=item $c3550->vendor()
|
||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
@@ -292,112 +202,29 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3 for details.
|
See documentation in SNMP::Info::Layer3 for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoStack for details.
|
||||||
|
|
||||||
=head1 TABLE ENTRIES
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=head2 Overrides
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $c3550->i_type()
|
|
||||||
|
|
||||||
Crosses p_port() with p_type() and returns the results.
|
|
||||||
|
|
||||||
Overrides with ifType if p_type() isn't available.
|
|
||||||
|
|
||||||
=item $c3550->i_name()
|
|
||||||
|
|
||||||
Crosses p_name with p_port and returns results.
|
|
||||||
|
|
||||||
=item $c3550->i_duplex()
|
|
||||||
|
|
||||||
Crosses p_duplex with p_port and returns results.
|
|
||||||
|
|
||||||
=item $c3550->i_duplex_admin()
|
|
||||||
|
|
||||||
Crosses p_duplex_admin with p_port.
|
|
||||||
|
|
||||||
Munges bit_string returned from p_duplex_admin to get duplex settings.
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Port Entry Table (CISCO-STACK-MIB::portTable)
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $c3550->p_name()
|
|
||||||
|
|
||||||
(B<portName>)
|
|
||||||
|
|
||||||
=item $c3550->p_type()
|
|
||||||
|
|
||||||
(B<portType>)
|
|
||||||
|
|
||||||
=item $c3550->p_status()
|
|
||||||
|
|
||||||
(B<portOperStatus>)
|
|
||||||
|
|
||||||
=item $c3550->p_status2()
|
|
||||||
|
|
||||||
(B<portAdditionalStatus>)
|
|
||||||
|
|
||||||
=item $c3550->p_speed()
|
|
||||||
|
|
||||||
(B<portAdminSpeed>)
|
|
||||||
|
|
||||||
=item $c3550->p_duplex()
|
|
||||||
|
|
||||||
(B<portDuplex>)
|
|
||||||
|
|
||||||
=item $c3550->p_port()
|
|
||||||
|
|
||||||
(B<portIfIndex>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Port Capability Table (CISCO-STACK-MIB::portCpbTable)
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $c3550->p_speed_admin()
|
|
||||||
|
|
||||||
(B<portCpbSpeed>)
|
|
||||||
|
|
||||||
=item $c3550->p_duplex_admin()
|
|
||||||
|
|
||||||
(B<portCpbDuplex>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 VLAN Entry Table
|
|
||||||
|
|
||||||
See ftp://ftp.cisco.com/pub/mibs/supportlists/wsc5000/wsc5000-communityIndexing.html
|
|
||||||
for a good treaty of how to connect to the VLANs
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $c3550->v_state()
|
|
||||||
|
|
||||||
(B<vtpVlanState>)
|
|
||||||
|
|
||||||
=item $c3550->v_type()
|
|
||||||
|
|
||||||
(B<vtpVlanType>)
|
|
||||||
|
|
||||||
=item $c3550->v_name()
|
|
||||||
|
|
||||||
(B<vtpVlanName>)
|
|
||||||
|
|
||||||
=item $c3550->v_mtu()
|
|
||||||
|
|
||||||
(B<vtpVlanMtu>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer3 for details.
|
See documentation in SNMP::Info::Layer3 for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoStack for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
209
Info/Layer3/C6500.pm
Normal file
209
Info/Layer3/C6500.pm
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
# SNMP::Info::Layer3::C6500
|
||||||
|
# Max Baker <max@warped.org>
|
||||||
|
#
|
||||||
|
# Copyright (c) 2003,2004 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 the Author, nor
|
||||||
|
# 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::C6500;
|
||||||
|
$VERSION = 0.8;
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
use SNMP::Info::CiscoVTP;
|
||||||
|
use SNMP::Info::CiscoStack;
|
||||||
|
|
||||||
|
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE $INIT/ ;
|
||||||
|
@SNMP::Info::Layer3::C6500::ISA = qw/ SNMP::Info::Layer3 SNMP::Info::CiscoStack SNMP::Info::CiscoVTP Exporter/;
|
||||||
|
@SNMP::Info::Layer3::C6500::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
$DEBUG=0;
|
||||||
|
|
||||||
|
# See SNMP::Info for the details of these data structures and
|
||||||
|
# the interworkings.
|
||||||
|
$INIT = 0;
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
|
%SNMP::Info::CiscoStack::MIBS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoStack::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
|
%SNMP::Info::CiscoStack::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
# Inherit all the built in munging
|
||||||
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
# Pick and choose
|
||||||
|
|
||||||
|
*SNMP::Info::Layer3::C6500::serial = \&SNMP::Info::CiscoStack::serial;
|
||||||
|
*SNMP::Info::Layer3::C6500::interfaces = \&SNMP::Info::Layer3::interfaces;
|
||||||
|
*SNMP::Info::Layer3::C6500::i_duplex = \&SNMP::Info::CiscoStack::i_duplex;
|
||||||
|
#*SNMP::Info::Layer3::C6500::i_duplex_admin = \&SNMP::Info::Layer3::i_duplex_admin;
|
||||||
|
*SNMP::Info::Layer3::C6500::i_name = \&SNMP::Info::Layer3::i_name;
|
||||||
|
*SNMP::Info::Layer3::C6500::i_type = \&SNMP::Info::CiscoStack::i_type;
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $c6500 = shift;
|
||||||
|
my $model1 = $c6500->model1();
|
||||||
|
return $model1 if defined $model1;
|
||||||
|
return $c6500->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'cisco';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cisco_comm_indexing {
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::C6500 - Perl5 Interface to Cisco Catalyst 6500 Layer 2/3 Switches running IOS and/or CatOS
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Max Baker (C<max@warped.org>)
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $c6500 = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
# These arguments are passed directly on to SNMP::Session
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $c6500->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Abstraction subclass for Cisco Catalyst 6500 Layer 2/3 Switches.
|
||||||
|
|
||||||
|
These devices run IOS but have some of the same charactersitics as the Catalyst WS-C family (5xxx).
|
||||||
|
For example, forwarding tables are held in VLANs, and extened interface information
|
||||||
|
is gleened from CISCO-SWITCH-MIB.
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not after determining
|
||||||
|
a more specific class using the method above.
|
||||||
|
|
||||||
|
my $c6500 = new SNMP::Info::Layer3::C6500(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See SNMP::Info::Layer3 for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoVTP for its own MIB requirements.
|
||||||
|
|
||||||
|
See SNMP::Info::CiscoStack for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $c6500->vendor()
|
||||||
|
|
||||||
|
Returns 'cisco'
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3 for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoStack for details.
|
||||||
|
|
||||||
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3 for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoVTP for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoStack for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::Layer3::Foundry - SNMP Interface to Foundry devices
|
# SNMP::Info::Layer3::Foundry - SNMP Interface to Foundry devices
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer3::Foundry;
|
package SNMP::Info::Layer3::Foundry;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# SNMP::Info::MAU - Media Access Unit - RFC2668
|
# SNMP::Info::MAU - Media Access Unit - RFC2668
|
||||||
# Max Baker <max@warped.org>
|
# Max Baker <max@warped.org>
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004 Max Baker changes from version 0.8 and beyond.
|
||||||
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -28,7 +30,7 @@
|
|||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::MAU;
|
package SNMP::Info::MAU;
|
||||||
$VERSION = 0.4;
|
$VERSION = 0.8;
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|||||||
7
MANIFEST
7
MANIFEST
@@ -4,12 +4,15 @@ Info.pm
|
|||||||
Info/Bridge.pm
|
Info/Bridge.pm
|
||||||
Info/CDP.pm
|
Info/CDP.pm
|
||||||
Info/CiscoStats.pm
|
Info/CiscoStats.pm
|
||||||
|
Info/CiscoStack.pm
|
||||||
|
Info/CiscoVTP.pm
|
||||||
Info/Entity.pm
|
Info/Entity.pm
|
||||||
Info/EtherLike.pm
|
Info/EtherLike.pm
|
||||||
Info/Layer1.pm
|
Info/Layer1.pm
|
||||||
Info/Layer1/Allied.pm
|
Info/Layer1/Allied.pm
|
||||||
Info/Layer1/Asante.pm
|
Info/Layer1/Asante.pm
|
||||||
Info/Layer2.pm
|
Info/Layer2.pm
|
||||||
|
Info/Layer2/Aironet.pm
|
||||||
Info/Layer2/Bay.pm
|
Info/Layer2/Bay.pm
|
||||||
Info/Layer2/C1900.pm
|
Info/Layer2/C1900.pm
|
||||||
Info/Layer2/C2900.pm
|
Info/Layer2/C2900.pm
|
||||||
@@ -18,9 +21,13 @@ Info/Layer2/HP.pm
|
|||||||
Info/Layer3.pm
|
Info/Layer3.pm
|
||||||
Info/Layer3/Aironet.pm
|
Info/Layer3/Aironet.pm
|
||||||
Info/Layer3/C3550.pm
|
Info/Layer3/C3550.pm
|
||||||
|
Info/Layer3/C6500.pm
|
||||||
Info/Layer3/Foundry.pm
|
Info/Layer3/Foundry.pm
|
||||||
Info/MAU.pm
|
Info/MAU.pm
|
||||||
MANIFEST
|
MANIFEST
|
||||||
Makefile.PL
|
Makefile.PL
|
||||||
README
|
README
|
||||||
t/prereq.t
|
t/prereq.t
|
||||||
|
t/test_class.pl
|
||||||
|
t/make_dev_matrix.pl
|
||||||
|
DeviceMatrix.txt
|
||||||
|
|||||||
@@ -21,5 +21,6 @@ WriteMakefile(
|
|||||||
|
|
||||||
sub MY::postamble { "
|
sub MY::postamble { "
|
||||||
.PHONY: readme
|
.PHONY: readme
|
||||||
readme:
|
readme: README
|
||||||
|
README: Info.pm
|
||||||
pod2text -l Info.pm > README" }
|
pod2text -l Info.pm > README" }
|
||||||
|
|||||||
217
README
217
README
@@ -5,14 +5,14 @@ NAME
|
|||||||
|
|
||||||
VERSION
|
VERSION
|
||||||
|
|
||||||
SNMP::Info - Version 0.4
|
SNMP::Info - Version 0.8
|
||||||
|
|
||||||
AUTHOR
|
AUTHOR
|
||||||
|
|
||||||
Max Baker ("max@warped.org")
|
Max Baker
|
||||||
|
|
||||||
SNMP::Info was created at UCSC for the netdisco project
|
SNMP::Info was created at UCSC for the netdisco project
|
||||||
(www.netdisco.org)
|
(www.netdisco.org) and is now maintained by Max Baker.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
|
||||||
@@ -64,6 +64,12 @@ SYNOPSIS
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SUPPORT
|
||||||
|
|
||||||
|
Please direct all support, help, and bug requests to the snmp-info-users
|
||||||
|
Mailing List at
|
||||||
|
<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info gives an object oriented interface to information obtained
|
SNMP::Info gives an object oriented interface to information obtained
|
||||||
@@ -148,12 +154,34 @@ DESCRIPTION
|
|||||||
BRIDGE-MIB
|
BRIDGE-MIB
|
||||||
SNMP-REPEATER-MIB
|
SNMP-REPEATER-MIB
|
||||||
STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
|
STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
|
||||||
|
|
||||||
by running
|
by running
|
||||||
|
|
||||||
mkdir -p /usr/local/share/snmp/mibs
|
mkdir -p /usr/local/share/snmp/mibs
|
||||||
cd /usr/local/share/snmp/mibs
|
cd /usr/local/share/snmp/mibs
|
||||||
tar xvfz /path/to/v1.tar.gz BRIDGE-MIB.my SNMP-REPEATER-MIB.my ESSWITCH-MIB.my
|
tar xvfz /path/to/v1.tar.gz BRIDGE-MIB.my SNMP-REPEATER-MIB.my ESSWITCH-MIB.my
|
||||||
|
|
||||||
|
Fix CISCO-TC-MIB
|
||||||
|
There is a problem with the Cisco file CISCO-TC.my which is
|
||||||
|
included from lots of other MIBs. Make the following changes if
|
||||||
|
you run into errors about "Unsigned32" in this file.
|
||||||
|
|
||||||
|
Edit /usr/local/share/snmp/mibs/CISCO-TC.my
|
||||||
|
|
||||||
|
Comment out line 192 that says "SMI Unsigned32" with two dashes.
|
||||||
|
|
||||||
|
-- SMI Unsigned32
|
||||||
|
|
||||||
|
Add "Unsigned32" to the imports after line 19:
|
||||||
|
|
||||||
|
IMPORTS
|
||||||
|
MODULE-IDENTITY,
|
||||||
|
Gauge32,
|
||||||
|
Integer32,
|
||||||
|
Counter64,
|
||||||
|
Unsigned32,
|
||||||
|
FROM SNMPv2-SMI
|
||||||
|
|
||||||
More Specific MIBs
|
More Specific MIBs
|
||||||
Some non-cisco subclasses will need MIBs other than the basic
|
Some non-cisco subclasses will need MIBs other than the basic
|
||||||
one available from Cisco.
|
one available from Cisco.
|
||||||
@@ -163,13 +191,14 @@ DESCRIPTION
|
|||||||
Design Goals
|
Design Goals
|
||||||
|
|
||||||
1. Use of textual MIB leaf identifier and enumerated values
|
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
|
For example SNMP::Info has an entry in its %GLOBALS hash for
|
||||||
``sysName'' instead of 1.3.6.1.2.1.1.5.
|
``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
|
For Example instead of looking up 1.3.6.1.2.1.2.2.1.3 and
|
||||||
getting back "23"
|
getting back 23
|
||||||
|
|
||||||
SNMP::Info will ask for "RFC1213-MIB::ifType" and will get back
|
SNMP::Info will ask for "RFC1213-MIB::ifType" and will get back
|
||||||
"ppp".
|
"ppp".
|
||||||
@@ -260,7 +289,7 @@ DESCRIPTION
|
|||||||
CatOS.
|
CatOS.
|
||||||
|
|
||||||
SNMP::Info::Layer2::C2900
|
SNMP::Info::Layer2::C2900
|
||||||
Subclass for Cisco Catalyst 2900 devices running IOS.
|
Subclass for Cisco Catalyst 2900 and 3500XL devices running IOS.
|
||||||
|
|
||||||
SNMP::Info::Layer2::Catalyst
|
SNMP::Info::Layer2::Catalyst
|
||||||
Subclass for Cisco Catalyst switches running CatOS. These
|
Subclass for Cisco Catalyst switches running CatOS. These
|
||||||
@@ -296,6 +325,11 @@ DESCRIPTION
|
|||||||
SNMP::Info::Layer3::C3550
|
SNMP::Info::Layer3::C3550
|
||||||
Subclass for Cisco Catalyst 3550 2/3 switches running IOS.
|
Subclass for Cisco Catalyst 3550 2/3 switches running IOS.
|
||||||
|
|
||||||
|
Thanks
|
||||||
|
|
||||||
|
Thanks for testing and coding help (in no particular order) to : Andy
|
||||||
|
Ford, Brian Wilson, Jean-Philippe Luiggi, D<>na Watanabe
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
|
|
||||||
Constructor
|
Constructor
|
||||||
@@ -387,13 +421,16 @@ USAGE
|
|||||||
Layer3 Support -> SNMP::Info::Layer3
|
Layer3 Support -> SNMP::Info::Layer3
|
||||||
Aironet (non IOS) -> SNMP::Info::Layer3::Aironet
|
Aironet (non IOS) -> SNMP::Info::Layer3::Aironet
|
||||||
Catalyst 3550 -> SNMP::Info::Layer3::C3550
|
Catalyst 3550 -> SNMP::Info::Layer3::C3550
|
||||||
|
Catalyst 6500 -> SNMP::Info::Layer3::C6500
|
||||||
Foundry -> SNMP::Info::Layer3::Foundry
|
Foundry -> SNMP::Info::Layer3::Foundry
|
||||||
Elsif Layer2 (no Layer3) -> SNMP::Info::Layer2
|
Elsif Layer2 (no Layer3) -> SNMP::Info::Layer2
|
||||||
Aironet (Cisco) AP1100 -> SNMP::Info::Layer2::Aironet
|
Aironet (Cisco) AP1100 -> SNMP::Info::Layer2::Aironet
|
||||||
Bay Networks -> SNMP::Info::Layer2::Bay
|
Bay Networks -> SNMP::Info::Layer2::Bay
|
||||||
Catalyst 1900 -> SNMP::Info::Layer2::C1900
|
Catalyst 1900 -> SNMP::Info::Layer2::C1900
|
||||||
Catalyst 2900XL (IOS) -> SNMP::Info::Layer2::C2900
|
Catalyst 2900XL/2950(IOS) -> SNMP::Info::Layer2::C2900
|
||||||
Catalyst WS-C (2926,5xxx,6xxx) -> SNMP::Info::Layer2::Catalyst
|
Catalyst 3500XL (3548) IOS -> SNMP::Info::Layer2::C2900
|
||||||
|
Catalyst 3550/3548 -> SNMP::Info::Layer3::C3550
|
||||||
|
Catalyst WS-C 2926,5xxx -> SNMP::Info::Layer2::Catalyst
|
||||||
HP Procurve -> SNMP::Info::Layer2::HP
|
HP Procurve -> SNMP::Info::Layer2::HP
|
||||||
Elsif Layer1 Support -> SNMP::Info::Layer1
|
Elsif Layer1 Support -> SNMP::Info::Layer1
|
||||||
Allied -> SNMP::Info::Layer1::Allied
|
Allied -> SNMP::Info::Layer1::Allied
|
||||||
@@ -477,12 +514,30 @@ USAGE
|
|||||||
Each of these methods returns a hash_reference to a hash keyed on the
|
Each of these methods returns a hash_reference to a hash keyed on the
|
||||||
interface index in SNMP.
|
interface index in SNMP.
|
||||||
|
|
||||||
Example : $info->interfaces() might return { '1.12' => 'FastEthernet/0',
|
Example : $info->interfaces() might return
|
||||||
'2.15' => 'FastEthernet/1', '9.99' => 'FastEthernet/2' }
|
|
||||||
|
{ '1.12' => 'FastEthernet/0',
|
||||||
|
'2.15' => 'FastEthernet/1',
|
||||||
|
'9.99' => 'FastEthernet/2'
|
||||||
|
}
|
||||||
|
|
||||||
The key is what you would see if you were to do an snmpwalk, and in some
|
The key is what you would see if you were to do an snmpwalk, and in some
|
||||||
cases changes between reboots of the network device.
|
cases changes between reboots of the network device.
|
||||||
|
|
||||||
|
Partial Table Fetches
|
||||||
|
|
||||||
|
If you want to get only a part of an SNMP table and you know the IID for
|
||||||
|
the part of the table that you want, you can specify it in the call:
|
||||||
|
|
||||||
|
$local_routes = $info->ipr_route('192.168.0');
|
||||||
|
|
||||||
|
This will only fetch entries in the table that start with 192.168.0,
|
||||||
|
which in this case are routes on the local network.
|
||||||
|
|
||||||
|
Remember that you must supply the partial IID (a numeric OID).
|
||||||
|
|
||||||
|
Partial table results are not cached.
|
||||||
|
|
||||||
Interface Information
|
Interface Information
|
||||||
|
|
||||||
$info->interfaces()
|
$info->interfaces()
|
||||||
@@ -638,6 +693,122 @@ USAGE
|
|||||||
|
|
||||||
(ipAdEntBcastAddr)
|
(ipAdEntBcastAddr)
|
||||||
|
|
||||||
|
IP Routing Table
|
||||||
|
|
||||||
|
$info->ipr_route()
|
||||||
|
The route in question. A value of 0.0.0.0 is the default gateway
|
||||||
|
route.
|
||||||
|
|
||||||
|
("ipRouteDest")
|
||||||
|
|
||||||
|
$info->ipr_if()
|
||||||
|
The interface (IID) that the route is on. Use interfaces() to map.
|
||||||
|
|
||||||
|
("ipRouteIfIndex")
|
||||||
|
|
||||||
|
$info->ipr_1()
|
||||||
|
Primary routing metric for this route.
|
||||||
|
|
||||||
|
("ipRouteMetric1")
|
||||||
|
|
||||||
|
$info->ipr_2()
|
||||||
|
If metrics are not used, they should be set to -1
|
||||||
|
|
||||||
|
("ipRouteMetric2")
|
||||||
|
|
||||||
|
$info->ipr_3()
|
||||||
|
("ipRouteMetric3")
|
||||||
|
|
||||||
|
$info->ipr_4()
|
||||||
|
("ipRouteMetric4")
|
||||||
|
|
||||||
|
$info->ipr_5()
|
||||||
|
("ipRouteMetric5")
|
||||||
|
|
||||||
|
$info->ipr_dest()
|
||||||
|
From RFC1213:
|
||||||
|
|
||||||
|
"The IP address of the next hop of this route.
|
||||||
|
(In the case of a route bound to an interface
|
||||||
|
which is realized via a broadcast media, the value
|
||||||
|
of this field is the agent's IP address on that
|
||||||
|
interface.)"
|
||||||
|
|
||||||
|
("ipRouteNextHop")
|
||||||
|
|
||||||
|
$info->ipr_type()
|
||||||
|
From RFC1213:
|
||||||
|
|
||||||
|
other(1), -- none of the following
|
||||||
|
invalid(2), -- an invalidated route
|
||||||
|
-- route to directly
|
||||||
|
direct(3), -- connected (sub-)network
|
||||||
|
-- route to a non-local
|
||||||
|
indirect(4) -- host/network/sub-network
|
||||||
|
|
||||||
|
"The type of route. Note that the values
|
||||||
|
direct(3) and indirect(4) refer to the notion of
|
||||||
|
direct and indirect routing in the IP
|
||||||
|
architecture.
|
||||||
|
|
||||||
|
Setting this object to the value invalid(2) has
|
||||||
|
the effect of invalidating the corresponding entry
|
||||||
|
in the ipRouteTable object. That is, it
|
||||||
|
effectively disassociates the destination
|
||||||
|
identified with said entry from the route
|
||||||
|
identified with said entry. It is an
|
||||||
|
implementation-specific matter as to whether the
|
||||||
|
agent removes an invalidated entry from the table.
|
||||||
|
Accordingly, management stations must be prepared
|
||||||
|
to receive tabular information from agents that
|
||||||
|
corresponds to entries not currently in use.
|
||||||
|
Proper interpretation of such entries requires
|
||||||
|
examination of the relevant ipRouteType object."
|
||||||
|
|
||||||
|
("ipRouteType")
|
||||||
|
|
||||||
|
$info->ipr_proto()
|
||||||
|
From RFC1213:
|
||||||
|
|
||||||
|
other(1), -- none of the following
|
||||||
|
-- non-protocol information,
|
||||||
|
-- e.g., manually configured
|
||||||
|
local(2), -- entries
|
||||||
|
-- set via a network
|
||||||
|
netmgmt(3), -- management protocol
|
||||||
|
-- obtained via ICMP,
|
||||||
|
icmp(4), -- e.g., Redirect
|
||||||
|
-- the remaining values are
|
||||||
|
-- all gateway routing
|
||||||
|
-- protocols
|
||||||
|
egp(5),
|
||||||
|
ggp(6),
|
||||||
|
hello(7),
|
||||||
|
rip(8),
|
||||||
|
is-is(9),
|
||||||
|
es-is(10),
|
||||||
|
ciscoIgrp(11),
|
||||||
|
bbnSpfIgp(12),
|
||||||
|
ospf(13),
|
||||||
|
bgp(14)
|
||||||
|
|
||||||
|
("ipRouteProto")
|
||||||
|
|
||||||
|
$info->ipr_age()
|
||||||
|
Seconds since route was last updated or validated.
|
||||||
|
|
||||||
|
("ipRouteAge")
|
||||||
|
|
||||||
|
$info->ipr_mask()
|
||||||
|
Subnet Mask of route. 0.0.0.0 for default gateway.
|
||||||
|
|
||||||
|
("ipRouteMask")
|
||||||
|
|
||||||
|
$info->ipr_info()
|
||||||
|
Reference to MIB definition specific to routing protocol.
|
||||||
|
|
||||||
|
("ipRouteInfo")
|
||||||
|
|
||||||
Setting data via SNMP
|
Setting data via SNMP
|
||||||
|
|
||||||
This section explains how to use SNMP::Info to do SNMP Set operations.
|
This section explains how to use SNMP::Info to do SNMP Set operations.
|
||||||
@@ -806,6 +977,7 @@ EXTENDING SNMP::INFO
|
|||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
1; # don't forget this line
|
||||||
----------------------- snip --------------------------------
|
----------------------- snip --------------------------------
|
||||||
|
|
||||||
Be sure and send the debugged version to snmp@warped.org to be included
|
Be sure and send the debugged version to snmp@warped.org to be included
|
||||||
@@ -847,27 +1019,36 @@ SNMP::INFO INTERNALS
|
|||||||
Makes human friendly speed ratings using %SPEED_MAP
|
Makes human friendly speed ratings using %SPEED_MAP
|
||||||
|
|
||||||
%SPEED_MAP = (
|
%SPEED_MAP = (
|
||||||
|
'56000' => '56 kbps',
|
||||||
'64000' => '64 kbps',
|
'64000' => '64 kbps',
|
||||||
'1500000' => '1.5 Mbps',
|
'1500000' => '1.5 Mbps',
|
||||||
|
'1536000' => 'T1',
|
||||||
'1544000' => 'T1',
|
'1544000' => 'T1',
|
||||||
'2000000' => '2.0 Mbps',
|
'2000000' => '2.0 Mbps',
|
||||||
'2048000' => '2.048 Mbps',
|
'2048000' => '2.048 Mbps',
|
||||||
|
'3072000' => 'Dual T1',
|
||||||
|
'3088000' => 'Dual T1',
|
||||||
'4000000' => '4.0 Mbps',
|
'4000000' => '4.0 Mbps',
|
||||||
'10000000' => '10 Mbps',
|
'10000000' => '10 Mbps',
|
||||||
'11000000' => '11 Mbps',
|
'11000000' => '11 Mbps',
|
||||||
'20000000' => '20 Mbps',
|
'20000000' => '20 Mbps',
|
||||||
'16000000' => '16 Mbps',
|
'16000000' => '16 Mbps',
|
||||||
'45000000' => 'DS3',
|
'44210000' => 'T3',
|
||||||
|
'44736000' => 'T3',
|
||||||
|
'45000000' => '45 Mbps',
|
||||||
'45045000' => 'DS3',
|
'45045000' => 'DS3',
|
||||||
'64000000' => '64 Mbps',
|
'64000000' => '64 Mbps',
|
||||||
'100000000' => '100 Mbps',
|
'100000000' => '100 Mbps',
|
||||||
'149760000' => 'OC-1'
|
'149760000' => 'ATM on OC-3',
|
||||||
'155000000' => 'OC-1'
|
'155000000' => 'OC-3',
|
||||||
|
'155519000' => 'OC-3',
|
||||||
|
'155520000' => 'OC-3',
|
||||||
'400000000' => '400 Mbps',
|
'400000000' => '400 Mbps',
|
||||||
|
'599040000' => 'ATM on OC-12',
|
||||||
'622000000' => 'OC-12',
|
'622000000' => 'OC-12',
|
||||||
'599040000' => 'OC-12',
|
'622080000' => 'OC-12',
|
||||||
'1000000000' => '1.0 Gbps',
|
'1000000000' => '1.0 Gbps',
|
||||||
);
|
)
|
||||||
|
|
||||||
munge_ip()
|
munge_ip()
|
||||||
Takes a binary IP and makes it dotted ASCII
|
Takes a binary IP and makes it dotted ASCII
|
||||||
@@ -992,6 +1173,7 @@ SNMP::INFO INTERNALS
|
|||||||
3. Method is in %FUNCS
|
3. Method is in %FUNCS
|
||||||
4. Run $info->_load_attr(method) if not cached
|
4. Run $info->_load_attr(method) if not cached
|
||||||
5. Return $info->_show_attr(method).
|
5. Return $info->_show_attr(method).
|
||||||
|
|
||||||
Override any dynamic method listed in one of these hashes by creating a
|
Override any dynamic method listed in one of these hashes by creating a
|
||||||
subroutine with the same name.
|
subroutine with the same name.
|
||||||
|
|
||||||
@@ -1000,8 +1182,11 @@ SNMP::INFO INTERNALS
|
|||||||
|
|
||||||
COPYRIGHT AND LICENCE
|
COPYRIGHT AND LICENCE
|
||||||
|
|
||||||
Copyright (c) 2002-3, Regents of the University of California All rights
|
Changes from SNMP::Info Version 0.7 and on are: Copyright (c)2003, 2004
|
||||||
reserved.
|
Max Baker - All rights reserved.
|
||||||
|
|
||||||
|
Original Code is: Copyright (c) 2002-3, Regents of the University of
|
||||||
|
California All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
|
|||||||
321
t/make_dev_matrix.pl
Executable file
321
t/make_dev_matrix.pl
Executable file
@@ -0,0 +1,321 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
$DevMatrix = '../DeviceMatrix.txt';
|
||||||
|
$DevHTML = 'DeviceMatrix.html';
|
||||||
|
$DevPNG = 'DeviceMatrix.png';
|
||||||
|
$Attributes= {};
|
||||||
|
|
||||||
|
# Parse Data File
|
||||||
|
$matrix = parse_data($DevMatrix);
|
||||||
|
|
||||||
|
# Graph it for fun
|
||||||
|
eval "use GraphViz::Data::Structure;";
|
||||||
|
if ($@) {
|
||||||
|
print "GraphViz::Data::Structure not installed. $@\n";
|
||||||
|
} else {
|
||||||
|
my %graph = ();
|
||||||
|
foreach my $vendor (sort sort_nocase keys %$matrix){
|
||||||
|
$graph{$vendor} = {};
|
||||||
|
foreach my $family (sort sort_nocase keys %{$matrix->{$vendor}->{families}} ){
|
||||||
|
my @models;
|
||||||
|
foreach my $mod (keys %{$matrix->{$vendor}->{families}->{$family}->{models}}){
|
||||||
|
push(@models,split(/\s*,\s*/,$mod));
|
||||||
|
}
|
||||||
|
if (scalar @models){
|
||||||
|
$graph{$vendor}->{$family}=\@models;
|
||||||
|
} else {
|
||||||
|
$graph{$vendor}->{$family}=[];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my $now = scalar localtime;
|
||||||
|
my $gvds = GraphViz::Data::Structure->new(\%graph,Orientation=>'vertical',
|
||||||
|
Colors=> 'Deep',
|
||||||
|
graph => {label=>"SNMP::Info and Netdisco Supported Devices \n $now",'fontpath'=>'/usr/local/netdisco','fontname'=>'lucon',concentrate=>'true','overlap'=>'false',spline=>'true',bgcolor=>'wheat'},
|
||||||
|
node => {fontname=>'lucon'},
|
||||||
|
);
|
||||||
|
$gvds->graph()->as_png($DevPNG);
|
||||||
|
}
|
||||||
|
|
||||||
|
open (HTML, "> $DevHTML") or die "Can't open $DevHTML. $!\n";
|
||||||
|
$old_fh = select(HTML);
|
||||||
|
&html_head;
|
||||||
|
print_vendors($matrix);
|
||||||
|
foreach my $vendor (sort sort_nocase keys %$matrix){
|
||||||
|
print "<A NAME=\"$vendor\"><SPAN CLASS=\"vendor\"><B>$vendor</B></SPAN></A>\n";
|
||||||
|
print "<DL>\n";
|
||||||
|
|
||||||
|
my $vendor_defaults = $matrix->{$vendor}->{defaults};
|
||||||
|
print_notes($vendor_defaults,1);
|
||||||
|
|
||||||
|
my $families = $matrix->{$vendor}->{families};
|
||||||
|
foreach my $family (sort sort_nocase keys %$families ) {
|
||||||
|
print "<DT>$family Family\n";
|
||||||
|
|
||||||
|
my $family_defaults = $families->{$family}->{defaults};
|
||||||
|
print_notes($family_defaults,2);
|
||||||
|
|
||||||
|
my $models = $families->{$family}->{models};
|
||||||
|
foreach my $model (sort sort_nocase keys %$models ){
|
||||||
|
my $model_defaults = $models->{$model}->{defaults};
|
||||||
|
print "<DD>$model\n";
|
||||||
|
print "<DL>\n";
|
||||||
|
print_notes($model_defaults,3);
|
||||||
|
|
||||||
|
print "<DT><DD><TABLE BORDER=1>\n";
|
||||||
|
print_headers();
|
||||||
|
print "<TR>\n";
|
||||||
|
foreach my $a (sort sort_nocase keys %$Attributes) {
|
||||||
|
my $val;
|
||||||
|
next if $a eq 'note';
|
||||||
|
$val = ['-'];
|
||||||
|
$class = 'none';
|
||||||
|
if (defined $model_defaults->{$a}) {
|
||||||
|
$val = $model_defaults->{$a};
|
||||||
|
$class = 'model';
|
||||||
|
} elsif (defined $family_defaults->{$a}){
|
||||||
|
$val = $family_defaults->{$a};
|
||||||
|
$class = 'family';
|
||||||
|
} elsif (defined $vendor_defaults->{$a}){
|
||||||
|
$val = $vendor_defaults->{$a};
|
||||||
|
$class = 'vendor';
|
||||||
|
}
|
||||||
|
print " <TD CLASS='$class'>",join("<BR>\n",@$val),"</TD>\n";
|
||||||
|
}
|
||||||
|
print "</TR></TABLE>\n";
|
||||||
|
print "</DL>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</DL>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
&html_tail;
|
||||||
|
|
||||||
|
select ($old_fh);
|
||||||
|
close (HTML) or die "Can't write $DevHTML. $!\n";
|
||||||
|
|
||||||
|
# Data Structures
|
||||||
|
|
||||||
|
# Matrix =
|
||||||
|
# ( vendor => { families => { family => family_hash },
|
||||||
|
# defaults => { cmd => [values] },
|
||||||
|
# }
|
||||||
|
# )
|
||||||
|
|
||||||
|
# Family Hash
|
||||||
|
# ( models => { model => model_hash },
|
||||||
|
# defaults => { cmd => [values] }
|
||||||
|
# )
|
||||||
|
|
||||||
|
# Model Hash
|
||||||
|
# ( defaults => { cmd => [values] } )
|
||||||
|
sub parse_data {
|
||||||
|
my $file = shift;
|
||||||
|
my %ignore = map { $_ => 1 } @_;
|
||||||
|
my $Matrix;
|
||||||
|
|
||||||
|
my @Lines;
|
||||||
|
open (DM, "< $file") or die "Can't open $file. $!\n";
|
||||||
|
{
|
||||||
|
@Lines = <DM>;
|
||||||
|
}
|
||||||
|
close (DM);
|
||||||
|
|
||||||
|
my ($device,$family,$vendor,$class);
|
||||||
|
foreach my $line (@Lines){
|
||||||
|
chomp($line);
|
||||||
|
# Comments
|
||||||
|
$line =~ s/#.*//;
|
||||||
|
|
||||||
|
# Blank Lines
|
||||||
|
next if $line =~ /^\s*$/;
|
||||||
|
|
||||||
|
# Trim whitespace
|
||||||
|
$line =~ s/^\s+//;
|
||||||
|
$line =~ s/\s+$//;
|
||||||
|
|
||||||
|
my ($cmd,$value);
|
||||||
|
if ($line =~ /^([a-z-_]+)\s*:\s*(.*)$/) {
|
||||||
|
$cmd = $1; $value = $2;
|
||||||
|
} else {
|
||||||
|
print "What do i do with this line : $line \n";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists $ignore{$cmd}){
|
||||||
|
print "Ignoring $cmd\n";
|
||||||
|
}
|
||||||
|
# Set Class {vendor,family,device}
|
||||||
|
if ($cmd eq 'device-vendor'){
|
||||||
|
$vendor = $value;
|
||||||
|
$family = $model = undef;
|
||||||
|
$Matrix->{$vendor} = {} unless defined $Matrix->{$vendor};
|
||||||
|
$class = $Matrix->{$vendor};
|
||||||
|
$class->{defaults}->{type}='vendor';
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cmd eq 'device-family'){
|
||||||
|
$family = $value;
|
||||||
|
$model = undef;
|
||||||
|
print "$family has no vendor.\n" unless defined $vendor;
|
||||||
|
$Matrix->{$vendor}->{families}->{$family} = {}
|
||||||
|
unless defined $Matrix->{$vendor}->{families}->{$family};
|
||||||
|
$class = $Matrix->{$vendor}->{families}->{$family};
|
||||||
|
$class->{defaults}->{type}='family';
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cmd eq 'device') {
|
||||||
|
$model = $value;
|
||||||
|
print "$model has no family.\n" unless defined $family;
|
||||||
|
print "$model has no vendor.\n" unless defined $vendor;
|
||||||
|
$Matrix->{$vendor}->{families}->{$family}->{models}->{$model} = {}
|
||||||
|
unless defined $Matrix->{$vendor}->{families}->{$family}->{models}->{$model};
|
||||||
|
$class = $Matrix->{$vendor}->{families}->{$family}->{models}->{$model};
|
||||||
|
$class->{defaults}->{type}='device';
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Store attribute
|
||||||
|
push (@{$class->{defaults}->{$cmd}} , $value);
|
||||||
|
$Attributes->{$cmd}++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $Matrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub sort_nocase {
|
||||||
|
return lc($a) cmp lc($b);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_notes {
|
||||||
|
my $defaults = shift;
|
||||||
|
my $level = shift;
|
||||||
|
my $notes = $defaults->{note} || [];
|
||||||
|
foreach my $note (@$notes){
|
||||||
|
if ($note =~ s/^!//){
|
||||||
|
$note = '<SPAN CLASS="note">' . $note . '</SPAN>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (scalar @$notes){
|
||||||
|
print "<DT>\n";
|
||||||
|
my $print_note = join("\n<LI>",@$notes);
|
||||||
|
print "<UL TYPE='square'><LI>$print_note</UL>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_vendors {
|
||||||
|
my $matrix=shift;
|
||||||
|
print "<h1>Device Vendors</h1>\n";
|
||||||
|
foreach my $vendor (sort sort_nocase keys %$matrix){
|
||||||
|
print "[<A HREF=\"#$vendor\">$vendor</A>]\n";
|
||||||
|
}
|
||||||
|
print "<HR>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub html_head {
|
||||||
|
print <<"end_head";
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
<TITLE>SNMP::Info - Device Compatibility Matrix</TITLE>
|
||||||
|
<STYLE TYPE="text/css" MEDIA="screen">
|
||||||
|
<!--
|
||||||
|
BODY { font-family:arial,helvetica,sans-serif; font-size:12pt; }
|
||||||
|
TD { font-family:arial,helvetica,sans-serif; font-size:10pt; }
|
||||||
|
TH { font-family:arial,helvetica,sans-serif; font-size:10pt; background:#F0F0F0; }
|
||||||
|
H1 { font-family:arial,helvetica,sans-serif; font-size:14pt; }
|
||||||
|
.vendor { font-size:12pt; color:#777777; }
|
||||||
|
.family { font-size:12pt; color:blue; }
|
||||||
|
.model { font-size:12pt; color:red; }
|
||||||
|
.note { color:red; }
|
||||||
|
//-->
|
||||||
|
</STYLE>
|
||||||
|
</HEAD>
|
||||||
|
<BODY>
|
||||||
|
<h1>SNMP::Info - Device Compatibility Matrix</h1>
|
||||||
|
<P>
|
||||||
|
end_head
|
||||||
|
}
|
||||||
|
|
||||||
|
sub html_tail {
|
||||||
|
print <<'end_tail';
|
||||||
|
<HR>
|
||||||
|
<h1>Color Key</h1>
|
||||||
|
[<SPAN CLASS="model">Model Attribute</SPAN>]
|
||||||
|
[<SPAN CLASS="family">Family Attribute</SPAN>]
|
||||||
|
[<SPAN CLASS="vendor">Vendor Attribute</SPAN>]
|
||||||
|
<h1>Attribute Key</h1>
|
||||||
|
A value of <B>-</B> signifies the information is not specified and can
|
||||||
|
be assumed working.
|
||||||
|
<TABLE BORDER=1>
|
||||||
|
<TR>
|
||||||
|
<TD>Arpnip</TD>
|
||||||
|
<TD>Ability to collect ARP tables for MAC to IP translation.</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD>CDP</TD>
|
||||||
|
<TD>Cisco Discovery Protocol usable.
|
||||||
|
<UL>
|
||||||
|
<LI><tt>Yes</tt> - Has CDP information through CISCO-CDP-MIB
|
||||||
|
<LI><tt>Proprietary</tt> means the device has its own L2 Discovery Protocol.
|
||||||
|
</UL>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD>Class</TD>
|
||||||
|
<TD>SNMP::Info Class the the device currently uses. Devices using more generic
|
||||||
|
interfaces like <tt>Layer2</tt> or <tt>Layer3</tt> may eventually get their
|
||||||
|
own subclass.
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD>Duplex</TD>
|
||||||
|
<TD>Ability to cull duplex settings from device.<BR>
|
||||||
|
<UL>
|
||||||
|
<LI><tt>no</tt> - Can't recover current or admin setting.
|
||||||
|
<LI><tt>link</tt> - Can get current setting only.
|
||||||
|
<LI><tt>both</tt> - Can get admin and link setting.
|
||||||
|
</UL>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD>Macsuck</TD>
|
||||||
|
<TD>Ability to get CAM tables for MAC to switch port mapping.<BR>
|
||||||
|
<UL>
|
||||||
|
<LI><TT>no</TT> - Have not found an SNMP method to get data yet.
|
||||||
|
<LI><TT>yes</TT> - Can get through normal SWITCH-MIB method.
|
||||||
|
<LI><TT>vlan</TT> - Have to re-connect to each VLAN and then fetch with normal
|
||||||
|
method.
|
||||||
|
</UL>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD>Portmac</TD>
|
||||||
|
<TD>Whether the device will list the MAC address of the switch port on each
|
||||||
|
switch port when doing a Macsuck.
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD>Ver</TD>
|
||||||
|
<TD>SNMP Protocol Version the device has to use.</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
||||||
|
end_tail
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_headers {
|
||||||
|
print "<TR>\n";
|
||||||
|
foreach my $a (sort sort_nocase keys %$Attributes) {
|
||||||
|
next if $a eq 'note';
|
||||||
|
print " <TH>$a</TH>\n";
|
||||||
|
}
|
||||||
|
print "</TR>\n";
|
||||||
|
}
|
||||||
149
t/test_class.pl
Executable file
149
t/test_class.pl
Executable file
@@ -0,0 +1,149 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
#
|
||||||
|
# test_class.pl
|
||||||
|
#
|
||||||
|
# Test a device class in SNMP::Info against a device.
|
||||||
|
#
|
||||||
|
# Max Baker <max@warped.org>
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
|
||||||
|
use lib '/usr/local/netdisco';
|
||||||
|
use SNMP::Info;
|
||||||
|
use Getopt::Long;
|
||||||
|
use strict;
|
||||||
|
use vars qw/$Class $Dev $Comm $Ver/;
|
||||||
|
|
||||||
|
# Default Values
|
||||||
|
$Class = '';
|
||||||
|
$Dev = '';
|
||||||
|
$Comm = '';
|
||||||
|
$Ver = 2;
|
||||||
|
|
||||||
|
GetOptions ('c|class=s' => \$Class,
|
||||||
|
'd|dev=s' => \$Dev,
|
||||||
|
's|comm=s' => \$Comm,
|
||||||
|
'v|ver=i' => \$Ver,
|
||||||
|
'h|help' => \&usage,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
&usage unless ($Dev and $Comm);
|
||||||
|
|
||||||
|
$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 $dev = new $Class( 'AutoSpecify' => 0,
|
||||||
|
'AutoVerBack' => 0,
|
||||||
|
'Version' => $Ver,
|
||||||
|
'Debug' => 0,
|
||||||
|
'DestHost' => $Dev,
|
||||||
|
'Community' => $Comm
|
||||||
|
) or die "\n";
|
||||||
|
|
||||||
|
print "Connected to $Dev.\n";
|
||||||
|
|
||||||
|
my $layers = $dev->layers();
|
||||||
|
|
||||||
|
unless (defined $layers){
|
||||||
|
warn "Are you sure you got the right community string and version?\nCan't fetch layers.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Fetching global info...\n\n";
|
||||||
|
|
||||||
|
my @globals = qw/description uptime contact name location layers ports mac serial
|
||||||
|
ps1_type ps2_type ps1_status ps2_status fan slots vendor os os_ver/;
|
||||||
|
|
||||||
|
foreach my $global (@globals){
|
||||||
|
test_global($dev,$global);
|
||||||
|
}
|
||||||
|
|
||||||
|
print "\nFetching interface info...\n\n";
|
||||||
|
|
||||||
|
my @fns = qw/interfaces i_type i_ignore i_description i_mtu i_speed i_mac i_up
|
||||||
|
i_up_admin i_name i_duplex i_duplex_admin i_stp_state/;
|
||||||
|
|
||||||
|
foreach my $fn (@fns){
|
||||||
|
test_fn($dev,$fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
print "\nTesting Misc...\n\n";
|
||||||
|
my @misc = qw/v_name v_port/;
|
||||||
|
foreach my $fn (@misc){
|
||||||
|
test_fn($dev,$fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------
|
||||||
|
sub test_global {
|
||||||
|
my $dev = shift;
|
||||||
|
my $method = shift;
|
||||||
|
|
||||||
|
my $value;
|
||||||
|
eval {
|
||||||
|
$value = $dev->$method();
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($@){
|
||||||
|
my $err = $@;
|
||||||
|
$err =~ s/[[:cntrl:]]+/ /g;
|
||||||
|
printf "%-20s Blew up. $err\n",$method;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unless (defined $value){
|
||||||
|
printf "%-20s Does not exist.\n",$method;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
$value =~ s/[[:cntrl:]]+/ /g;
|
||||||
|
if (length $value > 60) {
|
||||||
|
$value = substr($value,0,60);
|
||||||
|
$value .= '...';
|
||||||
|
}
|
||||||
|
printf "%-20s %s \n",$method,$value;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_fn {
|
||||||
|
my $dev = shift;
|
||||||
|
my $method = shift;
|
||||||
|
|
||||||
|
my $results;
|
||||||
|
|
||||||
|
eval {
|
||||||
|
$results = $dev->$method();
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($@){
|
||||||
|
my $err = $@;
|
||||||
|
$err =~ s/\n/ /g;
|
||||||
|
printf "%-20s Blew up. $err\n",$method;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unless (defined $results and scalar keys %$results) {
|
||||||
|
printf "%-20s Empty Results.\n",$method;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf "%-20s %d rows.\n",$method, scalar(keys %$results);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub usage {
|
||||||
|
print << "end_usage";
|
||||||
|
|
||||||
|
test_class - Test a device against an SNMP::Info class
|
||||||
|
-c --class Layer2::Catalyst
|
||||||
|
-d --dev myswitch
|
||||||
|
-s --comm public
|
||||||
|
-v --ver 2
|
||||||
|
|
||||||
|
end_usage
|
||||||
|
exit;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user