Compare commits
156 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0887fbea7 | ||
|
|
e5ebda1b1e | ||
|
|
8d1681dbfc | ||
|
|
7221797826 | ||
|
|
f2fdbb077c | ||
|
|
a6fdb107b4 | ||
|
|
7f31038462 | ||
|
|
5fb7c78619 | ||
|
|
603345205a | ||
|
|
bd85ebc8d6 | ||
|
|
2aca6d9300 | ||
|
|
4919cb0f69 | ||
|
|
d134c342e8 | ||
|
|
b1c7e78d12 | ||
|
|
0a0766afbd | ||
|
|
2d39911cba | ||
|
|
3bf60002f4 | ||
|
|
42db01335e | ||
|
|
752e1c632c | ||
|
|
892d2014ca | ||
|
|
1fdc486cd5 | ||
|
|
9e7f7f734e | ||
|
|
e311f8a5c6 | ||
|
|
82755ab8db | ||
|
|
62823e3d83 | ||
|
|
66077c9662 | ||
|
|
74e129154b | ||
|
|
75880d9134 | ||
|
|
245fe93be4 | ||
|
|
54a0baa2fa | ||
|
|
4e18ccc9e2 | ||
|
|
9ed5a187a9 | ||
|
|
a636ba6117 | ||
|
|
facdf0aafe | ||
|
|
75dcf74148 | ||
|
|
e252dac59c | ||
|
|
9d384f2bc2 | ||
|
|
cc9a1c9f47 | ||
|
|
b43eafd09a | ||
|
|
141470fdf4 | ||
|
|
2e18464635 | ||
|
|
87a287e0c9 | ||
|
|
a38eafbf56 | ||
|
|
81c7203642 | ||
|
|
c515a5e4a1 | ||
|
|
02e6807e44 | ||
|
|
90bb0ef071 | ||
|
|
209988cf9e | ||
|
|
da130926a9 | ||
|
|
4c51c29428 | ||
|
|
2301d2e60a | ||
|
|
53a5b5aa0a | ||
|
|
d13adfee80 | ||
|
|
9752bf2878 | ||
|
|
9949eeb389 | ||
|
|
aceed9cc52 | ||
|
|
0371ca35d6 | ||
|
|
ce0a350ef2 | ||
|
|
3b58ba8678 | ||
|
|
a69b45d849 | ||
|
|
ad0a1044b9 | ||
|
|
5336ec2db2 | ||
|
|
e20cd6dd02 | ||
|
|
66f16f6617 | ||
|
|
0755487e02 | ||
|
|
afeb37ae5e | ||
|
|
cc05fb927f | ||
|
|
facdf5b7a7 | ||
|
|
66bedd4d54 | ||
|
|
3a3c1efe46 | ||
|
|
1a069c2b52 | ||
|
|
f7de9ffbc6 | ||
|
|
3c6cfa8ecf | ||
|
|
585d01895b | ||
|
|
63cac2a3a8 | ||
|
|
0623fbfdf1 | ||
|
|
0c711269ae | ||
|
|
f676d27a3b | ||
|
|
64167df588 | ||
|
|
398f3ee74b | ||
|
|
125f02b8a2 | ||
|
|
eeeabeec94 | ||
|
|
5fe0ebaeda | ||
|
|
fda59f51f7 | ||
|
|
e8de74c6a5 | ||
|
|
da6716b107 | ||
|
|
62267f4e8e | ||
|
|
fd1c91edac | ||
|
|
a0b2010994 | ||
|
|
bda796ae98 | ||
|
|
8b3b03b312 | ||
|
|
cbc756a3f8 | ||
|
|
9af7a7661c | ||
|
|
eab89e4736 | ||
|
|
8391cee4f3 | ||
|
|
fcd0e30d64 | ||
|
|
4a454c9431 | ||
|
|
cd751071e1 | ||
|
|
c921e8b35c | ||
|
|
60d5591401 | ||
|
|
98e8e57747 | ||
|
|
f6a4f937ee | ||
|
|
1e5eda927c | ||
|
|
c6eb73bc7b | ||
|
|
c49d8ab921 | ||
|
|
27b310ee68 | ||
|
|
f6d0fb1d7e | ||
|
|
ddc5fd8c96 | ||
|
|
26b13fbcd4 | ||
|
|
91b98085f6 | ||
|
|
1c948d6e45 | ||
|
|
76cbb05f19 | ||
|
|
e7fcd98107 | ||
|
|
090d94191b | ||
|
|
2c3a6a3c6e | ||
|
|
814083e2fa | ||
|
|
7621b30bc2 | ||
|
|
9e2e55dcb3 | ||
|
|
f8a1d5bc7a | ||
|
|
1a65be101e | ||
|
|
4c5d0a5695 | ||
|
|
f8b3381d16 | ||
|
|
8a41e5063a | ||
|
|
24a84cdc25 | ||
|
|
25354e1f3e | ||
|
|
2025044952 | ||
|
|
d00dcdad85 | ||
|
|
fc069c13f5 | ||
|
|
69430f4a21 | ||
|
|
a83855157b | ||
|
|
5ce80ba4ee | ||
|
|
16e96d9fcf | ||
|
|
ac753c5970 | ||
|
|
313e187399 | ||
|
|
f5aaee6c89 | ||
|
|
c8b4f8f4fd | ||
|
|
6113dd3b98 | ||
|
|
e21f22bb3b | ||
|
|
bb4578dea5 | ||
|
|
e83ca6fbe3 | ||
|
|
ae9963cf85 | ||
|
|
650aef9c2d | ||
|
|
397b14da22 | ||
|
|
0f00322e03 | ||
|
|
e2b688077e | ||
|
|
4afbd37cbd | ||
|
|
40d3340ac5 | ||
|
|
9bb71d3df7 | ||
|
|
4860447b06 | ||
|
|
445b3f19a3 | ||
|
|
32efd26999 | ||
|
|
f2f95150bd | ||
|
|
f210bf8812 | ||
|
|
c30e1a2446 | ||
|
|
10392fc08e | ||
|
|
df10473fb5 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,4 +9,4 @@ Makefile*
|
||||
Build
|
||||
_build
|
||||
blib
|
||||
README
|
||||
cover_db
|
||||
|
||||
@@ -12,9 +12,7 @@ before_install:
|
||||
- mkdir ~/netdisco-mibs
|
||||
- cd ~/netdisco-mibs
|
||||
install:
|
||||
- >
|
||||
curl -sL https://downloads.sourceforge.net/project/netdisco/netdisco-mibs/latest-snapshot/netdisco-mibs-snapshot.tar.gz |
|
||||
tar --strip-components=1 -zxf -
|
||||
- curl -sL https://github.com/netdisco/netdisco-mibs/releases/download/4.009/netdisco-mibs.tar.gz | tar --strip-components=1 -zxf -
|
||||
- cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP::MAXTC
|
||||
before_script:
|
||||
- 'cd ${TRAVIS_BUILD_DIR}'
|
||||
|
||||
7
Build.PL
7
Build.PL
@@ -27,6 +27,13 @@ Module::Build->new(
|
||||
test_requires => {
|
||||
'Test::More' => '0.88',
|
||||
'Test::Distribution' => '0',
|
||||
'Test::Class::Most' => '0',
|
||||
'Test::MockObject::Extends' => '0',
|
||||
'File::Find' => '0',
|
||||
'Path::Class' => '0',
|
||||
'File::Slurper' => '0',
|
||||
'Test::Exception' => '0.43',
|
||||
'Class::Inspector' => '0',
|
||||
},
|
||||
# script_files => [
|
||||
# ],
|
||||
|
||||
180
Changes
180
Changes
@@ -1,3 +1,183 @@
|
||||
Version 3.57 (2018-04-26)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* #145 Patch for Huawei (robwwd)
|
||||
* #228 Huawei aggregate link support
|
||||
* POE and duplex admin support added to L3::Huawei
|
||||
* Significant performance improvement validating AUTOLOAD methods
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* IEEE802dot3ad portlist is indexed with a dot1dBasePort, cross reference
|
||||
with dot1dBasePortIfIndex
|
||||
* Fix for macsuck in Cisco classes introduced in 3.55 caused by inheritance
|
||||
issue in CiscoStack
|
||||
|
||||
Version 3.56 (2018-04-22)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix table methods when defined as an OID which will not completely
|
||||
translate to a fully qualified textual leaf
|
||||
|
||||
Version 3.55 (2018-04-19)
|
||||
|
||||
[NEW FEATURES]
|
||||
* #260 Oneaccess (robwwd)
|
||||
* #259 Add ERX (Old Juniper E-Series JunOSe) Support (robwwd)
|
||||
* #258 Add support for Arbor devices (robwwd)
|
||||
* #253 Nexans switch support (paecker)
|
||||
* #142 Sixnet Switch Support
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* #117 Recognition for HP Blade switches (J R Binks)
|
||||
* #196 Support for powerconnect 8164F
|
||||
* Refactor Layer3::Dell for better support of newer models
|
||||
* Increase capture of i_vlan on router interfaces in L3::Cisco
|
||||
* Factor out logic to determine serial number from ENTITY-MIB in Layer2 and
|
||||
Layer3 to new method entity_derived_serial in Entity class and added new
|
||||
method entity_derived_os_ver in Entity class to determine OS version
|
||||
in a similar manner
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* #67 Juniper EX4300 Missing/Wrong information
|
||||
* #61 ZyXEL (X)GS1900 family MIB - Fix loop in layers method
|
||||
* Fix ISA in AMAP and EDP classes
|
||||
* Add missing MIB in L2::Trapeze, L2::NWSS2300, and L3::Dell
|
||||
* Fix gigabit logic in i_duplex_admin() of CiscoStack
|
||||
* Prevent potential undefined warnings in i_speed_admin() of L2::C2900 and
|
||||
ports() of L3::C3550
|
||||
* Correct validation and IID/key used in mau_set_i_speed_admin() and
|
||||
mau_set_i_duplex_admin() of MAU
|
||||
* Correct typo in MIB leaf names in L3::Aironet
|
||||
* Don't use MIB leafs that are not-accessible according to MIB
|
||||
NOTE: Fixing this logic now results in methods on MIB leafs specified as
|
||||
not-accessible failing validation in _validate_autoload_method()
|
||||
|
||||
Version 3.54 (2018-04-01)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
* #141 Avocent ACS files for correct discovery in Netdisco
|
||||
* Add support for Avocent ACS 5K/6K/8K terminal servers in Layer1::Cyclades
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* #215 Nokia/Alcatel-Lucent 7705 LLDP
|
||||
* #220 Alcatel-Lucent / Nokia SR 7750 missing neighbors
|
||||
* Improve Layer3::Timetra model detection
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix logic in Layer1::Asante i_up() method
|
||||
* Fix MIB leaf typo in IPv6
|
||||
* Don't use MIB leafs that are not-accessible according to MIB
|
||||
* Fix logic for determining if MIB leaf supports set operations
|
||||
NOTE: Fixing this logic now results in methods starting with set_ on MIB
|
||||
leafs without Write or Create access failing validation in
|
||||
_validate_autoload_method()
|
||||
|
||||
Version 3.53 (2018-03-22)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
* #12 add Cisco PortFast support via CiscoStpExtensions::i_faststart_enabled
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Report serial/version on Netgear FSM (paecker)
|
||||
* Add test harness and expand developer test coverage
|
||||
* Add back the base (RFC) MIBs for when net-snmp does not have them builtin
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix AUTOLOAD / can() bug that could result in DESTROY being redefined and
|
||||
dynamic methods not being added to the symbol table.
|
||||
|
||||
version 3.52 (2018-03-19)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* set fallback for nonmatching interfaces in Cumulus class
|
||||
* better interface naming for Ubiquiti
|
||||
* modify mock utility to work under a perlbrew environment
|
||||
|
||||
version 3.50 (2018-03-14)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* #198 Add Support for Gigamon devices
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* #226 Avaya VSP devices - no ifAlias
|
||||
* #227 Remove bogus can() check in _set()
|
||||
* Fix SNMP::Info::IEEE802dot3ad when more than 1 LAG
|
||||
|
||||
version 3.49 (2018-03-03)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Better Layer3::Cumulus interface naming
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Use GitHub for MIBs download for testing, instead of sf.net
|
||||
|
||||
version 3.48 (2018-03-03)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add Layer3::Cumulus for Cumulus Networks devices
|
||||
|
||||
version 3.47 (2018-02-27)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add LLDP-MIB::lldpXMedRemInventoryTable methods
|
||||
|
||||
version 3.46 (2018-02-17)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add method to get err-disable cause for interfaces on Cisco
|
||||
|
||||
version 3.45 (2018-02-14)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Enable Layer3::Foundry for Brocade VDX platform
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* #222 #238 #239 handle BayStack switches with port index 128 (zoeloe)
|
||||
|
||||
version 3.44 (2018-02-12)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Improve F10 OS version detection (laelly)
|
||||
* Better IPv6 prefix derivation
|
||||
|
||||
version 3.43 (2018-02-02)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix identification of Brocade CES
|
||||
|
||||
version 3.42 (2018-02-02)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* IPv6 Prefix Length support via IPv6::ipv6_addr_prefixlength
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix test for updated snmplabs.com data
|
||||
|
||||
version 3.41 (2018-02-01)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
130
MANIFEST
130
MANIFEST
@@ -58,8 +58,10 @@ lib/SNMP/Info/Layer2/Kentrox.pm
|
||||
lib/SNMP/Info/Layer2/N2270.pm
|
||||
lib/SNMP/Info/Layer2/NAP222x.pm
|
||||
lib/SNMP/Info/Layer2/Netgear.pm
|
||||
lib/SNMP/Info/Layer2/Nexans.pm
|
||||
lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||
lib/SNMP/Info/Layer2/Orinoco.pm
|
||||
lib/SNMP/Info/Layer2/Sixnet.pm
|
||||
lib/SNMP/Info/Layer2/Trapeze.pm
|
||||
lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||
@@ -81,9 +83,11 @@ lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||
lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||
lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||
lib/SNMP/Info/Layer3/Contivity.pm
|
||||
lib/SNMP/Info/Layer3/Cumulus.pm
|
||||
lib/SNMP/Info/Layer3/Dell.pm
|
||||
lib/SNMP/Info/Layer3/DLink.pm
|
||||
lib/SNMP/Info/Layer3/Enterasys.pm
|
||||
lib/SNMP/Info/Layer3/ERX.pm
|
||||
lib/SNMP/Info/Layer3/Extreme.pm
|
||||
lib/SNMP/Info/Layer3/F5.pm
|
||||
lib/SNMP/Info/Layer3/Force10.pm
|
||||
@@ -101,6 +105,7 @@ lib/SNMP/Info/Layer3/N1600.pm
|
||||
lib/SNMP/Info/Layer3/Netscreen.pm
|
||||
lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||
lib/SNMP/Info/Layer3/Nexus.pm
|
||||
lib/SNMP/Info/Layer3/OneAccess.pm
|
||||
lib/SNMP/Info/Layer3/PacketFront.pm
|
||||
lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||
lib/SNMP/Info/Layer3/Passport.pm
|
||||
@@ -115,7 +120,9 @@ lib/SNMP/Info/Layer3/VMware.pm
|
||||
lib/SNMP/Info/Layer3/VyOS.pm
|
||||
lib/SNMP/Info/Layer7.pm
|
||||
lib/SNMP/Info/Layer7/APC.pm
|
||||
lib/SNMP/Info/Layer7/Arbor.pm
|
||||
lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||
lib/SNMP/Info/Layer7/Gigamon.pm
|
||||
lib/SNMP/Info/Layer7/Neoteris.pm
|
||||
lib/SNMP/Info/Layer7/Netscaler.pm
|
||||
lib/SNMP/Info/LLDP.pm
|
||||
@@ -141,3 +148,126 @@ xt/00_local_prereq.t
|
||||
xt/00_local_spelling.t
|
||||
xt/00_local_versionsync.t
|
||||
xt/10_remote_snmplabs.t
|
||||
xt/20_run.t
|
||||
xt/lib/My/Test/Class.pm
|
||||
xt/lib/Test/SNMP/Info.pm
|
||||
xt/lib/Test/SNMP/Info/AdslLine.pm
|
||||
xt/lib/Test/SNMP/Info/Aggregate.pm
|
||||
xt/lib/Test/SNMP/Info/Airespace.pm
|
||||
xt/lib/Test/SNMP/Info/AMAP.pm
|
||||
xt/lib/Test/SNMP/Info/Bridge.pm
|
||||
xt/lib/Test/SNMP/Info/CDP.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoAgg.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoConfig.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoPortSecurity.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoPower.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoQOS.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoRTT.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoStats.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoStpExtensions.pm
|
||||
xt/lib/Test/SNMP/Info/CiscoVTP.pm
|
||||
xt/lib/Test/SNMP/Info/EDP.pm
|
||||
xt/lib/Test/SNMP/Info/Entity.pm
|
||||
xt/lib/Test/SNMP/Info/EtherLike.pm
|
||||
xt/lib/Test/SNMP/Info/FDP.pm
|
||||
xt/lib/Test/SNMP/Info/IEEE802dot11.pm
|
||||
xt/lib/Test/SNMP/Info/IEEE802dot3ad.pm
|
||||
xt/lib/Test/SNMP/Info/IPv6.pm
|
||||
xt/lib/Test/SNMP/Info/Layer1.pm
|
||||
xt/lib/Test/SNMP/Info/Layer1/Allied.pm
|
||||
xt/lib/Test/SNMP/Info/Layer1/Asante.pm
|
||||
xt/lib/Test/SNMP/Info/Layer1/Bayhub.pm
|
||||
xt/lib/Test/SNMP/Info/Layer1/Cyclades.pm
|
||||
xt/lib/Test/SNMP/Info/Layer1/S3000.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/3Com.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Airespace.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Aironet.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Allied.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Baystack.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/C1900.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/C2900.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Catalyst.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Centillion.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Cisco.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/CiscoSB.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/HP.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/HP4000.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/HPVC.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Kentrox.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/N2270.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/NAP222x.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Netgear.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Nexans.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm
|
||||
xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Aironet.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/AlteonAD.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Altiga.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Arista.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Aruba.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/BayRS.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/C3550.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/C4000.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/C6500.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/CheckPoint.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Cisco.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/CiscoASA.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Contivity.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Cumulus.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Dell.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/DLink.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Enterasys.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/ERX.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Extreme.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/F5.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Force10.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Fortinet.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Foundry.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/H3C.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/HP9300.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Huawei.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/IBMGbTor.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Juniper.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Lantronix.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Microsoft.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Mikrotik.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/N1600.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Netscreen.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/NetSNMP.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Nexus.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/OneAccess.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/PacketFront.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/PaloAlto.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Passport.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Pf.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Pica8.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Sun.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Tasman.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/VMware.pm
|
||||
xt/lib/Test/SNMP/Info/Layer3/VyOS.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7/APC.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7/Arbor.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7/CiscoIPS.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7/Gigamon.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7/Neoteris.pm
|
||||
xt/lib/Test/SNMP/Info/Layer7/Netscaler.pm
|
||||
xt/lib/Test/SNMP/Info/LLDP.pm
|
||||
xt/lib/Test/SNMP/Info/MAU.pm
|
||||
xt/lib/Test/SNMP/Info/NortelStack.pm
|
||||
xt/lib/Test/SNMP/Info/PowerEthernet.pm
|
||||
xt/lib/Test/SNMP/Info/RapidCity.pm
|
||||
xt/lib/Test/SNMP/Info/SONMP.pm
|
||||
|
||||
@@ -65,3 +65,6 @@
|
||||
.github
|
||||
.travis
|
||||
README.md
|
||||
|
||||
# Avoid Komodo project file
|
||||
\.komodoproject$
|
||||
|
||||
273
META.json
273
META.json
@@ -34,7 +34,14 @@
|
||||
},
|
||||
"test" : {
|
||||
"requires" : {
|
||||
"Class::Inspector" : "0",
|
||||
"File::Find" : "0",
|
||||
"File::Slurper" : "0",
|
||||
"Path::Class" : "0",
|
||||
"Test::Class::Most" : "0",
|
||||
"Test::Distribution" : "0",
|
||||
"Test::Exception" : "0.43",
|
||||
"Test::MockObject::Extends" : "0",
|
||||
"Test::More" : "0.88"
|
||||
}
|
||||
}
|
||||
@@ -42,471 +49,499 @@
|
||||
"provides" : {
|
||||
"SNMP::Info" : {
|
||||
"file" : "lib/SNMP/Info.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::AMAP" : {
|
||||
"file" : "lib/SNMP/Info/AMAP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::AdslLine" : {
|
||||
"file" : "lib/SNMP/Info/AdslLine.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Aggregate" : {
|
||||
"file" : "lib/SNMP/Info/Aggregate.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Airespace" : {
|
||||
"file" : "lib/SNMP/Info/Airespace.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Bridge" : {
|
||||
"file" : "lib/SNMP/Info/Bridge.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CDP" : {
|
||||
"file" : "lib/SNMP/Info/CDP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoAgg" : {
|
||||
"file" : "lib/SNMP/Info/CiscoAgg.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoConfig" : {
|
||||
"file" : "lib/SNMP/Info/CiscoConfig.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoPortSecurity" : {
|
||||
"file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoPower" : {
|
||||
"file" : "lib/SNMP/Info/CiscoPower.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoQOS" : {
|
||||
"file" : "lib/SNMP/Info/CiscoQOS.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoRTT" : {
|
||||
"file" : "lib/SNMP/Info/CiscoRTT.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoStack" : {
|
||||
"file" : "lib/SNMP/Info/CiscoStack.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoStats" : {
|
||||
"file" : "lib/SNMP/Info/CiscoStats.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoStpExtensions" : {
|
||||
"file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::CiscoVTP" : {
|
||||
"file" : "lib/SNMP/Info/CiscoVTP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::EDP" : {
|
||||
"file" : "lib/SNMP/Info/EDP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Entity" : {
|
||||
"file" : "lib/SNMP/Info/Entity.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::EtherLike" : {
|
||||
"file" : "lib/SNMP/Info/EtherLike.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::FDP" : {
|
||||
"file" : "lib/SNMP/Info/FDP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::IEEE802dot11" : {
|
||||
"file" : "lib/SNMP/Info/IEEE802dot11.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::IEEE802dot3ad" : {
|
||||
"file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::IPv6" : {
|
||||
"file" : "lib/SNMP/Info/IPv6.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::LLDP" : {
|
||||
"file" : "lib/SNMP/Info/LLDP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer1" : {
|
||||
"file" : "lib/SNMP/Info/Layer1.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer1::Allied" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Allied.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer1::Asante" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Asante.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer1::Bayhub" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer1::Cyclades" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer1::S3000" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/S3000.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2" : {
|
||||
"file" : "lib/SNMP/Info/Layer2.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::3Com" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/3Com.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Adtran" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Adtran.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Airespace" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Airespace.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Aironet" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Aironet.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Allied" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Allied.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Baystack" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Baystack.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::C1900" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/C1900.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::C2900" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/C2900.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Catalyst" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Centillion" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Centillion.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Cisco" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Cisco.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::CiscoSB" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::HP" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/HP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::HP4000" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/HP4000.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::HPVC" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/HPVC.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Kentrox" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::N2270" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/N2270.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::NAP222x" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::NWSS2300" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Netgear" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Netgear.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Nexans" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Nexans.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Orinoco" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Sixnet" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Sixnet.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Trapeze" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::Ubiquiti" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer2::ZyXEL_DSLAM" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3" : {
|
||||
"file" : "lib/SNMP/Info/Layer3.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Aironet" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Aironet.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::AlcatelLucent" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::AlteonAD" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Altiga" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Altiga.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Arista" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Arista.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Aruba" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Aruba.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::BayRS" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/BayRS.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::BlueCoatSG" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::C3550" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/C3550.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::C4000" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/C4000.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::C6500" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/C6500.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::CheckPoint" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Cisco" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Cisco.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::CiscoASA" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::CiscoFWSM" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::CiscoSwitch" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Contivity" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Contivity.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Cumulus" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::DLink" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/DLink.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Dell" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Dell.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::ERX" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/ERX.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Enterasys" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Extreme" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Extreme.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::F5" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/F5.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Force10" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Force10.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Fortinet" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Foundry" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Foundry.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::H3C" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/H3C.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::HP9300" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/HP9300.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Huawei" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Huawei.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::IBMGbTor" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Juniper" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Juniper.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Lantronix" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Microsoft" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Mikrotik" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::N1600" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/N1600.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::NetSNMP" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Netscreen" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Nexus" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Nexus.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::OneAccess" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/OneAccess.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::PacketFront" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::PaloAlto" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Passport" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Passport.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Pf" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Pf.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Pica8" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Pica8.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::SonicWALL" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Steelhead" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Sun" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Sun.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Tasman" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Tasman.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::Timetra" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Timetra.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::VMware" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/VMware.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer3::VyOS" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/VyOS.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7" : {
|
||||
"file" : "lib/SNMP/Info/Layer7.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7::APC" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/APC.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7::Arbor" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/Arbor.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7::CiscoIPS" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7::Gigamon" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7::Neoteris" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::Layer7::Netscaler" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::MAU" : {
|
||||
"file" : "lib/SNMP/Info/MAU.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::MRO" : {
|
||||
"file" : "lib/SNMP/Info/MRO.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::NortelStack" : {
|
||||
"file" : "lib/SNMP/Info/NortelStack.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::PowerEthernet" : {
|
||||
"file" : "lib/SNMP/Info/PowerEthernet.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::RapidCity" : {
|
||||
"file" : "lib/SNMP/Info/RapidCity.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
},
|
||||
"SNMP::Info::SONMP" : {
|
||||
"file" : "lib/SNMP/Info/SONMP.pm",
|
||||
"version" : "3.41"
|
||||
"version" : "3.57"
|
||||
}
|
||||
},
|
||||
"release_status" : "stable",
|
||||
@@ -524,6 +559,6 @@
|
||||
"x_IRC" : "irc://irc.freenode.org/#netdisco",
|
||||
"x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
|
||||
},
|
||||
"version" : "3.41",
|
||||
"x_serialization_backend" : "JSON::PP version 2.94"
|
||||
"version" : "3.57",
|
||||
"x_serialization_backend" : "JSON::PP version 2.97001"
|
||||
}
|
||||
|
||||
264
META.yml
264
META.yml
@@ -3,7 +3,14 @@ abstract: 'OO Interface to Network devices and MIBs through SNMP'
|
||||
author:
|
||||
- 'Eric A. Miller <emiller@cpan.org>'
|
||||
build_requires:
|
||||
Class::Inspector: '0'
|
||||
File::Find: '0'
|
||||
File::Slurper: '0'
|
||||
Path::Class: '0'
|
||||
Test::Class::Most: '0'
|
||||
Test::Distribution: '0'
|
||||
Test::Exception: '0.43'
|
||||
Test::MockObject::Extends: '0'
|
||||
Test::More: '0.88'
|
||||
configure_requires:
|
||||
Module::Build: '0.42'
|
||||
@@ -17,355 +24,376 @@ name: SNMP-Info
|
||||
provides:
|
||||
SNMP::Info:
|
||||
file: lib/SNMP/Info.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::AMAP:
|
||||
file: lib/SNMP/Info/AMAP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::AdslLine:
|
||||
file: lib/SNMP/Info/AdslLine.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Aggregate:
|
||||
file: lib/SNMP/Info/Aggregate.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Airespace:
|
||||
file: lib/SNMP/Info/Airespace.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Bridge:
|
||||
file: lib/SNMP/Info/Bridge.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CDP:
|
||||
file: lib/SNMP/Info/CDP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoAgg:
|
||||
file: lib/SNMP/Info/CiscoAgg.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoConfig:
|
||||
file: lib/SNMP/Info/CiscoConfig.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoPortSecurity:
|
||||
file: lib/SNMP/Info/CiscoPortSecurity.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoPower:
|
||||
file: lib/SNMP/Info/CiscoPower.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoQOS:
|
||||
file: lib/SNMP/Info/CiscoQOS.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoRTT:
|
||||
file: lib/SNMP/Info/CiscoRTT.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoStack:
|
||||
file: lib/SNMP/Info/CiscoStack.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoStats:
|
||||
file: lib/SNMP/Info/CiscoStats.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoStpExtensions:
|
||||
file: lib/SNMP/Info/CiscoStpExtensions.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::CiscoVTP:
|
||||
file: lib/SNMP/Info/CiscoVTP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::EDP:
|
||||
file: lib/SNMP/Info/EDP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Entity:
|
||||
file: lib/SNMP/Info/Entity.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::EtherLike:
|
||||
file: lib/SNMP/Info/EtherLike.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::FDP:
|
||||
file: lib/SNMP/Info/FDP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::IEEE802dot11:
|
||||
file: lib/SNMP/Info/IEEE802dot11.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::IEEE802dot3ad:
|
||||
file: lib/SNMP/Info/IEEE802dot3ad.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::IPv6:
|
||||
file: lib/SNMP/Info/IPv6.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::LLDP:
|
||||
file: lib/SNMP/Info/LLDP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer1:
|
||||
file: lib/SNMP/Info/Layer1.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer1::Allied:
|
||||
file: lib/SNMP/Info/Layer1/Allied.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer1::Asante:
|
||||
file: lib/SNMP/Info/Layer1/Asante.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer1::Bayhub:
|
||||
file: lib/SNMP/Info/Layer1/Bayhub.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer1::Cyclades:
|
||||
file: lib/SNMP/Info/Layer1/Cyclades.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer1::S3000:
|
||||
file: lib/SNMP/Info/Layer1/S3000.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2:
|
||||
file: lib/SNMP/Info/Layer2.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::3Com:
|
||||
file: lib/SNMP/Info/Layer2/3Com.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Adtran:
|
||||
file: lib/SNMP/Info/Layer2/Adtran.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Airespace:
|
||||
file: lib/SNMP/Info/Layer2/Airespace.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Aironet:
|
||||
file: lib/SNMP/Info/Layer2/Aironet.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Allied:
|
||||
file: lib/SNMP/Info/Layer2/Allied.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Baystack:
|
||||
file: lib/SNMP/Info/Layer2/Baystack.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::C1900:
|
||||
file: lib/SNMP/Info/Layer2/C1900.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::C2900:
|
||||
file: lib/SNMP/Info/Layer2/C2900.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Catalyst:
|
||||
file: lib/SNMP/Info/Layer2/Catalyst.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Centillion:
|
||||
file: lib/SNMP/Info/Layer2/Centillion.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Cisco:
|
||||
file: lib/SNMP/Info/Layer2/Cisco.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::CiscoSB:
|
||||
file: lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::HP:
|
||||
file: lib/SNMP/Info/Layer2/HP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::HP4000:
|
||||
file: lib/SNMP/Info/Layer2/HP4000.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::HPVC:
|
||||
file: lib/SNMP/Info/Layer2/HPVC.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Kentrox:
|
||||
file: lib/SNMP/Info/Layer2/Kentrox.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::N2270:
|
||||
file: lib/SNMP/Info/Layer2/N2270.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::NAP222x:
|
||||
file: lib/SNMP/Info/Layer2/NAP222x.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::NWSS2300:
|
||||
file: lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Netgear:
|
||||
file: lib/SNMP/Info/Layer2/Netgear.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Nexans:
|
||||
file: lib/SNMP/Info/Layer2/Nexans.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Orinoco:
|
||||
file: lib/SNMP/Info/Layer2/Orinoco.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Sixnet:
|
||||
file: lib/SNMP/Info/Layer2/Sixnet.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Trapeze:
|
||||
file: lib/SNMP/Info/Layer2/Trapeze.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::Ubiquiti:
|
||||
file: lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer2::ZyXEL_DSLAM:
|
||||
file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3:
|
||||
file: lib/SNMP/Info/Layer3.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Aironet:
|
||||
file: lib/SNMP/Info/Layer3/Aironet.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::AlcatelLucent:
|
||||
file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::AlteonAD:
|
||||
file: lib/SNMP/Info/Layer3/AlteonAD.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Altiga:
|
||||
file: lib/SNMP/Info/Layer3/Altiga.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Arista:
|
||||
file: lib/SNMP/Info/Layer3/Arista.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Aruba:
|
||||
file: lib/SNMP/Info/Layer3/Aruba.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::BayRS:
|
||||
file: lib/SNMP/Info/Layer3/BayRS.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::BlueCoatSG:
|
||||
file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::C3550:
|
||||
file: lib/SNMP/Info/Layer3/C3550.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::C4000:
|
||||
file: lib/SNMP/Info/Layer3/C4000.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::C6500:
|
||||
file: lib/SNMP/Info/Layer3/C6500.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::CheckPoint:
|
||||
file: lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Cisco:
|
||||
file: lib/SNMP/Info/Layer3/Cisco.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::CiscoASA:
|
||||
file: lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::CiscoFWSM:
|
||||
file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::CiscoSwitch:
|
||||
file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Contivity:
|
||||
file: lib/SNMP/Info/Layer3/Contivity.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Cumulus:
|
||||
file: lib/SNMP/Info/Layer3/Cumulus.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::DLink:
|
||||
file: lib/SNMP/Info/Layer3/DLink.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Dell:
|
||||
file: lib/SNMP/Info/Layer3/Dell.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::ERX:
|
||||
file: lib/SNMP/Info/Layer3/ERX.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Enterasys:
|
||||
file: lib/SNMP/Info/Layer3/Enterasys.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Extreme:
|
||||
file: lib/SNMP/Info/Layer3/Extreme.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::F5:
|
||||
file: lib/SNMP/Info/Layer3/F5.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Force10:
|
||||
file: lib/SNMP/Info/Layer3/Force10.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Fortinet:
|
||||
file: lib/SNMP/Info/Layer3/Fortinet.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Foundry:
|
||||
file: lib/SNMP/Info/Layer3/Foundry.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::H3C:
|
||||
file: lib/SNMP/Info/Layer3/H3C.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::HP9300:
|
||||
file: lib/SNMP/Info/Layer3/HP9300.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Huawei:
|
||||
file: lib/SNMP/Info/Layer3/Huawei.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::IBMGbTor:
|
||||
file: lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Juniper:
|
||||
file: lib/SNMP/Info/Layer3/Juniper.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Lantronix:
|
||||
file: lib/SNMP/Info/Layer3/Lantronix.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Microsoft:
|
||||
file: lib/SNMP/Info/Layer3/Microsoft.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Mikrotik:
|
||||
file: lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::N1600:
|
||||
file: lib/SNMP/Info/Layer3/N1600.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::NetSNMP:
|
||||
file: lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Netscreen:
|
||||
file: lib/SNMP/Info/Layer3/Netscreen.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Nexus:
|
||||
file: lib/SNMP/Info/Layer3/Nexus.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::OneAccess:
|
||||
file: lib/SNMP/Info/Layer3/OneAccess.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::PacketFront:
|
||||
file: lib/SNMP/Info/Layer3/PacketFront.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::PaloAlto:
|
||||
file: lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Passport:
|
||||
file: lib/SNMP/Info/Layer3/Passport.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Pf:
|
||||
file: lib/SNMP/Info/Layer3/Pf.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Pica8:
|
||||
file: lib/SNMP/Info/Layer3/Pica8.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::SonicWALL:
|
||||
file: lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Steelhead:
|
||||
file: lib/SNMP/Info/Layer3/Steelhead.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Sun:
|
||||
file: lib/SNMP/Info/Layer3/Sun.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Tasman:
|
||||
file: lib/SNMP/Info/Layer3/Tasman.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::Timetra:
|
||||
file: lib/SNMP/Info/Layer3/Timetra.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::VMware:
|
||||
file: lib/SNMP/Info/Layer3/VMware.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer3::VyOS:
|
||||
file: lib/SNMP/Info/Layer3/VyOS.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7:
|
||||
file: lib/SNMP/Info/Layer7.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7::APC:
|
||||
file: lib/SNMP/Info/Layer7/APC.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7::Arbor:
|
||||
file: lib/SNMP/Info/Layer7/Arbor.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7::CiscoIPS:
|
||||
file: lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7::Gigamon:
|
||||
file: lib/SNMP/Info/Layer7/Gigamon.pm
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7::Neoteris:
|
||||
file: lib/SNMP/Info/Layer7/Neoteris.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::Layer7::Netscaler:
|
||||
file: lib/SNMP/Info/Layer7/Netscaler.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::MAU:
|
||||
file: lib/SNMP/Info/MAU.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::MRO:
|
||||
file: lib/SNMP/Info/MRO.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::NortelStack:
|
||||
file: lib/SNMP/Info/NortelStack.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::PowerEthernet:
|
||||
file: lib/SNMP/Info/PowerEthernet.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::RapidCity:
|
||||
file: lib/SNMP/Info/RapidCity.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
SNMP::Info::SONMP:
|
||||
file: lib/SNMP/Info/SONMP.pm
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
recommends:
|
||||
Class::ISA: '0'
|
||||
File::Slurp: '0'
|
||||
@@ -382,5 +410,5 @@ resources:
|
||||
homepage: http://netdisco.org/
|
||||
license: http://opensource.org/licenses/bsd-license.php
|
||||
repository: https://github.com/netdisco/snmp-info
|
||||
version: '3.41'
|
||||
version: '3.57'
|
||||
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
use File::Glob qw/bsd_glob/;
|
||||
|
||||
my @pms = glob_rec("../../lib");
|
||||
my @pms = glob_rec("./lib");
|
||||
|
||||
$new_version = shift @ARGV || die "missing new version\n";
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# test_class_mocked.pl
|
||||
#
|
||||
@@ -33,7 +33,7 @@ use strict;
|
||||
use warnings;
|
||||
use Carp;
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../../..";
|
||||
use lib "$FindBin::Bin/../../lib";
|
||||
use File::Slurp qw(slurp);
|
||||
use Getopt::Long;
|
||||
use Pod::Usage;
|
||||
|
||||
410
lib/SNMP/Info.pm
410
lib/SNMP/Info.pm
File diff suppressed because it is too large
Load Diff
@@ -33,12 +33,12 @@ use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info;
|
||||
|
||||
@SNMP::Info::LLDP::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
|
||||
@SNMP::Info::AMAP::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::AMAP::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS
|
||||
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
||||
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
||||
|
||||
|
||||
@@ -38,9 +38,10 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (); # IF-MIB
|
||||
# Load MIB for leafs referenced within class
|
||||
%MIBS = ('IF-MIB' => 'ifIndex',);
|
||||
|
||||
%GLOBALS = ();
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
|
||||
@@ -42,11 +42,12 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||
'Q-BRIDGE-MIB' => 'dot1qPvid',
|
||||
'RSTP-MIB' => 'dot1dStpPortOperEdgePort',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -104,6 +105,10 @@ $VERSION = '3.41';
|
||||
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
|
||||
'stp_p_port' => 'dot1dStpPortDesignatedPort',
|
||||
|
||||
# Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
|
||||
'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort',
|
||||
'is_edgeport_oper' => 'dot1dStpPortOperEdgePort',
|
||||
|
||||
# Q-BRIDGE-MIB : dot1qPortVlanTable
|
||||
'qb_i_vlan' => 'dot1qPvid',
|
||||
'qb_i_vlan_type' => 'dot1qPortAcceptableFrameTypes',
|
||||
@@ -716,7 +721,7 @@ tagged ports or the VLAN ID.
|
||||
|
||||
=item $bridge->qb_fdb_index()
|
||||
|
||||
Returns reference to hash: key = VLAN ID, value = FDB ID.
|
||||
Returns reference to hash: key = FDB ID, value = VLAN ID.
|
||||
|
||||
=item $bridge->v_index()
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info;
|
||||
use vars
|
||||
qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# Five data structures required by SNMP::Info
|
||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
||||
@@ -58,7 +58,6 @@ $VERSION = '3.41';
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
'cdp_index' => 'cdpCacheIfIndex',
|
||||
'cdp_proto' => 'cdpCacheAddressType',
|
||||
'cdp_addr' => 'cdpCacheAddress',
|
||||
'cdp_ver' => 'cdpCacheVersion',
|
||||
@@ -128,11 +127,6 @@ sub hasCDP {
|
||||
sub cdp_if {
|
||||
my $cdp = shift;
|
||||
|
||||
# See if by some miracle Cisco implemented the cdpCacheIfIndex entry
|
||||
my $cdp_index = $cdp->cdp_index();
|
||||
return $cdp_index if defined $cdp_index;
|
||||
|
||||
# Nope, didn't think so. Now we fake it.
|
||||
my $cdp_ip = $cdp->cdp_ip();
|
||||
unless ( defined $cdp_ip ) {
|
||||
$cdp->error_throw(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SNMP::Info::CiscoAgg
|
||||
#
|
||||
# Copyright (c) 2014 SNMP::Info Developers
|
||||
# Copyright (c) 2018 SNMP::Info Developers
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||
@@ -52,9 +52,13 @@ $VERSION = '3.41';
|
||||
|
||||
%GLOBALS = ();
|
||||
|
||||
%FUNCS = ();
|
||||
%FUNCS = (
|
||||
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = ();
|
||||
%MUNGE = (
|
||||
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||
);
|
||||
|
||||
sub agg_ports_pagp {
|
||||
my $dev = shift;
|
||||
@@ -147,4 +151,8 @@ automatically.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||
|
||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||
|
||||
=cut
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
||||
|
||||
@@ -32,18 +32,20 @@ package SNMP::Info::CiscoPortSecurity;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info;
|
||||
|
||||
@SNMP::Info::CiscoPortSecurity::ISA = qw/Exporter/;
|
||||
@SNMP::Info::CiscoPortSecurity::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::CiscoPortSecurity::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
||||
'CISCO-PAE-MIB' => 'ciscoPaeMIB',
|
||||
'IEEE8021-PAE-MIB' => 'dot1xAuthLastEapolFrameSource',
|
||||
'CISCO-ERR-DISABLE-MIB' => 'ciscoErrDisableMIB',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -81,30 +83,27 @@ $VERSION = '3.41';
|
||||
# CISCO-PORT-SECURITY-MIB::cpsIfVlanTable
|
||||
'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount',
|
||||
'cps_i_v_mac_max' => 'cpsIfVlanMaxSecureMacAddr',
|
||||
'cps_i_v' => 'cpsIfVlanIndex',
|
||||
|
||||
# CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable
|
||||
'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus',
|
||||
'cps_i_v_mac_age' => 'cpsIfVlanSecureMacAddrRemainAge',
|
||||
'cps_i_v_mac_type' => 'cpsIfVlanSecureMacAddrType',
|
||||
'cps_i_v_vlan' => 'cpsIfVlanSecureVlanIndex',
|
||||
'cps_i_v_mac' => 'cpsIfVlanSecureMacAddress',
|
||||
|
||||
# CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable
|
||||
'cps_m_status' => 'cpsSecureMacAddrRowStatus',
|
||||
'cps_m_age' => 'cpsSecureMacAddrRemainingAge',
|
||||
'cps_m_type' => 'cpsSecureMacAddrType',
|
||||
'cps_m_mac' => 'cpsSecureMacAddress',
|
||||
|
||||
# IEEE8021-PAE-MIB::dot1xPaePortEntry
|
||||
'pae_i_capabilities' => 'dot1xPaePortCapabilities',
|
||||
'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource',
|
||||
|
||||
# CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry
|
||||
'cerr_i_cause' => 'cErrDisableIfStatusCause',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
'cps_i_mac' => \&SNMP::Info::munge_mac,
|
||||
'cps_m_mac' => \&SNMP::Info::munge_mac,
|
||||
'cps_i_v_mac' => \&SNMP::Info::munge_mac,
|
||||
'pae_i_last_eapol_frame_source' => \&SNMP::Info::munge_mac,
|
||||
'pae_i_capabilities' => \&munge_pae_capabilities,
|
||||
);
|
||||
@@ -123,13 +122,29 @@ sub munge_pae_capabilities {
|
||||
return join( ' ', @vals );
|
||||
}
|
||||
|
||||
# Define a generic method to show the cause for a port to be err-disabled.
|
||||
# Cisco indexes cErrDisableIfStatusCause by {ifindex,vlan}, but for a more
|
||||
# generic method, using ifIndex only makes it easier to implement across
|
||||
# device classes. Besides, several (most?) err-disable features will disable
|
||||
# the whole interface anyway, and not just a vlan on the interface.
|
||||
sub i_err_disable_cause {
|
||||
my $cps = shift;
|
||||
my $ret;
|
||||
my $causes = $cps->cerr_i_cause() || {};
|
||||
foreach my $interfacevlan (keys %$causes) {
|
||||
my ($iid, $vid) = split(/\./, $interfacevlan);
|
||||
$ret->{$iid} = $causes->{$interfacevlan};
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::CiscoPortSecurity - SNMP Interface to data from
|
||||
F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>
|
||||
F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and F<CISCO-ERR-DISABLE-MIB>.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -153,8 +168,9 @@ Eric Miller
|
||||
=head1 DESCRIPTION
|
||||
|
||||
SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides
|
||||
an interface to the F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>. These
|
||||
MIBs are used across the Catalyst family under CatOS and IOS.
|
||||
an interface to the F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and
|
||||
F<CISCO-ERR-DISABLE-MIB>. These MIBs are used across the Catalyst
|
||||
family under CatOS and IOS.
|
||||
|
||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||
|
||||
@@ -172,6 +188,8 @@ None.
|
||||
|
||||
=item F<IEEE8021-PAE-MIB>
|
||||
|
||||
=item F<CISCO-ERR-DISABLE-MIB>
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
@@ -300,10 +318,6 @@ These are methods that return scalar values from SNMP
|
||||
|
||||
(C<cpsIfVlanMaxSecureMacAddr>)
|
||||
|
||||
=item $cps->cps_i_v()
|
||||
|
||||
(C<cpsIfVlanIndex>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable>
|
||||
@@ -322,14 +336,6 @@ These are methods that return scalar values from SNMP
|
||||
|
||||
(C<cpsIfVlanSecureMacAddrType>)
|
||||
|
||||
=item $cps->cps_i_v_vlan()
|
||||
|
||||
(C<cpsIfVlanSecureVlanIndex>)
|
||||
|
||||
=item $cps->cps_i_v_mac()
|
||||
|
||||
(C<cpsIfVlanSecureMacAddress>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable>
|
||||
@@ -348,10 +354,6 @@ These are methods that return scalar values from SNMP
|
||||
|
||||
(C<cpsSecureMacAddrType>)
|
||||
|
||||
=item $cps->cps_m_mac()
|
||||
|
||||
(C<cpsSecureMacAddress>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry>
|
||||
@@ -374,6 +376,31 @@ The source MAC address carried in the most recently received EAPOL frame.
|
||||
|
||||
=back
|
||||
|
||||
=head2 C<CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry>
|
||||
|
||||
=over
|
||||
|
||||
=item $cps->cerr_i_cause()
|
||||
|
||||
C<cErrDisableIfStatusCause>
|
||||
|
||||
Indicates the feature/event that caused the {interface, vlan} (or the entire
|
||||
interface) to be error-disabled.
|
||||
|
||||
=back
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=over
|
||||
|
||||
=item C<i_err_disable_cause>
|
||||
|
||||
Returns a HASH reference mapping ifIndex to err-disabled cause. The returned
|
||||
data is sparse, so if the ifIndex is not present in the return value, the port
|
||||
is not err-disabled.
|
||||
|
||||
=back
|
||||
|
||||
=head1 Data Munging Callback Subroutines
|
||||
|
||||
=over
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
||||
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ use Exporter;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
||||
|
||||
@@ -194,7 +194,7 @@ sub i_duplex_admin {
|
||||
next if ( defined $partial and $iid !~ /^$partial$/ );
|
||||
|
||||
# Test for gigabit
|
||||
if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 1 ) {
|
||||
if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 0 ) {
|
||||
$i_duplex_admin->{$iid} = 'full';
|
||||
}
|
||||
|
||||
|
||||
@@ -42,14 +42,14 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'SNMPv2-MIB' => 'sysDescr',
|
||||
'CISCO-PROCESS-MIB' => 'cpmCPUTotal5sec',
|
||||
'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed',
|
||||
'OLD-CISCO-SYSTEM-MIB' => 'writeMem',
|
||||
'CISCO-PRODUCTS-MIB' => 'sysName',
|
||||
'CISCO-PRODUCTS-MIB' => 'ciscoIGS',
|
||||
'ENTITY-MIB' => 'entPhysicalSoftwareRev',
|
||||
'CISCO-IMAGE-MIB' => 'ciscoImageString',
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
||||
@@ -54,12 +54,15 @@ $VERSION = '3.41';
|
||||
'stpx_stp_type' => 'stpxSpanningTreeType',
|
||||
'stpx_bpduguard_enable' => 'stpxFastStartBpduGuardEnable',
|
||||
'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
|
||||
'stpx_faststart_default' => 'stpxFastStartGlobalDefaultMode',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Bridge::FUNCS,
|
||||
'stpx_rootguard_enabled' => 'stpxRootGuardConfigEnabled',
|
||||
'stpx_loopguard_enabled' => 'stpxLoopGuardConfigEnabled',
|
||||
'stpx_faststart_enabled' => 'stpxFastStartPortEnable',
|
||||
'stpx_faststart_operational' => 'stpxFastStartPortMode',
|
||||
'stpx_port_bpduguard_mode' => 'stpxFastStartPortBpduGuardMode',
|
||||
'stpx_port_bpdufilter_mode' => 'stpxFastStartPortBpduFilterMode',
|
||||
'stpx_smst_root' => 'stpxSMSTInstanceCISTRegionalRoot',
|
||||
@@ -69,7 +72,7 @@ $VERSION = '3.41';
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Bridge::MUNGE,
|
||||
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
|
||||
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
|
||||
);
|
||||
|
||||
|
||||
@@ -225,6 +228,36 @@ sub i_bpdufilter_enabled {
|
||||
return \%res;
|
||||
}
|
||||
|
||||
sub i_faststart_enabled {
|
||||
my $self = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $faststart_default = $self->stpx_faststart_default();
|
||||
my $bp_index = $self->bp_index($partial);
|
||||
my $faststart = $self->stpx_faststart_enabled();
|
||||
my $faststart_oper = $self->stpx_faststart_operational();
|
||||
|
||||
my %res;
|
||||
# stpxFastStartPortEnable is deprecated in favour of stpxFastStartPortMode
|
||||
# see https://github.com/netdisco/netdisco/issues/12
|
||||
foreach my $index ( keys %$faststart, keys %$faststart_oper ){
|
||||
my $mode = $faststart_oper->{$index} || $faststart->{$index};
|
||||
my $iid = $bp_index->{$index};
|
||||
next unless defined $iid;
|
||||
next unless defined $mode;
|
||||
if ( $mode eq 'default' ){
|
||||
$res{$iid} = $faststart_default;
|
||||
}else{
|
||||
$res{$iid} = $mode;
|
||||
}
|
||||
$res{$iid} = 'enable' if $res{$iid} eq 'true';
|
||||
$res{$iid} = 'disable' if $res{$iid} eq 'false';
|
||||
$res{$iid} = 1 if $res{$iid} =~ m/enable/i; # enableForTrunk
|
||||
$res{$iid} = 0 if $res{$iid} eq 'disable';
|
||||
}
|
||||
return \%res;
|
||||
}
|
||||
|
||||
|
||||
sub oct2str {
|
||||
my ($v) = @_;
|
||||
@@ -340,6 +373,13 @@ Format is a hash reference with key = C<ifIndex>, value = [1|0]
|
||||
|
||||
(C<stpxFastStartBpduFilterEnable>)
|
||||
|
||||
=item $stpx->i_faststart_enabled()
|
||||
|
||||
Returns 1 or 0 depending on whether FastStart (aka PortFast) is enabled on a
|
||||
given port. Format is a hash reference with key = C<ifIndex>, value = [1|0]
|
||||
|
||||
(C<stpxFastStartPortEnable> and C<stpxFastStartPortMode>)
|
||||
|
||||
=back
|
||||
|
||||
=head1 MUNGES
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||
@@ -61,7 +61,6 @@ $VERSION = '3.41';
|
||||
%FUNCS = (
|
||||
|
||||
# CISCO-VTP-MIB::managementDomainTable
|
||||
'vtp_d_index' => 'managementDomainIndex',
|
||||
'vtp_d_name' => 'managementDomainName',
|
||||
'vtp_d_mode' => 'managementDomainLocalMode',
|
||||
'vtp_d_rev' => 'managementDomainConfigRevNumber',
|
||||
@@ -780,10 +779,6 @@ Each bit represents a VLAN. This is 3072 through 4095
|
||||
|
||||
=over
|
||||
|
||||
=item $vtp->vtp_d_index()
|
||||
|
||||
(C<managementDomainIndex>)
|
||||
|
||||
=item $vtp->vtp_d_name()
|
||||
|
||||
(C<managementDomainName>)
|
||||
|
||||
@@ -34,12 +34,12 @@ use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info;
|
||||
|
||||
@SNMP::Info::LLDP::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
|
||||
@SNMP::Info::EDP::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::EDP::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
||||
|
||||
@@ -109,6 +109,57 @@ sub e_port {
|
||||
return \%e_port;
|
||||
}
|
||||
|
||||
sub entity_derived_serial {
|
||||
my $entity = shift;
|
||||
|
||||
my $e_parent = $entity->e_parent() || {};
|
||||
my $e_class = $entity->e_class() || {};
|
||||
|
||||
# Sort keys to return a consistent result between runs
|
||||
foreach my $iid ( sort keys %$e_parent ) {
|
||||
my $parent = $e_parent->{$iid};
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Only consider serial numbers for entries without a parent, or
|
||||
# if they are of type "chassis"
|
||||
if ( $parent eq '0' or $class eq 'chassis') {
|
||||
my $serial = $entity->e_serial($iid);
|
||||
if ( $serial && $serial->{$iid} ) {
|
||||
return $serial->{$iid};
|
||||
}
|
||||
else {
|
||||
my $descr = $entity->e_descr($iid);
|
||||
if ( $descr and $descr->{$iid} =~ /serial#?:\s*([a-z0-9]+)/i )
|
||||
{
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub entity_derived_os_ver {
|
||||
my $entity = shift;
|
||||
|
||||
my $e_parent = $entity->e_parent() || {};
|
||||
my $e_class = $entity->e_class() || {};
|
||||
|
||||
# Sort keys to return a consistent result between runs
|
||||
foreach my $iid ( sort keys %$e_parent ) {
|
||||
my $parent = $e_parent->{$iid};
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Only consider serial numbers for entries without a parent, or
|
||||
# if they are of type "chassis"
|
||||
if ( $parent eq '0' or $class eq 'chassis') {
|
||||
my $os_ver = $entity->e_swver($iid);
|
||||
if ( $os_ver && $os_ver->{$iid} ) {
|
||||
return $os_ver->{$iid};
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -173,6 +224,23 @@ none.
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $entity->entity_derived_serial()
|
||||
|
||||
Tries to determine the device serial number from the F<ENTITY-MIB>. Only
|
||||
considers serial numbers for entries without a parent, or if they are of type
|
||||
chassis. Looks at C<entPhysicalSerialNum> and then C<entPhysicalDescr> for
|
||||
serial number.
|
||||
|
||||
=item $entity->entity_derived_os_ver()
|
||||
|
||||
Tries to determine the device OS version from the F<ENTITY-MIB>. Only
|
||||
considers serial numbers for entries without a parent, or if they are of type
|
||||
chassis. Looks at C<entPhysicalSoftwareRev> for the version.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Entity Table
|
||||
|
||||
=over
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
||||
|
||||
@@ -68,7 +68,6 @@ $VERSION = '3.41';
|
||||
'el_xmit_defer' => 'dot3StatsDeferredTransmissions',
|
||||
|
||||
# Ethernet-like Collision Statistics Group
|
||||
'el_coll_count' => 'dot3CollCount',
|
||||
'el_coll_freq' => 'dot3CollFrequencies'
|
||||
);
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
||||
|
||||
@@ -50,11 +50,9 @@ $VERSION = '3.41';
|
||||
'fdp_run' => 'snFdpGlobalRun',
|
||||
'fdp_interval' => 'snFdpGlobalMessageInterval',
|
||||
'fdp_holdtime' => 'snFdpGlobalHoldTime',
|
||||
'fdp_gid' => 'snFdpGlobalDeviceId',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
'fdp_index' => 'snFdpCacheIfIndex',
|
||||
'fdp_proto' => 'snFdpCacheAddressType',
|
||||
'fdp_ip' => 'snFdpCacheAddress',
|
||||
'fdp_ver' => 'snFdpCacheVersion',
|
||||
@@ -62,9 +60,7 @@ $VERSION = '3.41';
|
||||
'fdp_port' => 'snFdpCacheDevicePort',
|
||||
'fdp_platform' => 'snFdpCachePlatform',
|
||||
'fdp_capabilities' => 'snFdpCacheCapabilities',
|
||||
'fdp_domain' => 'snFdpCacheVTPMgmtDomain',
|
||||
'fdp_vlan' => 'snFdpCacheNativeVLAN',
|
||||
'fdp_duplex' => 'snFdpCacheDuplex',
|
||||
'fdp_cache_type' => 'snFdpCacheVendorId',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
@@ -84,9 +80,7 @@ sub fdp_run {
|
||||
sub hasFDP {
|
||||
my $fdp = shift;
|
||||
|
||||
my $ver = $fdp->{_version};
|
||||
|
||||
#my $ver = $fdp->fdp_ver;
|
||||
my $ver = $fdp->snmp_ver();
|
||||
|
||||
# SNMP v1 clients dont have the globals
|
||||
if ( defined $ver and $ver == 1 ) {
|
||||
@@ -103,11 +97,6 @@ sub hasFDP {
|
||||
sub fdp_if {
|
||||
my $fdp = shift;
|
||||
|
||||
# See if by some miracle Cisco implemented the fdpCacheIfIndex entry
|
||||
my $fdp_index = $fdp->fdp_index();
|
||||
return $fdp_index if defined $fdp_index;
|
||||
|
||||
# Nope, didn't think so. Now we fake it.
|
||||
my $fdp_ip = $fdp->fdp_ip();
|
||||
unless ( defined $fdp_ip ) {
|
||||
$fdp->error_throw(
|
||||
@@ -231,15 +220,6 @@ Time in seconds that FDP messages are kept.
|
||||
|
||||
(C<fdpGlobalHoldTime>)
|
||||
|
||||
=item $fdp->fdp_gid()
|
||||
|
||||
Returns FDP device ID.
|
||||
|
||||
This is the device id broadcast via FDP to other devices, and is what is
|
||||
retrieved from remote devices with $fdp->id().
|
||||
|
||||
(C<fdpGlobalDeviceId>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Overrides
|
||||
@@ -323,19 +303,6 @@ Thanks to Martin Lorensen for a pointer to this information.
|
||||
|
||||
(C<fdpCacheCapabilities>)
|
||||
|
||||
=item $fdp->fdp_domain()
|
||||
|
||||
The CDP version of this returns remote VTP Management Domain as defined
|
||||
in C<CISCO-VTP-MIB::managementDomainName>
|
||||
|
||||
(C<fdpCacheVTPMgmtDomain>)
|
||||
|
||||
=item $fdp->fdp_duplex()
|
||||
|
||||
Returns the port duplex status from remote devices.
|
||||
|
||||
(C<fdpCacheDuplex>)
|
||||
|
||||
=item $fdp->fdp_id()
|
||||
|
||||
Returns remote device id string
|
||||
@@ -346,19 +313,11 @@ Returns remote device id string
|
||||
|
||||
Returns the mapping to the SNMP Interface Table.
|
||||
|
||||
Note that a lot devices don't implement $fdp->fdp_index(), So if it isn't
|
||||
around, we fake it.
|
||||
|
||||
In order to map the fdp table entry back to the interfaces() entry, we
|
||||
truncate the last number off of it :
|
||||
|
||||
# it exists, yay.
|
||||
my $fdp_index = $device->fdp_index();
|
||||
return $fdp_index if defined $fdp_index;
|
||||
|
||||
# if not, let's fake it
|
||||
my $fdp_ip = $device->fdp_ip();
|
||||
|
||||
|
||||
my %fdp_if
|
||||
foreach my $key (keys %$fdp_ip){
|
||||
$iid = $key;
|
||||
@@ -366,21 +325,9 @@ truncate the last number off of it :
|
||||
$iid =~ s/\.\d+$//;
|
||||
$fdp_if{$key} = $iid;
|
||||
}
|
||||
|
||||
|
||||
return \%fdp_if;
|
||||
|
||||
|
||||
=item $fdp->fdp_index()
|
||||
|
||||
Returns the mapping to the SNMP2 Interface table for FDP Cache Entries.
|
||||
|
||||
Most devices don't implement this, so you probably want to use $fdp->fdp_if()
|
||||
instead.
|
||||
|
||||
See fdp_if() entry.
|
||||
|
||||
(C<fdpCacheIfIndex>)
|
||||
|
||||
=item $fdp->fdp_ip()
|
||||
|
||||
Returns remote IP address
|
||||
@@ -411,11 +358,11 @@ Returns remote hardware version
|
||||
|
||||
(C<fdpCacheVersion>)
|
||||
|
||||
=item $fdp->fdp_vlan()
|
||||
=item $fdp->fdp_cache_type()
|
||||
|
||||
Returns the remote interface native VLAN.
|
||||
Returns type of entry received, either FDP or CDP.
|
||||
|
||||
(C<fdpCacheNativeVLAN>)
|
||||
(C<snFdpCacheVendorId>)
|
||||
|
||||
=back
|
||||
|
||||
|
||||
@@ -32,13 +32,14 @@ package SNMP::Info::IEEE802dot11;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info;
|
||||
|
||||
@SNMP::Info::IEEE802dot11::ISA = qw/Exporter/;
|
||||
@SNMP::Info::IEEE802dot11::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::IEEE802dot11::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SNMP::Info::IEEE802dot3ad
|
||||
#
|
||||
# Copyright (c) 2014 SNMP::Info Developers
|
||||
# Copyright (c) 2018 SNMP::Info Developers
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Aggregate;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Aggregate::MIBS,
|
||||
@@ -52,29 +52,40 @@ $VERSION = '3.41';
|
||||
|
||||
%GLOBALS = ();
|
||||
|
||||
%FUNCS = ();
|
||||
%FUNCS = (
|
||||
'ad_lag_ports' => 'dot3adAggPortListPorts',
|
||||
);
|
||||
|
||||
%MUNGE = ();
|
||||
%MUNGE = (
|
||||
'ad_lag_ports' => \&SNMP::Info::munge_port_list,
|
||||
);
|
||||
|
||||
sub agg_ports_lag {
|
||||
my $dev = shift;
|
||||
|
||||
# TODO: implement partial
|
||||
my $masters = $dev->dot3adAggActorOperKey;
|
||||
my $slaves = $dev->dot3adAggPortActorOperKey;
|
||||
my $ports = $dev->ad_lag_ports();
|
||||
my $index = $dev->bp_index() || {};
|
||||
|
||||
return {} unless
|
||||
ref {} eq ref $masters and scalar keys %$masters
|
||||
and ref {} eq ref $slaves and scalar keys %$slaves;
|
||||
return {} unless ref {} eq ref $ports and scalar keys %$ports;
|
||||
|
||||
my $ret = {};
|
||||
foreach my $s (keys %$slaves) {
|
||||
next if $slaves->{$s} == 0;
|
||||
foreach my $m (keys %$masters) {
|
||||
next unless $masters->{$m} == $slaves->{$s};
|
||||
$ret->{$s} = $m;
|
||||
last;
|
||||
foreach my $m ( keys %$ports ) {
|
||||
my $idx = $m;
|
||||
my $portlist = $ports->{$m};
|
||||
next unless $portlist;
|
||||
|
||||
# While dot3adAggTable is indexed by ifIndex, the portlist is indexed
|
||||
# with a dot1dBasePort, so we need to use dot1dBasePortIfIndex to map to
|
||||
# the ifIndex. If we don't have dot1dBasePortIfIndex assume
|
||||
# dot1dBasePort = ifIndex
|
||||
for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
|
||||
my $ifindex = $i+1;
|
||||
if ( exists($index->{$i+1}) and defined($index->{$i+1}) ) {
|
||||
$ifindex = $index->{$i+1};
|
||||
}
|
||||
$ret->{$ifindex} = $idx if ( @$portlist[$i] );
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
@@ -44,7 +44,7 @@ use constant {
|
||||
IPV6MIB => 3,
|
||||
};
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
|
||||
|
||||
@@ -67,20 +67,24 @@ $VERSION = '3.41';
|
||||
|
||||
'ip_n2p_phys_state' => 'ipNetToPhysicalState', # IP-MIB
|
||||
'c_inet_phys_state' => 'cInetNetToMediaState', # CISCO-IETF-IP-MIB
|
||||
'i6_n2p_phys_state' => 'ipv6NetToMediaState', # IPV6-MIB
|
||||
'i6_n2p_phys_state' => 'ipv6IfNetToMediaState', # IPV6-MIB
|
||||
|
||||
'ip_pfx_origin' => 'ipAddressPrefixOrigin', # IP-MIB
|
||||
'c_pfx_origin' => 'cIpAddressPfxOrigin', # CISCO-IETF-IP-MIB
|
||||
|
||||
'ip_addr6_pfx' => 'ipAddressPrefix', # IP-MIB
|
||||
'ip_addr6_pfx' => 'ipAddressPrefix', # IP-MIB
|
||||
'c_addr6_pfx' => 'cIpAddressPrefix', # CISCO-IETF-IP-MIB
|
||||
|
||||
# Commented out are not-accessible according to MIB
|
||||
#'ip_addr6_pfxlen' => 'ipAddressPrefixLength', # IP-MIB
|
||||
#'c_addr6_pfxlen' => 'cIpAddressPfxLength', # CISCO-IETF-IP-MIB
|
||||
'i6_addr_pfxlen' => 'ipv6AddrPfxLength', # IPV6-MIB
|
||||
|
||||
'ip_addr6_index' => 'ipAddressIfIndex', # IP-MIB
|
||||
'c_addr6_index' => 'cIpAddressIfIndex', # CISCO-IETF-IP-MIB
|
||||
|
||||
'ip_addr6_type' => 'ipAddressType', # IP-MIB
|
||||
'c_addr6_type' => 'cIpAddressType', # CISCO-IETF-IP-MIB
|
||||
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
@@ -329,6 +333,33 @@ sub ipv6_addr_prefix {
|
||||
return $return;
|
||||
}
|
||||
|
||||
sub ipv6_addr_prefixlength {
|
||||
my $info = shift;
|
||||
my $return;
|
||||
my $ipv6_addr_prefix = &_test_methods( $info, {
|
||||
ip_addr6_pfx => IPMIB,
|
||||
c_addr6_pfx => CISCO,
|
||||
});
|
||||
return unless defined $ipv6_addr_prefix;
|
||||
foreach my $row (keys %$ipv6_addr_prefix) {
|
||||
if ($row =~ /^(\d+)\.[\d\.]+$/) {
|
||||
my $type = $1;
|
||||
if (($type == 2) or ($type == 4)) { # IPv6
|
||||
# Remove interface specific part from vrf interfaces
|
||||
if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
|
||||
# Remove the OID part from the value
|
||||
my $val = $ipv6_addr_prefix->{$row};
|
||||
if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) {
|
||||
$val = $2;
|
||||
$return->{$row} = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
|
||||
return $return;
|
||||
}
|
||||
|
||||
sub ipv6_addr {
|
||||
my $info = shift;
|
||||
my $return;
|
||||
@@ -355,6 +386,7 @@ sub ipv6_addr {
|
||||
sub _method_used {
|
||||
my $info = shift;
|
||||
my $return = 'none of the MIBs';
|
||||
# FIXME ugh! a global. makes order of calls important for debug.
|
||||
if (defined $info::METHOD) {
|
||||
if ($info::METHOD eq IPMIB) {
|
||||
$return = 'IP-MIB';
|
||||
@@ -374,6 +406,7 @@ sub _test_methods {
|
||||
foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
|
||||
$return = $info->$method || {};
|
||||
if (scalar keys %$return) {
|
||||
# FIXME ugh! a global. makes order of calls important for debug.
|
||||
$info::METHOD = $test->{$method};
|
||||
last;
|
||||
}
|
||||
@@ -490,6 +523,10 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
|
||||
|
||||
Maps IPv6 addresses with their prefixes
|
||||
|
||||
=item $info->ipv6_addr_prefixlength()
|
||||
|
||||
Maps IPv6 addresses with their prefix length
|
||||
|
||||
=item $info->ipv6_addr()
|
||||
|
||||
Maps a table instance to an IPv6 address
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
||||
@@ -70,6 +70,18 @@ $VERSION = '3.41';
|
||||
'lldp_rem_sys_cap' => 'lldpRemSysCapEnabled',
|
||||
'lldp_rem_cap_spt' => 'lldpRemSysCapSupported',
|
||||
|
||||
# LLDP-MIB::lldpXMedRemInventoryTable
|
||||
'lldp_rem_hw_rev' => 'lldpXMedRemHardwareRev',
|
||||
'lldp_rem_fw_rev' => 'lldpXMedRemFirmwareRev',
|
||||
'lldp_rem_sw_rev' => 'lldpXMedRemSoftwareRev',
|
||||
'lldp_rem_serial' => 'lldpXMedRemSerialNum',
|
||||
'lldp_rem_vendor' => 'lldpXMedRemMfgName',
|
||||
'lldp_rem_model' => 'lldpXMedRemModelName',
|
||||
'lldp_rem_asset' => 'lldpXMedRemAssetID',
|
||||
|
||||
'lldp_rem_media_cap' => 'lldpXMedRemCapCurrent',
|
||||
'lldp_rem_media_cap_spt' => 'lldpXMedRemCapSupported',
|
||||
|
||||
# LLDP-MIB::lldpRemManAddrTable
|
||||
'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
|
||||
);
|
||||
@@ -83,6 +95,17 @@ $VERSION = '3.41';
|
||||
'lldp_sys_cap' => \&SNMP::Info::munge_bits,
|
||||
'lldp_rem_sys_cap' => \&SNMP::Info::munge_bits,
|
||||
'lldp_rem_cap_spt' => \&SNMP::Info::munge_bits,
|
||||
|
||||
'lldp_rem_hw_rev' => \&SNMP::Info::munge_null,
|
||||
'lldp_rem_fw_rev' => \&SNMP::Info::munge_null,
|
||||
'lldp_rem_sw_rev' => \&SNMP::Info::munge_null,
|
||||
'lldp_rem_serial' => \&SNMP::Info::munge_null,
|
||||
'lldp_rem_vendor' => \&SNMP::Info::munge_null,
|
||||
'lldp_rem_model' => \&SNMP::Info::munge_null,
|
||||
'lldp_rem_asset' => \&SNMP::Info::munge_null,
|
||||
|
||||
'lldp_rem_media_cap' => \&SNMP::Info::munge_bits,
|
||||
'lldp_rem_media_cap_spt' => \&SNMP::Info::munge_bits,
|
||||
);
|
||||
|
||||
sub hasLLDP {
|
||||
@@ -324,6 +347,39 @@ sub lldp_cap {
|
||||
return \%lldp_cap;
|
||||
}
|
||||
|
||||
sub lldp_media_cap {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp_caps = $lldp->lldp_rem_media_cap_spt($partial) || {};
|
||||
|
||||
# Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
|
||||
# be able to enumerate for us, so we have to get it from the MIB
|
||||
# and enumerate ourselves
|
||||
my $oid = SNMP::translateObj( 'lldpXMedRemCapCurrent', 0, 1 ) || '';
|
||||
my $enums = (
|
||||
( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
|
||||
? $SNMP::MIB{$oid}{'enums'}
|
||||
: {}
|
||||
);
|
||||
my %r_enums = reverse %$enums;
|
||||
|
||||
my %lldp_cap;
|
||||
foreach my $key ( keys %$lldp_caps ) {
|
||||
my $cap_bits = $lldp_caps->{$key};
|
||||
next unless $cap_bits;
|
||||
|
||||
my $count = 0;
|
||||
foreach my $bit ( split //, $cap_bits ) {
|
||||
if ($bit) {
|
||||
push( @{ $lldp_cap{$key} }, $r_enums{$count} );
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
return \%lldp_cap;
|
||||
}
|
||||
|
||||
#sub root_ip {
|
||||
# my $lldp = shift;
|
||||
#
|
||||
@@ -570,6 +626,12 @@ Returns hash of arrays with each array containing the system capabilities
|
||||
supported by the remote system. Possible elements in the array are
|
||||
enumerated from C<LldpSystemCapabilitiesMap>.
|
||||
|
||||
=item $lldp->lldp_media_cap()
|
||||
|
||||
Returns hash of arrays with each array containing the media capabilities
|
||||
supported by the remote system. Possible elements in the array are
|
||||
enumerated from C<LldpXMedCapabilities>.
|
||||
|
||||
=back
|
||||
|
||||
=head2 LLDP Remote Table (C<lldpRemTable>)
|
||||
@@ -631,6 +693,65 @@ Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpRemSysDesc>)
|
||||
|
||||
=item $lldp->lldp_rem_hw_rev()
|
||||
|
||||
Returns the string value used to identify the hardware revision of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemHardwareRev>)
|
||||
|
||||
=item $lldp->lldp_rem_fw_rev()
|
||||
|
||||
Returns the string value used to identify the firmware revision of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemHardwareRev>)
|
||||
|
||||
=item $lldp->lldp_rem_sw_rev()
|
||||
|
||||
Returns the string value used to identify the software revision of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemSoftwareRev>)
|
||||
|
||||
=item $lldp->lldp_rem_serial()
|
||||
|
||||
Returns the string value used to identify the serial number of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemSerialNum>)
|
||||
|
||||
=item $lldp->lldp_rem_vendor()
|
||||
|
||||
Returns the string value used to identify the manufacturer of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemMfgName>)
|
||||
|
||||
=item $lldp->lldp_rem_asset()
|
||||
|
||||
Returns the string value used to identify the asset number of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemAssetID>)
|
||||
|
||||
=item $lldp->lldp_rem_model()
|
||||
|
||||
Returns the string value used to identify the model of the
|
||||
remote system. Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpXMedRemModelName>)
|
||||
|
||||
=item $lldp->lldp_rem_media_cap_spt()
|
||||
|
||||
Returns which media capabilities are supported on the remote system. Results
|
||||
are munged into an ascii binary string, LSB.
|
||||
|
||||
=item $lldp->lldp_rem_media_cap()
|
||||
|
||||
Returns which media capabilities are enabled on the remote system. Results
|
||||
are munged into an ascii binary string, LSB.
|
||||
|
||||
=item $lldp->lldp_rem_sys_cap()
|
||||
|
||||
Returns which system capabilities are enabled on the remote system. Results
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
||||
@@ -71,6 +71,7 @@ sub os_ver {
|
||||
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub model {
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
||||
@@ -84,6 +84,7 @@ sub os_ver {
|
||||
if ( $descr =~ /software v(\d+\.\d+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
@@ -94,7 +95,7 @@ sub model {
|
||||
my $asante = shift;
|
||||
|
||||
my $id = $asante->id();
|
||||
my $model = &SNMP::translateObj($id);
|
||||
my $model = SNMP::translateObj($id);
|
||||
|
||||
return $model;
|
||||
}
|
||||
@@ -108,8 +109,8 @@ sub i_up {
|
||||
my $i_up = {};
|
||||
foreach my $port ( keys %$asante_up ) {
|
||||
my $up = $asante_up->{$port};
|
||||
$i_up->{$port} = 'down' if $up =~ /on/;
|
||||
$i_up->{$port} = 'up' if $up =~ /off/;
|
||||
$i_up->{$port} = 'down' if $up =~ /off/;
|
||||
$i_up->{$port} = 'up' if $up =~ /on/;
|
||||
}
|
||||
|
||||
return $i_up;
|
||||
@@ -149,7 +150,7 @@ sub i_name {
|
||||
my $asante = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $i_name = $asante->orig_i_descr($partial) || {};
|
||||
my $i_name = $asante->orig_i_description($partial) || {};
|
||||
|
||||
my %i_name;
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# SNMP::Info::Layer1::Cyclades
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (c) 2008 Eric Miller
|
||||
# Copyright (c) 2018 Eric Miller
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -39,38 +39,105 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer1::MIBS,
|
||||
'CYCLADES-ACS-SYS-MIB' => 'cyACSversion',
|
||||
'CYCLADES-ACS-CONF-MIB' => 'cyEthIPaddr',
|
||||
'CYCLADES-ACS-INFO-MIB' => 'cyISPortTty',
|
||||
'CYCLADES-ACS-SYS-MIB' => 'cyACSversion',
|
||||
'CYCLADES-ACS5K-SYS-MIB' => 'cyACS5Kversion',
|
||||
'CYCLADES-ACS-CONF-MIB' => 'cyACSConf',
|
||||
'CYCLADES-ACS5K-CONF-MIB' => 'cyACS5KConf',
|
||||
'CYCLADES-ACS-INFO-MIB' => 'cyACSInfo',
|
||||
'CYCLADES-ACS5K-INFO-MIB' => 'cyACS5KInfo',
|
||||
'ACS-MIB' => 'acs6016',
|
||||
'ACS8000-MIB' => 'acs8048',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
|
||||
# CYCLADES-ACS-SYS-MIB
|
||||
%SNMP::Info::Layer1::GLOBALS,
|
||||
'os_ver' => 'cyACSversion',
|
||||
'cy_model' => 'cyACSpname',
|
||||
'serial' => 'cyACSDevId',
|
||||
'root_ip' => 'cyEthIPaddr',
|
||||
'ps1_status' => 'cyACSPw1',
|
||||
'ps2_status' => 'cyACSPw2',
|
||||
|
||||
# CYCLADES-ACS-SYS-MIB
|
||||
'cy_os_ver' => 'cyACSversion',
|
||||
'cy_model' => 'cyACSpname',
|
||||
'cy_serial' => 'cyACSDevId',
|
||||
'cy_ps1_status' => 'cyACSPw1',
|
||||
'cy_ps2_status' => 'cyACSPw2',
|
||||
|
||||
# CYCLADES-ACS-CONF-MIB
|
||||
'cy_root_ip' => 'CYCLADES_ACS_CONF_MIB__cyEthIPaddr',
|
||||
|
||||
# CYCLADES-ACS5K-SYS-MIB
|
||||
'cy5k_os_ver' => 'cyACS5Kversion',
|
||||
'cy5k_model' => 'cyACS5Kpname',
|
||||
'cy5k_serial' => 'cyACS5KDevId',
|
||||
'cy5k_ps1_status' => 'cyACS5KPw1',
|
||||
'cy5k_ps2_status' => 'cyACS5KPw2',
|
||||
|
||||
# CYCLADES-ACS5K-CONF-MIB
|
||||
'cy5k_root_ip' => 'CYCLADES_ACS5K_CONF_MIB__cyEthIPaddr',
|
||||
|
||||
# ACS-MIB
|
||||
'acs_os_ver' => 'ACS_MIB__acsFirmwareVersion',
|
||||
'acs_model' => 'ACS_MIB__acsProductModel',
|
||||
'acs_serial' => 'ACS_MIB__acsSerialNumber',
|
||||
'acs_ps1_status' => 'ACS_MIB__acsPowerSupplyStatePw1',
|
||||
'acs_ps2_status' => 'ACS_MIB__acsPowerSupplyStatePw2',
|
||||
|
||||
# ACS8000-MIB
|
||||
'acs8k_os_ver' => 'ACS8000_MIB__acsFirmwareVersion',
|
||||
'acs8k_model' => 'ACS8000_MIB__acsProductModel',
|
||||
'acs8k_serial' => 'ACS8000_MIB__acsSerialNumber',
|
||||
'acs8k_ps1_status' => 'ACS8000_MIB__acsPowerSupplyStatePw1',
|
||||
'acs8k_ps2_status' => 'ACS8000_MIB__acsPowerSupplyStatePw2',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer1::FUNCS,
|
||||
|
||||
# CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
|
||||
'cy_port_tty' => 'cyISPortTty',
|
||||
'cy_port_name' => 'cyISPortName',
|
||||
'cy_port_speed' => 'cyISPortSpeed',
|
||||
'cy_port_cd' => 'cyISPortSigCD',
|
||||
'cy_port_tty' => 'CYCLADES_ACS_INFO_MIB__cyISPortTty',
|
||||
'cy_port_name' => 'CYCLADES_ACS_INFO_MIB__cyISPortName',
|
||||
'cy_port_speed' => 'CYCLADES_ACS_INFO_MIB__cyISPortSpeed',
|
||||
'cy_port_cd' => 'CYCLADES_ACS_INFO_MIB__cyISPortSigCD',
|
||||
|
||||
# CYCLADES-ACS-CONF-MIB::cySerialPortTable
|
||||
'cy_port_socket' => 'cySPortSocketPort',
|
||||
'cy_port_socket' => 'CYCLADES_ACS_CONF_MIB__cySPortSocketPort',
|
||||
|
||||
# CYCLADES-ACS5K-INFO-MIB::cyInfoSerialTable
|
||||
'cy5k_port_tty' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortTty',
|
||||
'cy5k_port_name' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortName',
|
||||
'cy5k_port_speed' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSpeed',
|
||||
'cy5k_port_cd' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSigCD',
|
||||
|
||||
# CYCLADES-ACS5K-CONF-MIB::cySerialPortTable
|
||||
'cy5k_port_socket' => 'CYCLADES_ACS5K_CONF_MIB__cySPortSocketPort',
|
||||
|
||||
# ACS-MIB::acsSerialPortTable
|
||||
'acs_port_tty' => 'ACS_MIB__acsSerialPortTableDeviceName',
|
||||
'acs_port_name' => 'ACS_MIB__acsSerialPortTableName',
|
||||
'acs_port_speed' => 'ACS_MIB__acsSerialPortTableComSpeed',
|
||||
'acs_port_cd' => 'ACS_MIB__acsSerialPortTableSignalStateDCD',
|
||||
|
||||
# Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
|
||||
# Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
|
||||
# to be unique so that we can differentiate between the index in the
|
||||
# acsSerialPortTable from ifIndex which are both integers
|
||||
# ACS-MIB::acsSerialPortTableEntry
|
||||
'acs_port_socket' => 'ACS_MIB__acsSerialPortTableDeviceName',
|
||||
|
||||
# ACS8000-MIB::acsSerialPortTable
|
||||
'acs8k_port_tty' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
|
||||
'acs8k_port_name' => 'ACS8000_MIB__acsSerialPortTableName',
|
||||
'acs8k_port_speed' => 'ACS8000_MIB__acsSerialPortTableComSpeed',
|
||||
'acs8k_port_cd' => 'ACS8000_MIB__acsSerialPortTableSignalStateDCD',
|
||||
|
||||
# Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
|
||||
# Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
|
||||
# to be unique so that we can differentiate between the index in the
|
||||
# acsSerialPortTable from ifIndex which are both integers
|
||||
# ACS8000-MIB::acsSerialPortTableEntry
|
||||
'acs8k_port_socket' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
||||
@@ -82,21 +149,85 @@ sub layers {
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'cyclades';
|
||||
return 'avocent';
|
||||
}
|
||||
|
||||
# Use "short circuit" to return the first MIB instance that returns data to
|
||||
# reduce network communications
|
||||
# We'll try newest (acs*) first assuming those are most likely deployed
|
||||
sub os_ver {
|
||||
my $cyclades = shift;
|
||||
|
||||
return
|
||||
$cyclades->acs_os_ver()
|
||||
|| $cyclades->acs8k_os_ver()
|
||||
|| $cyclades->cy5k_os_ver()
|
||||
|| $cyclades->cy_os_ver()
|
||||
|| undef;
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
return 'cyclades';
|
||||
return 'vertiv';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $cyclades = shift;
|
||||
|
||||
my $model = $cyclades->cy_model();
|
||||
my $model
|
||||
= $cyclades->acs_model()
|
||||
|| $cyclades->acs8k_model()
|
||||
|| $cyclades->cy5k_model()
|
||||
|| $cyclades->cy_model()
|
||||
|| undef;
|
||||
|
||||
return unless defined $model;
|
||||
return lc($model) if ( defined $model );
|
||||
|
||||
return lc($model);
|
||||
my $id = $cyclades->id();
|
||||
my $prod = SNMP::translateObj($id);
|
||||
|
||||
return $prod || $id;
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $cyclades = shift;
|
||||
|
||||
return
|
||||
$cyclades->acs_serial()
|
||||
|| $cyclades->acs8k_serial()
|
||||
|| $cyclades->cy5k_serial()
|
||||
|| $cyclades->cy_serial()
|
||||
|| undef;
|
||||
}
|
||||
|
||||
sub root_ip {
|
||||
my $cyclades = shift;
|
||||
|
||||
return
|
||||
$cyclades->cy5k_root_ip()
|
||||
|| $cyclades->cy_root_ip()
|
||||
|| undef;
|
||||
}
|
||||
|
||||
sub ps1_status {
|
||||
my $cyclades = shift;
|
||||
|
||||
return
|
||||
$cyclades->acs_ps1_status()
|
||||
|| $cyclades->acs8k_ps1_status()
|
||||
|| $cyclades->cy5k_ps1_status()
|
||||
|| $cyclades->cy_ps1_status()
|
||||
|| undef;
|
||||
}
|
||||
|
||||
sub ps2_status {
|
||||
my $cyclades = shift;
|
||||
|
||||
return
|
||||
$cyclades->acs_ps2_status()
|
||||
|| $cyclades->acs8k_ps2_status()
|
||||
|| $cyclades->cy5k_ps2_status()
|
||||
|| $cyclades->cy_ps2_status()
|
||||
|| undef;
|
||||
}
|
||||
|
||||
# Extend interface methods to include serial ports
|
||||
@@ -109,7 +240,12 @@ sub i_index {
|
||||
my $partial = shift;
|
||||
|
||||
my $orig_index = $cyclades->orig_i_index($partial) || {};
|
||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
||||
my $cy_index
|
||||
= $cyclades->acs_port_socket()
|
||||
|| $cyclades->acs8k_port_socket()
|
||||
|| $cyclades->cy5k_port_socket()
|
||||
|| $cyclades->cy_port_socket()
|
||||
|| {};
|
||||
|
||||
my %i_index;
|
||||
foreach my $iid ( keys %$orig_index ) {
|
||||
@@ -136,9 +272,19 @@ sub interfaces {
|
||||
my $cyclades = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $i_descr = $cyclades->orig_i_description($partial) || {};
|
||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
||||
my $cy_p_tty = $cyclades->cy_port_tty() || {};
|
||||
my $i_descr = $cyclades->orig_i_description($partial) || {};
|
||||
my $cy_index
|
||||
= $cyclades->acs_port_socket()
|
||||
|| $cyclades->acs8k_port_socket()
|
||||
|| $cyclades->cy5k_port_socket()
|
||||
|| $cyclades->cy_port_socket()
|
||||
|| {};
|
||||
my $cy_p_tty
|
||||
= $cyclades->acs_port_tty()
|
||||
|| $cyclades->acs8k_port_tty()
|
||||
|| $cyclades->cy5k_port_tty()
|
||||
|| $cyclades->cy_port_tty()
|
||||
|| {};
|
||||
|
||||
my %if;
|
||||
foreach my $iid ( keys %$i_descr ) {
|
||||
@@ -166,8 +312,18 @@ sub i_speed {
|
||||
my $partial = shift;
|
||||
|
||||
my $i_speed = $cyclades->orig_i_speed($partial) || {};
|
||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
||||
my $cy_p_speed = $cyclades->cy_port_speed() || {};
|
||||
my $cy_index
|
||||
= $cyclades->acs_port_socket()
|
||||
|| $cyclades->acs8k_port_socket()
|
||||
|| $cyclades->cy5k_port_socket()
|
||||
|| $cyclades->cy_port_socket()
|
||||
|| {};
|
||||
my $cy_p_speed
|
||||
= $cyclades->acs_port_speed()
|
||||
|| $cyclades->acs8k_port_speed()
|
||||
|| $cyclades->cy5k_port_speed()
|
||||
|| $cyclades->cy_port_speed()
|
||||
|| {};
|
||||
|
||||
my %i_speed;
|
||||
foreach my $iid ( keys %$i_speed ) {
|
||||
@@ -195,8 +351,18 @@ sub i_up {
|
||||
my $partial = shift;
|
||||
|
||||
my $i_up = $cyclades->orig_i_up($partial) || {};
|
||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
||||
my $cy_p_up = $cyclades->cy_port_cd() || {};
|
||||
my $cy_index
|
||||
= $cyclades->acs_port_socket()
|
||||
|| $cyclades->acs8k_port_socket()
|
||||
|| $cyclades->cy5k_port_socket()
|
||||
|| $cyclades->cy_port_socket()
|
||||
|| {};
|
||||
my $cy_p_up
|
||||
= $cyclades->acs_port_cd()
|
||||
|| $cyclades->acs8k_port_cd()
|
||||
|| $cyclades->cy5k_port_cd()
|
||||
|| $cyclades->cy_port_cd()
|
||||
|| {};
|
||||
|
||||
my %i_up;
|
||||
foreach my $iid ( keys %$i_up ) {
|
||||
@@ -224,8 +390,18 @@ sub i_description {
|
||||
my $partial = shift;
|
||||
|
||||
my $i_desc = $cyclades->orig_i_description($partial) || {};
|
||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
||||
my $cy_p_desc = $cyclades->cy_port_name() || {};
|
||||
my $cy_index
|
||||
= $cyclades->acs_port_socket()
|
||||
|| $cyclades->acs8k_port_socket()
|
||||
|| $cyclades->cy5k_port_socket()
|
||||
|| $cyclades->cy_port_socket()
|
||||
|| {};
|
||||
my $cy_p_desc
|
||||
= $cyclades->acs_port_name()
|
||||
|| $cyclades->acs8k_port_name()
|
||||
|| $cyclades->cy5k_port_name()
|
||||
|| $cyclades->cy_port_name()
|
||||
|| {};
|
||||
|
||||
my %descr;
|
||||
foreach my $iid ( keys %$i_desc ) {
|
||||
@@ -253,8 +429,18 @@ sub i_name {
|
||||
my $partial = shift;
|
||||
|
||||
my $i_name = $cyclades->orig_i_name($partial) || {};
|
||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
||||
my $cy_p_desc = $cyclades->cy_port_name() || {};
|
||||
my $cy_index
|
||||
= $cyclades->acs_port_socket()
|
||||
|| $cyclades->acs8k_port_socket()
|
||||
|| $cyclades->cy5k_port_socket()
|
||||
|| $cyclades->cy_port_socket()
|
||||
|| {};
|
||||
my $cy_p_desc
|
||||
= $cyclades->acs_port_name()
|
||||
|| $cyclades->acs8k_port_name()
|
||||
|| $cyclades->cy5k_port_name()
|
||||
|| $cyclades->cy_port_name()
|
||||
|| {};
|
||||
|
||||
my %i_name;
|
||||
foreach my $iid ( keys %$i_name ) {
|
||||
@@ -282,7 +468,8 @@ __END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades terminal servers
|
||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades/Avocent terminal
|
||||
servers
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -309,7 +496,7 @@ Eric Miller
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Provides abstraction to the configuration information obtainable from a
|
||||
Cyclades device through SNMP.
|
||||
Cyclades/Avocent device through SNMP.
|
||||
|
||||
For speed or debugging purposes you can call the subclass directly, but not
|
||||
after determining a more specific class using the method above.
|
||||
@@ -334,6 +521,14 @@ my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
|
||||
|
||||
=item F<CYCLADES-ACS-INFO-MIB>
|
||||
|
||||
=item F<CYCLADES-ACS5K-SYS-MIB>
|
||||
|
||||
=item F<CYCLADES-ACS5K-CONF-MIB>
|
||||
|
||||
=item F<CYCLADES-ACS5K-INFO-MIB>
|
||||
|
||||
=item F<ACS6000-MIB>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Inherited MIBs
|
||||
@@ -348,11 +543,11 @@ These are methods that return scalar value from SNMP
|
||||
|
||||
=item $cyclades->os_ver()
|
||||
|
||||
(C<cyACSversion>)
|
||||
(C<acsFirmwareVersion>), (C<cyACS5Kversion>), or (C<cyACSversion>)
|
||||
|
||||
=item $cyclades->serial()
|
||||
|
||||
(C<cyACSDevId>)
|
||||
(C<acsSerialNumber>), (C<cyACS5KDevId>), or (C<cyACSDevId>)
|
||||
|
||||
=item $cyclades->root_ip()
|
||||
|
||||
@@ -360,11 +555,11 @@ These are methods that return scalar value from SNMP
|
||||
|
||||
=item $cyclades->ps1_status()
|
||||
|
||||
(C<cyACSPw1>)
|
||||
(C<acsPowerSupplyStatePw1>), (C<cyACS5KPw1>), or (C<cyACSPw1>)
|
||||
|
||||
=item $cyclades->ps2_status()
|
||||
|
||||
(C<cyACSPw2>)
|
||||
(C<acsPowerSupplyStatePw2>), (C<cyACS5KPw2>), or (C<cyACSPw2>)
|
||||
|
||||
=back
|
||||
|
||||
@@ -379,15 +574,16 @@ to poll for an ARP cache so turn off reported Layer 2 and Layer 3.
|
||||
|
||||
=item $cyclades->vendor()
|
||||
|
||||
Returns 'cyclades'
|
||||
Returns 'vertiv'
|
||||
|
||||
=item $cyclades->os()
|
||||
|
||||
Returns 'cyclades'
|
||||
Returns 'avocent'
|
||||
|
||||
=item $cyclades->model()
|
||||
|
||||
Returns lower case (C<cyACSpname>)
|
||||
Returns lower case (C<cyACSpname>) or (C<acsProductModel>) if it exists
|
||||
otherwise tries to reference $cyclades->id() to one of the MIBs listed above
|
||||
|
||||
=back
|
||||
|
||||
@@ -409,31 +605,34 @@ to a hash.
|
||||
Returns reference to map of IIDs to Interface index.
|
||||
|
||||
Extended to include serial ports. Serial ports are indexed with the
|
||||
alternative labeling system for the serial port, the listening socket port
|
||||
C<cySPortSocketPort> to avoid conflicts with C<ifIndex>.
|
||||
alternative labeling system for the serial port, either the listening socket
|
||||
port C<cySPortSocketPort> or C<acsSerialPortTableDeviceName> name to avoid
|
||||
conflicts with C<ifIndex>.
|
||||
|
||||
=item $cyclades->interfaces()
|
||||
|
||||
Returns reference to map of IIDs to physical ports. Extended to include
|
||||
serial ports, C<cyISPortTty>.
|
||||
serial ports, C<acsSerialPortTableDeviceName> or C<cyISPortTty>.
|
||||
|
||||
=item $cyclades->i_speed()
|
||||
|
||||
Returns interface speed. Extended to include serial ports, C<cyISPortSpeed>.
|
||||
Returns interface speed. Extended to include serial ports,
|
||||
C<acsSerialPortTableComSpeed> or C<cyISPortSpeed>.
|
||||
|
||||
=item $cyclades->i_up()
|
||||
|
||||
Returns link status for each port. Extended to include serial ports,
|
||||
C<cyISPortSigCD>.
|
||||
C<acsSerialPortTableSignalStateDCD> or C<cyISPortSigCD>.
|
||||
|
||||
=item $cyclades->i_description()
|
||||
|
||||
Returns description of each port. Extended to include serial ports,
|
||||
C<cyISPortName>.
|
||||
C<acsSerialPortTableName> or C<cyISPortName>.
|
||||
|
||||
=item $cyclades->i_name()
|
||||
|
||||
Returns name of each port. Extended to include serial ports, C<cyISPortName>.
|
||||
Returns name of each port. Extended to include serial ports,
|
||||
C<acsSerialPortTableName> or C<cyISPortName>.
|
||||
|
||||
=back
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
@@ -118,24 +118,18 @@ sub vendor {
|
||||
sub serial {
|
||||
my $l2 = shift;
|
||||
|
||||
my $serial1 = $l2->serial1();
|
||||
my $e_descr = $l2->e_descr() || {};
|
||||
my $e_serial = $l2->e_serial() || {};
|
||||
|
||||
my $serial2 = $e_serial->{1} || undef;
|
||||
my $chassis = $e_descr->{1} || undef;
|
||||
|
||||
# precedence
|
||||
# serial2,chassis parse,serial1
|
||||
return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
|
||||
|
||||
if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
|
||||
return $1;
|
||||
my $entity_serial = $l2->entity_derived_serial();
|
||||
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||
return $entity_serial;
|
||||
}
|
||||
|
||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
||||
my $serial1 = $l2->serial1();
|
||||
if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
|
||||
return $serial1;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
sub interfaces {
|
||||
@@ -262,7 +256,7 @@ Tries to discover the vendor from $l2->model() and $l2->description()
|
||||
|
||||
=item $l2->serial()
|
||||
|
||||
Returns serial number if available through SNMP
|
||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
|
||||
|
||||
=back
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
@@ -49,6 +49,7 @@ sub serial {
|
||||
return $e_serial->{$e};
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
@@ -61,6 +62,7 @@ sub os_ver {
|
||||
return $e_swver->{$e};
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
@@ -76,6 +78,7 @@ sub model {
|
||||
} else {
|
||||
return $descr;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -11,7 +11,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||
# table by the serial() function.
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
|
||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||
@@ -60,7 +60,6 @@ $VERSION = '3.41';
|
||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||
%SNMP::Info::CDP::GLOBALS,
|
||||
'serial' => 'entPhysicalSerialNum.1',
|
||||
'descr' => 'sysDescr',
|
||||
'ps1_type' => 'cpoePdCurrentPowerSource'
|
||||
);
|
||||
|
||||
@@ -136,7 +135,7 @@ sub interfaces {
|
||||
# Tag on e_descr.1
|
||||
sub description {
|
||||
my $aironet = shift;
|
||||
my $descr = $aironet->descr();
|
||||
my $descr = $aironet->SUPER::description();
|
||||
my $e_descr = $aironet->e_descr();
|
||||
|
||||
$descr = "$e_descr->{1} $descr" if defined $e_descr->{1};
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||
|
||||
@@ -73,6 +73,7 @@ sub os_ver {
|
||||
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub model {
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
||||
@@ -229,7 +229,7 @@ sub index_factor {
|
||||
if ( ( $model =~ /(470)/ )
|
||||
or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
|
||||
$index_factor = 128
|
||||
if ( ( $model =~ /(5[56]\d\d)|VSP/ )
|
||||
if ( ( $model =~ /(5[56]\d\d)|VSP|4950|59100/ )
|
||||
and ( $os_ver >= 6 ) );
|
||||
|
||||
return $index_factor;
|
||||
|
||||
@@ -48,7 +48,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
@@ -200,6 +200,8 @@ sub set_i_duplex_admin {
|
||||
|
||||
my $iid = $c1900->c1900_p_ifindex($port);
|
||||
|
||||
return 0 unless $iid->{$port};
|
||||
|
||||
$duplex = lc($duplex);
|
||||
|
||||
return 0 unless defined $duplexes{$duplex};
|
||||
@@ -212,17 +214,17 @@ sub i_vlan {
|
||||
my $partial = shift;
|
||||
|
||||
# Overlap allows more than one VLAN per port. Unable to determine default
|
||||
my $overlap
|
||||
my $overlap
|
||||
= $c1900->bridgeGroupAllowMembershipOverlap()
|
||||
|| $c1900->vlanAllowMembershipOverlap()
|
||||
|| 'disabled';
|
||||
|
||||
if ( $overlap eq 'enabled' ) {
|
||||
return;
|
||||
return {};
|
||||
}
|
||||
|
||||
my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
|
||||
|| $c1900->vlanMemberPortOfVlan();
|
||||
|| $c1900->vlanMemberPortOfVlan() || {};
|
||||
|
||||
my $i_pvid = {};
|
||||
foreach my $idx ( keys %$member_of ) {
|
||||
@@ -244,7 +246,7 @@ sub i_vlan_membership {
|
||||
my $partial = shift;
|
||||
|
||||
my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
|
||||
|| $c1900->vlanMemberPortOfVlan();
|
||||
|| $c1900->vlanMemberPortOfVlan() || {};
|
||||
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $idx ( keys %$member_of ) {
|
||||
@@ -261,7 +263,7 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged { return; }
|
||||
sub i_vlan_membership_untagged { return {}; }
|
||||
|
||||
sub bp_index {
|
||||
my $c1900 = shift;
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2::Cisco;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::Cisco::GLOBALS,
|
||||
@@ -128,25 +128,24 @@ sub i_speed_admin {
|
||||
my $c2900 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my %i_speed_admin;
|
||||
my $p_port = $c2900->p_port() || {};
|
||||
my $interfaces = $c2900->interfaces($partial);
|
||||
my $c2900_p_index = $c2900->c2900_p_index() || {};
|
||||
my $c2900_p_admin = $c2900->c2900_p_speed_admin();
|
||||
|
||||
my %reverse_2900 = reverse %$c2900_p_index;
|
||||
my $c2900_p_speed
|
||||
= $c2900->c2900_p_speed_admin( $reverse_2900{$partial} );
|
||||
|
||||
my %speeds = (
|
||||
'autoDetect' => 'auto',
|
||||
's10000000' => '10 Mbps',
|
||||
's100000000' => '100 Mbps',
|
||||
);
|
||||
|
||||
%i_speed_admin
|
||||
= map { $c2900_p_index->{$_} => $speeds{ $c2900_p_speed->{$_} } }
|
||||
keys %$c2900_p_index;
|
||||
my %i_speed_admin;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
my $port_2900 = $reverse_2900{$if};
|
||||
next unless defined $port_2900;
|
||||
my $speed = $c2900_p_admin->{$port_2900};
|
||||
next unless defined $speed;
|
||||
|
||||
$speed = 'auto' if $speed eq 'autoDetect';
|
||||
$speed = '10 Mbps' if $speed eq 's10000000';
|
||||
$speed = '100 Mbps' if $speed eq 's100000000';
|
||||
$i_speed_admin{$if} = $speed;
|
||||
}
|
||||
return \%i_speed_admin;
|
||||
}
|
||||
|
||||
@@ -190,7 +189,7 @@ sub set_i_duplex_admin {
|
||||
return $c2900->set_c2900_p_duplex_admin( $duplexes{$duplex}, $iid );
|
||||
}
|
||||
|
||||
# Use i_descritption for port key, cuz i_name can be manually entered.
|
||||
# Use i_description for port key, cuz i_name can be manually entered.
|
||||
sub interfaces {
|
||||
my $c2900 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2::Cisco;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::Cisco::MIBS,
|
||||
@@ -70,7 +70,7 @@ $VERSION = '3.41';
|
||||
sub i_physical {
|
||||
my $cat = shift;
|
||||
|
||||
my $p_port = $cat->p_port();
|
||||
my $p_port = $cat->p_port() || {};
|
||||
|
||||
my %i_physical;
|
||||
foreach my $port ( keys %$p_port ) {
|
||||
@@ -104,8 +104,8 @@ sub os_ver {
|
||||
# Workaround for incomplete bp_index
|
||||
sub bp_index {
|
||||
my $cat = shift;
|
||||
my $p_index = $cat->p_port();
|
||||
my $b_index = $cat->p_oidx();
|
||||
my $p_index = $cat->p_port() || {};
|
||||
my $b_index = $cat->p_oidx() || {};
|
||||
|
||||
my %bp_index;
|
||||
foreach my $iid ( keys %$p_index ) {
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
|
||||
@@ -52,7 +52,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -50,7 +50,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
|
||||
@@ -50,22 +50,24 @@ use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::MAU::MIBS,
|
||||
%SNMP::Info::CDP::MIBS,
|
||||
%SNMP::Info::Aggregate::MIBS,
|
||||
'RFC1271-MIB' => 'logDescription',
|
||||
'HP-ICF-OID' => 'hpSwitch4000',
|
||||
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
||||
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
||||
'CONFIG-MIB' => 'hpSwitchConfig',
|
||||
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
|
||||
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
|
||||
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
|
||||
'SEMI-MIB' => 'hpHttpMgSerialNumber',
|
||||
'RFC1271-MIB' => 'logDescription',
|
||||
'HP-ICF-OID' => 'hpSwitch4000',
|
||||
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
||||
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
||||
'CONFIG-MIB' => 'hpSwitchConfig',
|
||||
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
|
||||
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
|
||||
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
|
||||
'SEMI-MIB' => 'hpHttpMgSerialNumber',
|
||||
'HP-SWITCH-PL-MIB' => 'hpSwitchProliant',
|
||||
'BLADETYPE4-NETWORK-MIB' => 'hpProLiant-GbE2c-InterconnectSwitch',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -624,6 +626,14 @@ Included in V2 mibs from Cisco
|
||||
|
||||
=item F<HP-ICF-POE-MIB>
|
||||
|
||||
=item F<HP-ICF-CHASSIS>
|
||||
|
||||
=item F<SEMI-MIB>
|
||||
|
||||
=item F<HP-SWITCH-PL-MIB>
|
||||
|
||||
=item F<BLADETYPE4-NETWORK-MIB>
|
||||
|
||||
=back
|
||||
|
||||
The last four MIBs listed are from HP and can be found at
|
||||
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -66,6 +66,7 @@ sub os_ver {
|
||||
if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub serial {
|
||||
@@ -75,7 +76,7 @@ sub serial {
|
||||
my $str = substr($1,8,10);
|
||||
return $str;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
sub vendor {
|
||||
return 'Kentrox';
|
||||
@@ -87,6 +88,7 @@ sub model {
|
||||
if ( $descr =~ /^(\S+\s\S+)/){
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Bridge;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -49,6 +49,7 @@ $VERSION = '3.41';
|
||||
'NTWS-CLIENT-SESSION-MIB' => 'ntwsClSessTotalSessions',
|
||||
'NTWS-SYSTEM-MIB' => 'ntwsSysCpuAverageLoad',
|
||||
'NTWS-BASIC-MIB' => 'ntwsVersionString',
|
||||
'NTWS-AP-CONFIG-MIB' => 'ntwsApConfServProfBeaconEnabled',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||
# table by the serial() function.
|
||||
@@ -89,7 +89,7 @@ sub serial {
|
||||
|
||||
# Without Enitity-MIB, we've got to work our way through a bunch of
|
||||
# different locales...
|
||||
return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;;
|
||||
return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;;
|
||||
return 'none';
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ sub interfaces {
|
||||
return $interfaces;
|
||||
}
|
||||
|
||||
# these seem to work for GSM models but not GS
|
||||
# these seem to work for GSM/FSM models but not GS
|
||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
|
||||
sub os_ver {
|
||||
my $netgear = shift;
|
||||
@@ -148,7 +148,7 @@ sub os_ver {
|
||||
my $os_ver = $netgear->e_swver();
|
||||
return $os_ver->{$index} if defined $os_ver;
|
||||
}
|
||||
return $netgear->ng_gsmosver() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;
|
||||
return $netgear->ng_gsmosver() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;
|
||||
return $netgear->ng_fsosver() if defined $netgear->model and $netgear->model =~ m/FS\d/i;
|
||||
}
|
||||
|
||||
|
||||
253
lib/SNMP/Info/Layer2/Nexans.pm
Normal file
253
lib/SNMP/Info/Layer2/Nexans.pm
Normal file
@@ -0,0 +1,253 @@
|
||||
# SNMP::Info::Layer2::Nexans
|
||||
#
|
||||
# Copyright (c) 2018 Christoph Neuhaus
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the University of California, Santa Cruz nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package SNMP::Info::Layer2::Nexans;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer2;
|
||||
|
||||
@SNMP::Info::Layer2::Nexans::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Nexans::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
'NEXANS-MIB' => 'nexansANS',
|
||||
'NEXANS-BM-MIB' => 'infoDescr',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
'mac' => 'adminAgentPhysAddress.0',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer2::FUNCS,
|
||||
'i_duplex' => 'portLinkState', #NEXANS-BM-MIB
|
||||
'i_duplex_admin' => 'portSpeedDuplexSetup', #NEXANS-BM-MIB
|
||||
'nexans_i_name' => 'ifAlias',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer2::MUNGE,
|
||||
'i_duplex' => \&munge_i_duplex,
|
||||
'i_duplex_admin' => \&munge_i_duplex_admin,
|
||||
);
|
||||
|
||||
sub munge_i_duplex {
|
||||
my $duplex = shift;
|
||||
return unless defined $duplex;
|
||||
$duplex = 'half' if $duplex =~/Hdx/;
|
||||
$duplex = 'full' if $duplex =~/Fdx/;
|
||||
return $duplex;
|
||||
}
|
||||
|
||||
sub munge_i_duplex_admin {
|
||||
my $duplex_admin = shift;
|
||||
return unless defined $duplex_admin;
|
||||
$duplex_admin = 'full' if $duplex_admin =~/Fdx/;
|
||||
$duplex_admin = 'half' if $duplex_admin =~/Hdx/;
|
||||
$duplex_admin = 'auto' if $duplex_admin =~/autoneg/;
|
||||
return $duplex_admin;
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
return 'nexans';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $nexans = shift;
|
||||
my $id = $nexans->id() || '';
|
||||
my $model = &SNMP::translateObj($id);
|
||||
return $id unless defined $model;
|
||||
return $model;
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'nexanos';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $nexans = shift;
|
||||
my $ver = $nexans->infoMgmtFirmwareVersion() || '';
|
||||
return $ver;
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $nexans = shift;
|
||||
return $nexans->infoSeriesNo();
|
||||
}
|
||||
|
||||
sub i_name {
|
||||
my $nexans = shift;
|
||||
my $return = $nexans->nexans_i_name();
|
||||
# replace i_name where possible
|
||||
foreach my $iid ( keys %$return ) {
|
||||
next unless $return->{$iid} eq "";
|
||||
$return->{$iid} = $iid;
|
||||
}
|
||||
return \%$return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::Nexans - SNMP Interface to Nexans network devices.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Christoph Neuhaus
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
|
||||
my $nexans = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myswitch',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $nexans->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Abstraction subclass for Nexans network devices.
|
||||
|
||||
tested devices:
|
||||
|
||||
fiberSwitch100BmPlus version 3.61
|
||||
gigaSwitch641DeskSfpTp version 3.68, 4.14W
|
||||
gigaSwitchV3d2SfpSfp version 3.68, 4.02, 4.02B, 4.10C, 4,14W
|
||||
|
||||
For speed or debugging purposes you can call the subclass directly, but not
|
||||
after determining a more specific class using the method above.
|
||||
|
||||
my $nexans = new SNMP::Info::Layer2::Nexans(...);
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item F<NEXANS>
|
||||
|
||||
=item F<NEXANS-BM>
|
||||
|
||||
=item Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $nexans->vendor()
|
||||
|
||||
Returns 'nexans'
|
||||
|
||||
=item $nexans->model()
|
||||
|
||||
Returns the chassis model.
|
||||
|
||||
=item $nexans->os()
|
||||
|
||||
Returns 'nexanos'
|
||||
|
||||
=item $nexans->os_ver()
|
||||
|
||||
Returns the software version.
|
||||
|
||||
=item $nexans->serial()
|
||||
|
||||
Returns the chassis serial number.
|
||||
|
||||
(C<infoSeriesNo>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $nexans->i_name()
|
||||
|
||||
Returns reference to map of IIDs to human-set port name.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
=head1 Data Munging Callback Subroutines
|
||||
|
||||
=over
|
||||
|
||||
=item munge_i_duplex()
|
||||
|
||||
Converts duplex returned by C<portLinkState> to either 'full' or 'half'.
|
||||
|
||||
=item munge_i_duplex_admin()
|
||||
|
||||
Converts duplex returned by C<portSpeedDuplexSetup> to either 'full', 'half',
|
||||
or 'auto'.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
@@ -41,13 +41,11 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
%SNMP::Info::IEEE802dot11::MIBS,
|
||||
|
||||
#'ORiNOCO-MIB' => 'orinoco',
|
||||
);
|
||||
|
||||
%GLOBALS
|
||||
@@ -56,12 +54,6 @@ $VERSION = '3.41';
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer2::FUNCS,
|
||||
%SNMP::Info::IEEE802dot11::FUNCS,
|
||||
|
||||
# ORiNOCO-MIB:oriWirelessIfPropertiesTable
|
||||
#'ori_ssid' => 'oriWirelessIfNetworkName',
|
||||
#'ori_channel' => 'oriWirelessIfChannel',
|
||||
#'ori_closed_sys' => 'oriWirelessIfClosedSystem',
|
||||
# ORiNOCO-MIB:oriSystemInvMgmtComponentTable
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
||||
@@ -165,22 +157,6 @@ sub interfaces {
|
||||
return \%interfaces;
|
||||
}
|
||||
|
||||
#sub i_ssidbcast {
|
||||
# my $orinoco = shift;
|
||||
# my $partial = shift;
|
||||
#
|
||||
# my $bcast = $orinoco->ori_closed_sys($partial) || {};
|
||||
#
|
||||
# my %i_ssidbcast;
|
||||
# foreach my $iid (keys %$bcast){
|
||||
# my $bc = $bcast->{$iid};
|
||||
# next unless defined $bc;
|
||||
#
|
||||
# $i_ssidbcast{$iid} = $bc;
|
||||
# }
|
||||
# return \%i_ssidbcast;
|
||||
#}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
|
||||
182
lib/SNMP/Info/Layer2/Sixnet.pm
Normal file
182
lib/SNMP/Info/Layer2/Sixnet.pm
Normal file
@@ -0,0 +1,182 @@
|
||||
# SNMP::Info::Layer2::Sixnet
|
||||
#
|
||||
# Copyright (c) 2018 Eric Miller
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the University of California, Santa Cruz nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package SNMP::Info::Layer2::Sixnet;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer2;
|
||||
|
||||
@SNMP::Info::Layer2::Sixnet::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Sixnet::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
'os_ver' => 'firmwareRevision',
|
||||
's_model' => 'sxid',
|
||||
'ps1_status' => 'p1status',
|
||||
'ps2_status' => 'p2status',
|
||||
);
|
||||
|
||||
%FUNCS = (%SNMP::Info::Layer2::FUNCS,);
|
||||
|
||||
%MUNGE = (%SNMP::Info::Layer2::MUNGE,);
|
||||
|
||||
|
||||
sub vendor {
|
||||
return 'sixnet';
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'sixnet';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $sixnet = shift;
|
||||
|
||||
my $s_model = $sixnet->s_model();
|
||||
return $s_model if defined $s_model;
|
||||
|
||||
my $id = $sixnet->id();
|
||||
return unless defined $id;
|
||||
|
||||
my $model = SNMP::translateObj($id);
|
||||
return $model ? $model : $id;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::Sixnet - SNMP Interface to Sixnet industrial switches
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Eric Miller
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
my $sixnet = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myswitch',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $sixnet->class();
|
||||
print " Using device sub class : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
SNMP::Info::Layer2::Sixnet is a subclass of SNMP::Info that provides an
|
||||
interface to Sixnet industrial switches.
|
||||
|
||||
For speed or debugging purposes you can call the subclass directly, but not
|
||||
after determining a more specific class using the method above.
|
||||
|
||||
my $sixnet = new SNMP::Info::Layer2::Sixnet(...);
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item F<SIXNET-MIB>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Inherited MIBs
|
||||
|
||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $sixnet->vendor()
|
||||
|
||||
Returns 'sixnet'
|
||||
|
||||
=item $sixnet->os()
|
||||
|
||||
Returns 'sixnet'
|
||||
|
||||
=item $sixnet->os_ver()
|
||||
|
||||
Returns the software version returned by C<firmwareRevision>
|
||||
|
||||
=item $sixnet->model()
|
||||
|
||||
Returns model type. Returns C<sxid> if it exists, otherwise cross references
|
||||
$sixnet->id() with the F<SIXNET-MIB>.
|
||||
|
||||
=item $sixnet->ps1_status()
|
||||
|
||||
(C<p1status>)
|
||||
|
||||
=item $sixnet->ps2_status()
|
||||
|
||||
(C<p2status>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer2
|
||||
|
||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -51,6 +51,7 @@ $VERSION = '3.41';
|
||||
'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB' => 'trpzClSessTotalSessions',
|
||||
'TRAPEZE-NETWORKS-SYSTEM-MIB' => 'trpzSysCpuAverageLoad',
|
||||
'TRAPEZE-NETWORKS-BASIC-MIB' => 'trpzVersionString',
|
||||
'TRAPEZE-NETWORKS-AP-CONFIG-MIB' => 'trpzApConfServProfBeaconEnabled',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
|
||||
@@ -18,7 +18,7 @@ use SNMP::Info::Layer3; # only used in sub mac()
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -207,6 +207,50 @@ sub mac {
|
||||
|
||||
}
|
||||
|
||||
sub interfaces {
|
||||
my $netgear = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $netgear->i_index($partial) || {};
|
||||
my $i_descr = $netgear->i_description($partial) || {};
|
||||
my $return = {};
|
||||
|
||||
foreach my $iid ( keys %$i_descr ) {
|
||||
# Slot: 0 Port: 4 Gigabit - Level
|
||||
if ($i_descr->{$iid} =~ m/([0-9]+)[^0-9]+([0-9]+)/) {
|
||||
$return->{$iid} = $1 .'/'. $2;
|
||||
next;
|
||||
}
|
||||
# Link Aggregate 4
|
||||
if ($i_descr->{$iid} =~ m/Link Aggregate (\d+)/) {
|
||||
$return->{$iid} = '3/'. $1;
|
||||
next;
|
||||
}
|
||||
# else
|
||||
$return->{$iid} = $i_descr->{$iid};
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l2 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l2->interfaces($partial) || {};
|
||||
my $i_descr = $l2->i_description($partial) || {};
|
||||
|
||||
my %i_ignore;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
|
||||
# CPU Interface
|
||||
if ( $i_descr->{$if} =~ /CPU Interface/i ) {
|
||||
$i_ignore{$if}++;
|
||||
}
|
||||
}
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -308,6 +352,20 @@ See L<SNMP::Info::IEEE802dot11/"GLOBALS"> for details.
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $ubiquiti->interfaces()
|
||||
|
||||
Uses the i_name() field.
|
||||
|
||||
=item $ubiquiti->i_ignore()
|
||||
|
||||
Ignores interfaces with "CPU Interface" in them.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
@@ -39,14 +39,14 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer2::FUNCS,
|
||||
'ip_adresses' => 'ipAdEntAddr',
|
||||
'ip_addresses' => 'ipAdEntAddr',
|
||||
'i_name' => 'ifDescr',
|
||||
'i_description' => 'adslLineConfProfile',
|
||||
);
|
||||
@@ -58,7 +58,7 @@ $VERSION = '3.41';
|
||||
|
||||
sub layers {
|
||||
my $zyxel = shift;
|
||||
my $layers = $zyxel->layers();
|
||||
my $layers = $zyxel->SUPER::layers();
|
||||
return $layers if defined $layers;
|
||||
|
||||
# If these don't claim to have any layers, so we'll give them 1+2
|
||||
@@ -102,7 +102,9 @@ sub ip {
|
||||
my $ip_hash = $zyxel->ip_addresses();
|
||||
my $found_ip;
|
||||
|
||||
foreach my $ip ( keys %{$ip_hash} ) {
|
||||
# Since hashes are random add sort so we get the same address each time
|
||||
# if there happens to be more than one. Will return highest numbered address
|
||||
foreach my $ip ( sort keys %{$ip_hash} ) {
|
||||
$found_ip = $ip
|
||||
if ( defined $ip
|
||||
and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ );
|
||||
|
||||
@@ -53,7 +53,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -194,32 +194,18 @@ sub root_ip {
|
||||
sub serial {
|
||||
my $l3 = shift;
|
||||
|
||||
my $serial1 = $l3->serial1();
|
||||
my $e_parent = $l3->e_parent() || {};
|
||||
my $e_class = $l3->e_class() || {};
|
||||
|
||||
foreach my $iid ( keys %$e_parent ) {
|
||||
my $parent = $e_parent->{$iid};
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Only consider serial numbers for entries without a parent, or if they are of type "chassis"
|
||||
if ( $parent eq '0' or $class eq 'chassis') {
|
||||
my $serial = $l3->e_serial($iid);
|
||||
if ( $serial && $serial->{$iid} ) {
|
||||
return $serial->{$iid};
|
||||
}
|
||||
else {
|
||||
my $descr = $l3->e_descr($iid);
|
||||
if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i )
|
||||
{
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
}
|
||||
my $entity_serial = $l3->entity_derived_serial();
|
||||
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||
return $entity_serial;
|
||||
}
|
||||
|
||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
||||
my $serial1 = $l3->serial1();
|
||||
if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
|
||||
return $serial1;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
# $l3->model() - the sysObjectID returns an IID to an entry in
|
||||
@@ -493,8 +479,7 @@ Removes 'cisco' from cisco devices for readability.
|
||||
|
||||
=item $l3->serial()
|
||||
|
||||
Tries to cull a serial number from F<ENTITY-MIB>, description, and
|
||||
F<OLD-CISCO->... MIB.
|
||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
|
||||
|
||||
=item $l3->vendor()
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -69,8 +69,8 @@ $VERSION = '3.41';
|
||||
'bp_index2' => 'dot1dBasePortIfIndex',
|
||||
|
||||
# AWC Interface Table (awcIfTable)
|
||||
'awc_default_mac' => 'awcIfDefaultPhyAddress',
|
||||
'awc_mac' => 'awcIfPhyAddress',
|
||||
'awc_default_mac' => 'awcIfDefaultPhysAddress',
|
||||
'awc_mac' => 'awcIfPhysAddress',
|
||||
'awc_ip' => 'awcIfIpAddress',
|
||||
'awc_netmask' => 'awcIfIpNetMask',
|
||||
'awc_msdu' => 'awcIfMSDUMaxLength',
|
||||
@@ -364,13 +364,13 @@ Ignores ports that are of type ``rptr'' and ``lo''.
|
||||
|
||||
Gives the default MAC address of each interface.
|
||||
|
||||
C<awcIfDefaultPhyAddress>
|
||||
C<awcIfDefaultPhysAddress>
|
||||
|
||||
=item $aironet->awc_mac()
|
||||
|
||||
Gives the actual MAC address of each interface.
|
||||
|
||||
C<awcIfPhyAddress>
|
||||
C<awcIfPhysAddress>
|
||||
|
||||
=item $aironet->awc_ip()
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
||||
$int_include_vpn $fake_idx $type_class/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -48,14 +48,14 @@ use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::MAU::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::Aggregate::MIBS,
|
||||
'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
|
||||
'ARISTA-PRODUCTS-MIB' => 'aristaDCS7124S',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
||||
%MODID_MAP %PROCID_MAP/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
|
||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -47,7 +47,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# NOTE: Order creates precedence
|
||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||
@@ -96,8 +96,8 @@ sub ports {
|
||||
my $c3550 = shift;
|
||||
|
||||
my $id = $c3550->id();
|
||||
my $model = &SNMP::translateObj($id);
|
||||
if ( $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
|
||||
my $model = SNMP::translateObj($id);
|
||||
if ( defined $model && $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
|
||||
return $1;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::MAU;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MAU::MIBS,
|
||||
|
||||
@@ -51,7 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
# NOTE: Order creates precedence
|
||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||
|
||||
@@ -40,14 +40,14 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'CHECKPOINT-MIB' => 'fwProduct',
|
||||
'UCD-SNMP-MIB' => 'versionTag',
|
||||
'NET-SNMP-TC' => 'netSnmpAgentOIDs',
|
||||
'NET-SNMP-TC' => 'netSnmpAliasDomain',
|
||||
'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
|
||||
'HOST-RESOURCES-MIB' => 'hrSystem',
|
||||
);
|
||||
|
||||
@@ -55,7 +55,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -128,9 +128,14 @@ sub i_vlan {
|
||||
if ( $i_type->{$idx} eq 'l2vlan'
|
||||
|| $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} )
|
||||
{
|
||||
# Not sure where this regex came from, anchored at end?
|
||||
if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
|
||||
$i_vlan->{$idx} = $1;
|
||||
}
|
||||
# This matches 101 in 'Ethernet0.101-802.1Q vLAN subif'
|
||||
elsif ( $i_descr->{$idx} =~ /\.(\d+)-/ ) {
|
||||
$i_vlan->{$idx} = $1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $i_vlan;
|
||||
@@ -138,9 +143,10 @@ sub i_vlan {
|
||||
|
||||
sub cisco_comm_indexing {
|
||||
my $cisco = shift;
|
||||
# If we get a VTP version, it's *extremely* likely that the device needs community based indexing
|
||||
# If we get a VTP version, it's *extremely* likely that the device needs
|
||||
# community based indexing
|
||||
my $vtp = $cisco->vtp_version() || '0';
|
||||
return ($vtp ne '0');
|
||||
return $vtp ? 1 : 0;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -45,7 +45,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
||||
@@ -101,7 +101,7 @@ sub mac {
|
||||
my $i_mac = $contivity->i_mac();
|
||||
|
||||
# Return Interface MAC
|
||||
foreach my $entry ( keys %$i_mac ) {
|
||||
foreach my $entry ( sort keys %$i_mac ) {
|
||||
my $sn = $i_mac->{$entry};
|
||||
next unless $sn;
|
||||
return $sn;
|
||||
|
||||
306
lib/SNMP/Info/Layer3/Cumulus.pm
Normal file
306
lib/SNMP/Info/Layer3/Cumulus.pm
Normal file
@@ -0,0 +1,306 @@
|
||||
# SNMP::Info::Layer3::Cumulus
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (c) 2018 Bill Fenner and Oliver Gorwits
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the University of California, Santa Cruz nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package SNMP::Info::Layer3::Cumulus;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||
|
||||
@SNMP::Info::Layer3::Cumulus::ISA = qw/
|
||||
SNMP::Info::IEEE802dot3ad
|
||||
SNMP::Info::LLDP
|
||||
SNMP::Info::Layer3
|
||||
Exporter
|
||||
/;
|
||||
@SNMP::Info::Layer3::Cumulus::EXPORT_OK = qw/ agg_ports /;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||
'UCD-SNMP-MIB' => 'versionTag',
|
||||
'NET-SNMP-TC' => 'netSnmpAliasDomain',
|
||||
'HOST-RESOURCES-MIB' => 'hrSystem',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'netsnmp_vers' => 'versionTag',
|
||||
'hrSystemUptime' => 'hrSystemUptime',
|
||||
'chassis' => 'entPhysicalDescr.1',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer3::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||
);
|
||||
|
||||
sub vendor { return 'Cumulus Networks' }
|
||||
|
||||
sub os { return 'cumulus' }
|
||||
|
||||
sub os_ver {
|
||||
my $netsnmp = shift;
|
||||
my $descr = $netsnmp->description();
|
||||
|
||||
# STRING: "Cumulus Linux version 3.5.1 running on innotek GmbH VirtualBox"
|
||||
return $1 if ( $descr =~ /^Cumulus Linux.+(\d+\.\d+\.\d+)\s/ );
|
||||
return;
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $netsnmp = shift;
|
||||
my $chassis = $netsnmp->chassis();
|
||||
|
||||
# STRING: "Cumulus Networks VX Chassis"
|
||||
return $1 if ( $chassis =~ /^Cumulus Networks\s+(.+)/ );
|
||||
return $netsnmp->SUPER::model();
|
||||
}
|
||||
|
||||
# sysUptime gives us the time since the SNMP daemon has restarted,
|
||||
# so return the system uptime since that's probably what the user
|
||||
# wants. (Caution: this could cause trouble if using
|
||||
# sysUptime-based discontinuity timers or other TimeStamp
|
||||
# objects.
|
||||
sub uptime {
|
||||
my $netsnmp = shift;
|
||||
my $uptime;
|
||||
|
||||
$uptime = $netsnmp->hrSystemUptime();
|
||||
return $uptime if defined $uptime;
|
||||
|
||||
return $netsnmp->SUPER::uptime();
|
||||
}
|
||||
|
||||
# ifDescr is the same for all interfaces in a class, but the ifName is
|
||||
# unique, so let's use that for port name. If all else fails,
|
||||
# concatentate ifDesc and ifIndex.
|
||||
# (code from SNMP/Info/Layer2/Netgear.pm)
|
||||
sub interfaces {
|
||||
my $netsnmp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $netsnmp->i_index($partial) || {};
|
||||
my $i_descr = $netsnmp->i_description($partial) || {};
|
||||
my $i_name = $netsnmp->i_name($partial);
|
||||
my $i_isset = ();
|
||||
# Replace the description with the ifName field, if set
|
||||
foreach my $iid ( keys %$i_name ) {
|
||||
my $name = $i_name->{$iid};
|
||||
next unless defined $name;
|
||||
if (defined $name and $name !~ /^\s*$/) {
|
||||
$interfaces->{$iid} = $name;
|
||||
$i_isset->{$iid} = 1;
|
||||
}
|
||||
}
|
||||
# Replace the Index with the ifDescr field, appended with index
|
||||
# number, to deal with devices with non-unique ifDescr.
|
||||
foreach my $iid ( keys %$i_descr ) {
|
||||
my $port = $i_descr->{$iid} . '-' . $iid;
|
||||
next unless defined $port;
|
||||
next if (defined $i_isset->{$iid} and $i_isset->{$iid} == 1);
|
||||
$interfaces->{$iid} = $port;
|
||||
}
|
||||
|
||||
return $interfaces;
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l3 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l3->interfaces($partial) || {};
|
||||
|
||||
my %i_ignore;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
|
||||
# vlan1@br0 or peerlink.4094@peerlink
|
||||
if ( $interfaces->{$if} =~ /@/i ) {
|
||||
$i_ignore{$if}++;
|
||||
}
|
||||
}
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
sub agg_ports { return agg_ports_lag(@_) }
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::Cumulus - SNMP Interface to Cumulus Networks Devices
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Oliver Gorwits - based on Layer3::NetSNMP implementation
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $cumulus = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $cumulus->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Cumulus Networks devices
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item F<UCD-SNMP-MIB>
|
||||
|
||||
=item F<NET-SNMP-TC>
|
||||
|
||||
=item F<HOST-RESOURCES-MIB>
|
||||
|
||||
=item Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
||||
|
||||
See L<SNMP::Info::LLDP> for its own MIB requirements.
|
||||
|
||||
See L<SNMP::Info::IEEE802dot3ad> for its own MIB requirements.
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $cumulus->vendor()
|
||||
|
||||
Returns 'Cumulus Networks'.
|
||||
|
||||
=item $cumulus->os()
|
||||
|
||||
Returns 'cumulus'.
|
||||
|
||||
=item $cumulus->os_ver()
|
||||
|
||||
Returns the software version extracted from C<sysDescr>.
|
||||
|
||||
=item $cumulus->uptime()
|
||||
|
||||
Returns the system uptime instead of the agent uptime.
|
||||
NOTE: discontinuity timers and other Time Stamp based objects
|
||||
are based on agent uptime, so use orig_uptime().
|
||||
|
||||
=item $l3->model()
|
||||
|
||||
Returns the chassis type.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::IEEE802dot3ad
|
||||
|
||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||
|
||||
=head1 TABLE ENTRIES
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $cumulus->interfaces()
|
||||
|
||||
Uses the i_name() field.
|
||||
|
||||
=item $cumulus->i_ignore()
|
||||
|
||||
Ignores interfaces with an "@" in them.
|
||||
|
||||
=item C<agg_ports>
|
||||
|
||||
Returns a HASH reference mapping from slave to master port for each member of
|
||||
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||
ifIndex of the corresponding master ports.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||
|
||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||
|
||||
=cut
|
||||
@@ -10,7 +10,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -39,8 +39,13 @@ $VERSION = '3.41';
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
'dlink_fw' => 'probeSoftwareRev',
|
||||
'dlink_hw' => 'probeHardwareRev',
|
||||
'dlink_stp_i_root_port' => 'MSTP_MIB__swMSTPInstRootPort',
|
||||
'dlink_serial_no' => 'AGENT_GENERAL_MIB__agentSerialNumber',
|
||||
# Replaced with OID since these MIBs are no longer in the netdisco-mibs
|
||||
# collection. Commit reference of MIB removal in netdisco-mibs:
|
||||
# d6ec3f15861e28d220a681e7fa3b222c21664fda
|
||||
'dlink_stp_i_root_port' => '.1.3.6.1.4.1.171.12.15.2.3.1.18',
|
||||
'dlink_serial_no' => '.1.3.6.1.4.1.171.12.1.1.12',
|
||||
# TODO: hardcoded OIDs using get() in method calls below should be
|
||||
# replaced similarly and use the library getter methods
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||
|
||||
@@ -40,21 +40,23 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'RADLAN-COPY-MIB' => 'rlCopySourceLocation',
|
||||
'RADLAN-Physicaldescription-MIB' => 'rlPhdStackReorder',
|
||||
'RADLAN-rlInterfaces' => 'rlIfNumOfLoopbackPorts',
|
||||
'RADLAN-HWENVIROMENT' => 'rlEnvPhysicalDescription',
|
||||
'Dell-Vendor-MIB' => 'productIdentificationVersion',
|
||||
'DELL-REF-MIB' => 'dell6224Switch',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'os_ver' => 'productIdentificationVersion',
|
||||
'dell_os_ver' => 'productIdentificationVersion',
|
||||
'dell_id_name' => 'productIdentificationDisplayName',
|
||||
);
|
||||
|
||||
@@ -114,16 +116,22 @@ sub model {
|
||||
my $dell = shift;
|
||||
|
||||
my $name = $dell->dell_id_name();
|
||||
my $descr = $dell->description();
|
||||
my $id = $dell->id();
|
||||
|
||||
if ( defined $name and $name =~ m/(\d+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
|
||||
# Don't have a vendor MIB for D-Link
|
||||
else {
|
||||
return $descr;
|
||||
return unless defined $id;
|
||||
|
||||
my $model = SNMP::translateObj($id);
|
||||
|
||||
if (defined $model) {
|
||||
$model =~ s/^dell//;
|
||||
$model =~ s/Switch$//;
|
||||
return $model;
|
||||
}
|
||||
return $id;
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
@@ -138,19 +146,19 @@ sub os {
|
||||
return $dell->_vendor();
|
||||
}
|
||||
|
||||
sub serial {
|
||||
sub os_ver {
|
||||
my $dell = shift;
|
||||
|
||||
my $numbers = $dell->dell_serial_no();
|
||||
|
||||
foreach my $key ( keys %$numbers ) {
|
||||
my $serial = $numbers->{$key};
|
||||
return $serial if ( defined $serial and $serial !~ /^\s*$/ );
|
||||
next;
|
||||
my $entity_os = $dell->entity_derived_os_ver();
|
||||
if ( defined $entity_os and $entity_os !~ /^\s*$/ ){
|
||||
return $entity_os;
|
||||
}
|
||||
|
||||
# Last resort
|
||||
return $dell->SUPER::serial();
|
||||
my $dell_os = $dell->dell_os_ver();
|
||||
if ( defined $dell_os and $dell_os !~ /^\s*$/ ) {
|
||||
return $dell_os;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
# check all fans, and report overall status
|
||||
@@ -159,41 +167,74 @@ sub fan {
|
||||
|
||||
my $fan = $dell->dell_fan_desc() || {};
|
||||
my $state = $dell->dell_fan_state() || {};
|
||||
my @messages = ();
|
||||
|
||||
if (scalar keys %$fan) {
|
||||
my @messages = ();
|
||||
|
||||
foreach my $k (keys %$fan) {
|
||||
next if $state->{$k} and $state->{$k} eq 'normal';
|
||||
push @messages, "$fan->{$k}: $state->{$k}";
|
||||
}
|
||||
foreach my $k (keys %$fan) {
|
||||
next if $state->{$k} and $state->{$k} eq 'normal';
|
||||
push @messages, "$fan->{$k}: $state->{$k}";
|
||||
}
|
||||
|
||||
push @messages, ((scalar keys %$fan). " fans OK")
|
||||
if scalar @messages == 0;
|
||||
push @messages, ((scalar keys %$fan). " fans OK")
|
||||
if scalar @messages == 0;
|
||||
|
||||
return (join ", ", @messages);
|
||||
return (join ", ", @messages);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub _ps_status {
|
||||
my ($dell, $unit) = @_;
|
||||
sub ps1_type {
|
||||
my $dell = shift;
|
||||
|
||||
my $status = 'unknown';
|
||||
return $status if !defined $unit;
|
||||
my $src = $dell->dell_pwr_src() || {};
|
||||
|
||||
my $desc = $dell->dell_pwr_desc() || {};
|
||||
my $state = $dell->dell_pwr_state() || {};
|
||||
|
||||
foreach my $k (keys %$desc) {
|
||||
next unless $desc->{$k} and $desc->{$k} eq "ps1_unit$unit";
|
||||
return ($state->{$k} || $status);
|
||||
foreach my $k (sort keys %$src) {
|
||||
next unless $src->{$k};
|
||||
return $src->{$k};
|
||||
}
|
||||
|
||||
return $status;
|
||||
return;
|
||||
}
|
||||
|
||||
sub ps1_type { return 'internalRedundant' }
|
||||
sub ps2_type { return 'internalRedundant' }
|
||||
sub ps2_type {
|
||||
my $dell = shift;
|
||||
|
||||
sub ps1_status { return (shift)->_ps_status(1) }
|
||||
sub ps2_status { return (shift)->_ps_status(2) }
|
||||
my $src = $dell->dell_pwr_src() || {};
|
||||
|
||||
my $i = 0;
|
||||
foreach my $k (sort keys %$src) {
|
||||
$i++;
|
||||
next unless $src->{$k} and $i == 2;
|
||||
return $src->{$k};
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub ps1_status {
|
||||
my $dell = shift;
|
||||
|
||||
my $status = $dell->dell_pwr_state() || {};
|
||||
|
||||
foreach my $k (sort keys %$status) {
|
||||
next unless $status->{$k};
|
||||
return $status->{$k};
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub ps2_status {
|
||||
my $dell = shift;
|
||||
|
||||
my $status = $dell->dell_pwr_state() || {};
|
||||
|
||||
my $i = 0;
|
||||
foreach my $k (sort keys %$status) {
|
||||
$i++;
|
||||
next unless $status->{$k} and $i == 2;
|
||||
return $status->{$k};
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub interfaces {
|
||||
my $dell = shift;
|
||||
@@ -213,6 +254,23 @@ sub interfaces {
|
||||
return $i_descr;
|
||||
}
|
||||
|
||||
sub i_duplex {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $dell_duplex = $dell->dell_duplex($partial) || {};
|
||||
|
||||
my %i_duplex;
|
||||
foreach my $if ( keys %$dell_duplex ) {
|
||||
my $duplex = $dell_duplex->{$if};
|
||||
next unless defined $duplex;
|
||||
next if $duplex eq 'unknown';
|
||||
|
||||
$i_duplex{$if} = $duplex;
|
||||
}
|
||||
return \%i_duplex;
|
||||
}
|
||||
|
||||
sub i_duplex_admin {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
@@ -225,11 +283,11 @@ sub i_duplex_admin {
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
my $duplex = $dell_duplex->{$if};
|
||||
next unless defined $duplex;
|
||||
my $auto = $dell_auto->{$if} || 'false';
|
||||
my $auto = $dell_auto->{$if} || 'disabled';
|
||||
|
||||
$duplex = 'half' if ( $duplex =~ /half/i and $auto =~ /false/i );
|
||||
$duplex = 'full' if ( $duplex =~ /half/i and $auto =~ /false/i );
|
||||
$duplex = 'auto' if $auto =~ /true/i;
|
||||
$duplex = 'half' if ( $duplex eq 'half' and $auto eq 'disabled' );
|
||||
$duplex = 'full' if ( $duplex eq 'full' and $auto eq 'disabled' );
|
||||
$duplex = 'auto' if $auto eq 'enabled';
|
||||
$i_duplex_admin{$if} = $duplex;
|
||||
}
|
||||
return \%i_duplex_admin;
|
||||
@@ -241,7 +299,6 @@ sub _vendor {
|
||||
my $id = $dell->id() || 'undef';
|
||||
my %oidmap = (
|
||||
2 => 'ibm',
|
||||
171 => 'dlink',
|
||||
674 => 'dell',
|
||||
3955 => 'linksys',
|
||||
);
|
||||
@@ -251,7 +308,7 @@ sub _vendor {
|
||||
return $oidmap{$id};
|
||||
}
|
||||
else {
|
||||
return 'dlink';
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,6 +505,10 @@ Returns the map between SNMP Interface Identifier (iid) and physical port
|
||||
name. Uses name if available instead of description since descriptions are
|
||||
sometimes not unique.
|
||||
|
||||
=item $dell->i_duplex()
|
||||
|
||||
Returns reference to map of IIDs to current link duplex.
|
||||
|
||||
=item $dell->i_duplex_admin()
|
||||
|
||||
Returns reference to hash of iid to current link administrative duplex
|
||||
|
||||
205
lib/SNMP/Info/Layer3/ERX.pm
Normal file
205
lib/SNMP/Info/Layer3/ERX.pm
Normal file
@@ -0,0 +1,205 @@
|
||||
# SNMP::Info::Layer3::ERX
|
||||
#
|
||||
# Copyright (c) 2017 Rob Woodward
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the University of California, Santa Cruz nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package SNMP::Info::Layer3::ERX;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
|
||||
@SNMP::Info::Layer3::ERX::ISA = qw/
|
||||
SNMP::Info::Layer3
|
||||
Exporter
|
||||
/;
|
||||
@SNMP::Info::Layer3::ERX::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer3::MUNGE,
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
return "Juniper";
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $ERX = shift;
|
||||
my $descr = $ERX->description() || '';
|
||||
my $model = undef;
|
||||
|
||||
$model = $1 if ( $descr =~ /Juniper Networks, Inc. (.+) Edge Routing Switch/i );
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'JunOSe';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $ERX = shift;
|
||||
my $descr = $ERX->description();
|
||||
my $os_ver = undef;
|
||||
|
||||
if ( $descr =~ /Version : \((.+)\) .+:/ ) {
|
||||
$os_ver = $1;
|
||||
}
|
||||
|
||||
return $os_ver;
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l3 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l3->interfaces($partial) || {};
|
||||
|
||||
my %i_ignore;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
# lo0 etc
|
||||
if ( $interfaces->{$if} =~ /\b(inloopback|console)\d*\b/i ) {
|
||||
$i_ignore{$if}++;
|
||||
}
|
||||
}
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::ERX - SNMP Interface to ERX Layer 3 routers.
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Rob Woodward
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $ERX = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $ERX->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Juniper ERX switches
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $ERX->vendor()
|
||||
|
||||
Returns 'Juniper'.
|
||||
|
||||
=item $ERX->os()
|
||||
|
||||
Returns 'JunOSe'.
|
||||
|
||||
=item $ERX->os_ver()
|
||||
|
||||
Returns the software version extracted from C<sysDescr>.
|
||||
|
||||
=item $ERX->model()
|
||||
|
||||
Returns the hardware model extracted from C<sysDescr>.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=head1 TABLE ENTRIES
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $ERX->i_ignore()
|
||||
|
||||
Returns reference to hash. Increments value of IID if port is to be ignored.
|
||||
|
||||
Ignores InLoopback and Console interfaces
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=cut
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::EDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -43,13 +43,13 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::MAU::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'F10-PRODUCTS-MIB' => 'f10Products',
|
||||
'F10-PRODUCTS-MIB' => 'f10ESeriesProducts',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -89,7 +89,7 @@ sub os_ver {
|
||||
my $descr = $force10->description();
|
||||
my $os_ver = undef;
|
||||
|
||||
$os_ver = $1 if ( $descr =~ /Force10\s+Application\s+Software\s+Version:\s+(\S+)/s );
|
||||
$os_ver = $1 if ( $descr =~ /\s+Application\s+Software\s+Version:\s+(\S+)/s );
|
||||
|
||||
return $os_ver;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -48,7 +48,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -61,6 +61,7 @@ $VERSION = '3.41';
|
||||
'FOUNDRY-SN-STACKING-MIB' => 'snStackingOperUnitRole',
|
||||
'FOUNDRY-POE-MIB' => 'snAgentPoeGblPowerCapacityTotal',
|
||||
'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snSwGroupOperMode',
|
||||
'BROCADE-PRODUCTS-MIB' => 'brocadeProducts',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SNMP::Info::Layer3::H3C
|
||||
#
|
||||
# Copyright (c) 2012 Jeroen van Ingen
|
||||
# Copyright (c) 2018 Jeroen van Ingen
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -47,7 +47,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -71,12 +71,14 @@ $VERSION = '3.41';
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||
i_duplex_admin => 'hh3cifEthernetDuplex',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer3::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
@@ -265,4 +267,8 @@ See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||
|
||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||
|
||||
=cut
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SNMP::Info::Layer3::Huawei
|
||||
#
|
||||
# Copyright (c) 2015 Jeroen van Ingen
|
||||
# Copyright (c) 2018 Jeroen van Ingen and Eric Miller
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -32,43 +32,73 @@ package SNMP::Info::Layer3::Huawei;
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||
use SNMP::Info::IEEE802dot3ad;
|
||||
|
||||
@SNMP::Info::Layer3::Huawei::ISA = qw/
|
||||
SNMP::Info::IEEE802dot3ad
|
||||
SNMP::Info::LLDP
|
||||
SNMP::Info::Layer3
|
||||
Exporter
|
||||
/;
|
||||
@SNMP::Info::Layer3::Huawei::EXPORT_OK = qw/
|
||||
agg_ports
|
||||
/;
|
||||
SNMP::Info::IEEE802dot3ad
|
||||
SNMP::Info::Layer3
|
||||
Exporter
|
||||
/;
|
||||
@SNMP::Info::Layer3::Huawei::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.41';
|
||||
$VERSION = '3.57';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||
'HUAWEI-MIB' => 'quidway',
|
||||
'HUAWEI-MIB' => 'quidway',
|
||||
'HUAWEI-PORT-MIB' => 'hwEthernetDuplex',
|
||||
'HUAWEI-IF-EXT-MIB' => 'hwTrunkIfIndex',
|
||||
'HUAWEI-L2IF-MIB' => 'hwL2IfPortIfIndex',
|
||||
'HUAWEI-POE-MIB' => 'hwPoePower',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
);
|
||||
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, );
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||
|
||||
# HUAWEI-PORT-MIB::
|
||||
'hw_eth_speed_admin' => 'hwEthernetSpeedSet',
|
||||
'hw_eth_duplex' => 'hwEthernetDuplex',
|
||||
'hw_eth_auto' => 'hwEthernetNegotiation',
|
||||
|
||||
# HUAWEI-PORT-MIB::
|
||||
'hw_phy_port_slot' => 'hwPhysicalPortInSlot',
|
||||
|
||||
# HUAWEI-IF-EXT-MIB::hwTrunkIfTable
|
||||
'hw_trunk_if_idx' => 'hwTrunkIfIndex',
|
||||
'hw_trunk_entry' => 'hwTrunkValidEntry',
|
||||
|
||||
# HUAWEI-L2IF-MIB::hwL2IfTable
|
||||
'hw_l2if_port_idx' => 'hwL2IfPortIfIndex',
|
||||
|
||||
# HUAWEI-POE-MIB::hwPoePortTable
|
||||
'hw_peth_port_admin' => 'hwPoePortEnable',
|
||||
'hw_peth_port_status' => 'hwPoePortPowerStatus',
|
||||
'hw_peth_port_class' => 'hwPoePortPdClass',
|
||||
'hw_peth_port_power' => 'hwPoePortConsumingPower',
|
||||
|
||||
# HUAWEI-POE-MIB::hwPoeSlotTable
|
||||
'peth_power_watts' => 'hwPoeSlotMaximumPower',
|
||||
'peth_power_consumption' => 'hwPoeSlotConsumingPower',
|
||||
'peth_power_threshold' => 'hwPoeSlotPowerUtilizationThreshold',
|
||||
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer3::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||
'hw_peth_port_admin' => \&SNMP::Info::Layer3::Huawei::munge_hw_peth_admin,
|
||||
'peth_power_watts' => \&SNMP::Info::Layer3::Huawei::munge_hw_peth_power,
|
||||
'peth_power_consumption' =>
|
||||
\&SNMP::Info::Layer3::Huawei::munge_hw_peth_power,
|
||||
'hw_peth_port_status' =>
|
||||
\&SNMP::Info::Layer3::Huawei::munge_hw_peth_status,
|
||||
'hw_peth_port_class' => \&SNMP::Info::Layer3::Huawei::munge_hw_peth_class,
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
@@ -85,19 +115,37 @@ sub os {
|
||||
|
||||
sub os_ver {
|
||||
my $huawei = shift;
|
||||
|
||||
my $entity_os = $huawei->entity_derived_os_ver();
|
||||
if ( defined $entity_os and $entity_os !~ /^\s*$/ ) {
|
||||
return $entity_os;
|
||||
}
|
||||
|
||||
my $descr = $huawei->description();
|
||||
my $os_ver = undef;
|
||||
|
||||
$os_ver = "$1" if ( $descr =~ /\bVersion ([0-9.]+)/i );
|
||||
if ($descr =~ /Version\s # Start match on Version string
|
||||
([\d\.]+) # Capture the primary version in 1
|
||||
,? # There may be a comma
|
||||
\s # Always a space
|
||||
(?:Release|Feature)? # Don't capture stanza if present
|
||||
(?:\(\w+)? # If paren & model don't capture
|
||||
\s # Always a space
|
||||
(\w+) # If 2nd part of version capture in 2
|
||||
/xi
|
||||
)
|
||||
{
|
||||
$os_ver = $2 ? "$1 $2" : $1;
|
||||
}
|
||||
|
||||
return $os_ver;
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l3 = shift;
|
||||
my $huawei = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l3->interfaces($partial) || {};
|
||||
my $interfaces = $huawei->interfaces($partial) || {};
|
||||
|
||||
my %i_ignore;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
@@ -110,18 +158,253 @@ sub i_ignore {
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
sub agg_ports { return agg_ports_lag(@_) }
|
||||
sub bp_index {
|
||||
my $huawei = shift;
|
||||
|
||||
my $hw_index = $huawei->hw_l2if_port_idx();
|
||||
return $hw_index
|
||||
if ( ref {} eq ref $hw_index and scalar keys %$hw_index );
|
||||
|
||||
return $huawei->SUPER::bp_index();
|
||||
}
|
||||
|
||||
sub i_duplex {
|
||||
my $huawei = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $hw_duplex = $huawei->hw_eth_duplex($partial);
|
||||
return $hw_duplex
|
||||
if ( ref {} eq ref $hw_duplex and scalar keys %$hw_duplex );
|
||||
|
||||
return $huawei->SUPER::i_duplex($partial);
|
||||
}
|
||||
|
||||
sub i_duplex_admin {
|
||||
my $huawei = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $hw_duplex_admin = $huawei->hw_eth_duplex($partial) || {};
|
||||
my $hw_auto = $huawei->hw_eth_auto($partial) || {};
|
||||
|
||||
my %i_duplex_admin;
|
||||
foreach my $if ( keys %$hw_duplex_admin ) {
|
||||
my $duplex = $hw_duplex_admin->{$if};
|
||||
next unless defined $duplex;
|
||||
my $auto = $hw_auto->{$if} || 'disabled';
|
||||
|
||||
my $string = 'other';
|
||||
$string = 'half' if ( $duplex =~ /half/i and $auto =~ /disabled/i );
|
||||
$string = 'full' if ( $duplex =~ /full/i and $auto =~ /disabled/i );
|
||||
$string = 'auto' if $auto =~ /enabled/i;
|
||||
|
||||
$i_duplex_admin{$if} = $string;
|
||||
}
|
||||
return \%i_duplex_admin;
|
||||
}
|
||||
|
||||
sub agg_ports {
|
||||
my $huawei = shift;
|
||||
|
||||
# First use proprietary MIB for broader implementation across
|
||||
# devices type / os and no xref of hwL2IfPortIfIndex
|
||||
my $masters = $huawei->hw_trunk_if_idx();
|
||||
my $slaves = $huawei->hw_trunk_entry();
|
||||
|
||||
my $ret = {};
|
||||
|
||||
if ( ref {} eq ref $masters
|
||||
and scalar keys %$masters
|
||||
and ref {} eq ref $slaves
|
||||
and scalar keys %$slaves )
|
||||
{
|
||||
foreach my $s ( keys %$slaves ) {
|
||||
next if $slaves->{$s} ne 'valid';
|
||||
my ( $trunk, $sl_idx ) = split( /\./, $s );
|
||||
foreach my $m ( keys %$masters ) {
|
||||
next unless $m == $trunk;
|
||||
next unless defined $masters->{$m};
|
||||
$ret->{$sl_idx} = $masters->{$m};
|
||||
last;
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
# If for some reason we don't get the info, try IEEE8023-LAG-MIB
|
||||
return $huawei->agg_ports_lag();
|
||||
}
|
||||
|
||||
# The standard IEEE 802.af POWER-ETHERNET-MIB has an index of module.port
|
||||
# The HUAWEI-POE-MIB only indexes by ifIndex, we need to match the standard
|
||||
# for so method calls across classes work the same
|
||||
#
|
||||
# Note: Only snmpwalks with single chassis / box with single power source
|
||||
# in slot zero. This may need to be revisited
|
||||
#
|
||||
sub peth_port_ifindex {
|
||||
my $huawei = shift;
|
||||
|
||||
my $peth_port_status = $huawei->hw_peth_port_status() || {};
|
||||
my $peth_port_slot = $huawei->hw_phy_port_slot() || {};
|
||||
|
||||
my $peth_port_ifindex = {};
|
||||
|
||||
foreach my $i ( keys %$peth_port_status ) {
|
||||
my $slot = 0;
|
||||
if ( exists $peth_port_slot->{$i}
|
||||
&& defined $peth_port_slot->{$i} )
|
||||
{
|
||||
$slot = $peth_port_slot->{$i};
|
||||
}
|
||||
$peth_port_ifindex->{"$slot.$i"} = $i;
|
||||
}
|
||||
return $peth_port_ifindex;
|
||||
}
|
||||
|
||||
sub peth_port_admin {
|
||||
my $huawei = shift;
|
||||
|
||||
my $port_admin = $huawei->hw_peth_port_admin() || {};
|
||||
my $port_ifindex = $huawei->peth_port_ifindex() || {};
|
||||
|
||||
my $peth_port_admin = {};
|
||||
|
||||
foreach my $idx ( keys %$port_ifindex ) {
|
||||
my $ifindex = $port_ifindex->{$idx};
|
||||
my $admin = $port_admin->{$ifindex};
|
||||
next unless $admin;
|
||||
|
||||
$peth_port_admin->{$idx} = $admin;
|
||||
}
|
||||
return $peth_port_admin;
|
||||
}
|
||||
|
||||
sub peth_port_status {
|
||||
my $huawei = shift;
|
||||
|
||||
my $port_status = $huawei->hw_peth_port_status() || {};
|
||||
my $port_ifindex = $huawei->peth_port_ifindex() || {};
|
||||
|
||||
my $peth_port_status = {};
|
||||
|
||||
foreach my $idx ( keys %$port_ifindex ) {
|
||||
my $ifindex = $port_ifindex->{$idx};
|
||||
my $status = $port_status->{$ifindex};
|
||||
next unless $status;
|
||||
|
||||
$peth_port_status->{$idx} = $status;
|
||||
}
|
||||
return $peth_port_status;
|
||||
}
|
||||
|
||||
sub peth_port_class {
|
||||
my $huawei = shift;
|
||||
|
||||
my $port_class = $huawei->hw_peth_port_class() || {};
|
||||
my $port_ifindex = $huawei->peth_port_ifindex() || {};
|
||||
|
||||
my $peth_port_class = {};
|
||||
|
||||
foreach my $idx ( keys %$port_ifindex ) {
|
||||
my $ifindex = $port_ifindex->{$idx};
|
||||
my $class = $port_class->{$ifindex};
|
||||
next unless $class;
|
||||
|
||||
$peth_port_class->{$idx} = $class;
|
||||
}
|
||||
return $peth_port_class;
|
||||
}
|
||||
|
||||
sub peth_port_power {
|
||||
my $huawei = shift;
|
||||
|
||||
my $port_power = $huawei->hw_peth_port_power() || {};
|
||||
my $port_ifindex = $huawei->peth_port_ifindex() || {};
|
||||
|
||||
my $peth_port_power = {};
|
||||
|
||||
foreach my $idx ( keys %$port_ifindex ) {
|
||||
my $ifindex = $port_ifindex->{$idx};
|
||||
my $power = $port_power->{$ifindex};
|
||||
next unless defined $power;
|
||||
|
||||
$peth_port_power->{$idx} = $power;
|
||||
}
|
||||
return $peth_port_power;
|
||||
}
|
||||
|
||||
sub peth_port_neg_power {
|
||||
my $huawei = shift;
|
||||
|
||||
my $peth_port_status = $huawei->peth_port_status() || {};
|
||||
my $peth_port_class = $huawei->peth_port_class() || {};
|
||||
my $port_ifindex = $huawei->peth_port_ifindex() || {};
|
||||
|
||||
my $huaweimax = {
|
||||
'class0' => 12950,
|
||||
'class1' => 3840,
|
||||
'class2' => 6490,
|
||||
'class3' => 12950,
|
||||
'class4' => 25500
|
||||
};
|
||||
|
||||
my $peth_port_neg_power = {};
|
||||
|
||||
foreach my $idx ( keys %$port_ifindex ) {
|
||||
if ( $peth_port_status->{$idx} eq 'deliveringPower' ) {
|
||||
$peth_port_neg_power->{$idx}
|
||||
= $huaweimax->{ $peth_port_class->{$idx} };
|
||||
}
|
||||
}
|
||||
return $peth_port_neg_power;
|
||||
}
|
||||
|
||||
sub munge_hw_peth_admin {
|
||||
my $admin = shift;
|
||||
|
||||
$admin =~ s/enabled/true/;
|
||||
$admin =~ s/disabled/false/;
|
||||
return $admin;
|
||||
}
|
||||
|
||||
sub munge_hw_peth_power {
|
||||
my $pwr = shift;
|
||||
|
||||
$pwr = $pwr / 1000;
|
||||
return sprintf( "%.0f", $pwr );
|
||||
}
|
||||
|
||||
sub munge_hw_peth_class {
|
||||
my $pwr = shift;
|
||||
|
||||
return "class$pwr";
|
||||
}
|
||||
|
||||
# The values are from the MIB reference guide
|
||||
sub munge_hw_peth_status {
|
||||
my $pwr = shift;
|
||||
|
||||
# The status is an octet string rather than enum
|
||||
# so use regex rather than hash lookup
|
||||
$pwr = 'disabled' if $pwr =~ /Disabled/i;
|
||||
$pwr = 'searching' if $pwr =~ /(Powering|Power-ready|Detecting)/i;
|
||||
$pwr = 'deliveringPower' if $pwr =~ /Powered/i;
|
||||
$pwr = 'fault' if $pwr =~ /fault/i;
|
||||
|
||||
return $pwr;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::Huawei - SNMP Interface to Huawei Layer 3 switches and routers.
|
||||
SNMP::Info::Layer3::Huawei - SNMP Interface to Huawei switches and routers.
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Jeroen van Ingen
|
||||
Jeroen van Ingen and Eric Miller
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
@@ -140,7 +423,7 @@ Jeroen van Ingen
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Huawei Quidway switches
|
||||
Subclass for Huawei switches
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
@@ -148,8 +431,6 @@ Subclass for Huawei Quidway switches
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=item SNMP::Info::IEEE802dot3ad
|
||||
|
||||
=back
|
||||
@@ -160,12 +441,18 @@ Subclass for Huawei Quidway switches
|
||||
|
||||
=item F<HUAWEI-MIB>
|
||||
|
||||
=item F<HUAWEI-PORT-MIB>
|
||||
|
||||
=item F<HUAWEI-IF-EXT-MIB>
|
||||
|
||||
=item F<HUAWEI-L2IF-MIB>
|
||||
|
||||
=item F<HUAWEI-POE-MIB>
|
||||
|
||||
=item Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
||||
|
||||
See L<SNMP::Info::LLDP> for its own MIB requirements.
|
||||
|
||||
See L<SNMP::Info::IEEE802dot3ad> for its own MIB requirements.
|
||||
|
||||
=back
|
||||
@@ -186,7 +473,8 @@ Returns 'VRP' if contained in C<sysDescr>, 'huawei' otherwise.
|
||||
|
||||
=item $huawei->os_ver()
|
||||
|
||||
Returns the software version extracted from C<sysDescr>.
|
||||
Returns the software version derived from the C<ENTITY-MIB> or
|
||||
extracted from C<sysDescr>.
|
||||
|
||||
=back
|
||||
|
||||
@@ -194,15 +482,49 @@ Returns the software version extracted from C<sysDescr>.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP> for details.
|
||||
|
||||
=head1 TABLE ENTRIES
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $huawei->i_duplex()
|
||||
|
||||
Returns reference to map of IIDs to current link duplex.
|
||||
|
||||
=item $huawei->i_duplex_admin()
|
||||
|
||||
Returns reference to hash of IIDs to admin duplex setting.
|
||||
|
||||
=back
|
||||
|
||||
=head2 POE Slot Table
|
||||
|
||||
=over
|
||||
|
||||
=item $huawei->peth_power_watts()
|
||||
|
||||
The slot's power supply's capacity, in watts.
|
||||
|
||||
C<hwPoeSlotMaximumPower>
|
||||
|
||||
=item $huawei->peth_power_consumption()
|
||||
|
||||
How much power, in watts, this power supply has been committed to
|
||||
deliver.
|
||||
|
||||
C<hwPoeSlotConsumingPower>
|
||||
|
||||
=item $huawei->peth_power_threshold()
|
||||
|
||||
The threshold (in percent) of consumption required to raise an
|
||||
alarm.
|
||||
|
||||
C<hwPoeSlotPowerUtilizationThreshold>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
@@ -213,11 +535,58 @@ Returns reference to hash. Increments value of IID if port is to be ignored.
|
||||
|
||||
Ignores InLoopback and Console interfaces
|
||||
|
||||
=item $huawei->bp_index()
|
||||
|
||||
Returns a mapping between C<ifIndex> and the Bridge Table. Uses
|
||||
C<hwL2IfPortIfIndex> for the most complete mapping and falls back to
|
||||
C<dot1dBasePortIfIndex> if not available.
|
||||
|
||||
=item C<agg_ports>
|
||||
|
||||
Returns a HASH reference mapping from slave to master port for each member of
|
||||
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||
ifIndex of the corresponding master ports.
|
||||
ifIndex of the corresponding master ports. Attempts to use C<hwTrunkIfTable>
|
||||
first and then C<dot3adAggPortListPorts> if that is unavailable.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Power Port Table
|
||||
|
||||
The index of these methods have been normalized to slot.port and values
|
||||
munged to provide compatability with the IEEE 802.3af F<POWER-ETHERNET-MIB>
|
||||
and equivalent L<SNMP::Info::PowerEthernet> methods.
|
||||
|
||||
=over
|
||||
|
||||
=item $huawei->peth_port_admin()
|
||||
|
||||
Administrative status: is this port permitted to deliver power?
|
||||
|
||||
=item $huawei->peth_port_status()
|
||||
|
||||
Current status: is this port delivering power, searching, disabled, etc?
|
||||
|
||||
=item $huawei->peth_port_class()
|
||||
|
||||
Device class: if status is delivering power, this represents the 802.3af
|
||||
class of the device being powered.
|
||||
|
||||
=item $huawei->peth_port_power()
|
||||
|
||||
Power supplied the port, in milliwatts
|
||||
|
||||
=item $huawei->peth_port_ifindex()
|
||||
|
||||
Returns an index of slot.port to an C<ifIndex>. Slot defaults to zero
|
||||
meaning chassis or box if there is no C<ifIndex> to slot mapping available in
|
||||
C<hwPhysicalPortInSlot>. Mapping the index to slot.port is a normalization
|
||||
function to provide compatability with the IEEE 802.3af F<POWER-ETHERNET-MIB>.
|
||||
|
||||
=item $huawei->peth_port_neg_power()
|
||||
|
||||
The power, in milliwatts, that has been committed to this port.
|
||||
This value is derived from the 802.3af class of the device being
|
||||
powered.
|
||||
|
||||
=back
|
||||
|
||||
@@ -225,8 +594,31 @@ ifIndex of the corresponding master ports.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP> for details.
|
||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||
|
||||
=head1 Data Munging Callback Subroutines
|
||||
|
||||
=over
|
||||
|
||||
=item $huawei->munge_hw_peth_admin()
|
||||
|
||||
Normalizes C<hwPoePortEnable> values to 'true' or 'false'.
|
||||
|
||||
=item $huawei->munge_hw_peth_class()
|
||||
|
||||
Normalizes C<hwPoePortPdClass> values by prepending 'class'.
|
||||
|
||||
=item $huawei->munge_hw_peth_power()
|
||||
|
||||
Converts and rounds to a whole number milliwatts to watts.
|
||||
|
||||
=item $huawei->munge_hw_peth_status()
|
||||
|
||||
Normalizes C<hwPoePortPowerStatus> values to those that would be returned by
|
||||
the the IEEE 802.3af F<POWER-ETHERNET-MIB>.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user