Compare commits
219 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c30e1a2446 | ||
|
|
10392fc08e | ||
|
|
df10473fb5 | ||
|
|
6505e7e85f | ||
|
|
ffd80722b8 | ||
|
|
6bd5bb3dda | ||
|
|
83dec3c1d6 | ||
|
|
82f2a83eec | ||
|
|
5194af9d91 | ||
|
|
a4c76d2fb9 | ||
|
|
57a35075fa | ||
|
|
fb69a60b45 | ||
|
|
2625381e5b | ||
|
|
1c048320a6 | ||
|
|
c5c25cee7f | ||
|
|
dee8177a67 | ||
|
|
abbe040351 | ||
|
|
29a0f849f1 | ||
|
|
7e524f46c6 | ||
|
|
1146e99de2 | ||
|
|
6740929d41 | ||
|
|
831788c1c9 | ||
|
|
7e9d4520af | ||
|
|
c4317e6e6b | ||
|
|
e4e3debce0 | ||
|
|
a5b7431070 | ||
|
|
054808f59d | ||
|
|
0b313d627e | ||
|
|
9813b9db90 | ||
|
|
9a4e024abb | ||
|
|
04a669157f | ||
|
|
a364c1512d | ||
|
|
0451e6f0a6 | ||
|
|
b7f87d9e82 | ||
|
|
e2713fb57a | ||
|
|
c8eff78d34 | ||
|
|
04ca5793fa | ||
|
|
83d00ee9c7 | ||
|
|
bf56ed2540 | ||
|
|
e75aba14b4 | ||
|
|
5d2d2d416f | ||
|
|
62799bfc9d | ||
|
|
df8fbc3c03 | ||
|
|
604de81ab8 | ||
|
|
ed14b09567 | ||
|
|
800758815c | ||
|
|
058b74bd63 | ||
|
|
02a52a4e09 | ||
|
|
74ddc93f7f | ||
|
|
eb8af0c81b | ||
|
|
bd49274808 | ||
|
|
8b1547c589 | ||
|
|
c093f83848 | ||
|
|
c0b28c38c5 | ||
|
|
4621a0898f | ||
|
|
6f02e1035f | ||
|
|
d4ae9237a6 | ||
|
|
914eb05a60 | ||
|
|
4da17227c1 | ||
|
|
20014cab29 | ||
|
|
9d62361c8a | ||
|
|
260992b7bf | ||
|
|
b9cd429551 | ||
|
|
2d18a75ad7 | ||
|
|
0cfc501f83 | ||
|
|
44b19153f1 | ||
|
|
433b87b9df | ||
|
|
f9464bcd6c | ||
|
|
f5c5ec202a | ||
|
|
4b64a70830 | ||
|
|
4c8f7e298e | ||
|
|
2d539be214 | ||
|
|
c35d5814b4 | ||
|
|
7d19ad401b | ||
|
|
985577ce79 | ||
|
|
24e20101d5 | ||
|
|
76c884eb9f | ||
|
|
7041dbab27 | ||
|
|
661051fde4 | ||
|
|
36cba5ce18 | ||
|
|
4753f30c53 | ||
|
|
d719e240d2 | ||
|
|
e35faee278 | ||
|
|
fd3417a09a | ||
|
|
1719709648 | ||
|
|
d37aa3378e | ||
|
|
f017d32860 | ||
|
|
7b23edcb29 | ||
|
|
e48c4b4e84 | ||
|
|
aeca44c7aa | ||
|
|
af6ae8e419 | ||
|
|
5cf88ba3b7 | ||
|
|
f901ba5591 | ||
|
|
7deea96bc3 | ||
|
|
48dfb9bd08 | ||
|
|
85372559fa | ||
|
|
98972b80ef | ||
|
|
d950244232 | ||
|
|
fd898829c3 | ||
|
|
b0158628bb | ||
|
|
0f69a7b391 | ||
|
|
72773117e5 | ||
|
|
06806f5a6e | ||
|
|
a01c785ec8 | ||
|
|
502e206371 | ||
|
|
8fba1bc6a9 | ||
|
|
f43803d6d4 | ||
|
|
338cba6350 | ||
|
|
2a15066062 | ||
|
|
add86bc566 | ||
|
|
e9b4eaaeb9 | ||
|
|
07605051f5 | ||
|
|
998356484b | ||
|
|
e97617ad60 | ||
|
|
9685c3afa8 | ||
|
|
c209b9a72f | ||
|
|
4999b769ba | ||
|
|
d8b5ba2161 | ||
|
|
6f4a4a91cf | ||
|
|
0049f0d72e | ||
|
|
4ea66fc0fd | ||
|
|
8426620572 | ||
|
|
76aece0a3f | ||
|
|
508e7f77a0 | ||
|
|
d250a829cb | ||
|
|
2fada0c31c | ||
|
|
e6ad08733d | ||
|
|
a8d83b5e1c | ||
|
|
9392b74cbc | ||
|
|
e09624efd0 | ||
|
|
d4d7429de4 | ||
|
|
b97cef86a3 | ||
|
|
70615a172b | ||
|
|
d399ca90d3 | ||
|
|
bbc9695075 | ||
|
|
c8fceeb75b | ||
|
|
036cb4556e | ||
|
|
e7b06a0b06 | ||
|
|
c0067113e9 | ||
|
|
ce4349a188 | ||
|
|
224085dfca | ||
|
|
9b3262a5fe | ||
|
|
86856b6d54 | ||
|
|
d5bf08329e | ||
|
|
60efce8404 | ||
|
|
83164f456a | ||
|
|
c0141bcfee | ||
|
|
8dfe9ef1cf | ||
|
|
73d713b670 | ||
|
|
db6c3573c1 | ||
|
|
c8cbdaef8a | ||
|
|
2c7243b87d | ||
|
|
46515dd5d3 | ||
|
|
7eb799adc6 | ||
|
|
c85b61bbd0 | ||
|
|
045ff8b789 | ||
|
|
7b7f197439 | ||
|
|
9e1c462836 | ||
|
|
e97e8309cb | ||
|
|
8c5be1a47d | ||
|
|
afef2e6732 | ||
|
|
7b2051b55c | ||
|
|
8e470a2d72 | ||
|
|
35213d5cb2 | ||
|
|
b24f1a8ac4 | ||
|
|
5454ab577e | ||
|
|
046c15a074 | ||
|
|
ddb9dda894 | ||
|
|
d7047bda13 | ||
|
|
c7934f4d10 | ||
|
|
c97dc06177 | ||
|
|
76b1faa159 | ||
|
|
1e0438857e | ||
|
|
b6494effa6 | ||
|
|
a359184b83 | ||
|
|
ce50a3f627 | ||
|
|
ee7d254329 | ||
|
|
d674b22b39 | ||
|
|
47954aba8e | ||
|
|
09e18e9b64 | ||
|
|
163ba86196 | ||
|
|
e57e7d99d5 | ||
|
|
7ad449303b | ||
|
|
49b853de1a | ||
|
|
03a81ad4be | ||
|
|
eb046b6a61 | ||
|
|
1bf62f9524 | ||
|
|
9aca213a5f | ||
|
|
ce8bb68200 | ||
|
|
7ee562c5ac | ||
|
|
bdb719004d | ||
|
|
842ac96d48 | ||
|
|
5bb9011fb4 | ||
|
|
97564f50b8 | ||
|
|
efcf6a0db3 | ||
|
|
9e813784f7 | ||
|
|
aaca03062b | ||
|
|
c1242017e2 | ||
|
|
5f1426a0a3 | ||
|
|
e84225fb23 | ||
|
|
32c0e64bfb | ||
|
|
0793ff31f5 | ||
|
|
d3c2c1b607 | ||
|
|
893def7910 | ||
|
|
f875639435 | ||
|
|
70bb263d79 | ||
|
|
536d7d6901 | ||
|
|
6ea34316b0 | ||
|
|
aeebe5c95c | ||
|
|
eb62f95636 | ||
|
|
c7ee746fe6 | ||
|
|
9a062499b3 | ||
|
|
0c876452d8 | ||
|
|
3b6088f454 | ||
|
|
719f14984b | ||
|
|
2e480dbec5 | ||
|
|
66910c7827 | ||
|
|
0f5319bc52 | ||
|
|
cd54b07e09 |
31
.github/issue_template.md
vendored
Normal file
31
.github/issue_template.md
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<!--- Provide a general summary of the issue in the Title above -->
|
||||
<!--- https://guides.github.com/features/mastering-markdown/#examples -->
|
||||
|
||||
## Expected Behavior
|
||||
<!--- If you're describing a bug, tell us what should happen -->
|
||||
<!--- If you're suggesting a change/improvement, tell us how it should work -->
|
||||
|
||||
## Current Behavior
|
||||
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
|
||||
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
|
||||
|
||||
## Possible Solution
|
||||
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
||||
<!--- or ideas how to implement the addition or change -->
|
||||
|
||||
## Steps to Reproduce (for bugs)
|
||||
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
||||
<!--- reproduce this bug. Include code to reproduce, if relevant, or attach screenshots -->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
## Context
|
||||
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||
|
||||
## Your Environment
|
||||
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||
* SNMP::Info version used:
|
||||
* Netdisco version (if used):
|
||||
14
.gitignore
vendored
14
.gitignore
vendored
@@ -1,2 +1,12 @@
|
||||
*.db
|
||||
SNMP
|
||||
*.swp
|
||||
*.pid
|
||||
test.pl
|
||||
MYMETA.*
|
||||
*.tar.gz
|
||||
MANIFEST.*
|
||||
*.komodo*
|
||||
Makefile*
|
||||
Build
|
||||
_build
|
||||
blib
|
||||
README
|
||||
|
||||
31
.travis.yml
Normal file
31
.travis.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
language: perl
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- jq
|
||||
- libsnmp-dev
|
||||
branches:
|
||||
only:
|
||||
- /^3\.\d{2}$/
|
||||
- 'master'
|
||||
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 -
|
||||
- cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP::MAXTC
|
||||
before_script:
|
||||
- 'cd ${TRAVIS_BUILD_DIR}'
|
||||
script:
|
||||
- >
|
||||
perl Build.PL &&
|
||||
PERL_MM_USE_DEFAULT=1 ./Build installdeps --cpan_client 'cpanm --quiet --notest' &&
|
||||
./Build test --test_files t/ --test_files xt/
|
||||
notifications:
|
||||
irc:
|
||||
on_success: change
|
||||
on_failure: always
|
||||
channels:
|
||||
- 'chat.freenode.net#netdisco'
|
||||
43
Build.PL
Normal file
43
Build.PL
Normal file
@@ -0,0 +1,43 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Module::Build;
|
||||
|
||||
Module::Build->new(
|
||||
module_name => 'SNMP::Info',
|
||||
license => 'bsd',
|
||||
dist_author => 'Eric A. Miller <emiller@cpan.org>',
|
||||
# dynamic_config => 1,
|
||||
create_readme => 1,
|
||||
configure_requires => {
|
||||
'Module::Build' => '0.42',
|
||||
},
|
||||
# build_requires => {
|
||||
# },
|
||||
requires => {
|
||||
'SNMP' => '0',
|
||||
'Math::BigInt' => '0',
|
||||
},
|
||||
recommends => {
|
||||
'PPI' => '0',
|
||||
'Class::ISA' => '0',
|
||||
'Module::Info' => '0',
|
||||
'Module::Load' => '0',
|
||||
'File::Slurp' => '0',
|
||||
},
|
||||
test_requires => {
|
||||
'Test::More' => '0.88',
|
||||
'Test::Distribution' => '0',
|
||||
},
|
||||
# script_files => [
|
||||
# ],
|
||||
# share_dir => 'share',
|
||||
meta_merge => {
|
||||
resources => {
|
||||
homepage => 'http://netdisco.org/',
|
||||
bugtracker => 'https://github.com/netdisco/snmp-info/issues',
|
||||
repository => 'https://github.com/netdisco/snmp-info',
|
||||
MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users',
|
||||
IRC => 'irc://irc.freenode.org/#netdisco',
|
||||
},
|
||||
},
|
||||
)->create_build_script;
|
||||
@@ -1,4 +1,283 @@
|
||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
|
||||
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]
|
||||
|
||||
* Fixes to distriution metadata
|
||||
|
||||
version 3.40 (2018-01-28)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* #240 Support for CheckPoint devies through SNMP
|
||||
* #240 Cisco SB switches fixup
|
||||
* #244 Add Adtran support
|
||||
* #241 Vyatta/VyOS support
|
||||
* #246 Nexus VRF support (works with Netdisco)
|
||||
* #244 Improve Juniper model reporting
|
||||
* #240 Improve H3C reporting
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* #243 Nexus additional debug lines should be hidden
|
||||
|
||||
version 3.39 (2017-12-17)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* #236 Enhanced Ubiquiti device support (L. Begnaud)
|
||||
* add HP J9774A model (H. Teulahti)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* fix scripts (F. Mass)
|
||||
* fix CiscoASA typos (laelly)
|
||||
|
||||
version 3.38 (2017-10-23)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Layer2::Airespace several newer 802.11 data rates added
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* #232 Improve generic Info::Layer3 serial number detection
|
||||
|
||||
version 3.37 (2017-07-11)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Layer3::Juniper fixed to return os_ver for JUNOS 14.x and higher
|
||||
|
||||
version 3.36 (2017-06-28)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Migrate to Module::Build for distribution maintenance
|
||||
|
||||
version 3.35 (2017-06-28)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Include loading of LLDP-EXT-MED-MIB in LLDP.pm
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* #180 support CiscoConfig on Nexus (sf.net:scratchfury)
|
||||
* #50 remove interface specific part from vrf interfaces on IOS (W. Vandersmissen)
|
||||
* #211 f5 class should respect UseEnums when faking i_type
|
||||
|
||||
version 3.34 (2016-11-20)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Support Cisco IPS Modules homed on the Cisco ASA (M. Kraus)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Serial number on Nexus 9372 (genereic check for ID before using) (M. Caines)
|
||||
|
||||
version 3.33 (2016-04-27)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Move author-only tests to xt directory so they aren't run on installation
|
||||
by users
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Correct device serial number reporting for Cisco Nexus 5k switches with
|
||||
software version >= 7
|
||||
|
||||
version 3.32 (2016-04-26)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add 200 Mbps and 2.0 Gbps aliases to SPEED_MAP
|
||||
* Add Palo Alto support
|
||||
* Add VMware support
|
||||
* Support for propMultiplexor as ifType
|
||||
* Add device MAC to APC UPS
|
||||
* [#61] Report APC model for PDU products
|
||||
* Removed DeviceMatrix from the distribution
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Support undefined (noSuchInstance) values in Offline mode
|
||||
* Do not init table cache if Cache provided by user
|
||||
* Avoid deep recusion when AUTOLOAD and carp collide
|
||||
* Detect Cisco VG350s as L3 devices instead of APs
|
||||
* fix for 'Use of inherited AUTOLOAD for non-method SNMP::Info::Layer2::HP::agg_ports_ifstack() is deprecated'
|
||||
* Workaround in IPv6.pm to deal with possibly incorrect IPV6-MIB implementations
|
||||
* [#71] AUTOLOAD typo-catcher search for SNMP::Info no longer anchored
|
||||
* [#70] Respect version/comm/secname on passed Session obj
|
||||
|
||||
version 3.31 (2016-01-22)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Support for CiscoSB OS and Version (D. Tuecks)
|
||||
* SONMP support for Enhanced Topology Table
|
||||
* Add support for channelized interfaces in L3::Passport
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Correct link to MIB tarball
|
||||
|
||||
version 3.30 (2015-11-16)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* RT #106254: Add new sysObjectID mapping for Ubiquiti
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Correct link to MIB tarball
|
||||
* Correct port indexing of newer VSP 4K and 8K in L3::Passport
|
||||
* Statistics in the sysIfxStatTable are 64-bit counters, so they should
|
||||
override the 64-bit methods.
|
||||
|
||||
version 3.29 (2015-10-13)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add IPv6::ipv6_addr() method to map IPv6 interface address indexes to actual addresses
|
||||
* Add support for (remote) IPv6 addresses to LLDP::lldp_addr()
|
||||
* Add LLDP::lldp_ipv6() and LLDP::lldp_mac() so that remote management
|
||||
addresses of specific types can be requested
|
||||
|
||||
version 3.28 (2015-06-18)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add Layer3::Huawei class for Huawei Quidway switches
|
||||
* Modified generic Layer3::Cisco class: use community based indexing if
|
||||
the device returns a value for vtpVersion
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Correct port indexing of VSP 4K in L3::Passport
|
||||
|
||||
version 3.27 (2015-05-05)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Cisco Aironet PSU information
|
||||
* Only log adding mibdirs at debug level 2
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* [#221] Drop Cisco Voice VLAN 4096
|
||||
|
||||
version 3.26 (2015-03-07)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add fan and psu reporting to Layer3::Dell
|
||||
* Include Voice VLANs in (tagged) VLAN Membership on Cisco devices
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix typo in MRO::print_superclasses
|
||||
|
||||
version 3.25 (2015-02-25)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Add new model name mappings for to Layer2::HP
|
||||
|
||||
version 3.24 (2015-02-04)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Support RSTP and ieee8021d STP operating modes in RapidCity
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix single instance leafs defined in %FUNCS to behave like table leafs
|
||||
* Fix incorrect FDB ID to VLAN ID mapping in Bridge and L3:Enterasys
|
||||
|
||||
version 3.23 (2014-12-09)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Update MIB used in L1::Asante
|
||||
* Enhanced STP support for L3::Extreme
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix Cisco VLAN membership issue introduced in 3.22 related to capturing
|
||||
port VLANs on Cisco interfaces which are configured for trunking but
|
||||
are not in operational trunking mode
|
||||
|
||||
version 3.22 (2014-12-02)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
* Support obtaining FDB in Avaya SPBM edge deployments in L2::Baystack
|
||||
NOTE: This requires a RAPID-CITY MIB with the rcBridgeSpbmMacTable
|
||||
* Support for Fortinet devices in new class L3::Fortinet
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Include LLDP support in base Layer2 and Layer3 classes. Due to the
|
||||
widespread adoption of LLDP, this should improve mapping networks
|
||||
when devices aren't supported in a more specific class.
|
||||
* No longer ignore interfaces based on name, in base L2/L3/L7 device
|
||||
classes. For several device classes SNMP::Info will now return tunnel
|
||||
interfaces and/or loopbacks, if present.
|
||||
* Use dot1qVlanCurrentTable if available to capture dynamic and static
|
||||
VLANs, fall back to dot1qVlanStaticTable if not available.
|
||||
* New method i_vlan_membership_untagged() for VLANs transmitted as
|
||||
untagged frames.
|
||||
* Capture Aruba AP hardware and software version when available
|
||||
* New STP methods to support gathering information from devices running
|
||||
mutiple STP instances such as PVST and MST
|
||||
* Enhanced STP support for Avaya and Foundry classes
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* [#64] Misdetection: Wireless APs, add products MIB to L2::3Com
|
||||
* Use FDB ID to VID mapping if available to determine end station VLAN
|
||||
rather than assuming they are the same.
|
||||
* Capture port VLANs on Cisco interfaces which are configured for
|
||||
trunking but are not in operational trunking mode
|
||||
* Correct munging of stp_p_port(), i_stp_port(), and stp_root() methods
|
||||
in Bridge
|
||||
* In LLDP.pm don't create a variable in a conditional
|
||||
|
||||
version 3.20 (2014-09-08)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
* Override layers in Juniper for routers with switch modules
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Update MANIFEST to include Ubiquiti files
|
||||
|
||||
version 3.19 (2014-08-01)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
* Support for Ubiquiti Access Points in new class L2::Ubiquiti (begemot)
|
||||
* Preliminary support for 3Com switches in new class L2::3Com (begemot)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Fix Avaya detection lldp_port()
|
||||
* Silence uninitialized value warning in L3::Cisco
|
||||
* H3C fixes (begemot)
|
||||
* Only use L2::ZyXEL_DSLAM for ZyXEL DSL modules
|
||||
|
||||
version 3.18 (2014-07-02)
|
||||
|
||||
@@ -39,7 +318,7 @@ version 3.16 (2014-06-23)
|
||||
[BUG FIXES]
|
||||
|
||||
* Use CiscoVTP methods to get interface VLAN in L3::Cisco rather than
|
||||
solely relying on the interface description.
|
||||
solely relying on the interface description.
|
||||
|
||||
version 3.15 (2014-07-10)
|
||||
|
||||
@@ -191,7 +470,7 @@ version 3.08 (2013-10-22)
|
||||
* [#68] Fix device_port entries for switches with non-unique
|
||||
ifDesc (Nic Bernstein)
|
||||
* Don't try to munge undef values
|
||||
* [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
|
||||
* [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
|
||||
* Silence warning from uninitialized variable in L3::Passport e_descr()
|
||||
|
||||
version 3.07 (2013-10-01)
|
||||
@@ -218,12 +497,11 @@ version 3.05 (2013-08-16)
|
||||
Layer2/CiscoSB class
|
||||
* Add proper LLDP support to Netgear.pm
|
||||
* Change $netgear->interfaces() to use ifName rather than ifDescr
|
||||
as the former is unique per interface while the latter is not.
|
||||
as the former is unique per interface while the latter is not.
|
||||
If ifName is not present, concatenate ifDescr and ifIndex
|
||||
to achieve a unique value.
|
||||
* Properly report hardware version, Serial No. and OS Version for
|
||||
Netgear.
|
||||
|
||||
|
||||
version 3.03 (2013-07-11)
|
||||
|
||||
@@ -253,7 +531,7 @@ version 3.01 (2013-04-13)
|
||||
they can be called directly, sonmp_ip(), cdp_ip(), etc.
|
||||
* L2::Bay and L2::Foundry have been removed from the distribution. Both
|
||||
classes were depreciated and all functionality is available through
|
||||
L2::Baystack and L3::Foundry.
|
||||
L2::Baystack and L3::Foundry.
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
@@ -283,7 +561,7 @@ version 3.01 (2013-04-13)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* UNIVERSAL::can() now works with dynamic methods
|
||||
* UNIVERSAL::can() now works with dynamic methods
|
||||
* Dynamically generated methods are added to symbol table to avoid
|
||||
AUTOLOAD on subsequent calls
|
||||
* L2::Airespace now supports 802.11n client tx rates
|
||||
@@ -315,20 +593,20 @@ version 2.09 (2012-11-28)
|
||||
* New method i_ssidmac() to get BSSID's from AP's with initial support
|
||||
in L2::Aironet and Airespace classes
|
||||
* Support for Avaya Secure Routers in new class L3::Tasman
|
||||
* Add EDP and LLDP L2 Topology to L3::Extreme
|
||||
* Add EDP and LLDP L2 Topology to L3::Extreme
|
||||
* [3185393] Support for Juniper SSL VPN in new class L7::Neoteris
|
||||
* [3381027] Support for Cisco Nexus in new class L3::Nexus
|
||||
* [3381027] Support for Cisco Nexus in new class L3::Nexus
|
||||
* [1424336] Support for Extreme Discovery Protocol (EDP)
|
||||
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* [3017571] Add LLDP support for NetSNMP device class (begemot)
|
||||
* [3017571] Add LLDP support for NetSNMP device class (begemot)
|
||||
* [3418918] Extreme devices now report OS as either extremeware or xos
|
||||
* [2809045] Strip preceding netscreen from model name in L3::Netscreen
|
||||
* [] Classify Linksys 2024 as L3::Dell (Rogier Krieger)
|
||||
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
|
||||
* Fixed logic to return cached data for table methods when available and
|
||||
not a partial fetch
|
||||
* Fix typo in PoD for Bridge.pm and CiscoConfig.pm (William Bulley)
|
||||
@@ -348,7 +626,7 @@ version 2.08 (2012-07-15)
|
||||
|
||||
* Pseudo ENTITY-MIB methods added to L3::Juniper for hardware information
|
||||
* Add method to report current transmit power of the radio interface,
|
||||
dot11_cur_tx_pwr_mw(), in Airespace class
|
||||
dot11_cur_tx_pwr_mw(), in Airespace class
|
||||
* [3085411] Activate L3 properties for Netgear GSM7224v2 (phishphreek)
|
||||
* [3085413] SNMP OIDs for Netgear Serial and OS Ver (phishphreek)
|
||||
* [3286549] Dell LLDP Support (Nico Giefing)
|
||||
@@ -397,7 +675,7 @@ version 2.06 (2011-09-28)
|
||||
* [3344843] Fix returning serial() and os_ver() for web-managable HP
|
||||
switches, introduced by HP/HP4000 class split, reported by J R Binks
|
||||
* [2809033] Put L2-only Cisco blade switches in L3::C6500
|
||||
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
|
||||
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
|
||||
incomplete (Michael Borgelt)
|
||||
|
||||
version 2.05 (2011-06-23)
|
||||
@@ -413,13 +691,13 @@ version 2.04 (2011-03-31)
|
||||
(Brian De Wolf)
|
||||
+ Added L3::Pf for FreeBSD PFSense Firewalls (max)
|
||||
* Added specific functions for neighbor mgmt addresses to CDP class
|
||||
* Implemented os_bin() method in CiscoStats
|
||||
* Implemented os_bin() method in CiscoStats
|
||||
+ [2980787] Fix for C1900 bp_index not containing interfaces.
|
||||
(Brian De Wolf)
|
||||
+ [2599795] Added vendor_i_type() method to HP and HP4000 clases
|
||||
+ [2688801] Minor modification for obscure Proxim/Orinoco device
|
||||
(jrbinks)
|
||||
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
|
||||
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
|
||||
classes (jeroenvi)
|
||||
* Minor tweaks to support devices without sysServices
|
||||
* Added Cisco CBS3xxx blade switches to L3::C6500
|
||||
@@ -457,7 +735,7 @@ version 2.00 (08/01/08)
|
||||
+ Support for Alcatel-Lucent Service Router via L3::Timetra
|
||||
+ Support for Alcatel-Lucent OmniAccess via L2::Aruba
|
||||
|
||||
* Silence warnings in MAU due to uninitialized variables
|
||||
* Silence warnings in MAU due to uninitialized variables
|
||||
|
||||
version 1.09 (07/22/08) - Beta/developer release
|
||||
+ Added support for HP ProCurve Foundry OEM switches, such as the 9300
|
||||
@@ -481,7 +759,7 @@ version 1.09 (07/22/08) - Beta/developer release
|
||||
+ Add support to specify MIB to resolve leaf names conflicts in
|
||||
%GLOBALS and %FUNCS.
|
||||
+ Added munge_port_list() and modify_port_list() methods to assist in
|
||||
working with PortList objects.
|
||||
working with PortList objects.
|
||||
+ Added set_multi() method to enable a SNMP set command on several new
|
||||
values in one request. Required for complex set operations
|
||||
on some agents.
|
||||
@@ -508,7 +786,7 @@ version 1.05 (11/25/07) - CVS only. No official release
|
||||
Augenstein)
|
||||
+ Added device specific support for LLDP in L2::HP, L2::Baystack,
|
||||
L3::Enterasys and L3::Foundry
|
||||
+ Added support for Enterasys devices as new class L3::Enterasys
|
||||
+ Added support for Enterasys devices as new class L3::Enterasys
|
||||
+ Added support for Dell PowerConnect switches as new class L3::Dell
|
||||
+ Added basic support for generic routers running Microsoft Windows OS
|
||||
as new class L3::Microsoft (begemot)
|
||||
@@ -519,7 +797,7 @@ version 1.05 (11/25/07) - CVS only. No official release
|
||||
+ Added support for Cisco (Airespace) wireless controllers as new class
|
||||
L2::Airespace
|
||||
+ Added support for Nortel Ethernet Routing Switch 2500 series and
|
||||
Business Ethernet Switches (David Siebörger)
|
||||
Business Ethernet Switches (David Siebörger)
|
||||
+ Update of L3::Foundry to support all Foundry devices including newer
|
||||
switches. Depreciate L2::Foundry.
|
||||
+ Added generic device type detection using IANA assigned enterpise
|
||||
@@ -532,7 +810,7 @@ version 1.05 (11/25/07) - CVS only. No official release
|
||||
+ New class IEEE802dot11 class for generic standards based wireless AP
|
||||
support to include i_ssidlist()and i_80211channel() methods.
|
||||
+ L2::Orinoco inherits from new IEEE802dot11 for i_ssidlist()and
|
||||
i_80211channel() support.
|
||||
i_80211channel() support.
|
||||
+ Added new VLAN methods i_pvid(), i_vlan_membership(), set_i_pvid(),
|
||||
set_i_vlan(), set_add_i_vlan_tagged(), set_remove_i_vlan_tagged() to
|
||||
Bridge, CiscoVTP, Extreme, HP, and RapidCity classes.
|
||||
@@ -594,14 +872,14 @@ version 1.04 (07/08/06)
|
||||
+ Added C1130 and C1240 to L2::Aironet (Ralf Gross)
|
||||
+ Added detection for Cisco 2960, 2940, 3400 w/ MetroBase
|
||||
+ Added generic L2::Cisco Class
|
||||
* Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS).
|
||||
* Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS).
|
||||
* Fixed warnings in CiscoStack
|
||||
* Updated ProCurve HP device detection for newer firmwares
|
||||
|
||||
version 1.03 (04/14/06) - Beta/developer release
|
||||
* Use ipNetToMedia table instead of atTable for ARP
|
||||
* Remove CiscoStack from Layer3::C4000
|
||||
* Fixed bug in MAU class when polling devices without MAU-MIB support
|
||||
* Fixed bug in MAU class when polling devices without MAU-MIB support
|
||||
|
||||
version 1.01 (04/08/06) - Beta/developer release
|
||||
+ Change version numbers to X.XX format. Odd releases are beta
|
||||
@@ -667,15 +945,15 @@ version 1.0 (04/07/06) - CVS only. No official release
|
||||
translated properly
|
||||
|
||||
verison 0.9 (11/15/04)
|
||||
+ ** Added full Nortel/Bay/BayStack support
|
||||
by new developer Eric Miller.
|
||||
+ ** Added full Nortel/Bay/BayStack support
|
||||
by new developer Eric Miller.
|
||||
L2::Bay now depricated.
|
||||
+ Added Alteon Ace support (Eric Miller)
|
||||
+ Added Nortel Cotivity support (Eric Miller)
|
||||
+ Added Nortel BayRS support (Eric Miller)
|
||||
+ Added Nortel Centillion support (Eric Miller)
|
||||
+ Added Nortel AP 222x support (Eric Miller)
|
||||
+ Added Orinco AP support (Eric Miller)
|
||||
+ Added Orinco AP support (Eric Miller)
|
||||
+ Added i_lastchange() per suggestion of Nicolai Petri
|
||||
+ Added BULKWALK patch by Bradley Baetz - This should
|
||||
greatly speed up requests on SNMPv2c devices.
|
||||
@@ -725,27 +1003,27 @@ version 0.6 (06/18/03)
|
||||
|
||||
version 0.5 (06/10/03)
|
||||
* Added ability to get paritial tables. For example to get the
|
||||
IP routing table for 128.114.* you can do
|
||||
IP routing table for 128.114.* you can do
|
||||
$ipr = $dev->ipr_dest('128.114');
|
||||
* Added IP Routing Table entries from RFC1213 to SNMP::Info
|
||||
* minor bug fixes
|
||||
|
||||
version 0.4 (04/29/03)
|
||||
* BIG CHANGE ! Internal Data structure has changed.
|
||||
* BIG CHANGE ! Internal Data structure has changed.
|
||||
* Added clear_cache() method
|
||||
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
|
||||
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
|
||||
from SNMP Version 1 devices.
|
||||
* Methods load_all() and all() have changed their return value. Sorry but
|
||||
the API had to change.
|
||||
* New object methods snmp_comm(), snmp_ver(), store(), class(), nosuch()
|
||||
to make it more OO happy.
|
||||
* Globals are now cached
|
||||
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
|
||||
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
|
||||
detected in device_type()
|
||||
* New method specify() returns a new subclass object
|
||||
* Subclasses are automatically loaded when specify or autospecify is used!
|
||||
* Added methods for Interface statistics (ifInOctets ...)
|
||||
* Added methods for Memory and CPU statistics
|
||||
* Added methods for Memory and CPU statistics
|
||||
* Added SNMP::Info::Entity, moved out of L2-HP
|
||||
* Added SNMP::Info::Layer2::Aironet
|
||||
|
||||
@@ -758,7 +1036,7 @@ version 0.3 (03/06/03)
|
||||
Thanks to Martin Lorensen <martin /at- lorensen.dk>
|
||||
* Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
|
||||
so that the Module will install via CPAN without trying to install the old
|
||||
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
|
||||
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
|
||||
Thanks again to Martin Lorensen <martin /at- lorensen.dk>
|
||||
* Moved tests from test.pl to t/*
|
||||
|
||||
@@ -768,10 +1046,10 @@ version 0.2 (02/19/03)
|
||||
* Fixed HP Detection in device_type()
|
||||
* Added Spanning Tree Protocol (STP) methods to SNMP::Info::Bridge
|
||||
* Removed HP Specific MIBS in SNMP::Info::Layer2 and cleaned up model()
|
||||
* Added poke for Bay 450 Switches
|
||||
* Added poke for Bay 450 Switches
|
||||
* Mapped HP Part Numbers to model numbers J4812A => 2512 in
|
||||
SNMP::Info::Layer2::HP
|
||||
|
||||
|
||||
version 0.1 (12/30/02)
|
||||
* Initial Release
|
||||
* SubClasses Included:
|
||||
@@ -781,13 +1059,13 @@ version 0.1 (12/30/02)
|
||||
* SNMP::Info::MAU
|
||||
* SNMP::Info::Layer1
|
||||
o SNMP::Info::Layer1::Allied
|
||||
o SNMP::Info::Layer1::Asante
|
||||
o SNMP::Info::Layer1::Asante
|
||||
* SNMP::Info::Layer2
|
||||
o SNMP::Info::Layer2::Bay
|
||||
o SNMP::Info::Layer2::C1900
|
||||
o SNMP::Info::Layer2::C2900
|
||||
o SNMP::Info::Layer2::Catalyst
|
||||
o SNMP::Info::Layer2::HP
|
||||
o SNMP::Info::Layer2::HP
|
||||
* SNMP::Info::Layer3
|
||||
o SNMP::Info::Layer3::Aironet
|
||||
o SNMP::Info::Layer3::Foundry
|
||||
1045
DeviceMatrix.txt
1045
DeviceMatrix.txt
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
All code from version 0.7 on
|
||||
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
|
||||
Copyright (c) 2003-2016 Max Baker and SNMP::Info Developers
|
||||
All rights reserved.
|
||||
|
||||
Original Code
|
||||
261
MANIFEST
261
MANIFEST
@@ -1,122 +1,143 @@
|
||||
ChangeLog
|
||||
COPYRIGHT
|
||||
DEVELOP
|
||||
DeviceMatrix.txt
|
||||
Info.pm
|
||||
Info/AdslLine.pm
|
||||
Info/Aggregate.pm
|
||||
Info/Airespace.pm
|
||||
Info/AMAP.pm
|
||||
Info/Bridge.pm
|
||||
Info/CDP.pm
|
||||
Info/CiscoAgg.pm
|
||||
Info/CiscoConfig.pm
|
||||
Info/CiscoPortSecurity.pm
|
||||
Info/CiscoPower.pm
|
||||
Info/CiscoQOS.pm
|
||||
Info/CiscoRTT.pm
|
||||
Info/CiscoStack.pm
|
||||
Info/CiscoStats.pm
|
||||
Info/CiscoStpExtensions.pm
|
||||
Info/CiscoVTP.pm
|
||||
Info/EDP.pm
|
||||
Info/Entity.pm
|
||||
Info/EtherLike.pm
|
||||
Info/FDP.pm
|
||||
Info/IEEE802dot11.pm
|
||||
Info/IEEE802dot3ad.pm
|
||||
Info/IPv6.pm
|
||||
Info/Layer1.pm
|
||||
Info/Layer1/Allied.pm
|
||||
Info/Layer1/Asante.pm
|
||||
Info/Layer1/Bayhub.pm
|
||||
Info/Layer1/Cyclades.pm
|
||||
Info/Layer1/S3000.pm
|
||||
Info/Layer2.pm
|
||||
Info/Layer2/Airespace.pm
|
||||
Info/Layer2/Aironet.pm
|
||||
Info/Layer2/Allied.pm
|
||||
Info/Layer2/Baystack.pm
|
||||
Info/Layer2/C1900.pm
|
||||
Info/Layer2/C2900.pm
|
||||
Info/Layer2/Catalyst.pm
|
||||
Info/Layer2/Centillion.pm
|
||||
Info/Layer2/Cisco.pm
|
||||
Info/Layer2/CiscoSB.pm
|
||||
Info/Layer2/HP.pm
|
||||
Info/Layer2/HP4000.pm
|
||||
Info/Layer2/HPVC.pm
|
||||
Info/Layer2/Kentrox.pm
|
||||
Info/Layer2/N2270.pm
|
||||
Info/Layer2/NAP222x.pm
|
||||
Info/Layer2/Netgear.pm
|
||||
Info/Layer2/NWSS2300.pm
|
||||
Info/Layer2/Orinoco.pm
|
||||
Info/Layer2/Trapeze.pm
|
||||
Info/Layer2/ZyXEL_DSLAM.pm
|
||||
Info/Layer3.pm
|
||||
Info/Layer3/Aironet.pm
|
||||
Info/Layer3/AlcatelLucent.pm
|
||||
Info/Layer3/AlteonAD.pm
|
||||
Info/Layer3/Altiga.pm
|
||||
Info/Layer3/Arista.pm
|
||||
Info/Layer3/Aruba.pm
|
||||
Info/Layer3/BayRS.pm
|
||||
Info/Layer3/BlueCoatSG.pm
|
||||
Info/Layer3/C3550.pm
|
||||
Info/Layer3/C4000.pm
|
||||
Info/Layer3/C6500.pm
|
||||
Info/Layer3/Cisco.pm
|
||||
Info/Layer3/CiscoASA.pm
|
||||
Info/Layer3/CiscoFWSM.pm
|
||||
Info/Layer3/CiscoSwitch.pm
|
||||
Info/Layer3/Contivity.pm
|
||||
Info/Layer3/Dell.pm
|
||||
Info/Layer3/Enterasys.pm
|
||||
Info/Layer3/Extreme.pm
|
||||
Info/Layer3/F5.pm
|
||||
Info/Layer3/Force10.pm
|
||||
Info/Layer3/Foundry.pm
|
||||
Info/Layer3/H3C.pm
|
||||
Info/Layer3/HP9300.pm
|
||||
Info/Layer3/IBMGbTor.pm
|
||||
Info/Layer3/Juniper.pm
|
||||
Info/Layer3/Lantronix.pm
|
||||
Info/Layer3/Microsoft.pm
|
||||
Info/Layer3/Mikrotik.pm
|
||||
Info/Layer3/N1600.pm
|
||||
Info/Layer3/Netscreen.pm
|
||||
Info/Layer3/NetSNMP.pm
|
||||
Info/Layer3/Nexus.pm
|
||||
Info/Layer3/PacketFront.pm
|
||||
Info/Layer3/Passport.pm
|
||||
Info/Layer3/Pf.pm
|
||||
Info/Layer3/Pica8.pm
|
||||
Info/Layer3/SonicWALL.pm
|
||||
Info/Layer3/Steelhead.pm
|
||||
Info/Layer3/Sun.pm
|
||||
Info/Layer3/Tasman.pm
|
||||
Info/Layer3/Timetra.pm
|
||||
Info/Layer7.pm
|
||||
Info/Layer7/APC.pm
|
||||
Info/Layer7/Neoteris.pm
|
||||
Info/Layer7/Netscaler.pm
|
||||
Info/LLDP.pm
|
||||
Info/MAU.pm
|
||||
Info/MRO.pm
|
||||
Info/NortelStack.pm
|
||||
Info/PowerEthernet.pm
|
||||
Info/RapidCity.pm
|
||||
Info/SONMP.pm
|
||||
Makefile.PL
|
||||
Build.PL
|
||||
Changes
|
||||
contrib/DEVELOP
|
||||
contrib/util/docmunge
|
||||
contrib/util/make_dev_matrix.pl
|
||||
contrib/util/make_snmpdata.pl
|
||||
contrib/util/push_ver
|
||||
contrib/util/run_test
|
||||
contrib/util/test_class.pl
|
||||
contrib/util/test_class_mocked.pl
|
||||
lib/SNMP/Info.pm
|
||||
lib/SNMP/Info/AdslLine.pm
|
||||
lib/SNMP/Info/Aggregate.pm
|
||||
lib/SNMP/Info/Airespace.pm
|
||||
lib/SNMP/Info/AMAP.pm
|
||||
lib/SNMP/Info/Bridge.pm
|
||||
lib/SNMP/Info/CDP.pm
|
||||
lib/SNMP/Info/CiscoAgg.pm
|
||||
lib/SNMP/Info/CiscoConfig.pm
|
||||
lib/SNMP/Info/CiscoPortSecurity.pm
|
||||
lib/SNMP/Info/CiscoPower.pm
|
||||
lib/SNMP/Info/CiscoQOS.pm
|
||||
lib/SNMP/Info/CiscoRTT.pm
|
||||
lib/SNMP/Info/CiscoStack.pm
|
||||
lib/SNMP/Info/CiscoStats.pm
|
||||
lib/SNMP/Info/CiscoStpExtensions.pm
|
||||
lib/SNMP/Info/CiscoVTP.pm
|
||||
lib/SNMP/Info/EDP.pm
|
||||
lib/SNMP/Info/Entity.pm
|
||||
lib/SNMP/Info/EtherLike.pm
|
||||
lib/SNMP/Info/FDP.pm
|
||||
lib/SNMP/Info/IEEE802dot11.pm
|
||||
lib/SNMP/Info/IEEE802dot3ad.pm
|
||||
lib/SNMP/Info/IPv6.pm
|
||||
lib/SNMP/Info/Layer1.pm
|
||||
lib/SNMP/Info/Layer1/Allied.pm
|
||||
lib/SNMP/Info/Layer1/Asante.pm
|
||||
lib/SNMP/Info/Layer1/Bayhub.pm
|
||||
lib/SNMP/Info/Layer1/Cyclades.pm
|
||||
lib/SNMP/Info/Layer1/S3000.pm
|
||||
lib/SNMP/Info/Layer2.pm
|
||||
lib/SNMP/Info/Layer2/3Com.pm
|
||||
lib/SNMP/Info/Layer2/Adtran.pm
|
||||
lib/SNMP/Info/Layer2/Airespace.pm
|
||||
lib/SNMP/Info/Layer2/Aironet.pm
|
||||
lib/SNMP/Info/Layer2/Allied.pm
|
||||
lib/SNMP/Info/Layer2/Baystack.pm
|
||||
lib/SNMP/Info/Layer2/C1900.pm
|
||||
lib/SNMP/Info/Layer2/C2900.pm
|
||||
lib/SNMP/Info/Layer2/Catalyst.pm
|
||||
lib/SNMP/Info/Layer2/Centillion.pm
|
||||
lib/SNMP/Info/Layer2/Cisco.pm
|
||||
lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||
lib/SNMP/Info/Layer2/HP.pm
|
||||
lib/SNMP/Info/Layer2/HP4000.pm
|
||||
lib/SNMP/Info/Layer2/HPVC.pm
|
||||
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/NWSS2300.pm
|
||||
lib/SNMP/Info/Layer2/Orinoco.pm
|
||||
lib/SNMP/Info/Layer2/Trapeze.pm
|
||||
lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||
lib/SNMP/Info/Layer3.pm
|
||||
lib/SNMP/Info/Layer3/Aironet.pm
|
||||
lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||
lib/SNMP/Info/Layer3/AlteonAD.pm
|
||||
lib/SNMP/Info/Layer3/Altiga.pm
|
||||
lib/SNMP/Info/Layer3/Arista.pm
|
||||
lib/SNMP/Info/Layer3/Aruba.pm
|
||||
lib/SNMP/Info/Layer3/BayRS.pm
|
||||
lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||
lib/SNMP/Info/Layer3/C3550.pm
|
||||
lib/SNMP/Info/Layer3/C4000.pm
|
||||
lib/SNMP/Info/Layer3/C6500.pm
|
||||
lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||
lib/SNMP/Info/Layer3/Cisco.pm
|
||||
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/Dell.pm
|
||||
lib/SNMP/Info/Layer3/DLink.pm
|
||||
lib/SNMP/Info/Layer3/Enterasys.pm
|
||||
lib/SNMP/Info/Layer3/Extreme.pm
|
||||
lib/SNMP/Info/Layer3/F5.pm
|
||||
lib/SNMP/Info/Layer3/Force10.pm
|
||||
lib/SNMP/Info/Layer3/Fortinet.pm
|
||||
lib/SNMP/Info/Layer3/Foundry.pm
|
||||
lib/SNMP/Info/Layer3/H3C.pm
|
||||
lib/SNMP/Info/Layer3/HP9300.pm
|
||||
lib/SNMP/Info/Layer3/Huawei.pm
|
||||
lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||
lib/SNMP/Info/Layer3/Juniper.pm
|
||||
lib/SNMP/Info/Layer3/Lantronix.pm
|
||||
lib/SNMP/Info/Layer3/Microsoft.pm
|
||||
lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||
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/PacketFront.pm
|
||||
lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||
lib/SNMP/Info/Layer3/Passport.pm
|
||||
lib/SNMP/Info/Layer3/Pf.pm
|
||||
lib/SNMP/Info/Layer3/Pica8.pm
|
||||
lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||
lib/SNMP/Info/Layer3/Steelhead.pm
|
||||
lib/SNMP/Info/Layer3/Sun.pm
|
||||
lib/SNMP/Info/Layer3/Tasman.pm
|
||||
lib/SNMP/Info/Layer3/Timetra.pm
|
||||
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/CiscoIPS.pm
|
||||
lib/SNMP/Info/Layer7/Neoteris.pm
|
||||
lib/SNMP/Info/Layer7/Netscaler.pm
|
||||
lib/SNMP/Info/LLDP.pm
|
||||
lib/SNMP/Info/MAU.pm
|
||||
lib/SNMP/Info/MRO.pm
|
||||
lib/SNMP/Info/NortelStack.pm
|
||||
lib/SNMP/Info/PowerEthernet.pm
|
||||
lib/SNMP/Info/RapidCity.pm
|
||||
lib/SNMP/Info/SONMP.pm
|
||||
LICENSE
|
||||
MANIFEST This list of files
|
||||
META.json
|
||||
META.yml
|
||||
README
|
||||
t/00-load.t
|
||||
t/docmunge
|
||||
t/make_dev_matrix.pl
|
||||
t/prereq.t
|
||||
t/push_ver
|
||||
t/run_test
|
||||
t/test_class.pl
|
||||
t/util/make_snmpdata.pl
|
||||
t/util/test_class_mocked.pl
|
||||
t/00_load.t
|
||||
xt/.perltidyrc
|
||||
xt/00_local_distribution.t
|
||||
xt/00_local_docininfo.t
|
||||
xt/00_local_perlcritic.t
|
||||
xt/00_local_pod-coverage.t
|
||||
xt/00_local_pod.t
|
||||
xt/00_local_prereq.t
|
||||
xt/00_local_spelling.t
|
||||
xt/00_local_versionsync.t
|
||||
xt/10_remote_snmplabs.t
|
||||
|
||||
@@ -1,28 +1,67 @@
|
||||
# Version control files and dirs.
|
||||
\.bak$
|
||||
\.pid$
|
||||
\.swp$
|
||||
|
||||
^SNMP-Info-
|
||||
|
||||
^MANIFEST\.
|
||||
|
||||
# Avoid version control files.
|
||||
\bRCS\b
|
||||
\bCVS\b
|
||||
\bSCCS\b
|
||||
,v$
|
||||
\B\.svn\b
|
||||
\B\.git\b
|
||||
.gitignore
|
||||
\B\.gitignore\b
|
||||
\b_darcs\b
|
||||
\B\.cvsignore$
|
||||
|
||||
# Makemaker generated files and dirs.
|
||||
^MANIFEST\.
|
||||
^Makefile$
|
||||
^blib/
|
||||
^MakeMaker-\d
|
||||
pm_to_blib
|
||||
MYMETA.*
|
||||
# Avoid VMS specific MakeMaker generated files
|
||||
\bDescrip.MMS$
|
||||
\bDESCRIP.MMS$
|
||||
\bdescrip.mms$
|
||||
|
||||
# Temp, old and emacs backup files.
|
||||
# Avoid Makemaker generated and utility files.
|
||||
\bMANIFEST\.bak
|
||||
\bMakefile$
|
||||
\bblib/
|
||||
\bMakeMaker-\d
|
||||
\bpm_to_blib\.ts$
|
||||
\bpm_to_blib$
|
||||
\bblibdirs\.ts$ # 6.18 through 6.25 generated this
|
||||
|
||||
# Avoid Module::Build generated and utility files.
|
||||
\bBuild$
|
||||
\b_build/
|
||||
\bBuild.bat$
|
||||
\bBuild.COM$
|
||||
\bBUILD.COM$
|
||||
\bbuild.com$
|
||||
|
||||
# Avoid temp and backup files.
|
||||
~$
|
||||
\.old$
|
||||
^#.*#$
|
||||
^\.#
|
||||
\#$
|
||||
\b\.#
|
||||
\.bak$
|
||||
\.tmp$
|
||||
\.#
|
||||
\.rej$
|
||||
|
||||
# Private Regression Tests
|
||||
\d+_local_
|
||||
\.?perl\w+\.?rc$
|
||||
# Avoid OS-specific files/dirs
|
||||
# Mac OSX metadata
|
||||
\B\.DS_Store
|
||||
# Mac OSX SMB mount metadata files
|
||||
\B\._
|
||||
|
||||
# Komodo project file
|
||||
\.kpf$
|
||||
# Avoid Devel::Cover and Devel::CoverX::Covered files.
|
||||
\bcover_db\b
|
||||
\bcovered\b
|
||||
|
||||
# Avoid MYMETA files
|
||||
^MYMETA\.
|
||||
|
||||
.github
|
||||
.travis
|
||||
README.md
|
||||
|
||||
529
META.json
Normal file
529
META.json
Normal file
@@ -0,0 +1,529 @@
|
||||
{
|
||||
"abstract" : "OO Interface to Network devices and MIBs through SNMP",
|
||||
"author" : [
|
||||
"Eric A. Miller <emiller@cpan.org>"
|
||||
],
|
||||
"dynamic_config" : 1,
|
||||
"generated_by" : "Module::Build version 0.4224",
|
||||
"license" : [
|
||||
"bsd"
|
||||
],
|
||||
"meta-spec" : {
|
||||
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
|
||||
"version" : 2
|
||||
},
|
||||
"name" : "SNMP-Info",
|
||||
"prereqs" : {
|
||||
"configure" : {
|
||||
"requires" : {
|
||||
"Module::Build" : "0.42"
|
||||
}
|
||||
},
|
||||
"runtime" : {
|
||||
"recommends" : {
|
||||
"Class::ISA" : "0",
|
||||
"File::Slurp" : "0",
|
||||
"Module::Info" : "0",
|
||||
"Module::Load" : "0",
|
||||
"PPI" : "0"
|
||||
},
|
||||
"requires" : {
|
||||
"Math::BigInt" : "0",
|
||||
"SNMP" : "0"
|
||||
}
|
||||
},
|
||||
"test" : {
|
||||
"requires" : {
|
||||
"Test::Distribution" : "0",
|
||||
"Test::More" : "0.88"
|
||||
}
|
||||
}
|
||||
},
|
||||
"provides" : {
|
||||
"SNMP::Info" : {
|
||||
"file" : "lib/SNMP/Info.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::AMAP" : {
|
||||
"file" : "lib/SNMP/Info/AMAP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::AdslLine" : {
|
||||
"file" : "lib/SNMP/Info/AdslLine.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Aggregate" : {
|
||||
"file" : "lib/SNMP/Info/Aggregate.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Airespace" : {
|
||||
"file" : "lib/SNMP/Info/Airespace.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Bridge" : {
|
||||
"file" : "lib/SNMP/Info/Bridge.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CDP" : {
|
||||
"file" : "lib/SNMP/Info/CDP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoAgg" : {
|
||||
"file" : "lib/SNMP/Info/CiscoAgg.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoConfig" : {
|
||||
"file" : "lib/SNMP/Info/CiscoConfig.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoPortSecurity" : {
|
||||
"file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoPower" : {
|
||||
"file" : "lib/SNMP/Info/CiscoPower.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoQOS" : {
|
||||
"file" : "lib/SNMP/Info/CiscoQOS.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoRTT" : {
|
||||
"file" : "lib/SNMP/Info/CiscoRTT.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoStack" : {
|
||||
"file" : "lib/SNMP/Info/CiscoStack.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoStats" : {
|
||||
"file" : "lib/SNMP/Info/CiscoStats.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoStpExtensions" : {
|
||||
"file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::CiscoVTP" : {
|
||||
"file" : "lib/SNMP/Info/CiscoVTP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::EDP" : {
|
||||
"file" : "lib/SNMP/Info/EDP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Entity" : {
|
||||
"file" : "lib/SNMP/Info/Entity.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::EtherLike" : {
|
||||
"file" : "lib/SNMP/Info/EtherLike.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::FDP" : {
|
||||
"file" : "lib/SNMP/Info/FDP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::IEEE802dot11" : {
|
||||
"file" : "lib/SNMP/Info/IEEE802dot11.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::IEEE802dot3ad" : {
|
||||
"file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::IPv6" : {
|
||||
"file" : "lib/SNMP/Info/IPv6.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::LLDP" : {
|
||||
"file" : "lib/SNMP/Info/LLDP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer1" : {
|
||||
"file" : "lib/SNMP/Info/Layer1.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer1::Allied" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Allied.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer1::Asante" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Asante.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer1::Bayhub" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer1::Cyclades" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer1::S3000" : {
|
||||
"file" : "lib/SNMP/Info/Layer1/S3000.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2" : {
|
||||
"file" : "lib/SNMP/Info/Layer2.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::3Com" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/3Com.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Adtran" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Adtran.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Airespace" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Airespace.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Aironet" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Aironet.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Allied" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Allied.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Baystack" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Baystack.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::C1900" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/C1900.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::C2900" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/C2900.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Catalyst" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Centillion" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Centillion.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Cisco" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Cisco.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::CiscoSB" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::HP" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/HP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::HP4000" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/HP4000.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::HPVC" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/HPVC.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Kentrox" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::N2270" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/N2270.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::NAP222x" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::NWSS2300" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Netgear" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Netgear.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Orinoco" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Trapeze" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::Ubiquiti" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer2::ZyXEL_DSLAM" : {
|
||||
"file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3" : {
|
||||
"file" : "lib/SNMP/Info/Layer3.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Aironet" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Aironet.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::AlcatelLucent" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::AlteonAD" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Altiga" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Altiga.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Arista" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Arista.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Aruba" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Aruba.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::BayRS" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/BayRS.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::BlueCoatSG" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::C3550" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/C3550.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::C4000" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/C4000.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::C6500" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/C6500.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::CheckPoint" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Cisco" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Cisco.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::CiscoASA" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::CiscoFWSM" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::CiscoSwitch" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Contivity" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Contivity.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::DLink" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/DLink.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Dell" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Dell.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Enterasys" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Extreme" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Extreme.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::F5" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/F5.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Force10" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Force10.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Fortinet" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Foundry" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Foundry.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::H3C" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/H3C.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::HP9300" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/HP9300.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Huawei" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Huawei.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::IBMGbTor" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Juniper" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Juniper.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Lantronix" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Microsoft" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Mikrotik" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::N1600" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/N1600.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::NetSNMP" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Netscreen" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Nexus" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Nexus.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::PacketFront" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::PaloAlto" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Passport" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Passport.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Pf" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Pf.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Pica8" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Pica8.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::SonicWALL" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Steelhead" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Sun" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Sun.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Tasman" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Tasman.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::Timetra" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/Timetra.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::VMware" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/VMware.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer3::VyOS" : {
|
||||
"file" : "lib/SNMP/Info/Layer3/VyOS.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer7" : {
|
||||
"file" : "lib/SNMP/Info/Layer7.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer7::APC" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/APC.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer7::CiscoIPS" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer7::Neoteris" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::Layer7::Netscaler" : {
|
||||
"file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::MAU" : {
|
||||
"file" : "lib/SNMP/Info/MAU.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::MRO" : {
|
||||
"file" : "lib/SNMP/Info/MRO.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::NortelStack" : {
|
||||
"file" : "lib/SNMP/Info/NortelStack.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::PowerEthernet" : {
|
||||
"file" : "lib/SNMP/Info/PowerEthernet.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::RapidCity" : {
|
||||
"file" : "lib/SNMP/Info/RapidCity.pm",
|
||||
"version" : "3.42"
|
||||
},
|
||||
"SNMP::Info::SONMP" : {
|
||||
"file" : "lib/SNMP/Info/SONMP.pm",
|
||||
"version" : "3.42"
|
||||
}
|
||||
},
|
||||
"release_status" : "stable",
|
||||
"resources" : {
|
||||
"bugtracker" : {
|
||||
"web" : "https://github.com/netdisco/snmp-info/issues"
|
||||
},
|
||||
"homepage" : "http://netdisco.org/",
|
||||
"license" : [
|
||||
"http://opensource.org/licenses/bsd-license.php"
|
||||
],
|
||||
"repository" : {
|
||||
"url" : "https://github.com/netdisco/snmp-info"
|
||||
},
|
||||
"x_IRC" : "irc://irc.freenode.org/#netdisco",
|
||||
"x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
|
||||
},
|
||||
"version" : "3.42",
|
||||
"x_serialization_backend" : "JSON::PP version 2.94"
|
||||
}
|
||||
386
META.yml
Normal file
386
META.yml
Normal file
@@ -0,0 +1,386 @@
|
||||
---
|
||||
abstract: 'OO Interface to Network devices and MIBs through SNMP'
|
||||
author:
|
||||
- 'Eric A. Miller <emiller@cpan.org>'
|
||||
build_requires:
|
||||
Test::Distribution: '0'
|
||||
Test::More: '0.88'
|
||||
configure_requires:
|
||||
Module::Build: '0.42'
|
||||
dynamic_config: 1
|
||||
generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 2.150010'
|
||||
license: bsd
|
||||
meta-spec:
|
||||
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
||||
version: '1.4'
|
||||
name: SNMP-Info
|
||||
provides:
|
||||
SNMP::Info:
|
||||
file: lib/SNMP/Info.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::AMAP:
|
||||
file: lib/SNMP/Info/AMAP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::AdslLine:
|
||||
file: lib/SNMP/Info/AdslLine.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Aggregate:
|
||||
file: lib/SNMP/Info/Aggregate.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Airespace:
|
||||
file: lib/SNMP/Info/Airespace.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Bridge:
|
||||
file: lib/SNMP/Info/Bridge.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CDP:
|
||||
file: lib/SNMP/Info/CDP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoAgg:
|
||||
file: lib/SNMP/Info/CiscoAgg.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoConfig:
|
||||
file: lib/SNMP/Info/CiscoConfig.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoPortSecurity:
|
||||
file: lib/SNMP/Info/CiscoPortSecurity.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoPower:
|
||||
file: lib/SNMP/Info/CiscoPower.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoQOS:
|
||||
file: lib/SNMP/Info/CiscoQOS.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoRTT:
|
||||
file: lib/SNMP/Info/CiscoRTT.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoStack:
|
||||
file: lib/SNMP/Info/CiscoStack.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoStats:
|
||||
file: lib/SNMP/Info/CiscoStats.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoStpExtensions:
|
||||
file: lib/SNMP/Info/CiscoStpExtensions.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::CiscoVTP:
|
||||
file: lib/SNMP/Info/CiscoVTP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::EDP:
|
||||
file: lib/SNMP/Info/EDP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Entity:
|
||||
file: lib/SNMP/Info/Entity.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::EtherLike:
|
||||
file: lib/SNMP/Info/EtherLike.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::FDP:
|
||||
file: lib/SNMP/Info/FDP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::IEEE802dot11:
|
||||
file: lib/SNMP/Info/IEEE802dot11.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::IEEE802dot3ad:
|
||||
file: lib/SNMP/Info/IEEE802dot3ad.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::IPv6:
|
||||
file: lib/SNMP/Info/IPv6.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::LLDP:
|
||||
file: lib/SNMP/Info/LLDP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer1:
|
||||
file: lib/SNMP/Info/Layer1.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer1::Allied:
|
||||
file: lib/SNMP/Info/Layer1/Allied.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer1::Asante:
|
||||
file: lib/SNMP/Info/Layer1/Asante.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer1::Bayhub:
|
||||
file: lib/SNMP/Info/Layer1/Bayhub.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer1::Cyclades:
|
||||
file: lib/SNMP/Info/Layer1/Cyclades.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer1::S3000:
|
||||
file: lib/SNMP/Info/Layer1/S3000.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2:
|
||||
file: lib/SNMP/Info/Layer2.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::3Com:
|
||||
file: lib/SNMP/Info/Layer2/3Com.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Adtran:
|
||||
file: lib/SNMP/Info/Layer2/Adtran.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Airespace:
|
||||
file: lib/SNMP/Info/Layer2/Airespace.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Aironet:
|
||||
file: lib/SNMP/Info/Layer2/Aironet.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Allied:
|
||||
file: lib/SNMP/Info/Layer2/Allied.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Baystack:
|
||||
file: lib/SNMP/Info/Layer2/Baystack.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::C1900:
|
||||
file: lib/SNMP/Info/Layer2/C1900.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::C2900:
|
||||
file: lib/SNMP/Info/Layer2/C2900.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Catalyst:
|
||||
file: lib/SNMP/Info/Layer2/Catalyst.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Centillion:
|
||||
file: lib/SNMP/Info/Layer2/Centillion.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Cisco:
|
||||
file: lib/SNMP/Info/Layer2/Cisco.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::CiscoSB:
|
||||
file: lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::HP:
|
||||
file: lib/SNMP/Info/Layer2/HP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::HP4000:
|
||||
file: lib/SNMP/Info/Layer2/HP4000.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::HPVC:
|
||||
file: lib/SNMP/Info/Layer2/HPVC.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Kentrox:
|
||||
file: lib/SNMP/Info/Layer2/Kentrox.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::N2270:
|
||||
file: lib/SNMP/Info/Layer2/N2270.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::NAP222x:
|
||||
file: lib/SNMP/Info/Layer2/NAP222x.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::NWSS2300:
|
||||
file: lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Netgear:
|
||||
file: lib/SNMP/Info/Layer2/Netgear.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Orinoco:
|
||||
file: lib/SNMP/Info/Layer2/Orinoco.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Trapeze:
|
||||
file: lib/SNMP/Info/Layer2/Trapeze.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::Ubiquiti:
|
||||
file: lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer2::ZyXEL_DSLAM:
|
||||
file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3:
|
||||
file: lib/SNMP/Info/Layer3.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Aironet:
|
||||
file: lib/SNMP/Info/Layer3/Aironet.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::AlcatelLucent:
|
||||
file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::AlteonAD:
|
||||
file: lib/SNMP/Info/Layer3/AlteonAD.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Altiga:
|
||||
file: lib/SNMP/Info/Layer3/Altiga.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Arista:
|
||||
file: lib/SNMP/Info/Layer3/Arista.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Aruba:
|
||||
file: lib/SNMP/Info/Layer3/Aruba.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::BayRS:
|
||||
file: lib/SNMP/Info/Layer3/BayRS.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::BlueCoatSG:
|
||||
file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::C3550:
|
||||
file: lib/SNMP/Info/Layer3/C3550.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::C4000:
|
||||
file: lib/SNMP/Info/Layer3/C4000.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::C6500:
|
||||
file: lib/SNMP/Info/Layer3/C6500.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::CheckPoint:
|
||||
file: lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Cisco:
|
||||
file: lib/SNMP/Info/Layer3/Cisco.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::CiscoASA:
|
||||
file: lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::CiscoFWSM:
|
||||
file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::CiscoSwitch:
|
||||
file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Contivity:
|
||||
file: lib/SNMP/Info/Layer3/Contivity.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::DLink:
|
||||
file: lib/SNMP/Info/Layer3/DLink.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Dell:
|
||||
file: lib/SNMP/Info/Layer3/Dell.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Enterasys:
|
||||
file: lib/SNMP/Info/Layer3/Enterasys.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Extreme:
|
||||
file: lib/SNMP/Info/Layer3/Extreme.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::F5:
|
||||
file: lib/SNMP/Info/Layer3/F5.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Force10:
|
||||
file: lib/SNMP/Info/Layer3/Force10.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Fortinet:
|
||||
file: lib/SNMP/Info/Layer3/Fortinet.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Foundry:
|
||||
file: lib/SNMP/Info/Layer3/Foundry.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::H3C:
|
||||
file: lib/SNMP/Info/Layer3/H3C.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::HP9300:
|
||||
file: lib/SNMP/Info/Layer3/HP9300.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Huawei:
|
||||
file: lib/SNMP/Info/Layer3/Huawei.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::IBMGbTor:
|
||||
file: lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Juniper:
|
||||
file: lib/SNMP/Info/Layer3/Juniper.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Lantronix:
|
||||
file: lib/SNMP/Info/Layer3/Lantronix.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Microsoft:
|
||||
file: lib/SNMP/Info/Layer3/Microsoft.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Mikrotik:
|
||||
file: lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::N1600:
|
||||
file: lib/SNMP/Info/Layer3/N1600.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::NetSNMP:
|
||||
file: lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Netscreen:
|
||||
file: lib/SNMP/Info/Layer3/Netscreen.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Nexus:
|
||||
file: lib/SNMP/Info/Layer3/Nexus.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::PacketFront:
|
||||
file: lib/SNMP/Info/Layer3/PacketFront.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::PaloAlto:
|
||||
file: lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Passport:
|
||||
file: lib/SNMP/Info/Layer3/Passport.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Pf:
|
||||
file: lib/SNMP/Info/Layer3/Pf.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Pica8:
|
||||
file: lib/SNMP/Info/Layer3/Pica8.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::SonicWALL:
|
||||
file: lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Steelhead:
|
||||
file: lib/SNMP/Info/Layer3/Steelhead.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Sun:
|
||||
file: lib/SNMP/Info/Layer3/Sun.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Tasman:
|
||||
file: lib/SNMP/Info/Layer3/Tasman.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::Timetra:
|
||||
file: lib/SNMP/Info/Layer3/Timetra.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::VMware:
|
||||
file: lib/SNMP/Info/Layer3/VMware.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer3::VyOS:
|
||||
file: lib/SNMP/Info/Layer3/VyOS.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer7:
|
||||
file: lib/SNMP/Info/Layer7.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer7::APC:
|
||||
file: lib/SNMP/Info/Layer7/APC.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer7::CiscoIPS:
|
||||
file: lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer7::Neoteris:
|
||||
file: lib/SNMP/Info/Layer7/Neoteris.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::Layer7::Netscaler:
|
||||
file: lib/SNMP/Info/Layer7/Netscaler.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::MAU:
|
||||
file: lib/SNMP/Info/MAU.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::MRO:
|
||||
file: lib/SNMP/Info/MRO.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::NortelStack:
|
||||
file: lib/SNMP/Info/NortelStack.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::PowerEthernet:
|
||||
file: lib/SNMP/Info/PowerEthernet.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::RapidCity:
|
||||
file: lib/SNMP/Info/RapidCity.pm
|
||||
version: '3.42'
|
||||
SNMP::Info::SONMP:
|
||||
file: lib/SNMP/Info/SONMP.pm
|
||||
version: '3.42'
|
||||
recommends:
|
||||
Class::ISA: '0'
|
||||
File::Slurp: '0'
|
||||
Module::Info: '0'
|
||||
Module::Load: '0'
|
||||
PPI: '0'
|
||||
requires:
|
||||
Math::BigInt: '0'
|
||||
SNMP: '0'
|
||||
resources:
|
||||
IRC: irc://irc.freenode.org/#netdisco
|
||||
MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
|
||||
bugtracker: https://github.com/netdisco/snmp-info/issues
|
||||
homepage: http://netdisco.org/
|
||||
license: http://opensource.org/licenses/bsd-license.php
|
||||
repository: https://github.com/netdisco/snmp-info
|
||||
version: '3.42'
|
||||
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
||||
39
Makefile.PL
39
Makefile.PL
@@ -1,39 +0,0 @@
|
||||
# Module makefile for SNMP::Info (using ExtUtils::MakeMaker)
|
||||
# $Id$
|
||||
|
||||
require 5.006;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use ExtUtils::MakeMaker;
|
||||
|
||||
WriteMakefile(
|
||||
NAME => 'SNMP::Info',
|
||||
AUTHOR => 'Eric A. Miller <emiller@cpan.org>',
|
||||
VERSION_FROM => 'Info.pm',
|
||||
ABSTRACT_FROM => 'Info.pm',
|
||||
PREREQ_PM => {
|
||||
'Test::More' => 0,
|
||||
'Math::BigInt' => 0,
|
||||
'SNMP' => 0,
|
||||
},
|
||||
PMLIBDIRS => [ 'Info', '$(BASEEXT)' ],
|
||||
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
|
||||
clean => { FILES => 'SNMP-Info-*' },
|
||||
realclean => { FILES => 'Makefile.old' },
|
||||
( ( ExtUtils::MakeMaker->VERSION() lt '6.25' ) ? ( 'PL_FILES' => {} )
|
||||
: ()
|
||||
),
|
||||
( ( ExtUtils::MakeMaker->VERSION() gt '6.30' ) ? ( 'LICENSE' => 'bsd' )
|
||||
: ()
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
sub MY::postamble {
|
||||
"
|
||||
.PHONY: readme
|
||||
readme: README
|
||||
README: Info.pm
|
||||
pod2text -l Info.pm > README";
|
||||
}
|
||||
@@ -4,7 +4,6 @@ Coding Guidelines:
|
||||
- tab-width of 4, no tab characters
|
||||
- keep POD documentation up-to-date
|
||||
- always update ChangeLog before committing
|
||||
- always update DeviceMatrix.txt before committing
|
||||
- check-in required mibs to netdisco-mibs and release new package if needed
|
||||
|
||||
Release and Testing Instructions:
|
||||
@@ -3,9 +3,9 @@
|
||||
|
||||
use File::Glob qw/bsd_glob/;
|
||||
|
||||
my @pms = glob_rec("../Info");
|
||||
my @pms = glob_rec("../../lib");
|
||||
|
||||
$new_version = shift @ARGV || '3.01';
|
||||
$new_version = shift @ARGV || die "missing new version\n";
|
||||
|
||||
foreach my $p (@pms) {
|
||||
print "$p\n";
|
||||
@@ -16,6 +16,7 @@ foreach my $p (@pms) {
|
||||
|
||||
while (<O>) {
|
||||
s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
|
||||
s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/;
|
||||
print P;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ use vars
|
||||
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
|
||||
$NOSUCH $BIGINT $REPEATERS/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
@@ -32,7 +32,7 @@ SNMP::Info - OO Interface to Network devices and MIBs through SNMP
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
SNMP::Info - Version 3.18
|
||||
SNMP::Info - Version 3.42
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -47,7 +47,9 @@ by Max Baker.
|
||||
|
||||
=head1 DEVICES SUPPORTED
|
||||
|
||||
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details.
|
||||
There are now generic classes for most types of device and so the authors
|
||||
recommend loading SNMP::Info with AutoSpecify, and then reporting to the mail
|
||||
list any missing functionality (such as neighbor discovery tables).
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
@@ -168,7 +170,7 @@ install by hand.
|
||||
SNMP::Info operates on textual descriptors found in MIBs.
|
||||
|
||||
If you are using SNMP::Info separate from Netdisco,
|
||||
download the Netdisco MIB package at L<http://sourceforge.net/project/showfiles.php?group_id=80033&package_id=135517>
|
||||
download the Netdisco MIB package at L<http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest-snapshot/>
|
||||
|
||||
Make sure that your snmp.conf is updated to point to your MIB directory
|
||||
and that the MIBs are world-readable.
|
||||
@@ -395,6 +397,12 @@ F<MAU-MIB> (RFC2668). Some Layer2 devices use this for extended Ethernet
|
||||
|
||||
See documentation in L<SNMP::Info::MAU> for details.
|
||||
|
||||
=item SNMP::Info::MRO
|
||||
|
||||
Method resolution introspection for SNMP::Info
|
||||
|
||||
See documentation in L<SNMP::Info::MRO> for details.
|
||||
|
||||
=item SNMP::Info::NortelStack
|
||||
|
||||
F<S5-AGENT-MIB>, F<S5-CHASSIS-MIB>.
|
||||
@@ -487,6 +495,18 @@ See documentation in L<SNMP::Info::Layer2> for details.
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2::3Com
|
||||
|
||||
SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2::3Com> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::Adtran
|
||||
|
||||
Subclass for Adtran devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2::Adtran> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::Airespace
|
||||
|
||||
Subclass for Cisco (Airespace) wireless controllers.
|
||||
@@ -618,6 +638,12 @@ SNMP Interface to Juniper (Trapeze) Wireless Controllers
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2::Trapeze> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::Ubiquiti
|
||||
|
||||
SNMP Interface to Ubiquiti Access Points and other devices
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2::Ubiquiti> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::ZyXEL_DSLAM
|
||||
|
||||
Zyxel DSLAMs. Need I say more?
|
||||
@@ -704,6 +730,12 @@ This class covers Catalyst 6500s in native mode, hybrid mode. Catalyst
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::C6500> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::CheckPoint
|
||||
|
||||
Subclass for CheckPoint devices
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::CheckPoint> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Cisco
|
||||
|
||||
This is a simple wrapper around layer 3 for IOS devices and the base layer 3
|
||||
@@ -734,6 +766,12 @@ Subclass for Avaya/Nortel Contivity/VPN Routers.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Contivity> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::DLink
|
||||
|
||||
Subclass for DLink devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::DLink> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Dell
|
||||
|
||||
Subclass for Dell PowerConnect switches. D-Link, the IBM BladeCenter
|
||||
@@ -766,6 +804,12 @@ Subclass for Force10 devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Force10> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Fortinet
|
||||
|
||||
Subclass for Fortinet devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Fortinet> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Foundry
|
||||
|
||||
Subclass for Brocade (Foundry) Network devices.
|
||||
@@ -785,6 +829,12 @@ Original Equipment Manufacturer (OEM) such as the HP ProCurve 9300 and 6300 seri
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::HP9300> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Huawei
|
||||
|
||||
SNMP Interface to Huawei Layer 3 switches and routers.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Huawei> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::IBMGbTor
|
||||
|
||||
SNMP Interface to IBM Rackswitch (formerly Blade Network Technologies)
|
||||
@@ -846,6 +896,12 @@ Subclass for PacketFront DRG series CPE.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::PacketFront> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::PaloAlto
|
||||
|
||||
Subclass for Palo Alto firewalls.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::PaloAlto> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Passport
|
||||
|
||||
Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000 series,
|
||||
@@ -893,6 +949,18 @@ Alcatel-Lucent SR Class.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Timetra> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::VyOS
|
||||
|
||||
Subclass for VyOS routers.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::VyOS> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::VMware
|
||||
|
||||
Subclass for VMware ESXi hosts.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::VMware> for details.
|
||||
|
||||
=back
|
||||
|
||||
=back
|
||||
@@ -913,6 +981,12 @@ SNMP Interface to APC UPS devices
|
||||
|
||||
See documentation in L<SNMP::Info::Layer7::APC> for details.
|
||||
|
||||
=item SNMP::Info::Layer7::CiscoIPS
|
||||
|
||||
SNMP Interface to Cisco IPS devices
|
||||
|
||||
See documentation in L<SNMP::Info::Layer7::Cisco IPS> for details.
|
||||
|
||||
=item SNMP::Info::Layer7::Netscaler
|
||||
|
||||
SNMP Interface to Citrix Netscaler appliances
|
||||
@@ -1210,16 +1284,13 @@ sub new {
|
||||
return;
|
||||
}
|
||||
|
||||
# Table function store
|
||||
my $store = {};
|
||||
|
||||
# Save Args for later
|
||||
$new_obj->{store} = $store;
|
||||
$new_obj->{store} ||= {};
|
||||
$new_obj->{sess} = $sess;
|
||||
$new_obj->{args} = \%args;
|
||||
$new_obj->{snmp_ver} = $args{Version} || 2;
|
||||
$new_obj->{snmp_comm} = $args{Community} || 'public';
|
||||
$new_obj->{snmp_user} = $args{SecName} || 'initial';
|
||||
$new_obj->{snmp_ver} = $sess->{Version} || $args{Version} || 2;
|
||||
$new_obj->{snmp_comm} = $sess->{Community} || $args{Community} || 'public';
|
||||
$new_obj->{snmp_user} = $sess->{SecName} || $args{SecName} || 'initial';
|
||||
|
||||
return $auto_specific ? $new_obj->specify() : $new_obj;
|
||||
}
|
||||
@@ -1283,7 +1354,7 @@ sub update {
|
||||
=head2 Data is Cached
|
||||
|
||||
Methods and subroutines requesting data from a device will only load the data
|
||||
once, and then return cached versions of that data.
|
||||
once, and then return cached versions of that data.
|
||||
|
||||
Run $info->load_METHOD() where method is something like 'i_name' to reload
|
||||
data from a method.
|
||||
@@ -1291,7 +1362,7 @@ data from a method.
|
||||
Run $info->clear_cache() to clear the cache to allow reload of both globals
|
||||
and table methods.
|
||||
|
||||
The cache can be retreved or set using the $info->cache() method. This works
|
||||
The cache can be retrieved or set using the $info->cache() method. This works
|
||||
together with the C<Offline> option.
|
||||
|
||||
=head2 Object Scalar Methods
|
||||
@@ -1436,9 +1507,6 @@ SNMP::Info::Layer3 subclasses.
|
||||
If the device still can be connected to via SNMP::Info, then
|
||||
SNMP::Info is returned.
|
||||
|
||||
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details
|
||||
about device support, or view C<device_type()> in F<Info.pm>.
|
||||
|
||||
=cut
|
||||
|
||||
sub device_type {
|
||||
@@ -1472,16 +1540,20 @@ sub device_type {
|
||||
11 => 'SNMP::Info::Layer2::HP',
|
||||
18 => 'SNMP::Info::Layer3::BayRS',
|
||||
42 => 'SNMP::Info::Layer3::Sun',
|
||||
43 => 'SNMP::Info::Layer2::3Com',
|
||||
45 => 'SNMP::Info::Layer2::Baystack',
|
||||
171 => 'SNMP::Info::Layer3::Dell',
|
||||
171 => 'SNMP::Info::Layer3::DLink',
|
||||
244 => 'SNMP::Info::Layer3::Lantronix',
|
||||
311 => 'SNMP::Info::Layer3::Microsoft',
|
||||
664 => 'SNMP::Info::Layer2::Adtran',
|
||||
674 => 'SNMP::Info::Layer3::Dell',
|
||||
1872 => 'SNMP::Info::Layer3::AlteonAD',
|
||||
1916 => 'SNMP::Info::Layer3::Extreme',
|
||||
1991 => 'SNMP::Info::Layer3::Foundry',
|
||||
2011 => 'SNMP::Info::Layer3::Huawei',
|
||||
2021 => 'SNMP::Info::Layer3::NetSNMP',
|
||||
2272 => 'SNMP::Info::Layer3::Passport',
|
||||
2620 => 'SNMP::Info::Layer3::CheckPoint',
|
||||
2636 => 'SNMP::Info::Layer3::Juniper',
|
||||
2925 => 'SNMP::Info::Layer1::Cyclades',
|
||||
3076 => 'SNMP::Info::Layer3::Altiga',
|
||||
@@ -1493,31 +1565,40 @@ sub device_type {
|
||||
6027 => 'SNMP::Info::Layer3::Force10',
|
||||
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
|
||||
6527 => 'SNMP::Info::Layer3::Timetra',
|
||||
6876 => 'SNMP::Info::Layer3::VMware',
|
||||
8072 => 'SNMP::Info::Layer3::NetSNMP',
|
||||
9303 => 'SNMP::Info::Layer3::PacketFront',
|
||||
10002 => 'SNMP::Info::Layer2::Ubiquiti',
|
||||
12325 => 'SNMP::Info::Layer3::Pf',
|
||||
12356 => 'SNMP::Info::Layer3::Fortinet',
|
||||
14179 => 'SNMP::Info::Layer2::Airespace',
|
||||
14525 => 'SNMP::Info::Layer2::Trapeze',
|
||||
14823 => 'SNMP::Info::Layer3::Aruba',
|
||||
14988 => 'SNMP::Info::Layer3::Mikrotik',
|
||||
17163 => 'SNMP::Info::Layer3::Steelhead',
|
||||
25506 => 'SNMP::Info::Layer3::H3C',
|
||||
25461 => 'SNMP::Info::Layer3::PaloAlto',
|
||||
26543 => 'SNMP::Info::Layer3::IBMGbTor',
|
||||
30065 => 'SNMP::Info::Layer3::Arista',
|
||||
35098 => 'SNMP::Info::Layer3::Pica8',
|
||||
41112 => 'SNMP::Info::Layer2::Ubiquiti',
|
||||
4413 => 'SNMP::Info::Layer2::Ubiquiti',
|
||||
30803 => 'SNMP::Info::Layer3::VyOS',
|
||||
);
|
||||
|
||||
my %l2sysoidmap = (
|
||||
9 => 'SNMP::Info::Layer2::Cisco',
|
||||
11 => 'SNMP::Info::Layer2::HP',
|
||||
43 => 'SNMP::Info::Layer2::3Com',
|
||||
45 => 'SNMP::Info::Layer2::Baystack',
|
||||
171 => 'SNMP::Info::Layer3::Dell',
|
||||
171 => 'SNMP::Info::Layer3::DLink',
|
||||
207 => 'SNMP::Info::Layer2::Allied',
|
||||
664 => 'SNMP::Info::Layer2::Adtran',
|
||||
674 => 'SNMP::Info::Layer3::Dell',
|
||||
890 => 'SNMP::Info::Layer2::ZyXEL_DSLAM',
|
||||
1872 => 'SNMP::Info::Layer3::AlteonAD',
|
||||
1916 => 'SNMP::Info::Layer3::Extreme',
|
||||
1991 => 'SNMP::Info::Layer3::Foundry',
|
||||
2011 => 'SNMP::Info::Layer3::Huawei',
|
||||
2272 => 'SNMP::Info::Layer3::Passport',
|
||||
2925 => 'SNMP::Info::Layer1::Cyclades',
|
||||
3224 => 'SNMP::Info::Layer3::Netscreen',
|
||||
@@ -1525,6 +1606,7 @@ sub device_type {
|
||||
4526 => 'SNMP::Info::Layer2::Netgear',
|
||||
5624 => 'SNMP::Info::Layer3::Enterasys',
|
||||
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
|
||||
9303 => 'SNMP::Info::Layer3::PacketFront',
|
||||
11898 => 'SNMP::Info::Layer2::Orinoco',
|
||||
14179 => 'SNMP::Info::Layer2::Airespace',
|
||||
14525 => 'SNMP::Info::Layer2::Trapeze',
|
||||
@@ -1572,6 +1654,9 @@ sub device_type {
|
||||
$objtype = 'SNMP::Info::Layer3::Aironet'
|
||||
if ( $desc =~ /Aironet/ and $desc =~ /\D(AP4800)\D/ );
|
||||
|
||||
# Override voice gateway device (VG350) showing up as Aironet
|
||||
$objtype = 'SNMP::Info::Layer3::Cisco' if $desc =~ /VG350/;
|
||||
|
||||
# Cat6k with older SUPs (hybrid CatOS/IOS?)
|
||||
$objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /(c6sup2|c6sup1)/;
|
||||
|
||||
@@ -1639,6 +1724,11 @@ sub device_type {
|
||||
$objtype = 'SNMP::Info::Layer3::CiscoFWSM'
|
||||
if ( $desc =~ /Cisco Firewall Services Module/i );
|
||||
|
||||
# Cisco Small Business (300 500) series override
|
||||
# This is for enterprises(1).cisco(9).otherEnterprises(6).ciscosb(1)
|
||||
$objtype = 'SNMP::Info::Layer2::CiscoSB'
|
||||
if ( $soid =~ /^\.?1\.3\.6\.1\.4\.1\.9\.6\.1/ );
|
||||
|
||||
# Avaya Secure Router
|
||||
$objtype = 'SNMP::Info::Layer3::Tasman'
|
||||
if ( $desc =~ /^(avaya|nortel)\s+(SR|secure\srouter)\s+\d{4}/i );
|
||||
@@ -1651,7 +1741,7 @@ sub device_type {
|
||||
# Starting with IOS 15, Aironet reports sysServices 6, even though
|
||||
# it still is the same layer2 access point.
|
||||
$objtype = 'SNMP::Info::Layer2::Aironet'
|
||||
if ($desc =~ /\b(C1100|C1130|C1140|AP1200|C350|C1200|C1240|C1250)\b/
|
||||
if ($desc =~ /\b(C1100|C1130|C1140|AP1200|C350|C1200|C1240|C1250|C2700|C3700)\b/
|
||||
and $desc =~ /\bIOS\b/ );
|
||||
|
||||
# Airespace (WLC) Module
|
||||
@@ -1794,6 +1884,9 @@ sub device_type {
|
||||
$objtype = 'SNMP::Info::Layer2::HPVC'
|
||||
if ( $desc =~ /HP\sVC\s/ );
|
||||
|
||||
$objtype = 'SNMP::Info::Layer2::ZyXEL_DSLAM'
|
||||
if ( $desc =~ /8-port .DSL Module\(Annex .\)/i );
|
||||
|
||||
# Generic device classification based upon sysObjectID
|
||||
if ( ( $objtype eq 'SNMP::Info::Layer2' )
|
||||
and ( defined($id) )
|
||||
@@ -1859,6 +1952,10 @@ sub device_type {
|
||||
$objtype = 'SNMP::Info::Layer2::NWSS2300'
|
||||
if (
|
||||
$desc =~ /^(Nortel\s)??Wireless\sSecurity\sSwitch\s23[568][012]\b/);
|
||||
|
||||
# Cisco IPS, older version which doesn't report layer 3 functionality
|
||||
$objtype = 'SNMP::Info::Layer7::CiscoIPS'
|
||||
if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.9\.1\.1545/i );
|
||||
|
||||
# Generic device classification based upon sysObjectID
|
||||
if ( defined($id) and $objtype eq 'SNMP::Info') {
|
||||
@@ -2883,7 +2980,7 @@ allows all developers to have visibility into the request. Please include
|
||||
pointers to the applicable platform MIBs. For development we will need an
|
||||
C<snmpwalk> of the device. There is a tool now included in the SNMP::Info
|
||||
distribution to help with this task, although you'll most likely need to
|
||||
download the distribution from CPAN as it's included in the "C<t/util>"
|
||||
download the distribution from CPAN as it's included in the "C<contrib/util>"
|
||||
directory.
|
||||
|
||||
The utility is named C<make_snmpdata.pl>. Run it with a command line like:
|
||||
@@ -3264,6 +3361,7 @@ Makes human friendly speed ratings using %SPEED_MAP
|
||||
'54000000' => '54 Mbps',
|
||||
'64000000' => '64 Mbps',
|
||||
'100000000' => '100 Mbps',
|
||||
'200000000' => '200 Mbps',
|
||||
'149760000' => 'ATM on OC-3',
|
||||
'155000000' => 'OC-3',
|
||||
'155519000' => 'OC-3',
|
||||
@@ -3273,6 +3371,7 @@ Makes human friendly speed ratings using %SPEED_MAP
|
||||
'622000000' => 'OC-12',
|
||||
'622080000' => 'OC-12',
|
||||
'1000000000' => '1.0 Gbps',
|
||||
'2000000000' => '2.0 Gbps',
|
||||
'2488000000' => 'OC-48',
|
||||
)
|
||||
|
||||
@@ -3309,6 +3408,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
|
||||
'54000000' => '54 Mbps',
|
||||
'64000000' => '64 Mbps',
|
||||
'100000000' => '100 Mbps',
|
||||
'200000000' => '200 Mbps',
|
||||
'149760000' => 'ATM on OC-3',
|
||||
'155000000' => 'OC-3',
|
||||
'155519000' => 'OC-3',
|
||||
@@ -3318,6 +3418,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
|
||||
'622000000' => 'OC-12',
|
||||
'622080000' => 'OC-12',
|
||||
'1000000000' => '1.0 Gbps',
|
||||
'2000000000' => '2.0 Gbps',
|
||||
'2488000000' => 'OC-48',
|
||||
);
|
||||
|
||||
@@ -3387,7 +3488,7 @@ sub munge_mac {
|
||||
|
||||
=item munge_prio_mac()
|
||||
|
||||
Takes an 8-byte octet stream (HEX-STRING) and returns a colon separated ASCII
|
||||
Takes an 2-byte octet stream (HEX-STRING) and returns a colon separated ASCII
|
||||
hex string.
|
||||
|
||||
=cut
|
||||
@@ -3401,6 +3502,22 @@ sub munge_prio_mac {
|
||||
return;
|
||||
}
|
||||
|
||||
=item munge_prio_port()
|
||||
|
||||
Takes an 8-byte octet stream (HEX-STRING) and returns a colon separated ASCII
|
||||
hex string.
|
||||
|
||||
=cut
|
||||
|
||||
sub munge_prio_port {
|
||||
my $mac = shift;
|
||||
return unless defined $mac;
|
||||
return unless length $mac;
|
||||
$mac = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) );
|
||||
return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){1}[0-9A-F][0-9A-F]$/i;
|
||||
return;
|
||||
}
|
||||
|
||||
=item munge_octet2hex()
|
||||
|
||||
Takes a binary octet stream and returns an ASCII hex string
|
||||
@@ -3576,7 +3693,8 @@ sub init {
|
||||
|
||||
foreach my $d (@$mibdirs) {
|
||||
next unless -d $d;
|
||||
print "SNMP::Info::init() - Adding new mibdir:$d\n" if $self->debug();
|
||||
print "SNMP::Info::init() - Adding new mibdir:$d\n"
|
||||
if $self->debug() > 1;
|
||||
SNMP::addMibDirs($d);
|
||||
}
|
||||
|
||||
@@ -3736,6 +3854,7 @@ These methods return data as a scalar.
|
||||
sub _global {
|
||||
my $method = shift;
|
||||
my $oid = shift;
|
||||
return sub {} if $method eq 'CARP_TRACE';
|
||||
|
||||
return sub {
|
||||
my $self = shift;
|
||||
@@ -3753,7 +3872,7 @@ sub _global {
|
||||
# Return cached data unless loading
|
||||
# We now store in raw format so munge before returning
|
||||
# unless expecting raw data
|
||||
if ( defined $self->{"_$attr"} && !$load ) {
|
||||
if ( exists $self->{"_$attr"} && !$load ) {
|
||||
my $val = $self->{"_$attr"};
|
||||
|
||||
if ( !$raw ) {
|
||||
@@ -4463,6 +4582,11 @@ sub _validate_autoload_method {
|
||||
$leaf_name =~ s/_/-/g;
|
||||
}
|
||||
|
||||
# skip if offline
|
||||
if ( $self->{Offline} ) {
|
||||
return [1,(exists $self->{store}->{$method} ? 1: 0)];
|
||||
}
|
||||
|
||||
# Translate MIB leaf node name to OID
|
||||
my $oid = SNMP::translateObj($leaf_name);
|
||||
|
||||
@@ -4499,7 +4623,8 @@ sub _validate_autoload_method {
|
||||
my $table_leaf = 0;
|
||||
|
||||
if ( !$globals->{$attr}
|
||||
&& ( defined $indexes && scalar( @{$indexes} ) > 0 ) )
|
||||
&& ( ( defined $indexes && scalar( @{$indexes} ) > 0 )
|
||||
|| $funcs->{$attr} ))
|
||||
{
|
||||
$table_leaf = 1;
|
||||
}
|
||||
@@ -4611,7 +4736,7 @@ sub AUTOLOAD {
|
||||
# Typos in function calls in SNMP::Info subclasses turn into
|
||||
# AUTOLOAD requests for non-methods. While this is deprecated,
|
||||
# we'll still get called, so report a less confusing error.
|
||||
if ( ref($self) !~ /^SNMP::Info/ ) {
|
||||
if ( ref($self) !~ /SNMP::Info/ ) {
|
||||
|
||||
# croak reports one level too high. die reports here.
|
||||
# I would really like to get the place that's likely to
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS
|
||||
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
||||
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (); # IF-MIB
|
||||
|
||||
@@ -61,7 +61,7 @@ sub agg_ports_ifstack {
|
||||
foreach my $idx ( keys %$ifStack ) {
|
||||
my ( $higher, $lower ) = split /\./, $idx;
|
||||
next if ( $higher == 0 or $lower == 0 );
|
||||
if ( $ifType->{ $higher } eq 'ieee8023adLag' ) {
|
||||
if ( $ifType->{ $higher } eq 'ieee8023adLag' or $ifType->{ $higher } eq 'propMultiplexor') {
|
||||
$ret->{ $lower } = $higher;
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||
@@ -84,6 +84,17 @@ $VERSION = '3.18';
|
||||
'bs_to' => 'dot1dStaticAllowedToGoTo',
|
||||
'bs_status' => 'dot1dStaticStatus',
|
||||
|
||||
# These leafs are not part of a table, but placed here
|
||||
# to return a hash reference to ease API compatibility with
|
||||
# MST and PVST implementations indexed by a spanning tree
|
||||
# instance id
|
||||
'stp_i_mac' => 'dot1dBaseBridgeAddress',
|
||||
'stp_i_time' => 'dot1dStpTimeSinceTopologyChange',
|
||||
'stp_i_ntop' => 'dot1dStpTopChanges',
|
||||
'stp_i_root' => 'dot1dStpDesignatedRoot',
|
||||
'stp_i_root_port' => 'dot1dStpRootPort',
|
||||
'stp_i_priority' => 'dot1dStpPriority',
|
||||
|
||||
# Spanning Tree Protocol Table : dot1dStpPortTable
|
||||
'stp_p_id' => 'dot1dStpPort',
|
||||
'stp_p_priority' => 'dot1dStpPortPriority',
|
||||
@@ -125,15 +136,18 @@ $VERSION = '3.18';
|
||||
'b_mac' => \&SNMP::Info::munge_mac,
|
||||
'fw_mac' => \&SNMP::Info::munge_mac,
|
||||
'bs_mac' => \&SNMP::Info::munge_mac,
|
||||
'stp_root' => \&SNMP::Info::munge_mac,
|
||||
'stp_root' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_i_mac' => \&SNMP::Info::munge_mac,
|
||||
'stp_i_root' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_root' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_bridge' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_port' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_port' => \&SNMP::Info::munge_prio_port,
|
||||
'qb_cv_egress' => \&SNMP::Info::munge_port_list,
|
||||
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
|
||||
'qb_v_egress' => \&SNMP::Info::munge_port_list,
|
||||
'qb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
|
||||
'qb_v_untagged' => \&SNMP::Info::munge_port_list,
|
||||
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
|
||||
|
||||
);
|
||||
|
||||
@@ -163,10 +177,20 @@ sub qb_fw_vlan {
|
||||
my $partial = shift;
|
||||
|
||||
my $qb_fw_port = $bridge->qb_fw_port($partial);
|
||||
my $qb_fdb_ids = $bridge->qb_fdb_index() || {};
|
||||
|
||||
|
||||
my $qb_fw_vlan = {};
|
||||
foreach my $idx ( keys %$qb_fw_port ) {
|
||||
my ( $fdb_id, $mac ) = _qb_fdbtable_index($idx);
|
||||
$qb_fw_vlan->{$idx} = $fdb_id;
|
||||
# Many devices do not populate the dot1qVlanCurrentTable, so default
|
||||
# to FDB ID = VID, but if we have a mapping use it.
|
||||
my $vlan = $fdb_id;
|
||||
# defined as test since some devices have a vlan 0
|
||||
if (defined $qb_fdb_ids->{$fdb_id}) {
|
||||
$vlan = $qb_fdb_ids->{$fdb_id};
|
||||
}
|
||||
$qb_fw_vlan->{$idx} = $vlan;
|
||||
}
|
||||
return $qb_fw_vlan;
|
||||
}
|
||||
@@ -189,6 +213,25 @@ sub qb_i_vlan_t {
|
||||
return $i_vlan;
|
||||
}
|
||||
|
||||
sub qb_fdb_index {
|
||||
my $bridge = shift;
|
||||
my $partial = shift;
|
||||
|
||||
# Some devices may not implement TimeFilter in a standard manner
|
||||
# appearing to loop on this request. Override in the device class,
|
||||
# see Enterasys for example.
|
||||
my $qb_fdb_ids = $bridge->dot1qVlanFdbId() || {};
|
||||
|
||||
# Strip the TimeFilter
|
||||
my $vl_fdb_index = {};
|
||||
for my $fdb_entry (keys(%$qb_fdb_ids)) {
|
||||
(my $vlan = $fdb_entry) =~ s/^\d+\.//;
|
||||
$vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan;
|
||||
}
|
||||
|
||||
return $vl_fdb_index;
|
||||
}
|
||||
|
||||
# Most devices now support Q-BRIDGE-MIB, fall back to
|
||||
# BRIDGE-MIB for those that don't.
|
||||
sub fw_mac {
|
||||
@@ -343,20 +386,31 @@ sub i_vlan_membership {
|
||||
my $bridge = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $index = $bridge->bp_index();
|
||||
# Use VlanCurrentTable if available since it will include dynamic
|
||||
# VLANs. However, some devices do not populate the table.
|
||||
my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
|
||||
|
||||
return $bridge->_vlan_hoa($v_ports, $partial);
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $bridge = shift;
|
||||
my $partial = shift;
|
||||
|
||||
# Use VlanCurrentTable if available since it will include dynamic
|
||||
# VLANs. However, some devices do not populate the table.
|
||||
my $v_ports = $bridge->qb_cv_untagged() || $bridge->qb_v_untagged();
|
||||
|
||||
# 11/07 - Todo: Issue with some devices trying to query VlanCurrentTable
|
||||
# as table may grow very large with frequent VLAN changes.
|
||||
# 06/08 - VlanCurrentTable may be due to timefilter, should query with
|
||||
# zero partial for no time filter.
|
||||
# my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
|
||||
return $bridge->_vlan_hoa($v_ports, $partial);
|
||||
}
|
||||
|
||||
my $v_ports = $bridge->qb_v_egress() || {};
|
||||
sub _vlan_hoa {
|
||||
my $bridge = shift;
|
||||
my ( $v_ports, $partial ) = @_;
|
||||
|
||||
my $i_vlan_membership = {};
|
||||
my $index = $bridge->bp_index();
|
||||
|
||||
my $vlan_hoa = {};
|
||||
foreach my $idx ( keys %$v_ports ) {
|
||||
next unless ( defined $v_ports->{$idx} );
|
||||
my $portlist = $v_ports->{$idx};
|
||||
@@ -376,10 +430,10 @@ sub i_vlan_membership {
|
||||
my $ifindex = $index->{$port};
|
||||
next unless ( defined($ifindex) ); # shouldn't happen
|
||||
next if ( defined $partial and $ifindex !~ /^$partial$/ );
|
||||
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
||||
push( @{ $vlan_hoa->{$ifindex} }, $vlan );
|
||||
}
|
||||
}
|
||||
return $i_vlan_membership;
|
||||
return $vlan_hoa;
|
||||
}
|
||||
|
||||
sub set_i_pvid {
|
||||
@@ -649,11 +703,21 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $bridge->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=item $bridge->qb_i_vlan_t()
|
||||
|
||||
Returns reference to hash: key = C<dot1dBasePort>, value = either 'trunk' for
|
||||
tagged ports or the VLAN ID.
|
||||
|
||||
=item $bridge->qb_fdb_index()
|
||||
|
||||
Returns reference to hash: key = VLAN ID, value = FDB ID.
|
||||
|
||||
=item $bridge->v_index()
|
||||
|
||||
Returns VLAN IDs
|
||||
@@ -707,6 +771,48 @@ to this port.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Spanning Tree Instance Globals
|
||||
|
||||
These are not part of a table, but return a hash reference to ease API
|
||||
compatibility with MST and PVST implementations indexed by a spanning tree
|
||||
instance id.
|
||||
|
||||
=over
|
||||
|
||||
=item $bridge->stp_i_time()
|
||||
|
||||
Returns time since last topology change detected. (100ths/second)
|
||||
|
||||
(C<dot1dStpTimeSinceTopologyChange>)
|
||||
|
||||
=item $bridge->stp_i_time()
|
||||
|
||||
Returns the total number of topology changes detected.
|
||||
|
||||
(C<dot1dStpTopChanges>)
|
||||
|
||||
=item $bridge->stp_i_root()
|
||||
|
||||
Returns root of STP.
|
||||
|
||||
(C<dot1dStpDesignatedRoot>)
|
||||
|
||||
=item $bridge->stp_i_root_port()
|
||||
|
||||
Returns the port number of the port that offers the lowest cost path
|
||||
to the root bridge.
|
||||
|
||||
(C<dot1dStpRootPort>)
|
||||
|
||||
=item $bridge->stp_i_priority()
|
||||
|
||||
Returns the port number of the port that offers the lowest cost path
|
||||
to the root bridge.
|
||||
|
||||
(C<dot1dStpPriority>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Spanning Tree Protocol Table (C<dot1dStpPortTable>)
|
||||
|
||||
Descriptions are straight from F<BRIDGE-MIB.my>
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info;
|
||||
use vars
|
||||
qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# Five data structures required by SNMP::Info
|
||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
||||
@@ -97,6 +97,10 @@ sub copy_run_tftp {
|
||||
print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
|
||||
|
||||
#Check each set, delete created row if any fail
|
||||
unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) {
|
||||
$ciscoconfig->error_throw("Initializing config copy instruction failed");
|
||||
return;
|
||||
}
|
||||
unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
|
||||
$ciscoconfig->error_throw("Setting source type failed");
|
||||
unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
|
||||
@@ -38,7 +38,7 @@ use Exporter;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
||||
|
||||
@@ -38,7 +38,7 @@ use Exporter;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'SNMPv2-MIB' => 'sysDescr',
|
||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||
@@ -149,6 +149,7 @@ sub i_vlan {
|
||||
|
||||
my $port_vlan = $vtp->vtp_trunk_native($partial) || {};
|
||||
my $i_vlan = $vtp->i_vlan2($partial) || {};
|
||||
my $trunk_dyn = $vtp->vtp_trunk_dyn($partial) || {};
|
||||
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
|
||||
|
||||
my %i_vlans;
|
||||
@@ -165,8 +166,17 @@ sub i_vlan {
|
||||
foreach my $port ( keys %$port_vlan ) {
|
||||
my $vlan = $port_vlan->{$port};
|
||||
next unless defined $vlan;
|
||||
|
||||
# ports up and trunking should have a trunking status
|
||||
my $stat = $trunk_dyn_stat->{$port};
|
||||
if ( defined $stat and $stat =~ /^trunking/ ) {
|
||||
|
||||
# vtp_trunk_dyn_stat is not useful for down ports
|
||||
# so we use vtp_trunk_dyn to see if trunking is set
|
||||
my $dyn = $trunk_dyn->{$port};
|
||||
|
||||
if (($stat and $stat =~ /^trunking/ )
|
||||
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))))
|
||||
{
|
||||
$i_vlans{$port} = $vlan;
|
||||
}
|
||||
}
|
||||
@@ -217,6 +227,8 @@ sub i_vlan_membership {
|
||||
my $vtp_vlans = $vtp->v_state();
|
||||
my $i_vlan = $vtp->i_vlan2($partial) || {};
|
||||
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
|
||||
my $trunk_dyn = $vtp->vtp_trunk_dyn($partial) || {};
|
||||
my $i_voice_vlan = $vtp->i_voice_vlan($partial) || {};
|
||||
|
||||
my $i_vlan_membership = {};
|
||||
|
||||
@@ -224,14 +236,24 @@ sub i_vlan_membership {
|
||||
foreach my $port ( keys %$i_vlan ) {
|
||||
my $vlan = $i_vlan->{$port};
|
||||
next unless defined $vlan;
|
||||
my $stat = $trunk_dyn_stat->{$port};
|
||||
if ( defined $stat and $stat =~ /notTrunking/ ) {
|
||||
my $dyn = $trunk_dyn->{$port};
|
||||
unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
}
|
||||
|
||||
# Get voice VLANs
|
||||
foreach my $port ( keys %$i_voice_vlan ) {
|
||||
my $vlan = $i_voice_vlan->{$port};
|
||||
next unless defined $vlan;
|
||||
next unless ($vlan =~ m/[[:digit:]]+/ and $vlan < 4095);
|
||||
my $dyn = $trunk_dyn->{$port};
|
||||
unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
}
|
||||
|
||||
# Get trunk ports
|
||||
|
||||
my %oper_vlans;
|
||||
foreach my $iid ( keys %$vtp_vlans ) {
|
||||
my $vlan = 0;
|
||||
@@ -248,7 +270,9 @@ sub i_vlan_membership {
|
||||
|
||||
foreach my $port ( keys %$ports_vlans ) {
|
||||
my $stat = $trunk_dyn_stat->{$port};
|
||||
if ( defined $stat and $stat =~ /^trunking/ ) {
|
||||
my $dyn = $trunk_dyn->{$port};
|
||||
if (($stat and $stat =~ /^trunking/ )
|
||||
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate')))) {
|
||||
my $k = 0;
|
||||
my $list1 = $ports_vlans->{$port} || '0';
|
||||
my $list2 = $ports_vlans_2k->{$port} || '0';
|
||||
@@ -270,6 +294,20 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $vtp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $vlans = $vtp->i_vlan($partial);
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $port (keys %$vlans) {
|
||||
my $vlan = $vlans->{$port};
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub set_i_pvid {
|
||||
my $vtp = shift;
|
||||
my ( $vlan_id, $ifindex ) = @_;
|
||||
@@ -590,6 +628,12 @@ IDs. These are the VLANs which are members of enabled VLAN list for the port.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $vtp->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=back
|
||||
|
||||
=head2 VLAN Table (C<CISCO-VTP-MIB::vtpVlanTable>)
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
||||
|
||||
@@ -50,7 +50,7 @@ $VERSION = '3.18';
|
||||
'fdp_run' => 'snFdpGlobalRun',
|
||||
'fdp_interval' => 'snFdpGlobalMessageInterval',
|
||||
'fdp_holdtime' => 'snFdpGlobalHoldTime',
|
||||
'fdp_id' => 'snFdpGlobalDeviceId',
|
||||
'fdp_gid' => 'snFdpGlobalDeviceId',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
@@ -231,7 +231,7 @@ Time in seconds that FDP messages are kept.
|
||||
|
||||
(C<fdpGlobalHoldTime>)
|
||||
|
||||
=item $fdp->fdp_id()
|
||||
=item $fdp->fdp_gid()
|
||||
|
||||
Returns FDP device ID.
|
||||
|
||||
@@ -38,7 +38,7 @@ use Exporter;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Aggregate;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Aggregate::MIBS,
|
||||
@@ -44,7 +44,7 @@ use constant {
|
||||
IPV6MIB => 3,
|
||||
};
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
|
||||
|
||||
@@ -72,15 +72,18 @@ $VERSION = '3.18';
|
||||
'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
|
||||
|
||||
'ip_addr6_index' => 'ipAddressIfIndex', # IP-MIBw
|
||||
'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 = (
|
||||
@@ -142,6 +145,12 @@ sub ipv6_n2p_addr {
|
||||
# so what we've collected in that variable is actually the first byte of the address.
|
||||
$v6_packed = pack('C', $addrsize) . $v6_packed;
|
||||
}
|
||||
if (length($v6_packed) == 17) {
|
||||
# Workaround for IPV6-MIB on Windows 2012: if the address is one byte too long, the SNMP agent probably has an incorrect
|
||||
# implementation where a length field precedes the actual IPv6 address.
|
||||
# In that case, the first character should be chr(16), ie 0x10; strip it if that's the case.
|
||||
$v6_packed =~ s/^\x10//;
|
||||
}
|
||||
if (length($v6_packed) == 16) {
|
||||
$v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
|
||||
$return->{$row} = $v6addr;
|
||||
@@ -307,7 +316,9 @@ sub ipv6_addr_prefix {
|
||||
foreach my $row (keys %$ipv6_addr_prefix){
|
||||
if ($row =~ /^(\d+)\.[\d\.]+$/) {
|
||||
my $type = $1;
|
||||
if ($type == 2) { # IPv6
|
||||
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+)$/ ){
|
||||
@@ -321,9 +332,65 @@ sub ipv6_addr_prefix {
|
||||
return $return;
|
||||
}
|
||||
|
||||
sub ipv6_addr_prefixlength {
|
||||
my $info = shift;
|
||||
my $return;
|
||||
my $index = $info->ipv6_index or return;
|
||||
my $ipv6_addr_prefixlength = &_test_methods( $info, {
|
||||
ip_addr6_pfxlen => IPMIB,
|
||||
c_addr6_pfxlen => CISCO,
|
||||
i6_addr_pfxlen => IPV6MIB,
|
||||
});
|
||||
return unless defined $ipv6_addr_prefixlength;
|
||||
# might be returned with ipv6_index value at the start instead
|
||||
# of type+bits, so we need to map via ipv6_index
|
||||
foreach my $row (keys %$ipv6_addr_prefixlength){
|
||||
my $new_row = undef;
|
||||
# only if ipv6_index value at the start
|
||||
if ($row =~ m/^(\d+)\.((?:\d+\.){15}\d+)/) {
|
||||
my ($iid, $addr) = ($1, $2);
|
||||
foreach my $i (keys %$index) {
|
||||
if ($index->{$i} eq $iid and $i =~ m/\.${addr}$/) {
|
||||
$new_row = $i;
|
||||
last;
|
||||
}
|
||||
}
|
||||
next unless $new_row;
|
||||
}
|
||||
# this should alow IPMIB and CISCO to pass through unmunged
|
||||
$return->{$new_row || $row} = $ipv6_addr_prefixlength->{$row};
|
||||
}
|
||||
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;
|
||||
my $indexes = $info->ipv6_index();
|
||||
foreach my $row (keys %$indexes) {
|
||||
my @parts = split(/\./, $row);
|
||||
my $is_valid = 0;
|
||||
if (scalar @parts == 18) {
|
||||
my $addrtype = shift @parts;
|
||||
$is_valid = 1;
|
||||
} elsif (scalar @parts == 17) {
|
||||
$is_valid = 1;
|
||||
}
|
||||
my $addrsize = shift @parts; # First element now is addrsize, should be 16
|
||||
if ($is_valid && $addrsize == 16) {
|
||||
$return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts)));
|
||||
} else {
|
||||
warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
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';
|
||||
@@ -343,6 +410,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;
|
||||
}
|
||||
@@ -459,6 +527,14 @@ 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
|
||||
|
||||
=back
|
||||
|
||||
=head2 Internet Address Translation Table
|
||||
@@ -39,10 +39,11 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
||||
'LLDP-EXT-MED-MIB' => 'lldpXMedMIB',
|
||||
'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
|
||||
'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
|
||||
);
|
||||
@@ -95,7 +96,7 @@ sub hasLLDP {
|
||||
# If the device doesn't return local system capabilities, fallback by checking if it would report neighbors
|
||||
my $lldp_rem = $lldp->lldp_rem_id() || {};
|
||||
return 1 if scalar keys %$lldp_rem;
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -104,11 +105,11 @@ sub lldp_if {
|
||||
my $partial = shift;
|
||||
|
||||
my $addr = $lldp->lldp_rem_pid($partial) || {};
|
||||
my $i_descr = $lldp->i_description() || {};
|
||||
my $i_alias = $lldp->i_alias() || {};
|
||||
my $i_descr = $lldp->i_description() || {};
|
||||
my $i_alias = $lldp->i_alias() || {};
|
||||
my %r_i_descr = reverse %$i_descr;
|
||||
my %r_i_alias = reverse %$i_alias;
|
||||
|
||||
|
||||
my %lldp_if;
|
||||
foreach my $key ( keys %$addr ) {
|
||||
my @aOID = split( '\.', $key );
|
||||
@@ -119,14 +120,15 @@ sub lldp_if {
|
||||
# prefer ifDescr over ifAlias because using cross ref with description is correct behavior
|
||||
# according to the LLDP-MIB. Some devices (eg H3C gear) seem to use ifAlias though.
|
||||
my $lldp_desc = $lldp->lldpLocPortDesc($port);
|
||||
my $desc = $lldp_desc->{$port};
|
||||
my $desc = $lldp_desc->{$port};
|
||||
# If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum
|
||||
if ( $desc && exists $r_i_descr{$desc} ) {
|
||||
$port = $r_i_descr{$desc};
|
||||
} elsif ( $desc && exists $r_i_alias{$desc} ) {
|
||||
}
|
||||
elsif ( $desc && exists $r_i_alias{$desc} ) {
|
||||
$port = $r_i_alias{$desc};
|
||||
}
|
||||
|
||||
|
||||
$lldp_if{$key} = $port;
|
||||
}
|
||||
return \%lldp_if;
|
||||
@@ -148,6 +150,38 @@ sub lldp_ip {
|
||||
return \%lldp_ip;
|
||||
}
|
||||
|
||||
sub lldp_ipv6 {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
|
||||
|
||||
my %lldp_ipv6;
|
||||
foreach my $key ( keys %$rman_addr ) {
|
||||
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
||||
next unless defined $index;
|
||||
next unless $proto == 2;
|
||||
$lldp_ipv6{$index} = $addr;
|
||||
}
|
||||
return \%lldp_ipv6;
|
||||
}
|
||||
|
||||
sub lldp_mac {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
|
||||
|
||||
my %lldp_ipv6;
|
||||
foreach my $key ( keys %$rman_addr ) {
|
||||
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
||||
next unless defined $index;
|
||||
next unless $proto == 6;
|
||||
$lldp_ipv6{$index} = $addr;
|
||||
}
|
||||
return \%lldp_ipv6;
|
||||
}
|
||||
|
||||
sub lldp_addr {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
@@ -170,13 +204,14 @@ sub lldp_port {
|
||||
my $pdesc = $lldp->lldp_rem_desc($partial) || {};
|
||||
my $pid = $lldp->lldp_rem_pid($partial) || {};
|
||||
my $ptype = $lldp->lldp_rem_pid_type($partial) || {};
|
||||
my $vendor = $lldp->vendor();
|
||||
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
|
||||
|
||||
my %lldp_port;
|
||||
foreach my $key ( sort keys %$pid ) {
|
||||
my $port = $pdesc->{$key};
|
||||
my $type = $ptype->{$key};
|
||||
if ( $type and $type eq 'interfaceName' ) {
|
||||
|
||||
# If the pid claims to be an interface name,
|
||||
# believe it.
|
||||
$port = $pid->{$key};
|
||||
@@ -195,8 +230,12 @@ sub lldp_port {
|
||||
|
||||
# Avaya/Nortel lldpRemPortDesc doesn't match ifDescr, but we can still
|
||||
# figure out slot.port based upon lldpRemPortDesc
|
||||
if ( $vendor eq 'avaya' && $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ ) {
|
||||
$port = defined $1 ? "$2.$3" : "$3";
|
||||
if ( defined $desc->{$key}
|
||||
&& $desc->{$key}
|
||||
=~ /^Ethernet\s(?:Routing\s)?Switch\s\d|^Virtual\sServices\sPlatform\s\d/
|
||||
&& $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ )
|
||||
{
|
||||
$port = defined $1 ? "$2.$3" : "1.$3";
|
||||
}
|
||||
|
||||
$lldp_port{$key} = $port;
|
||||
@@ -222,10 +261,13 @@ sub lldp_id {
|
||||
if ( $type =~ /mac/ ) {
|
||||
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
|
||||
}
|
||||
elsif ($type eq 'networkAddress') {
|
||||
if ( length(unpack('H*', $id)) == 10 ) {
|
||||
elsif ( $type eq 'networkAddress' ) {
|
||||
if ( length( unpack( 'H*', $id ) ) == 10 ) {
|
||||
|
||||
# IP address (first octet is sign, I guess)
|
||||
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
|
||||
my @octets
|
||||
= ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
|
||||
[ 1 .. 4 ];
|
||||
$id = join '.', map { hex($_) } @octets;
|
||||
}
|
||||
}
|
||||
@@ -238,39 +280,43 @@ sub lldp_platform {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $rid = $lldp->lldp_rem_id($partial) || {};
|
||||
my $rid = $lldp->lldp_rem_id($partial) || {};
|
||||
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
|
||||
my $name = $lldp->lldp_rem_sysname($partial) || {};
|
||||
|
||||
|
||||
my %lldp_platform;
|
||||
foreach my $key (keys %$rid) {
|
||||
foreach my $key ( keys %$rid ) {
|
||||
$lldp_platform{$key} = $desc->{$key} || $name->{$key};
|
||||
}
|
||||
return \%lldp_platform;
|
||||
}
|
||||
|
||||
sub lldp_cap {
|
||||
my $lldp = shift;
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp_caps = $lldp->lldp_rem_cap_spt($partial) || {};
|
||||
|
||||
my $lldp_caps = $lldp->lldp_rem_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('lldpRemSysCapEnabled',0,1) || '';
|
||||
my $enums = ((ref {} eq ref $SNMP::MIB{$oid}{'enums'}) ? $SNMP::MIB{$oid}{'enums'} : {});
|
||||
my $oid = SNMP::translateObj( 'lldpRemSysCapEnabled', 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});
|
||||
foreach my $bit ( split //, $cap_bits ) {
|
||||
if ($bit) {
|
||||
push( @{ $lldp_cap{$key} }, $r_enums{$count} );
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
@@ -303,20 +349,26 @@ sub _lldp_addr_index {
|
||||
my @oids = split( /\./, $idx );
|
||||
my $index = join( '.', splice( @oids, 0, 3 ) );
|
||||
my $proto = shift(@oids);
|
||||
my $length = shift(@oids) if scalar @oids > 4;
|
||||
shift(@oids) if scalar @oids > 4; # $length
|
||||
|
||||
# IPv4
|
||||
if ( $proto == 1 ) {
|
||||
return ( $index, $proto, join( '.', @oids ) );
|
||||
}
|
||||
|
||||
# IPv6
|
||||
elsif ( $proto == 2 ) {
|
||||
return ( $index, $proto,
|
||||
join(':', unpack('(H4)*', pack('C*', @oids)) ) );
|
||||
}
|
||||
|
||||
# MAC
|
||||
elsif ( $proto == 6 ) {
|
||||
return ( $index, $proto,
|
||||
join( ':', map { sprintf "%02x", $_ } @oids ) );
|
||||
}
|
||||
|
||||
# TODO - Need to handle other protocols, i.e. IPv6
|
||||
# TODO - Other protocols may be used as well; implement when needed?
|
||||
else {
|
||||
return;
|
||||
}
|
||||
@@ -384,6 +436,8 @@ None.
|
||||
|
||||
=item F<LLDP-MIB>
|
||||
|
||||
=item F<LLDP-EXT-MED-MIB>
|
||||
|
||||
=item F<LLDP-EXT-DOT1-MIB>
|
||||
|
||||
=item F<LLDP-EXT-DOT3-MIB>
|
||||
@@ -482,10 +536,24 @@ if unable defaults to (C<lldpRemLocalPortNum>).
|
||||
Returns remote IPv4 address. Returns for all other address types, use
|
||||
lldp_addr if you want any return address type.
|
||||
|
||||
=item $lldp->lldp_ipv6()
|
||||
|
||||
Returns remote IPv6 address, if known. Returns for all other address types,
|
||||
use lldp_addr if you don't care about return address type.
|
||||
|
||||
=item $lldp->lldp_mac()
|
||||
|
||||
Returns remote (management) MAC address, if known. Returns for all other
|
||||
address types, use lldp_addr if you don't care about return address type.
|
||||
|
||||
=item $lldp->lldp_addr()
|
||||
|
||||
Returns remote address. Type may be any IANA Address Family Number.
|
||||
Currently only returns IPv4 or MAC addresses.
|
||||
Currently only returns IPv4, IPv6 or MAC addresses. If the remote device
|
||||
returns more than one address type, this method will give only one. Which one
|
||||
is returned is decided by chance, phase of the moon and Perl hash ordering.
|
||||
|
||||
Use lldp_mac, lldp_ip or lldp_ipv6 if you want a specific address type.
|
||||
|
||||
=item $lldp->lldp_port()
|
||||
|
||||
@@ -517,7 +585,7 @@ the remote system.
|
||||
|
||||
=item $lldp->lldp_rem_id()
|
||||
|
||||
Returns the string value used to identify the chassis component associated
|
||||
Returns the string value used to identify the chassis component associated
|
||||
with the remote system.
|
||||
|
||||
(C<lldpRemChassisId>)
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
||||
@@ -78,7 +78,7 @@ sub model {
|
||||
|
||||
my $desc = $allied->description();
|
||||
|
||||
if ( $desc =~ /(AT-\d{4}\S{1}?)/ ) {
|
||||
if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
||||
@@ -50,11 +50,11 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Layer1::FUNCS,
|
||||
'asante_port' => 'ePortIndex',
|
||||
'asante_group' => 'ePortGrpIndex',
|
||||
'i_type' => 'ePortStateType',
|
||||
'i_type' => 'ePortGrpIndex',
|
||||
'asante_up' => 'ePortStateLinkStatus',
|
||||
);
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-HUB1012-MIB' => 'asante' );
|
||||
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-AH1012-MIB' => 'asante' );
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
||||
|
||||
@@ -202,7 +202,7 @@ Asante device through SNMP.
|
||||
|
||||
=over
|
||||
|
||||
=item F<ASANTE-HUB1012-MIB>
|
||||
=item F<ASANTE-AH1012-MIB>
|
||||
|
||||
=back
|
||||
|
||||
@@ -230,7 +230,7 @@ Returns 'asante' :)
|
||||
|
||||
=item $asante->model()
|
||||
|
||||
Cross references $asante->id() to the F<ASANTE-HUB1012-MIB> and returns
|
||||
Cross references $asante->id() to the F<ASANTE-AH1012-MIB> and returns
|
||||
the results.
|
||||
|
||||
=back
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer1::MIBS,
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -38,18 +38,20 @@ use SNMP::Info;
|
||||
use SNMP::Info::Bridge;
|
||||
use SNMP::Info::Entity;
|
||||
use SNMP::Info::PowerEthernet;
|
||||
use SNMP::Info::LLDP;
|
||||
|
||||
@SNMP::Info::Layer2::ISA
|
||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet Exporter/;
|
||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP Exporter/;
|
||||
@SNMP::Info::Layer2::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
%SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -57,6 +59,7 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Bridge::GLOBALS,
|
||||
%SNMP::Info::Entity::GLOBALS,
|
||||
%SNMP::Info::PowerEthernet::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'serial1' =>
|
||||
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
||||
);
|
||||
@@ -64,6 +67,7 @@ $VERSION = '3.18';
|
||||
%FUNCS = (
|
||||
%SNMP::Info::FUNCS, %SNMP::Info::Bridge::FUNCS,
|
||||
%SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
@@ -73,6 +77,7 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Bridge::MUNGE,
|
||||
%SNMP::Info::Entity::MUNGE,
|
||||
%SNMP::Info::PowerEthernet::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
);
|
||||
|
||||
# Method OverRides
|
||||
@@ -133,23 +138,6 @@ sub serial {
|
||||
return;
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l2 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $i_type = $l2->i_type($partial) || {};
|
||||
|
||||
my %i_ignore = ();
|
||||
|
||||
foreach my $if ( keys %$i_type ) {
|
||||
my $type = $i_type->{$if};
|
||||
$i_ignore{$if}++
|
||||
if $type =~ /(loopback|other|cpu)/i;
|
||||
}
|
||||
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
sub interfaces {
|
||||
my $l2 = shift;
|
||||
my $partial = shift;
|
||||
@@ -235,6 +223,8 @@ after determining a more specific class using the method above.
|
||||
|
||||
=item SNMP::Info::Entity
|
||||
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
@@ -288,6 +278,10 @@ See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
||||
|
||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
@@ -304,12 +298,6 @@ name.
|
||||
|
||||
Defaults to C<ifDescr> but checks and overrides with C<ifName>
|
||||
|
||||
=item $l2->i_ignore()
|
||||
|
||||
Returns reference to hash. Increments value of IID if port is to be ignored.
|
||||
|
||||
Ignores ports with C<ifType> of loopback, propvirtual, other, and cpu
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info
|
||||
@@ -324,4 +312,8 @@ See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
||||
|
||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
175
lib/SNMP/Info/Layer2/3Com.pm
Normal file
175
lib/SNMP/Info/Layer2/3Com.pm
Normal file
@@ -0,0 +1,175 @@
|
||||
package SNMP::Info::Layer2::3Com;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer2;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::CDP;
|
||||
|
||||
@SNMP::Info::Layer2::3Com::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::3Com::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
'A3Com-products-MIB' => 'wlanAP7760',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer2::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer2::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
);
|
||||
|
||||
|
||||
sub os {
|
||||
return '3Com';
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $dev = shift;
|
||||
my $e_serial = $dev->e_serial();
|
||||
|
||||
# Find entity table entry for this unit
|
||||
foreach my $e ( sort keys %$e_serial ) {
|
||||
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
|
||||
return $e_serial->{$e};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
|
||||
my $dev = shift;
|
||||
my $e_swver = $dev->e_swver();
|
||||
# Find entity table entry for this unit
|
||||
foreach my $e ( sort keys %$e_swver ) {
|
||||
if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
|
||||
return $e_swver->{$e};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
return '3Com';
|
||||
}
|
||||
|
||||
sub model {
|
||||
|
||||
my $dsmodel = shift;
|
||||
my $descr = $dsmodel->description();
|
||||
if ( $descr =~ /^([\S ]+) Software.*/){
|
||||
return $1;
|
||||
} else {
|
||||
return $descr;
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Max Kosmach
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $router = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 1
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $router->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for 3Com L2 devices
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item F<A3Com-products-MIB>
|
||||
|
||||
=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
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $device->vendor()
|
||||
|
||||
Returns '3Com'
|
||||
|
||||
=item $device->os()
|
||||
|
||||
Returns '3Com'
|
||||
|
||||
=item $device->os_ver()
|
||||
|
||||
Return os version
|
||||
|
||||
=item $device->model()
|
||||
|
||||
Returns device model extracted from description
|
||||
|
||||
=item $device->serial()
|
||||
|
||||
Returns serial number
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
|
||||
286
lib/SNMP/Info/Layer2/Adtran.pm
Normal file
286
lib/SNMP/Info/Layer2/Adtran.pm
Normal file
@@ -0,0 +1,286 @@
|
||||
package SNMP::Info::Layer2::Adtran;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::Layer2;
|
||||
use SNMP::Info::Layer3;
|
||||
|
||||
@SNMP::Info::Layer2::Adtran::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Adtran::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.42';
|
||||
|
||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||
# table by the serial() function.
|
||||
our $index = undef;
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
'ADTRAN-GENEVC-MIB' => 'adGenEVCMIB',
|
||||
'ADTRAN-GENMEF-MIB' => 'adGenMEFMIB',
|
||||
'ADTRAN-GENPORT-MIB' => 'adGenPort',
|
||||
'ADTRAN-MIB' => 'adtran',
|
||||
'ADTRAN-AOSUNIT' => 'adGenAOSUnitMib',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'serial' => 'adProdSerialNumber',
|
||||
'ad_mgmtevcvid' => 'adGenEVCSysMgmtEVCSTagVID',
|
||||
);
|
||||
|
||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS,
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
'ad_evcstag' => 'adGenEVCLookupName',
|
||||
'ad_menport' => 'adGenMenPortRowStatus',
|
||||
'ad_evcnamevid' => 'adGenEVCSTagVID',
|
||||
'ad_mgmtevcports' => 'adGenSysMgmtEVCInterfaceConnectionType',
|
||||
'ad_evcmapuniport' => 'adGenMEFMapUNIPort',
|
||||
'ad_evcmapevc' => 'adGenMEFMapAssociatedEVCAlias',
|
||||
'ad_genportcustuse' => 'adGenPortCustomerUse',
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, %SNMP::Info::Layer3::MUNGE );
|
||||
|
||||
sub vendor {
|
||||
return 'adtran';
|
||||
}
|
||||
sub os {
|
||||
return 'aos';
|
||||
}
|
||||
|
||||
sub layers {
|
||||
my $adtran = shift;
|
||||
|
||||
my $layers = $adtran->SUPER::layers();
|
||||
# Some netvantas don't report L2 properly
|
||||
my $macs = $adtran->fw_mac();
|
||||
|
||||
if (keys %$macs) {
|
||||
my $l = substr $layers, 6, 1, "1";
|
||||
}
|
||||
|
||||
return $layers;
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $adtran = shift;
|
||||
my $ver = $adtran->adProdSwVersion() || undef;
|
||||
return $ver if (defined $ver);
|
||||
my $aos_ver = $adtran->adAOSDeviceVersion();
|
||||
return $aos_ver;
|
||||
}
|
||||
sub model {
|
||||
my $adtran = shift;
|
||||
my $id = $adtran->id();
|
||||
my $mod = $adtran->adProdName() || undef;
|
||||
return $mod if (defined $mod);
|
||||
my $model = $adtran->adAOSDeviceProductName() || undef;
|
||||
return $model;
|
||||
}
|
||||
sub serial {
|
||||
my $adtran = shift;
|
||||
my $e_serial = $adtran->e_serial() || {};
|
||||
my $serial2 = $e_serial->{1} || undef;
|
||||
return $serial2 if ( defined $serial2 );
|
||||
return $adtran->orig_serial();
|
||||
}
|
||||
|
||||
sub i_name {
|
||||
my $adtran = shift;
|
||||
my $partial = shift;
|
||||
my $i_name = $adtran->SUPER::i_alias() || undef;
|
||||
return $i_name if (defined $i_name);
|
||||
$i_name = {};
|
||||
my $adname = $adtran->ad_genportcustuse() || undef;
|
||||
if (defined $adname) {
|
||||
foreach my $port (keys %$adname) {
|
||||
my @split = split(/\./,$port);
|
||||
$i_name->{@split[1]} = $adname->{$port};
|
||||
}
|
||||
}
|
||||
return $i_name;
|
||||
}
|
||||
sub i_vlan {
|
||||
my $adtran = shift;
|
||||
my $partial = shift;
|
||||
my $uniports = $adtran->ad_evcmapuniport() || undef;
|
||||
my $evcmaps = $adtran->ad_evcmapevc() || undef;
|
||||
my $v_names = $adtran->ad_evcnamevid() || undef;
|
||||
if (defined $uniports) {
|
||||
my $vlans = {};
|
||||
foreach my $oid (keys %$v_names) {
|
||||
my $name = pack("C*", split(/\./,$oid));
|
||||
$vlans->{$name} = $v_names->{$oid};
|
||||
}
|
||||
my $i_vlan = {};
|
||||
foreach my $evcmap (keys %$evcmaps) {
|
||||
$i_vlan->{$uniports->{$evcmap}} = $vlans->{$evcmaps->{$evcmap}};
|
||||
}
|
||||
return $i_vlan;
|
||||
}
|
||||
return {};
|
||||
|
||||
}
|
||||
|
||||
sub i_vlan_membership {
|
||||
my $adtran = shift;
|
||||
my $partial = shift;
|
||||
my $i_vlan = $adtran->ad_menport();
|
||||
if (defined $i_vlan) {
|
||||
my $vlans = {};
|
||||
my $v_name = $adtran->v_name();
|
||||
foreach my $vid (keys %$v_name) {
|
||||
$vlans->{$v_name->{$vid}} = $vid;
|
||||
}
|
||||
my $if_vlans = {};
|
||||
foreach my $entry (keys %$i_vlan) {
|
||||
my @split = split(/(\.0)+\./,$entry);
|
||||
my $name = pack("C*", split(/\./,@split[0]));
|
||||
push @{$if_vlans->{@split[2]}}, $vlans->{$name};
|
||||
}
|
||||
my $mgmtevcports = $adtran->ad_mgmtevcports();
|
||||
my $mgmtevcid = $adtran->ad_mgmtevcvid();
|
||||
foreach my $port (keys %$mgmtevcports) {
|
||||
push @{$if_vlans->{$port}}, $mgmtevcid;
|
||||
}
|
||||
return $if_vlans;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
sub v_name {
|
||||
my $adtran = shift;
|
||||
my $partial = shift;
|
||||
my $v_index = $adtran->ad_evcstag();
|
||||
return {} unless defined $v_index;
|
||||
$v_index->{$adtran->ad_mgmtevcvid()} = 'system-management-evc';
|
||||
return $v_index;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $adtran = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $adtran->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for adtran Devices running JUNOS
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=back
|
||||
|
||||
=head2 Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $adtran->vendor()
|
||||
|
||||
Returns 'adtran'
|
||||
|
||||
=item $adtran->os()
|
||||
|
||||
Returns 'aos'
|
||||
|
||||
=item $adtran->layers()
|
||||
|
||||
Ensures that layer two is reported, at least.
|
||||
|
||||
=item $adtran->os_ver()
|
||||
|
||||
Returns the software version extracted first from C<adProdSwVersion> or
|
||||
C<adAOSDeviceVersion>.
|
||||
|
||||
=item $adtran->model()
|
||||
|
||||
Returns the model extracted first from C<adProdName> or
|
||||
C<adAOSDeviceProductName>.
|
||||
|
||||
=item $adtran->serial()
|
||||
|
||||
Returns serial number.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $adtran->v_name()
|
||||
|
||||
VLAN names table.
|
||||
|
||||
=item $adtran->i_name()
|
||||
|
||||
Interface names table.
|
||||
|
||||
=item $adtran->i_vlan()
|
||||
|
||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
||||
|
||||
=item $adtran->i_vlan_membership()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the egress list for the port.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
@@ -97,6 +97,14 @@ my $mcs_index = {
|
||||
m13 => '104',
|
||||
m14 => '117',
|
||||
m15 => '130',
|
||||
m16 => '19.5',
|
||||
m17 => '39',
|
||||
m18 => '58.5',
|
||||
m19 => '78',
|
||||
m20 => '117',
|
||||
m21 => '156',
|
||||
m22 => '175.5',
|
||||
m23 => '195',
|
||||
# This is a cheat for 802.11a bonded
|
||||
m108 => '108',
|
||||
},
|
||||
@@ -117,6 +125,14 @@ my $mcs_index = {
|
||||
m13 => '240',
|
||||
m14 => '270',
|
||||
m15 => '300',
|
||||
m16 => '45',
|
||||
m17 => '90',
|
||||
m18 => '135',
|
||||
m19 => '180',
|
||||
m20 => '270',
|
||||
m21 => '360',
|
||||
m22 => '405',
|
||||
m23 => '450',
|
||||
}
|
||||
};
|
||||
|
||||
@@ -165,6 +181,7 @@ sub cd11_txrate {
|
||||
elsif ( $rate =~ /^m/ ) {
|
||||
my $band = $protos->{$idx};
|
||||
my $bw = $bws->{$band};
|
||||
# FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"...
|
||||
$cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
|
||||
}
|
||||
else {
|
||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||
@@ -60,7 +60,8 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||
%SNMP::Info::CDP::GLOBALS,
|
||||
'serial' => 'entPhysicalSerialNum.1',
|
||||
'descr' => 'sysDescr'
|
||||
'descr' => 'sysDescr',
|
||||
'ps1_type' => 'cpoePdCurrentPowerSource'
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
@@ -97,6 +98,7 @@ $VERSION = '3.18';
|
||||
'CISCO-DOT11-ASSOCIATION-MIB' => 'cDot11ClientSubIfIndex',
|
||||
'CISCO-DOT11-SSID-SECURITY-MIB' => 'cdot11SecVlanNameId',
|
||||
'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex',
|
||||
'CISCO-POE-PD-MIB' => 'cpoePdCurrentPowerSource',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
@@ -457,6 +459,18 @@ sub i_ssidmac {
|
||||
return $i_ssidmac;
|
||||
}
|
||||
|
||||
###
|
||||
# PoE status. The ps1_type is the PoE injector type, which is just
|
||||
# a scalar; the status is a little more complex.
|
||||
sub ps1_status {
|
||||
my $aironet = shift;
|
||||
my $idx = $aironet->cpoePdCurrentPowerLevel();
|
||||
my $mw = $aironet->cpoePdSupportedPower( $idx );
|
||||
my $descr = $aironet->cpoePdSupportedPowerMode( $idx );
|
||||
|
||||
return sprintf( "%.2fW (%s)", $mw->{$idx} * 0.001, $descr->{$idx} );
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -540,17 +554,13 @@ These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $aironet->discription()
|
||||
|
||||
Adds info from method e_descr() from SNMP::Info::Entity
|
||||
|
||||
=item $aironet->vendor()
|
||||
|
||||
Returns 'cisco'
|
||||
|
||||
=item $aironet->description()
|
||||
|
||||
System description
|
||||
System description. Adds info from method e_descr() from SNMP::Info::Entity
|
||||
|
||||
=back
|
||||
|
||||
@@ -648,6 +658,11 @@ being broadcast.
|
||||
With the same keys as i_ssidlist, returns the Basic service set
|
||||
identification (BSSID), MAC address, the AP is using for the SSID.
|
||||
|
||||
=item $aironet ps1_status()
|
||||
|
||||
Returns the PoE injector status based on C<cpoePdSupportedPower> and
|
||||
C<cpoePdSupportedPowerMode>.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
||||
@@ -341,6 +341,60 @@ sub peth_port_ifindex {
|
||||
return \%peth_port_ifindex;
|
||||
}
|
||||
|
||||
# Currently only ERS 4800 v5.8+ support the rcBridgeSpbmMacTable
|
||||
# which holds the FDB for a SPBM edge deployment.
|
||||
#
|
||||
# Q-BRIDGE still holds some entries when the rcBridgeSpbmMacTable is in use
|
||||
# so we merge hash entries.
|
||||
|
||||
sub fw_mac {
|
||||
my $rapidcity = shift;
|
||||
|
||||
my $qb = $rapidcity->SUPER::fw_mac() || {};
|
||||
my $spbm = $rapidcity->rc_spbm_fw_mac() || {};
|
||||
my $fw_mac = { %$qb, %$spbm };
|
||||
|
||||
return $fw_mac;
|
||||
}
|
||||
|
||||
sub fw_port {
|
||||
my $rapidcity = shift;
|
||||
|
||||
my $qb = $rapidcity->SUPER::fw_port() || {};
|
||||
my $spbm = $rapidcity->rc_spbm_fw_port() || {};
|
||||
my $fw_port = { %$qb, %$spbm };
|
||||
|
||||
return $fw_port;
|
||||
}
|
||||
|
||||
sub fw_status {
|
||||
my $rapidcity = shift;
|
||||
|
||||
my $qb = $rapidcity->SUPER::fw_status() || {};
|
||||
my $spbm = $rapidcity->rc_spbm_fw_status() || {};
|
||||
my $fw_status = { %$qb, %$spbm };
|
||||
|
||||
return $fw_status;
|
||||
}
|
||||
|
||||
sub qb_fw_vlan {
|
||||
my $rapidcity = shift;
|
||||
|
||||
my $qb = $rapidcity->SUPER::qb_fw_vlan() || {};
|
||||
my $spbm = $rapidcity->rc_spbm_fw_vlan() || {};
|
||||
my $qb_fw_vlan = { %$qb, %$spbm };
|
||||
|
||||
return $qb_fw_vlan;
|
||||
}
|
||||
|
||||
# Baystack uses S5-AGENT-MIB (loaded in NortelStack) versus RAPID-CITY
|
||||
sub stp_ver {
|
||||
my $rapidcity = shift;
|
||||
|
||||
return $rapidcity->s5AgSysSpanningTreeOperMode()
|
||||
|| $rapidcity->SUPER::stp_ver();
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -444,6 +498,14 @@ Returns 'baystack' or 'boss' depending on software version.
|
||||
|
||||
Returns the firmware version extracted from C<sysDescr>.
|
||||
|
||||
=item $baystack->stp_ver()
|
||||
|
||||
Returns the particular STP version running on this device.
|
||||
|
||||
Values: C<nortelStpg>, C<pvst>, C<rstp>, C<mstp>, C<ieee8021d>
|
||||
|
||||
(C<s5AgSysSpanningTreeOperMode>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Overrides
|
||||
@@ -600,6 +662,32 @@ ns_e_vendor().
|
||||
|
||||
=back
|
||||
|
||||
=head2 Layer 2 Forwarding Database
|
||||
|
||||
These methods try to obtain the layer 2 forwarding database entries via the
|
||||
normal bridge methods as well as SPBM entries via rapid city methods.
|
||||
|
||||
=over
|
||||
|
||||
=item $baystack->fw_mac()
|
||||
|
||||
Returns reference to hash of forwarding table MAC Addresses
|
||||
|
||||
=item $baystack->fw_port()
|
||||
|
||||
Returns reference to hash of forwarding table entries port interface
|
||||
identifier (iid)
|
||||
|
||||
=item $baystack->qb_fw_vlan()
|
||||
|
||||
Returns reference to hash of forwarding table entries VLAN ID
|
||||
|
||||
=item $baystack->fw_status()
|
||||
|
||||
Returns reference to hash of forwarding table entries status
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::SONMP
|
||||
|
||||
See L<SNMP::Info::SONMP/"TABLE METHODS"> for details.
|
||||
@@ -48,7 +48,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
@@ -261,6 +261,8 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged { return; }
|
||||
|
||||
sub bp_index {
|
||||
my $c1900 = shift;
|
||||
my $partial = shift;
|
||||
@@ -470,6 +472,9 @@ bridge group IDs.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $c1900->i_vlan_membership_untagged()
|
||||
|
||||
Unsupported, returns nothing.
|
||||
|
||||
=item $c1900->bp_index()
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2::Cisco;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::Cisco::GLOBALS,
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2::Cisco;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::Cisco::MIBS,
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -52,7 +52,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -50,11 +50,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
|
||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||
# table by the serial() function.
|
||||
our $index = undef;
|
||||
$VERSION = '3.42';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
@@ -98,6 +94,10 @@ sub vendor {
|
||||
return 'cisco';
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'ros';
|
||||
}
|
||||
|
||||
# Walk the entPhysicalSerialNum table and return the first serial found
|
||||
sub serial {
|
||||
my $ciscosb = shift;
|
||||
@@ -113,20 +113,27 @@ sub serial {
|
||||
|
||||
sub os_ver {
|
||||
my $ciscosb = shift;
|
||||
my $os_ver = $ciscosb->e_swver();
|
||||
my $e_swver = $ciscosb->e_swver();
|
||||
|
||||
return $os_ver->{$index} if defined $index;
|
||||
foreach my $e ( sort keys %$e_swver ) {
|
||||
if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
|
||||
return $e_swver->{$e};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Grab e_model from Entity and tag on e_hwver
|
||||
sub model {
|
||||
my $ciscosb = shift;
|
||||
my $e_model = $ciscosb->e_model();
|
||||
my $e_model = $ciscosb->e_model();
|
||||
my $e_hwver = $ciscosb->e_hwver();
|
||||
|
||||
if (defined ($index)) {
|
||||
my $model = "$e_model->{$index} $e_hwver->{$index}";
|
||||
return $model;
|
||||
foreach my $e ( sort keys %$e_model ) {
|
||||
if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) {
|
||||
return $e_model->{$e};
|
||||
#my $model = "$e_model->{$e} $e_hwver->{$e}";
|
||||
#return $model;
|
||||
}
|
||||
}
|
||||
return $ciscosb->description();
|
||||
}
|
||||
@@ -156,14 +163,14 @@ Nic Bernstein (shamelessly stolen from Max Baker's Aironet code)
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $ciscosb = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myswitch',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $ciscosb->class();
|
||||
@@ -210,6 +217,10 @@ These are methods that return scalar value from SNMP
|
||||
|
||||
Returns 'cisco'
|
||||
|
||||
=item $ciscosb->os()
|
||||
|
||||
Returns 'ros'
|
||||
|
||||
=item $ciscosb->os_ver()
|
||||
|
||||
Returns software version (C<entPhysicalSoftwareRev>)
|
||||
@@ -36,15 +36,13 @@ use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::MAU;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::CDP;
|
||||
use SNMP::Info::Aggregate;
|
||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||
|
||||
@SNMP::Info::Layer2::HP::ISA = qw/
|
||||
SNMP::Info::Aggregate
|
||||
SNMP::Info::Layer3
|
||||
SNMP::Info::MAU
|
||||
SNMP::Info::LLDP
|
||||
SNMP::Info::CDP
|
||||
Exporter
|
||||
/;
|
||||
@@ -52,12 +50,11 @@ use SNMP::Info::Aggregate;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::MAU::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::CDP::MIBS,
|
||||
%SNMP::Info::Aggregate::MIBS,
|
||||
'RFC1271-MIB' => 'logDescription',
|
||||
@@ -74,7 +71,6 @@ $VERSION = '3.18';
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::MAU::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
%SNMP::Info::CDP::GLOBALS,
|
||||
%SNMP::Info::Aggregate::GLOBALS,
|
||||
'serial1' => 'entPhysicalSerialNum.1',
|
||||
@@ -93,7 +89,6 @@ $VERSION = '3.18';
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::MAU::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
%SNMP::Info::CDP::FUNCS,
|
||||
%SNMP::Info::Aggregate::FUNCS,
|
||||
'i_type2' => 'ifType',
|
||||
@@ -119,7 +114,6 @@ $VERSION = '3.18';
|
||||
# Inherit all the built in munging
|
||||
%SNMP::Info::Layer3::MUNGE,
|
||||
%SNMP::Info::MAU::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
%SNMP::Info::CDP::MUNGE,
|
||||
%SNMP::Info::Aggregate::MUNGE,
|
||||
'c_id' => \&munge_hp_c_id,
|
||||
@@ -131,6 +125,8 @@ $VERSION = '3.18';
|
||||
%MODEL_MAP = (
|
||||
'J8131A' => 'WAP-420-WW',
|
||||
'J8130A' => 'WAP-420-NA',
|
||||
'J9833A' => 'PS1810-8G',
|
||||
'J9834A' => 'PS1810-24G',
|
||||
'J8133A' => 'AP520WL',
|
||||
'J8680A' => '9408sl',
|
||||
'J9091A' => '8212zl',
|
||||
@@ -145,8 +141,10 @@ $VERSION = '3.18';
|
||||
'J8992A' => '6200yl-24G',
|
||||
'J4902A' => '6108',
|
||||
'J8698A' => '5412zl',
|
||||
'J9851A' => '5412R-zl2',
|
||||
'J8719A' => '5408yl',
|
||||
'J8697A' => '5406zl',
|
||||
'J9850A' => '5406R-zl2',
|
||||
'J8718A' => '5404yl',
|
||||
'J4819A' => '5308XL',
|
||||
'J4850A' => '5304XL',
|
||||
@@ -178,8 +176,12 @@ $VERSION = '3.18';
|
||||
'J4815A' => '3324XL',
|
||||
'J4851A' => '3124',
|
||||
'J9729A' => '2920-48G-PoE+',
|
||||
'J9729A' => '2920-48G-PoE+',
|
||||
'J9728A' => '2920-48G',
|
||||
'J9728A' => '2920-48G',
|
||||
'J9727A' => '2920-24G-PoE+',
|
||||
'J9727A' => '2920-24G-PoE+',
|
||||
'J9726A' => '2920-24G',
|
||||
'J9726A' => '2920-24G',
|
||||
'J9562A' => '2915-8G-PoE',
|
||||
'J9148A' => '2910al-48G-PoE+',
|
||||
@@ -192,30 +194,42 @@ $VERSION = '3.18';
|
||||
'J4903A' => '2824',
|
||||
'J9022A' => '2810-48G',
|
||||
'J9021A' => '2810-24G',
|
||||
'J4899C' => '2650C',
|
||||
'J8165A' => '2650-PWR',
|
||||
'J4899B' => '2650-CR',
|
||||
'J4899C' => '2650C',
|
||||
'J4899A' => '2650',
|
||||
'J4900C' => '2626C',
|
||||
'J8164A' => '2626-PWR',
|
||||
'J4900B' => '2626-CR',
|
||||
'J4900C' => '2626C',
|
||||
'J4900A' => '2626',
|
||||
'J9627A' => '2620-48-PoE+',
|
||||
'J9626A' => '2620-48',
|
||||
'J9625A' => '2620-24-PoE+',
|
||||
'J9624A' => '2620-24-PPoE+',
|
||||
'J9625A' => '2620-24-PoE+',
|
||||
'J9623A' => '2620-24',
|
||||
'J9565A' => '2615-8-PoE',
|
||||
'J9089A' => '2610-48-PWR',
|
||||
'J9088A' => '2610-48',
|
||||
'J9086A' => '2610-24/12PWR',
|
||||
'J9087A' => '2610-24-PWR',
|
||||
'J9086A' => '2610-24/12PWR',
|
||||
'J9085A' => '2610-24',
|
||||
'J8762A' => '2600-8-PWR',
|
||||
'J9780A' => '2530-8-PoE+',
|
||||
'J9774A' => '2530-8G-PoEP',
|
||||
'J9777A' => '2530-8G',
|
||||
'J9783A' => '2530-8',
|
||||
'J9778A' => '2530-48-PoE+',
|
||||
'J9853A' => '2530-48G-PoE+-2SFP+',
|
||||
'J9772A' => '2530-48G-PoE+',
|
||||
'J9855A' => '2530-48G-2SFP+',
|
||||
'J9775A' => '2530-48G',
|
||||
'J9781A' => '2530-48',
|
||||
'J9779A' => '2530-24-PoE+',
|
||||
'J9854A' => '2530-24G-PoE+-2SFP+',
|
||||
'J9773A' => '2530-24G-PoE+',
|
||||
'J9856A' => '2530-24G-2SFP+',
|
||||
'J9776A' => '2530-24G',
|
||||
'J9782A' => '2530-24',
|
||||
'J4813A' => '2524',
|
||||
'J9298A' => '2520G-8-PoE',
|
||||
'J9299A' => '2520G-24-PoE',
|
||||
@@ -231,6 +245,8 @@ $VERSION = '3.18';
|
||||
'J4817A' => '2312',
|
||||
'J9449A' => '1810G-8',
|
||||
'J9450A' => '1810G-24',
|
||||
'J9802A' => '1810-8G',
|
||||
'J9803A' => '1810-24G',
|
||||
'J9029A' => '1800-8G',
|
||||
'J9028A' => '1800-24G',
|
||||
);
|
||||
@@ -536,30 +552,6 @@ sub set_i_vlan_tagged {
|
||||
|
||||
sub agg_ports { return agg_ports_ifstack(@_) }
|
||||
|
||||
sub qb_fw_vlan {
|
||||
my $hp = shift;
|
||||
my $partial = shift;
|
||||
my $qb_fw_vlan = $hp->SUPER::qb_fw_vlan($partial);
|
||||
|
||||
my $fdb_to_dot1q = {};
|
||||
my $fdb_id = $hp->dot1qVlanFdbId(0);
|
||||
foreach my $fdb_entry (keys %$fdb_id) {
|
||||
my ($timemark, $vlan_id) = split(/\./, $fdb_entry);
|
||||
$fdb_to_dot1q->{$fdb_id->{$fdb_entry}} = $vlan_id;
|
||||
}
|
||||
foreach my $learn (keys %$qb_fw_vlan) {
|
||||
my $fdb_idx = $qb_fw_vlan->{$learn};
|
||||
if (exists $fdb_to_dot1q->{$fdb_idx}) {
|
||||
$qb_fw_vlan->{$learn} = $fdb_to_dot1q->{$fdb_idx};
|
||||
}
|
||||
}
|
||||
|
||||
return $qb_fw_vlan;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -606,8 +598,6 @@ after determining a more specific class using the method above.
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=item SNMP::Info::MAU
|
||||
|
||||
=back
|
||||
@@ -827,22 +817,12 @@ Power supplied by PoE ports, in milliwatts
|
||||
Returns what version of STP the device is running.
|
||||
(C<hpicfBridgeRstpForceVersion> with fallback to inherited stp_ver())
|
||||
|
||||
=item $hp->qb_fw_vlan()
|
||||
|
||||
Returns reference to hash of forwarding table entries VLAN ID
|
||||
|
||||
(C<dot1qFdbId>), (C<rcBridgeTpFdbVlanId>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::MAU
|
||||
|
||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
||||
@@ -894,10 +874,6 @@ ifIndex of the corresponding master ports.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::MAU
|
||||
|
||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -376,6 +376,20 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $hp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $vlans = $hp->i_vlan($partial);
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $port (keys %$vlans) {
|
||||
my $vlan = $vlans->{$port};
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub set_i_vlan {
|
||||
my $hp = shift;
|
||||
my $rv;
|
||||
@@ -680,6 +694,12 @@ It is the union of tagged, untagged, and auto ports.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $hp->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=item $hp->v_index()
|
||||
|
||||
Returns VLAN IDs
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||
# table by the serial() function.
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
319
lib/SNMP/Info/Layer2/Ubiquiti.pm
Normal file
319
lib/SNMP/Info/Layer2/Ubiquiti.pm
Normal file
@@ -0,0 +1,319 @@
|
||||
# SNMP::Info::Layer2::Ubiquiti
|
||||
# $Id$
|
||||
#
|
||||
|
||||
package SNMP::Info::Layer2::Ubiquiti;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::IEEE802dot11;
|
||||
use SNMP::Info::Layer2;
|
||||
use SNMP::Info::Layer3; # only used in sub mac()
|
||||
|
||||
|
||||
|
||||
@SNMP::Info::Layer2::Ubiquiti::ISA
|
||||
= qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Ubiquiti::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
%SNMP::Info::IEEE802dot11::MIBS,
|
||||
|
||||
);
|
||||
|
||||
%GLOBALS
|
||||
= ( %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::IEEE802dot11::GLOBALS, );
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer2::FUNCS,
|
||||
%SNMP::Info::IEEE802dot11::FUNCS,
|
||||
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
||||
|
||||
sub os {
|
||||
my $ubnt = shift;
|
||||
|
||||
my $names = $ubnt->dot11_prod_name();
|
||||
|
||||
foreach my $iid ( keys %$names ) {
|
||||
my $prod = $names->{$iid};
|
||||
next unless defined $prod;
|
||||
# Product names that match AirOS products
|
||||
if((lc $prod) =~ /station/ or (lc $prod) =~ /beam/ or (lc $prod) =~ /grid/){
|
||||
return 'AirOS';
|
||||
# Product names that match UAP
|
||||
}elsif((lc $prod) =~ /uap/){
|
||||
return 'UniFi';
|
||||
}else{
|
||||
# Continue below to find OS name
|
||||
}
|
||||
}
|
||||
|
||||
## EdgeMAX OS (EdgeSwitch and EdgeRouter) name is first field split by space
|
||||
my $ver = $ubnt->description() || '';
|
||||
|
||||
my @myver = split(/ /, $ver);
|
||||
|
||||
return $myver[0];
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $dot11 = shift;
|
||||
|
||||
my $versions = $dot11->dot11_prod_ver();
|
||||
|
||||
foreach my $iid ( keys %$versions ) {
|
||||
my $ver = $versions->{$iid};
|
||||
next unless defined $ver;
|
||||
return $ver;
|
||||
## Not sure what this function does, it seems to be extraneous being in the same code block after a return statement?
|
||||
if ( $ver =~ /([\d\.]+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
my $ver = $dot11->description() || '';
|
||||
if($ver =~ /^edgeswitch/){
|
||||
## EdgeSwitch OS version is second field split by comma
|
||||
my @myver = split(/, /, $ver);
|
||||
|
||||
return $myver[1];
|
||||
}
|
||||
|
||||
## EdgeRouter OS version is second field split by space
|
||||
my @myver = split(/ /, $ver);
|
||||
|
||||
return $myver[1];
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
return 'Ubiquiti Networks, Inc.';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $ubnt = shift;
|
||||
|
||||
my $names = $ubnt->dot11_prod_name();
|
||||
|
||||
foreach my $iid ( keys %$names ) {
|
||||
my $prod = $names->{$iid};
|
||||
next unless defined $prod;
|
||||
return $prod;
|
||||
}
|
||||
|
||||
my $desc = $ubnt->description() || '';
|
||||
|
||||
## Pull Model from beginning of description, separated by comma (EdgeSwitch)
|
||||
if((lc $desc) =~ /^edgeswitch/){
|
||||
my @mydesc = split(/, /, $desc);
|
||||
return $mydesc[0];
|
||||
}
|
||||
|
||||
if(!((lc $desc) =~ /edgeos/)){
|
||||
# Not sure what type of device this is to get Model
|
||||
# Wireless devices report dot11_prod_name
|
||||
# EdgeSwitch includes mode directly and edgeos logic is in else statement
|
||||
return ;
|
||||
}else{
|
||||
## do some logic to determine ER model based on tech specs from ubnt:
|
||||
## https://help.ubnt.com/hc/en-us/articles/219652227--EdgeRouter-Which-EdgeRouter-Should-I-Use-#tech%20specs
|
||||
## Would be nice if UBNT simply adds the model string to their SNMP daemon directly
|
||||
my $ethCount = 0;
|
||||
my $switchCount = 0;
|
||||
#my $sfpCount = 0;
|
||||
#my $poeCount = 0;
|
||||
my $memTotalReal = $ubnt->memTotalReal;
|
||||
my $cpuLoad = $ubnt->hrProcessorLoad;
|
||||
my $cpuCount = 0;
|
||||
## My perl is lacking. Not sure if there's a more efficient way to find the cpu count
|
||||
foreach my $iid ( keys %$cpuLoad ) {
|
||||
$cpuCount++;
|
||||
}
|
||||
|
||||
my $ifDescs = $ubnt->ifDescr;
|
||||
foreach my $iid ( keys %$ifDescs ) {
|
||||
my $ifDesc = $ifDescs->{$iid};
|
||||
next unless defined $ifDesc;
|
||||
|
||||
if((lc $ifDesc) =~ /^eth\d+$/){ # exclude vlan interfaces. Ex: eth1.5
|
||||
$ethCount++;
|
||||
}elsif((lc $ifDesc) =~ /^switch/){
|
||||
$switchCount++;
|
||||
}
|
||||
}
|
||||
|
||||
## If people have other models to further fine-tune this logic that would be great.
|
||||
if($ethCount eq 9){
|
||||
## Should be ER Infinity
|
||||
return "EdgeRouter Infinity"
|
||||
}if($ethCount eq 8){
|
||||
## Could be ER-8 Pro, ER-8, or EP-R8
|
||||
return "EdgeRouter 8-Port"
|
||||
}elsif($ethCount eq 5 and $cpuCount eq 4){
|
||||
## Could be ER-X or ER-X-SFP
|
||||
return "EdgeRouter X 5-Port"
|
||||
}elsif($ethCount eq 5){
|
||||
return "EdgeRouter PoE 5-Port"
|
||||
}elsif($ethCount eq 3 and $cpuCount eq 2){
|
||||
return "EdgeRouter LITE 3-Port"
|
||||
}else{
|
||||
## failback string
|
||||
return "EdgeRouter eth-$ethCount switch-$switchCount mem-$memTotalReal cpuNum-$cpuCount";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
## simply take the MAC and clean it up
|
||||
sub serial {
|
||||
my $ubnt = shift;
|
||||
|
||||
my $serial = $ubnt->mac();
|
||||
if($serial){
|
||||
$serial =~ s/://g;
|
||||
return uc $serial;
|
||||
}
|
||||
return ;
|
||||
}
|
||||
|
||||
## UBNT doesn't put the primary-mac interface at index 1
|
||||
sub mac {
|
||||
my $ubnt = shift;
|
||||
my $ifDescs = $ubnt->ifDescr;
|
||||
|
||||
foreach my $iid ( keys %$ifDescs ) {
|
||||
my $ifDesc = $ifDescs->{$iid};
|
||||
next unless defined $ifDesc;
|
||||
## CPU Interface will have the primary MAC for EdgeSwitch
|
||||
## eth0 will have primary MAC for linux-based UBNT devices
|
||||
if($ifDesc =~ /CPU/ or $ifDesc eq 'eth0'){
|
||||
my $mac = $ubnt->ifPhysAddress->{$iid};
|
||||
|
||||
# syntax stolen from sub munge_mac in SNMP::Info
|
||||
$mac = lc join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) );
|
||||
return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]$/i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
# MAC malformed or missing
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Max Kosmach
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $ubnt = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myswitch',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $ubnt->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Provides abstraction to the configuration information obtainable from
|
||||
Ubiquiti Access Point through SNMP.
|
||||
|
||||
For speed or debugging purposes you can call the subclass directly, but not
|
||||
after determining a more specific class using the method above.
|
||||
|
||||
my $ubnt = new SNMP::Info::Layer2::Ubiquiti(...);
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
|
||||
=item SNMP::Info::IEEE802dot11
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
None.
|
||||
|
||||
=head2 Inherited MIBs
|
||||
|
||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
See L<SNMP::Info::IEEE802dot11/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $ubnt->vendor()
|
||||
|
||||
Returns 'Ubiquiti Networks, Inc.'
|
||||
|
||||
=item $ubnt->model()
|
||||
|
||||
Returns the model extracted from C<dot11manufacturerProductName>, with failback to some complex logic for EdgeMax devices
|
||||
|
||||
=item $ubnt->serial()
|
||||
|
||||
Serial Number.
|
||||
|
||||
=item $ubnt->mac()
|
||||
|
||||
Bridge MAC address.
|
||||
|
||||
=item $ubnt->os()
|
||||
|
||||
Returns 'Ubiquiti Networks, Inc.'
|
||||
|
||||
=item $ubnt->os_ver()
|
||||
|
||||
Returns the software version extracted from C<dot11manufacturerProductVersion>, with failback to description splitting for EdgeMax devices
|
||||
|
||||
=back
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::IEEE802dot11
|
||||
|
||||
See L<SNMP::Info::IEEE802dot11/"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.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot11
|
||||
|
||||
See L<SNMP::Info::IEEE802dot11/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||
@@ -41,17 +41,19 @@ use SNMP::Info::Entity;
|
||||
use SNMP::Info::PowerEthernet;
|
||||
use SNMP::Info::IPv6;
|
||||
use SNMP::Info::AdslLine;
|
||||
use SNMP::Info::LLDP;
|
||||
|
||||
@SNMP::Info::Layer3::ISA = qw/
|
||||
SNMP::Info::PowerEthernet SNMP::Info::IPv6
|
||||
SNMP::Info::Entity SNMP::Info::EtherLike
|
||||
SNMP::Info::Bridge SNMP::Info::AdslLine
|
||||
SNMP::Info::LLDP
|
||||
SNMP::Info Exporter/;
|
||||
@SNMP::Info::Layer3::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -61,6 +63,7 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Entity::MIBS,
|
||||
%SNMP::Info::PowerEthernet::MIBS,
|
||||
%SNMP::Info::IPv6::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'IP-MIB' => 'ipNetToMediaIfIndex',
|
||||
'OSPF-MIB' => 'ospfRouterId',
|
||||
'BGP4-MIB' => 'bgpIdentifier',
|
||||
@@ -76,6 +79,7 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Entity::GLOBALS,
|
||||
%SNMP::Info::PowerEthernet::GLOBALS,
|
||||
%SNMP::Info::IPv6::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'mac' => 'ifPhysAddress.1',
|
||||
'serial1' =>
|
||||
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
||||
@@ -92,6 +96,7 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Entity::FUNCS,
|
||||
%SNMP::Info::PowerEthernet::FUNCS,
|
||||
%SNMP::Info::IPv6::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
|
||||
# Obsolete Address Translation Table (ARP Cache)
|
||||
'old_at_index' => 'atIfIndex',
|
||||
@@ -150,6 +155,7 @@ $VERSION = '3.18';
|
||||
%SNMP::Info::Entity::MUNGE,
|
||||
%SNMP::Info::PowerEthernet::MUNGE,
|
||||
%SNMP::Info::IPv6::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
'old_at_paddr' => \&SNMP::Info::munge_mac,
|
||||
'at_paddr' => \&SNMP::Info::munge_mac,
|
||||
'n2p_paddr' => \&SNMP::Info::munge_mac,
|
||||
@@ -185,34 +191,20 @@ sub root_ip {
|
||||
return;
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l3 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l3->interfaces($partial) || {};
|
||||
|
||||
my %i_ignore;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
|
||||
# lo -> cisco aironet 350 loopback
|
||||
if ( $interfaces->{$if} =~ /(tunnel|loopback|\blo\b|null)/i ) {
|
||||
$i_ignore{$if}++;
|
||||
}
|
||||
}
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
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};
|
||||
if ( $parent eq '0' ) {
|
||||
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 ) {
|
||||
if ( $serial && $serial->{$iid} ) {
|
||||
return $serial->{$iid};
|
||||
}
|
||||
else {
|
||||
@@ -427,6 +419,8 @@ after determining a more specific class using the method above.
|
||||
|
||||
=item SNMP::Info::IPv6
|
||||
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
@@ -455,6 +449,8 @@ See L<SNMP::Info::PowerEthernet/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
@@ -528,6 +524,18 @@ See L<SNMP::Info::EtherLike/"GLOBALS"> for details.
|
||||
|
||||
See L<SNMP::Info::Entity/"GLOBALS"> for details.
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info:PowerEthernet
|
||||
|
||||
See L<SNMP::Info::PowerEthernet/"GLOBALS"> for details.
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::IPv6
|
||||
|
||||
See L<SNMP::Info::IPv6/"GLOBALS"> for details.
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
@@ -544,12 +552,6 @@ name.
|
||||
|
||||
Only returns those iids that have a description listed in $l3->i_description()
|
||||
|
||||
=item $l3->i_ignore()
|
||||
|
||||
Returns reference to hash. Creates a key for each IID that should be ignored.
|
||||
|
||||
Currently looks for tunnel,loopback,lo,null from $l3->interfaces()
|
||||
|
||||
=item $l3->i_name()
|
||||
|
||||
Returns reference to hash of iid to human set name.
|
||||
@@ -803,4 +805,8 @@ See L<SNMP::Info::PowerEthernet/"TABLE METHODS"> for details.
|
||||
|
||||
See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -385,6 +385,20 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $alteon = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $vlans = $alteon->i_vlan($partial);
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $port (keys %$vlans) {
|
||||
my $vlan = $vlans->{$port};
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
# Bridge MIB does not map Bridge Port to ifIndex correctly on some code
|
||||
# versions
|
||||
sub bp_index {
|
||||
@@ -574,6 +588,12 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $alteon->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=item $alteon->v_index()
|
||||
|
||||
Returns VLAN IDs
|
||||
@@ -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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -36,7 +36,7 @@ use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::MAU;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::Aggregate;
|
||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||
|
||||
@SNMP::Info::Layer3::Arista::ISA = qw/
|
||||
SNMP::Info::Aggregate
|
||||
@@ -48,7 +48,7 @@ use SNMP::Info::Aggregate;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -124,6 +124,8 @@ $VERSION = '3.18';
|
||||
'aruba_ap_model' => 'wlanAPModelName',
|
||||
'aruba_ap_name' => 'wlanAPName',
|
||||
'aruba_ap_ip' => 'wlanAPIpAddress',
|
||||
'aruba_ap_hw_ver' => 'wlanAPHwVersion',
|
||||
'aruba_ap_sw_ver' => 'wlanAPSwVersion',
|
||||
|
||||
# WLSX-WLAN-MIB::wlsxWlanESSIDVlanPoolTable
|
||||
'aruba_ssid_vlan' => 'wlanESSIDVlanPoolStatus',
|
||||
@@ -484,6 +486,7 @@ sub i_vlan {
|
||||
return $aruba->SUPER::i_vlan($partial)
|
||||
if keys %{ $aruba->SUPER::i_vlan($partial) };
|
||||
|
||||
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
|
||||
my $index = $aruba->aruba_if_idx();
|
||||
|
||||
if ($partial) {
|
||||
@@ -512,6 +515,7 @@ sub i_vlan_membership {
|
||||
return $aruba->SUPER::i_vlan_membership($partial)
|
||||
if keys %{ $aruba->SUPER::i_vlan_membership($partial) };
|
||||
|
||||
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
|
||||
my $essid_ssid = $aruba->aruba_ap_bssid_ssid();
|
||||
my $ssid_vlans = $aruba->aruba_ssid_vlan();
|
||||
my $if_vlans = $aruba->aruba_if_vlan_member();
|
||||
@@ -555,6 +559,32 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $aruba = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $aruba->SUPER::i_vlan_membership_untagged($partial)
|
||||
if keys %{ $aruba->SUPER::i_vlan_membership_untagged($partial) };
|
||||
|
||||
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
|
||||
# It is unclear if native VLAN is transmitted untagged
|
||||
# This assumes Cisco-like behavior on trunks that native VLAN is
|
||||
# transmitted untagged, if this needs to be changed we will need to
|
||||
# consider ifExtMode rather than just using i_vlan
|
||||
my $if_membership = $aruba->i_vlan_membership();
|
||||
my $if_ = $aruba->i_vlan();
|
||||
my $if_mode = $aruba->aruba_if_mode();
|
||||
|
||||
my $vlans = $aruba->i_vlan($partial);
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $port (keys %$vlans) {
|
||||
my $vlan = $vlans->{$port};
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_80211channel {
|
||||
my $aruba = shift;
|
||||
my $partial = shift;
|
||||
@@ -995,8 +1025,9 @@ sub e_type {
|
||||
sub e_hwver {
|
||||
my $aruba = shift;
|
||||
|
||||
my $ap_hw = $aruba->aruba_card_hw() || {};
|
||||
my $ap_fpga = $aruba->aruba_card_fpga() || {};
|
||||
my $ap_hw = $aruba->aruba_card_hw() || {};
|
||||
my $ap_fpga = $aruba->aruba_card_fpga() || {};
|
||||
my $ap_hw_ver = $aruba->aruba_ap_hw_ver() || {};
|
||||
|
||||
my %e_hwver;
|
||||
|
||||
@@ -1008,9 +1039,36 @@ sub e_hwver {
|
||||
|
||||
$e_hwver{$iid} = "$hw $fpga";
|
||||
}
|
||||
|
||||
# APs
|
||||
foreach my $idx ( keys %$ap_hw_ver ) {
|
||||
my $hw_ver = $ap_hw_ver->{$idx};
|
||||
next unless defined $hw_ver;
|
||||
|
||||
$e_hwver{$idx} = "$hw_ver";
|
||||
}
|
||||
|
||||
return \%e_hwver;
|
||||
}
|
||||
|
||||
sub e_swver {
|
||||
my $aruba = shift;
|
||||
|
||||
my $ap_sw_ver = $aruba->aruba_ap_hw_ver() || {};
|
||||
|
||||
my %e_swver;
|
||||
|
||||
# APs
|
||||
foreach my $idx ( keys %$ap_sw_ver ) {
|
||||
my $sw_ver = $ap_sw_ver->{$idx};
|
||||
next unless defined $sw_ver;
|
||||
|
||||
$e_swver{$idx} = "$sw_ver";
|
||||
}
|
||||
|
||||
return \%e_swver;
|
||||
}
|
||||
|
||||
sub e_vendor {
|
||||
my $aruba = shift;
|
||||
|
||||
@@ -1586,6 +1644,12 @@ Returns reference to map of IIDs to VLAN ID of the interface.
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs for which the port is a member.
|
||||
|
||||
=item $aruba->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=item $aruba->bp_index()
|
||||
|
||||
Augments the bridge MIB by returning reference to a hash containing the
|
||||
@@ -1648,6 +1712,10 @@ Returns reference to hash. Key: IID, Value: Type of component.
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Hardware revision.
|
||||
|
||||
=item $aruba->e_swver()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Software revision.
|
||||
|
||||
=item $aruba->e_vendor()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: aruba.
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
||||
%MODID_MAP %PROCID_MAP/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -732,6 +732,8 @@ sub i_vlan {
|
||||
return \%i_vlan;
|
||||
}
|
||||
|
||||
sub i_pvid { goto &i_vlan }
|
||||
|
||||
sub root_ip {
|
||||
my $bayrs = shift;
|
||||
|
||||
@@ -1549,6 +1551,10 @@ interfaces.
|
||||
|
||||
Returns reference to hash. Maps port VLAN ID to IIDs.
|
||||
|
||||
=item $bayrs->i_pvid()
|
||||
|
||||
Returns reference to hash. Maps port VLAN ID to IIDs.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Pseudo F<ENTITY-MIB> information
|
||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# NOTE: Order creates precedence
|
||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::MAU;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
# NOTE: Order creates precedence
|
||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||
330
lib/SNMP/Info/Layer3/CheckPoint.pm
Normal file
330
lib/SNMP/Info/Layer3/CheckPoint.pm
Normal file
@@ -0,0 +1,330 @@
|
||||
# SNMP::Info::Layer3::CheckPoint
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (c) 2008 Bill Fenner
|
||||
# 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::CheckPoint;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::LLDP;
|
||||
|
||||
@SNMP::Info::Layer3::CheckPoint::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'CHECKPOINT-MIB' => 'fwProduct',
|
||||
'UCD-SNMP-MIB' => 'versionTag',
|
||||
'NET-SNMP-TC' => 'netSnmpAgentOIDs',
|
||||
'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
|
||||
'HOST-RESOURCES-MIB' => 'hrSystem',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'netsnmp_vers' => 'versionTag',
|
||||
'hrSystemUptime' => 'hrSystemUptime',
|
||||
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
|
||||
# Net-SNMP Extend table that could but customize to add a the CheckPoint version
|
||||
'extend_output_table' => 'nsExtendOutputFull',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer3::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
return 'checkpoint';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $ckp = shift;
|
||||
my $id = $ckp->id;
|
||||
|
||||
my $model = &SNMP::translateObj($id);
|
||||
|
||||
if (defined $model) {
|
||||
$model =~ s/^checkPoint//;
|
||||
return $model;
|
||||
} else {
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'checkpoint';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $ckp = shift;
|
||||
my $extend_table = $ckp->extend_output_table() || {};
|
||||
|
||||
my $descr = $ckp->description();
|
||||
my $vers = $ckp->netsnmp_vers();
|
||||
my $os_ver = undef;
|
||||
|
||||
foreach my $ex (keys %$extend_table) {
|
||||
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
||||
if ($name eq 'ckpVersion') {
|
||||
return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ );
|
||||
if ($vers) {
|
||||
$os_ver = "???" unless defined($os_ver);
|
||||
$os_ver .= " / Net-SNMP " . $vers;
|
||||
}
|
||||
|
||||
return $os_ver;
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $ckp = shift;
|
||||
my $extend_table = $ckp->extend_output_table() || {};
|
||||
|
||||
foreach my $ex (keys %$extend_table) {
|
||||
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
||||
if ($name eq 'ckpAsset') {
|
||||
return $1 if ($extend_table->{$ex} =~ /Serial Number: (\S+)/);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
sub layers {
|
||||
return '01001100';
|
||||
}
|
||||
|
||||
# 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 $ckp = shift;
|
||||
my $uptime;
|
||||
|
||||
$uptime = $ckp->hrSystemUptime();
|
||||
return $uptime if defined $uptime;
|
||||
|
||||
return $ckp->SUPER::uptime();
|
||||
}
|
||||
|
||||
sub i_ignore {
|
||||
my $l3 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l3->interfaces($partial) || {};
|
||||
|
||||
my %i_ignore;
|
||||
foreach my $if ( keys %$interfaces ) {
|
||||
|
||||
# lo0 etc
|
||||
if ( $interfaces->{$if} =~ /\blo\d*\b/i ) {
|
||||
$i_ignore{$if}++;
|
||||
}
|
||||
}
|
||||
return \%i_ignore;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::CheckPoint - SNMP Interface to CheckPoint Devices
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Ambroise Rosset
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $ckp = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $ckp->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Generic Net-SNMP devices
|
||||
|
||||
=head2 WARNING
|
||||
|
||||
To correctly and completelly work, you should add the following line in the file C</etc/snmp/snmpd.local.conf> on each of your CheckPoint devices:
|
||||
|
||||
# Netdisco SNMP configuration
|
||||
extend ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver
|
||||
extend ckpAsset /bin/clish -c 'show asset all'
|
||||
|
||||
=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.
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $ckp->vendor()
|
||||
|
||||
Returns 'checkpoint'.
|
||||
|
||||
=item $ckp->model()
|
||||
|
||||
Return the model type of the CheckPoint device (Based on the sysObjectOID translation).
|
||||
|
||||
=item $ckp->os()
|
||||
|
||||
Returns the OS extracted from C<sysDescr>.
|
||||
|
||||
=item $ckp->os_ver()
|
||||
|
||||
Returns the software version extracted from C<sysDescr>, along
|
||||
with the Net-SNMP version.
|
||||
|
||||
=item $ckp->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 $ckp->serial()
|
||||
|
||||
Return the serial number of the device if the SNMP server is configured as indicated previously.
|
||||
Return '' in other case.
|
||||
|
||||
=item $ckp->layers()
|
||||
|
||||
Return '01001100'.
|
||||
|
||||
=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.
|
||||
|
||||
=head1 TABLE ENTRIES
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $ckp->i_ignore()
|
||||
|
||||
Returns reference to hash. Increments value of IID if port is to be ignored.
|
||||
|
||||
Ignores loopback
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3> for details.
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP> for details.
|
||||
|
||||
=head1 NOTES
|
||||
|
||||
In order to cause SNMP::Info to classify your device into this class, it
|
||||
may be necessary to put a configuration line into your F<snmpd.conf>
|
||||
similar to
|
||||
|
||||
sysobjectid .1.3.6.1.4.1.8072.3.2.N
|
||||
|
||||
where N is the object ID for your OS from the C<NET-SNMP-TC> MIB (or
|
||||
255 if not listed). Some Net-SNMP installations default to an
|
||||
incorrect return value for C<system.sysObjectId>.
|
||||
|
||||
In order to recognize a Net-SNMP device as Layer3, it may be necessary
|
||||
to put a configuration line similar to
|
||||
|
||||
sysservices 76
|
||||
|
||||
in your F<snmpd.conf>.
|
||||
|
||||
=cut
|
||||
@@ -55,7 +55,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -124,6 +124,7 @@ sub i_vlan {
|
||||
my $i_vlan = $cisco->SUPER::i_vlan($partial);
|
||||
|
||||
foreach my $idx ( keys %$i_descr ) {
|
||||
next unless $i_type->{$idx};
|
||||
if ( $i_type->{$idx} eq 'l2vlan'
|
||||
|| $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} )
|
||||
{
|
||||
@@ -135,6 +136,13 @@ sub i_vlan {
|
||||
return $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
|
||||
my $vtp = $cisco->vtp_version() || '0';
|
||||
return ($vtp ne '0');
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -236,6 +244,11 @@ These are methods that return scalar value from SNMP
|
||||
|
||||
(C<cEigrpAsRouterId>)
|
||||
|
||||
=item $switch->cisco_comm_indexing()
|
||||
|
||||
Returns 1 when the device is likely to need vlan indexing.
|
||||
Determined by checking C<vtpVersion>.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||
@@ -45,7 +45,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
|
||||
|
||||
@@ -73,8 +73,8 @@ sub b_mac {
|
||||
foreach my $i ( keys %$macs ) {
|
||||
my $mac = $macs->{$i};
|
||||
|
||||
# don't catch the bad macs with zeroed OUI
|
||||
if ( $mac !~ m/(0{1,2}:){3}/ ) {
|
||||
# don't catch the bad macs with bogus OUI
|
||||
if ( $mac !~ m/(0{1,2}:){2}(00|01)/ ) {
|
||||
push( @macs, $mac );
|
||||
}
|
||||
@macs = sort(@macs);
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%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.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
||||
213
lib/SNMP/Info/Layer3/DLink.pm
Normal file
213
lib/SNMP/Info/Layer3/DLink.pm
Normal file
@@ -0,0 +1,213 @@
|
||||
package SNMP::Info::Layer3::DLink;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::LLDP;
|
||||
|
||||
@SNMP::Info::Layer3::DLink::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::DLink::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'DLINK-ID-REC-MIB' => 'dlink',
|
||||
'SWPRIMGMT-DES3200-MIB' => 'dlink-des3200SeriesProd',
|
||||
'SWPRIMGMT-DES30XXP-MIB' => 'dlink-des30xxproductProd',
|
||||
'SWPRIMGMT-DES1228ME-MIB' => 'dlink-des1228MEproductProd',
|
||||
'SWDES3528-52PRIMGMT-MIB' => 'dlink-Des3500Series',
|
||||
'DES-1210-28-AX' => 'des-1210-28ax',
|
||||
'DES-1210-10MEbx' => 'des-1210-10mebx',
|
||||
'DES-1210-26MEbx' => 'des-1210-26mebx',
|
||||
'DES-1210-52-BX' => 'des-1210-52bx',
|
||||
'DES-1210-52-CX' => 'des-1210-52-cx',
|
||||
'DGS-1210-24-AX' => 'dgs-1210-24ax',
|
||||
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%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',
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||
|
||||
sub model {
|
||||
my $dlink=shift;
|
||||
my $id = $dlink->id();
|
||||
my $model = &SNMP::translateObj($id);
|
||||
return $id unless defined $model;
|
||||
if (defined $model && $model !~ /dlink-products/) {
|
||||
return $model;
|
||||
} else {
|
||||
#If don't have a device MIB
|
||||
return $dlink->description();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub vendor {
|
||||
return 'dlink';
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $dlink = shift;
|
||||
my $model = $dlink->model();
|
||||
my $id = $dlink->id();
|
||||
my $serial;
|
||||
if ($model =~ /1210/) {
|
||||
#Due to the zoo of MIB from DLink by 1210 series
|
||||
$serial->{0} = $dlink->session()->get($id.'.1.30.0');
|
||||
} else {
|
||||
$serial = $dlink->dlink_serial_no();
|
||||
}
|
||||
|
||||
return $serial->{0} if ( defined $serial->{0} and $serial->{0} !~ /^\s*$/ and $serial->{0} !~ 'NOSUCHOBJECT' );
|
||||
return $dlink->SUPER::serial();
|
||||
}
|
||||
|
||||
sub fwver {
|
||||
my $dlink=shift;
|
||||
my $model = $dlink->model();
|
||||
my $id = $dlink->id();
|
||||
my $fw;
|
||||
if ($model =~ /1210/) {
|
||||
#Due to the zoo of MIB from DLink by 1210 series
|
||||
$fw->{0} = $dlink->session()->get($id.'.1.3.0');
|
||||
} else {
|
||||
$fw = $dlink->dlink_fw();
|
||||
}
|
||||
return $fw->{0} if ( defined $fw->{0} and $fw->{0} !~ /^\s*$/ and $fw->{0} !~ 'NOSUCHOBJECT');
|
||||
}
|
||||
|
||||
sub hwver {
|
||||
my $dlink=shift;
|
||||
my $model = $dlink->model();
|
||||
my $id = $dlink->id();
|
||||
my $hw;
|
||||
if ($model =~ /1210/) {
|
||||
#Due to the zoo of MIB from DLink by 1210 series
|
||||
$hw->{0} = $dlink->session()->get($id.'.1.2.0');
|
||||
} else {
|
||||
$hw = $dlink->dlink_hw();
|
||||
}
|
||||
return $hw->{0} if ( defined $hw->{0} and $hw->{0} !~ /^\s*$/ and $hw->{0} !~ 'NOSUCHOBJECT');
|
||||
}
|
||||
|
||||
sub stp_i_root_port {
|
||||
my $dlink=shift;
|
||||
my $model = $dlink->model();
|
||||
my $id = $dlink->id();
|
||||
my $stp_i_root_port;
|
||||
if ($model =~ /1210-(?:10|26)/) {
|
||||
#Due to the zoo of MIB from DLink by 1210 series
|
||||
$stp_i_root_port->{0} = $dlink->session()->get($id.'.6.1.13.0');
|
||||
} else {
|
||||
$stp_i_root_port = $dlink->dlink_stp_i_root_port();
|
||||
}
|
||||
return $stp_i_root_port if ( defined $stp_i_root_port->{0} and $stp_i_root_port->{0} !~ /^\s*$/ and $stp_i_root_port->{0} !~ 'NOSUCHOBJECT');
|
||||
return $dlink->SUPER::stp_i_root_port();
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::DLink - SNMP Interface to DLink Devices
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $dlink = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $dlink->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Vyatta Devices running dlink.
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=back
|
||||
|
||||
=head2 Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $dlink->model()
|
||||
|
||||
Returns the ID or else description.
|
||||
|
||||
=item $dlink->vendor()
|
||||
|
||||
Returns 'dlink'.
|
||||
|
||||
=item $dlink->serial()
|
||||
|
||||
Returns serial number.
|
||||
|
||||
=item $dlink->fwver()
|
||||
|
||||
Returns the firmware version.
|
||||
|
||||
=item $dlink->hwver()
|
||||
|
||||
Returns the hardware version.
|
||||
|
||||
=item $dlink->stp_i_root_port()
|
||||
|
||||
Returns the STP root port.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -153,6 +153,48 @@ sub serial {
|
||||
return $dell->SUPER::serial();
|
||||
}
|
||||
|
||||
# check all fans, and report overall status
|
||||
sub fan {
|
||||
my $dell = shift;
|
||||
|
||||
my $fan = $dell->dell_fan_desc() || {};
|
||||
my $state = $dell->dell_fan_state() || {};
|
||||
my @messages = ();
|
||||
|
||||
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;
|
||||
|
||||
return (join ", ", @messages);
|
||||
}
|
||||
|
||||
sub _ps_status {
|
||||
my ($dell, $unit) = @_;
|
||||
|
||||
my $status = 'unknown';
|
||||
return $status if !defined $unit;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
sub ps1_type { return 'internalRedundant' }
|
||||
sub ps2_type { return 'internalRedundant' }
|
||||
|
||||
sub ps1_status { return (shift)->_ps_status(1) }
|
||||
sub ps2_status { return (shift)->_ps_status(2) }
|
||||
|
||||
sub interfaces {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
@@ -213,6 +255,10 @@ sub _vendor {
|
||||
}
|
||||
}
|
||||
|
||||
# dot1qTpFdbTable uses dot1qVlanIndex rather than dot1qFdbId as index,
|
||||
# so pretend we don't have the mapping
|
||||
sub qb_fdb_index {return}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -308,6 +354,26 @@ id(). Defaults to 'dlink'.
|
||||
Returns 'dell', 'dlink', or 'ibm' based upon the IANA enterprise number in
|
||||
id(). Defaults to 'dlink'.
|
||||
|
||||
=item $dell->fan()
|
||||
|
||||
Return the status of all fans from the F<Dell-Vendor-MIB>
|
||||
|
||||
=item $dell->ps1_type()
|
||||
|
||||
Return the type of the first power supply from the F<Dell-Vendor-MIB>
|
||||
|
||||
=item $dell->ps2_type()
|
||||
|
||||
Return the type of the second power supply from the F<Dell-Vendor-MIB>
|
||||
|
||||
=item $dell->ps1_status()
|
||||
|
||||
Return the status of the first power supply from the F<Dell-Vendor-MIB>
|
||||
|
||||
=item $dell->ps2_status()
|
||||
|
||||
Return the status of the second power supply from the F<Dell-Vendor-MIB>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Overrides
|
||||
@@ -387,6 +453,10 @@ sometimes not unique.
|
||||
Returns reference to hash of iid to current link administrative duplex
|
||||
setting.
|
||||
|
||||
=item $dell->qb_fdb_index()
|
||||
|
||||
Returns nothing to work around incorrect indexing of C<dot1qTpFdbTable>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
|
||||
@@ -149,11 +149,47 @@ sub i_duplex_admin {
|
||||
return $enterasys->mau_i_duplex_admin($partial);
|
||||
}
|
||||
|
||||
# LLDP table timefilter implementation continuously increments when walked
|
||||
# TimeFilter implementation continuously increments when walked
|
||||
# and we may never reach the end of the table. This behavior can be
|
||||
# modified with the "set snmp timefilter break disable" command,
|
||||
# unfortunately it is not the default. Query with a partial value of zero
|
||||
# which means no time filter.
|
||||
# which means no time filter for tables with and index containing a
|
||||
# TimeFilter
|
||||
|
||||
sub qb_fdb_index {
|
||||
my $bridge = shift;
|
||||
|
||||
my $qb_fdb_ids = $bridge->dot1qVlanFdbId(0) || {};
|
||||
|
||||
# Strip the TimeFilter
|
||||
my $vl_fdb_index = {};
|
||||
for my $fdb_entry (keys(%$qb_fdb_ids)) {
|
||||
(my $vlan = $fdb_entry) =~ s/^\d+\.//;
|
||||
$vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan;
|
||||
}
|
||||
|
||||
return $vl_fdb_index;
|
||||
}
|
||||
|
||||
sub i_vlan_membership {
|
||||
my $bridge = shift;
|
||||
my $partial = shift;
|
||||
|
||||
# dot1qVlanCurrentTable TimeFilter index
|
||||
my $v_ports = $bridge->qb_cv_egress(0) || $bridge->qb_v_egress();
|
||||
|
||||
return $bridge->_vlan_hoa($v_ports, $partial);
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $bridge = shift;
|
||||
my $partial = shift;
|
||||
|
||||
# dot1qVlanCurrentTable TimeFilter index
|
||||
my $v_ports = $bridge->qb_cv_untagged(0) || $bridge->qb_v_untagged();
|
||||
|
||||
return $bridge->_vlan_hoa($v_ports, $partial);
|
||||
}
|
||||
|
||||
sub lldp_ip {
|
||||
my $enterasys = shift;
|
||||
@@ -359,9 +395,9 @@ L<SNMP::Info::MAU/"TABLE METHODS">.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Link Layer Discovery Protocol (LLDP) Overrides
|
||||
=head2 Time Filter Table Index Overrides
|
||||
|
||||
The LLDP table time filter implementation continuously increments when
|
||||
The time filter C<TimeFilter> implementation continuously increments when
|
||||
walked and we may never reach the end of the table. This behavior can be
|
||||
modified with the C<"set snmp timefilter break disable"> command,
|
||||
unfortunately it is not the default. These methods are overridden to
|
||||
@@ -369,6 +405,12 @@ supply a partial value of zero which means no time filter.
|
||||
|
||||
=over
|
||||
|
||||
=item $enterasys->qb_fdb_index()
|
||||
|
||||
=item $enterasys->i_vlan_membership()
|
||||
|
||||
=item $enterasys->i_vlan_membership_untagged()
|
||||
|
||||
=item $enterasys->lldp_if()
|
||||
|
||||
=item $enterasys->lldp_ip()
|
||||
@@ -46,18 +46,19 @@ use SNMP::Info::EDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::MAU::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::EDP::MIBS,
|
||||
'EXTREME-BASE-MIB' => 'extremeAgent',
|
||||
'EXTREME-SYSTEM-MIB' => 'extremeSystem',
|
||||
'EXTREME-FDB-MIB' => 'extremeSystem',
|
||||
'EXTREME-VLAN-MIB' => 'extremeVlan',
|
||||
'EXTREME-POE-MIB' => 'extremePethSystemAdminEnable',
|
||||
'EXTREME-BASE-MIB' => 'extremeAgent',
|
||||
'EXTREME-SYSTEM-MIB' => 'extremeSystem',
|
||||
'EXTREME-FDB-MIB' => 'extremeFdbMacFdbMacAddress',
|
||||
'EXTREME-VLAN-MIB' => 'extremeVlan',
|
||||
'EXTREME-POE-MIB' => 'extremePethSystemAdminEnable',
|
||||
'EXTREME-STP-EXTENSIONS-MIB' => 'extremeStpDomainBridgeId',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -97,6 +98,20 @@ $VERSION = '3.18';
|
||||
'peth_power_watts' => 'extremePethSlotPowerLimit',
|
||||
# EXTREME-POE-MIB::extremePethPsePortTable
|
||||
'peth_port_power' => 'extremePethPortMeasuredPower',
|
||||
# EXTREME-STP-EXTENSIONS-MIB::extremeStpDomainTable
|
||||
'stp_i_time' => 'extremeStpDomainTimeSinceTopologyChange',
|
||||
'stp_i_ntop' => 'extremeStpDomainTopChanges',
|
||||
'stp_i_root' => 'extremeStpDomainDesignatedRoot',
|
||||
'stp_i_root_port' => 'extremeStpDomainRootPortIfIndex',
|
||||
'stp_i_priority' => 'extremeStpDomainBridgePriority',
|
||||
'ex_stp_i_mac' => 'extremeStpDomainBridgeId',
|
||||
# EXTREME-STP-EXTENSIONS-MIB::extremeStpPortTable
|
||||
'stp_p_priority' => 'extremeStpPortPortPriority',
|
||||
'stp_p_state' => 'extremeStpPortPortState',
|
||||
'stp_p_cost' => 'extremeStpPortPathCost',
|
||||
'stp_p_root' => 'extremeStpPortDesignatedRoot',
|
||||
'stp_p_bridge' => 'extremeStpPortDesignatedBridge',
|
||||
'stp_p_port' => 'extremeStpPortDesignatedPort',
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
@@ -114,6 +129,11 @@ $VERSION = '3.18';
|
||||
'fan_state' => \&munge_true_ok,
|
||||
'ex_vlan_untagged' => \&SNMP::Info::munge_port_list,
|
||||
'ex_vlan_tagged' => \&SNMP::Info::munge_port_list,
|
||||
'ex_stp_i_mac' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_i_root' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_root' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_bridge' => \&SNMP::Info::munge_prio_mac,
|
||||
'stp_p_port' => \&SNMP::Info::munge_prio_port,
|
||||
);
|
||||
|
||||
# Method OverRides
|
||||
@@ -542,6 +562,78 @@ sub _extremeware_i_vlan_membership {
|
||||
return \%i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
# Some devices support Q-Bridge, if so short circuit and return it
|
||||
my $q_bridge = $extreme->SUPER::i_vlan_membership_untagged($partial);
|
||||
return $q_bridge if (ref {} eq ref $q_bridge and scalar keys %$q_bridge);
|
||||
|
||||
# Next we try extremeVlanOpaqueTable
|
||||
my $xos = $extreme->_xos_i_vlan_membership_untagged($partial);
|
||||
return $xos if (ref {} eq ref $xos and scalar keys %$xos);
|
||||
|
||||
# Try older ifStack method
|
||||
my $extremeware = $extreme->_extremeware_i_vlan_membership_untagged($partial);
|
||||
return $extremeware if (ref {} eq ref $extremeware and scalar keys %$extremeware);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub _xos_i_vlan_membership_untagged {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $index = $extreme->i_index();
|
||||
my $vlans = $extreme->ex_vlan_id();
|
||||
my $slotx = $extreme->_slot_factor() || 1000;
|
||||
my $u_ports = $extreme->ex_vlan_untagged() || {};
|
||||
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $idx ( keys %$u_ports ) {
|
||||
next unless ( defined $u_ports->{$idx} );
|
||||
my $u_portlist = $u_ports->{$idx};
|
||||
my $ret = [];
|
||||
|
||||
my ( $vlan_if, $slot ) = $idx =~ /^(\d+)\.(\d+)/;
|
||||
my $vlan = $vlans->{$vlan_if} || '';
|
||||
|
||||
foreach my $portlist ( $u_portlist ) {
|
||||
|
||||
# Convert portlist bit array to bp_index array
|
||||
for ( my $i = 0; $i <= $#$portlist; $i++ ) {
|
||||
push( @{$ret}, ( $slotx * $slot + $i + 1 ) )
|
||||
if ( @$portlist[$i] );
|
||||
}
|
||||
}
|
||||
|
||||
#Create HoA ifIndex -> VLAN array
|
||||
foreach my $port ( @{$ret} ) {
|
||||
my $ifindex = $index->{$port};
|
||||
next unless ( defined($ifindex) ); # shouldn't happen
|
||||
next if ( defined $partial and $ifindex !~ /^$partial$/ );
|
||||
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
||||
}
|
||||
}
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
# Assuming Cisco-like trunk behavior that native VLAN is transmitted untagged
|
||||
sub _extremeware_i_vlan_membership_untagged {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $vlans = $extreme->_extremeware_i_vlan($partial);
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $port (keys %$vlans) {
|
||||
my $vlan = $vlans->{$port};
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||
}
|
||||
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
# VLAN management.
|
||||
# See extreme-vlan.mib for a detailed description of
|
||||
# Extreme's use of ifStackTable and EXTREME-VLAN-MIB.
|
||||
@@ -711,6 +803,75 @@ sub lldp_if {
|
||||
return \%lldp_if;
|
||||
}
|
||||
|
||||
# extremeStpDomainStpdInstance not accessible, so we need to extract from iid
|
||||
sub stp_i_id {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $stp_i_roots = $extreme->stp_i_root($partial);
|
||||
|
||||
my %stp_i_id;
|
||||
foreach my $iid ( keys %$stp_i_roots ) {
|
||||
$stp_i_id{$iid} = $iid;
|
||||
}
|
||||
return \%stp_i_id;
|
||||
}
|
||||
|
||||
# extremeStpDomainBridgeId returns priority and mac,
|
||||
# for cross class compatibility we just need mac
|
||||
sub stp_i_mac {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $stp_i_bids = $extreme->ex_stp_i_mac($partial);
|
||||
|
||||
my %stp_i_mac;
|
||||
foreach my $iid ( keys %$stp_i_bids ) {
|
||||
my $mac = $stp_i_bids->{$iid};
|
||||
next unless $mac;
|
||||
|
||||
$mac =~ s/^([0-9A-F][0-9A-F]:){2}//;
|
||||
|
||||
$stp_i_mac{$iid} = $mac;
|
||||
}
|
||||
return \%stp_i_mac;
|
||||
}
|
||||
|
||||
# Break up the extremeStpPortEntry INDEX into Stpd Instance and IfIndex.
|
||||
sub _ex_stpport_index {
|
||||
my $idx = shift;
|
||||
my ( $id, $ifindex ) = split( /\./, $idx);
|
||||
return ($id, $ifindex);
|
||||
}
|
||||
|
||||
# extremeStpPortPortIfIndex not-accessible, extract from iid
|
||||
sub stp_p_id {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $stp_port = $extreme->stp_p_root($partial);
|
||||
my $stp_p_id = {};
|
||||
foreach my $idx ( keys %$stp_port ) {
|
||||
my ( $id, $ifindex ) = _ex_stpport_index($idx);
|
||||
$stp_p_id->{$idx} = $ifindex;
|
||||
}
|
||||
return $stp_p_id;
|
||||
}
|
||||
|
||||
# extremeStpDomainStpdInstance not-accessible, extract from iid
|
||||
sub stp_p_stg_id {
|
||||
my $extreme = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $stp_port = $extreme->stp_p_root($partial);
|
||||
my $stp_p_stg_id = {};
|
||||
foreach my $idx ( keys %$stp_port ) {
|
||||
my ( $id, $ifindex ) = _ex_stpport_index($idx);
|
||||
$stp_p_stg_id->{$idx} = $id;
|
||||
}
|
||||
return $stp_p_stg_id;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -927,6 +1088,12 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $extreme->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=item $extreme->v_index()
|
||||
|
||||
Returns VLAN IDs
|
||||
@@ -959,6 +1126,98 @@ The configured maximum amount of in-line power available to the slot.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Spanning Tree Instance Globals
|
||||
|
||||
=over
|
||||
|
||||
=item $extreme->stp_i_mac()
|
||||
|
||||
Returns the MAC extracted from (C<extremeStpDomainBridgeId>).
|
||||
|
||||
=item $extreme->stp_i_id()
|
||||
|
||||
Returns the unique identifier of the STP domain.
|
||||
|
||||
(C<extremeStpDomainStpdInstance>)
|
||||
|
||||
=item $extreme->stp_i_time()
|
||||
|
||||
Returns time since last topology change detected. (100ths/second)
|
||||
|
||||
(C<extremeStpDomainTimeSinceTopologyChange>)
|
||||
|
||||
=item $extreme->stp_i_time()
|
||||
|
||||
Returns time since last topology change detected. (100ths/second)
|
||||
|
||||
(C<extremeStpDomainTimeSinceTopologyChange>)
|
||||
|
||||
=item $extreme->stp_i_time()
|
||||
|
||||
Returns the total number of topology changes detected.
|
||||
|
||||
(C<extremeStpDomainTopChanges>)
|
||||
|
||||
=item $extreme->stp_i_root()
|
||||
|
||||
Returns root of STP.
|
||||
|
||||
(C<extremeStpDomainDesignatedRoot>)
|
||||
|
||||
=item $extreme->stp_i_root_port()
|
||||
|
||||
Returns the port number of the port that offers the lowest cost path
|
||||
to the root bridge.
|
||||
|
||||
(C<extremeStpDomainRootPortIfIndex>)
|
||||
|
||||
=item $extreme->stp_i_priority()
|
||||
|
||||
Returns the port number of the port that offers the lowest cost path
|
||||
to the root bridge.
|
||||
|
||||
(C<extremeStpDomainBridgePriority>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Spanning Tree Protocol Port Table
|
||||
|
||||
=over
|
||||
|
||||
=item $extreme->stp_p_id()
|
||||
|
||||
(C<extremeStpPortPortIfIndex>)
|
||||
|
||||
=item $extreme->stp_p_stg_id()
|
||||
|
||||
(C<extremeStpDomainStpdInstance>)
|
||||
|
||||
=item $extreme->stp_p_priority()
|
||||
|
||||
(C<extremeStpPortPortPriority>)
|
||||
|
||||
=item $extreme->stp_p_state()
|
||||
|
||||
(C<extremeStpPortPortState>)
|
||||
|
||||
=item $extreme->stp_p_cost()
|
||||
|
||||
(C<extremeStpPortPathCost>)
|
||||
|
||||
=item $extreme->stp_p_root()
|
||||
|
||||
(C<extremeStpPortDesignatedRoot>)
|
||||
|
||||
=item $extreme->stp_p_bridge()
|
||||
|
||||
(C<extremeStpPortDesignatedBridge>)
|
||||
|
||||
=item $extreme->stp_p_port()
|
||||
|
||||
(C<extremeStpPortDesignatedPort>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '3.18';
|
||||
$VERSION = '3.42';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -72,10 +72,14 @@ $VERSION = '3.18';
|
||||
'i_up' => 'sysInterfaceStatus',
|
||||
|
||||
# sysIfxStatTable
|
||||
'i_octet_in' => 'sysIfxStatHcInOctets',
|
||||
'i_octet_out' => 'sysIfxStatHcOutOctets',
|
||||
'i_pkts_ucast_in' => 'sysIfxStatHcInUcastPkts',
|
||||
'i_pkts_ucast_out' => 'sysIfxStatHcOutUcastPkts',
|
||||
'i_octet_in64' => 'sysIfxStatHcInOctets',
|
||||
'i_octet_out64' => 'sysIfxStatHcOutOctets',
|
||||
'i_pkts_ucast_in64' => 'sysIfxStatHcInUcastPkts',
|
||||
'i_pkts_ucast_out64' => 'sysIfxStatHcOutUcastPkts',
|
||||
'i_pkts_mutli_in64' => 'sysIfxStatInMulticastPkts',
|
||||
'i_pkts_multi_out64' => 'sysIfxStatOutMulticastPkts',
|
||||
'i_pkts_bcast_in64' => 'sysIfxStatInBroadcastPkts',
|
||||
'i_pkts_bcast_out64' => 'sysIfxStatOutBroadcastPkts',
|
||||
|
||||
# sysInterfaceStatTable
|
||||
'i_discards_in' => 'sysInterfaceStatDropsIn',
|
||||
@@ -115,8 +119,8 @@ sub fan {
|
||||
my $ret = "";
|
||||
my $s = "";
|
||||
foreach my $i ( sort { $a <=> $b } keys %$fan_state ) {
|
||||
$ret .= $s . $i . ": " . $fan_state->{$i};
|
||||
$s = ", ";
|
||||
$ret .= $s . $i . ': ' . $fan_state->{$i};
|
||||
$s = ', ';
|
||||
}
|
||||
return if ( $s eq "" );
|
||||
return $ret;
|
||||
@@ -161,8 +165,9 @@ sub i_type {
|
||||
|
||||
my %i_type;
|
||||
foreach my $if ( keys %$idx ) {
|
||||
|
||||
$i_type{$if} = 'ethernetCsmacd';
|
||||
$i_type{$if} =
|
||||
((exists $f5->{sess}->{UseEnums} and $f5->{sess}->{UseEnums})
|
||||
? 'ethernetCsmacd' : 6 );
|
||||
}
|
||||
return \%i_type;
|
||||
}
|
||||
@@ -255,6 +260,37 @@ sub i_vlan_membership {
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub i_vlan_membership_untagged {
|
||||
my $f5 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $index = $f5->i_index($partial) || {};
|
||||
my $tagged = $f5->sys_vm_tagged() || {};
|
||||
my $vlans = $f5->v_index() || {};
|
||||
|
||||
my $i_vlan_membership = {};
|
||||
foreach my $iid ( keys %$tagged ) {
|
||||
|
||||
next unless $tagged->{$iid} eq 'false';
|
||||
# IID is length.vlan name index.length.interface index
|
||||
# Split out and use as the IID to get the VLAN ID and ifIndex
|
||||
my @iid_array = split /\./, $iid;
|
||||
my $len = $iid_array[0];
|
||||
my $v_idx = join '.', ( splice @iid_array, 0, $len + 1 );
|
||||
my $idx = join '.', @iid_array;
|
||||
|
||||
# Check to make sure we can map to a port
|
||||
my $p_idx = $index->{$idx};
|
||||
next unless $p_idx;
|
||||
|
||||
my $vlan = $vlans->{$v_idx};
|
||||
next unless $vlan;
|
||||
|
||||
push( @{ $i_vlan_membership->{$idx} }, $vlan );
|
||||
}
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -391,6 +427,12 @@ IDs.
|
||||
print "Port: $port VLAN: $vlan\n";
|
||||
}
|
||||
|
||||
=item $f5->i_vlan_membership_untagged()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the untagged egress list for
|
||||
the port.
|
||||
|
||||
=item $f5->v_index()
|
||||
|
||||
Returns VLAN IDs
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user