Compare commits
340 Commits
3.52
...
159ab659cb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
159ab659cb | ||
|
|
82032a10e1 | ||
|
|
84c870f911 | ||
|
|
2b1b53e539 | ||
|
|
b019f3fa06 | ||
|
|
4cb3083993 | ||
|
|
bed7dac4ac | ||
|
|
316a799fdb | ||
|
|
f2cbd163c9 | ||
|
|
e756091565 | ||
|
|
02f667a05b | ||
|
|
14e9da0fb7 | ||
|
|
08a632c053 | ||
|
|
fbf0bbe880 | ||
|
|
4ce3fd8fb6 | ||
|
|
cae9878c60 | ||
|
|
cda629bf39 | ||
|
|
396eb87b57 | ||
|
|
db06c8e75b | ||
|
|
3fd9f1deda | ||
|
|
b0e9185cca | ||
|
|
b73f0d8d57 | ||
|
|
5655486b80 | ||
|
|
cc935a580d | ||
|
|
40ff825a3a | ||
|
|
4bb40483e6 | ||
|
|
8c98750541 | ||
|
|
57aa73f613 | ||
|
|
fe3bc6afe0 | ||
|
|
10e0a53b3c | ||
|
|
98d2005bae | ||
|
|
272b56d625 | ||
|
|
aa44871f83 | ||
|
|
27930d5e50 | ||
|
|
a0d3cdcf9f | ||
|
|
8317923f28 | ||
|
|
fc71e2d88d | ||
|
|
f96d0df182 | ||
|
|
1dc4baf1d9 | ||
|
|
543072ca25 | ||
|
|
39356d72b4 | ||
|
|
e013ac3a20 | ||
|
|
a85c7a0404 | ||
|
|
4852ed4668 | ||
|
|
d36fce44d0 | ||
|
|
60e63ac9cc | ||
|
|
a97c48546c | ||
|
|
dd96147712 | ||
|
|
912bf62e9b | ||
|
|
0791b7cccb | ||
|
|
78c194faee | ||
|
|
9d00126c83 | ||
|
|
6fa54dd4db | ||
|
|
eb6420125e | ||
|
|
51be2d5dc5 | ||
|
|
762a01e619 | ||
|
|
f0fb351137 | ||
|
|
6d39026616 | ||
|
|
723f8ea744 | ||
|
|
f941f432e9 | ||
|
|
631f99f97b | ||
|
|
1840089789 | ||
|
|
36029e38a7 | ||
|
|
3abffc4d59 | ||
|
|
0f01c6c07c | ||
|
|
68b001105d | ||
|
|
d459dd7f8c | ||
|
|
75a00fabe9 | ||
|
|
091a3692e3 | ||
|
|
3bcc522590 | ||
|
|
6c8d39d746 | ||
|
|
b6720a2b43 | ||
|
|
6753b795b9 | ||
|
|
cefbcce8e3 | ||
|
|
910c5420e3 | ||
|
|
02c8ed0764 | ||
|
|
fda13addf0 | ||
|
|
211a06dbf1 | ||
|
|
e886190e8e | ||
|
|
8b3a1fd357 | ||
|
|
e7adf92b59 | ||
|
|
7de14a2bd9 | ||
|
|
f37225ee9a | ||
|
|
52f9042ef0 | ||
|
|
d38ef69120 | ||
|
|
6341ad15f8 | ||
|
|
f3f01d5f15 | ||
|
|
23d11551c6 | ||
|
|
73b63c8379 | ||
|
|
2652998aba | ||
|
|
254bfd11a3 | ||
|
|
2c61248016 | ||
|
|
45e56b332e | ||
|
|
8003691e64 | ||
|
|
25b1801fe4 | ||
|
|
737bb252a7 | ||
|
|
14e0aa0952 | ||
|
|
e7d83a5918 | ||
|
|
bfbb2fb2ab | ||
|
|
c8f686b7aa | ||
|
|
77fa064db5 | ||
|
|
6b70ccfd79 | ||
|
|
9b1995e90f | ||
|
|
75785f70c7 | ||
|
|
ea9ad92cc4 | ||
|
|
ad8762a7c4 | ||
|
|
c73bc0ca2c | ||
|
|
07de5e53e3 | ||
|
|
141812bf4d | ||
|
|
2308826147 | ||
|
|
01fa098078 | ||
|
|
167cc2f3fa | ||
|
|
ea53f79bb8 | ||
|
|
4b75ef1889 | ||
|
|
c4ce6a2062 | ||
|
|
9e4e0e3510 | ||
|
|
c0228965f4 | ||
|
|
0896bd881c | ||
|
|
42395d49fd | ||
|
|
e08d22d51c | ||
|
|
f0b429039e | ||
|
|
d63baa2473 | ||
|
|
e8b4acbee6 | ||
|
|
b4734ea607 | ||
|
|
6698b049a4 | ||
|
|
68861fabfb | ||
|
|
d93e3ab1b6 | ||
|
|
bfd71b5add | ||
|
|
9c8e8fa4e0 | ||
|
|
2e2c6958d6 | ||
|
|
4ba91f9df8 | ||
|
|
3b604723bd | ||
|
|
a2877729ff | ||
|
|
605ae68f6b | ||
|
|
ef8afd8b65 | ||
|
|
9365c67a6b | ||
|
|
8e3f10673e | ||
|
|
cc95604bd9 | ||
|
|
6799312ad0 | ||
|
|
8dee0fcd12 | ||
|
|
dca78048c7 | ||
|
|
014d32cec1 | ||
|
|
477d845c39 | ||
|
|
6e5155ffbf | ||
|
|
39679992f0 | ||
|
|
4dee43a863 | ||
|
|
5c599bd3d2 | ||
|
|
be0dbf6953 | ||
|
|
a59572b392 | ||
|
|
19cdb388e5 | ||
|
|
e68fa13289 | ||
|
|
d938a2c0d6 | ||
|
|
16285ce2eb | ||
|
|
e356189010 | ||
|
|
4230a07c94 | ||
|
|
f2b0f67b5f | ||
|
|
a8766a0b0b | ||
|
|
b78b1b4860 | ||
|
|
6118b0d012 | ||
|
|
ca48defd24 | ||
|
|
93787c4c45 | ||
|
|
5562144209 | ||
|
|
b28f81adbb | ||
|
|
64846ed2de | ||
|
|
d7d747af67 | ||
|
|
41e9332420 | ||
|
|
23613800b2 | ||
|
|
8100461520 | ||
|
|
07afff6ef0 | ||
|
|
400c26a1d7 | ||
|
|
b6f7df332b | ||
|
|
e5eee009b3 | ||
|
|
bb731c6368 | ||
|
|
a418ba0a1e | ||
|
|
cea462662d | ||
|
|
f3a8b1171b | ||
|
|
bb773ccc0a | ||
|
|
61dc499369 | ||
|
|
d806795a86 | ||
|
|
91f92f0fb9 | ||
|
|
bde8da5e6b | ||
|
|
f134368e6d | ||
|
|
a6ff166e4e | ||
|
|
3ea6bd6217 | ||
|
|
6405ebfc3e | ||
|
|
94ab114cd3 | ||
|
|
954f58fdbc | ||
|
|
8232e783fa | ||
|
|
5aa21deb07 | ||
|
|
b7ac11222a | ||
|
|
b24da8c380 | ||
|
|
ab2be759af | ||
|
|
78e5528c0d | ||
|
|
01ce4238dd | ||
|
|
a82e8e32a0 | ||
|
|
770ab9c8ec | ||
|
|
f63a71910c | ||
|
|
8fa27f8844 | ||
|
|
ea59fa2c2d | ||
|
|
a1769aa905 | ||
|
|
78119d6547 | ||
|
|
f27d76fa9d | ||
|
|
4f8534169a | ||
|
|
f531c9d9a7 | ||
|
|
1a80138026 | ||
|
|
4ff904f3cd | ||
|
|
721193ccb8 | ||
|
|
b263fa4375 | ||
|
|
4681004b52 | ||
|
|
0ab688964f | ||
|
|
7e0ef60e24 | ||
|
|
41339c8df4 | ||
|
|
119c077d25 | ||
|
|
9af3f7c579 | ||
|
|
e7c93b7abd | ||
|
|
20b655c7a2 | ||
|
|
9fca5b1e42 | ||
|
|
1c581f8e8f | ||
|
|
8d35e15624 | ||
|
|
cf42fe1496 | ||
|
|
1af11bd088 | ||
|
|
073ec319e7 | ||
|
|
5852c3548b | ||
|
|
2344a1eacf | ||
|
|
d0887fbea7 | ||
|
|
e5ebda1b1e | ||
|
|
8d1681dbfc | ||
|
|
7221797826 | ||
|
|
f2fdbb077c | ||
|
|
a6fdb107b4 | ||
|
|
7f31038462 | ||
|
|
5fb7c78619 | ||
|
|
603345205a | ||
|
|
bd85ebc8d6 | ||
|
|
2aca6d9300 | ||
|
|
4919cb0f69 | ||
|
|
d134c342e8 | ||
|
|
b1c7e78d12 | ||
|
|
0a0766afbd | ||
|
|
2d39911cba | ||
|
|
3bf60002f4 | ||
|
|
42db01335e | ||
|
|
752e1c632c | ||
|
|
892d2014ca | ||
|
|
1fdc486cd5 | ||
|
|
9e7f7f734e | ||
|
|
e311f8a5c6 | ||
|
|
82755ab8db | ||
|
|
62823e3d83 | ||
|
|
66077c9662 | ||
|
|
74e129154b | ||
|
|
75880d9134 | ||
|
|
245fe93be4 | ||
|
|
54a0baa2fa | ||
|
|
4e18ccc9e2 | ||
|
|
9ed5a187a9 | ||
|
|
a636ba6117 | ||
|
|
facdf0aafe | ||
|
|
75dcf74148 | ||
|
|
e252dac59c | ||
|
|
9d384f2bc2 | ||
|
|
cc9a1c9f47 | ||
|
|
b43eafd09a | ||
|
|
141470fdf4 | ||
|
|
2e18464635 | ||
|
|
87a287e0c9 | ||
|
|
a38eafbf56 | ||
|
|
81c7203642 | ||
|
|
c515a5e4a1 | ||
|
|
02e6807e44 | ||
|
|
90bb0ef071 | ||
|
|
209988cf9e | ||
|
|
da130926a9 | ||
|
|
4c51c29428 | ||
|
|
2301d2e60a | ||
|
|
53a5b5aa0a | ||
|
|
d13adfee80 | ||
|
|
9752bf2878 | ||
|
|
9949eeb389 | ||
|
|
aceed9cc52 | ||
|
|
0371ca35d6 | ||
|
|
ce0a350ef2 | ||
|
|
3b58ba8678 | ||
|
|
a69b45d849 | ||
|
|
ad0a1044b9 | ||
|
|
5336ec2db2 | ||
|
|
e20cd6dd02 | ||
|
|
66f16f6617 | ||
|
|
0755487e02 | ||
|
|
afeb37ae5e | ||
|
|
cc05fb927f | ||
|
|
facdf5b7a7 | ||
|
|
66bedd4d54 | ||
|
|
3a3c1efe46 | ||
|
|
1a069c2b52 | ||
|
|
f7de9ffbc6 | ||
|
|
3c6cfa8ecf | ||
|
|
585d01895b | ||
|
|
63cac2a3a8 | ||
|
|
0623fbfdf1 | ||
|
|
0c711269ae | ||
|
|
f676d27a3b | ||
|
|
64167df588 | ||
|
|
398f3ee74b | ||
|
|
125f02b8a2 | ||
|
|
eeeabeec94 | ||
|
|
5fe0ebaeda | ||
|
|
fda59f51f7 | ||
|
|
e8de74c6a5 | ||
|
|
da6716b107 | ||
|
|
62267f4e8e | ||
|
|
fd1c91edac | ||
|
|
a0b2010994 | ||
|
|
bda796ae98 | ||
|
|
8b3b03b312 | ||
|
|
cbc756a3f8 | ||
|
|
9af7a7661c | ||
|
|
eab89e4736 | ||
|
|
8391cee4f3 | ||
|
|
fcd0e30d64 | ||
|
|
4a454c9431 | ||
|
|
cd751071e1 | ||
|
|
c921e8b35c | ||
|
|
60d5591401 | ||
|
|
98e8e57747 | ||
|
|
f6a4f937ee | ||
|
|
1e5eda927c | ||
|
|
c6eb73bc7b | ||
|
|
c49d8ab921 | ||
|
|
27b310ee68 | ||
|
|
f6d0fb1d7e | ||
|
|
ddc5fd8c96 | ||
|
|
26b13fbcd4 | ||
|
|
91b98085f6 | ||
|
|
1c948d6e45 | ||
|
|
76cbb05f19 | ||
|
|
e7fcd98107 | ||
|
|
090d94191b | ||
|
|
2c3a6a3c6e | ||
|
|
814083e2fa |
29
.github/issue_template.md
vendored
29
.github/issue_template.md
vendored
@@ -1,5 +1,20 @@
|
|||||||
<!--- Provide a general summary of the issue in the Title above -->
|
<!---
|
||||||
<!--- https://guides.github.com/features/mastering-markdown/#examples -->
|
|
||||||
|
READ THIS FIRST!
|
||||||
|
----------------
|
||||||
|
|
||||||
|
the more info you can provide, the easier it is for us the help you, so please
|
||||||
|
fill out as many of the items below as possible.
|
||||||
|
|
||||||
|
Provide a general summary of the issue in the Title above
|
||||||
|
|
||||||
|
when including netdisco config snippets, whitespace matters since it's a yaml file
|
||||||
|
for github issues it really helps if you include the relevant config parts in a codeblock (code fencing)
|
||||||
|
see the "code" subject on https://guides.github.com/features/mastering-markdown/ for that)
|
||||||
|
this should preserve spaces in the issue tracker and make troubleshooting quicker
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
## Expected Behavior
|
## Expected Behavior
|
||||||
<!--- If you're describing a bug, tell us what should happen -->
|
<!--- If you're describing a bug, tell us what should happen -->
|
||||||
@@ -25,6 +40,16 @@
|
|||||||
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
<!--- 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 -->
|
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||||
|
|
||||||
|
## Your Device
|
||||||
|
<!--- Some basic info about your device will help out pinpointing the issue more easily -->
|
||||||
|
<!--- also, snmpwalk output of the following oid helps out a lot: .1.3.6.1.2.1.1 -->
|
||||||
|
<!--- this is the system leaf of the snmp mib-2 -->
|
||||||
|
* Vendor:
|
||||||
|
* Device Model:
|
||||||
|
* Operating System Version:
|
||||||
|
* Snmpwalk output of .1.3.6.1.2.1.1:
|
||||||
|
|
||||||
|
|
||||||
## Your Environment
|
## Your Environment
|
||||||
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||||
* SNMP::Info version used:
|
* SNMP::Info version used:
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,3 +9,5 @@ Makefile*
|
|||||||
Build
|
Build
|
||||||
_build
|
_build
|
||||||
blib
|
blib
|
||||||
|
cover_db
|
||||||
|
.idea
|
||||||
|
|||||||
18
.perltidyrc
Normal file
18
.perltidyrc
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# .perltidyrc - PBP perltidy configuration file for SNMP::Info
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
-l=78 # Max line width is 78 cols
|
||||||
|
-i=4 # Indent level is 4 cols
|
||||||
|
-ci=4 # Continuation indent is 4 cols
|
||||||
|
-nst # Output to STDOUT
|
||||||
|
-se # Errors to STDERR
|
||||||
|
-vt=2 # Maximal vertical tightness
|
||||||
|
-cti=0 # No extra indentation for closing brackets
|
||||||
|
-pt=1 # Medium parenthesis tightness
|
||||||
|
-bt=1 # Medium brace tightness
|
||||||
|
-sbt=1 # Medium square bracket tightness
|
||||||
|
-bbt=1 # Medium block brace tightness
|
||||||
|
-nsfs # No space before semicolons
|
||||||
|
-nolq # Don't outdent long quoted strings
|
||||||
|
-wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= && += -= /= |= >>= ||= .= %= ^= x=" # Break before all operators
|
||||||
|
|
||||||
16
.travis.yml
16
.travis.yml
@@ -1,4 +1,9 @@
|
|||||||
language: perl
|
language: perl
|
||||||
|
perl:
|
||||||
|
- "5.30"
|
||||||
|
- "5.10"
|
||||||
|
os: linux
|
||||||
|
dist: trusty
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -12,8 +17,8 @@ before_install:
|
|||||||
- mkdir ~/netdisco-mibs
|
- mkdir ~/netdisco-mibs
|
||||||
- cd ~/netdisco-mibs
|
- cd ~/netdisco-mibs
|
||||||
install:
|
install:
|
||||||
- curl -sL https://github.com/netdisco/netdisco-mibs/releases/download/4.004/netdisco-mibs.tar.gz | tar --strip-components=1 -zxf -
|
- curl -sL https://api.github.com/repos/netdisco/netdisco-mibs/releases/latest | jq -r '.tarball_url' | xargs -n1 curl -sL | tar --strip-components=1 -zxf -
|
||||||
- cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP::MAXTC
|
- cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP
|
||||||
before_script:
|
before_script:
|
||||||
- 'cd ${TRAVIS_BUILD_DIR}'
|
- 'cd ${TRAVIS_BUILD_DIR}'
|
||||||
script:
|
script:
|
||||||
@@ -24,6 +29,11 @@ script:
|
|||||||
notifications:
|
notifications:
|
||||||
irc:
|
irc:
|
||||||
on_success: change
|
on_success: change
|
||||||
on_failure: always
|
on_failure: change
|
||||||
channels:
|
channels:
|
||||||
- 'chat.freenode.net#netdisco'
|
- 'chat.freenode.net#netdisco'
|
||||||
|
# email:
|
||||||
|
# on_success: always
|
||||||
|
# on_failure: always
|
||||||
|
# recipients:
|
||||||
|
# - 'snmp-info-cvs@lists.sourceforge.net'
|
||||||
|
|||||||
11
Build.PL
11
Build.PL
@@ -16,6 +16,7 @@ Module::Build->new(
|
|||||||
requires => {
|
requires => {
|
||||||
'SNMP' => '0',
|
'SNMP' => '0',
|
||||||
'Math::BigInt' => '0',
|
'Math::BigInt' => '0',
|
||||||
|
'NetAddr::IP' => '4.068',
|
||||||
},
|
},
|
||||||
recommends => {
|
recommends => {
|
||||||
'PPI' => '0',
|
'PPI' => '0',
|
||||||
@@ -27,6 +28,16 @@ Module::Build->new(
|
|||||||
test_requires => {
|
test_requires => {
|
||||||
'Test::More' => '0.88',
|
'Test::More' => '0.88',
|
||||||
'Test::Distribution' => '0',
|
'Test::Distribution' => '0',
|
||||||
|
'Test::Class::Most' => '0',
|
||||||
|
'Test::MockObject::Extends' => '0',
|
||||||
|
'File::Find' => '0',
|
||||||
|
'Path::Class' => '0',
|
||||||
|
'File::Slurper' => '0',
|
||||||
|
'Test::Exception' => '0.43',
|
||||||
|
'Class::Inspector' => '0',
|
||||||
|
'NetSNMP::default_store' => '0',
|
||||||
|
'Module::Find' => '0',
|
||||||
|
'Hook::LexWrap' => '0',
|
||||||
},
|
},
|
||||||
# script_files => [
|
# script_files => [
|
||||||
# ],
|
# ],
|
||||||
|
|||||||
298
Changes
298
Changes
@@ -1,3 +1,295 @@
|
|||||||
|
Version 3.70 (2019-10-15)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #361 Siemens Scalance switch support
|
||||||
|
* #365 Ciena Layer3 support
|
||||||
|
* #368 DOCSIS cable modem support
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #350 ubiquiti version string cleanup (LBegnaud)
|
||||||
|
* #352 duplex support for ciscosb
|
||||||
|
* #353 report all vendor names in lowercase
|
||||||
|
* #353 sprinkle "use warnings" and "use strict" around
|
||||||
|
* #358 prefer checkpoint mib over net-snmp mib (earendilfr)
|
||||||
|
* #359 detect newer ios-xe using codenames (Christoph Neuhaus)
|
||||||
|
* #367 test using latest MIBs version dynamically
|
||||||
|
* #370 smarter Q-BRIDGE handling
|
||||||
|
* poe power usage & mac address for ciscosb
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #353 doc fixes: report all required mibs for each module as based on code
|
||||||
|
* #353 include fixes: don't include modules already imported from parent classes
|
||||||
|
* #355 fix #252, don't think 6char devices names are mac addresses
|
||||||
|
* #363 clean return calls in code
|
||||||
|
* #364 strip newline from neoteris os_ver, fixes netdisco #647
|
||||||
|
|
||||||
|
Version 3.68 (2019-04-28)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* initial support for redlion cellular routers (inphobia)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* use pulsesecure mib in layer7::neoteris instead of juniper-ive
|
||||||
|
|
||||||
|
Version 3.67 (2019-04-20)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #323 initial Lenovo / cnos support (inphobia)
|
||||||
|
* #317 #326 DOCSIS Head End support (Pyro3d)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* add v3 Context update() tests for net-snmp 5.8+
|
||||||
|
* support INFO_TRACE and SNMP_TRACE environment variables for Debug
|
||||||
|
* #324 clean up exinda and add regression test
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #294 snmp::info should show full class used
|
||||||
|
* #297 perl 5.28 removal of "use vars"
|
||||||
|
* #306 fix incorrect interfaces for d-link
|
||||||
|
* #319 make fortinet return a useful interface name (inphobia)
|
||||||
|
* #320 improve duplicate interfaces() fixup
|
||||||
|
* #321 clean interface descriptions of null and trailing space
|
||||||
|
* #322 #327 full fix for aerohive tests
|
||||||
|
* #325 lazy load legacy RFC1213-MIB only if needed
|
||||||
|
* #496 fix for aerohive wireless clients support (inphobia)
|
||||||
|
|
||||||
|
Version 3.66 (2019-03-24)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #316 add support for IS-IS routing protocol (pyro3d)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* switch to Alien::SNMP for travis builds (ollyg)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* clarify MRO usage
|
||||||
|
|
||||||
|
Version 3.65 (2019-02-24)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #296 expand CiscoAgg to also include LACP (inphobia)
|
||||||
|
* #308 update VyOS enterprise OID
|
||||||
|
* #310 bring layer3::oneaccess up to date for oneos6. (inphobia)
|
||||||
|
* Add two more HP 2930F models (JeroenvIS)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #295 make CiscoAgg return ifindex instead of bp_index (inphobia)
|
||||||
|
* more documentation fixes + whitespace cleanup in all files
|
||||||
|
|
||||||
|
Version 3.64 (2018-12-30)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #283 support for Exinda/GFI traffic shapers (inphobia)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #282 Aerohive base MAC lookup (inphobia)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* many documentation fixes (inphobia)
|
||||||
|
|
||||||
|
Version 3.63 (2018-11-25)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #280 update to retrieve Aerohive serial (inphobia / nick n.)
|
||||||
|
* #271 update os_ver for Alcatel-Lucent (stromsoe)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #273 remove old ADTRAN modules not in netdisco-mibs
|
||||||
|
|
||||||
|
Version 3.62 (2018-10-29)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #278 Support for Cisco Firepower Threat Defense
|
||||||
|
* #275 Document peth_port_ifindex for Junipers
|
||||||
|
* #274 Add peth_port_ifindex override for Junipers
|
||||||
|
* #270 Add support for additional Mikrotik models
|
||||||
|
* Add HP 3810M, 2930M, 2930F and 2540 series switches
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #265 Fix typos in L3::Huawei
|
||||||
|
|
||||||
|
Version 3.61 (2018-05-09)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #255 IPv6 support - Set the transport-specifier if given an IPv6 address
|
||||||
|
* #195 IP address table - IPv4 Address Table will use the
|
||||||
|
IP-MIB::ipAddressTable if the deprecated IP-MIB::ipAddrTable doesn't
|
||||||
|
return results
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #261 EIGRP Peer Neighbor Formatting / Munge
|
||||||
|
* #252 Unpack binary MAC if present in cdp_port
|
||||||
|
* Fix SNMPv1 cdp_run check
|
||||||
|
|
||||||
|
Version 3.60 (2018-05-06)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #263 detect Aerohive ap250 & ap230 models (inphobia)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #140 LLDP fixes - treat remote port type of 'local' as an interface name if
|
||||||
|
the remote port id doesn't look like an index
|
||||||
|
* Fix potential issue in enumeration of LLDP reported system capabilities
|
||||||
|
supported by the remote system due to the 'lldpRemSysCapSupported' leaf
|
||||||
|
name being defined in multiple MIBs
|
||||||
|
|
||||||
|
Version 3.59 (2018-05-01)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #214 SNMP::Info Device models Genua, ATMedia, Liebert
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Capture base MAC in L3::Huawei
|
||||||
|
* Change _lldp_addr_index to a method so it can be properly overridden in
|
||||||
|
subclasses
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Capture fan and power supply status in L3::Huawei when description is
|
||||||
|
not available
|
||||||
|
|
||||||
|
Version 3.58 (2018-04-29)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #202 Support for Aerohive access points
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #220 Alcatel-Lucent / Nokia SR 7750 missing port information. Add duplex,
|
||||||
|
fan, and power supply status, as well as, module inventory to L3::Timetra
|
||||||
|
* Add fan and power supply status to L3::Huawei
|
||||||
|
* Override ifMTU with max frame size when applicable in L3::Huawei
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Correct POE power module to port mapping in L3::Huawei
|
||||||
|
|
||||||
|
Version 3.57 (2018-04-26)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #145 Patch for Huawei (robwwd)
|
||||||
|
* #228 Huawei aggregate link support
|
||||||
|
* POE and duplex admin support added to L3::Huawei
|
||||||
|
* Significant performance improvement validating AUTOLOAD methods
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* IEEE802dot3ad portlist is indexed with a dot1dBasePort, cross reference
|
||||||
|
with dot1dBasePortIfIndex
|
||||||
|
* Fix for macsuck in Cisco classes introduced in 3.55 caused by inheritance
|
||||||
|
issue in CiscoStack
|
||||||
|
|
||||||
|
Version 3.56 (2018-04-22)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix table methods when defined as an OID which will not completely
|
||||||
|
translate to a fully qualified textual leaf
|
||||||
|
|
||||||
|
Version 3.55 (2018-04-19)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
* #260 Oneaccess (robwwd)
|
||||||
|
* #259 Add ERX (Old Juniper E-Series JunOSe) Support (robwwd)
|
||||||
|
* #258 Add support for Arbor devices (robwwd)
|
||||||
|
* #253 Nexans switch support (paecker)
|
||||||
|
* #142 Sixnet Switch Support
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #117 Recognition for HP Blade switches (J R Binks)
|
||||||
|
* #196 Support for powerconnect 8164F
|
||||||
|
* Refactor Layer3::Dell for better support of newer models
|
||||||
|
* Increase capture of i_vlan on router interfaces in L3::Cisco
|
||||||
|
* Factor out logic to determine serial number from ENTITY-MIB in Layer2 and
|
||||||
|
Layer3 to new method entity_derived_serial in Entity class and added new
|
||||||
|
method entity_derived_os_ver in Entity class to determine OS version
|
||||||
|
in a similar manner
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #67 Juniper EX4300 Missing/Wrong information
|
||||||
|
* #61 ZyXEL (X)GS1900 family MIB - Fix loop in layers method
|
||||||
|
* Fix ISA in AMAP and EDP classes
|
||||||
|
* Add missing MIB in L2::Trapeze, L2::NWSS2300, and L3::Dell
|
||||||
|
* Fix gigabit logic in i_duplex_admin() of CiscoStack
|
||||||
|
* Prevent potential undefined warnings in i_speed_admin() of L2::C2900 and
|
||||||
|
ports() of L3::C3550
|
||||||
|
* Correct validation and IID/key used in mau_set_i_speed_admin() and
|
||||||
|
mau_set_i_duplex_admin() of MAU
|
||||||
|
* Correct typo in MIB leaf names in L3::Aironet
|
||||||
|
* Don't use MIB leafs that are not-accessible according to MIB
|
||||||
|
NOTE: Fixing this logic now results in methods on MIB leafs specified as
|
||||||
|
not-accessible failing validation in _validate_autoload_method()
|
||||||
|
|
||||||
|
Version 3.54 (2018-04-01)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #141 Avocent ACS files for correct discovery in Netdisco
|
||||||
|
* Add support for Avocent ACS 5K/6K/8K terminal servers in Layer1::Cyclades
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #215 Nokia/Alcatel-Lucent 7705 LLDP
|
||||||
|
* #220 Alcatel-Lucent / Nokia SR 7750 missing neighbors
|
||||||
|
* Improve Layer3::Timetra model detection
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix logic in Layer1::Asante i_up() method
|
||||||
|
* Fix MIB leaf typo in IPv6
|
||||||
|
* Don't use MIB leafs that are not-accessible according to MIB
|
||||||
|
* Fix logic for determining if MIB leaf supports set operations
|
||||||
|
NOTE: Fixing this logic now results in methods starting with set_ on MIB
|
||||||
|
leafs without Write or Create access failing validation in
|
||||||
|
_validate_autoload_method()
|
||||||
|
|
||||||
|
Version 3.53 (2018-03-22)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #12 add Cisco PortFast support via CiscoStpExtensions::i_faststart_enabled
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Report serial/version on Netgear FSM (paecker)
|
||||||
|
* Add test harness and expand developer test coverage
|
||||||
|
* Add back the base (RFC) MIBs for when net-snmp does not have them builtin
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix AUTOLOAD / can() bug that could result in DESTROY being redefined and
|
||||||
|
dynamic methods not being added to the symbol table.
|
||||||
|
|
||||||
version 3.52 (2018-03-19)
|
version 3.52 (2018-03-19)
|
||||||
|
|
||||||
[ENHANCEMENTS]
|
[ENHANCEMENTS]
|
||||||
@@ -16,7 +308,7 @@ version 3.50 (2018-03-14)
|
|||||||
|
|
||||||
* #226 Avaya VSP devices - no ifAlias
|
* #226 Avaya VSP devices - no ifAlias
|
||||||
* #227 Remove bogus can() check in _set()
|
* #227 Remove bogus can() check in _set()
|
||||||
* Fix SNMP::Info::IEEE802dot3ad when more than 1 LAG
|
* Fix SNMP::Info::IEEE802dot3ad when more than 1 LAG
|
||||||
|
|
||||||
version 3.49 (2018-03-03)
|
version 3.49 (2018-03-03)
|
||||||
|
|
||||||
@@ -83,13 +375,13 @@ version 3.41 (2018-02-01)
|
|||||||
|
|
||||||
[BUG FIXES]
|
[BUG FIXES]
|
||||||
|
|
||||||
* Fixes to distriution metadata
|
* Fixes to distribution metadata
|
||||||
|
|
||||||
version 3.40 (2018-01-28)
|
version 3.40 (2018-01-28)
|
||||||
|
|
||||||
[ENHANCEMENTS]
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
* #240 Support for CheckPoint devies through SNMP
|
* #240 Support for CheckPoint devices through SNMP
|
||||||
* #240 Cisco SB switches fixup
|
* #240 Cisco SB switches fixup
|
||||||
* #244 Add Adtran support
|
* #244 Add Adtran support
|
||||||
* #241 Vyatta/VyOS support
|
* #241 Vyatta/VyOS support
|
||||||
|
|||||||
16
LICENSE
16
LICENSE
@@ -6,7 +6,7 @@ Original Code
|
|||||||
Copyright (c) 2002,2003 Regents of the University of California
|
Copyright (c) 2002,2003 Regents of the University of California
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are met:
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
@@ -14,17 +14,17 @@ modification, are permitted provided that the following conditions are met:
|
|||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
this list of conditions and the following disclaimer in the documentation
|
this list of conditions and the following disclaimer in the documentation
|
||||||
and/or other materials provided with the distribution.
|
and/or other materials provided with the distribution.
|
||||||
* Neither the name of the University of California, Santa Cruz nor the
|
* Neither the name of the University of California, Santa Cruz nor the
|
||||||
names of its contributors may be used to endorse or promote products
|
names of its contributors may be used to endorse or promote products
|
||||||
derived from this software without specific prior written permission.
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
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
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
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
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|||||||
148
MANIFEST
148
MANIFEST
@@ -1,3 +1,4 @@
|
|||||||
|
.perltidyrc
|
||||||
Build.PL
|
Build.PL
|
||||||
Changes
|
Changes
|
||||||
contrib/DEVELOP
|
contrib/DEVELOP
|
||||||
@@ -25,6 +26,8 @@ lib/SNMP/Info/CiscoStack.pm
|
|||||||
lib/SNMP/Info/CiscoStats.pm
|
lib/SNMP/Info/CiscoStats.pm
|
||||||
lib/SNMP/Info/CiscoStpExtensions.pm
|
lib/SNMP/Info/CiscoStpExtensions.pm
|
||||||
lib/SNMP/Info/CiscoVTP.pm
|
lib/SNMP/Info/CiscoVTP.pm
|
||||||
|
lib/SNMP/Info/DocsisCM.pm
|
||||||
|
lib/SNMP/Info/DocsisHE.pm
|
||||||
lib/SNMP/Info/EDP.pm
|
lib/SNMP/Info/EDP.pm
|
||||||
lib/SNMP/Info/Entity.pm
|
lib/SNMP/Info/Entity.pm
|
||||||
lib/SNMP/Info/EtherLike.pm
|
lib/SNMP/Info/EtherLike.pm
|
||||||
@@ -41,9 +44,11 @@ lib/SNMP/Info/Layer1/S3000.pm
|
|||||||
lib/SNMP/Info/Layer2.pm
|
lib/SNMP/Info/Layer2.pm
|
||||||
lib/SNMP/Info/Layer2/3Com.pm
|
lib/SNMP/Info/Layer2/3Com.pm
|
||||||
lib/SNMP/Info/Layer2/Adtran.pm
|
lib/SNMP/Info/Layer2/Adtran.pm
|
||||||
|
lib/SNMP/Info/Layer2/Aerohive.pm
|
||||||
lib/SNMP/Info/Layer2/Airespace.pm
|
lib/SNMP/Info/Layer2/Airespace.pm
|
||||||
lib/SNMP/Info/Layer2/Aironet.pm
|
lib/SNMP/Info/Layer2/Aironet.pm
|
||||||
lib/SNMP/Info/Layer2/Allied.pm
|
lib/SNMP/Info/Layer2/Allied.pm
|
||||||
|
lib/SNMP/Info/Layer2/Atmedia.pm
|
||||||
lib/SNMP/Info/Layer2/Baystack.pm
|
lib/SNMP/Info/Layer2/Baystack.pm
|
||||||
lib/SNMP/Info/Layer2/C1900.pm
|
lib/SNMP/Info/Layer2/C1900.pm
|
||||||
lib/SNMP/Info/Layer2/C2900.pm
|
lib/SNMP/Info/Layer2/C2900.pm
|
||||||
@@ -51,6 +56,7 @@ lib/SNMP/Info/Layer2/Catalyst.pm
|
|||||||
lib/SNMP/Info/Layer2/Centillion.pm
|
lib/SNMP/Info/Layer2/Centillion.pm
|
||||||
lib/SNMP/Info/Layer2/Cisco.pm
|
lib/SNMP/Info/Layer2/Cisco.pm
|
||||||
lib/SNMP/Info/Layer2/CiscoSB.pm
|
lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||||
|
lib/SNMP/Info/Layer2/Exinda.pm
|
||||||
lib/SNMP/Info/Layer2/HP.pm
|
lib/SNMP/Info/Layer2/HP.pm
|
||||||
lib/SNMP/Info/Layer2/HP4000.pm
|
lib/SNMP/Info/Layer2/HP4000.pm
|
||||||
lib/SNMP/Info/Layer2/HPVC.pm
|
lib/SNMP/Info/Layer2/HPVC.pm
|
||||||
@@ -58,8 +64,10 @@ lib/SNMP/Info/Layer2/Kentrox.pm
|
|||||||
lib/SNMP/Info/Layer2/N2270.pm
|
lib/SNMP/Info/Layer2/N2270.pm
|
||||||
lib/SNMP/Info/Layer2/NAP222x.pm
|
lib/SNMP/Info/Layer2/NAP222x.pm
|
||||||
lib/SNMP/Info/Layer2/Netgear.pm
|
lib/SNMP/Info/Layer2/Netgear.pm
|
||||||
|
lib/SNMP/Info/Layer2/Nexans.pm
|
||||||
lib/SNMP/Info/Layer2/NWSS2300.pm
|
lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||||
lib/SNMP/Info/Layer2/Orinoco.pm
|
lib/SNMP/Info/Layer2/Orinoco.pm
|
||||||
|
lib/SNMP/Info/Layer2/Sixnet.pm
|
||||||
lib/SNMP/Info/Layer2/Trapeze.pm
|
lib/SNMP/Info/Layer2/Trapeze.pm
|
||||||
lib/SNMP/Info/Layer2/Ubiquiti.pm
|
lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||||
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||||
@@ -76,6 +84,7 @@ lib/SNMP/Info/Layer3/C3550.pm
|
|||||||
lib/SNMP/Info/Layer3/C4000.pm
|
lib/SNMP/Info/Layer3/C4000.pm
|
||||||
lib/SNMP/Info/Layer3/C6500.pm
|
lib/SNMP/Info/Layer3/C6500.pm
|
||||||
lib/SNMP/Info/Layer3/CheckPoint.pm
|
lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||||
|
lib/SNMP/Info/Layer3/Ciena.pm
|
||||||
lib/SNMP/Info/Layer3/Cisco.pm
|
lib/SNMP/Info/Layer3/Cisco.pm
|
||||||
lib/SNMP/Info/Layer3/CiscoASA.pm
|
lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||||
lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||||
@@ -85,28 +94,34 @@ lib/SNMP/Info/Layer3/Cumulus.pm
|
|||||||
lib/SNMP/Info/Layer3/Dell.pm
|
lib/SNMP/Info/Layer3/Dell.pm
|
||||||
lib/SNMP/Info/Layer3/DLink.pm
|
lib/SNMP/Info/Layer3/DLink.pm
|
||||||
lib/SNMP/Info/Layer3/Enterasys.pm
|
lib/SNMP/Info/Layer3/Enterasys.pm
|
||||||
|
lib/SNMP/Info/Layer3/ERX.pm
|
||||||
lib/SNMP/Info/Layer3/Extreme.pm
|
lib/SNMP/Info/Layer3/Extreme.pm
|
||||||
lib/SNMP/Info/Layer3/F5.pm
|
lib/SNMP/Info/Layer3/F5.pm
|
||||||
lib/SNMP/Info/Layer3/Force10.pm
|
lib/SNMP/Info/Layer3/Force10.pm
|
||||||
lib/SNMP/Info/Layer3/Fortinet.pm
|
lib/SNMP/Info/Layer3/Fortinet.pm
|
||||||
lib/SNMP/Info/Layer3/Foundry.pm
|
lib/SNMP/Info/Layer3/Foundry.pm
|
||||||
|
lib/SNMP/Info/Layer3/Genua.pm
|
||||||
lib/SNMP/Info/Layer3/H3C.pm
|
lib/SNMP/Info/Layer3/H3C.pm
|
||||||
lib/SNMP/Info/Layer3/HP9300.pm
|
lib/SNMP/Info/Layer3/HP9300.pm
|
||||||
lib/SNMP/Info/Layer3/Huawei.pm
|
lib/SNMP/Info/Layer3/Huawei.pm
|
||||||
lib/SNMP/Info/Layer3/IBMGbTor.pm
|
lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||||
lib/SNMP/Info/Layer3/Juniper.pm
|
lib/SNMP/Info/Layer3/Juniper.pm
|
||||||
lib/SNMP/Info/Layer3/Lantronix.pm
|
lib/SNMP/Info/Layer3/Lantronix.pm
|
||||||
|
lib/SNMP/Info/Layer3/Lenovo.pm
|
||||||
lib/SNMP/Info/Layer3/Microsoft.pm
|
lib/SNMP/Info/Layer3/Microsoft.pm
|
||||||
lib/SNMP/Info/Layer3/Mikrotik.pm
|
lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||||
lib/SNMP/Info/Layer3/N1600.pm
|
lib/SNMP/Info/Layer3/N1600.pm
|
||||||
lib/SNMP/Info/Layer3/Netscreen.pm
|
lib/SNMP/Info/Layer3/Netscreen.pm
|
||||||
lib/SNMP/Info/Layer3/NetSNMP.pm
|
lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||||
lib/SNMP/Info/Layer3/Nexus.pm
|
lib/SNMP/Info/Layer3/Nexus.pm
|
||||||
|
lib/SNMP/Info/Layer3/OneAccess.pm
|
||||||
lib/SNMP/Info/Layer3/PacketFront.pm
|
lib/SNMP/Info/Layer3/PacketFront.pm
|
||||||
lib/SNMP/Info/Layer3/PaloAlto.pm
|
lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||||
lib/SNMP/Info/Layer3/Passport.pm
|
lib/SNMP/Info/Layer3/Passport.pm
|
||||||
lib/SNMP/Info/Layer3/Pf.pm
|
lib/SNMP/Info/Layer3/Pf.pm
|
||||||
lib/SNMP/Info/Layer3/Pica8.pm
|
lib/SNMP/Info/Layer3/Pica8.pm
|
||||||
|
lib/SNMP/Info/Layer3/Redlion.pm
|
||||||
|
lib/SNMP/Info/Layer3/Scalance.pm
|
||||||
lib/SNMP/Info/Layer3/SonicWALL.pm
|
lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||||
lib/SNMP/Info/Layer3/Steelhead.pm
|
lib/SNMP/Info/Layer3/Steelhead.pm
|
||||||
lib/SNMP/Info/Layer3/Sun.pm
|
lib/SNMP/Info/Layer3/Sun.pm
|
||||||
@@ -116,8 +131,10 @@ lib/SNMP/Info/Layer3/VMware.pm
|
|||||||
lib/SNMP/Info/Layer3/VyOS.pm
|
lib/SNMP/Info/Layer3/VyOS.pm
|
||||||
lib/SNMP/Info/Layer7.pm
|
lib/SNMP/Info/Layer7.pm
|
||||||
lib/SNMP/Info/Layer7/APC.pm
|
lib/SNMP/Info/Layer7/APC.pm
|
||||||
|
lib/SNMP/Info/Layer7/Arbor.pm
|
||||||
lib/SNMP/Info/Layer7/CiscoIPS.pm
|
lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||||
lib/SNMP/Info/Layer7/Gigamon.pm
|
lib/SNMP/Info/Layer7/Gigamon.pm
|
||||||
|
lib/SNMP/Info/Layer7/Liebert.pm
|
||||||
lib/SNMP/Info/Layer7/Neoteris.pm
|
lib/SNMP/Info/Layer7/Neoteris.pm
|
||||||
lib/SNMP/Info/Layer7/Netscaler.pm
|
lib/SNMP/Info/Layer7/Netscaler.pm
|
||||||
lib/SNMP/Info/LLDP.pm
|
lib/SNMP/Info/LLDP.pm
|
||||||
@@ -143,3 +160,134 @@ xt/00_local_prereq.t
|
|||||||
xt/00_local_spelling.t
|
xt/00_local_spelling.t
|
||||||
xt/00_local_versionsync.t
|
xt/00_local_versionsync.t
|
||||||
xt/10_remote_snmplabs.t
|
xt/10_remote_snmplabs.t
|
||||||
|
xt/21_run.t
|
||||||
|
xt/lib/My/Test/Class.pm
|
||||||
|
xt/lib/Test/SNMP/Info.pm
|
||||||
|
xt/lib/Test/SNMP/Info/AdslLine.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Aggregate.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Airespace.pm
|
||||||
|
xt/lib/Test/SNMP/Info/AMAP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Bridge.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoAgg.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoConfig.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoPortSecurity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoPower.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoQOS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoRTT.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoStats.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoStpExtensions.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoVTP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/EDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Entity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/EtherLike.pm
|
||||||
|
xt/lib/Test/SNMP/Info/FDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/IEEE802dot11.pm
|
||||||
|
xt/lib/Test/SNMP/Info/IEEE802dot3ad.pm
|
||||||
|
xt/lib/Test/SNMP/Info/IPv6.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Allied.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Asante.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Bayhub.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Cyclades.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/S3000.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/3Com.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Aerohive.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Airespace.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Aironet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Allied.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Atmedia.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Baystack.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/C1900.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/C2900.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Catalyst.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Centillion.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Cisco.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/CiscoSB.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Exinda.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/HP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/HP4000.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/HPVC.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Kentrox.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/N2270.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/NAP222x.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Netgear.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Nexans.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Aironet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/AlteonAD.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Altiga.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Arista.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Aruba.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/BayRS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/C3550.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/C4000.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/C6500.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CheckPoint.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Cisco.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CiscoASA.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Contivity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Cumulus.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Dell.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/DLink.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Enterasys.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/ERX.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Extreme.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/F5.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Force10.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Fortinet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Foundry.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Genua.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/H3C.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/HP9300.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Huawei.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/IBMGbTor.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Juniper.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Lantronix.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Lenovo.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Microsoft.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Mikrotik.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/N1600.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Netscreen.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/NetSNMP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Nexus.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/OneAccess.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/PacketFront.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/PaloAlto.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Passport.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Pf.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Pica8.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Redlion.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Scalance.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Sun.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Tasman.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/VMware.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/VyOS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/APC.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Arbor.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/CiscoIPS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Gigamon.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Liebert.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Neoteris.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Netscaler.pm
|
||||||
|
xt/lib/Test/SNMP/Info/LLDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/MAU.pm
|
||||||
|
xt/lib/Test/SNMP/Info/NortelStack.pm
|
||||||
|
xt/lib/Test/SNMP/Info/PowerEthernet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/RapidCity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/SONMP.pm
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
# Avoid Devel::Cover and Devel::CoverX::Covered files.
|
# Avoid Devel::Cover and Devel::CoverX::Covered files.
|
||||||
\bcover_db\b
|
\bcover_db\b
|
||||||
\bcovered\b
|
\bcovered\b
|
||||||
|
|
||||||
# Avoid MYMETA files
|
# Avoid MYMETA files
|
||||||
^MYMETA\.
|
^MYMETA\.
|
||||||
|
|
||||||
@@ -68,3 +68,6 @@ README.md
|
|||||||
|
|
||||||
# Avoid Komodo project file
|
# Avoid Komodo project file
|
||||||
\.komodoproject$
|
\.komodoproject$
|
||||||
|
|
||||||
|
# ignore intellij
|
||||||
|
\B\.idea
|
||||||
|
|||||||
319
META.json
319
META.json
@@ -29,12 +29,23 @@
|
|||||||
},
|
},
|
||||||
"requires" : {
|
"requires" : {
|
||||||
"Math::BigInt" : "0",
|
"Math::BigInt" : "0",
|
||||||
|
"NetAddr::IP" : "4.068",
|
||||||
"SNMP" : "0"
|
"SNMP" : "0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"test" : {
|
"test" : {
|
||||||
"requires" : {
|
"requires" : {
|
||||||
|
"Class::Inspector" : "0",
|
||||||
|
"File::Find" : "0",
|
||||||
|
"File::Slurper" : "0",
|
||||||
|
"Hook::LexWrap" : "0",
|
||||||
|
"Module::Find" : "0",
|
||||||
|
"NetSNMP::default_store" : "0",
|
||||||
|
"Path::Class" : "0",
|
||||||
|
"Test::Class::Most" : "0",
|
||||||
"Test::Distribution" : "0",
|
"Test::Distribution" : "0",
|
||||||
|
"Test::Exception" : "0.43",
|
||||||
|
"Test::MockObject::Extends" : "0",
|
||||||
"Test::More" : "0.88"
|
"Test::More" : "0.88"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,479 +53,543 @@
|
|||||||
"provides" : {
|
"provides" : {
|
||||||
"SNMP::Info" : {
|
"SNMP::Info" : {
|
||||||
"file" : "lib/SNMP/Info.pm",
|
"file" : "lib/SNMP/Info.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::AMAP" : {
|
"SNMP::Info::AMAP" : {
|
||||||
"file" : "lib/SNMP/Info/AMAP.pm",
|
"file" : "lib/SNMP/Info/AMAP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::AdslLine" : {
|
"SNMP::Info::AdslLine" : {
|
||||||
"file" : "lib/SNMP/Info/AdslLine.pm",
|
"file" : "lib/SNMP/Info/AdslLine.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Aggregate" : {
|
"SNMP::Info::Aggregate" : {
|
||||||
"file" : "lib/SNMP/Info/Aggregate.pm",
|
"file" : "lib/SNMP/Info/Aggregate.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Airespace" : {
|
"SNMP::Info::Airespace" : {
|
||||||
"file" : "lib/SNMP/Info/Airespace.pm",
|
"file" : "lib/SNMP/Info/Airespace.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Bridge" : {
|
"SNMP::Info::Bridge" : {
|
||||||
"file" : "lib/SNMP/Info/Bridge.pm",
|
"file" : "lib/SNMP/Info/Bridge.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CDP" : {
|
"SNMP::Info::CDP" : {
|
||||||
"file" : "lib/SNMP/Info/CDP.pm",
|
"file" : "lib/SNMP/Info/CDP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoAgg" : {
|
"SNMP::Info::CiscoAgg" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoAgg.pm",
|
"file" : "lib/SNMP/Info/CiscoAgg.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoConfig" : {
|
"SNMP::Info::CiscoConfig" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoConfig.pm",
|
"file" : "lib/SNMP/Info/CiscoConfig.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoPortSecurity" : {
|
"SNMP::Info::CiscoPortSecurity" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
|
"file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoPower" : {
|
"SNMP::Info::CiscoPower" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoPower.pm",
|
"file" : "lib/SNMP/Info/CiscoPower.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoQOS" : {
|
"SNMP::Info::CiscoQOS" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoQOS.pm",
|
"file" : "lib/SNMP/Info/CiscoQOS.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoRTT" : {
|
"SNMP::Info::CiscoRTT" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoRTT.pm",
|
"file" : "lib/SNMP/Info/CiscoRTT.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoStack" : {
|
"SNMP::Info::CiscoStack" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoStack.pm",
|
"file" : "lib/SNMP/Info/CiscoStack.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoStats" : {
|
"SNMP::Info::CiscoStats" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoStats.pm",
|
"file" : "lib/SNMP/Info/CiscoStats.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoStpExtensions" : {
|
"SNMP::Info::CiscoStpExtensions" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
|
"file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::CiscoVTP" : {
|
"SNMP::Info::CiscoVTP" : {
|
||||||
"file" : "lib/SNMP/Info/CiscoVTP.pm",
|
"file" : "lib/SNMP/Info/CiscoVTP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::DocsisCM" : {
|
||||||
|
"file" : "lib/SNMP/Info/DocsisCM.pm",
|
||||||
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::DocsisHE" : {
|
||||||
|
"file" : "lib/SNMP/Info/DocsisHE.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::EDP" : {
|
"SNMP::Info::EDP" : {
|
||||||
"file" : "lib/SNMP/Info/EDP.pm",
|
"file" : "lib/SNMP/Info/EDP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Entity" : {
|
"SNMP::Info::Entity" : {
|
||||||
"file" : "lib/SNMP/Info/Entity.pm",
|
"file" : "lib/SNMP/Info/Entity.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::EtherLike" : {
|
"SNMP::Info::EtherLike" : {
|
||||||
"file" : "lib/SNMP/Info/EtherLike.pm",
|
"file" : "lib/SNMP/Info/EtherLike.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::FDP" : {
|
"SNMP::Info::FDP" : {
|
||||||
"file" : "lib/SNMP/Info/FDP.pm",
|
"file" : "lib/SNMP/Info/FDP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::IEEE802dot11" : {
|
"SNMP::Info::IEEE802dot11" : {
|
||||||
"file" : "lib/SNMP/Info/IEEE802dot11.pm",
|
"file" : "lib/SNMP/Info/IEEE802dot11.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::IEEE802dot3ad" : {
|
"SNMP::Info::IEEE802dot3ad" : {
|
||||||
"file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
|
"file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::IPv6" : {
|
"SNMP::Info::IPv6" : {
|
||||||
"file" : "lib/SNMP/Info/IPv6.pm",
|
"file" : "lib/SNMP/Info/IPv6.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::LLDP" : {
|
"SNMP::Info::LLDP" : {
|
||||||
"file" : "lib/SNMP/Info/LLDP.pm",
|
"file" : "lib/SNMP/Info/LLDP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer1" : {
|
"SNMP::Info::Layer1" : {
|
||||||
"file" : "lib/SNMP/Info/Layer1.pm",
|
"file" : "lib/SNMP/Info/Layer1.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer1::Allied" : {
|
"SNMP::Info::Layer1::Allied" : {
|
||||||
"file" : "lib/SNMP/Info/Layer1/Allied.pm",
|
"file" : "lib/SNMP/Info/Layer1/Allied.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer1::Asante" : {
|
"SNMP::Info::Layer1::Asante" : {
|
||||||
"file" : "lib/SNMP/Info/Layer1/Asante.pm",
|
"file" : "lib/SNMP/Info/Layer1/Asante.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer1::Bayhub" : {
|
"SNMP::Info::Layer1::Bayhub" : {
|
||||||
"file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
|
"file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer1::Cyclades" : {
|
"SNMP::Info::Layer1::Cyclades" : {
|
||||||
"file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
|
"file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer1::S3000" : {
|
"SNMP::Info::Layer1::S3000" : {
|
||||||
"file" : "lib/SNMP/Info/Layer1/S3000.pm",
|
"file" : "lib/SNMP/Info/Layer1/S3000.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2" : {
|
"SNMP::Info::Layer2" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2.pm",
|
"file" : "lib/SNMP/Info/Layer2.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::3Com" : {
|
"SNMP::Info::Layer2::3Com" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/3Com.pm",
|
"file" : "lib/SNMP/Info/Layer2/3Com.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Adtran" : {
|
"SNMP::Info::Layer2::Adtran" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Adtran.pm",
|
"file" : "lib/SNMP/Info/Layer2/Adtran.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Aerohive" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Aerohive.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Airespace" : {
|
"SNMP::Info::Layer2::Airespace" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Airespace.pm",
|
"file" : "lib/SNMP/Info/Layer2/Airespace.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Aironet" : {
|
"SNMP::Info::Layer2::Aironet" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Aironet.pm",
|
"file" : "lib/SNMP/Info/Layer2/Aironet.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Allied" : {
|
"SNMP::Info::Layer2::Allied" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Allied.pm",
|
"file" : "lib/SNMP/Info/Layer2/Allied.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Atmedia" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Atmedia.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Baystack" : {
|
"SNMP::Info::Layer2::Baystack" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Baystack.pm",
|
"file" : "lib/SNMP/Info/Layer2/Baystack.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::C1900" : {
|
"SNMP::Info::Layer2::C1900" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/C1900.pm",
|
"file" : "lib/SNMP/Info/Layer2/C1900.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::C2900" : {
|
"SNMP::Info::Layer2::C2900" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/C2900.pm",
|
"file" : "lib/SNMP/Info/Layer2/C2900.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Catalyst" : {
|
"SNMP::Info::Layer2::Catalyst" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
|
"file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Centillion" : {
|
"SNMP::Info::Layer2::Centillion" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Centillion.pm",
|
"file" : "lib/SNMP/Info/Layer2/Centillion.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Cisco" : {
|
"SNMP::Info::Layer2::Cisco" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Cisco.pm",
|
"file" : "lib/SNMP/Info/Layer2/Cisco.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::CiscoSB" : {
|
"SNMP::Info::Layer2::CiscoSB" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
|
"file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Exinda" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Exinda.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::HP" : {
|
"SNMP::Info::Layer2::HP" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/HP.pm",
|
"file" : "lib/SNMP/Info/Layer2/HP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::HP4000" : {
|
"SNMP::Info::Layer2::HP4000" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/HP4000.pm",
|
"file" : "lib/SNMP/Info/Layer2/HP4000.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::HPVC" : {
|
"SNMP::Info::Layer2::HPVC" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/HPVC.pm",
|
"file" : "lib/SNMP/Info/Layer2/HPVC.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Kentrox" : {
|
"SNMP::Info::Layer2::Kentrox" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
|
"file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::N2270" : {
|
"SNMP::Info::Layer2::N2270" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/N2270.pm",
|
"file" : "lib/SNMP/Info/Layer2/N2270.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::NAP222x" : {
|
"SNMP::Info::Layer2::NAP222x" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
|
"file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::NWSS2300" : {
|
"SNMP::Info::Layer2::NWSS2300" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
|
"file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Netgear" : {
|
"SNMP::Info::Layer2::Netgear" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Netgear.pm",
|
"file" : "lib/SNMP/Info/Layer2/Netgear.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Nexans" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Nexans.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Orinoco" : {
|
"SNMP::Info::Layer2::Orinoco" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
|
"file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Sixnet" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Sixnet.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Trapeze" : {
|
"SNMP::Info::Layer2::Trapeze" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
|
"file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::Ubiquiti" : {
|
"SNMP::Info::Layer2::Ubiquiti" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
|
"file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer2::ZyXEL_DSLAM" : {
|
"SNMP::Info::Layer2::ZyXEL_DSLAM" : {
|
||||||
"file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
|
"file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3" : {
|
"SNMP::Info::Layer3" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3.pm",
|
"file" : "lib/SNMP/Info/Layer3.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Aironet" : {
|
"SNMP::Info::Layer3::Aironet" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Aironet.pm",
|
"file" : "lib/SNMP/Info/Layer3/Aironet.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::AlcatelLucent" : {
|
"SNMP::Info::Layer3::AlcatelLucent" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
|
"file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::AlteonAD" : {
|
"SNMP::Info::Layer3::AlteonAD" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
|
"file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Altiga" : {
|
"SNMP::Info::Layer3::Altiga" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Altiga.pm",
|
"file" : "lib/SNMP/Info/Layer3/Altiga.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Arista" : {
|
"SNMP::Info::Layer3::Arista" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Arista.pm",
|
"file" : "lib/SNMP/Info/Layer3/Arista.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Aruba" : {
|
"SNMP::Info::Layer3::Aruba" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Aruba.pm",
|
"file" : "lib/SNMP/Info/Layer3/Aruba.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::BayRS" : {
|
"SNMP::Info::Layer3::BayRS" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/BayRS.pm",
|
"file" : "lib/SNMP/Info/Layer3/BayRS.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::BlueCoatSG" : {
|
"SNMP::Info::Layer3::BlueCoatSG" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
|
"file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::C3550" : {
|
"SNMP::Info::Layer3::C3550" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/C3550.pm",
|
"file" : "lib/SNMP/Info/Layer3/C3550.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::C4000" : {
|
"SNMP::Info::Layer3::C4000" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/C4000.pm",
|
"file" : "lib/SNMP/Info/Layer3/C4000.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::C6500" : {
|
"SNMP::Info::Layer3::C6500" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/C6500.pm",
|
"file" : "lib/SNMP/Info/Layer3/C6500.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::CheckPoint" : {
|
"SNMP::Info::Layer3::CheckPoint" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
|
"file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Ciena" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Ciena.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Cisco" : {
|
"SNMP::Info::Layer3::Cisco" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Cisco.pm",
|
"file" : "lib/SNMP/Info/Layer3/Cisco.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::CiscoASA" : {
|
"SNMP::Info::Layer3::CiscoASA" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
|
"file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::CiscoFWSM" : {
|
"SNMP::Info::Layer3::CiscoFWSM" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
|
"file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::CiscoSwitch" : {
|
"SNMP::Info::Layer3::CiscoSwitch" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
|
"file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Contivity" : {
|
"SNMP::Info::Layer3::Contivity" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Contivity.pm",
|
"file" : "lib/SNMP/Info/Layer3/Contivity.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Cumulus" : {
|
"SNMP::Info::Layer3::Cumulus" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
|
"file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::DLink" : {
|
"SNMP::Info::Layer3::DLink" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/DLink.pm",
|
"file" : "lib/SNMP/Info/Layer3/DLink.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Dell" : {
|
"SNMP::Info::Layer3::Dell" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Dell.pm",
|
"file" : "lib/SNMP/Info/Layer3/Dell.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::ERX" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/ERX.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Enterasys" : {
|
"SNMP::Info::Layer3::Enterasys" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
|
"file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Extreme" : {
|
"SNMP::Info::Layer3::Extreme" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Extreme.pm",
|
"file" : "lib/SNMP/Info/Layer3/Extreme.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::F5" : {
|
"SNMP::Info::Layer3::F5" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/F5.pm",
|
"file" : "lib/SNMP/Info/Layer3/F5.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Force10" : {
|
"SNMP::Info::Layer3::Force10" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Force10.pm",
|
"file" : "lib/SNMP/Info/Layer3/Force10.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Fortinet" : {
|
"SNMP::Info::Layer3::Fortinet" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
|
"file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Foundry" : {
|
"SNMP::Info::Layer3::Foundry" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Foundry.pm",
|
"file" : "lib/SNMP/Info/Layer3/Foundry.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Genua" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Genua.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::H3C" : {
|
"SNMP::Info::Layer3::H3C" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/H3C.pm",
|
"file" : "lib/SNMP/Info/Layer3/H3C.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::HP9300" : {
|
"SNMP::Info::Layer3::HP9300" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/HP9300.pm",
|
"file" : "lib/SNMP/Info/Layer3/HP9300.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Huawei" : {
|
"SNMP::Info::Layer3::Huawei" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Huawei.pm",
|
"file" : "lib/SNMP/Info/Layer3/Huawei.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::IBMGbTor" : {
|
"SNMP::Info::Layer3::IBMGbTor" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
|
"file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Juniper" : {
|
"SNMP::Info::Layer3::Juniper" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Juniper.pm",
|
"file" : "lib/SNMP/Info/Layer3/Juniper.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Lantronix" : {
|
"SNMP::Info::Layer3::Lantronix" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
|
"file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Lenovo" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Lenovo.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Microsoft" : {
|
"SNMP::Info::Layer3::Microsoft" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
|
"file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Mikrotik" : {
|
"SNMP::Info::Layer3::Mikrotik" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
|
"file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::N1600" : {
|
"SNMP::Info::Layer3::N1600" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/N1600.pm",
|
"file" : "lib/SNMP/Info/Layer3/N1600.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::NetSNMP" : {
|
"SNMP::Info::Layer3::NetSNMP" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
|
"file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Netscreen" : {
|
"SNMP::Info::Layer3::Netscreen" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
|
"file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Nexus" : {
|
"SNMP::Info::Layer3::Nexus" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Nexus.pm",
|
"file" : "lib/SNMP/Info/Layer3/Nexus.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::OneAccess" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/OneAccess.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::PacketFront" : {
|
"SNMP::Info::Layer3::PacketFront" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
|
"file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::PaloAlto" : {
|
"SNMP::Info::Layer3::PaloAlto" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
|
"file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Passport" : {
|
"SNMP::Info::Layer3::Passport" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Passport.pm",
|
"file" : "lib/SNMP/Info/Layer3/Passport.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Pf" : {
|
"SNMP::Info::Layer3::Pf" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Pf.pm",
|
"file" : "lib/SNMP/Info/Layer3/Pf.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Pica8" : {
|
"SNMP::Info::Layer3::Pica8" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Pica8.pm",
|
"file" : "lib/SNMP/Info/Layer3/Pica8.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Redlion" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Redlion.pm",
|
||||||
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Scalance" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Scalance.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::SonicWALL" : {
|
"SNMP::Info::Layer3::SonicWALL" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
|
"file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Steelhead" : {
|
"SNMP::Info::Layer3::Steelhead" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
|
"file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Sun" : {
|
"SNMP::Info::Layer3::Sun" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Sun.pm",
|
"file" : "lib/SNMP/Info/Layer3/Sun.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Tasman" : {
|
"SNMP::Info::Layer3::Tasman" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Tasman.pm",
|
"file" : "lib/SNMP/Info/Layer3/Tasman.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::Timetra" : {
|
"SNMP::Info::Layer3::Timetra" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/Timetra.pm",
|
"file" : "lib/SNMP/Info/Layer3/Timetra.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::VMware" : {
|
"SNMP::Info::Layer3::VMware" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/VMware.pm",
|
"file" : "lib/SNMP/Info/Layer3/VMware.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer3::VyOS" : {
|
"SNMP::Info::Layer3::VyOS" : {
|
||||||
"file" : "lib/SNMP/Info/Layer3/VyOS.pm",
|
"file" : "lib/SNMP/Info/Layer3/VyOS.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer7" : {
|
"SNMP::Info::Layer7" : {
|
||||||
"file" : "lib/SNMP/Info/Layer7.pm",
|
"file" : "lib/SNMP/Info/Layer7.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer7::APC" : {
|
"SNMP::Info::Layer7::APC" : {
|
||||||
"file" : "lib/SNMP/Info/Layer7/APC.pm",
|
"file" : "lib/SNMP/Info/Layer7/APC.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::Arbor" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/Arbor.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer7::CiscoIPS" : {
|
"SNMP::Info::Layer7::CiscoIPS" : {
|
||||||
"file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
|
"file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer7::Gigamon" : {
|
"SNMP::Info::Layer7::Gigamon" : {
|
||||||
"file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
|
"file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::Liebert" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/Liebert.pm",
|
||||||
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer7::Neoteris" : {
|
"SNMP::Info::Layer7::Neoteris" : {
|
||||||
"file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
|
"file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::Layer7::Netscaler" : {
|
"SNMP::Info::Layer7::Netscaler" : {
|
||||||
"file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
|
"file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::MAU" : {
|
"SNMP::Info::MAU" : {
|
||||||
"file" : "lib/SNMP/Info/MAU.pm",
|
"file" : "lib/SNMP/Info/MAU.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::MRO" : {
|
"SNMP::Info::MRO" : {
|
||||||
"file" : "lib/SNMP/Info/MRO.pm",
|
"file" : "lib/SNMP/Info/MRO.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::NortelStack" : {
|
"SNMP::Info::NortelStack" : {
|
||||||
"file" : "lib/SNMP/Info/NortelStack.pm",
|
"file" : "lib/SNMP/Info/NortelStack.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::PowerEthernet" : {
|
"SNMP::Info::PowerEthernet" : {
|
||||||
"file" : "lib/SNMP/Info/PowerEthernet.pm",
|
"file" : "lib/SNMP/Info/PowerEthernet.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::RapidCity" : {
|
"SNMP::Info::RapidCity" : {
|
||||||
"file" : "lib/SNMP/Info/RapidCity.pm",
|
"file" : "lib/SNMP/Info/RapidCity.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
},
|
},
|
||||||
"SNMP::Info::SONMP" : {
|
"SNMP::Info::SONMP" : {
|
||||||
"file" : "lib/SNMP/Info/SONMP.pm",
|
"file" : "lib/SNMP/Info/SONMP.pm",
|
||||||
"version" : "3.52"
|
"version" : "3.70"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"release_status" : "stable",
|
"release_status" : "stable",
|
||||||
@@ -524,7 +599,7 @@
|
|||||||
},
|
},
|
||||||
"homepage" : "http://netdisco.org/",
|
"homepage" : "http://netdisco.org/",
|
||||||
"license" : [
|
"license" : [
|
||||||
"http://opensource.org/licenses/BSD-3-Clause"
|
"http://opensource.org/licenses/bsd-license.php"
|
||||||
],
|
],
|
||||||
"repository" : {
|
"repository" : {
|
||||||
"url" : "https://github.com/netdisco/snmp-info"
|
"url" : "https://github.com/netdisco/snmp-info"
|
||||||
@@ -532,6 +607,6 @@
|
|||||||
"x_IRC" : "irc://irc.freenode.org/#netdisco",
|
"x_IRC" : "irc://irc.freenode.org/#netdisco",
|
||||||
"x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
|
"x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
|
||||||
},
|
},
|
||||||
"version" : "3.52",
|
"version" : "3.70",
|
||||||
"x_serialization_backend" : "JSON::PP version 2.94"
|
"x_serialization_backend" : "JSON::PP version 2.97001"
|
||||||
}
|
}
|
||||||
|
|||||||
301
META.yml
301
META.yml
@@ -3,7 +3,17 @@ abstract: 'OO Interface to Network devices and MIBs through SNMP'
|
|||||||
author:
|
author:
|
||||||
- 'Eric A. Miller <emiller@cpan.org>'
|
- 'Eric A. Miller <emiller@cpan.org>'
|
||||||
build_requires:
|
build_requires:
|
||||||
|
Class::Inspector: '0'
|
||||||
|
File::Find: '0'
|
||||||
|
File::Slurper: '0'
|
||||||
|
Hook::LexWrap: '0'
|
||||||
|
Module::Find: '0'
|
||||||
|
NetSNMP::default_store: '0'
|
||||||
|
Path::Class: '0'
|
||||||
|
Test::Class::Most: '0'
|
||||||
Test::Distribution: '0'
|
Test::Distribution: '0'
|
||||||
|
Test::Exception: '0.43'
|
||||||
|
Test::MockObject::Extends: '0'
|
||||||
Test::More: '0.88'
|
Test::More: '0.88'
|
||||||
configure_requires:
|
configure_requires:
|
||||||
Module::Build: '0.42'
|
Module::Build: '0.42'
|
||||||
@@ -17,361 +27,409 @@ name: SNMP-Info
|
|||||||
provides:
|
provides:
|
||||||
SNMP::Info:
|
SNMP::Info:
|
||||||
file: lib/SNMP/Info.pm
|
file: lib/SNMP/Info.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::AMAP:
|
SNMP::Info::AMAP:
|
||||||
file: lib/SNMP/Info/AMAP.pm
|
file: lib/SNMP/Info/AMAP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::AdslLine:
|
SNMP::Info::AdslLine:
|
||||||
file: lib/SNMP/Info/AdslLine.pm
|
file: lib/SNMP/Info/AdslLine.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Aggregate:
|
SNMP::Info::Aggregate:
|
||||||
file: lib/SNMP/Info/Aggregate.pm
|
file: lib/SNMP/Info/Aggregate.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Airespace:
|
SNMP::Info::Airespace:
|
||||||
file: lib/SNMP/Info/Airespace.pm
|
file: lib/SNMP/Info/Airespace.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Bridge:
|
SNMP::Info::Bridge:
|
||||||
file: lib/SNMP/Info/Bridge.pm
|
file: lib/SNMP/Info/Bridge.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CDP:
|
SNMP::Info::CDP:
|
||||||
file: lib/SNMP/Info/CDP.pm
|
file: lib/SNMP/Info/CDP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoAgg:
|
SNMP::Info::CiscoAgg:
|
||||||
file: lib/SNMP/Info/CiscoAgg.pm
|
file: lib/SNMP/Info/CiscoAgg.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoConfig:
|
SNMP::Info::CiscoConfig:
|
||||||
file: lib/SNMP/Info/CiscoConfig.pm
|
file: lib/SNMP/Info/CiscoConfig.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoPortSecurity:
|
SNMP::Info::CiscoPortSecurity:
|
||||||
file: lib/SNMP/Info/CiscoPortSecurity.pm
|
file: lib/SNMP/Info/CiscoPortSecurity.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoPower:
|
SNMP::Info::CiscoPower:
|
||||||
file: lib/SNMP/Info/CiscoPower.pm
|
file: lib/SNMP/Info/CiscoPower.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoQOS:
|
SNMP::Info::CiscoQOS:
|
||||||
file: lib/SNMP/Info/CiscoQOS.pm
|
file: lib/SNMP/Info/CiscoQOS.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoRTT:
|
SNMP::Info::CiscoRTT:
|
||||||
file: lib/SNMP/Info/CiscoRTT.pm
|
file: lib/SNMP/Info/CiscoRTT.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoStack:
|
SNMP::Info::CiscoStack:
|
||||||
file: lib/SNMP/Info/CiscoStack.pm
|
file: lib/SNMP/Info/CiscoStack.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoStats:
|
SNMP::Info::CiscoStats:
|
||||||
file: lib/SNMP/Info/CiscoStats.pm
|
file: lib/SNMP/Info/CiscoStats.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoStpExtensions:
|
SNMP::Info::CiscoStpExtensions:
|
||||||
file: lib/SNMP/Info/CiscoStpExtensions.pm
|
file: lib/SNMP/Info/CiscoStpExtensions.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::CiscoVTP:
|
SNMP::Info::CiscoVTP:
|
||||||
file: lib/SNMP/Info/CiscoVTP.pm
|
file: lib/SNMP/Info/CiscoVTP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::DocsisCM:
|
||||||
|
file: lib/SNMP/Info/DocsisCM.pm
|
||||||
|
version: '3.70'
|
||||||
|
SNMP::Info::DocsisHE:
|
||||||
|
file: lib/SNMP/Info/DocsisHE.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::EDP:
|
SNMP::Info::EDP:
|
||||||
file: lib/SNMP/Info/EDP.pm
|
file: lib/SNMP/Info/EDP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Entity:
|
SNMP::Info::Entity:
|
||||||
file: lib/SNMP/Info/Entity.pm
|
file: lib/SNMP/Info/Entity.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::EtherLike:
|
SNMP::Info::EtherLike:
|
||||||
file: lib/SNMP/Info/EtherLike.pm
|
file: lib/SNMP/Info/EtherLike.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::FDP:
|
SNMP::Info::FDP:
|
||||||
file: lib/SNMP/Info/FDP.pm
|
file: lib/SNMP/Info/FDP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::IEEE802dot11:
|
SNMP::Info::IEEE802dot11:
|
||||||
file: lib/SNMP/Info/IEEE802dot11.pm
|
file: lib/SNMP/Info/IEEE802dot11.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::IEEE802dot3ad:
|
SNMP::Info::IEEE802dot3ad:
|
||||||
file: lib/SNMP/Info/IEEE802dot3ad.pm
|
file: lib/SNMP/Info/IEEE802dot3ad.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::IPv6:
|
SNMP::Info::IPv6:
|
||||||
file: lib/SNMP/Info/IPv6.pm
|
file: lib/SNMP/Info/IPv6.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::LLDP:
|
SNMP::Info::LLDP:
|
||||||
file: lib/SNMP/Info/LLDP.pm
|
file: lib/SNMP/Info/LLDP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer1:
|
SNMP::Info::Layer1:
|
||||||
file: lib/SNMP/Info/Layer1.pm
|
file: lib/SNMP/Info/Layer1.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer1::Allied:
|
SNMP::Info::Layer1::Allied:
|
||||||
file: lib/SNMP/Info/Layer1/Allied.pm
|
file: lib/SNMP/Info/Layer1/Allied.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer1::Asante:
|
SNMP::Info::Layer1::Asante:
|
||||||
file: lib/SNMP/Info/Layer1/Asante.pm
|
file: lib/SNMP/Info/Layer1/Asante.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer1::Bayhub:
|
SNMP::Info::Layer1::Bayhub:
|
||||||
file: lib/SNMP/Info/Layer1/Bayhub.pm
|
file: lib/SNMP/Info/Layer1/Bayhub.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer1::Cyclades:
|
SNMP::Info::Layer1::Cyclades:
|
||||||
file: lib/SNMP/Info/Layer1/Cyclades.pm
|
file: lib/SNMP/Info/Layer1/Cyclades.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer1::S3000:
|
SNMP::Info::Layer1::S3000:
|
||||||
file: lib/SNMP/Info/Layer1/S3000.pm
|
file: lib/SNMP/Info/Layer1/S3000.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2:
|
SNMP::Info::Layer2:
|
||||||
file: lib/SNMP/Info/Layer2.pm
|
file: lib/SNMP/Info/Layer2.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::3Com:
|
SNMP::Info::Layer2::3Com:
|
||||||
file: lib/SNMP/Info/Layer2/3Com.pm
|
file: lib/SNMP/Info/Layer2/3Com.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Adtran:
|
SNMP::Info::Layer2::Adtran:
|
||||||
file: lib/SNMP/Info/Layer2/Adtran.pm
|
file: lib/SNMP/Info/Layer2/Adtran.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer2::Aerohive:
|
||||||
|
file: lib/SNMP/Info/Layer2/Aerohive.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Airespace:
|
SNMP::Info::Layer2::Airespace:
|
||||||
file: lib/SNMP/Info/Layer2/Airespace.pm
|
file: lib/SNMP/Info/Layer2/Airespace.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Aironet:
|
SNMP::Info::Layer2::Aironet:
|
||||||
file: lib/SNMP/Info/Layer2/Aironet.pm
|
file: lib/SNMP/Info/Layer2/Aironet.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Allied:
|
SNMP::Info::Layer2::Allied:
|
||||||
file: lib/SNMP/Info/Layer2/Allied.pm
|
file: lib/SNMP/Info/Layer2/Allied.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer2::Atmedia:
|
||||||
|
file: lib/SNMP/Info/Layer2/Atmedia.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Baystack:
|
SNMP::Info::Layer2::Baystack:
|
||||||
file: lib/SNMP/Info/Layer2/Baystack.pm
|
file: lib/SNMP/Info/Layer2/Baystack.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::C1900:
|
SNMP::Info::Layer2::C1900:
|
||||||
file: lib/SNMP/Info/Layer2/C1900.pm
|
file: lib/SNMP/Info/Layer2/C1900.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::C2900:
|
SNMP::Info::Layer2::C2900:
|
||||||
file: lib/SNMP/Info/Layer2/C2900.pm
|
file: lib/SNMP/Info/Layer2/C2900.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Catalyst:
|
SNMP::Info::Layer2::Catalyst:
|
||||||
file: lib/SNMP/Info/Layer2/Catalyst.pm
|
file: lib/SNMP/Info/Layer2/Catalyst.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Centillion:
|
SNMP::Info::Layer2::Centillion:
|
||||||
file: lib/SNMP/Info/Layer2/Centillion.pm
|
file: lib/SNMP/Info/Layer2/Centillion.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Cisco:
|
SNMP::Info::Layer2::Cisco:
|
||||||
file: lib/SNMP/Info/Layer2/Cisco.pm
|
file: lib/SNMP/Info/Layer2/Cisco.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::CiscoSB:
|
SNMP::Info::Layer2::CiscoSB:
|
||||||
file: lib/SNMP/Info/Layer2/CiscoSB.pm
|
file: lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer2::Exinda:
|
||||||
|
file: lib/SNMP/Info/Layer2/Exinda.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::HP:
|
SNMP::Info::Layer2::HP:
|
||||||
file: lib/SNMP/Info/Layer2/HP.pm
|
file: lib/SNMP/Info/Layer2/HP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::HP4000:
|
SNMP::Info::Layer2::HP4000:
|
||||||
file: lib/SNMP/Info/Layer2/HP4000.pm
|
file: lib/SNMP/Info/Layer2/HP4000.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::HPVC:
|
SNMP::Info::Layer2::HPVC:
|
||||||
file: lib/SNMP/Info/Layer2/HPVC.pm
|
file: lib/SNMP/Info/Layer2/HPVC.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Kentrox:
|
SNMP::Info::Layer2::Kentrox:
|
||||||
file: lib/SNMP/Info/Layer2/Kentrox.pm
|
file: lib/SNMP/Info/Layer2/Kentrox.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::N2270:
|
SNMP::Info::Layer2::N2270:
|
||||||
file: lib/SNMP/Info/Layer2/N2270.pm
|
file: lib/SNMP/Info/Layer2/N2270.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::NAP222x:
|
SNMP::Info::Layer2::NAP222x:
|
||||||
file: lib/SNMP/Info/Layer2/NAP222x.pm
|
file: lib/SNMP/Info/Layer2/NAP222x.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::NWSS2300:
|
SNMP::Info::Layer2::NWSS2300:
|
||||||
file: lib/SNMP/Info/Layer2/NWSS2300.pm
|
file: lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Netgear:
|
SNMP::Info::Layer2::Netgear:
|
||||||
file: lib/SNMP/Info/Layer2/Netgear.pm
|
file: lib/SNMP/Info/Layer2/Netgear.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer2::Nexans:
|
||||||
|
file: lib/SNMP/Info/Layer2/Nexans.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Orinoco:
|
SNMP::Info::Layer2::Orinoco:
|
||||||
file: lib/SNMP/Info/Layer2/Orinoco.pm
|
file: lib/SNMP/Info/Layer2/Orinoco.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer2::Sixnet:
|
||||||
|
file: lib/SNMP/Info/Layer2/Sixnet.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Trapeze:
|
SNMP::Info::Layer2::Trapeze:
|
||||||
file: lib/SNMP/Info/Layer2/Trapeze.pm
|
file: lib/SNMP/Info/Layer2/Trapeze.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::Ubiquiti:
|
SNMP::Info::Layer2::Ubiquiti:
|
||||||
file: lib/SNMP/Info/Layer2/Ubiquiti.pm
|
file: lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer2::ZyXEL_DSLAM:
|
SNMP::Info::Layer2::ZyXEL_DSLAM:
|
||||||
file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3:
|
SNMP::Info::Layer3:
|
||||||
file: lib/SNMP/Info/Layer3.pm
|
file: lib/SNMP/Info/Layer3.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Aironet:
|
SNMP::Info::Layer3::Aironet:
|
||||||
file: lib/SNMP/Info/Layer3/Aironet.pm
|
file: lib/SNMP/Info/Layer3/Aironet.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::AlcatelLucent:
|
SNMP::Info::Layer3::AlcatelLucent:
|
||||||
file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::AlteonAD:
|
SNMP::Info::Layer3::AlteonAD:
|
||||||
file: lib/SNMP/Info/Layer3/AlteonAD.pm
|
file: lib/SNMP/Info/Layer3/AlteonAD.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Altiga:
|
SNMP::Info::Layer3::Altiga:
|
||||||
file: lib/SNMP/Info/Layer3/Altiga.pm
|
file: lib/SNMP/Info/Layer3/Altiga.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Arista:
|
SNMP::Info::Layer3::Arista:
|
||||||
file: lib/SNMP/Info/Layer3/Arista.pm
|
file: lib/SNMP/Info/Layer3/Arista.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Aruba:
|
SNMP::Info::Layer3::Aruba:
|
||||||
file: lib/SNMP/Info/Layer3/Aruba.pm
|
file: lib/SNMP/Info/Layer3/Aruba.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::BayRS:
|
SNMP::Info::Layer3::BayRS:
|
||||||
file: lib/SNMP/Info/Layer3/BayRS.pm
|
file: lib/SNMP/Info/Layer3/BayRS.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::BlueCoatSG:
|
SNMP::Info::Layer3::BlueCoatSG:
|
||||||
file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::C3550:
|
SNMP::Info::Layer3::C3550:
|
||||||
file: lib/SNMP/Info/Layer3/C3550.pm
|
file: lib/SNMP/Info/Layer3/C3550.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::C4000:
|
SNMP::Info::Layer3::C4000:
|
||||||
file: lib/SNMP/Info/Layer3/C4000.pm
|
file: lib/SNMP/Info/Layer3/C4000.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::C6500:
|
SNMP::Info::Layer3::C6500:
|
||||||
file: lib/SNMP/Info/Layer3/C6500.pm
|
file: lib/SNMP/Info/Layer3/C6500.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::CheckPoint:
|
SNMP::Info::Layer3::CheckPoint:
|
||||||
file: lib/SNMP/Info/Layer3/CheckPoint.pm
|
file: lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::Ciena:
|
||||||
|
file: lib/SNMP/Info/Layer3/Ciena.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Cisco:
|
SNMP::Info::Layer3::Cisco:
|
||||||
file: lib/SNMP/Info/Layer3/Cisco.pm
|
file: lib/SNMP/Info/Layer3/Cisco.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::CiscoASA:
|
SNMP::Info::Layer3::CiscoASA:
|
||||||
file: lib/SNMP/Info/Layer3/CiscoASA.pm
|
file: lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::CiscoFWSM:
|
SNMP::Info::Layer3::CiscoFWSM:
|
||||||
file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::CiscoSwitch:
|
SNMP::Info::Layer3::CiscoSwitch:
|
||||||
file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Contivity:
|
SNMP::Info::Layer3::Contivity:
|
||||||
file: lib/SNMP/Info/Layer3/Contivity.pm
|
file: lib/SNMP/Info/Layer3/Contivity.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Cumulus:
|
SNMP::Info::Layer3::Cumulus:
|
||||||
file: lib/SNMP/Info/Layer3/Cumulus.pm
|
file: lib/SNMP/Info/Layer3/Cumulus.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::DLink:
|
SNMP::Info::Layer3::DLink:
|
||||||
file: lib/SNMP/Info/Layer3/DLink.pm
|
file: lib/SNMP/Info/Layer3/DLink.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Dell:
|
SNMP::Info::Layer3::Dell:
|
||||||
file: lib/SNMP/Info/Layer3/Dell.pm
|
file: lib/SNMP/Info/Layer3/Dell.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::ERX:
|
||||||
|
file: lib/SNMP/Info/Layer3/ERX.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Enterasys:
|
SNMP::Info::Layer3::Enterasys:
|
||||||
file: lib/SNMP/Info/Layer3/Enterasys.pm
|
file: lib/SNMP/Info/Layer3/Enterasys.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Extreme:
|
SNMP::Info::Layer3::Extreme:
|
||||||
file: lib/SNMP/Info/Layer3/Extreme.pm
|
file: lib/SNMP/Info/Layer3/Extreme.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::F5:
|
SNMP::Info::Layer3::F5:
|
||||||
file: lib/SNMP/Info/Layer3/F5.pm
|
file: lib/SNMP/Info/Layer3/F5.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Force10:
|
SNMP::Info::Layer3::Force10:
|
||||||
file: lib/SNMP/Info/Layer3/Force10.pm
|
file: lib/SNMP/Info/Layer3/Force10.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Fortinet:
|
SNMP::Info::Layer3::Fortinet:
|
||||||
file: lib/SNMP/Info/Layer3/Fortinet.pm
|
file: lib/SNMP/Info/Layer3/Fortinet.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Foundry:
|
SNMP::Info::Layer3::Foundry:
|
||||||
file: lib/SNMP/Info/Layer3/Foundry.pm
|
file: lib/SNMP/Info/Layer3/Foundry.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::Genua:
|
||||||
|
file: lib/SNMP/Info/Layer3/Genua.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::H3C:
|
SNMP::Info::Layer3::H3C:
|
||||||
file: lib/SNMP/Info/Layer3/H3C.pm
|
file: lib/SNMP/Info/Layer3/H3C.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::HP9300:
|
SNMP::Info::Layer3::HP9300:
|
||||||
file: lib/SNMP/Info/Layer3/HP9300.pm
|
file: lib/SNMP/Info/Layer3/HP9300.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Huawei:
|
SNMP::Info::Layer3::Huawei:
|
||||||
file: lib/SNMP/Info/Layer3/Huawei.pm
|
file: lib/SNMP/Info/Layer3/Huawei.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::IBMGbTor:
|
SNMP::Info::Layer3::IBMGbTor:
|
||||||
file: lib/SNMP/Info/Layer3/IBMGbTor.pm
|
file: lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Juniper:
|
SNMP::Info::Layer3::Juniper:
|
||||||
file: lib/SNMP/Info/Layer3/Juniper.pm
|
file: lib/SNMP/Info/Layer3/Juniper.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Lantronix:
|
SNMP::Info::Layer3::Lantronix:
|
||||||
file: lib/SNMP/Info/Layer3/Lantronix.pm
|
file: lib/SNMP/Info/Layer3/Lantronix.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::Lenovo:
|
||||||
|
file: lib/SNMP/Info/Layer3/Lenovo.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Microsoft:
|
SNMP::Info::Layer3::Microsoft:
|
||||||
file: lib/SNMP/Info/Layer3/Microsoft.pm
|
file: lib/SNMP/Info/Layer3/Microsoft.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Mikrotik:
|
SNMP::Info::Layer3::Mikrotik:
|
||||||
file: lib/SNMP/Info/Layer3/Mikrotik.pm
|
file: lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::N1600:
|
SNMP::Info::Layer3::N1600:
|
||||||
file: lib/SNMP/Info/Layer3/N1600.pm
|
file: lib/SNMP/Info/Layer3/N1600.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::NetSNMP:
|
SNMP::Info::Layer3::NetSNMP:
|
||||||
file: lib/SNMP/Info/Layer3/NetSNMP.pm
|
file: lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Netscreen:
|
SNMP::Info::Layer3::Netscreen:
|
||||||
file: lib/SNMP/Info/Layer3/Netscreen.pm
|
file: lib/SNMP/Info/Layer3/Netscreen.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Nexus:
|
SNMP::Info::Layer3::Nexus:
|
||||||
file: lib/SNMP/Info/Layer3/Nexus.pm
|
file: lib/SNMP/Info/Layer3/Nexus.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::OneAccess:
|
||||||
|
file: lib/SNMP/Info/Layer3/OneAccess.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::PacketFront:
|
SNMP::Info::Layer3::PacketFront:
|
||||||
file: lib/SNMP/Info/Layer3/PacketFront.pm
|
file: lib/SNMP/Info/Layer3/PacketFront.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::PaloAlto:
|
SNMP::Info::Layer3::PaloAlto:
|
||||||
file: lib/SNMP/Info/Layer3/PaloAlto.pm
|
file: lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Passport:
|
SNMP::Info::Layer3::Passport:
|
||||||
file: lib/SNMP/Info/Layer3/Passport.pm
|
file: lib/SNMP/Info/Layer3/Passport.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Pf:
|
SNMP::Info::Layer3::Pf:
|
||||||
file: lib/SNMP/Info/Layer3/Pf.pm
|
file: lib/SNMP/Info/Layer3/Pf.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Pica8:
|
SNMP::Info::Layer3::Pica8:
|
||||||
file: lib/SNMP/Info/Layer3/Pica8.pm
|
file: lib/SNMP/Info/Layer3/Pica8.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::Redlion:
|
||||||
|
file: lib/SNMP/Info/Layer3/Redlion.pm
|
||||||
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer3::Scalance:
|
||||||
|
file: lib/SNMP/Info/Layer3/Scalance.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::SonicWALL:
|
SNMP::Info::Layer3::SonicWALL:
|
||||||
file: lib/SNMP/Info/Layer3/SonicWALL.pm
|
file: lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Steelhead:
|
SNMP::Info::Layer3::Steelhead:
|
||||||
file: lib/SNMP/Info/Layer3/Steelhead.pm
|
file: lib/SNMP/Info/Layer3/Steelhead.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Sun:
|
SNMP::Info::Layer3::Sun:
|
||||||
file: lib/SNMP/Info/Layer3/Sun.pm
|
file: lib/SNMP/Info/Layer3/Sun.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Tasman:
|
SNMP::Info::Layer3::Tasman:
|
||||||
file: lib/SNMP/Info/Layer3/Tasman.pm
|
file: lib/SNMP/Info/Layer3/Tasman.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::Timetra:
|
SNMP::Info::Layer3::Timetra:
|
||||||
file: lib/SNMP/Info/Layer3/Timetra.pm
|
file: lib/SNMP/Info/Layer3/Timetra.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::VMware:
|
SNMP::Info::Layer3::VMware:
|
||||||
file: lib/SNMP/Info/Layer3/VMware.pm
|
file: lib/SNMP/Info/Layer3/VMware.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer3::VyOS:
|
SNMP::Info::Layer3::VyOS:
|
||||||
file: lib/SNMP/Info/Layer3/VyOS.pm
|
file: lib/SNMP/Info/Layer3/VyOS.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer7:
|
SNMP::Info::Layer7:
|
||||||
file: lib/SNMP/Info/Layer7.pm
|
file: lib/SNMP/Info/Layer7.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer7::APC:
|
SNMP::Info::Layer7::APC:
|
||||||
file: lib/SNMP/Info/Layer7/APC.pm
|
file: lib/SNMP/Info/Layer7/APC.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer7::Arbor:
|
||||||
|
file: lib/SNMP/Info/Layer7/Arbor.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer7::CiscoIPS:
|
SNMP::Info::Layer7::CiscoIPS:
|
||||||
file: lib/SNMP/Info/Layer7/CiscoIPS.pm
|
file: lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer7::Gigamon:
|
SNMP::Info::Layer7::Gigamon:
|
||||||
file: lib/SNMP/Info/Layer7/Gigamon.pm
|
file: lib/SNMP/Info/Layer7/Gigamon.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
|
SNMP::Info::Layer7::Liebert:
|
||||||
|
file: lib/SNMP/Info/Layer7/Liebert.pm
|
||||||
|
version: '3.70'
|
||||||
SNMP::Info::Layer7::Neoteris:
|
SNMP::Info::Layer7::Neoteris:
|
||||||
file: lib/SNMP/Info/Layer7/Neoteris.pm
|
file: lib/SNMP/Info/Layer7/Neoteris.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::Layer7::Netscaler:
|
SNMP::Info::Layer7::Netscaler:
|
||||||
file: lib/SNMP/Info/Layer7/Netscaler.pm
|
file: lib/SNMP/Info/Layer7/Netscaler.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::MAU:
|
SNMP::Info::MAU:
|
||||||
file: lib/SNMP/Info/MAU.pm
|
file: lib/SNMP/Info/MAU.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::MRO:
|
SNMP::Info::MRO:
|
||||||
file: lib/SNMP/Info/MRO.pm
|
file: lib/SNMP/Info/MRO.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::NortelStack:
|
SNMP::Info::NortelStack:
|
||||||
file: lib/SNMP/Info/NortelStack.pm
|
file: lib/SNMP/Info/NortelStack.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::PowerEthernet:
|
SNMP::Info::PowerEthernet:
|
||||||
file: lib/SNMP/Info/PowerEthernet.pm
|
file: lib/SNMP/Info/PowerEthernet.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::RapidCity:
|
SNMP::Info::RapidCity:
|
||||||
file: lib/SNMP/Info/RapidCity.pm
|
file: lib/SNMP/Info/RapidCity.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
SNMP::Info::SONMP:
|
SNMP::Info::SONMP:
|
||||||
file: lib/SNMP/Info/SONMP.pm
|
file: lib/SNMP/Info/SONMP.pm
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
recommends:
|
recommends:
|
||||||
Class::ISA: '0'
|
Class::ISA: '0'
|
||||||
File::Slurp: '0'
|
File::Slurp: '0'
|
||||||
@@ -380,13 +438,14 @@ recommends:
|
|||||||
PPI: '0'
|
PPI: '0'
|
||||||
requires:
|
requires:
|
||||||
Math::BigInt: '0'
|
Math::BigInt: '0'
|
||||||
|
NetAddr::IP: '4.068'
|
||||||
SNMP: '0'
|
SNMP: '0'
|
||||||
resources:
|
resources:
|
||||||
IRC: irc://irc.freenode.org/#netdisco
|
IRC: irc://irc.freenode.org/#netdisco
|
||||||
MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
|
MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
|
||||||
bugtracker: https://github.com/netdisco/snmp-info/issues
|
bugtracker: https://github.com/netdisco/snmp-info/issues
|
||||||
homepage: http://netdisco.org/
|
homepage: http://netdisco.org/
|
||||||
license: http://opensource.org/licenses/BSD-3-Clause
|
license: http://opensource.org/licenses/bsd-license.php
|
||||||
repository: https://github.com/netdisco/snmp-info
|
repository: https://github.com/netdisco/snmp-info
|
||||||
version: '3.52'
|
version: '3.70'
|
||||||
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
||||||
|
|||||||
@@ -6,23 +6,28 @@ Coding Guidelines:
|
|||||||
- always update ChangeLog before committing
|
- always update ChangeLog before committing
|
||||||
- check-in required mibs to netdisco-mibs and release new package if needed
|
- check-in required mibs to netdisco-mibs and release new package if needed
|
||||||
|
|
||||||
Release and Testing Instructions:
|
Release and Testing Instructions:
|
||||||
- Please see misc/RELEASE in Netdisco
|
- for netdisco see:
|
||||||
( http://netdisco.cvs.sourceforge.net/viewvc/netdisco/misc/RELEASE?view=markup )
|
-> https://github.com/netdisco/netdisco/wiki/Developing
|
||||||
and follow all testing and release guidelines
|
-> https://metacpan.org/pod/App::Netdisco
|
||||||
|
- for snmp::info see:
|
||||||
|
-> https://github.com/netdisco/snmp-info/wiki/Release-Process
|
||||||
|
-> https://metacpan.org/pod/SNMP::Info#EXTENDING-SNMP::INFO
|
||||||
|
- for netdisco-mibs see:
|
||||||
|
-> https://github.com/netdisco/netdisco-mibs/wiki
|
||||||
|
|
||||||
FAQ:
|
FAQ:
|
||||||
- Do I have to update the version number and timestamp in modified files before committing?
|
- Do I have to update the version number and timestamp in modified files before committing?
|
||||||
-> No. These are RCS tags that are automatically updated by CVS when you commit
|
-> No. These are RCS tags that are automatically updated by CVS when you commit
|
||||||
|
|
||||||
- Should I add changes at the top of the ChangeLog?
|
- Should I add changes at the top of the ChangeLog?
|
||||||
-> Yes. The changelog is created one commit at a time. If there isn't a
|
-> Yes. The changelog is created one commit at a time. If there isn't a
|
||||||
section for the current version, then add one at the top and put your
|
section for the current version, then add one at the top and put your
|
||||||
changes after. You can leave the date field for the release empty ().
|
changes after. You can leave the date field for the release empty ().
|
||||||
|
|
||||||
- What should I change the $VERSION to?
|
- What should I change the $VERSION to?
|
||||||
-> If you are the first person to get to a file after a release, update it
|
-> If you are the first person to get to a file after a release, update it
|
||||||
to either release++ or "release++ dash cvs".
|
to either release++ or "release++ dash cvs".
|
||||||
Example: File is marked 2.01, change it to 2.02-cvs with your new changes.
|
Example: File is marked 2.01, change it to 2.02-cvs with your new changes.
|
||||||
Example: File is marked 2.02-cvs, no change until packaging for release when the -cvs is removed.
|
Example: File is marked 2.02-cvs, no change until packaging for release when the -cvs is removed.
|
||||||
TODO: Is there still an odd/even scheme as introduced by Eric?
|
TODO: Is there still an odd/even scheme as introduced by Eric?
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ if ($@) {
|
|||||||
} else {
|
} else {
|
||||||
$graph{$vendor}->{$family}=[];
|
$graph{$vendor}->{$family}=[];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my $now = scalar localtime;
|
my $now = scalar localtime;
|
||||||
@@ -83,7 +83,7 @@ foreach my $vendor (sort sort_nocase keys %$matrix){
|
|||||||
} elsif (defined $vendor_defaults->{$a}){
|
} elsif (defined $vendor_defaults->{$a}){
|
||||||
$val = $vendor_defaults->{$a};
|
$val = $vendor_defaults->{$a};
|
||||||
$class = 'vendor';
|
$class = 'vendor';
|
||||||
}
|
}
|
||||||
print " <TD CLASS='$class'>",join("<BR>\n",@$val),"</TD>\n";
|
print " <TD CLASS='$class'>",join("<BR>\n",@$val),"</TD>\n";
|
||||||
}
|
}
|
||||||
print "</TR></TABLE>\n";
|
print "</TR></TABLE>\n";
|
||||||
@@ -141,7 +141,7 @@ sub parse_data {
|
|||||||
|
|
||||||
my ($cmd,$value);
|
my ($cmd,$value);
|
||||||
if ($line =~ /^([a-z-_]+)\s*:\s*(.*)$/) {
|
if ($line =~ /^([a-z-_]+)\s*:\s*(.*)$/) {
|
||||||
$cmd = $1; $value = $2;
|
$cmd = $1; $value = $2;
|
||||||
} else {
|
} else {
|
||||||
print "What do i do with this line : $line \n";
|
print "What do i do with this line : $line \n";
|
||||||
next;
|
next;
|
||||||
@@ -164,18 +164,18 @@ sub parse_data {
|
|||||||
$family = $value;
|
$family = $value;
|
||||||
$model = undef;
|
$model = undef;
|
||||||
print "$family has no vendor.\n" unless defined $vendor;
|
print "$family has no vendor.\n" unless defined $vendor;
|
||||||
$Matrix->{$vendor}->{families}->{$family} = {}
|
$Matrix->{$vendor}->{families}->{$family} = {}
|
||||||
unless defined $Matrix->{$vendor}->{families}->{$family};
|
unless defined $Matrix->{$vendor}->{families}->{$family};
|
||||||
$class = $Matrix->{$vendor}->{families}->{$family};
|
$class = $Matrix->{$vendor}->{families}->{$family};
|
||||||
$class->{defaults}->{type}='family';
|
$class->{defaults}->{type}='family';
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cmd eq 'device') {
|
if ($cmd eq 'device') {
|
||||||
$model = $value;
|
$model = $value;
|
||||||
print "$model has no family.\n" unless defined $family;
|
print "$model has no family.\n" unless defined $family;
|
||||||
print "$model has no vendor.\n" unless defined $vendor;
|
print "$model has no vendor.\n" unless defined $vendor;
|
||||||
$Matrix->{$vendor}->{families}->{$family}->{models}->{$model} = {}
|
$Matrix->{$vendor}->{families}->{$family}->{models}->{$model} = {}
|
||||||
unless defined $Matrix->{$vendor}->{families}->{$family}->{models}->{$model};
|
unless defined $Matrix->{$vendor}->{families}->{$family}->{models}->{$model};
|
||||||
$class = $Matrix->{$vendor}->{families}->{$family}->{models}->{$model};
|
$class = $Matrix->{$vendor}->{families}->{$family}->{models}->{$model};
|
||||||
$class->{defaults}->{type}='device';
|
$class->{defaults}->{type}='device';
|
||||||
@@ -233,7 +233,7 @@ sub html_head {
|
|||||||
.vendor { font-size:12pt; color:#777777; }
|
.vendor { font-size:12pt; color:#777777; }
|
||||||
.family { font-size:12pt; color:blue; }
|
.family { font-size:12pt; color:blue; }
|
||||||
.model { font-size:12pt; color:red; }
|
.model { font-size:12pt; color:red; }
|
||||||
.note { color:red; }
|
.note { color:red; }
|
||||||
//-->
|
//-->
|
||||||
</STYLE>
|
</STYLE>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
@@ -304,7 +304,7 @@ be assumed working.
|
|||||||
Discovery Protocol (LLDP), Cisco Discovery Protocol (CDP),
|
Discovery Protocol (LLDP), Cisco Discovery Protocol (CDP),
|
||||||
SynOptics/Bay/Nortel/Avaya Network Management Protocol (SONMP),
|
SynOptics/Bay/Nortel/Avaya Network Management Protocol (SONMP),
|
||||||
Foundry/Brocade Discovery Protocol (FDP), Extreme Discovery
|
Foundry/Brocade Discovery Protocol (FDP), Extreme Discovery
|
||||||
Protocol (EDP), and Alcatel Mapping Adjacency Protocol (AMAP).
|
Protocol (EDP), and Alcatel Mapping Adjacency Protocol (AMAP).
|
||||||
</TD>
|
</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR>
|
<TR>
|
||||||
@@ -325,7 +325,7 @@ be assumed working.
|
|||||||
</BODY>
|
</BODY>
|
||||||
</HTML>
|
</HTML>
|
||||||
end_tail
|
end_tail
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub print_headers {
|
sub print_headers {
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ unless ( defined $sysdescr ) {
|
|||||||
|
|
||||||
SNMP::loadModules(@ARGV);
|
SNMP::loadModules(@ARGV);
|
||||||
|
|
||||||
# Create a hash of MIB Modules for which we want results
|
# Create a hash of MIB Modules for which we want results
|
||||||
my %mib_hash = map {$_ => 1} @ARGV;
|
my %mib_hash = map {$_ => 1} @ARGV;
|
||||||
# Add the common MIB Modules we always want
|
# Add the common MIB Modules we always want
|
||||||
my @common_mibs = ('SNMPv2-MIB', 'IF-MIB');
|
my @common_mibs = ('SNMPv2-MIB', 'IF-MIB');
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ sub glob_rec {
|
|||||||
|
|
||||||
foreach my $f (@files) {
|
foreach my $f (@files) {
|
||||||
next if $f eq '\.$';
|
next if $f eq '\.$';
|
||||||
|
|
||||||
if (-d $f) {
|
if (-d $f) {
|
||||||
push @pms, glob_rec($f);
|
push @pms, glob_rec($f);
|
||||||
next;
|
next;
|
||||||
|
|||||||
@@ -250,11 +250,11 @@ test_class.pl [options]
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
-c|class SNMP::Info class to use, Layer2::Catalyst
|
-c|class SNMP::Info class to use, Layer2::Catalyst
|
||||||
-d|dev Device
|
-d|dev Device
|
||||||
-s|comm SNMP community
|
-s|comm SNMP community
|
||||||
-v|ver SNMP version
|
-v|ver SNMP version
|
||||||
-p|print Print values
|
-p|print Print values
|
||||||
-i|ignore Ignore Net-SNMP configuration file
|
-i|ignore Ignore Net-SNMP configuration file
|
||||||
-m|mibdir Directory containing MIB Files
|
-m|mibdir Directory containing MIB Files
|
||||||
-n|nobulk Disable bulkwalk
|
-n|nobulk Disable bulkwalk
|
||||||
@@ -294,7 +294,7 @@ SNMP version. Default 2.
|
|||||||
=item B<-print>
|
=item B<-print>
|
||||||
|
|
||||||
Print values of a class method rather than summarizing. May be repeated
|
Print values of a class method rather than summarizing. May be repeated
|
||||||
multiple times.
|
multiple times.
|
||||||
|
|
||||||
-print i_description -print i_type
|
-print i_description -print i_type
|
||||||
|
|
||||||
@@ -308,7 +308,7 @@ provided.
|
|||||||
=item B<-mibdir>
|
=item B<-mibdir>
|
||||||
|
|
||||||
Directory containing MIB Files. Multiple directories should be separated by a
|
Directory containing MIB Files. Multiple directories should be separated by a
|
||||||
colon ':'.
|
colon ':'.
|
||||||
|
|
||||||
-mibdir /usr/local/share/snmp/mibs/rfc:/usr/local/share/snmp/mibs/net-snmp
|
-mibdir /usr/local/share/snmp/mibs/rfc:/usr/local/share/snmp/mibs/net-snmp
|
||||||
|
|
||||||
|
|||||||
@@ -385,9 +385,9 @@ test_class_mocked.pl [options]
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
-class SNMP::Info class to use, Layer2::Catalyst
|
-class SNMP::Info class to use, Layer2::Catalyst
|
||||||
-file File containing data gathered using make_snmpdata.pl
|
-file File containing data gathered using make_snmpdata.pl
|
||||||
-print Print values
|
-print Print values
|
||||||
-debug Debugging flag
|
-debug Debugging flag
|
||||||
-ignore Ignore Net-SNMP configuration file
|
-ignore Ignore Net-SNMP configuration file
|
||||||
-mibdir Directory containing MIB Files
|
-mibdir Directory containing MIB Files
|
||||||
@@ -414,7 +414,7 @@ mandatory option.
|
|||||||
=item B<-print>
|
=item B<-print>
|
||||||
|
|
||||||
Print values of a class method rather than summarizing. May be repeated
|
Print values of a class method rather than summarizing. May be repeated
|
||||||
multiple times.
|
multiple times.
|
||||||
|
|
||||||
-print i_description -print i_type
|
-print i_description -print i_type
|
||||||
|
|
||||||
@@ -434,7 +434,7 @@ provided.
|
|||||||
=item B<-mibdir>
|
=item B<-mibdir>
|
||||||
|
|
||||||
Directory containing MIB Files. Multiple directories should be separated by a
|
Directory containing MIB Files. Multiple directories should be separated by a
|
||||||
colon ':'.
|
colon ':'.
|
||||||
|
|
||||||
-mibdir /usr/local/share/snmp/mibs/rfc:/usr/local/share/snmp/mibs/net-snmp
|
-mibdir /usr/local/share/snmp/mibs/rfc:/usr/local/share/snmp/mibs/net-snmp
|
||||||
|
|
||||||
|
|||||||
951
lib/SNMP/Info.pm
951
lib/SNMP/Info.pm
File diff suppressed because it is too large
Load Diff
@@ -30,26 +30,27 @@
|
|||||||
package SNMP::Info::AMAP;
|
package SNMP::Info::AMAP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::LLDP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::AMAP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
|
@SNMP::Info::AMAP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS
|
%MIBS = (
|
||||||
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType',
|
||||||
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
|
# ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB::aipAMAPRemHostname
|
||||||
# EXTREME-EDP-MIB::extremeEdpTable
|
|
||||||
'amap_rem_sysname' => 'aipAMAPRemHostname',
|
'amap_rem_sysname' => 'aipAMAPRemHostname',
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -91,7 +92,7 @@ sub _conn_table_mac {
|
|||||||
# address since they should all originate from the same device, but we don't
|
# address since they should all originate from the same device, but we don't
|
||||||
# know if they would all be reachable from the network management application.
|
# know if they would all be reachable from the network management application.
|
||||||
#
|
#
|
||||||
# We don't inplement partials since this is private index function
|
# We don't implement partials since this is private index function
|
||||||
sub _amap_index {
|
sub _amap_index {
|
||||||
my $amap = shift;
|
my $amap = shift;
|
||||||
|
|
||||||
@@ -240,10 +241,10 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $amap = new SNMP::Info (
|
my $amap = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
@@ -253,7 +254,7 @@ Eric Miller
|
|||||||
|
|
||||||
$hasamap = $amap->hasAMAP() ? 'yes' : 'no';
|
$hasamap = $amap->hasAMAP() ? 'yes' : 'no';
|
||||||
|
|
||||||
# Print out a map of device ports with LLDP neighbors:
|
# Print out a map of device ports with AMAP neighbors:
|
||||||
my $interfaces = $amap->interfaces();
|
my $interfaces = $amap->interfaces();
|
||||||
my $amap_if = $amap->amap_if();
|
my $amap_if = $amap->amap_if();
|
||||||
my $amap_ip = $amap->amap_ip();
|
my $amap_ip = $amap->amap_ip();
|
||||||
@@ -269,7 +270,7 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::AMAP is a subclass of SNMP::Info that provides an object oriented
|
SNMP::Info::AMAP is a subclass of SNMP::Info that provides an object oriented
|
||||||
interface to Alcatel Mapping Adjacency Protocol (AMAP) information through
|
interface to Alcatel Mapping Adjacency Protocol (AMAP) information through
|
||||||
SNMP.
|
SNMP.
|
||||||
|
|
||||||
@@ -291,7 +292,7 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -299,7 +300,7 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $amap->hasAMAP()
|
=item $amap->hasAMAP()
|
||||||
|
|
||||||
Is AMAP is active in this device?
|
Is AMAP is active in this device?
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -322,7 +323,7 @@ Returns the mapping to the SNMP Interface Table.
|
|||||||
|
|
||||||
Returns remote IPv4 addresses. Note: AMAP returns all IP addresses associated
|
Returns remote IPv4 addresses. Note: AMAP returns all IP addresses associated
|
||||||
with the remote device. It would be preferable to include only one address
|
with the remote device. It would be preferable to include only one address
|
||||||
since they should all originate from the same device, but amap_ip() can not
|
since they should all originate from the same device, but amap_ip() can not
|
||||||
determine if all addresses are reachable from the network management
|
determine if all addresses are reachable from the network management
|
||||||
application therefore all addresses are returned and the calling application
|
application therefore all addresses are returned and the calling application
|
||||||
must determine which address to use and if they are in fact from the same
|
must determine which address to use and if they are in fact from the same
|
||||||
|
|||||||
@@ -30,15 +30,16 @@
|
|||||||
package SNMP::Info::AdslLine;
|
package SNMP::Info::AdslLine;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::AdslLine::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::AdslLine::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::AdslLine::EXPORT_OK = qw//;
|
@SNMP::Info::AdslLine::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ $VERSION = '3.52';
|
|||||||
'adsl_atuc_curr_tx_rate' => 'adslAtucChanCurrTxRate',
|
'adsl_atuc_curr_tx_rate' => 'adslAtucChanCurrTxRate',
|
||||||
'adsl_atuc_prev_tx_rate' => 'adslAtucChanPrevTxRate',
|
'adsl_atuc_prev_tx_rate' => 'adslAtucChanPrevTxRate',
|
||||||
'adsl_atuc_crc_block_len' => 'adslAtucChanCrcBlockLength',
|
'adsl_atuc_crc_block_len' => 'adslAtucChanCrcBlockLength',
|
||||||
|
|
||||||
# ADSL-LINE-MIB::adslAturChanTable
|
# ADSL-LINE-MIB::adslAturChanTable
|
||||||
'adsl_atur_interleave_delay' => 'adslAturChanInterleaveDelay',
|
'adsl_atur_interleave_delay' => 'adslAturChanInterleaveDelay',
|
||||||
'adsl_atur_curr_tx_rate' => 'adslAturChanCurrTxRate',
|
'adsl_atur_curr_tx_rate' => 'adslAturChanCurrTxRate',
|
||||||
@@ -73,14 +74,14 @@ Alexander Hartmaier
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $info = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $info->class();
|
my $class = $info->class();
|
||||||
@@ -88,7 +89,7 @@ Alexander Hartmaier
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::AdslLine is a subclass of SNMP::Info that provides
|
SNMP::Info::AdslLine is a subclass of SNMP::Info that provides
|
||||||
information about the adsl interfaces of a device.
|
information about the adsl interfaces of a device.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
@@ -105,8 +106,6 @@ none.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|||||||
@@ -30,17 +30,19 @@
|
|||||||
package SNMP::Info::Aggregate;
|
package SNMP::Info::Aggregate;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::Aggregate::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::Aggregate::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Aggregate::EXPORT_OK = qw/agg_ports_ifstack/;
|
@SNMP::Info::Aggregate::EXPORT_OK = qw/agg_ports_ifstack/;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (); # IF-MIB
|
# Load MIB for leafs referenced within class
|
||||||
|
%MIBS = ('IF-MIB' => 'ifIndex',);
|
||||||
|
|
||||||
%GLOBALS = ();
|
%GLOBALS = ();
|
||||||
|
|
||||||
@@ -83,14 +85,14 @@ SNMP::Info Developers
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $info = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $info->class();
|
my $class = $info->class();
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Airespace
|
# SNMP::Info::Airespace
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::Airespace;
|
package SNMP::Info::Airespace;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::Airespace::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::Airespace::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Airespace::EXPORT_OK = qw//;
|
@SNMP::Info::Airespace::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -84,7 +84,7 @@ $VERSION = '3.52';
|
|||||||
'airespace_ess_ifname' => 'bsnDot11EssInterfaceName',
|
'airespace_ess_ifname' => 'bsnDot11EssInterfaceName',
|
||||||
'airespace_ess_aclname' => 'bsnDot11EssAclName',
|
'airespace_ess_aclname' => 'bsnDot11EssAclName',
|
||||||
'airespace_ess_bcast' => 'bsnDot11EssBroadcastSsid',
|
'airespace_ess_bcast' => 'bsnDot11EssBroadcastSsid',
|
||||||
|
|
||||||
# AIRESPACE-WIRELESS-MIB::bsnAPTable
|
# AIRESPACE-WIRELESS-MIB::bsnAPTable
|
||||||
'airespace_ap_mac' => 'bsnAPDot3MacAddress',
|
'airespace_ap_mac' => 'bsnAPDot3MacAddress',
|
||||||
'airespace_ap_name' => 'bsnAPName',
|
'airespace_ap_name' => 'bsnAPName',
|
||||||
@@ -508,8 +508,8 @@ sub ip_index {
|
|||||||
my $airespace = shift;
|
my $airespace = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $ip_index = $airespace->orig_ip_index($partial) || {};
|
my $ip_index = $airespace->SUPER::ip_index($partial) || {};
|
||||||
my $if_ip = $airespace->airespace_if_ip() || {};
|
my $if_ip = $airespace->airespace_if_ip() || {};
|
||||||
|
|
||||||
my %ip_index;
|
my %ip_index;
|
||||||
foreach my $ip ( keys %$ip_index ) {
|
foreach my $ip ( keys %$ip_index ) {
|
||||||
@@ -534,9 +534,9 @@ sub ip_netmask {
|
|||||||
my $airespace = shift;
|
my $airespace = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $ip_mask = $airespace->orig_ip_netmask($partial) || {};
|
my $ip_mask = $airespace->SUPER::ip_netmask($partial) || {};
|
||||||
my $if_ip = $airespace->airespace_if_ip() || {};
|
my $if_ip = $airespace->airespace_if_ip() || {};
|
||||||
my $if_mask = $airespace->airespace_if_mask() || {};
|
my $if_mask = $airespace->airespace_if_mask() || {};
|
||||||
|
|
||||||
my %ip_netmask;
|
my %ip_netmask;
|
||||||
foreach my $ip ( keys %$ip_mask ) {
|
foreach my $ip ( keys %$ip_mask ) {
|
||||||
@@ -764,14 +764,14 @@ sub dot11_cur_tx_pwr_mw {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
my $cur = $airespace->airespace_apif_power($partial);
|
my $cur = $airespace->airespace_apif_power($partial);
|
||||||
my $pwr_abs = $airespace->airespace_apif_a_pwr($partial);
|
my $pwr_abs = $airespace->airespace_apif_a_pwr($partial);
|
||||||
|
|
||||||
my $dot11_cur_tx_pwr_mw = {};
|
my $dot11_cur_tx_pwr_mw = {};
|
||||||
foreach my $idx ( keys %$cur ) {
|
foreach my $idx ( keys %$cur ) {
|
||||||
my $pwr = $cur->{$idx};
|
my $pwr = $cur->{$idx};
|
||||||
if ( $pwr >= 1 && $pwr <= 8 ) {
|
if ( $pwr >= 1 && $pwr <= 8 ) {
|
||||||
|
|
||||||
my @pwr_list = split(/,/, $pwr_abs->{$idx} );
|
my @pwr_list = split(/,/, $pwr_abs->{$idx} );
|
||||||
$dot11_cur_tx_pwr_mw->{$idx} = $pwr_list[$pwr-1];
|
$dot11_cur_tx_pwr_mw->{$idx} = $pwr_list[$pwr-1];
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1087,7 +1087,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -1204,7 +1204,7 @@ valid only when the Transfer Mode is tftp.
|
|||||||
=item $airespace->airespace_ul_path()
|
=item $airespace->airespace_ul_path()
|
||||||
|
|
||||||
Transfer upload tftp path configures the directory path where the file is to
|
Transfer upload tftp path configures the directory path where the file is to
|
||||||
be uploaded to. The switch remembers the last file path used.
|
be uploaded to. The switch remembers the last file path used.
|
||||||
|
|
||||||
(C<agentTransferUploadPath>)
|
(C<agentTransferUploadPath>)
|
||||||
|
|
||||||
@@ -1279,7 +1279,7 @@ radio interface.
|
|||||||
=item $airespace->i_ssidmac()
|
=item $airespace->i_ssidmac()
|
||||||
|
|
||||||
With the same keys as i_ssidlist, returns the Basic service set
|
With the same keys as i_ssidlist, returns the Basic service set
|
||||||
identification (BSSID), MAC address, the AP is using for the SSID.
|
identification (BSSID), MAC address, the AP is using for the SSID.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -1346,7 +1346,7 @@ Name of the interface used by this WLAN.
|
|||||||
Name of ACL for the WLAN. This is applicable only when Web Authentication is
|
Name of ACL for the WLAN. This is applicable only when Web Authentication is
|
||||||
enabled.
|
enabled.
|
||||||
|
|
||||||
(C<bsnDot11EssAclName>)
|
(C<bsnDot11EssAclName>)
|
||||||
|
|
||||||
=item $airespace->airespace_ess_bcast()
|
=item $airespace->airespace_ess_bcast()
|
||||||
|
|
||||||
@@ -1672,14 +1672,14 @@ to an empty string.
|
|||||||
|
|
||||||
=item $airespace->i_index()
|
=item $airespace->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Extends C<ifIndex> to support thin APs and WLAN virtual interfaces as device
|
Extends C<ifIndex> to support thin APs and WLAN virtual interfaces as device
|
||||||
interfaces.
|
interfaces.
|
||||||
|
|
||||||
=item $airespace->interfaces()
|
=item $airespace->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to ports. Thin APs are implemented as device
|
Returns reference to map of IIDs to ports. Thin APs are implemented as device
|
||||||
interfaces. The thin AP MAC address airespace_ap_mac() and Slot ID
|
interfaces. The thin AP MAC address airespace_ap_mac() and Slot ID
|
||||||
airespace_apif_slot() are used as the port identifier. Virtual interfaces
|
airespace_apif_slot() are used as the port identifier. Virtual interfaces
|
||||||
use airespace_if_name() as the port identifier.
|
use airespace_if_name() as the port identifier.
|
||||||
@@ -1717,7 +1717,7 @@ for thin AP interfaces.
|
|||||||
=item $airespace->i_mac()
|
=item $airespace->i_mac()
|
||||||
|
|
||||||
Returns reference to map of IIDs to MAC address of the interface. Returns
|
Returns reference to map of IIDs to MAC address of the interface. Returns
|
||||||
C<ifPhysAddress> for Ethernet interfaces and airespace_if_mac() for virtual
|
C<ifPhysAddress> for Ethernet interfaces and airespace_if_mac() for virtual
|
||||||
interfaces.
|
interfaces.
|
||||||
|
|
||||||
=item $airespace->i_vlan()
|
=item $airespace->i_vlan()
|
||||||
@@ -1751,7 +1751,7 @@ the interface iid.
|
|||||||
=item $airespace->fw_port()
|
=item $airespace->fw_port()
|
||||||
|
|
||||||
Returns reference to a hash, value being airespace_sta_mac() and
|
Returns reference to a hash, value being airespace_sta_mac() and
|
||||||
airespace_sta_slot() combined to match the interface iid.
|
airespace_sta_slot() combined to match the interface iid.
|
||||||
|
|
||||||
=item $airespace->fw_mac()
|
=item $airespace->fw_mac()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Bridge
|
# SNMP::Info::Bridge
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -34,19 +33,21 @@
|
|||||||
package SNMP::Info::Bridge;
|
package SNMP::Info::Bridge;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::Bridge::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::Bridge::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Bridge::EXPORT_OK = qw//;
|
@SNMP::Info::Bridge::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $INIT);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||||
'Q-BRIDGE-MIB' => 'dot1qPvid',
|
'Q-BRIDGE-MIB' => 'dot1qPvid',
|
||||||
|
'RSTP-MIB' => 'dot1dStpPortOperEdgePort',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -104,6 +105,10 @@ $VERSION = '3.52';
|
|||||||
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
|
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
|
||||||
'stp_p_port' => 'dot1dStpPortDesignatedPort',
|
'stp_p_port' => 'dot1dStpPortDesignatedPort',
|
||||||
|
|
||||||
|
# Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
|
||||||
|
'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort',
|
||||||
|
'is_edgeport_oper' => 'dot1dStpPortOperEdgePort',
|
||||||
|
|
||||||
# Q-BRIDGE-MIB : dot1qPortVlanTable
|
# Q-BRIDGE-MIB : dot1qPortVlanTable
|
||||||
'qb_i_vlan' => 'dot1qPvid',
|
'qb_i_vlan' => 'dot1qPvid',
|
||||||
'qb_i_vlan_type' => 'dot1qPortAcceptableFrameTypes',
|
'qb_i_vlan_type' => 'dot1qPortAcceptableFrameTypes',
|
||||||
@@ -184,7 +189,7 @@ sub qb_fw_vlan {
|
|||||||
foreach my $idx ( keys %$qb_fw_port ) {
|
foreach my $idx ( keys %$qb_fw_port ) {
|
||||||
my ( $fdb_id, $mac ) = _qb_fdbtable_index($idx);
|
my ( $fdb_id, $mac ) = _qb_fdbtable_index($idx);
|
||||||
# Many devices do not populate the dot1qVlanCurrentTable, so default
|
# Many devices do not populate the dot1qVlanCurrentTable, so default
|
||||||
# to FDB ID = VID, but if we have a mapping use it.
|
# to FDB ID = VID, but if we have a mapping use it.
|
||||||
my $vlan = $fdb_id;
|
my $vlan = $fdb_id;
|
||||||
# defined as test since some devices have a vlan 0
|
# defined as test since some devices have a vlan 0
|
||||||
if (defined $qb_fdb_ids->{$fdb_id}) {
|
if (defined $qb_fdb_ids->{$fdb_id}) {
|
||||||
@@ -232,13 +237,15 @@ sub qb_fdb_index {
|
|||||||
return $vl_fdb_index;
|
return $vl_fdb_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Most devices now support Q-BRIDGE-MIB, fall back to
|
# Most devices now support Q-BRIDGE-MIB, fall back to
|
||||||
# BRIDGE-MIB for those that don't.
|
# BRIDGE-MIB for those that don't.
|
||||||
sub fw_mac {
|
sub fw_mac {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
|
|
||||||
my $qb = $bridge->qb_fw_mac();
|
unless ($bridge->can('cisco_comm_indexing') && $bridge->cisco_comm_indexing()){
|
||||||
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
my $qb = $bridge->qb_fw_mac();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
}
|
||||||
|
|
||||||
return $bridge->SUPER::fw_mac();
|
return $bridge->SUPER::fw_mac();
|
||||||
}
|
}
|
||||||
@@ -246,8 +253,10 @@ sub fw_mac {
|
|||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
|
|
||||||
my $qb = $bridge->qb_fw_port();
|
unless ($bridge->can('cisco_comm_indexing') && $bridge->cisco_comm_indexing()){
|
||||||
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
my $qb = $bridge->qb_fw_port();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
}
|
||||||
|
|
||||||
return $bridge->SUPER::fw_port();
|
return $bridge->SUPER::fw_port();
|
||||||
}
|
}
|
||||||
@@ -255,9 +264,11 @@ sub fw_port {
|
|||||||
sub fw_status {
|
sub fw_status {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
|
|
||||||
my $qb = $bridge->qb_fw_status();
|
unless ($bridge->can('cisco_comm_indexing') && $bridge->cisco_comm_indexing()){
|
||||||
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
my $qb = $bridge->qb_fw_status();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
}
|
||||||
|
|
||||||
return $bridge->SUPER::fw_status();
|
return $bridge->SUPER::fw_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,11 +302,11 @@ sub i_stp_port {
|
|||||||
my %i_stp_port;
|
my %i_stp_port;
|
||||||
|
|
||||||
foreach my $index ( keys %$stp_p_port ) {
|
foreach my $index ( keys %$stp_p_port ) {
|
||||||
my $bridge = $stp_p_port->{$index};
|
my $bport = $stp_p_port->{$index};
|
||||||
my $iid = $bp_index->{$index};
|
my $iid = $bp_index->{$index};
|
||||||
next unless defined $iid;
|
next unless defined $iid;
|
||||||
next unless defined $bridge;
|
next unless defined $bport;
|
||||||
$i_stp_port{$iid} = $bridge;
|
$i_stp_port{$iid} = $bport;
|
||||||
}
|
}
|
||||||
return \%i_stp_port;
|
return \%i_stp_port;
|
||||||
}
|
}
|
||||||
@@ -310,11 +321,11 @@ sub i_stp_id {
|
|||||||
my %i_stp_id;
|
my %i_stp_id;
|
||||||
|
|
||||||
foreach my $index ( keys %$stp_p_id ) {
|
foreach my $index ( keys %$stp_p_id ) {
|
||||||
my $bridge = $stp_p_id->{$index};
|
my $bport = $stp_p_id->{$index};
|
||||||
my $iid = $bp_index->{$index};
|
my $iid = $bp_index->{$index};
|
||||||
next unless defined $iid;
|
next unless defined $iid;
|
||||||
next unless defined $bridge;
|
next unless defined $bport;
|
||||||
$i_stp_id{$iid} = $bridge;
|
$i_stp_id{$iid} = $bport;
|
||||||
}
|
}
|
||||||
return \%i_stp_id;
|
return \%i_stp_id;
|
||||||
}
|
}
|
||||||
@@ -329,11 +340,11 @@ sub i_stp_bridge {
|
|||||||
my %i_stp_bridge;
|
my %i_stp_bridge;
|
||||||
|
|
||||||
foreach my $index ( keys %$stp_p_bridge ) {
|
foreach my $index ( keys %$stp_p_bridge ) {
|
||||||
my $bridge = $stp_p_bridge->{$index};
|
my $bport = $stp_p_bridge->{$index};
|
||||||
my $iid = $bp_index->{$index};
|
my $iid = $bp_index->{$index};
|
||||||
next unless defined $iid;
|
next unless defined $iid;
|
||||||
next unless defined $bridge;
|
next unless defined $bport;
|
||||||
$i_stp_bridge{$iid} = $bridge;
|
$i_stp_bridge{$iid} = $bport;
|
||||||
}
|
}
|
||||||
return \%i_stp_bridge;
|
return \%i_stp_bridge;
|
||||||
}
|
}
|
||||||
@@ -550,10 +561,10 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $bridge = new SNMP::Info (
|
my $bridge = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'switch',
|
DestHost => 'switch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
@@ -574,7 +585,7 @@ Max Baker
|
|||||||
my $port = $interfaces->{$iid};
|
my $port = $interfaces->{$iid};
|
||||||
|
|
||||||
print "Port:$port forwarding to $mac\n";
|
print "Port:$port forwarding to $mac\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
@@ -583,12 +594,12 @@ MAC Forwarding Table and Spanning Tree Protocol info.
|
|||||||
|
|
||||||
F<Q-BRIDGE-MIB> holds 802.1q information -- VLANs and Trunking. Cisco tends
|
F<Q-BRIDGE-MIB> holds 802.1q information -- VLANs and Trunking. Cisco tends
|
||||||
not to use this MIB, but some proprietary ones. HP and some nicer vendors use
|
not to use this MIB, but some proprietary ones. HP and some nicer vendors use
|
||||||
this. This is from C<RFC2674_q>.
|
this. This is from C<RFC2674_q>.
|
||||||
|
|
||||||
Create or use a subclass of SNMP::Info that inherits this class. Do not use
|
Create or use a subclass of SNMP::Info that inherits this class. Do not use
|
||||||
directly.
|
directly.
|
||||||
|
|
||||||
For debugging you can call new() directly as you would in SNMP::Info
|
For debugging you can call new() directly as you would in SNMP::Info
|
||||||
|
|
||||||
my $bridge = new SNMP::Info::Bridge(...);
|
my $bridge = new SNMP::Info::Bridge(...);
|
||||||
|
|
||||||
@@ -604,12 +615,11 @@ None.
|
|||||||
|
|
||||||
=item F<Q-BRIDGE-MIB>
|
=item F<Q-BRIDGE-MIB>
|
||||||
|
|
||||||
|
=item F<RSTP-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
F<BRIDGE-MIB> needs to be extracted from
|
=head1 GLOBALS
|
||||||
ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -652,19 +662,19 @@ Returns root of STP.
|
|||||||
|
|
||||||
(C<dot1dStpDesignatedRoot>)
|
(C<dot1dStpDesignatedRoot>)
|
||||||
|
|
||||||
=item $bridge->qb_vlans_max()
|
=item $bridge->qb_vlans_max()
|
||||||
|
|
||||||
Maximum number of VLANS supported on this device.
|
Maximum number of VLANS supported on this device.
|
||||||
|
|
||||||
(C<dot1qMaxSupportedVlans>)
|
(C<dot1qMaxSupportedVlans>)
|
||||||
|
|
||||||
=item $bridge->qb_vlans()
|
=item $bridge->qb_vlans()
|
||||||
|
|
||||||
Current number of VLANs that are configured in this device.
|
Current number of VLANs that are configured in this device.
|
||||||
|
|
||||||
(C<dot1qNumVlans>)
|
(C<dot1qNumVlans>)
|
||||||
|
|
||||||
=item $bridge->qb_next_vlan_index()
|
=item $bridge->qb_next_vlan_index()
|
||||||
|
|
||||||
The next available value for C<dot1qVlanIndex> of a local VLAN entry in
|
The next available value for C<dot1qVlanIndex> of a local VLAN entry in
|
||||||
C<dot1qVlanStaticTable>
|
C<dot1qVlanStaticTable>
|
||||||
@@ -696,7 +706,7 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
|||||||
Example:
|
Example:
|
||||||
my $interfaces = $bridge->interfaces();
|
my $interfaces = $bridge->interfaces();
|
||||||
my $vlans = $bridge->i_vlan_membership();
|
my $vlans = $bridge->i_vlan_membership();
|
||||||
|
|
||||||
foreach my $iid (sort keys %$interfaces) {
|
foreach my $iid (sort keys %$interfaces) {
|
||||||
my $port = $interfaces->{$iid};
|
my $port = $interfaces->{$iid};
|
||||||
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
||||||
@@ -716,7 +726,7 @@ tagged ports or the VLAN ID.
|
|||||||
|
|
||||||
=item $bridge->qb_fdb_index()
|
=item $bridge->qb_fdb_index()
|
||||||
|
|
||||||
Returns reference to hash: key = VLAN ID, value = FDB ID.
|
Returns reference to hash: key = FDB ID, value = VLAN ID.
|
||||||
|
|
||||||
=item $bridge->v_index()
|
=item $bridge->v_index()
|
||||||
|
|
||||||
@@ -726,7 +736,7 @@ Returns VLAN IDs
|
|||||||
|
|
||||||
=head2 Forwarding Table (C<dot1dTpFdbEntry>)
|
=head2 Forwarding Table (C<dot1dTpFdbEntry>)
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $bridge->fw_mac()
|
=item $bridge->fw_mac()
|
||||||
|
|
||||||
@@ -944,7 +954,7 @@ The set of ports which are assigned to the egress list for this VLAN.
|
|||||||
=item $bridge->qb_cv_untagged()
|
=item $bridge->qb_cv_untagged()
|
||||||
|
|
||||||
The set of ports which should transmit egress packets for this VLAN as
|
The set of ports which should transmit egress packets for this VLAN as
|
||||||
untagged.
|
untagged.
|
||||||
|
|
||||||
(C<dot1qVlanCurrentUntaggedPorts>)
|
(C<dot1qVlanCurrentUntaggedPorts>)
|
||||||
|
|
||||||
@@ -982,7 +992,7 @@ for this VLAN.
|
|||||||
=item $bridge->qb_v_untagged()
|
=item $bridge->qb_v_untagged()
|
||||||
|
|
||||||
The set of ports which should transmit egress packets for this VLAN as
|
The set of ports which should transmit egress packets for this VLAN as
|
||||||
untagged.
|
untagged.
|
||||||
|
|
||||||
(C<dot1qVlanStaticUntaggedPorts>)
|
(C<dot1qVlanStaticUntaggedPorts>)
|
||||||
|
|
||||||
@@ -1022,13 +1032,13 @@ Returns reference to hash of forwarding table entries status
|
|||||||
(C<dot1qTpFdbStatus>)
|
(C<dot1qTpFdbStatus>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 SET METHODS
|
=head1 SET METHODS
|
||||||
|
|
||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CDP
|
# SNMP::Info::CDP
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -34,16 +33,17 @@
|
|||||||
package SNMP::Info::CDP;
|
package SNMP::Info::CDP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CDP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CDP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CDP::EXPORT_OK = qw//;
|
@SNMP::Info::CDP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars
|
our
|
||||||
qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
|
($VERSION, $DEBUG, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $INIT, %CDP_CAPABILITIES);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# Five data structures required by SNMP::Info
|
# Five data structures required by SNMP::Info
|
||||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
||||||
@@ -54,16 +54,15 @@ $VERSION = '3.52';
|
|||||||
'cdp_run' => 'cdpGlobalRun',
|
'cdp_run' => 'cdpGlobalRun',
|
||||||
'cdp_interval' => 'cdpGlobalMessageInterval',
|
'cdp_interval' => 'cdpGlobalMessageInterval',
|
||||||
'cdp_holdtime' => 'cdpGlobalHoldTime',
|
'cdp_holdtime' => 'cdpGlobalHoldTime',
|
||||||
'cdp_gid' => 'cdpGlobalDeviceId',
|
'cdp_gid' => 'cdpGlobalDeviceId',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
'cdp_index' => 'cdpCacheIfIndex',
|
|
||||||
'cdp_proto' => 'cdpCacheAddressType',
|
'cdp_proto' => 'cdpCacheAddressType',
|
||||||
'cdp_addr' => 'cdpCacheAddress',
|
'cdp_addr' => 'cdpCacheAddress',
|
||||||
'cdp_ver' => 'cdpCacheVersion',
|
'cdp_ver' => 'cdpCacheVersion',
|
||||||
'cdp_dev_id' => 'cdpCacheDeviceId',
|
'cdp_dev_id' => 'cdpCacheDeviceId',
|
||||||
'cdp_port' => 'cdpCacheDevicePort',
|
'cdp_dev_port' => 'cdpCacheDevicePort',
|
||||||
'cdp_platform' => 'cdpCachePlatform',
|
'cdp_platform' => 'cdpCachePlatform',
|
||||||
'cdp_capabilities' => 'cdpCacheCapabilities',
|
'cdp_capabilities' => 'cdpCacheCapabilities',
|
||||||
'cdp_domain' => 'cdpCacheVTPMgmtDomain',
|
'cdp_domain' => 'cdpCacheVTPMgmtDomain',
|
||||||
@@ -80,11 +79,9 @@ $VERSION = '3.52';
|
|||||||
'cdp_capabilities' => \&SNMP::Info::munge_bits,
|
'cdp_capabilities' => \&SNMP::Info::munge_bits,
|
||||||
'cdp_platform' => \&SNMP::Info::munge_null,
|
'cdp_platform' => \&SNMP::Info::munge_null,
|
||||||
'cdp_domain' => \&SNMP::Info::munge_null,
|
'cdp_domain' => \&SNMP::Info::munge_null,
|
||||||
'cdp_port' => \&SNMP::Info::munge_null,
|
|
||||||
'cdp_ver' => \&SNMP::Info::munge_null,
|
'cdp_ver' => \&SNMP::Info::munge_null,
|
||||||
'cdp_ip' => \&SNMP::Info::munge_ip,
|
'cdp_ip' => \&SNMP::Info::munge_ip,
|
||||||
'cdp_power' => \&munge_power,
|
'cdp_power' => \&munge_power,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%CDP_CAPABILITIES = (
|
%CDP_CAPABILITIES = (
|
||||||
@@ -111,28 +108,21 @@ sub munge_power {
|
|||||||
sub hasCDP {
|
sub hasCDP {
|
||||||
my $cdp = shift;
|
my $cdp = shift;
|
||||||
|
|
||||||
my $ver = $cdp->{_version};
|
# Check the global that is supposed to indicate CDP is running
|
||||||
|
my $cdp_run = $cdp->cdp_run();
|
||||||
|
return 1 if $cdp_run;
|
||||||
|
|
||||||
# SNMP v1 clients dont have the globals
|
# SNMP v1 clients don't have the globals, fallback
|
||||||
if ( defined $ver and $ver == 1 ) {
|
# by checking if it would report neighbors
|
||||||
my $cdp_ip = $cdp->cdp_ip();
|
my $cdp_ip = $cdp->cdp_ip() || {};
|
||||||
|
return 1 if scalar keys %$cdp_ip;
|
||||||
|
|
||||||
# See if anything in cdp cache, if so we have cdp
|
return;
|
||||||
return 1 if ( defined $cdp_ip and scalar( keys %$cdp_ip ) );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $cdp->cdp_run();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub cdp_if {
|
sub cdp_if {
|
||||||
my $cdp = shift;
|
my $cdp = shift;
|
||||||
|
|
||||||
# See if by some miracle Cisco implemented the cdpCacheIfIndex entry
|
|
||||||
my $cdp_index = $cdp->cdp_index();
|
|
||||||
return $cdp_index if defined $cdp_index;
|
|
||||||
|
|
||||||
# Nope, didn't think so. Now we fake it.
|
|
||||||
my $cdp_ip = $cdp->cdp_ip();
|
my $cdp_ip = $cdp->cdp_ip();
|
||||||
unless ( defined $cdp_ip ) {
|
unless ( defined $cdp_ip ) {
|
||||||
$cdp->error_throw(
|
$cdp->error_throw(
|
||||||
@@ -225,6 +215,28 @@ sub cdp_id {
|
|||||||
return \%cdp_id;
|
return \%cdp_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cdp_port {
|
||||||
|
my $cdp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $ch = $cdp->cdp_dev_port($partial) || {};
|
||||||
|
|
||||||
|
# most devices return a string with the interface name here (Port-ID TLV)
|
||||||
|
# see https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/cdp/command/cdp-cr-book/cdp-cr-a1.html
|
||||||
|
# it seems however that some devices report hex encoded mac addresses for this, see
|
||||||
|
# https://github.com/netdisco/snmp-info/issues/252
|
||||||
|
# once these bad devices get known we can figure out workarounds for them
|
||||||
|
|
||||||
|
my %cdp_port;
|
||||||
|
foreach my $key ( sort keys %$ch ) {
|
||||||
|
my $port = $ch->{$key};
|
||||||
|
next unless $port;
|
||||||
|
$port = SNMP::Info::munge_null($port);
|
||||||
|
$cdp_port{$key} = $port;
|
||||||
|
}
|
||||||
|
return \%cdp_port;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -238,10 +250,10 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $cdp = new SNMP::Info (
|
my $cdp = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
@@ -252,7 +264,7 @@ Max Baker
|
|||||||
$hascdp = $cdp->hasCDP() ? 'yes' : 'no';
|
$hascdp = $cdp->hasCDP() ? 'yes' : 'no';
|
||||||
|
|
||||||
# Print out a map of device ports with CDP neighbors:
|
# Print out a map of device ports with CDP neighbors:
|
||||||
my $interfaces = $cdp->interfaces();
|
my $interfaces = $cdp->interfaces();
|
||||||
my $cdp_if = $cdp->cdp_if();
|
my $cdp_if = $cdp->cdp_if();
|
||||||
my $cdp_ip = $cdp->cdp_ip();
|
my $cdp_ip = $cdp->cdp_ip();
|
||||||
my $cdp_port = $cdp->cdp_port();
|
my $cdp_port = $cdp->cdp_port();
|
||||||
@@ -267,17 +279,17 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::CDP is a subclass of SNMP::Info that provides an object oriented
|
SNMP::Info::CDP is a subclass of SNMP::Info that provides an object oriented
|
||||||
interface to CDP information through SNMP.
|
interface to CDP information through SNMP.
|
||||||
|
|
||||||
CDP is a Layer 2 protocol that supplies topology information of devices that
|
CDP is a Layer 2 protocol that supplies topology information of devices that
|
||||||
also speak CDP, mostly switches and routers. CDP is implemented in Cisco and
|
also speak CDP, mostly switches and routers. CDP is implemented by Cisco and
|
||||||
some HP devices.
|
several other vendors.
|
||||||
|
|
||||||
Create or use a device subclass that inherits this class. Do not use
|
Create or use a device subclass that inherits this class. Do not use
|
||||||
directly.
|
directly.
|
||||||
|
|
||||||
Each device implements a subset of the global and cache entries.
|
Each device implements a subset of the global and cache entries.
|
||||||
Check the return value to see if that data is held by the device.
|
Check the return value to see if that data is held by the device.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -292,9 +304,7 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
=head1 GLOBALS
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -302,7 +312,7 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $cdp->hasCDP()
|
=item $cdp->hasCDP()
|
||||||
|
|
||||||
Is CDP is active in this device?
|
Is CDP is active in this device?
|
||||||
|
|
||||||
Accounts for SNMP version 1 devices which may have CDP but not cdp_run()
|
Accounts for SNMP version 1 devices which may have CDP but not cdp_run()
|
||||||
|
|
||||||
@@ -321,13 +331,13 @@ Interval in seconds at which CDP messages are generated.
|
|||||||
|
|
||||||
=item $cdp->cdp_holdtime()
|
=item $cdp->cdp_holdtime()
|
||||||
|
|
||||||
Time in seconds that CDP messages are kept.
|
Time in seconds that CDP messages are kept.
|
||||||
|
|
||||||
(C<cdpGlobalHoldTime>)
|
(C<cdpGlobalHoldTime>)
|
||||||
|
|
||||||
=item $cdp->cdp_gid()
|
=item $cdp->cdp_gid()
|
||||||
|
|
||||||
Returns CDP device ID.
|
Returns CDP device ID.
|
||||||
|
|
||||||
This is the device id broadcast via CDP to other devices, and is what is
|
This is the device id broadcast via CDP to other devices, and is what is
|
||||||
retrieved from remote devices with $cdp->id().
|
retrieved from remote devices with $cdp->id().
|
||||||
@@ -348,9 +358,9 @@ to a hash.
|
|||||||
=item $cdp->cdp_capabilities()
|
=item $cdp->cdp_capabilities()
|
||||||
|
|
||||||
Returns Device Functional Capabilities. Results are munged into an ascii
|
Returns Device Functional Capabilities. Results are munged into an ascii
|
||||||
binary string, MSB. Each digit represents a bit from the table below from
|
binary string, MSB. Each digit represents a bit from the table below from
|
||||||
the CDP Capabilities Mapping to Smartport Type table within the
|
the CDP Capabilities Mapping to Smartport Type table within the
|
||||||
Cisco Small Business 200 Series Smart Switch Administration Guide,
|
Cisco Small Business 200 Series Smart Switch Administration Guide,
|
||||||
L<http://www.cisco.com/c/en/us/support/switches/small-business-200-series-smart-switches/products-maintenance-guides-list.html>:
|
L<http://www.cisco.com/c/en/us/support/switches/small-business-200-series-smart-switches/products-maintenance-guides-list.html>:
|
||||||
|
|
||||||
(Bit) - Description
|
(Bit) - Description
|
||||||
@@ -400,7 +410,7 @@ C<CISCO-VTP-MIB::managementDomainName>
|
|||||||
|
|
||||||
(C<cdpCacheVTPMgmtDomain>)
|
(C<cdpCacheVTPMgmtDomain>)
|
||||||
|
|
||||||
=item $cdp->cdp_duplex()
|
=item $cdp->cdp_duplex()
|
||||||
|
|
||||||
Returns the port duplex status from remote devices.
|
Returns the port duplex status from remote devices.
|
||||||
|
|
||||||
@@ -417,7 +427,7 @@ Returns remote device id string
|
|||||||
Returns the mapping to the SNMP Interface Table.
|
Returns the mapping to the SNMP Interface Table.
|
||||||
|
|
||||||
Note that a lot devices don't implement $cdp->cdp_index(), So if it isn't
|
Note that a lot devices don't implement $cdp->cdp_index(), So if it isn't
|
||||||
around, we fake it.
|
around, we fake it.
|
||||||
|
|
||||||
In order to map the cdp table entry back to the interfaces() entry, we
|
In order to map the cdp table entry back to the interfaces() entry, we
|
||||||
truncate the last number off of it :
|
truncate the last number off of it :
|
||||||
@@ -428,7 +438,7 @@ truncate the last number off of it :
|
|||||||
|
|
||||||
# if not, let's fake it
|
# if not, let's fake it
|
||||||
my $cdp_ip = $device->cdp_ip();
|
my $cdp_ip = $device->cdp_ip();
|
||||||
|
|
||||||
my %cdp_if
|
my %cdp_if
|
||||||
foreach my $key (keys %$cdp_ip){
|
foreach my $key (keys %$cdp_ip){
|
||||||
$iid = $key;
|
$iid = $key;
|
||||||
@@ -436,13 +446,13 @@ truncate the last number off of it :
|
|||||||
$iid =~ s/\.\d+$//;
|
$iid =~ s/\.\d+$//;
|
||||||
$cdp_if{$key} = $iid;
|
$cdp_if{$key} = $iid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return \%cdp_if;
|
return \%cdp_if;
|
||||||
|
|
||||||
|
|
||||||
=item $cdp->cdp_index()
|
=item $cdp->cdp_index()
|
||||||
|
|
||||||
Returns the mapping to the SNMP2 Interface table for CDP Cache Entries.
|
Returns the mapping to the SNMP2 Interface table for CDP Cache Entries.
|
||||||
|
|
||||||
Most devices don't implement this, so you probably want to use $cdp->cdp_if()
|
Most devices don't implement this, so you probably want to use $cdp->cdp_if()
|
||||||
instead.
|
instead.
|
||||||
@@ -464,17 +474,18 @@ Returns remote address
|
|||||||
|
|
||||||
(C<cdpCacheAddress>)
|
(C<cdpCacheAddress>)
|
||||||
|
|
||||||
=item $cdp->cdp_platform()
|
=item $cdp->cdp_platform()
|
||||||
|
|
||||||
Returns remote platform id
|
Returns remote platform id
|
||||||
|
|
||||||
(C<cdpCachePlatform>)
|
(C<cdpCachePlatform>)
|
||||||
|
|
||||||
=item $cdp->cdp_port()
|
=item $cdp->cdp_port()
|
||||||
|
|
||||||
Returns remote port ID
|
Returns remote Port-ID. Most of the time this is a string with the port name, but this
|
||||||
|
is not guaranteed to be so.
|
||||||
|
|
||||||
(C<cdpDevicePort>)
|
(C<cdpCacheDevicePort>)
|
||||||
|
|
||||||
=item $cdp->cdp_proto()
|
=item $cdp->cdp_proto()
|
||||||
|
|
||||||
@@ -482,7 +493,7 @@ Returns remote address type received. Usually IP.
|
|||||||
|
|
||||||
(C<cdpCacheAddressType>)
|
(C<cdpCacheAddressType>)
|
||||||
|
|
||||||
=item $cdp->cdp_ver()
|
=item $cdp->cdp_ver()
|
||||||
|
|
||||||
Returns remote hardware version
|
Returns remote hardware version
|
||||||
|
|
||||||
@@ -501,7 +512,7 @@ for decimal placement.
|
|||||||
|
|
||||||
(C<cdpCachePowerConsumption>)
|
(C<cdpCachePowerConsumption>)
|
||||||
|
|
||||||
=item $cdp->cdp_cap()
|
=item $cdp->cdp_cap()
|
||||||
|
|
||||||
Returns hash of arrays with each array containing the system capabilities
|
Returns hash of arrays with each array containing the system capabilities
|
||||||
supported by the remote system. Possible elements in the array are
|
supported by the remote system. Possible elements in the array are
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# SNMP::Info::CiscoAgg
|
# SNMP::Info::CiscoAgg
|
||||||
#
|
#
|
||||||
# Copyright (c) 2018 SNMP::Info Developers
|
# Copyright (c) 2019 SNMP::Info Developers
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@@ -30,36 +30,72 @@
|
|||||||
package SNMP::Info::CiscoAgg;
|
package SNMP::Info::CiscoAgg;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
use SNMP::Info::IEEE802dot3ad;
|
||||||
|
|
||||||
@SNMP::Info::CiscoAgg::ISA = qw/
|
@SNMP::Info::CiscoAgg::ISA = qw/
|
||||||
SNMP::Info::IEEE802dot3ad
|
SNMP::Info::IEEE802dot3ad
|
||||||
Exporter
|
Exporter
|
||||||
/;
|
/;
|
||||||
|
|
||||||
@SNMP::Info::CiscoAgg::EXPORT_OK = qw/
|
@SNMP::Info::CiscoAgg::EXPORT_OK = qw/
|
||||||
agg_ports
|
agg_ports
|
||||||
|
agg_ports_cisco
|
||||||
|
agg_ports_lag
|
||||||
|
agg_ports_pagp
|
||||||
/;
|
/;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($DEBUG, $VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::IEEE802dot3ad::MIBS,
|
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||||
'CISCO-PAGP-MIB' => 'pagpGroupIfIndex',
|
'CISCO-PAGP-MIB' => 'pagpGroupIfIndex',
|
||||||
|
'CISCO-LAG-MIB' => 'clagAggPortListPorts',
|
||||||
|
'CISCO-IF-EXTENSION-MIB' => 'cieIfLastInTime',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = ();
|
%GLOBALS = ();
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||||
|
'lag_ports' => 'clagAggPortListPorts',
|
||||||
|
'lag_members' => 'clagAggPortListInterfaceIndexList',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||||
|
'lag_ports' => \&SNMP::Info::munge_port_list,
|
||||||
|
'lag_members' => \&munge_port_ifindex,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sub munge_port_ifindex {
|
||||||
|
my $plist = shift;
|
||||||
|
return unless defined $plist;
|
||||||
|
return unless length $plist;
|
||||||
|
|
||||||
|
my $list = [ map {sprintf "%d", hex($_)} unpack( "(A8)*", join( '' , map { sprintf "%02x", $_} unpack( "(C4)*", $plist ) )) ];
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub agg_ports_cisco {
|
||||||
|
my $dev = shift;
|
||||||
|
my $group = $dev->lag_members;
|
||||||
|
|
||||||
|
my $mapping = {};
|
||||||
|
for my $master (keys %$group) {
|
||||||
|
my $slaves = $group->{$master};
|
||||||
|
for my $slave (@$slaves) {
|
||||||
|
$mapping->{$slave} = $master;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mapping;
|
||||||
|
}
|
||||||
|
|
||||||
sub agg_ports_pagp {
|
sub agg_ports_pagp {
|
||||||
my $dev = shift;
|
my $dev = shift;
|
||||||
|
|
||||||
@@ -80,9 +116,28 @@ sub agg_ports_pagp {
|
|||||||
return $mapping;
|
return $mapping;
|
||||||
}
|
}
|
||||||
|
|
||||||
# until we have PAgP data and need to combine with LAG data
|
sub agg_ports_lag {
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
# same note as for agg_ports_pagp, it will miss mappings if interfaces
|
||||||
|
# are down or lacp is not synced.
|
||||||
|
|
||||||
|
my $mapping = {};
|
||||||
|
my $group = $dev->dot3adAggPortSelectedAggID;
|
||||||
|
for my $slave (keys %$group) {
|
||||||
|
my $master = $group->{$slave};
|
||||||
|
next if($master == 0 || $slave == $master);
|
||||||
|
|
||||||
|
$mapping->{$slave} = $master;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# combine PAgP, LAG & Cisco proprietary data
|
||||||
sub agg_ports {
|
sub agg_ports {
|
||||||
my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}};
|
my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}, %{agg_ports_cisco(@_)}};
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,14 +155,14 @@ SNMP::Info Developers
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $info = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $info->class();
|
my $class = $info->class();
|
||||||
@@ -116,7 +171,7 @@ SNMP::Info Developers
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
This class provides access to Aggregated Links configuration on Cisco devices.
|
This class provides access to Aggregated Links configuration on Cisco devices.
|
||||||
It combines Cisco PAgP and IEEE 802.3ad information.
|
It combines Cisco PAgP, Cisco proprietary info and IEEE 802.3ad information.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
@@ -130,11 +185,13 @@ L<SNMP::Info::IEEE802dot3ad>
|
|||||||
|
|
||||||
=item F<CISCO-PAGP-MIB>
|
=item F<CISCO-PAGP-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-LAG-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-IF-EXTENSION-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
=head1 METHODS
|
|
||||||
|
|
||||||
=over 4
|
=over 4
|
||||||
|
|
||||||
@@ -144,15 +201,52 @@ Returns a HASH reference mapping from slave to master port for each member of
|
|||||||
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
ifIndex of the corresponding master ports.
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=item C<agg_ports_cisco>
|
||||||
|
|
||||||
|
Implements the cisco LAG info retrieval. Merged into C<agg_ports> data
|
||||||
|
automatically. Will fetch all members of C<clagAggPortListInterfaceIndexList>
|
||||||
|
even if they are not running an aggregation protocol.
|
||||||
|
|
||||||
=item C<agg_ports_pagp>
|
=item C<agg_ports_pagp>
|
||||||
|
|
||||||
Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
|
Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
|
||||||
automatically.
|
automatically.
|
||||||
|
|
||||||
|
=item C<lag_members>
|
||||||
|
|
||||||
|
Mimics C<ad_lag_ports> from L<SNMP::Info::IEEE802dot3ad> but based on ifindex
|
||||||
|
instead of instead of bp_index.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 OVERRIDES
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item C<agg_ports_lag>
|
||||||
|
|
||||||
|
This will retrieve LAG ports based on C<dot3adAggPortSelectedAggID> data.
|
||||||
|
It will be merged into C<agg_ports> data.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 MUNGES
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item C<munge_port_ifindex>
|
||||||
|
|
||||||
|
Takes C<clagAggPortListInterfaceIndexList>, uses the index as master port, then
|
||||||
|
returns all members as ifindex. Works with single or multiple slaves to a master.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoConfig
|
# SNMP::Info::CiscoConfig
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::CiscoConfig;
|
package SNMP::Info::CiscoConfig;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoConfig::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CiscoConfig::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoConfig::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoConfig::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
||||||
@@ -279,7 +279,7 @@ Justin Hunter, Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -336,10 +336,6 @@ These are methods that return scalar value from SNMP
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Config Copy Request Table (C<ccCopyTable>)
|
=head2 Config Copy Request Table (C<ccCopyTable>)
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -435,7 +431,7 @@ Table of Flash copy operation entries.
|
|||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -452,7 +448,7 @@ older procedure has been depreciated by Cisco and is utilized only to support
|
|||||||
devices running older code revisions.
|
devices running older code revisions.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
$ciscoconfig->copy_run_tftp('1.2.3.4', 'myconfig')
|
$ciscoconfig->copy_run_tftp('1.2.3.4', 'myconfig')
|
||||||
or die "Couldn't save config. ",$ciscoconfig->error(1);
|
or die "Couldn't save config. ",$ciscoconfig->error(1);
|
||||||
|
|
||||||
=item $ciscoconfig->copy_run_start()
|
=item $ciscoconfig->copy_run_start()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoPortSecurity
|
# SNMP::Info::CiscoPortSecurity
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,14 +30,16 @@
|
|||||||
package SNMP::Info::CiscoPortSecurity;
|
package SNMP::Info::CiscoPortSecurity;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoPortSecurity::ISA = qw/Exporter/;
|
@SNMP::Info::CiscoPortSecurity::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoPortSecurity::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoPortSecurity::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PAECAPABILITIES);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
||||||
@@ -82,20 +83,16 @@ $VERSION = '3.52';
|
|||||||
# CISCO-PORT-SECURITY-MIB::cpsIfVlanTable
|
# CISCO-PORT-SECURITY-MIB::cpsIfVlanTable
|
||||||
'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount',
|
'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount',
|
||||||
'cps_i_v_mac_max' => 'cpsIfVlanMaxSecureMacAddr',
|
'cps_i_v_mac_max' => 'cpsIfVlanMaxSecureMacAddr',
|
||||||
'cps_i_v' => 'cpsIfVlanIndex',
|
|
||||||
|
|
||||||
# CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable
|
# CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable
|
||||||
'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus',
|
'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus',
|
||||||
'cps_i_v_mac_age' => 'cpsIfVlanSecureMacAddrRemainAge',
|
'cps_i_v_mac_age' => 'cpsIfVlanSecureMacAddrRemainAge',
|
||||||
'cps_i_v_mac_type' => 'cpsIfVlanSecureMacAddrType',
|
'cps_i_v_mac_type' => 'cpsIfVlanSecureMacAddrType',
|
||||||
'cps_i_v_vlan' => 'cpsIfVlanSecureVlanIndex',
|
|
||||||
'cps_i_v_mac' => 'cpsIfVlanSecureMacAddress',
|
|
||||||
|
|
||||||
# CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable
|
# CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable
|
||||||
'cps_m_status' => 'cpsSecureMacAddrRowStatus',
|
'cps_m_status' => 'cpsSecureMacAddrRowStatus',
|
||||||
'cps_m_age' => 'cpsSecureMacAddrRemainingAge',
|
'cps_m_age' => 'cpsSecureMacAddrRemainingAge',
|
||||||
'cps_m_type' => 'cpsSecureMacAddrType',
|
'cps_m_type' => 'cpsSecureMacAddrType',
|
||||||
'cps_m_mac' => 'cpsSecureMacAddress',
|
|
||||||
|
|
||||||
# IEEE8021-PAE-MIB::dot1xPaePortEntry
|
# IEEE8021-PAE-MIB::dot1xPaePortEntry
|
||||||
'pae_i_capabilities' => 'dot1xPaePortCapabilities',
|
'pae_i_capabilities' => 'dot1xPaePortCapabilities',
|
||||||
@@ -107,15 +104,13 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
'cps_i_mac' => \&SNMP::Info::munge_mac,
|
'cps_i_mac' => \&SNMP::Info::munge_mac,
|
||||||
'cps_m_mac' => \&SNMP::Info::munge_mac,
|
|
||||||
'cps_i_v_mac' => \&SNMP::Info::munge_mac,
|
|
||||||
'pae_i_last_eapol_frame_source' => \&SNMP::Info::munge_mac,
|
'pae_i_last_eapol_frame_source' => \&SNMP::Info::munge_mac,
|
||||||
'pae_i_capabilities' => \&munge_pae_capabilities,
|
'pae_i_capabilities' => \&munge_pae_capabilities,
|
||||||
);
|
);
|
||||||
|
|
||||||
%PAECAPABILITIES = (
|
%PAECAPABILITIES = (
|
||||||
0 => 'dot1xPaePortAuthCapable',
|
0 => 'dot1xPaePortAuthCapable',
|
||||||
1 => 'dot1xPaePortSuppCapable'
|
1 => 'dot1xPaePortSuppCapable',
|
||||||
);
|
);
|
||||||
|
|
||||||
sub munge_pae_capabilities {
|
sub munge_pae_capabilities {
|
||||||
@@ -157,14 +152,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $cps = new SNMP::Info(
|
my $cps = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $cps->class();
|
my $class = $cps->class();
|
||||||
@@ -201,10 +196,6 @@ None.
|
|||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 F<CISCO-PORT-SECURITY-MIB> globals
|
=head2 F<CISCO-PORT-SECURITY-MIB> globals
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -323,10 +314,6 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
(C<cpsIfVlanMaxSecureMacAddr>)
|
(C<cpsIfVlanMaxSecureMacAddr>)
|
||||||
|
|
||||||
=item $cps->cps_i_v()
|
|
||||||
|
|
||||||
(C<cpsIfVlanIndex>)
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable>
|
=head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable>
|
||||||
@@ -345,14 +332,6 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
(C<cpsIfVlanSecureMacAddrType>)
|
(C<cpsIfVlanSecureMacAddrType>)
|
||||||
|
|
||||||
=item $cps->cps_i_v_vlan()
|
|
||||||
|
|
||||||
(C<cpsIfVlanSecureVlanIndex>)
|
|
||||||
|
|
||||||
=item $cps->cps_i_v_mac()
|
|
||||||
|
|
||||||
(C<cpsIfVlanSecureMacAddress>)
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable>
|
=head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable>
|
||||||
@@ -371,10 +350,6 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
(C<cpsSecureMacAddrType>)
|
(C<cpsSecureMacAddrType>)
|
||||||
|
|
||||||
=item $cps->cps_m_mac()
|
|
||||||
|
|
||||||
(C<cpsSecureMacAddress>)
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry>
|
=head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoPower
|
# SNMP::Info::CiscoPower
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Bill Fenner
|
# Copyright (c) 2008 Bill Fenner
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,24 +30,26 @@
|
|||||||
package SNMP::Info::CiscoPower;
|
package SNMP::Info::CiscoPower;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoPower::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CiscoPower::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoPower::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoPower::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
||||||
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption',
|
||||||
|
);
|
||||||
|
|
||||||
%GLOBALS = ();
|
%GLOBALS = ();
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
'cpeth_ent_phy' => 'cpeExtPsePortEntPhyIndex',
|
'cpeth_ent_phy' => 'cpeExtPsePortEntPhyIndex',
|
||||||
'peth_port_power' => 'cpeExtPsePortPwrConsumption',
|
'peth_port_power' => 'cpeExtPsePortPwrConsumption',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ();
|
%MUNGE = ();
|
||||||
@@ -113,14 +114,14 @@ Bill Fenner
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $poe = new SNMP::Info(
|
my $poe = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $poe->class();
|
my $class = $poe->class();
|
||||||
@@ -153,6 +154,8 @@ Note that it requires that the device inherits from Info::Entity.
|
|||||||
|
|
||||||
=item F<CISCO-POWER-ETHERNET-EXT-MIB>
|
=item F<CISCO-POWER-ETHERNET-EXT-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-CDP-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -176,7 +179,7 @@ Maps the C<pethPsePortTable> to C<ifIndex> by way of the F<ENTITY-MIB>.
|
|||||||
|
|
||||||
Power supplied by PoE ports, in milliwatts
|
Power supplied by PoE ports, in milliwatts
|
||||||
(C<cpeExtPsePortPwrConsumption>)
|
(C<cpeExtPsePortPwrConsumption>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 CDP Port table
|
=head2 CDP Port table
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoQOS
|
# SNMP::Info::CiscoQOS
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2005 Alexander Hartmaier
|
# Copyright (c) 2005 Alexander Hartmaier
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::CiscoQOS;
|
package SNMP::Info::CiscoQOS;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoQOS::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CiscoQOS::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoQOS::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoQOS::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
||||||
|
|
||||||
@@ -86,14 +86,14 @@ Alexander Hartmaier
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $qos = new SNMP::Info(
|
my $qos = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $qos->class();
|
my $class = $qos->class();
|
||||||
@@ -101,7 +101,7 @@ Alexander Hartmaier
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::CiscoQOS is a subclass of SNMP::Info that provides
|
SNMP::Info::CiscoQOS is a subclass of SNMP::Info that provides
|
||||||
information about a cisco device's QoS config.
|
information about a cisco device's QoS config.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
@@ -118,8 +118,6 @@ none.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoRTT
|
# SNMP::Info::CiscoRTT
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2005 Alexander Hartmaier
|
# Copyright (c) 2005 Alexander Hartmaier
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::CiscoRTT;
|
package SNMP::Info::CiscoRTT;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoRTT::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CiscoRTT::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoRTT::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoRTT::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
||||||
|
|
||||||
@@ -67,14 +67,14 @@ Alexander Hartmaier
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $rtt = new SNMP::Info(
|
my $rtt = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $rtt->class();
|
my $class = $rtt->class();
|
||||||
@@ -82,7 +82,7 @@ Alexander Hartmaier
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::CiscoRTT is a subclass of SNMP::Info that provides
|
SNMP::Info::CiscoRTT is a subclass of SNMP::Info that provides
|
||||||
information about a cisco device's RTT values.
|
information about a cisco device's RTT values.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
@@ -99,8 +99,6 @@ none.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -113,7 +111,7 @@ None
|
|||||||
|
|
||||||
=head2 Overall Control Group Table
|
=head2 Overall Control Group Table
|
||||||
|
|
||||||
This table is from C<CISCO-RTTMAN-MIB::rttMonCtrlAdminTable>
|
This table is from C<CISCO-RTTMON-MIB::rttMonCtrlAdminTable>
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoStack
|
# SNMP::Info::CiscoStack
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker
|
# Copyright (c) 2008 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,14 +30,15 @@
|
|||||||
package SNMP::Info::CiscoStack;
|
package SNMP::Info::CiscoStack;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
|
|
||||||
@SNMP::Info::CiscoStack::ISA = qw/Exporter/;
|
@SNMP::Info::CiscoStack::ISA = qw/Exporter/;
|
||||||
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PORTSTAT);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ $VERSION = '3.52';
|
|||||||
1 => 'other',
|
1 => 'other',
|
||||||
2 => 'ok',
|
2 => 'ok',
|
||||||
3 => 'minorFault',
|
3 => 'minorFault',
|
||||||
4 => 'majorFault'
|
4 => 'majorFault',
|
||||||
);
|
);
|
||||||
|
|
||||||
# Changes binary byte describing each port into ascii, and returns
|
# Changes binary byte describing each port into ascii, and returns
|
||||||
@@ -194,7 +194,7 @@ sub i_duplex_admin {
|
|||||||
next if ( defined $partial and $iid !~ /^$partial$/ );
|
next if ( defined $partial and $iid !~ /^$partial$/ );
|
||||||
|
|
||||||
# Test for gigabit
|
# Test for gigabit
|
||||||
if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 1 ) {
|
if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 0 ) {
|
||||||
$i_duplex_admin->{$iid} = 'full';
|
$i_duplex_admin->{$iid} = 'full';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,8 +286,7 @@ __END__
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::CiscoStack - SNMP Interface to data from F<CISCO-STACK-MIB> and
|
SNMP::Info::CiscoStack - SNMP Interface to data from F<CISCO-STACK-MIB>
|
||||||
F<CISCO-PORT-SECURITY-MIB>
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -295,17 +294,17 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $ciscostats = new SNMP::Info(
|
my $ciscostack = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $ciscostats->class();
|
my $class = $ciscostack->class();
|
||||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
@@ -386,7 +385,7 @@ Returns a map to IID for ports that are physical ports, not vlans, etc.
|
|||||||
|
|
||||||
=item $stack->i_type()
|
=item $stack->i_type()
|
||||||
|
|
||||||
Crosses p_port() with p_type() and returns the results.
|
Crosses p_port() with p_type() and returns the results.
|
||||||
|
|
||||||
Overrides with C<ifType> if p_type() isn't available.
|
Overrides with C<ifType> if p_type() isn't available.
|
||||||
|
|
||||||
@@ -425,7 +424,7 @@ C<portAdminSpeed>
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$stack->interfaces()};
|
my %if_map = reverse %{$stack->interfaces()};
|
||||||
$stack->set_i_speed_admin('auto', $if_map{'FastEthernet0/1'})
|
$stack->set_i_speed_admin('auto', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port speed. ",$stack->error(1);
|
or die "Couldn't change port speed. ",$stack->error(1);
|
||||||
|
|
||||||
=item $stack->set_i_duplex_admin(duplex, ifIndex)
|
=item $stack->set_i_duplex_admin(duplex, ifIndex)
|
||||||
@@ -439,7 +438,7 @@ C<portAdminSpeed>
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$stack->interfaces()};
|
my %if_map = reverse %{$stack->interfaces()};
|
||||||
$stack->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
$stack->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port duplex. ",$stack->error(1);
|
or die "Couldn't change port duplex. ",$stack->error(1);
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoStats
|
# SNMP::Info::CiscoStats
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Changes since Version 0.7 Copyright (c) 2008-2009 Max Baker and SNMP::Info Developers
|
# Changes since Version 0.7 Copyright (c) 2008-2009 Max Baker and SNMP::Info Developers
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -34,22 +33,23 @@
|
|||||||
package SNMP::Info::CiscoStats;
|
package SNMP::Info::CiscoStats;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoStats::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CiscoStats::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoStats::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoStats::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'SNMPv2-MIB' => 'sysDescr',
|
'SNMPv2-MIB' => 'sysDescr',
|
||||||
'CISCO-PROCESS-MIB' => 'cpmCPUTotal5sec',
|
'CISCO-PROCESS-MIB' => 'cpmCPUTotal5sec',
|
||||||
'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed',
|
'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed',
|
||||||
'OLD-CISCO-SYSTEM-MIB' => 'writeMem',
|
'OLD-CISCO-SYSTEM-MIB' => 'writeMem',
|
||||||
'CISCO-PRODUCTS-MIB' => 'sysName',
|
'CISCO-PRODUCTS-MIB' => 'ciscoIGS',
|
||||||
'ENTITY-MIB' => 'entPhysicalSoftwareRev',
|
'ENTITY-MIB' => 'entPhysicalSoftwareRev',
|
||||||
'CISCO-IMAGE-MIB' => 'ciscoImageString',
|
'CISCO-IMAGE-MIB' => 'ciscoImageString',
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
# CISCO-FLASH-MIB::ciscoFlashDeviceTable
|
# CISCO-FLASH-MIB::ciscoFlashDeviceTable
|
||||||
'cisco_flash_size' => 'ciscoFlashDeviceSize',
|
'cisco_flash_size' => 'ciscoFlashDeviceSize',
|
||||||
|
|
||||||
# CISCO-IMAGE-MIB
|
# CISCO-IMAGE-MIB
|
||||||
'ci_images' => 'ciscoImageString',
|
'ci_images' => 'ciscoImageString',
|
||||||
);
|
);
|
||||||
@@ -105,6 +105,10 @@ sub os {
|
|||||||
|
|
||||||
# order here matters - there are Catalysts that run IOS and have catalyst
|
# order here matters - there are Catalysts that run IOS and have catalyst
|
||||||
# in their description field, as well as Catalysts that run IOS-XE.
|
# in their description field, as well as Catalysts that run IOS-XE.
|
||||||
|
return 'ios-xe' if ( $descr =~ /Denali/ );
|
||||||
|
return 'ios-xe' if ( $descr =~ /Fuji/ );
|
||||||
|
return 'ios-xe' if ( $descr =~ /Everest/ );
|
||||||
|
return 'ios-xe' if ( $descr =~ /Gibraltar/ );
|
||||||
return 'ios-xe' if ( $descr =~ /IOS-XE/ );
|
return 'ios-xe' if ( $descr =~ /IOS-XE/ );
|
||||||
return 'ios-xr' if ( $descr =~ /IOS XR/ );
|
return 'ios-xr' if ( $descr =~ /IOS XR/ );
|
||||||
return 'ios' if ( $descr =~ /IOS/ );
|
return 'ios' if ( $descr =~ /IOS/ );
|
||||||
@@ -334,7 +338,7 @@ Eric Miller, Max Baker, Sam Stickland
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $ciscostats = new SNMP::Info(
|
my $ciscostats = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -342,7 +346,7 @@ Eric Miller, Max Baker, Sam Stickland
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $ciscostats->class();
|
my $class = $ciscostats->class();
|
||||||
@@ -351,7 +355,7 @@ Eric Miller, Max Baker, Sam Stickland
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::CiscoStats is a subclass of SNMP::Info that provides cpu, memory,
|
SNMP::Info::CiscoStats is a subclass of SNMP::Info that provides cpu, memory,
|
||||||
os and version information about Cisco Devices.
|
os and version information about Cisco Devices.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
@@ -385,8 +389,6 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -447,7 +449,7 @@ Tries to parse C<ROMMON> version from rom_id() string
|
|||||||
|
|
||||||
Current CPU usage in percent.
|
Current CPU usage in percent.
|
||||||
|
|
||||||
C<1.3.6.1.4.1.9.2.1.56.0> =
|
C<1.3.6.1.4.1.9.2.1.56.0> =
|
||||||
C<OLD-CISCO-CPU-MIB:avgBusyPer>
|
C<OLD-CISCO-CPU-MIB:avgBusyPer>
|
||||||
|
|
||||||
=item $ciscostats->ios_cpu_1min()
|
=item $ciscostats->ios_cpu_1min()
|
||||||
|
|||||||
@@ -1,42 +1,42 @@
|
|||||||
# SNMP::Info::CiscoStpExtensions
|
# SNMP::Info::CiscoStpExtensions
|
||||||
#
|
#
|
||||||
# Copyright (c)2009 Carlos Vicente
|
# Copyright (c)2009 Carlos Vicente
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are met:
|
# modification, are permitted provided that the following conditions are met:
|
||||||
#
|
#
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
# this list of conditions and the following disclaimer.
|
# this list of conditions and the following disclaimer.
|
||||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
# this list of conditions and the following disclaimer in the documentation
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
# and/or other materials provided with the distribution.
|
# and/or other materials provided with the distribution.
|
||||||
# * Neither the name of the author nor the
|
# * Neither the name of the author nor the
|
||||||
# names of its contributors may be used to endorse or promote products
|
# names of its contributors may be used to endorse or promote products
|
||||||
# derived from this software without specific prior written permission.
|
# derived from this software without specific prior written permission.
|
||||||
#
|
#
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
# 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
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
# 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
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::CiscoStpExtensions;
|
package SNMP::Info::CiscoStpExtensions;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
use SNMP::Info::Bridge;
|
use SNMP::Info::Bridge;
|
||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PORTSTAT, $INIT);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
||||||
@@ -54,12 +54,15 @@ $VERSION = '3.52';
|
|||||||
'stpx_stp_type' => 'stpxSpanningTreeType',
|
'stpx_stp_type' => 'stpxSpanningTreeType',
|
||||||
'stpx_bpduguard_enable' => 'stpxFastStartBpduGuardEnable',
|
'stpx_bpduguard_enable' => 'stpxFastStartBpduGuardEnable',
|
||||||
'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
|
'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
|
||||||
|
'stpx_faststart_default' => 'stpxFastStartGlobalDefaultMode',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Bridge::FUNCS,
|
%SNMP::Info::Bridge::FUNCS,
|
||||||
'stpx_rootguard_enabled' => 'stpxRootGuardConfigEnabled',
|
'stpx_rootguard_enabled' => 'stpxRootGuardConfigEnabled',
|
||||||
'stpx_loopguard_enabled' => 'stpxLoopGuardConfigEnabled',
|
'stpx_loopguard_enabled' => 'stpxLoopGuardConfigEnabled',
|
||||||
|
'stpx_faststart_enabled' => 'stpxFastStartPortEnable',
|
||||||
|
'stpx_faststart_operational' => 'stpxFastStartPortMode',
|
||||||
'stpx_port_bpduguard_mode' => 'stpxFastStartPortBpduGuardMode',
|
'stpx_port_bpduguard_mode' => 'stpxFastStartPortBpduGuardMode',
|
||||||
'stpx_port_bpdufilter_mode' => 'stpxFastStartPortBpduFilterMode',
|
'stpx_port_bpdufilter_mode' => 'stpxFastStartPortBpduFilterMode',
|
||||||
'stpx_smst_root' => 'stpxSMSTInstanceCISTRegionalRoot',
|
'stpx_smst_root' => 'stpxSMSTInstanceCISTRegionalRoot',
|
||||||
@@ -69,7 +72,7 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Bridge::MUNGE,
|
%SNMP::Info::Bridge::MUNGE,
|
||||||
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
|
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -103,11 +106,11 @@ sub mst_region_rev {
|
|||||||
|
|
||||||
sub mst_vlan2instance {
|
sub mst_vlan2instance {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
# Get MST vlan-to-instance mapping
|
# Get MST vlan-to-instance mapping
|
||||||
my $m1k2k = $self->stpx_smst_vlans_mapped_1k2k;
|
my $m1k2k = $self->stpx_smst_vlans_mapped_1k2k;
|
||||||
my $m3k4k = $self->stpx_smst_vlans_mapped_3k4k;
|
my $m3k4k = $self->stpx_smst_vlans_mapped_3k4k;
|
||||||
|
|
||||||
# Get list of VLANs
|
# Get list of VLANs
|
||||||
my $vlan_membership = $self->i_vlan_membership;
|
my $vlan_membership = $self->i_vlan_membership;
|
||||||
my @vlans;
|
my @vlans;
|
||||||
@@ -137,7 +140,7 @@ sub mst_vlan2instance {
|
|||||||
$res{$vlan} = $inst;
|
$res{$vlan} = $inst;
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return \%res;
|
return \%res;
|
||||||
@@ -159,7 +162,7 @@ sub i_rootguard_enabled {
|
|||||||
$res{$iid} = $enabled;
|
$res{$iid} = $enabled;
|
||||||
}
|
}
|
||||||
return \%res;
|
return \%res;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_loopguard_enabled {
|
sub i_loopguard_enabled {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@@ -177,7 +180,7 @@ sub i_loopguard_enabled {
|
|||||||
$res{$iid} = $enabled;
|
$res{$iid} = $enabled;
|
||||||
}
|
}
|
||||||
return \%res;
|
return \%res;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_bpduguard_enabled {
|
sub i_bpduguard_enabled {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@@ -186,7 +189,7 @@ sub i_bpduguard_enabled {
|
|||||||
my $bpdugm_default = $self->stpx_bpduguard_enable();
|
my $bpdugm_default = $self->stpx_bpduguard_enable();
|
||||||
my $bp_index = $self->bp_index($partial);
|
my $bp_index = $self->bp_index($partial);
|
||||||
my $bpdugm = $self->stpx_port_bpduguard_mode();
|
my $bpdugm = $self->stpx_port_bpduguard_mode();
|
||||||
|
|
||||||
my %res;
|
my %res;
|
||||||
foreach my $index ( keys %$bpdugm ){
|
foreach my $index ( keys %$bpdugm ){
|
||||||
my $mode = $bpdugm->{$index};
|
my $mode = $bpdugm->{$index};
|
||||||
@@ -209,7 +212,7 @@ sub i_bpdufilter_enabled {
|
|||||||
my $bpdufm_default = $self->stpx_bpdufilter_enable();
|
my $bpdufm_default = $self->stpx_bpdufilter_enable();
|
||||||
my $bp_index = $self->bp_index($partial);
|
my $bp_index = $self->bp_index($partial);
|
||||||
my $bpdufm = $self->stpx_port_bpdufilter_mode();
|
my $bpdufm = $self->stpx_port_bpdufilter_mode();
|
||||||
|
|
||||||
my %res;
|
my %res;
|
||||||
foreach my $index ( keys %$bpdufm ){
|
foreach my $index ( keys %$bpdufm ){
|
||||||
my $mode = $bpdufm->{$index};
|
my $mode = $bpdufm->{$index};
|
||||||
@@ -225,6 +228,36 @@ sub i_bpdufilter_enabled {
|
|||||||
return \%res;
|
return \%res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_faststart_enabled {
|
||||||
|
my $self = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $faststart_default = $self->stpx_faststart_default();
|
||||||
|
my $bp_index = $self->bp_index($partial);
|
||||||
|
my $faststart = $self->stpx_faststart_enabled();
|
||||||
|
my $faststart_oper = $self->stpx_faststart_operational();
|
||||||
|
|
||||||
|
my %res;
|
||||||
|
# stpxFastStartPortEnable is deprecated in favour of stpxFastStartPortMode
|
||||||
|
# see https://github.com/netdisco/netdisco/issues/12
|
||||||
|
foreach my $index ( keys %$faststart, keys %$faststart_oper ){
|
||||||
|
my $mode = $faststart_oper->{$index} || $faststart->{$index};
|
||||||
|
my $iid = $bp_index->{$index};
|
||||||
|
next unless defined $iid;
|
||||||
|
next unless defined $mode;
|
||||||
|
if ( $mode eq 'default' ){
|
||||||
|
$res{$iid} = $faststart_default;
|
||||||
|
}else{
|
||||||
|
$res{$iid} = $mode;
|
||||||
|
}
|
||||||
|
$res{$iid} = 'enable' if $res{$iid} eq 'true';
|
||||||
|
$res{$iid} = 'disable' if $res{$iid} eq 'false';
|
||||||
|
$res{$iid} = 1 if $res{$iid} =~ m/enable/i; # enableForTrunk
|
||||||
|
$res{$iid} = 0 if $res{$iid} eq 'disable';
|
||||||
|
}
|
||||||
|
return \%res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub oct2str {
|
sub oct2str {
|
||||||
my ($v) = @_;
|
my ($v) = @_;
|
||||||
@@ -244,12 +277,25 @@ Carlos Vicente
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
my $stpx = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $stpx->class();
|
||||||
|
print " Using device sub class : $class\n";
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Create or use a subclass of SNMP::Info that inherits this class. Do not use
|
Create or use a subclass of SNMP::Info that inherits this class. Do not use
|
||||||
directly.
|
directly.
|
||||||
|
|
||||||
For debugging you can call new() directly as you would in SNMP::Info
|
For debugging you can call new() directly as you would in SNMP::Info
|
||||||
|
|
||||||
my $stpx = new SNMP::Info::CiscoStpExtensions(...);
|
my $stpx = new SNMP::Info::CiscoStpExtensions(...);
|
||||||
|
|
||||||
@@ -257,15 +303,21 @@ For debugging you can call new() directly as you would in SNMP::Info
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info
|
=item SNMP::Info
|
||||||
|
|
||||||
=item SNMP::Info::Bridge
|
=item SNMP::Info::Bridge
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
=head2 Required MIBs
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
=over
|
||||||
|
|
||||||
|
=item F<CISCO-STP-EXTENSIONS-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -273,7 +325,7 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $stpx->stp_ver()
|
=item $stpx->stp_ver()
|
||||||
|
|
||||||
Returns the particular STP version running on this device.
|
Returns the particular STP version running on this device.
|
||||||
Meant to override SNMP::Info::Brigde::stp_ver()
|
Meant to override SNMP::Info::Brigde::stp_ver()
|
||||||
|
|
||||||
Values: C<pvstPlus>, C<mistp>, C<mistpPvstPlus>, C<mst>, C<rapidPvstPlus>
|
Values: C<pvstPlus>, C<mistp>, C<mistpPvstPlus>, C<mst>, C<rapidPvstPlus>
|
||||||
@@ -291,25 +343,25 @@ to a hash.
|
|||||||
|
|
||||||
=item $stpx->mst_config_digest()
|
=item $stpx->mst_config_digest()
|
||||||
|
|
||||||
Returns the Multiple Spanning Tree (MST) configuration digest
|
Returns the Multiple Spanning Tree (MST) configuration digest
|
||||||
|
|
||||||
(C<stpxSMSTConfigDigest>)
|
(C<stpxSMSTConfigDigest>)
|
||||||
|
|
||||||
=item $stpx->mst_region_name()
|
=item $stpx->mst_region_name()
|
||||||
|
|
||||||
Returns the Multiple Spanning Tree (MST) region name
|
Returns the Multiple Spanning Tree (MST) region name
|
||||||
|
|
||||||
(C<stpxMSTRegionName>)
|
(C<stpxMSTRegionName>)
|
||||||
|
|
||||||
=item $stpx->mst_region_rev()
|
=item $stpx->mst_region_rev()
|
||||||
|
|
||||||
Returns the Multiple Spanning Tree (MST) region name
|
Returns the Multiple Spanning Tree (MST) region name
|
||||||
|
|
||||||
(C<stpxSMSTRegionRevision>)
|
(C<stpxSMSTRegionRevision>)
|
||||||
|
|
||||||
=item $stpx->mst_vlan2instance()
|
=item $stpx->mst_vlan2instance()
|
||||||
|
|
||||||
Returns the mapping of vlan to MST instance in the form of a hash reference
|
Returns the mapping of vlan to MST instance in the form of a hash reference
|
||||||
with key = VLAN id, value = STP instance
|
with key = VLAN id, value = STP instance
|
||||||
|
|
||||||
=item $stpx->i_rootguard_enabled()
|
=item $stpx->i_rootguard_enabled()
|
||||||
@@ -340,6 +392,13 @@ Format is a hash reference with key = C<ifIndex>, value = [1|0]
|
|||||||
|
|
||||||
(C<stpxFastStartBpduFilterEnable>)
|
(C<stpxFastStartBpduFilterEnable>)
|
||||||
|
|
||||||
|
=item $stpx->i_faststart_enabled()
|
||||||
|
|
||||||
|
Returns 1 or 0 depending on whether FastStart (aka PortFast) is enabled on a
|
||||||
|
given port. Format is a hash reference with key = C<ifIndex>, value = [1|0]
|
||||||
|
|
||||||
|
(C<stpxFastStartPortEnable> and C<stpxFastStartPortMode>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 MUNGES
|
=head1 MUNGES
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::CiscoVTP
|
# SNMP::Info::CiscoVTP
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::CiscoVTP;
|
package SNMP::Info::CiscoVTP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoVTP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CiscoVTP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoVTP::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoVTP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-VTP-MIB' => 'vtpVlanName',
|
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||||
@@ -61,7 +61,6 @@ $VERSION = '3.52';
|
|||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
|
|
||||||
# CISCO-VTP-MIB::managementDomainTable
|
# CISCO-VTP-MIB::managementDomainTable
|
||||||
'vtp_d_index' => 'managementDomainIndex',
|
|
||||||
'vtp_d_name' => 'managementDomainName',
|
'vtp_d_name' => 'managementDomainName',
|
||||||
'vtp_d_mode' => 'managementDomainLocalMode',
|
'vtp_d_mode' => 'managementDomainLocalMode',
|
||||||
'vtp_d_rev' => 'managementDomainConfigRevNumber',
|
'vtp_d_rev' => 'managementDomainConfigRevNumber',
|
||||||
@@ -173,7 +172,7 @@ sub i_vlan {
|
|||||||
# vtp_trunk_dyn_stat is not useful for down ports
|
# vtp_trunk_dyn_stat is not useful for down ports
|
||||||
# so we use vtp_trunk_dyn to see if trunking is set
|
# so we use vtp_trunk_dyn to see if trunking is set
|
||||||
my $dyn = $trunk_dyn->{$port};
|
my $dyn = $trunk_dyn->{$port};
|
||||||
|
|
||||||
if (($stat and $stat =~ /^trunking/ )
|
if (($stat and $stat =~ /^trunking/ )
|
||||||
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))))
|
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))))
|
||||||
{
|
{
|
||||||
@@ -304,7 +303,7 @@ sub i_vlan_membership_untagged {
|
|||||||
my $vlan = $vlans->{$port};
|
my $vlan = $vlans->{$port};
|
||||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -530,14 +529,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $vtp = new SNMP::Info(
|
my $vtp = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $vtp->class();
|
my $class = $vtp->class();
|
||||||
@@ -545,7 +544,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::CiscoVTP is a subclass of SNMP::Info that provides
|
SNMP::Info::CiscoVTP is a subclass of SNMP::Info that provides
|
||||||
information about a Cisco device's VLAN and VTP Domain membership.
|
information about a Cisco device's VLAN and VTP Domain membership.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
@@ -566,8 +565,6 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -621,7 +618,7 @@ IDs. These are the VLANs which are members of enabled VLAN list for the port.
|
|||||||
Example:
|
Example:
|
||||||
my $interfaces = $vtp->interfaces();
|
my $interfaces = $vtp->interfaces();
|
||||||
my $vlans = $vtp->i_vlan_membership();
|
my $vlans = $vtp->i_vlan_membership();
|
||||||
|
|
||||||
foreach my $iid (sort keys %$interfaces) {
|
foreach my $iid (sort keys %$interfaces) {
|
||||||
my $port = $interfaces->{$iid};
|
my $port = $interfaces->{$iid};
|
||||||
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
||||||
@@ -723,7 +720,7 @@ for a good treaty of how to connect to the VLANs
|
|||||||
|
|
||||||
=item $vtp->i_vlan_type()
|
=item $vtp->i_vlan_type()
|
||||||
|
|
||||||
Static, Dynamic, or multiVlan.
|
Static, Dynamic, or multiVlan.
|
||||||
|
|
||||||
(C<vmVlanType>)
|
(C<vmVlanType>)
|
||||||
|
|
||||||
@@ -770,7 +767,7 @@ Each bit represents a VLAN. This is 3072 through 4095
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $vtp->i_voice_vlan()
|
=item $vtp->i_voice_vlan()
|
||||||
|
|
||||||
(C<vmVoiceVlanId>)
|
(C<vmVoiceVlanId>)
|
||||||
|
|
||||||
@@ -780,10 +777,6 @@ Each bit represents a VLAN. This is 3072 through 4095
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $vtp->vtp_d_index()
|
|
||||||
|
|
||||||
(C<managementDomainIndex>)
|
|
||||||
|
|
||||||
=item $vtp->vtp_d_name()
|
=item $vtp->vtp_d_name()
|
||||||
|
|
||||||
(C<managementDomainName>)
|
(C<managementDomainName>)
|
||||||
@@ -889,7 +882,7 @@ Each bit represents a VLAN. This is 3072 through 4095
|
|||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -901,7 +894,7 @@ VLAN ID and port C<ifIndex>. This method should only be used on end station
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$vtp->interfaces()};
|
my %if_map = reverse %{$vtp->interfaces()};
|
||||||
$vtp->set_i_vlan('2', $if_map{'FastEthernet0/1'})
|
$vtp->set_i_vlan('2', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port VLAN. ",$vtp->error(1);
|
or die "Couldn't change port VLAN. ",$vtp->error(1);
|
||||||
|
|
||||||
=item $vtp->set_i_pvid ( pvid, ifIndex )
|
=item $vtp->set_i_pvid ( pvid, ifIndex )
|
||||||
@@ -911,7 +904,7 @@ port C<ifIndex>. This method should only be used on trunk ports.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$vtp->interfaces()};
|
my %if_map = reverse %{$vtp->interfaces()};
|
||||||
$vtp->set_i_pvid('2', $if_map{'FastEthernet0/1'})
|
$vtp->set_i_pvid('2', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port default VLAN. ",$vtp->error(1);
|
or die "Couldn't change port default VLAN. ",$vtp->error(1);
|
||||||
|
|
||||||
=item $vtp->set_i_untagged ( vlan, ifIndex )
|
=item $vtp->set_i_untagged ( vlan, ifIndex )
|
||||||
@@ -927,7 +920,7 @@ numeric VLAN ID and port C<ifIndex>.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$vtp->interfaces()};
|
my %if_map = reverse %{$vtp->interfaces()};
|
||||||
$vtp->set_add_i_vlan_tagged('2', $if_map{'FastEthernet0/1'})
|
$vtp->set_add_i_vlan_tagged('2', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't add port to egress list. ",$vtp->error(1);
|
or die "Couldn't add port to egress list. ",$vtp->error(1);
|
||||||
|
|
||||||
=item $vtp->set_remove_i_vlan_tagged ( vlan, ifIndex )
|
=item $vtp->set_remove_i_vlan_tagged ( vlan, ifIndex )
|
||||||
@@ -937,7 +930,7 @@ with the numeric VLAN ID and port C<ifIndex>.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$vtp->interfaces()};
|
my %if_map = reverse %{$vtp->interfaces()};
|
||||||
$vtp->set_remove_i_vlan_tagged('2', $if_map{'FastEthernet0/1'})
|
$vtp->set_remove_i_vlan_tagged('2', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't add port to egress list. ",$vtp->error(1);
|
or die "Couldn't add port to egress list. ",$vtp->error(1);
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|||||||
126
lib/SNMP/Info/DocsisCM.pm
Normal file
126
lib/SNMP/Info/DocsisCM.pm
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
# SNMP::Info::DocsisCM - SNMP Interface to DOCSIS Cable Modems
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 by The Netdisco Developer Team.
|
||||||
|
#
|
||||||
|
# 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::DocsisCM;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::DocsisCM::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::DocsisCM::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer2::MUNGE
|
||||||
|
);
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
my $cm = shift;
|
||||||
|
my $descr = $cm->description();
|
||||||
|
return $1 if $descr =~ /VENDOR: (.*?);/;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $cm = shift;
|
||||||
|
my $descr = $cm->description();
|
||||||
|
return $1 if $descr =~ /MODEL: (.*?)>>/;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return "CM";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $cm = shift;
|
||||||
|
my $descr = $cm->description();
|
||||||
|
return $1 if $descr =~ /SW_REV: (.*?);/;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::DocsisCM - SNMP Interface for DOCSIS Cable Modems
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
SNMP::Info::DocsisCM is a subclass of SNMP::Info that provides info
|
||||||
|
about a given cable modem. Extracts data from the sysDescr, which is
|
||||||
|
mandated in the DOCSIS specification to match
|
||||||
|
"HW_REV: <value>; VENDOR: <value>; BOOTR: <value>; SW_REV: <value>; MODEL: <value>"
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $cm->vendor()
|
||||||
|
|
||||||
|
Returns the vendor of the cable modem.
|
||||||
|
|
||||||
|
=item $cm->model()
|
||||||
|
|
||||||
|
Returns the model of the cable modem.
|
||||||
|
|
||||||
|
=item $cm->os()
|
||||||
|
|
||||||
|
Returns 'cm', as the actual os is vendor and model dependent.
|
||||||
|
|
||||||
|
=item $cm->os_ver()
|
||||||
|
|
||||||
|
Returns the version of the software, extracted from the SW_REV field.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
124
lib/SNMP/Info/DocsisHE.pm
Normal file
124
lib/SNMP/Info/DocsisHE.pm
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
package SNMP::Info::DocsisHE;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
|
||||||
|
use SNMP::Info;
|
||||||
|
|
||||||
|
@SNMP::Info::DocsisHE::ISA = qw/SNMP::Info Exporter/;
|
||||||
|
@SNMP::Info::DocsisHE::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
'DOCS-IF3-MIB' => 'docsIf3Mib',
|
||||||
|
'DOCS-IF-MIB' => 'docsIfMib',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = ();
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
# DOCSIS 3.0 (DOCS-IF3-MIB) from CableLabs
|
||||||
|
'docs_if3_cmts_cm_status_md_if_index'=> 'docsIf3CmtsCmRegStatusMdIfIndex',
|
||||||
|
# DOCSIS (1.1, etc) from IETF
|
||||||
|
'docs_if_cmts_cm_status_inet_address_type' => 'docsIfCmtsCmStatusInetAddressType',
|
||||||
|
'docs_if_cmts_cm_status_inet_address' => 'docsIfCmtsCmStatusInetAddress',
|
||||||
|
'docs_cmts_cm_down_channel_if_index' => 'docsIfCmtsCmStatusDownChannelIfIndex',
|
||||||
|
'docs_cmts_cm_up_channel_if_index' => 'docsIfCmtsCmStatusUpChannelIfIndex',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = ();
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::DocsisHE - SNMP Interface for F<DOCS-IF-MIB> and F<DOCS-IF3-MIB>
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Ryan Gasik
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
my $cmts = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'cmts',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
);
|
||||||
|
# Get a list of modems off the DOCSIS CMTS
|
||||||
|
my $modems = $cmts->docs_if_cmts_cm_status_inet_address()
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
SNMP::Info::DocsisHE is a subclass of SNMP::Info that provides information
|
||||||
|
about the cable modems of a DOCSIS CMTS.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<DOCS-IF-MIB>
|
||||||
|
Standard IETF MIBs for DOCSIS 1.1
|
||||||
|
|
||||||
|
=item F<DOCS-IF3-MIB>
|
||||||
|
CableLabs MIBs for DOCSIS 3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $info->docs_if3_cmts_cm_status_md_if_index()
|
||||||
|
|
||||||
|
Returns reference to hash of the IfIndex associated with each cable modem.
|
||||||
|
|
||||||
|
(C<docsIf3CmtsCmRegStatusMdIfIndex>)
|
||||||
|
|
||||||
|
=item $info->docs_if_cmts_cm_status_inet_address_type()
|
||||||
|
|
||||||
|
Returns reference to hash of the type of IP address (ie, IPv4, IPv6)
|
||||||
|
associated with each cable modem
|
||||||
|
|
||||||
|
(C<docsIfCmtsCmStatusInetAddressType>)
|
||||||
|
|
||||||
|
=item $info->docs_if_cmts_cm_status_inet_address()
|
||||||
|
|
||||||
|
Returns reference to hash of the IP address associated with each
|
||||||
|
cable modem.
|
||||||
|
|
||||||
|
(C<docsIfCmtsCmStatusInetAddress>)
|
||||||
|
|
||||||
|
=item $info->docs_cmts_cm_down_channel_if_index()
|
||||||
|
|
||||||
|
Returns reference to hash of the IfIndex of the down channel
|
||||||
|
(for DOCSIS 1.1) or a down channel (DOCSIS 3+) associated with each
|
||||||
|
cable modem.
|
||||||
|
|
||||||
|
(C<docsIfCmtsCmStatusDownChannelIfIndex>)
|
||||||
|
|
||||||
|
=item $info->docs_cmts_cm_up_channel_if_index()
|
||||||
|
|
||||||
|
Returns reference to hash of the IfIndex of the up channel
|
||||||
|
(for DOCSIS 1.1) or a up channel (DOCSIS 3+) associated with each
|
||||||
|
cable modem.
|
||||||
|
|
||||||
|
(C<docsIfCmtsCmStatusUpChannelIfIndex>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -31,15 +31,16 @@
|
|||||||
package SNMP::Info::EDP;
|
package SNMP::Info::EDP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::LLDP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::EDP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
|
@SNMP::Info::EDP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
||||||
@@ -64,7 +65,7 @@ sub hasEDP {
|
|||||||
my $edp_ip = $edp->extremeEdpNeighborVlanIpAddress() || {};
|
my $edp_ip = $edp->extremeEdpNeighborVlanIpAddress() || {};
|
||||||
|
|
||||||
return 1 if ( scalar( keys %$edp_ip ) );
|
return 1 if ( scalar( keys %$edp_ip ) );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,12 +76,12 @@ sub hasEDP {
|
|||||||
# address since they should all originate from the same device, but we don't
|
# address since they should all originate from the same device, but we don't
|
||||||
# know if they would all be reachable from the network management application.
|
# know if they would all be reachable from the network management application.
|
||||||
#
|
#
|
||||||
# We don't inplement partials since this is private index function
|
# We don't implement partials since this is private index function
|
||||||
sub _edp_index {
|
sub _edp_index {
|
||||||
my $edp = shift;
|
my $edp = shift;
|
||||||
|
|
||||||
my $edp_ip = $edp->extremeEdpNeighborVlanIpAddress() || {};
|
my $edp_ip = $edp->extremeEdpNeighborVlanIpAddress() || {};
|
||||||
|
|
||||||
my %edp_index;
|
my %edp_index;
|
||||||
foreach my $key ( keys %$edp_ip ) {
|
foreach my $key ( keys %$edp_ip ) {
|
||||||
my $ip = $edp_ip->{$key};
|
my $ip = $edp_ip->{$key};
|
||||||
@@ -103,7 +104,7 @@ sub edp_if {
|
|||||||
$iid = $1 if $iid =~ /^(\d+)\./;
|
$iid = $1 if $iid =~ /^(\d+)\./;
|
||||||
$edp_if{$key} = $iid;
|
$edp_if{$key} = $iid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return \%edp_if;
|
return \%edp_if;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,10 +194,10 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $edp = new SNMP::Info (
|
my $edp = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
@@ -204,10 +205,10 @@ Eric Miller
|
|||||||
my $class = $edp->class();
|
my $class = $edp->class();
|
||||||
print " Using device sub class : $class\n";
|
print " Using device sub class : $class\n";
|
||||||
|
|
||||||
$haslldp = $edp->hasLLDP() ? 'yes' : 'no';
|
$hasedp = $edp->hasEDP() ? 'yes' : 'no';
|
||||||
|
|
||||||
# Print out a map of device ports with LLDP neighbors:
|
# Print out a map of device ports with EDP neighbors:
|
||||||
my $interfaces = $edp->interfaces();
|
my $interfaces = $edp->interfaces();
|
||||||
my $edp_if = $edp->edp_if();
|
my $edp_if = $edp->edp_if();
|
||||||
my $edp_ip = $edp->edp_ip();
|
my $edp_ip = $edp->edp_ip();
|
||||||
my $edp_port = $edp->edp_port();
|
my $edp_port = $edp->edp_port();
|
||||||
@@ -222,7 +223,7 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::EDP is a subclass of SNMP::Info that provides an object oriented
|
SNMP::Info::EDP is a subclass of SNMP::Info that provides an object oriented
|
||||||
interface to EDP information through SNMP.
|
interface to EDP information through SNMP.
|
||||||
|
|
||||||
EDP is a Layer 2 protocol that allows a network device to advertise its
|
EDP is a Layer 2 protocol that allows a network device to advertise its
|
||||||
@@ -243,7 +244,7 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -251,7 +252,7 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $edp->hasEDP()
|
=item $edp->hasEDP()
|
||||||
|
|
||||||
Is EDP is active in this device?
|
Is EDP active on this device?
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -285,7 +286,7 @@ Returns remote port ID
|
|||||||
|
|
||||||
Returns the operating system version of the remote system.
|
Returns the operating system version of the remote system.
|
||||||
|
|
||||||
Nulls are removed before the value is returned.
|
Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<extremeEdpNeighborSoftwareVersion>)
|
(C<extremeEdpNeighborSoftwareVersion>)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Entity
|
# SNMP::Info::Entity
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::Entity;
|
package SNMP::Info::Entity;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::Entity::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::Entity::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Entity::EXPORT_OK = qw//;
|
@SNMP::Info::Entity::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ sub e_index {
|
|||||||
my $entity = shift;
|
my $entity = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
# Force use of MIB leaf to avoid inheritance issues in psuedo classes
|
# Force use of MIB leaf to avoid inheritance issues in pseudo classes
|
||||||
my $e_descr = $entity->entPhysicalDescr($partial);
|
my $e_descr = $entity->entPhysicalDescr($partial);
|
||||||
|
|
||||||
return unless ($e_descr);
|
return unless ($e_descr);
|
||||||
@@ -109,6 +109,57 @@ sub e_port {
|
|||||||
return \%e_port;
|
return \%e_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub entity_derived_serial {
|
||||||
|
my $entity = shift;
|
||||||
|
|
||||||
|
my $e_parent = $entity->e_parent() || {};
|
||||||
|
my $e_class = $entity->e_class() || {};
|
||||||
|
|
||||||
|
# Sort keys to return a consistent result between runs
|
||||||
|
foreach my $iid ( sort keys %$e_parent ) {
|
||||||
|
my $parent = $e_parent->{$iid};
|
||||||
|
my $class = $e_class->{$iid} || '';
|
||||||
|
# Only consider serial numbers for entries without a parent, or
|
||||||
|
# if they are of type "chassis"
|
||||||
|
if ( $parent eq '0' or $class eq 'chassis') {
|
||||||
|
my $serial = $entity->e_serial($iid);
|
||||||
|
if ( $serial && $serial->{$iid} ) {
|
||||||
|
return $serial->{$iid};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
my $descr = $entity->e_descr($iid);
|
||||||
|
if ( $descr and $descr->{$iid} =~ /serial#?:\s*([a-z0-9]+)/i )
|
||||||
|
{
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub entity_derived_os_ver {
|
||||||
|
my $entity = shift;
|
||||||
|
|
||||||
|
my $e_parent = $entity->e_parent() || {};
|
||||||
|
my $e_class = $entity->e_class() || {};
|
||||||
|
|
||||||
|
# Sort keys to return a consistent result between runs
|
||||||
|
foreach my $iid ( sort keys %$e_parent ) {
|
||||||
|
my $parent = $e_parent->{$iid};
|
||||||
|
my $class = $e_class->{$iid} || '';
|
||||||
|
# Only consider serial numbers for entries without a parent, or
|
||||||
|
# if they are of type "chassis"
|
||||||
|
if ( $parent eq '0' or $class eq 'chassis') {
|
||||||
|
my $os_ver = $entity->e_swver($iid);
|
||||||
|
if ( $os_ver && $os_ver->{$iid} ) {
|
||||||
|
return $os_ver->{$iid};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -123,14 +174,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $entity = new SNMP::Info(
|
my $entity = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $entity->class();
|
my $class = $entity->class();
|
||||||
@@ -162,8 +213,6 @@ none.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
none.
|
none.
|
||||||
@@ -173,6 +222,23 @@ none.
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $entity->entity_derived_serial()
|
||||||
|
|
||||||
|
Tries to determine the device serial number from the F<ENTITY-MIB>. Only
|
||||||
|
considers serial numbers for entries without a parent, or if they are of type
|
||||||
|
chassis. Looks at C<entPhysicalSerialNum> and then C<entPhysicalDescr> for
|
||||||
|
serial number.
|
||||||
|
|
||||||
|
=item $entity->entity_derived_os_ver()
|
||||||
|
|
||||||
|
Tries to determine the device OS version from the F<ENTITY-MIB>. Only
|
||||||
|
considers serial numbers for entries without a parent, or if they are of type
|
||||||
|
chassis. Looks at C<entPhysicalSoftwareRev> for the version.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Entity Table
|
=head2 Entity Table
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::EtherLike
|
# SNMP::Info::EtherLike
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::EtherLike;
|
package SNMP::Info::EtherLike;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::EtherLike::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::EtherLike::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::EtherLike::EXPORT_OK = qw//;
|
@SNMP::Info::EtherLike::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
||||||
|
|
||||||
@@ -68,8 +68,7 @@ $VERSION = '3.52';
|
|||||||
'el_xmit_defer' => 'dot3StatsDeferredTransmissions',
|
'el_xmit_defer' => 'dot3StatsDeferredTransmissions',
|
||||||
|
|
||||||
# Ethernet-like Collision Statistics Group
|
# Ethernet-like Collision Statistics Group
|
||||||
'el_coll_count' => 'dot3CollCount',
|
'el_coll_freq' => 'dot3CollFrequencies',
|
||||||
'el_coll_freq' => 'dot3CollFrequencies'
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::MUNGE, 'el_duplex' => \&munge_el_duplex, );
|
%MUNGE = ( %SNMP::Info::MUNGE, 'el_duplex' => \&munge_el_duplex, );
|
||||||
@@ -96,22 +95,22 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $el = new SNMP::Info (
|
my $el = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
|
|
||||||
my $class = $cdp->class();
|
my $class = $el->class();
|
||||||
print " Using device sub class : $class\n";
|
print " Using device sub class : $class\n";
|
||||||
|
|
||||||
# Find the duplex setting for a port on a device that implements
|
# Find the duplex setting for a port on a device that implements
|
||||||
# ETHERLIKE-MIB
|
# ETHERLIKE-MIB
|
||||||
my $interfaces = $el->interfaces();
|
my $interfaces = $el->interfaces();
|
||||||
my $el_index = $el->el_index();
|
my $el_index = $el->el_index();
|
||||||
my $el_duplex = $el->el_duplex();
|
my $el_duplex = $el->el_duplex();
|
||||||
|
|
||||||
foreach my $el_port (keys %$el_duplex){
|
foreach my $el_port (keys %$el_duplex){
|
||||||
my $duplex = $el_duplex->{$el_port};
|
my $duplex = $el_duplex->{$el_port};
|
||||||
@@ -123,7 +122,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::EtherLike is a subclass of SNMP::Info that supplies
|
SNMP::Info::EtherLike is a subclass of SNMP::Info that supplies
|
||||||
access to the F<ETHERLIKE-MIB> used by some Layer 3 Devices such as
|
access to the F<ETHERLIKE-MIB> used by some Layer 3 Devices such as
|
||||||
Cisco routers.
|
Cisco routers.
|
||||||
|
|
||||||
@@ -134,7 +133,7 @@ directly.
|
|||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
|
|
||||||
@@ -144,8 +143,6 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::FDP
|
# SNMP::Info::FDP
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Bruce Rodger, Max Baker
|
# Copyright (c) 2008 Bruce Rodger, Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -34,15 +33,16 @@
|
|||||||
package SNMP::Info::FDP;
|
package SNMP::Info::FDP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::FDP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::FDP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::FDP::EXPORT_OK = qw//;
|
@SNMP::Info::FDP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
||||||
|
|
||||||
@@ -50,11 +50,9 @@ $VERSION = '3.52';
|
|||||||
'fdp_run' => 'snFdpGlobalRun',
|
'fdp_run' => 'snFdpGlobalRun',
|
||||||
'fdp_interval' => 'snFdpGlobalMessageInterval',
|
'fdp_interval' => 'snFdpGlobalMessageInterval',
|
||||||
'fdp_holdtime' => 'snFdpGlobalHoldTime',
|
'fdp_holdtime' => 'snFdpGlobalHoldTime',
|
||||||
'fdp_gid' => 'snFdpGlobalDeviceId',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
'fdp_index' => 'snFdpCacheIfIndex',
|
|
||||||
'fdp_proto' => 'snFdpCacheAddressType',
|
'fdp_proto' => 'snFdpCacheAddressType',
|
||||||
'fdp_ip' => 'snFdpCacheAddress',
|
'fdp_ip' => 'snFdpCacheAddress',
|
||||||
'fdp_ver' => 'snFdpCacheVersion',
|
'fdp_ver' => 'snFdpCacheVersion',
|
||||||
@@ -62,14 +60,12 @@ $VERSION = '3.52';
|
|||||||
'fdp_port' => 'snFdpCacheDevicePort',
|
'fdp_port' => 'snFdpCacheDevicePort',
|
||||||
'fdp_platform' => 'snFdpCachePlatform',
|
'fdp_platform' => 'snFdpCachePlatform',
|
||||||
'fdp_capabilities' => 'snFdpCacheCapabilities',
|
'fdp_capabilities' => 'snFdpCacheCapabilities',
|
||||||
'fdp_domain' => 'snFdpCacheVTPMgmtDomain',
|
'fdp_cache_type' => 'snFdpCacheVendorId',
|
||||||
'fdp_vlan' => 'snFdpCacheNativeVLAN',
|
|
||||||
'fdp_duplex' => 'snFdpCacheDuplex',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
'fdp_capabilities' => \&SNMP::Info::munge_bits,
|
'fdp_capabilities' => \&SNMP::Info::munge_bits,
|
||||||
'fdp_ip' => \&SNMP::Info::munge_ip
|
'fdp_ip' => \&SNMP::Info::munge_ip,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub fdp_run {
|
sub fdp_run {
|
||||||
@@ -84,9 +80,7 @@ sub fdp_run {
|
|||||||
sub hasFDP {
|
sub hasFDP {
|
||||||
my $fdp = shift;
|
my $fdp = shift;
|
||||||
|
|
||||||
my $ver = $fdp->{_version};
|
my $ver = $fdp->snmp_ver();
|
||||||
|
|
||||||
#my $ver = $fdp->fdp_ver;
|
|
||||||
|
|
||||||
# SNMP v1 clients dont have the globals
|
# SNMP v1 clients dont have the globals
|
||||||
if ( defined $ver and $ver == 1 ) {
|
if ( defined $ver and $ver == 1 ) {
|
||||||
@@ -103,11 +97,6 @@ sub hasFDP {
|
|||||||
sub fdp_if {
|
sub fdp_if {
|
||||||
my $fdp = shift;
|
my $fdp = shift;
|
||||||
|
|
||||||
# See if by some miracle Cisco implemented the fdpCacheIfIndex entry
|
|
||||||
my $fdp_index = $fdp->fdp_index();
|
|
||||||
return $fdp_index if defined $fdp_index;
|
|
||||||
|
|
||||||
# Nope, didn't think so. Now we fake it.
|
|
||||||
my $fdp_ip = $fdp->fdp_ip();
|
my $fdp_ip = $fdp->fdp_ip();
|
||||||
unless ( defined $fdp_ip ) {
|
unless ( defined $fdp_ip ) {
|
||||||
$fdp->error_throw(
|
$fdp->error_throw(
|
||||||
@@ -143,10 +132,10 @@ Bruce Rodger, Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $fdp = new SNMP::Info (
|
my $fdp = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
@@ -157,7 +146,7 @@ Bruce Rodger, Max Baker
|
|||||||
$hasfdp = $fdp->hasFDP() ? 'yes' : 'no';
|
$hasfdp = $fdp->hasFDP() ? 'yes' : 'no';
|
||||||
|
|
||||||
# Print out a map of device ports with FDP neighbors:
|
# Print out a map of device ports with FDP neighbors:
|
||||||
my $interfaces = $fdp->interfaces();
|
my $interfaces = $fdp->interfaces();
|
||||||
my $fdp_if = $fdp->fdp_if();
|
my $fdp_if = $fdp->fdp_if();
|
||||||
my $fdp_ip = $fdp->fdp_ip();
|
my $fdp_ip = $fdp->fdp_ip();
|
||||||
my $fdp_port = $fdp->fdp_port();
|
my $fdp_port = $fdp->fdp_port();
|
||||||
@@ -172,7 +161,7 @@ Bruce Rodger, Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::FDP is a subclass of SNMP::Info that provides an object oriented
|
SNMP::Info::FDP is a subclass of SNMP::Info that provides an object oriented
|
||||||
interface to FDP information through SNMP.
|
interface to FDP information through SNMP.
|
||||||
|
|
||||||
FDP is a Layer 2 protocol that supplies topology information of
|
FDP is a Layer 2 protocol that supplies topology information of
|
||||||
@@ -183,7 +172,7 @@ virtually identical. FDP is implemented in Brocade (Foundry) devices.
|
|||||||
Create or use a device subclass that inherits this class. Do not use
|
Create or use a device subclass that inherits this class. Do not use
|
||||||
directly.
|
directly.
|
||||||
|
|
||||||
Each device implements a subset of the global and cache entries.
|
Each device implements a subset of the global and cache entries.
|
||||||
Check the return value to see if that data is held by the device.
|
Check the return value to see if that data is held by the device.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -197,11 +186,11 @@ None.
|
|||||||
=item F<FOUNDRY-SN-SWITCH-GROUP-MIB>
|
=item F<FOUNDRY-SN-SWITCH-GROUP-MIB>
|
||||||
|
|
||||||
Needs a reasonably recent MIB. Works OK with B2R07604A.mib, but doesn't
|
Needs a reasonably recent MIB. Works OK with B2R07604A.mib, but doesn't
|
||||||
work with B2R07600C.
|
work with B2R07600C.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -209,13 +198,13 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $fdp->hasFDP()
|
=item $fdp->hasFDP()
|
||||||
|
|
||||||
Is FDP is active in this device?
|
Is FDP is active in this device?
|
||||||
|
|
||||||
Accounts for SNMP version 1 devices which may have FDP but not fdp_run()
|
Accounts for SNMP version 1 devices which may have FDP but not fdp_run()
|
||||||
|
|
||||||
=item $fdp->fdp_run()
|
=item $fdp->fdp_run()
|
||||||
|
|
||||||
Is FDP enabled on this device?
|
Is FDP enabled on this device?
|
||||||
|
|
||||||
(C<fdpGlobalRun>)
|
(C<fdpGlobalRun>)
|
||||||
|
|
||||||
@@ -227,19 +216,10 @@ Interval in seconds at which FDP messages are generated.
|
|||||||
|
|
||||||
=item $fdp->fdp_holdtime()
|
=item $fdp->fdp_holdtime()
|
||||||
|
|
||||||
Time in seconds that FDP messages are kept.
|
Time in seconds that FDP messages are kept.
|
||||||
|
|
||||||
(C<fdpGlobalHoldTime>)
|
(C<fdpGlobalHoldTime>)
|
||||||
|
|
||||||
=item $fdp->fdp_gid()
|
|
||||||
|
|
||||||
Returns FDP device ID.
|
|
||||||
|
|
||||||
This is the device id broadcast via FDP to other devices, and is what is
|
|
||||||
retrieved from remote devices with $fdp->id().
|
|
||||||
|
|
||||||
(C<fdpGlobalDeviceId>)
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
@@ -256,13 +236,13 @@ Interval in seconds at which FDP messages are generated.
|
|||||||
|
|
||||||
=item $fdp->fdp_holdtime()
|
=item $fdp->fdp_holdtime()
|
||||||
|
|
||||||
Time in seconds that FDP messages are kept.
|
Time in seconds that FDP messages are kept.
|
||||||
|
|
||||||
(C<fdpGlobalHoldTime>)
|
(C<fdpGlobalHoldTime>)
|
||||||
|
|
||||||
=item $fdp->fdp_id()
|
=item $fdp->fdp_id()
|
||||||
|
|
||||||
Returns FDP device ID.
|
Returns FDP device ID.
|
||||||
|
|
||||||
This is the device id broadcast via FDP to other devices, and is what is
|
This is the device id broadcast via FDP to other devices, and is what is
|
||||||
retrieved from remote devices with $fdp->id().
|
retrieved from remote devices with $fdp->id().
|
||||||
@@ -323,19 +303,6 @@ Thanks to Martin Lorensen for a pointer to this information.
|
|||||||
|
|
||||||
(C<fdpCacheCapabilities>)
|
(C<fdpCacheCapabilities>)
|
||||||
|
|
||||||
=item $fdp->fdp_domain()
|
|
||||||
|
|
||||||
The CDP version of this returns remote VTP Management Domain as defined
|
|
||||||
in C<CISCO-VTP-MIB::managementDomainName>
|
|
||||||
|
|
||||||
(C<fdpCacheVTPMgmtDomain>)
|
|
||||||
|
|
||||||
=item $fdp->fdp_duplex()
|
|
||||||
|
|
||||||
Returns the port duplex status from remote devices.
|
|
||||||
|
|
||||||
(C<fdpCacheDuplex>)
|
|
||||||
|
|
||||||
=item $fdp->fdp_id()
|
=item $fdp->fdp_id()
|
||||||
|
|
||||||
Returns remote device id string
|
Returns remote device id string
|
||||||
@@ -346,19 +313,11 @@ Returns remote device id string
|
|||||||
|
|
||||||
Returns the mapping to the SNMP Interface Table.
|
Returns the mapping to the SNMP Interface Table.
|
||||||
|
|
||||||
Note that a lot devices don't implement $fdp->fdp_index(), So if it isn't
|
|
||||||
around, we fake it.
|
|
||||||
|
|
||||||
In order to map the fdp table entry back to the interfaces() entry, we
|
In order to map the fdp table entry back to the interfaces() entry, we
|
||||||
truncate the last number off of it :
|
truncate the last number off of it :
|
||||||
|
|
||||||
# it exists, yay.
|
|
||||||
my $fdp_index = $device->fdp_index();
|
|
||||||
return $fdp_index if defined $fdp_index;
|
|
||||||
|
|
||||||
# if not, let's fake it
|
|
||||||
my $fdp_ip = $device->fdp_ip();
|
my $fdp_ip = $device->fdp_ip();
|
||||||
|
|
||||||
my %fdp_if
|
my %fdp_if
|
||||||
foreach my $key (keys %$fdp_ip){
|
foreach my $key (keys %$fdp_ip){
|
||||||
$iid = $key;
|
$iid = $key;
|
||||||
@@ -366,30 +325,18 @@ truncate the last number off of it :
|
|||||||
$iid =~ s/\.\d+$//;
|
$iid =~ s/\.\d+$//;
|
||||||
$fdp_if{$key} = $iid;
|
$fdp_if{$key} = $iid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return \%fdp_if;
|
return \%fdp_if;
|
||||||
|
|
||||||
|
|
||||||
=item $fdp->fdp_index()
|
|
||||||
|
|
||||||
Returns the mapping to the SNMP2 Interface table for FDP Cache Entries.
|
|
||||||
|
|
||||||
Most devices don't implement this, so you probably want to use $fdp->fdp_if()
|
|
||||||
instead.
|
|
||||||
|
|
||||||
See fdp_if() entry.
|
|
||||||
|
|
||||||
(C<fdpCacheIfIndex>)
|
|
||||||
|
|
||||||
=item $fdp->fdp_ip()
|
=item $fdp->fdp_ip()
|
||||||
|
|
||||||
Returns remote IP address
|
Returns remote IP address
|
||||||
|
|
||||||
(C<fdpCacheAddress>)
|
(C<fdpCacheAddress>)
|
||||||
|
|
||||||
=item $fdp->fdp_platform()
|
=item $fdp->fdp_platform()
|
||||||
|
|
||||||
Returns remote platform id
|
Returns remote platform id
|
||||||
|
|
||||||
(C<fdpCachePlatform>)
|
(C<fdpCachePlatform>)
|
||||||
|
|
||||||
@@ -405,17 +352,17 @@ Returns remote address type received. Usually IP.
|
|||||||
|
|
||||||
(C<fdpCacheAddressType>)
|
(C<fdpCacheAddressType>)
|
||||||
|
|
||||||
=item $fdp->fdp_ver()
|
=item $fdp->fdp_ver()
|
||||||
|
|
||||||
Returns remote hardware version
|
Returns remote hardware version
|
||||||
|
|
||||||
(C<fdpCacheVersion>)
|
(C<fdpCacheVersion>)
|
||||||
|
|
||||||
=item $fdp->fdp_vlan()
|
=item $fdp->fdp_cache_type()
|
||||||
|
|
||||||
Returns the remote interface native VLAN.
|
Returns type of entry received, either FDP or CDP.
|
||||||
|
|
||||||
(C<fdpCacheNativeVLAN>)
|
(C<snFdpCacheVendorId>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::IEEE802dot11
|
# SNMP::Info::IEEE802dot11
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,14 +30,16 @@
|
|||||||
package SNMP::Info::IEEE802dot11;
|
package SNMP::Info::IEEE802dot11;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::IEEE802dot11::ISA = qw/Exporter/;
|
@SNMP::Info::IEEE802dot11::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::IEEE802dot11::EXPORT_OK = qw//;
|
@SNMP::Info::IEEE802dot11::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
||||||
|
|
||||||
@@ -202,7 +203,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
package SNMP::Info::IEEE802dot3ad;
|
package SNMP::Info::IEEE802dot3ad;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Aggregate;
|
use SNMP::Info::Aggregate;
|
||||||
|
|
||||||
@@ -41,9 +42,9 @@ use SNMP::Info::Aggregate;
|
|||||||
agg_ports_lag
|
agg_ports_lag
|
||||||
/;
|
/;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Aggregate::MIBS,
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
@@ -64,7 +65,8 @@ sub agg_ports_lag {
|
|||||||
my $dev = shift;
|
my $dev = shift;
|
||||||
|
|
||||||
# TODO: implement partial
|
# TODO: implement partial
|
||||||
my $ports = $dev->ad_lag_ports;
|
my $ports = $dev->ad_lag_ports();
|
||||||
|
my $index = $dev->bp_index() || {};
|
||||||
|
|
||||||
return {} unless ref {} eq ref $ports and scalar keys %$ports;
|
return {} unless ref {} eq ref $ports and scalar keys %$ports;
|
||||||
|
|
||||||
@@ -73,8 +75,17 @@ sub agg_ports_lag {
|
|||||||
my $idx = $m;
|
my $idx = $m;
|
||||||
my $portlist = $ports->{$m};
|
my $portlist = $ports->{$m};
|
||||||
next unless $portlist;
|
next unless $portlist;
|
||||||
|
|
||||||
|
# While dot3adAggTable is indexed by ifIndex, the portlist is indexed
|
||||||
|
# with a dot1dBasePort, so we need to use dot1dBasePortIfIndex to map to
|
||||||
|
# the ifIndex. If we don't have dot1dBasePortIfIndex assume
|
||||||
|
# dot1dBasePort = ifIndex
|
||||||
for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
|
for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
|
||||||
$ret->{$i+1} = $idx if ( @$portlist[$i] );
|
my $ifindex = $i+1;
|
||||||
|
if ( exists($index->{$i+1}) and defined($index->{$i+1}) ) {
|
||||||
|
$ifindex = $index->{$i+1};
|
||||||
|
}
|
||||||
|
$ret->{$ifindex} = $idx if ( @$portlist[$i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,14 +106,14 @@ SNMP::Info Developers
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $info = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $info->class();
|
my $class = $info->class();
|
||||||
|
|||||||
@@ -30,13 +30,14 @@
|
|||||||
package SNMP::Info::IPv6;
|
package SNMP::Info::IPv6;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::IPv6::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::IPv6::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::IPv6::EXPORT_OK = qw//;
|
@SNMP::Info::IPv6::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE $METHOD/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $METHOD);
|
||||||
|
|
||||||
use constant {
|
use constant {
|
||||||
IPMIB => 1,
|
IPMIB => 1,
|
||||||
@@ -44,19 +45,19 @@ use constant {
|
|||||||
IPV6MIB => 3,
|
IPV6MIB => 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'IP-MIB' => 'ipv6InterfaceTableLastChange',
|
'IP-MIB' => 'ipv6InterfaceTableLastChange',
|
||||||
'IPV6-MIB' => 'ipv6IfTableLastChange',
|
'IPV6-MIB' => 'ipv6IfTableLastChange',
|
||||||
'CISCO-IETF-IP-MIB' => 'cInetNetToMediaNetAddress',
|
'CISCO-IETF-IP-MIB' => 'cInetNetToMediaNetAddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = ();
|
%GLOBALS = ();
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
'ip_n2p_phys_addr' => 'ipNetToPhysicalPhysAddress', # IP-MIB
|
'ip_n2p_phys_addr' => 'ipNetToPhysicalPhysAddress', # IP-MIB
|
||||||
'c_inet_phys_addr' => 'cInetNetToMediaPhysAddress', # CISCO-IETF-IP-MIB
|
'c_inet_phys_addr' => 'cInetNetToMediaPhysAddress', # CISCO-IETF-IP-MIB
|
||||||
'i6_n2p_phys_addr' => 'ipv6NetToMediaPhysAddress', # IPV6-MIB
|
'i6_n2p_phys_addr' => 'ipv6NetToMediaPhysAddress', # IPV6-MIB
|
||||||
@@ -67,20 +68,21 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
'ip_n2p_phys_state' => 'ipNetToPhysicalState', # IP-MIB
|
'ip_n2p_phys_state' => 'ipNetToPhysicalState', # IP-MIB
|
||||||
'c_inet_phys_state' => 'cInetNetToMediaState', # CISCO-IETF-IP-MIB
|
'c_inet_phys_state' => 'cInetNetToMediaState', # CISCO-IETF-IP-MIB
|
||||||
'i6_n2p_phys_state' => 'ipv6NetToMediaState', # IPV6-MIB
|
'i6_n2p_phys_state' => 'ipv6IfNetToMediaState', # IPV6-MIB
|
||||||
|
|
||||||
'ip_pfx_origin' => 'ipAddressPrefixOrigin', # IP-MIB
|
'ip_pfx_origin' => 'ipAddressPrefixOrigin', # IP-MIB
|
||||||
'c_pfx_origin' => 'cIpAddressPfxOrigin', # CISCO-IETF-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
|
'c_addr6_pfx' => 'cIpAddressPrefix', # CISCO-IETF-IP-MIB
|
||||||
|
|
||||||
'ip_addr6_pfxlen' => 'ipAddressPrefixLength', # IP-MIB
|
# Commented out are not-accessible according to MIB
|
||||||
'c_addr6_pfxlen' => 'cIpAddressPfxLength', # CISCO-IETF-IP-MIB
|
#'ip_addr6_pfxlen' => 'ipAddressPrefixLength', # IP-MIB
|
||||||
|
#'c_addr6_pfxlen' => 'cIpAddressPfxLength', # CISCO-IETF-IP-MIB
|
||||||
'i6_addr_pfxlen' => 'ipv6AddrPfxLength', # IPV6-MIB
|
'i6_addr_pfxlen' => 'ipv6AddrPfxLength', # IPV6-MIB
|
||||||
|
|
||||||
'ip_addr6_index' => 'ipAddressIfIndex', # IP-MIB
|
'ip_addr6_index' => 'ipAddressIfIndex', # IP-MIB
|
||||||
'c_addr6_index' => 'cIpAddressIfIndex', # CISCO-IETF-IP-MIB
|
'c_addr6_index' => 'cIpAddressIfIndex', # CISCO-IETF-IP-MIB
|
||||||
|
|
||||||
'ip_addr6_type' => 'ipAddressType', # IP-MIB
|
'ip_addr6_type' => 'ipAddressType', # IP-MIB
|
||||||
'c_addr6_type' => 'cIpAddressType', # CISCO-IETF-IP-MIB
|
'c_addr6_type' => 'cIpAddressType', # CISCO-IETF-IP-MIB
|
||||||
@@ -105,8 +107,8 @@ sub ipv6_n2p_mac {
|
|||||||
foreach my $row (keys %$phys_addr) {
|
foreach my $row (keys %$phys_addr) {
|
||||||
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
||||||
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
||||||
if ($info::METHOD == IPV6MIB) {
|
if ($info::METHOD == IPV6MIB) {
|
||||||
# IPV6-MIB doesn't include the addrtype in the index;
|
# IPV6-MIB doesn't include the addrtype in the index;
|
||||||
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
||||||
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
||||||
$addrtype = 2;
|
$addrtype = 2;
|
||||||
@@ -132,8 +134,8 @@ sub ipv6_n2p_addr {
|
|||||||
foreach my $row (keys %$net_addr) {
|
foreach my $row (keys %$net_addr) {
|
||||||
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
||||||
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
||||||
if ($info::METHOD == IPV6MIB) {
|
if ($info::METHOD == IPV6MIB) {
|
||||||
# IPV6-MIB doesn't include the addrtype in the index;
|
# IPV6-MIB doesn't include the addrtype in the index;
|
||||||
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
||||||
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
||||||
$addrtype = 2;
|
$addrtype = 2;
|
||||||
@@ -141,7 +143,7 @@ sub ipv6_n2p_addr {
|
|||||||
if ($addrtype == 2) { # IPv6
|
if ($addrtype == 2) { # IPv6
|
||||||
my $v6_packed = pack("C*", split(/\./, $v6addr));
|
my $v6_packed = pack("C*", split(/\./, $v6addr));
|
||||||
if (length($v6_packed) == 15) {
|
if (length($v6_packed) == 15) {
|
||||||
# Workaround for some some IP-MIB implementations, eg on Cisco Nexus: no explicit addrsize,
|
# Workaround for some some IP-MIB implementations, eg on Cisco Nexus: no explicit addrsize,
|
||||||
# so what we've collected in that variable is actually the first byte of the address.
|
# so what we've collected in that variable is actually the first byte of the address.
|
||||||
$v6_packed = pack('C', $addrsize) . $v6_packed;
|
$v6_packed = pack('C', $addrsize) . $v6_packed;
|
||||||
}
|
}
|
||||||
@@ -176,8 +178,8 @@ sub ipv6_n2p_if {
|
|||||||
foreach my $row (keys %$phys_addr) {
|
foreach my $row (keys %$phys_addr) {
|
||||||
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
||||||
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
||||||
if ($info::METHOD == IPV6MIB) {
|
if ($info::METHOD == IPV6MIB) {
|
||||||
# IPV6-MIB doesn't include the addrtype in the index;
|
# IPV6-MIB doesn't include the addrtype in the index;
|
||||||
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
||||||
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
||||||
$addrtype = 2;
|
$addrtype = 2;
|
||||||
@@ -203,8 +205,8 @@ sub ipv6_n2p_type {
|
|||||||
foreach my $row (keys %$phys_type) {
|
foreach my $row (keys %$phys_type) {
|
||||||
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
||||||
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
||||||
if ($info::METHOD == IPV6MIB) {
|
if ($info::METHOD == IPV6MIB) {
|
||||||
# IPV6-MIB doesn't include the addrtype in the index;
|
# IPV6-MIB doesn't include the addrtype in the index;
|
||||||
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
||||||
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
||||||
$addrtype = 2;
|
$addrtype = 2;
|
||||||
@@ -230,8 +232,8 @@ sub ipv6_n2p_state {
|
|||||||
foreach my $row (keys %$phys_state) {
|
foreach my $row (keys %$phys_state) {
|
||||||
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
if ($row =~ /^(\d+)\.(\d+)\.(\d+)\.([\d\.]+)$/) {
|
||||||
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
my $ifindex = $1; my $addrtype = $2; my $addrsize = $3; my $v6addr = $4;
|
||||||
if ($info::METHOD == IPV6MIB) {
|
if ($info::METHOD == IPV6MIB) {
|
||||||
# IPV6-MIB doesn't include the addrtype in the index;
|
# IPV6-MIB doesn't include the addrtype in the index;
|
||||||
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
# also, address syntax is IPv6Address (fixed 16 bytes) and not InetAddress (length field followed by address bytes)
|
||||||
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
$v6addr = join('.', $addrtype, $addrsize, $v6addr);
|
||||||
$addrtype = 2;
|
$addrtype = 2;
|
||||||
@@ -441,14 +443,14 @@ Jeroen van Ingen and Carlos Vicente
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $info = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $info->class();
|
my $class = $info->class();
|
||||||
@@ -456,12 +458,12 @@ Jeroen van Ingen and Carlos Vicente
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
The SNMP::Info::IPv6 class implements functions to for mapping IPv6 addresses
|
The SNMP::Info::IPv6 class implements functions to for mapping IPv6 addresses
|
||||||
to MAC addresses, interfaces and more. It will use data from the F<IP-MIB>,
|
to MAC addresses, interfaces and more. It will use data from the F<IP-MIB>,
|
||||||
F<IPV6-MIB>, or the F<CISCO-IETF-IP-MIB>, whichever is supported by the
|
F<IPV6-MIB>, or the F<CISCO-IETF-IP-MIB>, whichever is supported by the
|
||||||
device.
|
device.
|
||||||
|
|
||||||
This class is inherited by Info::Layer3 to provide IPv6 node tracking across
|
This class is inherited by Info::Layer3 to provide IPv6 node tracking across
|
||||||
device classes.
|
device classes.
|
||||||
|
|
||||||
For debugging purposes you can call this class directly as you would
|
For debugging purposes you can call this class directly as you would
|
||||||
@@ -478,7 +480,9 @@ none.
|
|||||||
=over
|
=over
|
||||||
|
|
||||||
=item F<IP-MIB>
|
=item F<IP-MIB>
|
||||||
|
|
||||||
=item F<IPV6-MIB>
|
=item F<IPV6-MIB>
|
||||||
|
|
||||||
=item F<CISCO-IETF-IP-MIB>
|
=item F<CISCO-IETF-IP-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -518,7 +522,7 @@ Maps an IPv6 address to its type (unicast, anycast, etc.)
|
|||||||
|
|
||||||
Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
|
Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
|
||||||
|
|
||||||
=item $info->ipv6_addr_prefix()
|
=item $info->ipv6_addr_prefix()
|
||||||
|
|
||||||
Maps IPv6 addresses with their prefixes
|
Maps IPv6 addresses with their prefixes
|
||||||
|
|
||||||
@@ -544,7 +548,7 @@ Maps an address of type C<cInetNetToMediaNetAddressType> on interface C<ifIndex>
|
|||||||
|
|
||||||
=head1 MUNGES
|
=head1 MUNGES
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item munge_physaddr()
|
=item munge_physaddr()
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# SNMP::Info::LLDP
|
# SNMP::Info::LLDP
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2018 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::LLDP;
|
package SNMP::Info::LLDP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::LLDP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::LLDP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
|
@SNMP::Info::LLDP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
||||||
@@ -116,7 +116,8 @@ sub hasLLDP {
|
|||||||
my $lldp_cap = $lldp->lldp_sys_cap();
|
my $lldp_cap = $lldp->lldp_sys_cap();
|
||||||
return 1 if defined $lldp_cap;
|
return 1 if defined $lldp_cap;
|
||||||
|
|
||||||
# If the device doesn't return local system capabilities, fallback by checking if it would report neighbors
|
# If the device doesn't return local system capabilities, fallback
|
||||||
|
# by checking if it would report neighbors
|
||||||
my $lldp_rem = $lldp->lldp_rem_id() || {};
|
my $lldp_rem = $lldp->lldp_rem_id() || {};
|
||||||
return 1 if scalar keys %$lldp_rem;
|
return 1 if scalar keys %$lldp_rem;
|
||||||
|
|
||||||
@@ -138,13 +139,18 @@ sub lldp_if {
|
|||||||
my @aOID = split( '\.', $key );
|
my @aOID = split( '\.', $key );
|
||||||
my $port = $aOID[1];
|
my $port = $aOID[1];
|
||||||
next unless $port;
|
next unless $port;
|
||||||
# Local LLDP port may not equate to ifIndex, see LldpPortNumber TEXTUAL-CONVENTION in LLDP-MIB.
|
|
||||||
# Cross reference lldpLocPortDesc with ifDescr and ifAlias to get ifIndex,
|
# Local LLDP port may not equate to ifIndex, see LldpPortNumber
|
||||||
# prefer ifDescr over ifAlias because using cross ref with description is correct behavior
|
# TEXTUAL-CONVENTION in LLDP-MIB. Cross reference lldpLocPortDesc
|
||||||
# according to the LLDP-MIB. Some devices (eg H3C gear) seem to use ifAlias though.
|
# with ifDescr and ifAlias to get ifIndex, 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 $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 cross reference is successful use it, otherwise stick with
|
||||||
|
# lldpRemLocalPortNum
|
||||||
if ( $desc && exists $r_i_descr{$desc} ) {
|
if ( $desc && exists $r_i_descr{$desc} ) {
|
||||||
$port = $r_i_descr{$desc};
|
$port = $r_i_descr{$desc};
|
||||||
}
|
}
|
||||||
@@ -165,7 +171,7 @@ sub lldp_ip {
|
|||||||
|
|
||||||
my %lldp_ip;
|
my %lldp_ip;
|
||||||
foreach my $key ( keys %$rman_addr ) {
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
|
||||||
next unless defined $index;
|
next unless defined $index;
|
||||||
next unless $proto == 1;
|
next unless $proto == 1;
|
||||||
$lldp_ip{$index} = $addr;
|
$lldp_ip{$index} = $addr;
|
||||||
@@ -181,7 +187,7 @@ sub lldp_ipv6 {
|
|||||||
|
|
||||||
my %lldp_ipv6;
|
my %lldp_ipv6;
|
||||||
foreach my $key ( keys %$rman_addr ) {
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
|
||||||
next unless defined $index;
|
next unless defined $index;
|
||||||
next unless $proto == 2;
|
next unless $proto == 2;
|
||||||
$lldp_ipv6{$index} = $addr;
|
$lldp_ipv6{$index} = $addr;
|
||||||
@@ -197,7 +203,7 @@ sub lldp_mac {
|
|||||||
|
|
||||||
my %lldp_ipv6;
|
my %lldp_ipv6;
|
||||||
foreach my $key ( keys %$rman_addr ) {
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
|
||||||
next unless defined $index;
|
next unless defined $index;
|
||||||
next unless $proto == 6;
|
next unless $proto == 6;
|
||||||
$lldp_ipv6{$index} = $addr;
|
$lldp_ipv6{$index} = $addr;
|
||||||
@@ -213,7 +219,7 @@ sub lldp_addr {
|
|||||||
|
|
||||||
my %lldp_ip;
|
my %lldp_ip;
|
||||||
foreach my $key ( keys %$rman_addr ) {
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
|
||||||
next unless defined $index;
|
next unless defined $index;
|
||||||
$lldp_ip{$index} = $addr;
|
$lldp_ip{$index} = $addr;
|
||||||
}
|
}
|
||||||
@@ -233,7 +239,10 @@ sub lldp_port {
|
|||||||
foreach my $key ( sort keys %$pid ) {
|
foreach my $key ( sort keys %$pid ) {
|
||||||
my $port = $pdesc->{$key};
|
my $port = $pdesc->{$key};
|
||||||
my $type = $ptype->{$key};
|
my $type = $ptype->{$key};
|
||||||
if ( $type and $type eq 'interfaceName' ) {
|
if ( $type
|
||||||
|
and ( $type eq 'interfaceName' or $type eq 'local' )
|
||||||
|
and ( defined $pid->{$key} and $pid->{$key} !~ /^\d+$/ ) )
|
||||||
|
{
|
||||||
|
|
||||||
# If the pid claims to be an interface name,
|
# If the pid claims to be an interface name,
|
||||||
# believe it.
|
# believe it.
|
||||||
@@ -246,8 +255,7 @@ sub lldp_port {
|
|||||||
|
|
||||||
# May need to format other types in the future, i.e. Network address
|
# May need to format other types in the future, i.e. Network address
|
||||||
if ( $type =~ /mac/ ) {
|
if ( $type =~ /mac/ ) {
|
||||||
$port = join( ':',
|
$port = SNMP::Info::munge_mac($port)
|
||||||
map { sprintf "%02x", $_ } unpack( 'C*', $port ) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,12 +290,13 @@ sub lldp_id {
|
|||||||
|
|
||||||
# May need to format other types in the future
|
# May need to format other types in the future
|
||||||
if ( $type =~ /mac/ ) {
|
if ( $type =~ /mac/ ) {
|
||||||
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
|
$id = SNMP::Info::munge_mac($id)
|
||||||
}
|
}
|
||||||
elsif ( $type eq 'networkAddress' ) {
|
elsif ( $type eq 'networkAddress' ) {
|
||||||
if ( length( unpack( 'H*', $id ) ) == 10 ) {
|
if ( length( unpack( 'H*', $id ) ) == 10 ) {
|
||||||
|
|
||||||
# IP address (first octet is sign, I guess)
|
# IP address - first octet is IANA Address Family Number, need
|
||||||
|
# walk with IPv6
|
||||||
my @octets
|
my @octets
|
||||||
= ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
|
= ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
|
||||||
[ 1 .. 4 ];
|
[ 1 .. 4 ];
|
||||||
@@ -323,7 +332,8 @@ sub lldp_cap {
|
|||||||
# Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
|
# 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
|
# be able to enumerate for us, so we have to get it from the MIB
|
||||||
# and enumerate ourselves
|
# and enumerate ourselves
|
||||||
my $oid = SNMP::translateObj( 'lldpRemSysCapEnabled', 0, 1 ) || '';
|
my $oid
|
||||||
|
= SNMP::translateObj( 'LLDP-MIB::lldpRemSysCapEnabled', 0, 1 ) || '';
|
||||||
my $enums = (
|
my $enums = (
|
||||||
( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
|
( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
|
||||||
? $SNMP::MIB{$oid}{'enums'}
|
? $SNMP::MIB{$oid}{'enums'}
|
||||||
@@ -401,11 +411,13 @@ sub lldp_media_cap {
|
|||||||
# Break up the lldpRemManAddrTable INDEX into common index, protocol,
|
# Break up the lldpRemManAddrTable INDEX into common index, protocol,
|
||||||
# and address.
|
# and address.
|
||||||
sub _lldp_addr_index {
|
sub _lldp_addr_index {
|
||||||
my $idx = shift;
|
my $lldp = shift;
|
||||||
my @oids = split( /\./, $idx );
|
my $idx = shift;
|
||||||
my $index = join( '.', splice( @oids, 0, 3 ) );
|
|
||||||
my $proto = shift(@oids);
|
my @oids = split( /\./, $idx );
|
||||||
shift(@oids) if scalar @oids > 4; # $length
|
my $index = join( '.', splice( @oids, 0, 3 ) );
|
||||||
|
my $proto = shift(@oids);
|
||||||
|
shift(@oids) if scalar @oids > 4; # $length
|
||||||
|
|
||||||
# IPv4
|
# IPv4
|
||||||
if ( $proto == 1 ) {
|
if ( $proto == 1 ) {
|
||||||
@@ -415,7 +427,7 @@ sub _lldp_addr_index {
|
|||||||
# IPv6
|
# IPv6
|
||||||
elsif ( $proto == 2 ) {
|
elsif ( $proto == 2 ) {
|
||||||
return ( $index, $proto,
|
return ( $index, $proto,
|
||||||
join(':', unpack('(H4)*', pack('C*', @oids)) ) );
|
join( ':', unpack( '(H4)*', pack( 'C*', @oids ) ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
# MAC
|
# MAC
|
||||||
@@ -443,10 +455,10 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $lldp = new SNMP::Info (
|
my $lldp = new SNMP::Info (
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
);
|
);
|
||||||
@@ -472,7 +484,7 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::LLDP is a subclass of SNMP::Info that provides an object oriented
|
SNMP::Info::LLDP is a subclass of SNMP::Info that provides an object oriented
|
||||||
interface to LLDP information through SNMP.
|
interface to LLDP information through SNMP.
|
||||||
|
|
||||||
LLDP is a Layer 2 protocol that allows a network device to advertise its
|
LLDP is a Layer 2 protocol that allows a network device to advertise its
|
||||||
@@ -500,7 +512,7 @@ None.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBAL METHODS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar values from SNMP
|
These are methods that return scalar values from SNMP
|
||||||
|
|
||||||
@@ -508,7 +520,7 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $lldp->hasLLDP()
|
=item $lldp->hasLLDP()
|
||||||
|
|
||||||
Is LLDP is active in this device?
|
Is LLDP is active in this device?
|
||||||
|
|
||||||
Note: LLDP may be active, but nothing in C<lldpRemoteSystemsData> Tables so
|
Note: LLDP may be active, but nothing in C<lldpRemoteSystemsData> Tables so
|
||||||
the device would not return any useful topology information.
|
the device would not return any useful topology information.
|
||||||
@@ -519,7 +531,7 @@ The string value used to identify the system name of the local system. If the
|
|||||||
local agent supports IETF RFC 3418, C<lldpLocSysName> object should have the
|
local agent supports IETF RFC 3418, C<lldpLocSysName> object should have the
|
||||||
same value of C<sysName> object.
|
same value of C<sysName> object.
|
||||||
|
|
||||||
Nulls are removed before the value is returned.
|
Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpLocSysName>)
|
(C<lldpLocSysName>)
|
||||||
|
|
||||||
@@ -533,7 +545,7 @@ Nulls are removed before the value is returned.
|
|||||||
|
|
||||||
(C<lldpLocSysDesc>)
|
(C<lldpLocSysDesc>)
|
||||||
|
|
||||||
=item $lldp->lldp_sys_cap()
|
=item $lldp->lldp_sys_cap()
|
||||||
|
|
||||||
Returns which system capabilities are enabled on the local system. Results
|
Returns which system capabilities are enabled on the local system. Results
|
||||||
are munged into an ascii binary string, LSB. Each digit represents a bit
|
are munged into an ascii binary string, LSB. Each digit represents a bit
|
||||||
@@ -583,8 +595,8 @@ with the remote system.
|
|||||||
|
|
||||||
=item $lldp->lldp_if()
|
=item $lldp->lldp_if()
|
||||||
|
|
||||||
Returns the mapping to the SNMP Interface Table. Tries to cross reference
|
Returns the mapping to the SNMP Interface Table. Tries to cross reference
|
||||||
(C<lldpLocPortDesc>) with (C<ifDescr>) and (C<ifAlias>) to get (C<ifIndex>),
|
(C<lldpLocPortDesc>) with (C<ifDescr>) and (C<ifAlias>) to get (C<ifIndex>),
|
||||||
if unable defaults to (C<lldpRemLocalPortNum>).
|
if unable defaults to (C<lldpRemLocalPortNum>).
|
||||||
|
|
||||||
=item $lldp->lldp_ip()
|
=item $lldp->lldp_ip()
|
||||||
@@ -599,7 +611,7 @@ use lldp_addr if you don't care about return address type.
|
|||||||
|
|
||||||
=item $lldp->lldp_mac()
|
=item $lldp->lldp_mac()
|
||||||
|
|
||||||
Returns remote (management) MAC address, if known. Returns for all other
|
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.
|
address types, use lldp_addr if you don't care about return address type.
|
||||||
|
|
||||||
=item $lldp->lldp_addr()
|
=item $lldp->lldp_addr()
|
||||||
@@ -620,13 +632,13 @@ Returns remote port ID
|
|||||||
Tries to return something useful from C<lldp_rem_sysdesc()> or
|
Tries to return something useful from C<lldp_rem_sysdesc()> or
|
||||||
C<lldp_rem_sysname()>.
|
C<lldp_rem_sysname()>.
|
||||||
|
|
||||||
=item $lldp->lldp_cap()
|
=item $lldp->lldp_cap()
|
||||||
|
|
||||||
Returns hash of arrays with each array containing the system capabilities
|
Returns hash of arrays with each array containing the system capabilities
|
||||||
supported by the remote system. Possible elements in the array are
|
supported by the remote system. Possible elements in the array are
|
||||||
enumerated from C<LldpSystemCapabilitiesMap>.
|
enumerated from C<LldpSystemCapabilitiesMap>.
|
||||||
|
|
||||||
=item $lldp->lldp_media_cap()
|
=item $lldp->lldp_media_cap()
|
||||||
|
|
||||||
Returns hash of arrays with each array containing the media capabilities
|
Returns hash of arrays with each array containing the media capabilities
|
||||||
supported by the remote system. Possible elements in the array are
|
supported by the remote system. Possible elements in the array are
|
||||||
@@ -671,7 +683,7 @@ the remote system.
|
|||||||
Returns the string value used to identify the description of the given port
|
Returns the string value used to identify the description of the given port
|
||||||
associated with the remote system.
|
associated with the remote system.
|
||||||
|
|
||||||
Nulls are removed before the value is returned.
|
Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpRemPortDesc>)
|
(C<lldpRemPortDesc>)
|
||||||
|
|
||||||
@@ -680,7 +692,7 @@ Nulls are removed before the value is returned.
|
|||||||
Returns the string value used to identify the system name of the remote
|
Returns the string value used to identify the system name of the remote
|
||||||
system.
|
system.
|
||||||
|
|
||||||
Nulls are removed before the value is returned.
|
Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpRemSysName>)
|
(C<lldpRemSysName>)
|
||||||
|
|
||||||
@@ -689,70 +701,70 @@ Nulls are removed before the value is returned.
|
|||||||
Returns the string value used to identify the system description of the
|
Returns the string value used to identify the system description of the
|
||||||
remote system.
|
remote system.
|
||||||
|
|
||||||
Nulls are removed before the value is returned.
|
Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpRemSysDesc>)
|
(C<lldpRemSysDesc>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_hw_rev()
|
=item $lldp->lldp_rem_hw_rev()
|
||||||
|
|
||||||
Returns the string value used to identify the hardware revision of the
|
Returns the string value used to identify the hardware revision of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemHardwareRev>)
|
(C<lldpXMedRemHardwareRev>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_fw_rev()
|
=item $lldp->lldp_rem_fw_rev()
|
||||||
|
|
||||||
Returns the string value used to identify the firmware revision of the
|
Returns the string value used to identify the firmware revision of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemHardwareRev>)
|
(C<lldpXMedRemHardwareRev>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_sw_rev()
|
=item $lldp->lldp_rem_sw_rev()
|
||||||
|
|
||||||
Returns the string value used to identify the software revision of the
|
Returns the string value used to identify the software revision of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemSoftwareRev>)
|
(C<lldpXMedRemSoftwareRev>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_serial()
|
=item $lldp->lldp_rem_serial()
|
||||||
|
|
||||||
Returns the string value used to identify the serial number of the
|
Returns the string value used to identify the serial number of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemSerialNum>)
|
(C<lldpXMedRemSerialNum>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_vendor()
|
=item $lldp->lldp_rem_vendor()
|
||||||
|
|
||||||
Returns the string value used to identify the manufacturer of the
|
Returns the string value used to identify the manufacturer of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemMfgName>)
|
(C<lldpXMedRemMfgName>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_asset()
|
=item $lldp->lldp_rem_asset()
|
||||||
|
|
||||||
Returns the string value used to identify the asset number of the
|
Returns the string value used to identify the asset number of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemAssetID>)
|
(C<lldpXMedRemAssetID>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_model()
|
=item $lldp->lldp_rem_model()
|
||||||
|
|
||||||
Returns the string value used to identify the model of the
|
Returns the string value used to identify the model of the
|
||||||
remote system. Nulls are removed before the value is returned.
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
(C<lldpXMedRemModelName>)
|
(C<lldpXMedRemModelName>)
|
||||||
|
|
||||||
=item $lldp->lldp_rem_media_cap_spt()
|
=item $lldp->lldp_rem_media_cap_spt()
|
||||||
|
|
||||||
Returns which media capabilities are supported on the remote system. Results
|
Returns which media capabilities are supported on the remote system. Results
|
||||||
are munged into an ascii binary string, LSB.
|
are munged into an ascii binary string, LSB.
|
||||||
|
|
||||||
=item $lldp->lldp_rem_media_cap()
|
=item $lldp->lldp_rem_media_cap()
|
||||||
|
|
||||||
Returns which media capabilities are enabled on the remote system. Results
|
Returns which media capabilities are enabled on the remote system. Results
|
||||||
are munged into an ascii binary string, LSB.
|
are munged into an ascii binary string, LSB.
|
||||||
|
|
||||||
=item $lldp->lldp_rem_sys_cap()
|
=item $lldp->lldp_rem_sys_cap()
|
||||||
|
|
||||||
Returns which system capabilities are enabled on the remote system. Results
|
Returns which system capabilities are enabled on the remote system. Results
|
||||||
are munged into an ascii binary string, LSB. Each digit represents a bit
|
are munged into an ascii binary string, LSB. Each digit represents a bit
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer1 - SNMP Interface to Layer1 Devices
|
# SNMP::Info::Layer1 - SNMP Interface to Layer1 Devices
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::Layer1;
|
package SNMP::Info::Layer1;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::Layer1::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::Layer1::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Layer1::EXPORT_OK = qw//;
|
@SNMP::Info::Layer1::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ $VERSION = '3.52';
|
|||||||
%SNMP::Info::GLOBALS,
|
%SNMP::Info::GLOBALS,
|
||||||
'ports_managed' => 'ifNumber',
|
'ports_managed' => 'ifNumber',
|
||||||
'rptr_slots' => 'rptrGroupCapacity',
|
'rptr_slots' => 'rptrGroupCapacity',
|
||||||
'slots' => 'rptrGroupCapacity'
|
'slots' => 'rptrGroupCapacity',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -86,7 +86,7 @@ sub ports {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# $l1->model() - Looks at sysObjectID which gives the oid of the system
|
# $l1->model() - Looks at sysObjectID which gives the oid of the system
|
||||||
# name, contained in a propriatry MIB.
|
# name, contained in a proprietary MIB.
|
||||||
sub model {
|
sub model {
|
||||||
my $l1 = shift;
|
my $l1 = shift;
|
||||||
my $id = $l1->id();
|
my $id = $l1->id();
|
||||||
@@ -172,14 +172,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $l1 = new SNMP::Info(
|
my $l1 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $l1->class();
|
my $class = $l1->class();
|
||||||
@@ -203,15 +203,15 @@ This class is usually used as a superclass for more specific device classes
|
|||||||
listed under SNMP::Info::Layer1::* Please read all docs under SNMP::Info
|
listed under SNMP::Info::Layer1::* Please read all docs under SNMP::Info
|
||||||
first.
|
first.
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Layer1 device through SNMP. Information is stored in a number of MIBs.
|
Layer1 device through SNMP. Information is stored in a number of MIBs.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $l1 = new SNMP::Info::Layer1(...);
|
my $l1 = new SNMP::Info::Layer1(...);
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -227,12 +227,9 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs required for L<SNMP::Info/"Required MIBs">
|
MIBs required for L<SNMP::Info/"REQUIREMENTS">
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info/"REQUIREMENTS"> for its MIB requirements.
|
||||||
|
|
||||||
F<SNMP-REPEATER-MIB> needs to be extracted from
|
|
||||||
ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
@@ -242,7 +239,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $l1->ports_managed()
|
=item $l1->ports_managed()
|
||||||
|
|
||||||
Gets the number of ports under the interface mib
|
Gets the number of ports under the interface mib
|
||||||
|
|
||||||
(C<ifNumber>)
|
(C<ifNumber>)
|
||||||
|
|
||||||
@@ -278,7 +275,7 @@ Number of 'groups' in the Repeater MIB
|
|||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info
|
=head2 Global Methods imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
@@ -341,6 +338,6 @@ Group (slot) Number for given port.
|
|||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer1::Allied
|
# SNMP::Info::Layer1::Allied
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::Layer1::Allied;
|
package SNMP::Info::Layer1::Allied;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer1;
|
use SNMP::Info::Layer1;
|
||||||
|
|
||||||
@SNMP::Info::Layer1::Allied::ISA = qw/SNMP::Info::Layer1 Exporter/;
|
@SNMP::Info::Layer1::Allied::ISA = qw/SNMP::Info::Layer1 Exporter/;
|
||||||
@SNMP::Info::Layer1::Allied::EXPORT_OK = qw//;
|
@SNMP::Info::Layer1::Allied::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
||||||
@@ -52,9 +52,14 @@ $VERSION = '3.52';
|
|||||||
'ati_up' => 'linkTestLED',
|
'ati_up' => 'linkTestLED',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ATI-MIB' => 'atiPortGroupIndex' );
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer1::MIBS,
|
||||||
|
'ATI-MIB' => 'atiPortGroupIndex',
|
||||||
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer1::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'allied';
|
return 'allied';
|
||||||
@@ -68,9 +73,10 @@ sub os_ver {
|
|||||||
my $allied = shift;
|
my $allied = shift;
|
||||||
my $descr = $allied->description();
|
my $descr = $allied->description();
|
||||||
|
|
||||||
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
if ( defined ($descr) && $descr =~ m/version (\d+\.\d+)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
@@ -78,7 +84,7 @@ sub model {
|
|||||||
|
|
||||||
my $desc = $allied->description();
|
my $desc = $allied->description();
|
||||||
|
|
||||||
if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
|
if ( defined ($desc) && $desc =~ /(AT-\d{4}\S{1})/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -127,14 +133,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $allied = new SNMP::Info(
|
my $allied = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myhub',
|
DestHost => 'myhub',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 1
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $allied->class();
|
my $class = $allied->class();
|
||||||
@@ -142,8 +148,8 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Allied device through SNMP. See inherited classes' documentation for
|
Allied device through SNMP. See inherited classes' documentation for
|
||||||
inherited methods.
|
inherited methods.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -180,7 +186,7 @@ Returns 'allied' :)
|
|||||||
|
|
||||||
=item $allied->os()
|
=item $allied->os()
|
||||||
|
|
||||||
Returns 'allied'
|
Returns 'allied'
|
||||||
|
|
||||||
=item $allied->os_ver()
|
=item $allied->os_ver()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer1::Asante
|
# SNMP::Info::Layer1::Asante
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::Layer1::Asante;
|
package SNMP::Info::Layer1::Asante;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer1;
|
use SNMP::Info::Layer1;
|
||||||
|
|
||||||
@SNMP::Info::Layer1::Asante::ISA = qw/SNMP::Info::Layer1 Exporter/;
|
@SNMP::Info::Layer1::Asante::ISA = qw/SNMP::Info::Layer1 Exporter/;
|
||||||
@SNMP::Info::Layer1::Asante::EXPORT_OK = qw//;
|
@SNMP::Info::Layer1::Asante::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
||||||
@@ -81,9 +81,10 @@ sub os_ver {
|
|||||||
my $asante = shift;
|
my $asante = shift;
|
||||||
my $descr = $asante->description();
|
my $descr = $asante->description();
|
||||||
|
|
||||||
if ( $descr =~ /software v(\d+\.\d+)/ ) {
|
if ( defined ($descr) && $descr =~ /software v(\d+\.\d+)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
@@ -94,7 +95,7 @@ sub model {
|
|||||||
my $asante = shift;
|
my $asante = shift;
|
||||||
|
|
||||||
my $id = $asante->id();
|
my $id = $asante->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = SNMP::translateObj($id);
|
||||||
|
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
@@ -108,8 +109,8 @@ sub i_up {
|
|||||||
my $i_up = {};
|
my $i_up = {};
|
||||||
foreach my $port ( keys %$asante_up ) {
|
foreach my $port ( keys %$asante_up ) {
|
||||||
my $up = $asante_up->{$port};
|
my $up = $asante_up->{$port};
|
||||||
$i_up->{$port} = 'down' if $up =~ /on/;
|
$i_up->{$port} = 'down' if $up =~ /off/;
|
||||||
$i_up->{$port} = 'up' if $up =~ /off/;
|
$i_up->{$port} = 'up' if $up =~ /on/;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $i_up;
|
return $i_up;
|
||||||
@@ -149,7 +150,7 @@ sub i_name {
|
|||||||
my $asante = shift;
|
my $asante = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_name = $asante->orig_i_descr($partial) || {};
|
my $i_name = $asante->orig_i_description($partial) || {};
|
||||||
|
|
||||||
my %i_name;
|
my %i_name;
|
||||||
|
|
||||||
@@ -172,14 +173,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $asante = new SNMP::Info(
|
my $asante = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $asante->class();
|
my $class = $asante->class();
|
||||||
@@ -187,7 +188,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from an
|
||||||
Asante device through SNMP.
|
Asante device through SNMP.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -226,7 +227,7 @@ Culls software version from description()
|
|||||||
|
|
||||||
=item $asante->vendor()
|
=item $asante->vendor()
|
||||||
|
|
||||||
Returns 'asante' :)
|
Returns 'asante'
|
||||||
|
|
||||||
=item $asante->model()
|
=item $asante->model()
|
||||||
|
|
||||||
@@ -249,7 +250,7 @@ See L<SNMP::Info::Layer1/"GLOBALS"> for details.
|
|||||||
|
|
||||||
Returns reference to the map between IID and physical Port.
|
Returns reference to the map between IID and physical Port.
|
||||||
|
|
||||||
=item $asante->i_description()
|
=item $asante->i_description()
|
||||||
|
|
||||||
Description of the interface.
|
Description of the interface.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer1::Bayhub
|
# SNMP::Info::Layer1::Bayhub
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller, Max Baker
|
# Copyright (c) 2008 Eric Miller, Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,18 +30,19 @@
|
|||||||
package SNMP::Info::Layer1::Bayhub;
|
package SNMP::Info::Layer1::Bayhub;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::SONMP;
|
use SNMP::Info::SONMP;
|
||||||
use SNMP::Info::NortelStack;
|
use SNMP::Info::NortelStack;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
@SNMP::Info::Layer1::Bayhub::ISA
|
@SNMP::Info::Layer1::Bayhub::ISA
|
||||||
= qw/SNMP::Info::SONMP SNMP::Info::NortelStack SNMP::Info::Layer2 Exporter/;
|
= qw/SNMP::Info::SONMP SNMP::Info::NortelStack SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer1::Bayhub::EXPORT_OK = qw//;
|
@SNMP::Info::Layer1::Bayhub::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -492,7 +492,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -501,14 +501,9 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Bay hub device through SNMP. Also provides device MAC to port mapping through
|
Bay hub device through SNMP. Also provides device MAC to port mapping through
|
||||||
the proprietary MIB.
|
the proprietary MIB.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $bayhub = new SNMP::Info::Layer1::Bayhub(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -607,18 +602,18 @@ to a hash.
|
|||||||
|
|
||||||
=item $bayhub->i_index()
|
=item $bayhub->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Since hubs do not support C<ifIndex>, the interface index is created using the
|
Since hubs do not support C<ifIndex>, the interface index is created using the
|
||||||
formula (board * 256 + port).
|
formula (board * 256 + port).
|
||||||
|
|
||||||
=item $bayhub->interfaces()
|
=item $bayhub->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to physical ports.
|
Returns reference to map of IIDs to physical ports.
|
||||||
|
|
||||||
=item $bayhub->i_duplex()
|
=item $bayhub->i_duplex()
|
||||||
|
|
||||||
Returns half, hubs do not support full duplex.
|
Returns half, hubs do not support full duplex.
|
||||||
|
|
||||||
=item $bayhub->i_duplex_admin()
|
=item $bayhub->i_duplex_admin()
|
||||||
|
|
||||||
@@ -644,7 +639,7 @@ State choices are 'up' or 'down'
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$bayhub->interfaces()};
|
my %if_map = reverse %{$bayhub->interfaces()};
|
||||||
$bayhub->set_i_up_admin('down', $if_map{'1.1'})
|
$bayhub->set_i_up_admin('down', $if_map{'1.1'})
|
||||||
or die "Couldn't change port state. ",$bayhub->error(1);
|
or die "Couldn't change port state. ",$bayhub->error(1);
|
||||||
|
|
||||||
=item $bayhub->bp_index()
|
=item $bayhub->bp_index()
|
||||||
@@ -671,51 +666,51 @@ L<SNMP::Info::NortelStack/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $bayhub->e_index()
|
=item $bayhub->e_index()
|
||||||
|
|
||||||
Returns ns_e_index().
|
Returns ns_e_index().
|
||||||
|
|
||||||
=item $bayhub->e_class()
|
=item $bayhub->e_class()
|
||||||
|
|
||||||
Returns ns_e_class().
|
Returns ns_e_class().
|
||||||
|
|
||||||
=item $bayhub->e_descr()
|
=item $bayhub->e_descr()
|
||||||
|
|
||||||
Returns ns_e_descr().
|
Returns ns_e_descr().
|
||||||
|
|
||||||
=item $bayhub->e_name()
|
=item $bayhub->e_name()
|
||||||
|
|
||||||
Returns ns_e_name().
|
Returns ns_e_name().
|
||||||
|
|
||||||
=item $bayhub->e_fwver()
|
=item $bayhub->e_fwver()
|
||||||
|
|
||||||
Returns ns_e_fwver().
|
Returns ns_e_fwver().
|
||||||
|
|
||||||
=item $bayhub->e_hwver()
|
=item $bayhub->e_hwver()
|
||||||
|
|
||||||
Returns ns_e_hwver().
|
Returns ns_e_hwver().
|
||||||
|
|
||||||
=item $bayhub->e_parent()
|
=item $bayhub->e_parent()
|
||||||
|
|
||||||
Returns ns_e_parent().
|
Returns ns_e_parent().
|
||||||
|
|
||||||
=item $bayhub->e_pos()
|
=item $bayhub->e_pos()
|
||||||
|
|
||||||
Returns ns_e_pos().
|
Returns ns_e_pos().
|
||||||
|
|
||||||
=item $bayhub->e_serial()
|
=item $bayhub->e_serial()
|
||||||
|
|
||||||
Returns ns_e_serial().
|
Returns ns_e_serial().
|
||||||
|
|
||||||
=item $bayhub->e_swver()
|
=item $bayhub->e_swver()
|
||||||
|
|
||||||
Returns ns_e_swver().
|
Returns ns_e_swver().
|
||||||
|
|
||||||
=item $bayhub->e_type()
|
=item $bayhub->e_type()
|
||||||
|
|
||||||
Returns ns_e_type().
|
Returns ns_e_type().
|
||||||
|
|
||||||
=item $bayhub->e_vendor()
|
=item $bayhub->e_vendor()
|
||||||
|
|
||||||
Returns ns_e_vendor().
|
Returns ns_e_vendor().
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# SNMP::Info::Layer1::Cyclades
|
# SNMP::Info::Layer1::Cyclades
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2018 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@@ -31,46 +30,114 @@
|
|||||||
package SNMP::Info::Layer1::Cyclades;
|
package SNMP::Info::Layer1::Cyclades;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer1;
|
use SNMP::Info::Layer1;
|
||||||
|
|
||||||
@SNMP::Info::Layer1::Cyclades::ISA = qw/SNMP::Info::Layer1 Exporter/;
|
@SNMP::Info::Layer1::Cyclades::ISA = qw/SNMP::Info::Layer1 Exporter/;
|
||||||
@SNMP::Info::Layer1::Cyclades::EXPORT_OK = qw//;
|
@SNMP::Info::Layer1::Cyclades::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer1::MIBS,
|
%SNMP::Info::Layer1::MIBS,
|
||||||
'CYCLADES-ACS-SYS-MIB' => 'cyACSversion',
|
'CYCLADES-ACS-SYS-MIB' => 'cyACSversion',
|
||||||
'CYCLADES-ACS-CONF-MIB' => 'cyEthIPaddr',
|
'CYCLADES-ACS5K-SYS-MIB' => 'cyACS5Kversion',
|
||||||
'CYCLADES-ACS-INFO-MIB' => 'cyISPortTty',
|
'CYCLADES-ACS-CONF-MIB' => 'cyACSConf',
|
||||||
|
'CYCLADES-ACS5K-CONF-MIB' => 'cyACS5KConf',
|
||||||
|
'CYCLADES-ACS-INFO-MIB' => 'cyACSInfo',
|
||||||
|
'CYCLADES-ACS5K-INFO-MIB' => 'cyACS5KInfo',
|
||||||
|
'ACS-MIB' => 'acs6016',
|
||||||
|
'ACS8000-MIB' => 'acs8048',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
|
|
||||||
# CYCLADES-ACS-SYS-MIB
|
|
||||||
%SNMP::Info::Layer1::GLOBALS,
|
%SNMP::Info::Layer1::GLOBALS,
|
||||||
'os_ver' => 'cyACSversion',
|
|
||||||
'cy_model' => 'cyACSpname',
|
# CYCLADES-ACS-SYS-MIB
|
||||||
'serial' => 'cyACSDevId',
|
'cy_os_ver' => 'cyACSversion',
|
||||||
'root_ip' => 'cyEthIPaddr',
|
'cy_model' => 'cyACSpname',
|
||||||
'ps1_status' => 'cyACSPw1',
|
'cy_serial' => 'cyACSDevId',
|
||||||
'ps2_status' => 'cyACSPw2',
|
'cy_ps1_status' => 'cyACSPw1',
|
||||||
|
'cy_ps2_status' => 'cyACSPw2',
|
||||||
|
|
||||||
|
# CYCLADES-ACS-CONF-MIB
|
||||||
|
'cy_root_ip' => 'CYCLADES_ACS_CONF_MIB__cyEthIPaddr',
|
||||||
|
|
||||||
|
# CYCLADES-ACS5K-SYS-MIB
|
||||||
|
'cy5k_os_ver' => 'cyACS5Kversion',
|
||||||
|
'cy5k_model' => 'cyACS5Kpname',
|
||||||
|
'cy5k_serial' => 'cyACS5KDevId',
|
||||||
|
'cy5k_ps1_status' => 'cyACS5KPw1',
|
||||||
|
'cy5k_ps2_status' => 'cyACS5KPw2',
|
||||||
|
|
||||||
|
# CYCLADES-ACS5K-CONF-MIB
|
||||||
|
'cy5k_root_ip' => 'CYCLADES_ACS5K_CONF_MIB__cyEthIPaddr',
|
||||||
|
|
||||||
|
# ACS-MIB
|
||||||
|
'acs_os_ver' => 'ACS_MIB__acsFirmwareVersion',
|
||||||
|
'acs_model' => 'ACS_MIB__acsProductModel',
|
||||||
|
'acs_serial' => 'ACS_MIB__acsSerialNumber',
|
||||||
|
'acs_ps1_status' => 'ACS_MIB__acsPowerSupplyStatePw1',
|
||||||
|
'acs_ps2_status' => 'ACS_MIB__acsPowerSupplyStatePw2',
|
||||||
|
|
||||||
|
# ACS8000-MIB
|
||||||
|
'acs8k_os_ver' => 'ACS8000_MIB__acsFirmwareVersion',
|
||||||
|
'acs8k_model' => 'ACS8000_MIB__acsProductModel',
|
||||||
|
'acs8k_serial' => 'ACS8000_MIB__acsSerialNumber',
|
||||||
|
'acs8k_ps1_status' => 'ACS8000_MIB__acsPowerSupplyStatePw1',
|
||||||
|
'acs8k_ps2_status' => 'ACS8000_MIB__acsPowerSupplyStatePw2',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer1::FUNCS,
|
%SNMP::Info::Layer1::FUNCS,
|
||||||
|
|
||||||
# CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
|
# CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
|
||||||
'cy_port_tty' => 'cyISPortTty',
|
'cy_port_tty' => 'CYCLADES_ACS_INFO_MIB__cyISPortTty',
|
||||||
'cy_port_name' => 'cyISPortName',
|
'cy_port_name' => 'CYCLADES_ACS_INFO_MIB__cyISPortName',
|
||||||
'cy_port_speed' => 'cyISPortSpeed',
|
'cy_port_speed' => 'CYCLADES_ACS_INFO_MIB__cyISPortSpeed',
|
||||||
'cy_port_cd' => 'cyISPortSigCD',
|
'cy_port_cd' => 'CYCLADES_ACS_INFO_MIB__cyISPortSigCD',
|
||||||
|
|
||||||
# CYCLADES-ACS-CONF-MIB::cySerialPortTable
|
# CYCLADES-ACS-CONF-MIB::cySerialPortTable
|
||||||
'cy_port_socket' => 'cySPortSocketPort',
|
'cy_port_socket' => 'CYCLADES_ACS_CONF_MIB__cySPortSocketPort',
|
||||||
|
|
||||||
|
# CYCLADES-ACS5K-INFO-MIB::cyInfoSerialTable
|
||||||
|
'cy5k_port_tty' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortTty',
|
||||||
|
'cy5k_port_name' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortName',
|
||||||
|
'cy5k_port_speed' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSpeed',
|
||||||
|
'cy5k_port_cd' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSigCD',
|
||||||
|
|
||||||
|
# CYCLADES-ACS5K-CONF-MIB::cySerialPortTable
|
||||||
|
'cy5k_port_socket' => 'CYCLADES_ACS5K_CONF_MIB__cySPortSocketPort',
|
||||||
|
|
||||||
|
# ACS-MIB::acsSerialPortTable
|
||||||
|
'acs_port_tty' => 'ACS_MIB__acsSerialPortTableDeviceName',
|
||||||
|
'acs_port_name' => 'ACS_MIB__acsSerialPortTableName',
|
||||||
|
'acs_port_speed' => 'ACS_MIB__acsSerialPortTableComSpeed',
|
||||||
|
'acs_port_cd' => 'ACS_MIB__acsSerialPortTableSignalStateDCD',
|
||||||
|
|
||||||
|
# Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
|
||||||
|
# Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
|
||||||
|
# to be unique so that we can differentiate between the index in the
|
||||||
|
# acsSerialPortTable from ifIndex which are both integers
|
||||||
|
# ACS-MIB::acsSerialPortTableEntry
|
||||||
|
'acs_port_socket' => 'ACS_MIB__acsSerialPortTableDeviceName',
|
||||||
|
|
||||||
|
# ACS8000-MIB::acsSerialPortTable
|
||||||
|
'acs8k_port_tty' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
|
||||||
|
'acs8k_port_name' => 'ACS8000_MIB__acsSerialPortTableName',
|
||||||
|
'acs8k_port_speed' => 'ACS8000_MIB__acsSerialPortTableComSpeed',
|
||||||
|
'acs8k_port_cd' => 'ACS8000_MIB__acsSerialPortTableSignalStateDCD',
|
||||||
|
|
||||||
|
# Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
|
||||||
|
# Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
|
||||||
|
# to be unique so that we can differentiate between the index in the
|
||||||
|
# acsSerialPortTable from ifIndex which are both integers
|
||||||
|
# ACS8000-MIB::acsSerialPortTableEntry
|
||||||
|
'acs8k_port_socket' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
||||||
@@ -82,21 +149,85 @@ sub layers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
return 'cyclades';
|
return 'avocent';
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use "short circuit" to return the first MIB instance that returns data to
|
||||||
|
# reduce network communications
|
||||||
|
# We'll try newest (acs*) first assuming those are most likely deployed
|
||||||
|
sub os_ver {
|
||||||
|
my $cyclades = shift;
|
||||||
|
|
||||||
|
return
|
||||||
|
$cyclades->acs_os_ver()
|
||||||
|
|| $cyclades->acs8k_os_ver()
|
||||||
|
|| $cyclades->cy5k_os_ver()
|
||||||
|
|| $cyclades->cy_os_ver()
|
||||||
|
|| undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'cyclades';
|
return 'vertiv';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
my $cyclades = shift;
|
my $cyclades = shift;
|
||||||
|
|
||||||
my $model = $cyclades->cy_model();
|
my $model
|
||||||
|
= $cyclades->acs_model()
|
||||||
|
|| $cyclades->acs8k_model()
|
||||||
|
|| $cyclades->cy5k_model()
|
||||||
|
|| $cyclades->cy_model()
|
||||||
|
|| undef;
|
||||||
|
|
||||||
return unless defined $model;
|
return lc($model) if ( defined $model );
|
||||||
|
|
||||||
return lc($model);
|
my $id = $cyclades->id();
|
||||||
|
my $prod = SNMP::translateObj($id);
|
||||||
|
|
||||||
|
return $prod || $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $cyclades = shift;
|
||||||
|
|
||||||
|
return
|
||||||
|
$cyclades->acs_serial()
|
||||||
|
|| $cyclades->acs8k_serial()
|
||||||
|
|| $cyclades->cy5k_serial()
|
||||||
|
|| $cyclades->cy_serial()
|
||||||
|
|| undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub root_ip {
|
||||||
|
my $cyclades = shift;
|
||||||
|
|
||||||
|
return
|
||||||
|
$cyclades->cy5k_root_ip()
|
||||||
|
|| $cyclades->cy_root_ip()
|
||||||
|
|| undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ps1_status {
|
||||||
|
my $cyclades = shift;
|
||||||
|
|
||||||
|
return
|
||||||
|
$cyclades->acs_ps1_status()
|
||||||
|
|| $cyclades->acs8k_ps1_status()
|
||||||
|
|| $cyclades->cy5k_ps1_status()
|
||||||
|
|| $cyclades->cy_ps1_status()
|
||||||
|
|| undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ps2_status {
|
||||||
|
my $cyclades = shift;
|
||||||
|
|
||||||
|
return
|
||||||
|
$cyclades->acs_ps2_status()
|
||||||
|
|| $cyclades->acs8k_ps2_status()
|
||||||
|
|| $cyclades->cy5k_ps2_status()
|
||||||
|
|| $cyclades->cy_ps2_status()
|
||||||
|
|| undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Extend interface methods to include serial ports
|
# Extend interface methods to include serial ports
|
||||||
@@ -109,7 +240,12 @@ sub i_index {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $orig_index = $cyclades->orig_i_index($partial) || {};
|
my $orig_index = $cyclades->orig_i_index($partial) || {};
|
||||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
my $cy_index
|
||||||
|
= $cyclades->acs_port_socket()
|
||||||
|
|| $cyclades->acs8k_port_socket()
|
||||||
|
|| $cyclades->cy5k_port_socket()
|
||||||
|
|| $cyclades->cy_port_socket()
|
||||||
|
|| {};
|
||||||
|
|
||||||
my %i_index;
|
my %i_index;
|
||||||
foreach my $iid ( keys %$orig_index ) {
|
foreach my $iid ( keys %$orig_index ) {
|
||||||
@@ -136,9 +272,19 @@ sub interfaces {
|
|||||||
my $cyclades = shift;
|
my $cyclades = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_descr = $cyclades->orig_i_description($partial) || {};
|
my $i_descr = $cyclades->orig_i_description($partial) || {};
|
||||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
my $cy_index
|
||||||
my $cy_p_tty = $cyclades->cy_port_tty() || {};
|
= $cyclades->acs_port_socket()
|
||||||
|
|| $cyclades->acs8k_port_socket()
|
||||||
|
|| $cyclades->cy5k_port_socket()
|
||||||
|
|| $cyclades->cy_port_socket()
|
||||||
|
|| {};
|
||||||
|
my $cy_p_tty
|
||||||
|
= $cyclades->acs_port_tty()
|
||||||
|
|| $cyclades->acs8k_port_tty()
|
||||||
|
|| $cyclades->cy5k_port_tty()
|
||||||
|
|| $cyclades->cy_port_tty()
|
||||||
|
|| {};
|
||||||
|
|
||||||
my %if;
|
my %if;
|
||||||
foreach my $iid ( keys %$i_descr ) {
|
foreach my $iid ( keys %$i_descr ) {
|
||||||
@@ -166,8 +312,18 @@ sub i_speed {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_speed = $cyclades->orig_i_speed($partial) || {};
|
my $i_speed = $cyclades->orig_i_speed($partial) || {};
|
||||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
my $cy_index
|
||||||
my $cy_p_speed = $cyclades->cy_port_speed() || {};
|
= $cyclades->acs_port_socket()
|
||||||
|
|| $cyclades->acs8k_port_socket()
|
||||||
|
|| $cyclades->cy5k_port_socket()
|
||||||
|
|| $cyclades->cy_port_socket()
|
||||||
|
|| {};
|
||||||
|
my $cy_p_speed
|
||||||
|
= $cyclades->acs_port_speed()
|
||||||
|
|| $cyclades->acs8k_port_speed()
|
||||||
|
|| $cyclades->cy5k_port_speed()
|
||||||
|
|| $cyclades->cy_port_speed()
|
||||||
|
|| {};
|
||||||
|
|
||||||
my %i_speed;
|
my %i_speed;
|
||||||
foreach my $iid ( keys %$i_speed ) {
|
foreach my $iid ( keys %$i_speed ) {
|
||||||
@@ -195,8 +351,18 @@ sub i_up {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_up = $cyclades->orig_i_up($partial) || {};
|
my $i_up = $cyclades->orig_i_up($partial) || {};
|
||||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
my $cy_index
|
||||||
my $cy_p_up = $cyclades->cy_port_cd() || {};
|
= $cyclades->acs_port_socket()
|
||||||
|
|| $cyclades->acs8k_port_socket()
|
||||||
|
|| $cyclades->cy5k_port_socket()
|
||||||
|
|| $cyclades->cy_port_socket()
|
||||||
|
|| {};
|
||||||
|
my $cy_p_up
|
||||||
|
= $cyclades->acs_port_cd()
|
||||||
|
|| $cyclades->acs8k_port_cd()
|
||||||
|
|| $cyclades->cy5k_port_cd()
|
||||||
|
|| $cyclades->cy_port_cd()
|
||||||
|
|| {};
|
||||||
|
|
||||||
my %i_up;
|
my %i_up;
|
||||||
foreach my $iid ( keys %$i_up ) {
|
foreach my $iid ( keys %$i_up ) {
|
||||||
@@ -224,8 +390,18 @@ sub i_description {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_desc = $cyclades->orig_i_description($partial) || {};
|
my $i_desc = $cyclades->orig_i_description($partial) || {};
|
||||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
my $cy_index
|
||||||
my $cy_p_desc = $cyclades->cy_port_name() || {};
|
= $cyclades->acs_port_socket()
|
||||||
|
|| $cyclades->acs8k_port_socket()
|
||||||
|
|| $cyclades->cy5k_port_socket()
|
||||||
|
|| $cyclades->cy_port_socket()
|
||||||
|
|| {};
|
||||||
|
my $cy_p_desc
|
||||||
|
= $cyclades->acs_port_name()
|
||||||
|
|| $cyclades->acs8k_port_name()
|
||||||
|
|| $cyclades->cy5k_port_name()
|
||||||
|
|| $cyclades->cy_port_name()
|
||||||
|
|| {};
|
||||||
|
|
||||||
my %descr;
|
my %descr;
|
||||||
foreach my $iid ( keys %$i_desc ) {
|
foreach my $iid ( keys %$i_desc ) {
|
||||||
@@ -253,8 +429,18 @@ sub i_name {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_name = $cyclades->orig_i_name($partial) || {};
|
my $i_name = $cyclades->orig_i_name($partial) || {};
|
||||||
my $cy_index = $cyclades->cy_port_socket() || {};
|
my $cy_index
|
||||||
my $cy_p_desc = $cyclades->cy_port_name() || {};
|
= $cyclades->acs_port_socket()
|
||||||
|
|| $cyclades->acs8k_port_socket()
|
||||||
|
|| $cyclades->cy5k_port_socket()
|
||||||
|
|| $cyclades->cy_port_socket()
|
||||||
|
|| {};
|
||||||
|
my $cy_p_desc
|
||||||
|
= $cyclades->acs_port_name()
|
||||||
|
|| $cyclades->acs8k_port_name()
|
||||||
|
|| $cyclades->cy5k_port_name()
|
||||||
|
|| $cyclades->cy_port_name()
|
||||||
|
|| {};
|
||||||
|
|
||||||
my %i_name;
|
my %i_name;
|
||||||
foreach my $iid ( keys %$i_name ) {
|
foreach my $iid ( keys %$i_name ) {
|
||||||
@@ -282,7 +468,8 @@ __END__
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades terminal servers
|
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades/Avocent terminal
|
||||||
|
servers
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -299,7 +486,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -308,13 +495,8 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Cyclades device through SNMP.
|
Cyclades/Avocent device through SNMP.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -328,12 +510,22 @@ my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<ACS-MIB>
|
||||||
|
|
||||||
|
=item F<ACS6000-MIB>
|
||||||
|
|
||||||
=item F<CYCLADES-ACS-SYS-MIB>
|
=item F<CYCLADES-ACS-SYS-MIB>
|
||||||
|
|
||||||
=item F<CYCLADES-ACS-CONF-MIB>
|
=item F<CYCLADES-ACS-CONF-MIB>
|
||||||
|
|
||||||
=item F<CYCLADES-ACS-INFO-MIB>
|
=item F<CYCLADES-ACS-INFO-MIB>
|
||||||
|
|
||||||
|
=item F<CYCLADES-ACS5K-SYS-MIB>
|
||||||
|
|
||||||
|
=item F<CYCLADES-ACS5K-CONF-MIB>
|
||||||
|
|
||||||
|
=item F<CYCLADES-ACS5K-INFO-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Inherited MIBs
|
=head2 Inherited MIBs
|
||||||
@@ -348,11 +540,11 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $cyclades->os_ver()
|
=item $cyclades->os_ver()
|
||||||
|
|
||||||
(C<cyACSversion>)
|
(C<acsFirmwareVersion>), (C<cyACS5Kversion>), or (C<cyACSversion>)
|
||||||
|
|
||||||
=item $cyclades->serial()
|
=item $cyclades->serial()
|
||||||
|
|
||||||
(C<cyACSDevId>)
|
(C<acsSerialNumber>), (C<cyACS5KDevId>), or (C<cyACSDevId>)
|
||||||
|
|
||||||
=item $cyclades->root_ip()
|
=item $cyclades->root_ip()
|
||||||
|
|
||||||
@@ -360,11 +552,11 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $cyclades->ps1_status()
|
=item $cyclades->ps1_status()
|
||||||
|
|
||||||
(C<cyACSPw1>)
|
(C<acsPowerSupplyStatePw1>), (C<cyACS5KPw1>), or (C<cyACSPw1>)
|
||||||
|
|
||||||
=item $cyclades->ps2_status()
|
=item $cyclades->ps2_status()
|
||||||
|
|
||||||
(C<cyACSPw2>)
|
(C<acsPowerSupplyStatePw2>), (C<cyACS5KPw2>), or (C<cyACSPw2>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -379,15 +571,16 @@ to poll for an ARP cache so turn off reported Layer 2 and Layer 3.
|
|||||||
|
|
||||||
=item $cyclades->vendor()
|
=item $cyclades->vendor()
|
||||||
|
|
||||||
Returns 'cyclades'
|
Returns 'vertiv'
|
||||||
|
|
||||||
=item $cyclades->os()
|
=item $cyclades->os()
|
||||||
|
|
||||||
Returns 'cyclades'
|
Returns 'avocent'
|
||||||
|
|
||||||
=item $cyclades->model()
|
=item $cyclades->model()
|
||||||
|
|
||||||
Returns lower case (C<cyACSpname>)
|
Returns lower case (C<cyACSpname>) or (C<acsProductModel>) if it exists
|
||||||
|
otherwise tries to reference $cyclades->id() to one of the MIBs listed above
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -406,34 +599,37 @@ to a hash.
|
|||||||
|
|
||||||
=item $cyclades->i_index()
|
=item $cyclades->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Extended to include serial ports. Serial ports are indexed with the
|
Extended to include serial ports. Serial ports are indexed with the
|
||||||
alternative labeling system for the serial port, the listening socket port
|
alternative labeling system for the serial port, either the listening socket
|
||||||
C<cySPortSocketPort> to avoid conflicts with C<ifIndex>.
|
port C<cySPortSocketPort> or C<acsSerialPortTableDeviceName> name to avoid
|
||||||
|
conflicts with C<ifIndex>.
|
||||||
|
|
||||||
=item $cyclades->interfaces()
|
=item $cyclades->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to physical ports. Extended to include
|
Returns reference to map of IIDs to physical ports. Extended to include
|
||||||
serial ports, C<cyISPortTty>.
|
serial ports, C<acsSerialPortTableDeviceName> or C<cyISPortTty>.
|
||||||
|
|
||||||
=item $cyclades->i_speed()
|
=item $cyclades->i_speed()
|
||||||
|
|
||||||
Returns interface speed. Extended to include serial ports, C<cyISPortSpeed>.
|
Returns interface speed. Extended to include serial ports,
|
||||||
|
C<acsSerialPortTableComSpeed> or C<cyISPortSpeed>.
|
||||||
|
|
||||||
=item $cyclades->i_up()
|
=item $cyclades->i_up()
|
||||||
|
|
||||||
Returns link status for each port. Extended to include serial ports,
|
Returns link status for each port. Extended to include serial ports,
|
||||||
C<cyISPortSigCD>.
|
C<acsSerialPortTableSignalStateDCD> or C<cyISPortSigCD>.
|
||||||
|
|
||||||
=item $cyclades->i_description()
|
=item $cyclades->i_description()
|
||||||
|
|
||||||
Returns description of each port. Extended to include serial ports,
|
Returns description of each port. Extended to include serial ports,
|
||||||
C<cyISPortName>.
|
C<acsSerialPortTableName> or C<cyISPortName>.
|
||||||
|
|
||||||
=item $cyclades->i_name()
|
=item $cyclades->i_name()
|
||||||
|
|
||||||
Returns name of each port. Extended to include serial ports, C<cyISPortName>.
|
Returns name of each port. Extended to include serial ports,
|
||||||
|
C<acsSerialPortTableName> or C<cyISPortName>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer1::S3000
|
# SNMP::Info::Layer1::S3000
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::Layer1::S3000;
|
package SNMP::Info::Layer1::S3000;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
@SNMP::Info::Layer1::S3000::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer1::S3000::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer1::S3000::EXPORT_OK = qw//;
|
@SNMP::Info::Layer1::S3000::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -373,7 +373,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -382,15 +382,10 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Bay hub device through SNMP. Also provides device MAC to port mapping through
|
Bay hub device through SNMP. Also provides device MAC to port mapping through
|
||||||
the proprietary MIB.
|
the proprietary MIB.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $s3000 = new SNMP::Info::Layer1::S3000(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -447,7 +442,7 @@ Returns the firmware version. (C<s3AgentFwVer>)
|
|||||||
|
|
||||||
=item $s3000->mac()
|
=item $s3000->mac()
|
||||||
|
|
||||||
Returns MAC of the advertised IP address of the device.
|
Returns MAC of the advertised IP address of the device.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -477,7 +472,7 @@ to a hash.
|
|||||||
|
|
||||||
=item $s3000->i_index()
|
=item $s3000->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Since hubs do not support C<ifIndex>, the interface index is created using the
|
Since hubs do not support C<ifIndex>, the interface index is created using the
|
||||||
formula (board * 256 + port). This is required to support devices with more
|
formula (board * 256 + port). This is required to support devices with more
|
||||||
@@ -485,11 +480,11 @@ than one module.
|
|||||||
|
|
||||||
=item $s3000->interfaces()
|
=item $s3000->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to physical ports.
|
Returns reference to map of IIDs to physical ports.
|
||||||
|
|
||||||
=item $s3000->i_duplex()
|
=item $s3000->i_duplex()
|
||||||
|
|
||||||
Returns half, hubs do not support full duplex.
|
Returns half, hubs do not support full duplex.
|
||||||
|
|
||||||
=item $s3000->i_duplex_admin()
|
=item $s3000->i_duplex_admin()
|
||||||
|
|
||||||
@@ -516,7 +511,7 @@ State choices are 'up' or 'down'
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$s3000->interfaces()};
|
my %if_map = reverse %{$s3000->interfaces()};
|
||||||
$s3000->set_i_up_admin('down', $if_map{'1.1'})
|
$s3000->set_i_up_admin('down', $if_map{'1.1'})
|
||||||
or die "Couldn't change port state. ",$s3000->error(1);
|
or die "Couldn't change port state. ",$s3000->error(1);
|
||||||
|
|
||||||
=item $s3000->bp_index()
|
=item $s3000->bp_index()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2 - SNMP Interface to Layer2 Devices
|
# SNMP::Info::Layer2 - SNMP Interface to Layer2 Devices
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker -- All changes from Version 0.7 on
|
# Copyright (c) 2008 Max Baker -- All changes from Version 0.7 on
|
||||||
#
|
#
|
||||||
@@ -33,30 +32,33 @@
|
|||||||
package SNMP::Info::Layer2;
|
package SNMP::Info::Layer2;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
use SNMP::Info::Bridge;
|
use SNMP::Info::Bridge;
|
||||||
use SNMP::Info::Entity;
|
use SNMP::Info::Entity;
|
||||||
use SNMP::Info::PowerEthernet;
|
use SNMP::Info::PowerEthernet;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::DocsisHE;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::ISA
|
@SNMP::Info::Layer2::ISA
|
||||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP Exporter/;
|
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP SNMP::Info::DocsisHE Exporter/;
|
||||||
@SNMP::Info::Layer2::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
%SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
|
%SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS, %SNMP::Info::DocsisHE::MIBS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::GLOBALS,
|
%SNMP::Info::GLOBALS,
|
||||||
%SNMP::Info::Bridge::GLOBALS,
|
%SNMP::Info::Bridge::GLOBALS,
|
||||||
|
%SNMP::Info::DocsisHE::GLOBALS,
|
||||||
%SNMP::Info::Entity::GLOBALS,
|
%SNMP::Info::Entity::GLOBALS,
|
||||||
%SNMP::Info::PowerEthernet::GLOBALS,
|
%SNMP::Info::PowerEthernet::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
@@ -67,7 +69,7 @@ $VERSION = '3.52';
|
|||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::FUNCS, %SNMP::Info::Bridge::FUNCS,
|
%SNMP::Info::FUNCS, %SNMP::Info::Bridge::FUNCS,
|
||||||
%SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
|
%SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
%SNMP::Info::LLDP::FUNCS, %SNMP::Info::DocsisHE::FUNCS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -75,6 +77,7 @@ $VERSION = '3.52';
|
|||||||
# Inherit all the built in munging
|
# Inherit all the built in munging
|
||||||
%SNMP::Info::MUNGE,
|
%SNMP::Info::MUNGE,
|
||||||
%SNMP::Info::Bridge::MUNGE,
|
%SNMP::Info::Bridge::MUNGE,
|
||||||
|
%SNMP::Info::DocsisHE::MUNGE,
|
||||||
%SNMP::Info::Entity::MUNGE,
|
%SNMP::Info::Entity::MUNGE,
|
||||||
%SNMP::Info::PowerEthernet::MUNGE,
|
%SNMP::Info::PowerEthernet::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
@@ -83,7 +86,7 @@ $VERSION = '3.52';
|
|||||||
# Method OverRides
|
# Method OverRides
|
||||||
|
|
||||||
# $l2->model() - Looks at sysObjectID which gives the oid of the system
|
# $l2->model() - Looks at sysObjectID which gives the oid of the system
|
||||||
# name, contained in a propriatry MIB.
|
# name, contained in a proprietary MIB.
|
||||||
sub model {
|
sub model {
|
||||||
my $l2 = shift;
|
my $l2 = shift;
|
||||||
my $id = $l2->id();
|
my $id = $l2->id();
|
||||||
@@ -118,24 +121,18 @@ sub vendor {
|
|||||||
sub serial {
|
sub serial {
|
||||||
my $l2 = shift;
|
my $l2 = shift;
|
||||||
|
|
||||||
my $serial1 = $l2->serial1();
|
my $entity_serial = $l2->entity_derived_serial();
|
||||||
my $e_descr = $l2->e_descr() || {};
|
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||||
my $e_serial = $l2->e_serial() || {};
|
return $entity_serial;
|
||||||
|
|
||||||
my $serial2 = $e_serial->{1} || undef;
|
|
||||||
my $chassis = $e_descr->{1} || undef;
|
|
||||||
|
|
||||||
# precedence
|
|
||||||
# serial2,chassis parse,serial1
|
|
||||||
return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
|
|
||||||
|
|
||||||
if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
|
|
||||||
return $1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
my $serial1 = $l2->serial1();
|
||||||
|
if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
|
||||||
|
return $serial1;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
@@ -148,15 +145,25 @@ sub interfaces {
|
|||||||
# Replace the Index with the ifDescr field.
|
# Replace the Index with the ifDescr field.
|
||||||
# Check for duplicates in ifDescr, if so uniquely identify by adding
|
# Check for duplicates in ifDescr, if so uniquely identify by adding
|
||||||
# ifIndex to repeated values
|
# ifIndex to repeated values
|
||||||
my %seen;
|
my (%seen, %first_seen_as);
|
||||||
foreach my $iid ( keys %$i_descr ) {
|
foreach my $iid ( sort keys %$i_descr ) {
|
||||||
my $port = $i_descr->{$iid};
|
my $port = $i_descr->{$iid};
|
||||||
next unless defined $port;
|
next unless defined $port;
|
||||||
|
|
||||||
|
$port = SNMP::Info::munge_null($port);
|
||||||
|
$port =~ s/^\s+//; $port =~ s/\s+$//;
|
||||||
|
next unless length $port;
|
||||||
|
|
||||||
if ( $seen{$port}++ ) {
|
if ( $seen{$port}++ ) {
|
||||||
|
# (#320) also fixup the port this is a duplicate of
|
||||||
|
$interfaces->{ $first_seen_as{$port} }
|
||||||
|
= sprintf( "%s (%d)", $port, $first_seen_as{$port} );
|
||||||
|
|
||||||
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
|
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$interfaces->{$iid} = $port;
|
$interfaces->{$iid} = $port;
|
||||||
|
$first_seen_as{$port} = $iid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $interfaces;
|
return $interfaces;
|
||||||
@@ -175,14 +182,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $l2 = new SNMP::Info(
|
my $l2 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $l2->class();
|
my $class = $l2->class();
|
||||||
@@ -205,11 +212,11 @@ This class is usually used as a superclass for more specific device classes
|
|||||||
listed under SNMP::Info::Layer2::* Please read all docs under SNMP::Info
|
listed under SNMP::Info::Layer2::* Please read all docs under SNMP::Info
|
||||||
first.
|
first.
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Layer2 device through SNMP. Information is stored in a number of MIBs.
|
Layer2 device through SNMP. Information is stored in a number of MIBs.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $l2 = new SNMP::Info::Layer2(...);
|
my $l2 = new SNMP::Info::Layer2(...);
|
||||||
|
|
||||||
@@ -221,10 +228,14 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::Bridge
|
=item SNMP::Info::Bridge
|
||||||
|
|
||||||
|
=item SNMP::Info::DocsisHE
|
||||||
|
|
||||||
=item SNMP::Info::Entity
|
=item SNMP::Info::Entity
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
|
=item SNMP::Info::PowerEthernet
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -249,7 +260,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $l2->model()
|
=item $l2->model()
|
||||||
|
|
||||||
Cross references $l2->id() with product IDs in the
|
Cross references $l2->id() with product IDs in the
|
||||||
Cisco MIBs.
|
Cisco MIBs.
|
||||||
|
|
||||||
For HP devices, removes C<'hpswitch'> from the name
|
For HP devices, removes C<'hpswitch'> from the name
|
||||||
@@ -262,13 +273,13 @@ Tries to discover the vendor from $l2->model() and $l2->description()
|
|||||||
|
|
||||||
=item $l2->serial()
|
=item $l2->serial()
|
||||||
|
|
||||||
Returns serial number if available through SNMP
|
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info
|
=head2 Globals imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Bridge
|
=head2 Globals imported from SNMP::Info::Bridge
|
||||||
|
|
||||||
@@ -302,7 +313,7 @@ Defaults to C<ifDescr> but checks and overrides with C<ifName>
|
|||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
=head2 Table Methods imported from SNMP::Info::Bridge
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +1,63 @@
|
|||||||
|
# SNMP::Info::Layer2::3Com - SNMP Interface to 3Com Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 by The Netdisco Developer Team.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::3Com;
|
package SNMP::Info::Layer2::3Com;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::3Com::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::3Com::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::3Com::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::3Com::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
'A3Com-products-MIB' => 'wlanAP7760',
|
'A3Com-products-MIB' => 'wlanAP7760',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
return '3Com';
|
return '3Com';
|
||||||
}
|
}
|
||||||
@@ -49,6 +72,7 @@ sub serial {
|
|||||||
return $e_serial->{$e};
|
return $e_serial->{$e};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
@@ -61,21 +85,25 @@ sub os_ver {
|
|||||||
return $e_swver->{$e};
|
return $e_swver->{$e};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return '3Com';
|
return '3com';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
|
|
||||||
my $dsmodel = shift;
|
my $dsmodel = shift;
|
||||||
my $descr = $dsmodel->description();
|
my $descr = $dsmodel->description();
|
||||||
if ( $descr =~ /^([\S ]+) Software.*/){
|
|
||||||
|
if (defined ($descr)) {
|
||||||
|
if ($descr =~ /^([\S ]+) Software.*/) {
|
||||||
return $1;
|
return $1;
|
||||||
} else {
|
} else {
|
||||||
return $descr;
|
return $descr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -97,7 +125,7 @@ Max Kosmach
|
|||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -138,7 +166,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $device->vendor()
|
=item $device->vendor()
|
||||||
|
|
||||||
Returns '3Com'
|
Returns '3com'
|
||||||
|
|
||||||
=item $device->os()
|
=item $device->os()
|
||||||
|
|
||||||
|
|||||||
@@ -1,43 +1,69 @@
|
|||||||
|
# SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 by The Netdisco Developer Team.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::Adtran;
|
package SNMP::Info::Layer2::Adtran;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Adtran::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::Adtran::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Adtran::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Adtran::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||||
# table by the serial() function.
|
# table by the serial() function.
|
||||||
our $index = undef;
|
our $index = undef;
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
'ADTRAN-GENEVC-MIB' => 'adGenEVCMIB',
|
# 'ADTRAN-GENEVC-MIB' => 'adGenEVCMIB',
|
||||||
'ADTRAN-GENMEF-MIB' => 'adGenMEFMIB',
|
# 'ADTRAN-GENMEF-MIB' => 'adGenMEFMIB',
|
||||||
'ADTRAN-GENPORT-MIB' => 'adGenPort',
|
# 'ADTRAN-GENPORT-MIB' => 'adGenPort',
|
||||||
'ADTRAN-MIB' => 'adtran',
|
'ADTRAN-MIB' => 'adtran',
|
||||||
'ADTRAN-AOSUNIT' => 'adGenAOSUnitMib',
|
'ADTRAN-AOSUNIT' => 'adGenAOSUnitMib',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
'serial' => 'adProdSerialNumber',
|
'serial' => 'adProdSerialNumber',
|
||||||
'ad_mgmtevcvid' => 'adGenEVCSysMgmtEVCSTagVID',
|
'ad_mgmtevcvid' => 'adGenEVCSysMgmtEVCSTagVID',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS,
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
'ad_evcstag' => 'adGenEVCLookupName',
|
'ad_evcstag' => 'adGenEVCLookupName',
|
||||||
'ad_menport' => 'adGenMenPortRowStatus',
|
'ad_menport' => 'adGenMenPortRowStatus',
|
||||||
'ad_evcnamevid' => 'adGenEVCSTagVID',
|
'ad_evcnamevid' => 'adGenEVCSTagVID',
|
||||||
@@ -47,7 +73,7 @@ our $index = undef;
|
|||||||
'ad_genportcustuse' => 'adGenPortCustomerUse',
|
'ad_genportcustuse' => 'adGenPortCustomerUse',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, %SNMP::Info::Layer3::MUNGE );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Layer3::MUNGE );
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'adtran';
|
return 'adtran';
|
||||||
@@ -58,11 +84,11 @@ sub os {
|
|||||||
|
|
||||||
sub layers {
|
sub layers {
|
||||||
my $adtran = shift;
|
my $adtran = shift;
|
||||||
|
|
||||||
my $layers = $adtran->SUPER::layers();
|
my $layers = $adtran->SUPER::layers();
|
||||||
# Some netvantas don't report L2 properly
|
# Some netvantas don't report L2 properly
|
||||||
my $macs = $adtran->fw_mac();
|
my $macs = $adtran->fw_mac();
|
||||||
|
|
||||||
if (keys %$macs) {
|
if (keys %$macs) {
|
||||||
my $l = substr $layers, 6, 1, "1";
|
my $l = substr $layers, 6, 1, "1";
|
||||||
}
|
}
|
||||||
@@ -77,7 +103,7 @@ sub os_ver {
|
|||||||
my $aos_ver = $adtran->adAOSDeviceVersion();
|
my $aos_ver = $adtran->adAOSDeviceVersion();
|
||||||
return $aos_ver;
|
return $aos_ver;
|
||||||
}
|
}
|
||||||
sub model {
|
sub model {
|
||||||
my $adtran = shift;
|
my $adtran = shift;
|
||||||
my $id = $adtran->id();
|
my $id = $adtran->id();
|
||||||
my $mod = $adtran->adProdName() || undef;
|
my $mod = $adtran->adProdName() || undef;
|
||||||
@@ -85,7 +111,7 @@ sub model {
|
|||||||
my $model = $adtran->adAOSDeviceProductName() || undef;
|
my $model = $adtran->adAOSDeviceProductName() || undef;
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
sub serial {
|
sub serial {
|
||||||
my $adtran = shift;
|
my $adtran = shift;
|
||||||
my $e_serial = $adtran->e_serial() || {};
|
my $e_serial = $adtran->e_serial() || {};
|
||||||
my $serial2 = $e_serial->{1} || undef;
|
my $serial2 = $e_serial->{1} || undef;
|
||||||
@@ -96,19 +122,19 @@ sub serial {
|
|||||||
sub i_name {
|
sub i_name {
|
||||||
my $adtran = shift;
|
my $adtran = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
my $i_name = $adtran->SUPER::i_alias() || undef;
|
my $i_name = $adtran->SUPER::i_alias() || undef;
|
||||||
return $i_name if (defined $i_name);
|
return $i_name if (defined $i_name);
|
||||||
$i_name = {};
|
$i_name = {};
|
||||||
my $adname = $adtran->ad_genportcustuse() || undef;
|
my $adname = $adtran->ad_genportcustuse() || undef;
|
||||||
if (defined $adname) {
|
if (defined $adname) {
|
||||||
foreach my $port (keys %$adname) {
|
foreach my $port (keys %$adname) {
|
||||||
my @split = split(/\./,$port);
|
my @splitout = split(/\./,$port);
|
||||||
$i_name->{@split[1]} = $adname->{$port};
|
$i_name->{$splitout[1]} = $adname->{$port};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $i_name;
|
return $i_name;
|
||||||
}
|
}
|
||||||
sub i_vlan {
|
sub i_vlan {
|
||||||
my $adtran = shift;
|
my $adtran = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
my $uniports = $adtran->ad_evcmapuniport() || undef;
|
my $uniports = $adtran->ad_evcmapuniport() || undef;
|
||||||
@@ -127,14 +153,14 @@ sub i_vlan {
|
|||||||
return $i_vlan;
|
return $i_vlan;
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $adtran = shift;
|
my $adtran = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
my $i_vlan = $adtran->ad_menport();
|
my $i_vlan = $adtran->ad_menport();
|
||||||
if (defined $i_vlan) {
|
if (defined $i_vlan) {
|
||||||
my $vlans = {};
|
my $vlans = {};
|
||||||
my $v_name = $adtran->v_name();
|
my $v_name = $adtran->v_name();
|
||||||
foreach my $vid (keys %$v_name) {
|
foreach my $vid (keys %$v_name) {
|
||||||
@@ -142,9 +168,9 @@ sub i_vlan_membership {
|
|||||||
}
|
}
|
||||||
my $if_vlans = {};
|
my $if_vlans = {};
|
||||||
foreach my $entry (keys %$i_vlan) {
|
foreach my $entry (keys %$i_vlan) {
|
||||||
my @split = split(/(\.0)+\./,$entry);
|
my @splitout = split(/(\.0)+\./,$entry);
|
||||||
my $name = pack("C*", split(/\./,@split[0]));
|
my $name = pack("C*", split(/\./,$splitout[0]));
|
||||||
push @{$if_vlans->{@split[2]}}, $vlans->{$name};
|
push @{$if_vlans->{$splitout[2]}}, $vlans->{$name};
|
||||||
}
|
}
|
||||||
my $mgmtevcports = $adtran->ad_mgmtevcports();
|
my $mgmtevcports = $adtran->ad_mgmtevcports();
|
||||||
my $mgmtevcid = $adtran->ad_mgmtevcvid();
|
my $mgmtevcid = $adtran->ad_mgmtevcvid();
|
||||||
@@ -174,14 +200,14 @@ SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $adtran = new SNMP::Info(
|
my $adtran = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $adtran->class();
|
my $class = $adtran->class();
|
||||||
@@ -195,17 +221,17 @@ Subclass for adtran Devices running JUNOS
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Inherited Classes' MIBs
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
@@ -245,10 +271,6 @@ Returns serial number.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
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
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
@@ -275,12 +297,12 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=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::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
|
=cut
|
||||||
|
|||||||
511
lib/SNMP/Info/Layer2/Aerohive.pm
Normal file
511
lib/SNMP/Info/Layer2/Aerohive.pm
Normal file
@@ -0,0 +1,511 @@
|
|||||||
|
# SNMP::Info::Layer2::Aerohive
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Eric Miller
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Aerohive;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Aerohive::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Aerohive::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'AH-SYSTEM-MIB' => 'ahSystemSerial',
|
||||||
|
'AH-INTERFACE-MIB' => 'ahSSIDName',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
|
||||||
|
# AH-SYSTEM-MIB
|
||||||
|
'serial' => 'ahSystemSerial',
|
||||||
|
'os_bin' => 'ahFirmwareVersion',
|
||||||
|
# not documented in the most recent mib,
|
||||||
|
# but this is the base mac for the device
|
||||||
|
'ah_mac' => '.1.3.6.1.4.1.26928.1.3.2.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
|
||||||
|
# AH-INTERFACE-MIB::ahRadioAttributeTable
|
||||||
|
'i_80211channel' => 'ahRadioChannel',
|
||||||
|
'dot11_cur_tx_pwr_mw' => 'ahRadioTxPower',
|
||||||
|
|
||||||
|
# AH-INTERFACE-MIB::ahXIfTable
|
||||||
|
'ah_i_ssidlist' => 'ahSSIDName',
|
||||||
|
|
||||||
|
# AH-INTERFACE-MIB::ahAssociationTable
|
||||||
|
'cd11_txrate' => 'ahClientLastTxRate',
|
||||||
|
'cd11_uptime' => 'ahClientLinkUptime',
|
||||||
|
'cd11_sigstrength' => 'ahClientRSSI',
|
||||||
|
'cd11_rxpkt' => 'ahClientRxDataFrames',
|
||||||
|
'cd11_txpkt' => 'ahClientTxDataFrames',
|
||||||
|
'cd11_rxbyte' => 'ahClientRxDataOctets',
|
||||||
|
'cd11_txbyte' => 'ahClientTxDataOctets',
|
||||||
|
'cd11_ssid' => 'ahClientSSID',
|
||||||
|
'ah_c_vlan' => 'ahClientVLAN',
|
||||||
|
'ah_c_ip' => 'ahClientIP',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE
|
||||||
|
= ( %SNMP::Info::Layer2::MUNGE, 'at_paddr' => \&SNMP::Info::munge_mac, );
|
||||||
|
|
||||||
|
# hiveos does not have sysServices
|
||||||
|
sub layers {
|
||||||
|
return '00000111';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'aerohive';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'hiveos';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $aerohive = shift;
|
||||||
|
|
||||||
|
return $aerohive->ahSystemSerial()
|
||||||
|
|| $aerohive->SUPER::serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $descr = $aerohive->description();
|
||||||
|
|
||||||
|
if ( defined ($descr) && $descr =~ m/\bHiveOS\s(\d\.\w+)\b/ix ) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub mac {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $ahmac = $aerohive->ah_mac();
|
||||||
|
|
||||||
|
# newer hiveos version just return the mac address
|
||||||
|
if (defined $ahmac) {
|
||||||
|
# aerohive has a 0000:0000:0000 mac format by default,
|
||||||
|
# change to 00:00:00:00:00:00
|
||||||
|
$ahmac =~ s/(..)(..:?)/$1:$2/g;
|
||||||
|
return $ahmac;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @macs;
|
||||||
|
my $macs = $aerohive->i_mac();
|
||||||
|
foreach my $iid (keys %$macs) {
|
||||||
|
if (defined $macs->{$iid}) {
|
||||||
|
push( @macs, $macs->{$iid} );
|
||||||
|
}
|
||||||
|
@macs = sort(@macs);
|
||||||
|
}
|
||||||
|
return $macs[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $descr = $aerohive->description();
|
||||||
|
|
||||||
|
if ( defined ($descr) && $descr =~ m/\b(?:Hive|)(AP\d+)\b/ix ) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_ssidlist {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $ssids = $aerohive->ah_i_ssidlist($partial) || {};
|
||||||
|
|
||||||
|
my %i_ssidlist;
|
||||||
|
foreach my $iid ( keys %$ssids ) {
|
||||||
|
my $ssid = $ssids->{$iid};
|
||||||
|
next if $ssid =~ /N\/A/i;
|
||||||
|
|
||||||
|
$i_ssidlist{$iid} = $ssid;
|
||||||
|
}
|
||||||
|
return \%i_ssidlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_ssidmac {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $ssids = $aerohive->i_ssidlist($partial) || {};
|
||||||
|
my $macs = $aerohive->i_mac($partial) || {};
|
||||||
|
|
||||||
|
my %i_ssidmac;
|
||||||
|
foreach my $iid ( keys %$ssids ) {
|
||||||
|
my $mac = $macs->{$iid};
|
||||||
|
next unless $mac;
|
||||||
|
|
||||||
|
$i_ssidmac{$iid} = $mac;
|
||||||
|
}
|
||||||
|
return \%i_ssidmac;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Break up the ahAssociationEntry INDEX into ifIndex and MAC Address.
|
||||||
|
sub _ah_association_index {
|
||||||
|
my $idx = shift;
|
||||||
|
my @values = split( /\./, $idx );
|
||||||
|
my $ifindex = shift(@values);
|
||||||
|
my $length = shift(@values);
|
||||||
|
return ( $ifindex, join( ':', map { sprintf "%02x", $_ } @values ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cd11_port {
|
||||||
|
my $aerohive = shift;
|
||||||
|
|
||||||
|
my $cd11_txrate = $aerohive->cd11_txrate();
|
||||||
|
my $interfaces = $aerohive->interfaces();
|
||||||
|
|
||||||
|
my %ret;
|
||||||
|
foreach ( keys %$cd11_txrate ) {
|
||||||
|
my ( $ifindex, $mac ) = _ah_association_index($_);
|
||||||
|
$ret{$_} = $interfaces->{$ifindex};
|
||||||
|
}
|
||||||
|
return \%ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cd11_mac {
|
||||||
|
my $aerohive = shift;
|
||||||
|
|
||||||
|
my $cd11_txrate = $aerohive->cd11_txrate();
|
||||||
|
|
||||||
|
my %ret;
|
||||||
|
foreach ( keys %$cd11_txrate ) {
|
||||||
|
my ( $ifindex, $mac ) = _ah_association_index($_);
|
||||||
|
$ret{$_} = $mac;
|
||||||
|
}
|
||||||
|
return \%ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Does not support the standard Bridge MIB
|
||||||
|
sub bp_index {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
# somewhere caching is doing something strange, without load_
|
||||||
|
# netdisco can't find bp_index mappings & will not registerer
|
||||||
|
# any clients. netdisco/netdisco#496
|
||||||
|
my $i_index = $aerohive->load_i_index($partial) || {};
|
||||||
|
|
||||||
|
my %bp_index;
|
||||||
|
foreach my $iid ( keys %$i_index ) {
|
||||||
|
my $index = $i_index->{$iid};
|
||||||
|
next unless defined $index;
|
||||||
|
|
||||||
|
$bp_index{$index} = $iid;
|
||||||
|
}
|
||||||
|
|
||||||
|
return \%bp_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub qb_fw_port {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $txrate = $aerohive->cd11_txrate($partial) || {};
|
||||||
|
|
||||||
|
my $qb_fw_port = {};
|
||||||
|
foreach my $idx ( keys %$txrate ) {
|
||||||
|
my ( $fdb_id, $mac ) = _ah_association_index($idx);
|
||||||
|
$qb_fw_port->{$idx} = $fdb_id;
|
||||||
|
}
|
||||||
|
return $qb_fw_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub qb_fw_mac {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $txrate = $aerohive->cd11_txrate($partial) || {};
|
||||||
|
|
||||||
|
my $qb_fw_mac = {};
|
||||||
|
foreach my $idx ( keys %$txrate ) {
|
||||||
|
my ( $fdb_id, $mac ) = _ah_association_index($idx);
|
||||||
|
$qb_fw_mac->{$idx} = $mac;
|
||||||
|
}
|
||||||
|
return $qb_fw_mac;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub qb_fw_vlan {
|
||||||
|
my $aerohive = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $vlans = $aerohive->ah_c_vlan($partial) || {};
|
||||||
|
|
||||||
|
my $qb_fw_vlan = {};
|
||||||
|
foreach my $idx ( keys %$vlans ) {
|
||||||
|
my $vlan = $vlans->{$idx};
|
||||||
|
next unless defined $vlan;
|
||||||
|
$qb_fw_vlan->{$idx} = $vlan;
|
||||||
|
}
|
||||||
|
return $qb_fw_vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
# arpnip:
|
||||||
|
#
|
||||||
|
# This is the AP snooping on the MAC->IP mappings.
|
||||||
|
# Pretending this is arpnip data allows us to get MAC->IP
|
||||||
|
# mappings even for stations that only communicate locally.
|
||||||
|
|
||||||
|
sub at_paddr {
|
||||||
|
my $aerohive = shift;
|
||||||
|
|
||||||
|
my $txrate = $aerohive->cd11_txrate() || {};
|
||||||
|
|
||||||
|
my $at_paddr = {};
|
||||||
|
foreach my $idx ( keys %$txrate ) {
|
||||||
|
my ( $fdb_id, $mac ) = _ah_association_index($idx);
|
||||||
|
$at_paddr->{$idx} = $mac;
|
||||||
|
}
|
||||||
|
return $at_paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub at_netaddr {
|
||||||
|
my $aerohive = shift;
|
||||||
|
|
||||||
|
my $ips = $aerohive->ah_c_ip() || {};
|
||||||
|
|
||||||
|
my $ret = {};
|
||||||
|
foreach my $idx ( keys %$ips ) {
|
||||||
|
next if ( $ips->{$idx} eq '0.0.0.0' );
|
||||||
|
$ret->{$idx} = $ips->{$idx};
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Aerohive - SNMP Interface to Aerohive Access Points
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Eric Miller
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $aerohive = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $aerohive->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Provides abstraction to the configuration information obtainable from an
|
||||||
|
Aerohive wireless Access Point through SNMP.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<AH-SYSTEM-MIB>
|
||||||
|
|
||||||
|
=item F<AH-INTERFACE-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aerohive->vendor()
|
||||||
|
|
||||||
|
Returns 'aerohive'.
|
||||||
|
|
||||||
|
=item $aerohive->os()
|
||||||
|
|
||||||
|
Returns 'hiveos'.
|
||||||
|
|
||||||
|
=item $aerohive->serial()
|
||||||
|
|
||||||
|
Returns the serial number extracted from C<ahSystemSerial>.
|
||||||
|
|
||||||
|
=item $aerohive->os_ver()
|
||||||
|
|
||||||
|
Returns the OS version extracted from C<sysDescr>.
|
||||||
|
|
||||||
|
=item $aerohive->os_bin()
|
||||||
|
|
||||||
|
Returns the firmware version extracted from C<ahFirmwareVersion>.
|
||||||
|
|
||||||
|
=item $aerohive->mac()
|
||||||
|
|
||||||
|
Returns the base mac address of the aerohive unit from an undocumented
|
||||||
|
snmp oid. if this oid is not available it will walk all interfaces and
|
||||||
|
return the lowest numbered mac address.
|
||||||
|
|
||||||
|
=item $aerohive->model()
|
||||||
|
|
||||||
|
Returns the model extracted from C<sysDescr>.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aerohive->layers()
|
||||||
|
|
||||||
|
Returns 00000111. Layer 2 and Layer 3 functionality through proprietary MIBs.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aerohive->i_ssidlist()
|
||||||
|
|
||||||
|
Returns reference to hash. SSID's recognized by the radio interface.
|
||||||
|
|
||||||
|
=item $aerohive->i_ssidmac()
|
||||||
|
|
||||||
|
With the same keys as i_ssidlist, returns the Basic service set
|
||||||
|
identification (BSSID), MAC address, the AP is using for the SSID.
|
||||||
|
|
||||||
|
=item $aerohive->i_80211channel()
|
||||||
|
|
||||||
|
Returns reference to hash. Current operating frequency channel of the radio
|
||||||
|
interface.
|
||||||
|
|
||||||
|
C<ahRadioChannel>
|
||||||
|
|
||||||
|
=item $aerohive->dot11_cur_tx_pwr_mw()
|
||||||
|
|
||||||
|
Returns reference to hash. Current transmit power, in milliwatts, of the
|
||||||
|
radio interface.
|
||||||
|
|
||||||
|
C<ahRadioTxPower>
|
||||||
|
|
||||||
|
=item $aironet->cd11_port()
|
||||||
|
|
||||||
|
Returns radio interfaces.
|
||||||
|
|
||||||
|
=item $aironet->cd11_mac()
|
||||||
|
|
||||||
|
Returns client radio interface MAC addresses.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aerohive->bp_index()
|
||||||
|
|
||||||
|
Simulates bridge MIB by returning reference to a hash mapping i_index() to
|
||||||
|
the interface iid.
|
||||||
|
|
||||||
|
=item $aerohive->qb_fw_port()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries port interface
|
||||||
|
identifier (iid).
|
||||||
|
|
||||||
|
=item $aerohive->qb_fw_mac()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table MAC Addresses.
|
||||||
|
|
||||||
|
C<ahClientMac>
|
||||||
|
|
||||||
|
=item $aerohive->qb_fw_vlan()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries VLAN ID.
|
||||||
|
|
||||||
|
C<ahClientVLAN>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Arp Cache Table Augmentation
|
||||||
|
|
||||||
|
The AP has knowledge of MAC->IP mappings for wireless clients.
|
||||||
|
Augmenting the arp cache data with these MAC->IP mappings enables visibility
|
||||||
|
for stations that only communicate locally.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aerohive->at_paddr()
|
||||||
|
|
||||||
|
C<ahClientMac>
|
||||||
|
|
||||||
|
=item $aerohive->at_netaddr()
|
||||||
|
|
||||||
|
C<ahClientIP>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -29,8 +29,8 @@
|
|||||||
package SNMP::Info::Layer2::Airespace;
|
package SNMP::Info::Layer2::Airespace;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Bridge;
|
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
use SNMP::Info::Airespace;
|
use SNMP::Info::Airespace;
|
||||||
|
|
||||||
@@ -38,9 +38,9 @@ use SNMP::Info::Airespace;
|
|||||||
= qw/SNMP::Info::Airespace SNMP::Info::CDP SNMP::Info::Bridge Exporter/;
|
= qw/SNMP::Info::Airespace SNMP::Info::CDP SNMP::Info::Bridge Exporter/;
|
||||||
@SNMP::Info::Layer2::Airespace::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Airespace::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
@@ -166,11 +166,11 @@ sub cd11_mac {
|
|||||||
|
|
||||||
sub cd11_txrate {
|
sub cd11_txrate {
|
||||||
my $airespace = shift;
|
my $airespace = shift;
|
||||||
|
|
||||||
my $rates = $airespace->client_txrate() || {};
|
my $rates = $airespace->client_txrate() || {};
|
||||||
my $protos = $airespace->cd11_proto() || {};
|
my $protos = $airespace->cd11_proto() || {};
|
||||||
my $bws = $airespace->cd11n_ch_bw() || {};
|
my $bws = $airespace->cd11n_ch_bw() || {};
|
||||||
|
|
||||||
my $cd11_txrate = {};
|
my $cd11_txrate = {};
|
||||||
foreach my $idx ( keys %$rates ) {
|
foreach my $idx ( keys %$rates ) {
|
||||||
my $rate = $rates->{$idx} || '0.0';
|
my $rate = $rates->{$idx} || '0.0';
|
||||||
@@ -193,7 +193,7 @@ sub cd11_txrate {
|
|||||||
|
|
||||||
sub munge_cd11n_ch_bw {
|
sub munge_cd11n_ch_bw {
|
||||||
my $bw = shift;
|
my $bw = shift;
|
||||||
|
|
||||||
if ( $bw =~ /forty/ ) {
|
if ( $bw =~ /forty/ ) {
|
||||||
return 40;
|
return 40;
|
||||||
}
|
}
|
||||||
@@ -202,7 +202,7 @@ sub munge_cd11n_ch_bw {
|
|||||||
|
|
||||||
sub munge_cd11_proto {
|
sub munge_cd11_proto {
|
||||||
my $bw = shift;
|
my $bw = shift;
|
||||||
|
|
||||||
return 2 if ( $bw eq 'dot11n5' );
|
return 2 if ( $bw eq 'dot11n5' );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@@ -260,7 +260,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -269,14 +269,9 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from
|
Provides abstraction to the configuration information obtainable from
|
||||||
Cisco (Airespace) Wireless Controllers through SNMP.
|
Cisco (Airespace) Wireless Controllers 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 $airespace = new SNMP::Info::Layer2::Airespace(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -346,7 +341,7 @@ See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item cd11_mac()
|
=item cd11_mac()
|
||||||
|
|
||||||
@@ -356,7 +351,7 @@ Returns client radio interface MAC addresses.
|
|||||||
|
|
||||||
Returns client transmission speed in Mbs.
|
Returns client transmission speed in Mbs.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Aironet
|
# SNMP::Info::Layer2::Aironet
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,9 +32,9 @@
|
|||||||
package SNMP::Info::Layer2::Aironet;
|
package SNMP::Info::Layer2::Aironet;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Entity;
|
|
||||||
use SNMP::Info::EtherLike;
|
use SNMP::Info::EtherLike;
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
use SNMP::Info::CiscoConfig;
|
use SNMP::Info::CiscoConfig;
|
||||||
@@ -43,31 +42,28 @@ use SNMP::Info::CDP;
|
|||||||
use SNMP::Info::IEEE802dot11;
|
use SNMP::Info::IEEE802dot11;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Aironet::ISA
|
@SNMP::Info::Layer2::Aironet::ISA
|
||||||
= qw/SNMP::Info::Layer2 SNMP::Info::Entity SNMP::Info::EtherLike
|
= qw/SNMP::Info::Layer2 SNMP::Info::EtherLike
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
|
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
|
||||||
@SNMP::Info::Layer2::Aironet::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Aironet::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::IEEE802dot11::GLOBALS,
|
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::Entity::GLOBALS,
|
|
||||||
%SNMP::Info::EtherLike::GLOBALS,
|
%SNMP::Info::EtherLike::GLOBALS,
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
%SNMP::Info::CiscoStats::GLOBALS,
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
'serial' => 'entPhysicalSerialNum.1',
|
'serial' => 'entPhysicalSerialNum.1',
|
||||||
'descr' => 'sysDescr',
|
'ps1_type' => 'cpoePdCurrentPowerSource',
|
||||||
'ps1_type' => 'cpoePdCurrentPowerSource'
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::IEEE802dot11::FUNCS,
|
%SNMP::Info::IEEE802dot11::FUNCS,
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::Entity::FUNCS,
|
|
||||||
%SNMP::Info::EtherLike::FUNCS,
|
%SNMP::Info::EtherLike::FUNCS,
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::CiscoConfig::FUNCS,
|
||||||
@@ -89,7 +85,6 @@ $VERSION = '3.52';
|
|||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::IEEE802dot11::MIBS,
|
%SNMP::Info::IEEE802dot11::MIBS,
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::Entity::MIBS,
|
|
||||||
%SNMP::Info::EtherLike::MIBS,
|
%SNMP::Info::EtherLike::MIBS,
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
%SNMP::Info::CiscoStats::MIBS,
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::CiscoConfig::MIBS,
|
||||||
@@ -104,7 +99,6 @@ $VERSION = '3.52';
|
|||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::IEEE802dot11::MUNGE,
|
%SNMP::Info::IEEE802dot11::MUNGE,
|
||||||
%SNMP::Info::Layer2::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::Entity::MUNGE,
|
|
||||||
%SNMP::Info::EtherLike::MUNGE,
|
%SNMP::Info::EtherLike::MUNGE,
|
||||||
%SNMP::Info::CiscoStats::MUNGE,
|
%SNMP::Info::CiscoStats::MUNGE,
|
||||||
%SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::CiscoConfig::MUNGE,
|
||||||
@@ -119,7 +113,6 @@ $VERSION = '3.52';
|
|||||||
= \&SNMP::Info::IEEE802dot11::dot11_cur_tx_pwr_mw;
|
= \&SNMP::Info::IEEE802dot11::dot11_cur_tx_pwr_mw;
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
|
|
||||||
# Sorry, but it's true.
|
# Sorry, but it's true.
|
||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
@@ -136,11 +129,16 @@ sub interfaces {
|
|||||||
# Tag on e_descr.1
|
# Tag on e_descr.1
|
||||||
sub description {
|
sub description {
|
||||||
my $aironet = shift;
|
my $aironet = shift;
|
||||||
my $descr = $aironet->descr();
|
my $descr = $aironet->SUPER::description();
|
||||||
my $e_descr = $aironet->e_descr();
|
my $e_descr = $aironet->e_descr();
|
||||||
|
|
||||||
$descr = "$e_descr->{1} $descr" if defined $e_descr->{1};
|
if (defined $e_descr->{1}) {
|
||||||
|
if (defined $descr) {
|
||||||
|
$descr = "$e_descr->{1} $descr"
|
||||||
|
} else {
|
||||||
|
$descr = "$e_descr->{1}"
|
||||||
|
}
|
||||||
|
}
|
||||||
return $descr;
|
return $descr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -444,7 +442,7 @@ sub i_ssidmac {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
my $mbss_mac_addr = $aironet->mbss_mac_addr();
|
my $mbss_mac_addr = $aironet->mbss_mac_addr();
|
||||||
|
|
||||||
# Same logic as i_ssidbcast to return same indexes as i_ssidlist
|
# Same logic as i_ssidbcast to return same indexes as i_ssidlist
|
||||||
my $map = {};
|
my $map = {};
|
||||||
foreach my $key ( keys %$mbss_mac_addr ) {
|
foreach my $key ( keys %$mbss_mac_addr ) {
|
||||||
my ( $interface, @idx ) = split( /\./, $key );
|
my ( $interface, @idx ) = split( /\./, $key );
|
||||||
@@ -485,14 +483,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $aironet = new SNMP::Info(
|
my $aironet = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $aironet->class();
|
my $class = $aironet->class();
|
||||||
@@ -518,7 +516,7 @@ This class is for devices running Cisco IOS software (newer)
|
|||||||
=back
|
=back
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $aironet = new SNMP::Info::Layer2::Aironet(...);
|
my $aironet = new SNMP::Info::Layer2::Aironet(...);
|
||||||
|
|
||||||
@@ -528,8 +526,6 @@ my $aironet = new SNMP::Info::Layer2::Aironet(...);
|
|||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=item SNMP::Info::Entity
|
|
||||||
|
|
||||||
=item SNMP::Info::EtherLike
|
=item SNMP::Info::EtherLike
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
=item SNMP::Info::CiscoStats
|
||||||
@@ -542,6 +538,16 @@ my $aironet = new SNMP::Info::Layer2::Aironet(...);
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<CISCO-DOT11-ASSOCIATION-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-DOT11-IF-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-DOT11-SSID-SECURITY-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-POE-PD-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB>
|
||||||
|
|
||||||
=item Inherited Classes
|
=item Inherited Classes
|
||||||
|
|
||||||
MIBs required by the inherited classes listed above.
|
MIBs required by the inherited classes listed above.
|
||||||
@@ -568,10 +574,6 @@ System description. Adds info from method e_descr() from SNMP::Info::Entity
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Entity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::EtherLike
|
=head2 Globals imported from SNMP::Info::EtherLike
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::EtherLike/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::EtherLike/"GLOBALS"> for details.
|
||||||
@@ -656,11 +658,11 @@ being broadcast.
|
|||||||
=item $aironet->i_ssidmac()
|
=item $aironet->i_ssidmac()
|
||||||
|
|
||||||
With the same keys as i_ssidlist, returns the Basic service set
|
With the same keys as i_ssidlist, returns the Basic service set
|
||||||
identification (BSSID), MAC address, the AP is using for the SSID.
|
identification (BSSID), MAC address, the AP is using for the SSID.
|
||||||
|
|
||||||
=item $aironet ps1_status()
|
=item $aironet ps1_status()
|
||||||
|
|
||||||
Returns the PoE injector status based on C<cpoePdSupportedPower> and
|
Returns the PoE injector status based on C<cpoePdSupportedPower> and
|
||||||
C<cpoePdSupportedPowerMode>.
|
C<cpoePdSupportedPowerMode>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -669,10 +671,6 @@ C<cpoePdSupportedPowerMode>.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Entity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::EtherLike
|
=head2 Table Methods imported from SNMP::Info::EtherLike
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Allied
|
# SNMP::Info::Layer2::Allied
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker
|
# Copyright (c) 2008 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,6 +30,7 @@
|
|||||||
package SNMP::Info::Layer2::Allied;
|
package SNMP::Info::Layer2::Allied;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Layer1;
|
use SNMP::Info::Layer1;
|
||||||
@@ -38,9 +38,9 @@ use SNMP::Info::Layer1;
|
|||||||
@SNMP::Info::Layer2::Allied::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::Allied::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Allied::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Allied::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||||
|
|
||||||
@@ -70,17 +70,17 @@ sub os_ver {
|
|||||||
my $allied = shift;
|
my $allied = shift;
|
||||||
my $descr = $allied->description();
|
my $descr = $allied->description();
|
||||||
|
|
||||||
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
if ( defined ($descr) && $descr =~ m/version (\d+\.\d+)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
my $allied = shift;
|
my $allied = shift;
|
||||||
|
|
||||||
my $desc = $allied->description();
|
my $desc = $allied->description();
|
||||||
|
|
||||||
if ( $desc =~ /(AT-80\d{2}\S*)/ ) {
|
if ( defined ($desc) && $desc =~ /(AT-80\d{2}\S*)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -137,14 +137,14 @@ Max Baker, Dmitry Sergienko <dmitry@trifle.net>
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $allied = new SNMP::Info(
|
my $allied = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myhub',
|
DestHost => 'myhub',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 1
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $allied->class();
|
my $class = $allied->class();
|
||||||
@@ -152,8 +152,8 @@ Max Baker, Dmitry Sergienko <dmitry@trifle.net>
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Allied device through SNMP. See inherited classes' documentation for
|
Allied device through SNMP. See inherited classes' documentation for
|
||||||
inherited methods.
|
inherited methods.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -190,11 +190,11 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $allied->vendor()
|
=item $allied->vendor()
|
||||||
|
|
||||||
Returns 'allied' :)
|
Returns 'allied'
|
||||||
|
|
||||||
=item $allied->os()
|
=item $allied->os()
|
||||||
|
|
||||||
Returns 'allied'
|
Returns 'allied'
|
||||||
|
|
||||||
=item $allied->os_ver()
|
=item $allied->os_ver()
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ Tries to cull out C<AT-nnnnX> out of the description field.
|
|||||||
|
|
||||||
=item $allied->mac()
|
=item $allied->mac()
|
||||||
|
|
||||||
Returns device MAC.
|
Returns device MAC.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
168
lib/SNMP/Info/Layer2/Atmedia.pm
Normal file
168
lib/SNMP/Info/Layer2/Atmedia.pm
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
# SNMP::Info::Layer2::Atmedia
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Netdisco Developers
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Atmedia;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Atmedia::ISA = qw/SNMP::Info::Layer2/;
|
||||||
|
@SNMP::Info::Layer2::Atmedia::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer2::MIBS );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'os_ver' => '.1.3.6.1.4.1.13458.1.2.1.0',
|
||||||
|
'atm_serial' => '.1.3.6.1.4.1.13458.1.1.2.0',
|
||||||
|
'atm_hardversion' => '.1.3.6.1.4.1.13458.1.3.1.0',
|
||||||
|
'atm_model' => '.1.3.6.1.4.1.13458.1.1.6.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS);
|
||||||
|
|
||||||
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE);
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $atmedia = shift;
|
||||||
|
|
||||||
|
return $atmedia->atm_serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'Atmedia-OS';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $atmedia = shift;
|
||||||
|
|
||||||
|
my $atmedia_model = $atmedia->atm_model();
|
||||||
|
if (defined $atmedia_model) {
|
||||||
|
$atmedia_model =~ s/\<|\>//g;
|
||||||
|
$atmedia_model =~ s/\//_/g;
|
||||||
|
return $atmedia_model;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'atmedia';
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Atmedia - SNMP Interface to atmedia encryptors
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Netdisco Developers
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $atmedia = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myhub',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 1
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $atmedia->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Provides abstraction to information obtainable from a atmedia encryptor
|
||||||
|
through SNMP. See inherited classes' documentation for inherited methods.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $atmedia->vendor()
|
||||||
|
|
||||||
|
Returns 'atmedia'
|
||||||
|
|
||||||
|
=item $atmedia->os()
|
||||||
|
|
||||||
|
Returns 'Atmedia-OS'
|
||||||
|
|
||||||
|
=item $atmedia->os_ver()
|
||||||
|
|
||||||
|
(C<acSoftVersion>)
|
||||||
|
|
||||||
|
=item $atmedia->model()
|
||||||
|
|
||||||
|
(C<acDescr>)
|
||||||
|
|
||||||
|
=item $atmedia->serial()
|
||||||
|
|
||||||
|
(C<acSerialNumber>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Baystack
|
# SNMP::Info::Layer2::Baystack
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,38 +30,38 @@
|
|||||||
package SNMP::Info::Layer2::Baystack;
|
package SNMP::Info::Layer2::Baystack;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::SONMP;
|
use SNMP::Info::SONMP;
|
||||||
use SNMP::Info::NortelStack;
|
use SNMP::Info::NortelStack;
|
||||||
use SNMP::Info::RapidCity;
|
use SNMP::Info::RapidCity;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Baystack::ISA
|
@SNMP::Info::Layer2::Baystack::ISA
|
||||||
= qw/SNMP::Info::SONMP SNMP::Info::NortelStack
|
= qw/SNMP::Info::SONMP SNMP::Info::NortelStack
|
||||||
SNMP::Info::RapidCity SNMP::Info::LLDP
|
SNMP::Info::RapidCity
|
||||||
SNMP::Info::Layer3 Exporter/;
|
SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer2::Baystack::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Baystack::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::RapidCity::MIBS, %SNMP::Info::NortelStack::MIBS,
|
%SNMP::Info::RapidCity::MIBS, %SNMP::Info::NortelStack::MIBS,
|
||||||
%SNMP::Info::SONMP::MIBS,
|
%SNMP::Info::SONMP::MIBS,
|
||||||
'BAY-STACK-PETH-EXT-MIB' => 'bspePethPsePortExtMeasuredPower',
|
'BAY-STACK-PETH-EXT-MIB' => 'bspePethPsePortExtMeasuredPower',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::RapidCity::GLOBALS, %SNMP::Info::NortelStack::GLOBALS,
|
%SNMP::Info::RapidCity::GLOBALS, %SNMP::Info::NortelStack::GLOBALS,
|
||||||
%SNMP::Info::SONMP::GLOBALS,
|
%SNMP::Info::SONMP::GLOBALS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::LLDP::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::RapidCity::FUNCS, %SNMP::Info::NortelStack::FUNCS,
|
%SNMP::Info::RapidCity::FUNCS, %SNMP::Info::NortelStack::FUNCS,
|
||||||
%SNMP::Info::SONMP::FUNCS,
|
%SNMP::Info::SONMP::FUNCS,
|
||||||
'peth_port_power' => 'bspePethPsePortExtMeasuredPower',
|
'peth_port_power' => 'bspePethPsePortExtMeasuredPower',
|
||||||
@@ -74,7 +73,7 @@ $SNMP::Info::SPEED_MAP{200_000_000} = '100 Mbps';
|
|||||||
$SNMP::Info::SPEED_MAP{2_000_000_000} = '1.0 Gbps';
|
$SNMP::Info::SPEED_MAP{2_000_000_000} = '1.0 Gbps';
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::RapidCity::MUNGE, %SNMP::Info::NortelStack::MUNGE,
|
%SNMP::Info::RapidCity::MUNGE, %SNMP::Info::NortelStack::MUNGE,
|
||||||
%SNMP::Info::SONMP::MUNGE,
|
%SNMP::Info::SONMP::MUNGE,
|
||||||
);
|
);
|
||||||
@@ -136,7 +135,7 @@ sub model {
|
|||||||
return '303' if ( defined $descr and $descr =~ /\D303\D/ );
|
return '303' if ( defined $descr and $descr =~ /\D303\D/ );
|
||||||
return '304' if ( defined $descr and $descr =~ /\D304\D/ );
|
return '304' if ( defined $descr and $descr =~ /\D304\D/ );
|
||||||
return 'BPS' if ( $model =~ /BPS2000/i );
|
return 'BPS' if ( $model =~ /BPS2000/i );
|
||||||
|
|
||||||
# Pull sreg- from all
|
# Pull sreg- from all
|
||||||
$model =~ s/^sreg-//;
|
$model =~ s/^sreg-//;
|
||||||
# Strip ES/ERS/BayStack etc. from those families
|
# Strip ES/ERS/BayStack etc. from those families
|
||||||
@@ -341,7 +340,7 @@ sub peth_port_ifindex {
|
|||||||
return \%peth_port_ifindex;
|
return \%peth_port_ifindex;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Currently only ERS 4800 v5.8+ support the rcBridgeSpbmMacTable
|
# Currently only ERS 4800 v5.8+ support the rcBridgeSpbmMacTable
|
||||||
# which holds the FDB for a SPBM edge deployment.
|
# which holds the FDB for a SPBM edge deployment.
|
||||||
#
|
#
|
||||||
# Q-BRIDGE still holds some entries when the rcBridgeSpbmMacTable is in use
|
# Q-BRIDGE still holds some entries when the rcBridgeSpbmMacTable is in use
|
||||||
@@ -353,7 +352,7 @@ sub fw_mac {
|
|||||||
my $qb = $rapidcity->SUPER::fw_mac() || {};
|
my $qb = $rapidcity->SUPER::fw_mac() || {};
|
||||||
my $spbm = $rapidcity->rc_spbm_fw_mac() || {};
|
my $spbm = $rapidcity->rc_spbm_fw_mac() || {};
|
||||||
my $fw_mac = { %$qb, %$spbm };
|
my $fw_mac = { %$qb, %$spbm };
|
||||||
|
|
||||||
return $fw_mac;
|
return $fw_mac;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,17 +362,17 @@ sub fw_port {
|
|||||||
my $qb = $rapidcity->SUPER::fw_port() || {};
|
my $qb = $rapidcity->SUPER::fw_port() || {};
|
||||||
my $spbm = $rapidcity->rc_spbm_fw_port() || {};
|
my $spbm = $rapidcity->rc_spbm_fw_port() || {};
|
||||||
my $fw_port = { %$qb, %$spbm };
|
my $fw_port = { %$qb, %$spbm };
|
||||||
|
|
||||||
return $fw_port;
|
return $fw_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub fw_status {
|
sub fw_status {
|
||||||
my $rapidcity = shift;
|
my $rapidcity = shift;
|
||||||
|
|
||||||
my $qb = $rapidcity->SUPER::fw_status() || {};
|
my $qb = $rapidcity->SUPER::fw_status() || {};
|
||||||
my $spbm = $rapidcity->rc_spbm_fw_status() || {};
|
my $spbm = $rapidcity->rc_spbm_fw_status() || {};
|
||||||
my $fw_status = { %$qb, %$spbm };
|
my $fw_status = { %$qb, %$spbm };
|
||||||
|
|
||||||
return $fw_status;
|
return $fw_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,7 +382,7 @@ sub qb_fw_vlan {
|
|||||||
my $qb = $rapidcity->SUPER::qb_fw_vlan() || {};
|
my $qb = $rapidcity->SUPER::qb_fw_vlan() || {};
|
||||||
my $spbm = $rapidcity->rc_spbm_fw_vlan() || {};
|
my $spbm = $rapidcity->rc_spbm_fw_vlan() || {};
|
||||||
my $qb_fw_vlan = { %$qb, %$spbm };
|
my $qb_fw_vlan = { %$qb, %$spbm };
|
||||||
|
|
||||||
return $qb_fw_vlan;
|
return $qb_fw_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,7 +416,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $baystack->class();
|
my $class = $baystack->class();
|
||||||
@@ -427,12 +426,7 @@ Eric Miller
|
|||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from an
|
Provides abstraction to the configuration information obtainable from an
|
||||||
Avaya Ethernet Switch (formerly Nortel/Bay Baystack) and VSP 7000 series
|
Avaya Ethernet Switch (formerly Nortel/Bay Baystack) and VSP 7000 series
|
||||||
through SNMP.
|
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 $baystack = new SNMP::Info::Layer2::Baystack(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -444,8 +438,6 @@ my $baystack = new SNMP::Info::Layer2::Baystack(...);
|
|||||||
|
|
||||||
=item SNMP::Info::RapidCity
|
=item SNMP::Info::RapidCity
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -454,7 +446,7 @@ my $baystack = new SNMP::Info::Layer2::Baystack(...);
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item F<BAY-STACK-PETH-EXT-MIBB>
|
=item F<BAY-STACK-PETH-EXT-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -466,8 +458,6 @@ See L<SNMP::Info::NortelStack/"Required MIBs"> for its MIB requirements.
|
|||||||
|
|
||||||
See L<SNMP::Info::RapidCity/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::RapidCity/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -500,7 +490,7 @@ Returns the firmware version extracted from C<sysDescr>.
|
|||||||
|
|
||||||
=item $baystack->stp_ver()
|
=item $baystack->stp_ver()
|
||||||
|
|
||||||
Returns the particular STP version running on this device.
|
Returns the particular STP version running on this device.
|
||||||
|
|
||||||
Values: C<nortelStpg>, C<pvst>, C<rstp>, C<mstp>, C<ieee8021d>
|
Values: C<nortelStpg>, C<pvst>, C<rstp>, C<mstp>, C<ieee8021d>
|
||||||
|
|
||||||
@@ -537,10 +527,6 @@ See L<SNMP::Info::NortelStack/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::RapidCity/"GLOBALS"> for details.
|
See L<SNMP::Info::RapidCity/"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::Layer3
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
See L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||||
@@ -560,10 +546,10 @@ Returns reference to the map between IID and physical Port.
|
|||||||
|
|
||||||
Slot and port numbers on the Baystack switches are determined by the
|
Slot and port numbers on the Baystack switches are determined by the
|
||||||
formula:
|
formula:
|
||||||
|
|
||||||
port = (Interface index % Index factor)
|
port = (Interface index % Index factor)
|
||||||
slot = (int(Interface index / Index factor)) + Slot offset
|
slot = (int(Interface index / Index factor)) + Slot offset
|
||||||
|
|
||||||
The physical port name is returned as slot.port.
|
The physical port name is returned as slot.port.
|
||||||
|
|
||||||
=item $baystack->i_ignore()
|
=item $baystack->i_ignore()
|
||||||
@@ -572,9 +558,9 @@ Returns reference to hash of IIDs to ignore.
|
|||||||
|
|
||||||
=item $baystack->i_mac()
|
=item $baystack->i_mac()
|
||||||
|
|
||||||
Returns the C<ifPhysAddress> table entries.
|
Returns the C<ifPhysAddress> table entries.
|
||||||
|
|
||||||
Removes all entries matching '00:00:00:00:00:00' -- Certain
|
Removes all entries matching '00:00:00:00:00:00' -- Certain
|
||||||
revisions of Baystack firmware report all zeros for each port mac.
|
revisions of Baystack firmware report all zeros for each port mac.
|
||||||
|
|
||||||
=item $baystack->i_name()
|
=item $baystack->i_name()
|
||||||
@@ -602,60 +588,60 @@ L<SNMP::Info::NortelStack/"TABLE METHODS"> for details on ns_e_* methods.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $baystack->e_index()
|
=item $baystack->e_index()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalDescr>, this will try ns_e_index().
|
If the device doesn't support C<entPhysicalDescr>, this will try ns_e_index().
|
||||||
Note that this is based on C<entPhysicalDescr> due to implementation
|
Note that this is based on C<entPhysicalDescr> due to implementation
|
||||||
details of SNMP::Info::Entity::e_index().
|
details of SNMP::Info::Entity::e_index().
|
||||||
|
|
||||||
=item $baystack->e_class()
|
=item $baystack->e_class()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalClass>, this will try ns_e_class().
|
If the device doesn't support C<entPhysicalClass>, this will try ns_e_class().
|
||||||
|
|
||||||
=item $baystack->e_descr()
|
=item $baystack->e_descr()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalDescr>, this will try ns_e_descr().
|
If the device doesn't support C<entPhysicalDescr>, this will try ns_e_descr().
|
||||||
|
|
||||||
=item $baystack->e_name()
|
=item $baystack->e_name()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalName>, this will try ns_e_name().
|
If the device doesn't support C<entPhysicalName>, this will try ns_e_name().
|
||||||
|
|
||||||
=item $baystack->e_fwver()
|
=item $baystack->e_fwver()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalFirmwareRev>, this will try
|
If the device doesn't support C<entPhysicalFirmwareRev>, this will try
|
||||||
ns_e_fwver().
|
ns_e_fwver().
|
||||||
|
|
||||||
=item $baystack->e_hwver()
|
=item $baystack->e_hwver()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalHardwareRev>, this will try
|
If the device doesn't support C<entPhysicalHardwareRev>, this will try
|
||||||
ns_e_hwver().
|
ns_e_hwver().
|
||||||
|
|
||||||
=item $baystack->e_parent()
|
=item $baystack->e_parent()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalContainedIn>, this will try
|
If the device doesn't support C<entPhysicalContainedIn>, this will try
|
||||||
ns_e_parent().
|
ns_e_parent().
|
||||||
|
|
||||||
=item $baystack->e_pos()
|
=item $baystack->e_pos()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalParentRelPos>, this will try
|
If the device doesn't support C<entPhysicalParentRelPos>, this will try
|
||||||
ns_e_pos().
|
ns_e_pos().
|
||||||
|
|
||||||
=item $baystack->e_serial()
|
=item $baystack->e_serial()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalSerialNum>, this will try
|
If the device doesn't support C<entPhysicalSerialNum>, this will try
|
||||||
ns_e_serial().
|
ns_e_serial().
|
||||||
|
|
||||||
=item $baystack->e_swver()
|
=item $baystack->e_swver()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalSoftwareRev>, this will try
|
If the device doesn't support C<entPhysicalSoftwareRev>, this will try
|
||||||
ns_e_swver().
|
ns_e_swver().
|
||||||
|
|
||||||
=item $baystack->e_type()
|
=item $baystack->e_type()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalVendorType>, this will try
|
If the device doesn't support C<entPhysicalVendorType>, this will try
|
||||||
ns_e_type().
|
ns_e_type().
|
||||||
|
|
||||||
=item $baystack->e_vendor()
|
=item $baystack->e_vendor()
|
||||||
|
|
||||||
If the device doesn't support C<entPhysicalMfgName>, this will try
|
If the device doesn't support C<entPhysicalMfgName>, this will try
|
||||||
ns_e_vendor().
|
ns_e_vendor().
|
||||||
@@ -700,10 +686,6 @@ See L<SNMP::Info::NortelStack/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::RapidCity/"TABLE METHODS"> for details.
|
See L<SNMP::Info::RapidCity/"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::Layer3
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
See L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::C1900
|
# SNMP::Info::Layer2::C1900
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,6 +32,7 @@
|
|||||||
package SNMP::Info::Layer2::C1900;
|
package SNMP::Info::Layer2::C1900;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
@@ -46,9 +46,9 @@ use SNMP::Info::Layer2;
|
|||||||
Exporter/;
|
Exporter/;
|
||||||
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
@@ -200,6 +200,8 @@ sub set_i_duplex_admin {
|
|||||||
|
|
||||||
my $iid = $c1900->c1900_p_ifindex($port);
|
my $iid = $c1900->c1900_p_ifindex($port);
|
||||||
|
|
||||||
|
return 0 unless $iid->{$port};
|
||||||
|
|
||||||
$duplex = lc($duplex);
|
$duplex = lc($duplex);
|
||||||
|
|
||||||
return 0 unless defined $duplexes{$duplex};
|
return 0 unless defined $duplexes{$duplex};
|
||||||
@@ -212,17 +214,17 @@ sub i_vlan {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
# Overlap allows more than one VLAN per port. Unable to determine default
|
# Overlap allows more than one VLAN per port. Unable to determine default
|
||||||
my $overlap
|
my $overlap
|
||||||
= $c1900->bridgeGroupAllowMembershipOverlap()
|
= $c1900->bridgeGroupAllowMembershipOverlap()
|
||||||
|| $c1900->vlanAllowMembershipOverlap()
|
|| $c1900->vlanAllowMembershipOverlap()
|
||||||
|| 'disabled';
|
|| 'disabled';
|
||||||
|
|
||||||
if ( $overlap eq 'enabled' ) {
|
if ( $overlap eq 'enabled' ) {
|
||||||
return;
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
|
my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
|
||||||
|| $c1900->vlanMemberPortOfVlan();
|
|| $c1900->vlanMemberPortOfVlan() || {};
|
||||||
|
|
||||||
my $i_pvid = {};
|
my $i_pvid = {};
|
||||||
foreach my $idx ( keys %$member_of ) {
|
foreach my $idx ( keys %$member_of ) {
|
||||||
@@ -244,7 +246,7 @@ sub i_vlan_membership {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
|
my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
|
||||||
|| $c1900->vlanMemberPortOfVlan();
|
|| $c1900->vlanMemberPortOfVlan() || {};
|
||||||
|
|
||||||
my $i_vlan_membership = {};
|
my $i_vlan_membership = {};
|
||||||
foreach my $idx ( keys %$member_of ) {
|
foreach my $idx ( keys %$member_of ) {
|
||||||
@@ -261,7 +263,7 @@ sub i_vlan_membership {
|
|||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_vlan_membership_untagged { return; }
|
sub i_vlan_membership_untagged { return {}; }
|
||||||
|
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
my $c1900 = shift;
|
my $c1900 = shift;
|
||||||
@@ -289,14 +291,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $c1900 = new SNMP::Info(
|
my $c1900 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 1
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $c1900->class();
|
my $class = $c1900->class();
|
||||||
@@ -309,11 +311,6 @@ Catalyst 1900 device through SNMP. See SNMP::Info for full documentation
|
|||||||
|
|
||||||
Note that most of these devices only talk SNMP version 1, but not all.
|
Note that most of these devices only talk SNMP version 1, but not all.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $c1900 = new SNMP::Info::Layer2::C1900(...);
|
|
||||||
|
|
||||||
=head2 Inherited classes
|
=head2 Inherited classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -340,8 +337,6 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
F<ESSWITCH-MIB> is included in the Version 1 MIBs from Cisco.
|
F<ESSWITCH-MIB> is included in the Version 1 MIBs from Cisco.
|
||||||
|
|
||||||
They can be found at ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Inherited MIBs
|
=head2 Inherited MIBs
|
||||||
@@ -377,14 +372,14 @@ Returns 'catalyst'
|
|||||||
|
|
||||||
=item $c1900->os_ver()
|
=item $c1900->os_ver()
|
||||||
|
|
||||||
Returns CatOS version if obtainable. First tries to use
|
Returns CatOS version if obtainable. First tries to use
|
||||||
SNMP::Info::CiscoStats->os_ver() . If that fails then it
|
SNMP::Info::CiscoStats->os_ver() . If that fails then it
|
||||||
checks for the presence of $c1900->c1900_flash_status() and culls
|
checks for the presence of $c1900->c1900_flash_status() and culls
|
||||||
the version from there.
|
the version from there.
|
||||||
|
|
||||||
=item $c1900->vendor()
|
=item $c1900->vendor()
|
||||||
|
|
||||||
Returns 'cisco' :)
|
Returns 'cisco'
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -418,10 +413,6 @@ See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
See L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoAgg
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer2
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
@@ -465,7 +456,7 @@ bridge group IDs.
|
|||||||
Example:
|
Example:
|
||||||
my $interfaces = $c1900->interfaces();
|
my $interfaces = $c1900->interfaces();
|
||||||
my $vlans = $c1900->i_vlan_membership();
|
my $vlans = $c1900->i_vlan_membership();
|
||||||
|
|
||||||
foreach my $iid (sort keys %$interfaces) {
|
foreach my $iid (sort keys %$interfaces) {
|
||||||
my $port = $interfaces->{$iid};
|
my $port = $interfaces->{$iid};
|
||||||
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
||||||
@@ -508,7 +499,7 @@ Gives admin setting for Duplex Info
|
|||||||
|
|
||||||
=item $c1900->c1900_p_name()
|
=item $c1900->c1900_p_name()
|
||||||
|
|
||||||
Gives human set name for port
|
Gives human set name for port
|
||||||
|
|
||||||
(C<swPortName>)
|
(C<swPortName>)
|
||||||
|
|
||||||
@@ -561,7 +552,7 @@ See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
|||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -572,7 +563,7 @@ choices are 'auto', 'half', 'full'.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$c1900->interfaces()};
|
my %if_map = reverse %{$c1900->interfaces()};
|
||||||
$c1900->set_i_duplex_admin('auto', $if_map{'1'})
|
$c1900->set_i_duplex_admin('auto', $if_map{'1'})
|
||||||
or die "Couldn't change port duplex. ",$c1900->error(1);
|
or die "Couldn't change port duplex. ",$c1900->error(1);
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::C2900
|
# SNMP::Info::Layer2::C2900
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::Layer2::C2900;
|
package SNMP::Info::Layer2::C2900;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2::Cisco;
|
use SNMP::Info::Layer2::Cisco;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2::Cisco Exporter/;
|
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2::Cisco Exporter/;
|
||||||
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::Cisco::GLOBALS,
|
%SNMP::Info::Layer2::Cisco::GLOBALS,
|
||||||
@@ -128,25 +128,24 @@ sub i_speed_admin {
|
|||||||
my $c2900 = shift;
|
my $c2900 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my %i_speed_admin;
|
|
||||||
my $p_port = $c2900->p_port() || {};
|
|
||||||
my $interfaces = $c2900->interfaces($partial);
|
my $interfaces = $c2900->interfaces($partial);
|
||||||
my $c2900_p_index = $c2900->c2900_p_index() || {};
|
my $c2900_p_index = $c2900->c2900_p_index() || {};
|
||||||
|
my $c2900_p_admin = $c2900->c2900_p_speed_admin();
|
||||||
|
|
||||||
my %reverse_2900 = reverse %$c2900_p_index;
|
my %reverse_2900 = reverse %$c2900_p_index;
|
||||||
my $c2900_p_speed
|
|
||||||
= $c2900->c2900_p_speed_admin( $reverse_2900{$partial} );
|
|
||||||
|
|
||||||
my %speeds = (
|
my %i_speed_admin;
|
||||||
'autoDetect' => 'auto',
|
foreach my $if ( keys %$interfaces ) {
|
||||||
's10000000' => '10 Mbps',
|
my $port_2900 = $reverse_2900{$if};
|
||||||
's100000000' => '100 Mbps',
|
next unless defined $port_2900;
|
||||||
);
|
my $speed = $c2900_p_admin->{$port_2900};
|
||||||
|
next unless defined $speed;
|
||||||
%i_speed_admin
|
|
||||||
= map { $c2900_p_index->{$_} => $speeds{ $c2900_p_speed->{$_} } }
|
|
||||||
keys %$c2900_p_index;
|
|
||||||
|
|
||||||
|
$speed = 'auto' if $speed eq 'autoDetect';
|
||||||
|
$speed = '10 Mbps' if $speed eq 's10000000';
|
||||||
|
$speed = '100 Mbps' if $speed eq 's100000000';
|
||||||
|
$i_speed_admin{$if} = $speed;
|
||||||
|
}
|
||||||
return \%i_speed_admin;
|
return \%i_speed_admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +189,7 @@ sub set_i_duplex_admin {
|
|||||||
return $c2900->set_c2900_p_duplex_admin( $duplexes{$duplex}, $iid );
|
return $c2900->set_c2900_p_duplex_admin( $duplexes{$duplex}, $iid );
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use i_descritption for port key, cuz i_name can be manually entered.
|
# Use i_description for port key, cuz i_name can be manually entered.
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
my $c2900 = shift;
|
my $c2900 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -226,7 +225,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $c2900 = new SNMP::Info(
|
my $c2900 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -234,7 +233,7 @@ Max Baker
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $c2900->class();
|
my $class = $c2900->class();
|
||||||
@@ -242,13 +241,8 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
C2900 device through SNMP.
|
C2900 device through SNMP.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $c2900 = new SNMP::Info::Layer2::C2900(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -282,7 +276,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $c2900->vendor()
|
=item $c2900->vendor()
|
||||||
|
|
||||||
Returns 'cisco' :)
|
Returns 'cisco'
|
||||||
|
|
||||||
=item $c2900->cisco_comm_indexing()
|
=item $c2900->cisco_comm_indexing()
|
||||||
|
|
||||||
@@ -310,8 +304,8 @@ Returns reference to the map between IID and physical Port.
|
|||||||
On the 2900 devices i_name isn't reliable, so we override to just the
|
On the 2900 devices i_name isn't reliable, so we override to just the
|
||||||
description.
|
description.
|
||||||
|
|
||||||
Next all dots are changed for forward slashes so that the physical port name
|
Next all dots are changed for forward slashes so that the physical port name
|
||||||
is the same as the broad-casted CDP port name.
|
is the same as the broad-casted CDP port name.
|
||||||
(Ethernet0.1 -> Ethernet0/1)
|
(Ethernet0.1 -> Ethernet0/1)
|
||||||
|
|
||||||
Also, any weird characters are removed, as I saw a few pop up.
|
Also, any weird characters are removed, as I saw a few pop up.
|
||||||
@@ -334,7 +328,7 @@ Returns reference to hash of IIDs to admin speed setting.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 F<C2900-MIB> Port Entry Table
|
=head2 F<C2900-MIB> Port Entry Table
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -358,7 +352,7 @@ Gives admin setting for Duplex Info
|
|||||||
|
|
||||||
=item $c2900->c2900_p_speed_admin()
|
=item $c2900->c2900_p_speed_admin()
|
||||||
|
|
||||||
Gives Admin speed of port
|
Gives Admin speed of port
|
||||||
|
|
||||||
(C<c2900PortAdminSpeed>)
|
(C<c2900PortAdminSpeed>)
|
||||||
|
|
||||||
@@ -373,7 +367,7 @@ See L<SNMP::Info::Layer2::Cisco/"TABLE METHODS"> for details.
|
|||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -388,7 +382,7 @@ port C<ifIndex>.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$c2900->interfaces()};
|
my %if_map = reverse %{$c2900->interfaces()};
|
||||||
$c2900->set_i_speed_admin('auto', $if_map{'FastEthernet0/1'})
|
$c2900->set_i_speed_admin('auto', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port speed. ",$c2900->error(1);
|
or die "Couldn't change port speed. ",$c2900->error(1);
|
||||||
|
|
||||||
=item $c2900->set_i_duplex_admin(duplex, ifIndex)
|
=item $c2900->set_i_duplex_admin(duplex, ifIndex)
|
||||||
@@ -402,7 +396,7 @@ port C<ifIndex>.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$c2900->interfaces()};
|
my %if_map = reverse %{$c2900->interfaces()};
|
||||||
$c2900->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
$c2900->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port duplex. ",$c2900->error(1);
|
or die "Couldn't change port duplex. ",$c2900->error(1);
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|||||||
133
lib/SNMP/Info/Layer2/Carelink.pm
Executable file
133
lib/SNMP/Info/Layer2/Carelink.pm
Executable file
@@ -0,0 +1,133 @@
|
|||||||
|
# SNMP::Info::Layer2::Carelink - SNMP Interface to Carelink Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Carelink;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Carelink::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Carelink::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
# 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,
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'serial_oid' => 'mib-2.47.1.1.1.1.11.1',
|
||||||
|
'os_ver_oid' => 'mib-2.47.1.1.1.1.9.1',
|
||||||
|
'hw_oid' => 'mib-2.47.1.1.1.1.2.1',
|
||||||
|
'fw_mac_oid' => 'mib-2.47.1.1.1.1.11.1',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'carelink';
|
||||||
|
}
|
||||||
|
sub os {
|
||||||
|
return 'caos';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $carelink = shift;
|
||||||
|
my $ver = $carelink->os_ver_oid() || undef;
|
||||||
|
return $ver if (defined $ver);
|
||||||
|
return 'Unknown';
|
||||||
|
}
|
||||||
|
sub model {
|
||||||
|
my $carelink = shift;
|
||||||
|
my $id = $carelink->id();
|
||||||
|
my $mod = $carelink->hw_oid() || undef;
|
||||||
|
return $mod if (defined $mod);
|
||||||
|
return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Carelink - SNMP Interface to Carelink Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $carelink = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $carelink->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for carelink Devices running IOS-like software
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $carelink->vendor()
|
||||||
|
|
||||||
|
Returns 'adtran'
|
||||||
|
|
||||||
|
=item $carelink->os()
|
||||||
|
|
||||||
|
Returns 'caos'
|
||||||
|
|
||||||
|
=item $carelink->layers()
|
||||||
|
|
||||||
|
Ensures that layer two is reported, at least.
|
||||||
|
|
||||||
|
=item $carelink->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $carelink->model()
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $carelink->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Catalyst
|
# SNMP::Info::Layer2::Catalyst
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2002,2003 Regents of the University of California
|
# Copyright (c) 2002,2003 Regents of the University of California
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond
|
||||||
@@ -32,6 +31,7 @@
|
|||||||
package SNMP::Info::Layer2::Catalyst;
|
package SNMP::Info::Layer2::Catalyst;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoStack;
|
use SNMP::Info::CiscoStack;
|
||||||
use SNMP::Info::Layer2::Cisco;
|
use SNMP::Info::Layer2::Cisco;
|
||||||
@@ -40,9 +40,9 @@ use SNMP::Info::Layer2::Cisco;
|
|||||||
= qw/SNMP::Info::CiscoStack SNMP::Info::Layer2::Cisco Exporter/;
|
= qw/SNMP::Info::CiscoStack SNMP::Info::Layer2::Cisco Exporter/;
|
||||||
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::Cisco::MIBS,
|
%SNMP::Info::Layer2::Cisco::MIBS,
|
||||||
@@ -64,13 +64,13 @@ $VERSION = '3.52';
|
|||||||
%SNMP::Info::CiscoStack::MUNGE,
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
# Overidden Methods
|
# Overridden Methods
|
||||||
|
|
||||||
# i_physical sets a hash entry as true if the iid is a physical port
|
# i_physical sets a hash entry as true if the iid is a physical port
|
||||||
sub i_physical {
|
sub i_physical {
|
||||||
my $cat = shift;
|
my $cat = shift;
|
||||||
|
|
||||||
my $p_port = $cat->p_port();
|
my $p_port = $cat->p_port() || {};
|
||||||
|
|
||||||
my %i_physical;
|
my %i_physical;
|
||||||
foreach my $port ( keys %$p_port ) {
|
foreach my $port ( keys %$p_port ) {
|
||||||
@@ -104,8 +104,8 @@ sub os_ver {
|
|||||||
# Workaround for incomplete bp_index
|
# Workaround for incomplete bp_index
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
my $cat = shift;
|
my $cat = shift;
|
||||||
my $p_index = $cat->p_port();
|
my $p_index = $cat->p_port() || {};
|
||||||
my $b_index = $cat->p_oidx();
|
my $b_index = $cat->p_oidx() || {};
|
||||||
|
|
||||||
my %bp_index;
|
my %bp_index;
|
||||||
foreach my $iid ( keys %$p_index ) {
|
foreach my $iid ( keys %$p_index ) {
|
||||||
@@ -173,14 +173,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $cat = new SNMP::Info(
|
my $cat = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $cat->class();
|
my $class = $cat->class();
|
||||||
@@ -206,7 +206,7 @@ Note: Some older Catalyst switches will only talk SNMP version 1. Some
|
|||||||
newer ones will not return all their data if connected via Version 1.
|
newer ones will not return all their data if connected via Version 1.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $cat = new SNMP::Info::Layer2::Catalyst(...);
|
my $cat = new SNMP::Info::Layer2::Catalyst(...);
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ Returns 'catalyst'
|
|||||||
|
|
||||||
=item $cat->os_ver()
|
=item $cat->os_ver()
|
||||||
|
|
||||||
Tries to use the value from SNMP::Info::CiscoStats->os_ver() and if it fails
|
Tries to use the value from SNMP::Info::CiscoStats->os_ver() and if it fails
|
||||||
it grabs $cat->m_swver()->{1} and uses that.
|
it grabs $cat->m_swver()->{1} and uses that.
|
||||||
|
|
||||||
=item $cat->vendor()
|
=item $cat->vendor()
|
||||||
@@ -279,11 +279,11 @@ to a hash.
|
|||||||
=item $cat->interfaces()
|
=item $cat->interfaces()
|
||||||
|
|
||||||
Returns the map between SNMP Interface Identifier (iid) and physical port
|
Returns the map between SNMP Interface Identifier (iid) and physical port
|
||||||
name.
|
name.
|
||||||
|
|
||||||
=item $cat->i_name()
|
=item $cat->i_name()
|
||||||
|
|
||||||
Returns reference to hash of iid to human set name.
|
Returns reference to hash of iid to human set name.
|
||||||
|
|
||||||
C<portName>
|
C<portName>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Centillion
|
# SNMP::Info::Layer2::Centillion
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,9 +30,9 @@
|
|||||||
package SNMP::Info::Layer2::Centillion;
|
package SNMP::Info::Layer2::Centillion;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
use SNMP::Info::Bridge;
|
|
||||||
use SNMP::Info::NortelStack;
|
use SNMP::Info::NortelStack;
|
||||||
use SNMP::Info::SONMP;
|
use SNMP::Info::SONMP;
|
||||||
|
|
||||||
@@ -41,9 +40,9 @@ use SNMP::Info::SONMP;
|
|||||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::NortelStack SNMP::Info::SONMP Exporter/;
|
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::NortelStack SNMP::Info::SONMP Exporter/;
|
||||||
@SNMP::Info::Layer2::Centillion::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Centillion::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -274,14 +273,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $centillion = new SNMP::Info(
|
my $centillion = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $centillion->class();
|
my $class = $centillion->class();
|
||||||
@@ -289,14 +288,9 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Centillion device through SNMP.
|
Centillion device through SNMP.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $centillion = new SNMP::Info::Layer2::centillion(...);
|
|
||||||
|
|
||||||
Note: This class supports version 4.X and 5.X which are VLAN based rather
|
Note: This class supports version 4.X and 5.X which are VLAN based rather
|
||||||
than bridge group based.
|
than bridge group based.
|
||||||
|
|
||||||
@@ -328,7 +322,7 @@ than bridge group based.
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info/"REQUIREMENTS"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
@@ -346,7 +340,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $centillion->vendor()
|
=item $centillion->vendor()
|
||||||
|
|
||||||
Returns 'Nortel'
|
Returns 'nortel'
|
||||||
|
|
||||||
=item $centillion->model()
|
=item $centillion->model()
|
||||||
|
|
||||||
@@ -357,7 +351,7 @@ Removes C<sreg-> from the model name
|
|||||||
|
|
||||||
=item $centillion->os()
|
=item $centillion->os()
|
||||||
|
|
||||||
Returns 'Centillion'
|
Returns 'centillion'
|
||||||
|
|
||||||
=item $centillion->tftp_action()
|
=item $centillion->tftp_action()
|
||||||
|
|
||||||
@@ -399,7 +393,7 @@ start at 0. Returns 0.
|
|||||||
|
|
||||||
=head2 Globals imported from SNMP::Info
|
=head2 Globals imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Bridge
|
=head2 Globals imported from SNMP::Info::Bridge
|
||||||
|
|
||||||
@@ -430,7 +424,7 @@ to a hash.
|
|||||||
formula:
|
formula:
|
||||||
port = index % 256
|
port = index % 256
|
||||||
slot = int(index / 256)
|
slot = int(index / 256)
|
||||||
|
|
||||||
The physical port name is returned as slot.port.
|
The physical port name is returned as slot.port.
|
||||||
|
|
||||||
=item $centillion->i_duplex()
|
=item $centillion->i_duplex()
|
||||||
@@ -469,13 +463,13 @@ Returns a mapping between C<ifIndex> and the VLAN.
|
|||||||
|
|
||||||
=item $centillion->centillion_p_index()
|
=item $centillion->centillion_p_index()
|
||||||
|
|
||||||
Returns reference to hash. Maps table IIDs to Interface IIDs
|
Returns reference to hash. Maps table IIDs to Interface IIDs
|
||||||
|
|
||||||
(C<cnDot3ExtnIfIndex>)
|
(C<cnDot3ExtnIfIndex>)
|
||||||
|
|
||||||
=item $centillion->centillion_p_duplex()
|
=item $centillion->centillion_p_duplex()
|
||||||
|
|
||||||
Returns reference to hash. Maps port operational duplexes to IIDs
|
Returns reference to hash. Maps port operational duplexes to IIDs
|
||||||
|
|
||||||
(C<cnDot3ExtnIfOperConnectionType>)
|
(C<cnDot3ExtnIfOperConnectionType>)
|
||||||
|
|
||||||
@@ -493,19 +487,19 @@ Returns reference to hash. Maps port admin duplexes to IIDs
|
|||||||
|
|
||||||
=item $centillion->centillion_i_vlan_index()
|
=item $centillion->centillion_i_vlan_index()
|
||||||
|
|
||||||
Returns reference to hash. Key: Table entry, Value: Index
|
Returns reference to hash. Key: Table entry, Value: Index
|
||||||
|
|
||||||
(C<cnVlanPortMemberIfIndex>)
|
(C<cnVlanPortMemberIfIndex>)
|
||||||
|
|
||||||
=item $centillion->centillion_i_vlan()
|
=item $centillion->centillion_i_vlan()
|
||||||
|
|
||||||
Returns reference to hash. Key: Table entry, Value: VLAN ID
|
Returns reference to hash. Key: Table entry, Value: VLAN ID
|
||||||
|
|
||||||
(C<cnVlanPortMemberVID>)
|
(C<cnVlanPortMemberVID>)
|
||||||
|
|
||||||
=item $centillion->centillion_i_vlan_type()
|
=item $centillion->centillion_i_vlan_type()
|
||||||
|
|
||||||
Returns reference to hash. Key: Table entry, Value: VLAN Type
|
Returns reference to hash. Key: Table entry, Value: VLAN Type
|
||||||
|
|
||||||
(C<cnVlanPortMemberIngressType>)
|
(C<cnVlanPortMemberIngressType>)
|
||||||
|
|
||||||
@@ -513,7 +507,7 @@ Returns reference to hash. Key: Table entry, Value: VLAN Type
|
|||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
=head2 Table Methods imported from SNMP::Info::Bridge
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Cisco
|
# SNMP::Info::Layer2::Cisco
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker
|
# Copyright (c) 2008 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,6 +30,7 @@
|
|||||||
package SNMP::Info::Layer2::Cisco;
|
package SNMP::Info::Layer2::Cisco;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::CiscoVTP;
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
@@ -50,9 +50,9 @@ use SNMP::Info::Layer2;
|
|||||||
Exporter/;
|
Exporter/;
|
||||||
@SNMP::Info::Layer2::Cisco::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Cisco::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -117,7 +117,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $cisco = new SNMP::Info(
|
my $cisco = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -125,7 +125,7 @@ Max Baker
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $cisco->class();
|
my $class = $cisco->class();
|
||||||
@@ -194,7 +194,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $cisco->vendor()
|
=item $cisco->vendor()
|
||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -226,10 +226,6 @@ See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoAgg
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer2
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::CiscoSB
|
# SNMP::Info::Layer2::CiscoSB
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013 Nic Bernstein
|
# Copyright (c) 2013 Nic Bernstein
|
||||||
#
|
#
|
||||||
@@ -35,61 +34,60 @@
|
|||||||
package SNMP::Info::Layer2::CiscoSB;
|
package SNMP::Info::Layer2::CiscoSB;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Entity;
|
|
||||||
use SNMP::Info::EtherLike;
|
use SNMP::Info::EtherLike;
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
use SNMP::Info::CiscoConfig;
|
use SNMP::Info::CiscoConfig;
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::CiscoSB::ISA
|
@SNMP::Info::Layer2::CiscoSB::ISA
|
||||||
= qw/SNMP::Info::Layer2 SNMP::Info::Entity SNMP::Info::EtherLike
|
= qw/SNMP::Info::Layer2 SNMP::Info::EtherLike
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
|
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
|
||||||
@SNMP::Info::Layer2::CiscoSB::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::CiscoSB::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::Entity::GLOBALS,
|
|
||||||
%SNMP::Info::EtherLike::GLOBALS,
|
%SNMP::Info::EtherLike::GLOBALS,
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
%SNMP::Info::CiscoStats::GLOBALS,
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
'descr' => 'sysDescr'
|
'descr' => 'sysDescr',
|
||||||
|
'mac' => 'rndBasePhysicalAddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::Entity::FUNCS,
|
|
||||||
%SNMP::Info::EtherLike::FUNCS,
|
%SNMP::Info::EtherLike::FUNCS,
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::CiscoConfig::FUNCS,
|
||||||
%SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CDP::FUNCS,
|
||||||
|
'peth_port_power' => 'rlPethPsePortOutputPower',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::Entity::MIBS,
|
|
||||||
%SNMP::Info::EtherLike::MIBS,
|
%SNMP::Info::EtherLike::MIBS,
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
%SNMP::Info::CiscoStats::MIBS,
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::CiscoConfig::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
|
'CISCOSB-POE-MIB' => 'rlPethPsePortOutputPower',
|
||||||
|
'CISCOSB-DEVICEPARAMS-MIB' => 'rndBasePhysicalAddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::Entity::MUNGE,
|
|
||||||
%SNMP::Info::EtherLike::MUNGE,
|
%SNMP::Info::EtherLike::MUNGE,
|
||||||
%SNMP::Info::CiscoStats::MUNGE,
|
%SNMP::Info::CiscoStats::MUNGE,
|
||||||
%SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::CiscoConfig::MUNGE,
|
||||||
%SNMP::Info::CDP::MUNGE,
|
%SNMP::Info::CDP::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
@@ -138,6 +136,26 @@ sub model {
|
|||||||
return $ciscosb->description();
|
return $ciscosb->description();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# CISCOSBinterfaces.mib also contains duplex info if needed
|
||||||
|
sub i_duplex {
|
||||||
|
my $ciscosb = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $el_duplex = $ciscosb->el_duplex($partial);
|
||||||
|
|
||||||
|
if ( defined $el_duplex and scalar( keys %$el_duplex ) ) {
|
||||||
|
my %i_duplex;
|
||||||
|
foreach my $el_port ( keys %$el_duplex ) {
|
||||||
|
my $duplex = $el_duplex->{$el_port};
|
||||||
|
next unless defined $duplex;
|
||||||
|
|
||||||
|
$i_duplex{$el_port} = 'half' if $duplex =~ /half/i;
|
||||||
|
$i_duplex{$el_port} = 'full' if $duplex =~ /full/i;
|
||||||
|
}
|
||||||
|
return \%i_duplex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# ifDescr is the same for all interfaces in a class, but the ifName is
|
# ifDescr is the same for all interfaces in a class, but the ifName is
|
||||||
# unique, so let's use that for port name.
|
# unique, so let's use that for port name.
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
@@ -149,7 +167,6 @@ sub interfaces {
|
|||||||
return $interfaces;
|
return $interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -185,15 +202,15 @@ managed switches. [i.e. those matching enterprises(1).cisco(9).otherEnterprises(
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::CDP
|
||||||
|
|
||||||
=item SNMP::Info::Entity
|
=item SNMP::Info::CiscoConfig
|
||||||
|
|
||||||
=item SNMP::Info::EtherLike
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
=item SNMP::Info::CiscoStats
|
||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
=item SNMP::Info::EtherLike
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -201,6 +218,10 @@ managed switches. [i.e. those matching enterprises(1).cisco(9).otherEnterprises(
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<CISCOSB-DEVICEPARAMS-MIB>
|
||||||
|
|
||||||
|
=item F<CISCOSB-POE-MIB>
|
||||||
|
|
||||||
=item Inherited Classes
|
=item Inherited Classes
|
||||||
|
|
||||||
MIBs required by the inherited classes listed above.
|
MIBs required by the inherited classes listed above.
|
||||||
@@ -209,17 +230,13 @@ MIBs required by the inherited classes listed above.
|
|||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar value from SNMP
|
These are methods that return scalar value from SNMP.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $ciscosb->vendor()
|
=item $ciscosb->mac()
|
||||||
|
|
||||||
Returns 'cisco'
|
Returns mac from (C<rndBasePhysicalAddress>)
|
||||||
|
|
||||||
=item $ciscosb->os()
|
|
||||||
|
|
||||||
Returns 'ros'
|
|
||||||
|
|
||||||
=item $ciscosb->os_ver()
|
=item $ciscosb->os_ver()
|
||||||
|
|
||||||
@@ -236,20 +253,43 @@ Returns model and hardware revision of unit
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ciscosb->vendor()
|
||||||
|
|
||||||
|
Returns 'cisco'.
|
||||||
|
|
||||||
|
=item $ciscosb->os()
|
||||||
|
|
||||||
|
Returns 'ros'.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer2
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Entity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::EtherLike
|
=head2 Globals imported from SNMP::Info::EtherLike
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::EtherLike/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::EtherLike/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ciscosb->peth_port_power()
|
||||||
|
|
||||||
|
Power supplied by PoE ports, in milliwatts.
|
||||||
|
(C<rlPethPsePortOutputPower>)
|
||||||
|
|
||||||
|
=item $ciscosb->i_duplex()
|
||||||
|
|
||||||
|
Return duplex based upon the result of EtherLike->el_duplex().
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -264,10 +304,6 @@ Uses the i_name() field.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Entity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::EtherLike
|
=head2 Table Methods imported from SNMP::Info::EtherLike
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
|
||||||
|
|||||||
113
lib/SNMP/Info/Layer2/ECI.pm
Executable file
113
lib/SNMP/Info/Layer2/ECI.pm
Executable file
@@ -0,0 +1,113 @@
|
|||||||
|
# SNMP::Info::Layer2::ECI - SNMP Interface to ECI Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::ECI;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::ECI::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::ECI::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'eci';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'eci-os';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
return 'unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
|
||||||
|
return $obj->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::ECI - SNMP Interface to ECI Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for ECI Devices running IOS-like software
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'eci'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'eci-os'
|
||||||
|
|
||||||
|
=item $obj->layers()
|
||||||
|
|
||||||
|
Ensures that layer two is reported, at least.
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
201
lib/SNMP/Info/Layer2/Exinda.pm
Normal file
201
lib/SNMP/Info/Layer2/Exinda.pm
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
# SNMP::Info::Layer2::Exinda
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 nick nauwelaerts
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Exinda;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Exinda::ISA = qw/
|
||||||
|
SNMP::Info::Layer2
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::Layer2::Exinda::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'EXINDA-MIB' => 'systemVersion',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
# EXINDA-MIB
|
||||||
|
'exinda_model' => 'hardwareSeries',
|
||||||
|
'serial1' => 'systemHostId',
|
||||||
|
'uptime' => 'systemUptime',
|
||||||
|
'os_ver' => 'systemVersion',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# layer 2: bridged shaping and failopen interfaces
|
||||||
|
# layer 3/4: ip and layer 4 protocol fiddling and accell
|
||||||
|
# layer 7: wccp support
|
||||||
|
sub layers {
|
||||||
|
return '01001110';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'exinda';
|
||||||
|
}
|
||||||
|
|
||||||
|
# overwrite l2->model, hardwareSeries returns a plain string
|
||||||
|
sub model {
|
||||||
|
my $exinda = shift;
|
||||||
|
return $exinda->exinda_model;
|
||||||
|
}
|
||||||
|
|
||||||
|
# systemHostId (and thus serial1) is actually also a mac address
|
||||||
|
sub mac {
|
||||||
|
my $exinda = shift;
|
||||||
|
my $exinda_mac = $exinda->serial1;
|
||||||
|
|
||||||
|
return unless (defined $exinda_mac && (length $exinda_mac) == 12);
|
||||||
|
return join(":", $exinda_mac =~ m/\w{2}/g);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'exos';
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Exinda - SNMP Interface to exinda / gfi traffic shapers.
|
||||||
|
|
||||||
|
=head1 AUTHORS
|
||||||
|
|
||||||
|
nick nauwelaerts
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $exinda = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $exinda->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for exinda / gfi network orchestrator traffic shapers.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<EXINDA-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $exinda->layers()
|
||||||
|
|
||||||
|
Returns '01001110'.
|
||||||
|
|
||||||
|
=item $exinda->mac()
|
||||||
|
|
||||||
|
Returns a mac address extracted from C<systemHostId>.
|
||||||
|
|
||||||
|
=item $exinda->model()
|
||||||
|
|
||||||
|
Returns C<hardwareSeries>.
|
||||||
|
|
||||||
|
=item $exinda->os()
|
||||||
|
|
||||||
|
Returns 'exos'.
|
||||||
|
|
||||||
|
=item $exinda->os_ver()
|
||||||
|
|
||||||
|
Returns C<systemVersion>.
|
||||||
|
|
||||||
|
=item $exinda->uptime()
|
||||||
|
|
||||||
|
Returns the uptime extracted from C<systemUptime>.
|
||||||
|
|
||||||
|
=item $exinda->vendor()
|
||||||
|
|
||||||
|
Returns 'exinda'.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
|
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,6 +32,7 @@
|
|||||||
package SNMP::Info::Layer2::HP;
|
package SNMP::Info::Layer2::HP;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
@@ -41,31 +41,33 @@ use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
|||||||
|
|
||||||
@SNMP::Info::Layer2::HP::ISA = qw/
|
@SNMP::Info::Layer2::HP::ISA = qw/
|
||||||
SNMP::Info::Aggregate
|
SNMP::Info::Aggregate
|
||||||
SNMP::Info::Layer3
|
SNMP::Info::Layer3
|
||||||
SNMP::Info::MAU
|
SNMP::Info::MAU
|
||||||
SNMP::Info::CDP
|
SNMP::Info::CDP
|
||||||
Exporter
|
Exporter
|
||||||
/;
|
/;
|
||||||
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MODEL_MAP, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
%SNMP::Info::Aggregate::MIBS,
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
'RFC1271-MIB' => 'logDescription',
|
'RFC1271-MIB' => 'logDescription',
|
||||||
'HP-ICF-OID' => 'hpSwitch4000',
|
'HP-ICF-OID' => 'hpSwitch4000',
|
||||||
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
||||||
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
||||||
'CONFIG-MIB' => 'hpSwitchConfig',
|
'CONFIG-MIB' => 'hpSwitchConfig',
|
||||||
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
|
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
|
||||||
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
|
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
|
||||||
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
|
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
|
||||||
'SEMI-MIB' => 'hpHttpMgSerialNumber',
|
'SEMI-MIB' => 'hpHttpMgSerialNumber',
|
||||||
|
'HP-SWITCH-PL-MIB' => 'hpSwitchProliant',
|
||||||
|
'BLADETYPE4-NETWORK-MIB' => 'hpProLiant-GbE2c-InterconnectSwitch',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -105,7 +107,7 @@ $VERSION = '3.52';
|
|||||||
'hp_s_oid' => 'hpicfSensorObjectId',
|
'hp_s_oid' => 'hpicfSensorObjectId',
|
||||||
'hp_s_name' => 'hpicfSensorDescr',
|
'hp_s_name' => 'hpicfSensorDescr',
|
||||||
'hp_s_status' => 'hpicfSensorStatus',
|
'hp_s_status' => 'hpicfSensorStatus',
|
||||||
|
|
||||||
# HP-ICF-POE-MIB
|
# HP-ICF-POE-MIB
|
||||||
'peth_port_power' => 'hpicfPoePethPsePortPower',
|
'peth_port_power' => 'hpicfPoePethPsePortPower',
|
||||||
);
|
);
|
||||||
@@ -121,7 +123,7 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
|
|
||||||
# Model map, reverse sorted by common model name (sort -k2 -r)
|
# Model map, reverse sorted by common model name (sort -k2 -r)
|
||||||
# Potential sources for model information: http://www.hp.com/rnd/software/switches.htm or HP-ICF-OID MIB
|
# Potential sources for model information: http://www.hp.com/rnd/software/switches.htm or HP-ICF-OID MIB
|
||||||
%MODEL_MAP = (
|
%MODEL_MAP = (
|
||||||
'J8131A' => 'WAP-420-WW',
|
'J8131A' => 'WAP-420-WW',
|
||||||
'J8130A' => 'WAP-420-NA',
|
'J8130A' => 'WAP-420-NA',
|
||||||
@@ -156,6 +158,12 @@ $VERSION = '3.52';
|
|||||||
'J8771A' => '4202vl-48G',
|
'J8771A' => '4202vl-48G',
|
||||||
'J4865A' => '4108GL',
|
'J4865A' => '4108GL',
|
||||||
'J4887A' => '4104GL',
|
'J4887A' => '4104GL',
|
||||||
|
'JL074A' => '3810M-48G-PoE+',
|
||||||
|
'JL072A' => '3810M-48G',
|
||||||
|
'JL076A' => '3810M-40G-8SR-PoE+',
|
||||||
|
'JL073A' => '3810M-24G-PoE+',
|
||||||
|
'JL071A' => '3810M-24G',
|
||||||
|
'JL075A' => '3810M-16SFP+',
|
||||||
'J9588A' => '3800-48G-PoE+-4XG',
|
'J9588A' => '3800-48G-PoE+-4XG',
|
||||||
'J9574A' => '3800-48G-PoE+-4SFP+',
|
'J9574A' => '3800-48G-PoE+-4SFP+',
|
||||||
'J9586A' => '3800-48G-4XG',
|
'J9586A' => '3800-48G-4XG',
|
||||||
@@ -175,6 +183,23 @@ $VERSION = '3.52';
|
|||||||
'J4905A' => '3400cl-24G',
|
'J4905A' => '3400cl-24G',
|
||||||
'J4815A' => '3324XL',
|
'J4815A' => '3324XL',
|
||||||
'J4851A' => '3124',
|
'J4851A' => '3124',
|
||||||
|
'JL322A' => '2930M-48G-PoE+',
|
||||||
|
'JL321A' => '2930M-48G',
|
||||||
|
'JL323A' => '2930M-40G-8SR-PoE+',
|
||||||
|
'JL320A' => '2930M-24G-PoE+',
|
||||||
|
'JL324A' => '2930M-24G-8SR-PoE+',
|
||||||
|
'JL319A' => '2930M-24G',
|
||||||
|
'JL258A' => '2930F-8G-PoE+-2SFP+',
|
||||||
|
'JL558A' => '2930F-48G-PoE+-4SFP+-740W',
|
||||||
|
'JL557A' => '2930F-48G-PoE+-4SFP-740W',
|
||||||
|
'JL256A' => '2930F-48G-PoE+-4SFP+',
|
||||||
|
'JL262A' => '2930F-48G-PoE+-4SFP',
|
||||||
|
'JL254A' => '2930F-48G-4SFP+',
|
||||||
|
'JL260A' => '2930F-48G-4SFP',
|
||||||
|
'JL255A' => '2930F-24G-PoE+-4SFP+',
|
||||||
|
'JL261A' => '2930F-24G-PoE+-4SFP',
|
||||||
|
'JL253A' => '2930F-24G-4SFP+',
|
||||||
|
'JL259A' => '2930F-24G-4SFP',
|
||||||
'J9729A' => '2920-48G-PoE+',
|
'J9729A' => '2920-48G-PoE+',
|
||||||
'J9729A' => '2920-48G-PoE+',
|
'J9729A' => '2920-48G-PoE+',
|
||||||
'J9728A' => '2920-48G',
|
'J9728A' => '2920-48G',
|
||||||
@@ -214,6 +239,11 @@ $VERSION = '3.52';
|
|||||||
'J9086A' => '2610-24/12PWR',
|
'J9086A' => '2610-24/12PWR',
|
||||||
'J9085A' => '2610-24',
|
'J9085A' => '2610-24',
|
||||||
'J8762A' => '2600-8-PWR',
|
'J8762A' => '2600-8-PWR',
|
||||||
|
'JL357A' => '2540-48G-PoE+-4SFP+',
|
||||||
|
'JL355A' => '2540-48G-4SFP+',
|
||||||
|
'JL356A' => '2540-24G-PoE+-4SFP+',
|
||||||
|
'JL354A' => '2540-24G-4SFP+',
|
||||||
|
'JL070A' => '2530-8-PoE+ Internal PS',
|
||||||
'J9780A' => '2530-8-PoE+',
|
'J9780A' => '2530-8-PoE+',
|
||||||
'J9774A' => '2530-8G-PoEP',
|
'J9774A' => '2530-8G-PoEP',
|
||||||
'J9777A' => '2530-8G',
|
'J9777A' => '2530-8G',
|
||||||
@@ -285,7 +315,7 @@ sub os_ver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Regular managed ProCurve switches have the serial num in entity mib,
|
# Regular managed ProCurve switches have the serial num in entity mib,
|
||||||
# the web-managed models in the semi mib (hphttpmanageable).
|
# the web-managed models in the semi mib (hphttpmanageable).
|
||||||
sub serial {
|
sub serial {
|
||||||
my $hp = shift;
|
my $hp = shift;
|
||||||
@@ -303,7 +333,7 @@ sub model {
|
|||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
return $id unless defined $model;
|
return $id unless defined $model;
|
||||||
|
|
||||||
$model =~ s/^hpswitch//i;
|
$model =~ s/^(hp|aruba)switch//i;
|
||||||
|
|
||||||
return defined $MODEL_MAP{$model} ? $MODEL_MAP{$model} : $model;
|
return defined $MODEL_MAP{$model} ? $MODEL_MAP{$model} : $model;
|
||||||
}
|
}
|
||||||
@@ -565,14 +595,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $hp = new SNMP::Info(
|
my $hp = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $hp->class();
|
my $class = $hp->class();
|
||||||
@@ -580,15 +610,15 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
HP ProCurve Switch via SNMP.
|
HP ProCurve Switch via SNMP.
|
||||||
|
|
||||||
Note: Some HP Switches will connect via SNMP version 1, but a lot of config
|
Note: Some HP Switches will connect via SNMP version 1, but a lot of config
|
||||||
data will not be available. Make sure you try and connect with Version 2
|
data will not be available. Make sure you try and connect with Version 2
|
||||||
first, and then fail back to version 1.
|
first, and then fail back to version 1.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $hp = new SNMP::Info::Layer2::HP(...);
|
my $hp = new SNMP::Info::Layer2::HP(...);
|
||||||
|
|
||||||
@@ -624,6 +654,14 @@ Included in V2 mibs from Cisco
|
|||||||
|
|
||||||
=item F<HP-ICF-POE-MIB>
|
=item F<HP-ICF-POE-MIB>
|
||||||
|
|
||||||
|
=item F<HP-ICF-CHASSIS>
|
||||||
|
|
||||||
|
=item F<SEMI-MIB>
|
||||||
|
|
||||||
|
=item F<HP-SWITCH-PL-MIB>
|
||||||
|
|
||||||
|
=item F<BLADETYPE4-NETWORK-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
The last four MIBs listed are from HP and can be found at
|
The last four MIBs listed are from HP and can be found at
|
||||||
@@ -836,7 +874,7 @@ to a hash.
|
|||||||
|
|
||||||
=over 4
|
=over 4
|
||||||
|
|
||||||
=item $hp->interfaces()
|
=item $hp->interfaces()
|
||||||
|
|
||||||
Uses $hp->i_description()
|
Uses $hp->i_description()
|
||||||
|
|
||||||
@@ -893,7 +931,7 @@ Munge for c_id which handles CDP and LLDP.
|
|||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
package SNMP::Info::Layer2::HP4000;
|
package SNMP::Info::Layer2::HP4000;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
@@ -42,14 +43,13 @@ use SNMP::Info::CDP;
|
|||||||
SNMP::Info::CDP Exporter/;
|
SNMP::Info::CDP Exporter/;
|
||||||
@SNMP::Info::Layer2::HP4000::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::HP4000::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MODEL_MAP, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
'RFC1271-MIB' => 'logDescription',
|
'RFC1271-MIB' => 'logDescription',
|
||||||
'HP-ICF-OID' => 'hpSwitch4000',
|
'HP-ICF-OID' => 'hpSwitch4000',
|
||||||
@@ -386,7 +386,7 @@ sub i_vlan_membership_untagged {
|
|||||||
my $vlan = $vlans->{$port};
|
my $vlan = $vlans->{$port};
|
||||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,7 +427,7 @@ sub set_i_vlan {
|
|||||||
$hp->error_throw("Error removing previous untagged vlan from port, should never happen...\n") unless defined $rv;
|
$hp->error_throw("Error removing previous untagged vlan from port, should never happen...\n") unless defined $rv;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# If vlan change was not succesful, try to revert to the old situation.
|
# If vlan change was not successful, try to revert to the old situation.
|
||||||
if (defined $old_untagged) {
|
if (defined $old_untagged) {
|
||||||
$rv = $hp->set_hp_v_if_tag(2, $old_untagged) if defined $old_untagged;
|
$rv = $hp->set_hp_v_if_tag(2, $old_untagged) if defined $old_untagged;
|
||||||
if (defined $rv) {
|
if (defined $rv) {
|
||||||
@@ -482,14 +482,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $hp = new SNMP::Info(
|
my $hp = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $hp->class();
|
my $class = $hp->class();
|
||||||
@@ -497,18 +497,13 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
HP ProCurve Switch via SNMP.
|
HP ProCurve Switch via SNMP.
|
||||||
|
|
||||||
Note: Some HP Switches will connect via SNMP version 1, but a lot of config
|
Note: Some HP Switches will connect via SNMP version 1, but a lot of config
|
||||||
data will not be available. Make sure you try and connect with Version 2
|
data will not be available. Make sure you try and connect with Version 2
|
||||||
first, and then fail back to version 1.
|
first, and then fail back to version 1.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $hp = new SNMP::Info::Layer2::HP4000(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -583,7 +578,7 @@ Returns bytes of used memory
|
|||||||
Returns the model number of the HP Switch. Will translate between the HP Part
|
Returns the model number of the HP Switch. Will translate between the HP Part
|
||||||
number and the common model number with this map :
|
number and the common model number with this map :
|
||||||
|
|
||||||
%MODEL_MAP = (
|
%MODEL_MAP = (
|
||||||
'J4093A' => '2424M',
|
'J4093A' => '2424M',
|
||||||
'J4110A' => '8000M',
|
'J4110A' => '8000M',
|
||||||
'J4120A' => '1600M',
|
'J4120A' => '1600M',
|
||||||
@@ -652,7 +647,7 @@ to a hash.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $hp->interfaces()
|
=item $hp->interfaces()
|
||||||
|
|
||||||
Uses $hp->i_description()
|
Uses $hp->i_description()
|
||||||
|
|
||||||
@@ -687,7 +682,7 @@ It is the union of tagged, untagged, and auto ports.
|
|||||||
Example:
|
Example:
|
||||||
my $interfaces = $hp->interfaces();
|
my $interfaces = $hp->interfaces();
|
||||||
my $vlans = $hp->i_vlan_membership();
|
my $vlans = $hp->i_vlan_membership();
|
||||||
|
|
||||||
foreach my $iid (sort keys %$interfaces) {
|
foreach my $iid (sort keys %$interfaces) {
|
||||||
my $port = $interfaces->{$iid};
|
my $port = $interfaces->{$iid};
|
||||||
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
||||||
@@ -731,7 +726,7 @@ See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
|||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
|||||||
@@ -31,21 +31,20 @@
|
|||||||
package SNMP::Info::Layer2::HPVC;
|
package SNMP::Info::Layer2::HPVC;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer2::HPVC::ISA
|
@SNMP::Info::Layer2::HPVC::ISA
|
||||||
= qw/SNMP::Info::Layer2 SNMP::Info::LLDP Exporter/;
|
= qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
'HPVC-MIB' => 'vcDomainName',
|
'HPVC-MIB' => 'vcDomainName',
|
||||||
'CPQSINFO-MIB' => 'cpqSiSysSerialNum',
|
'CPQSINFO-MIB' => 'cpqSiSysSerialNum',
|
||||||
'HPVCMODULE-MIB' => 'vcModuleDomainName',
|
'HPVCMODULE-MIB' => 'vcModuleDomainName',
|
||||||
@@ -53,7 +52,6 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
'serial1' => 'cpqSiSysSerialNum.0',
|
'serial1' => 'cpqSiSysSerialNum.0',
|
||||||
'os_ver' => 'cpqHoSWRunningVersion.1',
|
'os_ver' => 'cpqHoSWRunningVersion.1',
|
||||||
'os_bin' => 'cpqHoFwVerVersion.1',
|
'os_bin' => 'cpqHoFwVerVersion.1',
|
||||||
@@ -62,17 +60,13 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
# Inherit all the built in munging
|
# Inherit all the built in munging
|
||||||
%SNMP::Info::Layer2::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
# Method Overrides
|
# Method Overrides
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
@@ -102,14 +96,14 @@ Jeroen van Ingen
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $hp = new SNMP::Info(
|
my $hp = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $hp->class();
|
my $class = $hp->class();
|
||||||
@@ -117,13 +111,8 @@ Jeroen van Ingen
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
HP Virtual Connect Switch via SNMP.
|
HP Virtual Connect Switch via SNMP.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $hp = new SNMP::Info::Layer2::HPVC(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -188,27 +177,15 @@ See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=head2 Overrides
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head1 MUNGES
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head1 SET METHODS
|
=head1 SET METHODS
|
||||||
|
|
||||||
These are methods that provide SNMP set functionality for overridden methods
|
These are methods that provide SNMP set functionality for overridden methods
|
||||||
or provide a simpler interface to complex set operations. See
|
or provide a simpler interface to complex set operations. See
|
||||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -28,15 +28,16 @@ package SNMP::Info::Layer2::Kentrox;
|
|||||||
# POSSIBILITY OF SUCH DAMAGE.
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Kentrox::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::Kentrox::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Kentrox::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Kentrox::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -57,36 +58,38 @@ $VERSION = '3.52';
|
|||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
return 'Kentrox';
|
return 'kentrox';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $dsver = shift;
|
my $dsver = shift;
|
||||||
my $descr = $dsver->description();
|
my $descr = $dsver->description();
|
||||||
if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
|
if ( defined ($descr) && $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub serial {
|
sub serial {
|
||||||
my $dsserial = shift;
|
my $dsserial = shift;
|
||||||
my $serial = $dsserial->ds_sysinfo();
|
my $serial = $dsserial->ds_sysinfo();
|
||||||
if ( $serial =~ /SERIAL\s(\S+)/){
|
if ( defined ($serial) && $serial =~ /SERIAL\s(\S+)/){
|
||||||
my $str = substr($1,8,10);
|
my $str = substr($1,8,10);
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'Kentrox';
|
return 'kentrox';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
my $dsmodel = shift;
|
my $dsmodel = shift;
|
||||||
my $descr = $dsmodel->description();
|
my $descr = $dsmodel->description();
|
||||||
if ( $descr =~ /^(\S+\s\S+)/){
|
if ( defined ($descr) && $descr =~ /^(\S+\s\S+)/){
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -108,7 +111,7 @@ phishphreek@gmail.com
|
|||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -166,12 +169,6 @@ See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=head2 Overrides
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::N2270
|
# SNMP::Info::Layer2::N2270
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,38 +30,42 @@
|
|||||||
package SNMP::Info::Layer2::N2270;
|
package SNMP::Info::Layer2::N2270;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Bridge;
|
|
||||||
use SNMP::Info::SONMP;
|
use SNMP::Info::SONMP;
|
||||||
use SNMP::Info::Airespace;
|
use SNMP::Info::Airespace;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::N2270::ISA
|
@SNMP::Info::Layer2::N2270::ISA
|
||||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::SONMP SNMP::Info::Airespace Exporter/;
|
= qw/SNMP::Info::Layer2 SNMP::Info::SONMP SNMP::Info::Airespace Exporter/;
|
||||||
@SNMP::Info::Layer2::N2270::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::N2270::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::SONMP::MIBS, %SNMP::Info::Airespace::MIBS,
|
%SNMP::Info::SONMP::MIBS,
|
||||||
|
%SNMP::Info::Airespace::MIBS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::GLOBALS, %SNMP::Info::Bridge::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::SONMP::GLOBALS, %SNMP::Info::Airespace::GLOBALS,
|
%SNMP::Info::SONMP::GLOBALS,
|
||||||
|
%SNMP::Info::Airespace::GLOBALS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::FUNCS, %SNMP::Info::Bridge::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::SONMP::FUNCS, %SNMP::Info::Airespace::FUNCS,
|
%SNMP::Info::SONMP::FUNCS,
|
||||||
|
%SNMP::Info::Airespace::FUNCS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::MUNGE, %SNMP::Info::Bridge::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::SONMP::MUNGE, %SNMP::Info::Airespace::MUNGE,
|
%SNMP::Info::SONMP::MUNGE,
|
||||||
|
%SNMP::Info::Airespace::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
@@ -114,7 +117,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -123,21 +126,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Nortel 2270 Series Wireless Switch through SNMP.
|
Nortel 2270 Series Wireless Switch 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 $n2270 = new SNMP::Info::Layer2::N2270(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=item SNMP::Info::Bridge
|
|
||||||
|
|
||||||
=item SNMP::Info::SONMP
|
=item SNMP::Info::SONMP
|
||||||
|
|
||||||
@@ -151,9 +147,7 @@ my $n2270 = new SNMP::Info::Layer2::N2270(...);
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::SONMP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::SONMP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
@@ -200,13 +194,9 @@ start at 0. Returns 0.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::SONMP
|
=head2 Global Methods imported from SNMP::Info::SONMP
|
||||||
|
|
||||||
@@ -229,13 +219,9 @@ to a hash.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::SONMP
|
=head2 Table Methods imported from SNMP::Info::SONMP
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::NAP222x
|
# SNMP::Info::Layer2::NAP222x
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,6 +30,7 @@
|
|||||||
package SNMP::Info::Layer2::NAP222x;
|
package SNMP::Info::Layer2::NAP222x;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::SONMP;
|
use SNMP::Info::SONMP;
|
||||||
use SNMP::Info::IEEE802dot11;
|
use SNMP::Info::IEEE802dot11;
|
||||||
@@ -40,9 +40,9 @@ use SNMP::Info::Layer2;
|
|||||||
= qw/SNMP::Info::SONMP SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
= qw/SNMP::Info::SONMP SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::NAP222x::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::NAP222x::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
||||||
@@ -375,14 +375,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $nap222x = new SNMP::Info(
|
my $nap222x = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $nap222x->class();
|
my $class = $nap222x->class();
|
||||||
@@ -391,12 +391,7 @@ Eric Miller
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a Nortel
|
Provides abstraction to the configuration information obtainable from a Nortel
|
||||||
2220 series wireless Access Points through SNMP.
|
2220 series wireless Access Points 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 $nap222x = new SNMP::Info::Layer2::NAP222x(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -526,7 +521,7 @@ to a hash.
|
|||||||
|
|
||||||
=item $nap222x->interfaces()
|
=item $nap222x->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to physical ports.
|
Returns reference to map of IIDs to physical ports.
|
||||||
|
|
||||||
=item $nap222x->i_duplex()
|
=item $nap222x->i_duplex()
|
||||||
|
|
||||||
@@ -548,7 +543,7 @@ Returns a human name based upon port description.
|
|||||||
|
|
||||||
Returns a mapping between C<ifIndex> and the Bridge Table. This does not
|
Returns a mapping between C<ifIndex> and the Bridge Table. This does not
|
||||||
exist in the MIB and bridge port index is not the same as C<ifIndex> so it is
|
exist in the MIB and bridge port index is not the same as C<ifIndex> so it is
|
||||||
created.
|
created.
|
||||||
|
|
||||||
=item $nap222x->i_ssidlist()
|
=item $nap222x->i_ssidlist()
|
||||||
|
|
||||||
|
|||||||
@@ -29,39 +29,37 @@
|
|||||||
package SNMP::Info::Layer2::NWSS2300;
|
package SNMP::Info::Layer2::NWSS2300;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Bridge;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer2::NWSS2300::ISA
|
@SNMP::Info::Layer2::NWSS2300::ISA
|
||||||
= qw/SNMP::Info SNMP::Info::Bridge Exporter/;
|
= qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::NWSS2300::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::NWSS2300::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::Bridge::MIBS,
|
|
||||||
'NTWS-REGISTRATION-DEVICES-MIB' => 'ntwsSwitch2380',
|
'NTWS-REGISTRATION-DEVICES-MIB' => 'ntwsSwitch2380',
|
||||||
'NTWS-AP-STATUS-MIB' => 'ntwsApStatNumAps',
|
'NTWS-AP-STATUS-MIB' => 'ntwsApStatNumAps',
|
||||||
'NTWS-CLIENT-SESSION-MIB' => 'ntwsClSessTotalSessions',
|
'NTWS-CLIENT-SESSION-MIB' => 'ntwsClSessTotalSessions',
|
||||||
'NTWS-SYSTEM-MIB' => 'ntwsSysCpuAverageLoad',
|
'NTWS-SYSTEM-MIB' => 'ntwsSysCpuAverageLoad',
|
||||||
'NTWS-BASIC-MIB' => 'ntwsVersionString',
|
'NTWS-BASIC-MIB' => 'ntwsVersionString',
|
||||||
|
'NTWS-AP-CONFIG-MIB' => 'ntwsApConfServProfBeaconEnabled',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::Bridge::GLOBALS,
|
|
||||||
'os_ver' => 'ntwsVersionString',
|
'os_ver' => 'ntwsVersionString',
|
||||||
'serial' => 'ntwsSerialNumber',
|
'serial' => 'ntwsSerialNumber',
|
||||||
'mac' => 'dot1dBaseBridgeAddress',
|
'mac' => 'dot1dBaseBridgeAddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::Bridge::FUNCS,
|
|
||||||
|
|
||||||
# NTWS-AP-STATUS-MIB::ntwsApStatApStatusTable
|
# NTWS-AP-STATUS-MIB::ntwsApStatApStatusTable
|
||||||
'nwss2300_ap_mac' => 'ntwsApStatApStatusBaseMac',
|
'nwss2300_ap_mac' => 'ntwsApStatApStatusBaseMac',
|
||||||
@@ -124,8 +122,7 @@ $VERSION = '3.52';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::Bridge::MUNGE,
|
|
||||||
'nwss2300_apif_mac' => \&SNMP::Info::munge_mac,
|
'nwss2300_apif_mac' => \&SNMP::Info::munge_mac,
|
||||||
'nwss2300_apif_bssid' => \&SNMP::Info::munge_mac,
|
'nwss2300_apif_bssid' => \&SNMP::Info::munge_mac,
|
||||||
);
|
);
|
||||||
@@ -158,7 +155,7 @@ sub model {
|
|||||||
return $id unless defined $model;
|
return $id unless defined $model;
|
||||||
|
|
||||||
$model =~ s/^ntwsSwitch//i;
|
$model =~ s/^ntwsSwitch//i;
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _ap_serial {
|
sub _ap_serial {
|
||||||
@@ -388,7 +385,7 @@ sub bp_index {
|
|||||||
sub fw_mac {
|
sub fw_mac {
|
||||||
my $nwss2300 = shift;
|
my $nwss2300 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $serials = $nwss2300->nwss2300_sta_serial($partial) || {};
|
my $serials = $nwss2300->nwss2300_sta_serial($partial) || {};
|
||||||
|
|
||||||
my %fw_mac;
|
my %fw_mac;
|
||||||
@@ -400,7 +397,7 @@ sub fw_mac {
|
|||||||
|
|
||||||
$fw_mac{$iid} = $mac;
|
$fw_mac{$iid} = $mac;
|
||||||
}
|
}
|
||||||
return \%fw_mac;
|
return \%fw_mac;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
@@ -493,7 +490,7 @@ sub dot11_cur_tx_pwr_mw {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $cur = $nwss2300->nwss2300_apif_power($partial);
|
my $cur = $nwss2300->nwss2300_apif_power($partial);
|
||||||
|
|
||||||
my $dot11_cur_tx_pwr_mw = {};
|
my $dot11_cur_tx_pwr_mw = {};
|
||||||
foreach my $idx ( keys %$cur ) {
|
foreach my $idx ( keys %$cur ) {
|
||||||
my $pwr_dbm = $cur->{$idx};
|
my $pwr_dbm = $cur->{$idx};
|
||||||
@@ -501,7 +498,7 @@ sub dot11_cur_tx_pwr_mw {
|
|||||||
#Convert to milliWatts = 10(dBm/10)
|
#Convert to milliWatts = 10(dBm/10)
|
||||||
my $pwr = int (10 ** ($pwr_dbm / 10));
|
my $pwr = int (10 ** ($pwr_dbm / 10));
|
||||||
|
|
||||||
$dot11_cur_tx_pwr_mw->{$idx} = $pwr;
|
$dot11_cur_tx_pwr_mw->{$idx} = $pwr;
|
||||||
}
|
}
|
||||||
return $dot11_cur_tx_pwr_mw;
|
return $dot11_cur_tx_pwr_mw;
|
||||||
}
|
}
|
||||||
@@ -513,7 +510,7 @@ sub e_index {
|
|||||||
|
|
||||||
# Try new first, fall back to depreciated
|
# Try new first, fall back to depreciated
|
||||||
my $ap_num = $nwss2300->nwss2300_ap_num() || $nwss2300->nwss2300_ap_dapnum() || {};
|
my $ap_num = $nwss2300->nwss2300_ap_num() || $nwss2300->nwss2300_ap_dapnum() || {};
|
||||||
|
|
||||||
my %e_index;
|
my %e_index;
|
||||||
|
|
||||||
# Chassis
|
# Chassis
|
||||||
@@ -796,7 +793,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -805,25 +802,18 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from
|
Provides abstraction to the configuration information obtainable from
|
||||||
Avaya (Trapeze) Wireless Controllers through SNMP.
|
Avaya (Trapeze) Wireless Controllers through SNMP.
|
||||||
|
|
||||||
This class emulates bridge functionality for the wireless switch. This enables
|
This class emulates bridge functionality for the wireless switch. This enables
|
||||||
end station MAC addresses collection and correlation to the thin access point
|
end station MAC addresses collection and correlation to the thin access point
|
||||||
the end station is using for communication.
|
the end station is using for communication.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $nwss2300 = new SNMP::Info::Layer2::NWSS2300(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=item SNMP::Info::Bridge
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -845,9 +835,7 @@ my $nwss2300 = new SNMP::Info::Layer2::NWSS2300(...);
|
|||||||
|
|
||||||
=head2 Inherited Classes' MIBs
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
@@ -894,20 +882,16 @@ proprietary MIBs.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info
|
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $nwss2300->i_ssidlist()
|
=item $nwss2300->i_ssidlist()
|
||||||
|
|
||||||
@@ -1138,15 +1122,11 @@ These emulate the F<CISCO-DOT11-MIB>
|
|||||||
|
|
||||||
(C<ntwsClSessClientSessStatsUniPktOut>)
|
(C<ntwsClSessClientSessStatsUniPktOut>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
|
|
||||||
@@ -1154,14 +1134,14 @@ See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
=item $nwss2300->i_index()
|
=item $nwss2300->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Extends C<ifIndex> to support thin APs and WLAN virtual interfaces as device
|
Extends C<ifIndex> to support thin APs and WLAN virtual interfaces as device
|
||||||
interfaces.
|
interfaces.
|
||||||
|
|
||||||
=item $nwss2300->interfaces()
|
=item $nwss2300->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to ports. Thin APs are implemented as device
|
Returns reference to map of IIDs to ports. Thin APs are implemented as device
|
||||||
interfaces. The thin AP MAC address and Slot ID nwss2300_apif_slot() are
|
interfaces. The thin AP MAC address and Slot ID nwss2300_apif_slot() are
|
||||||
used as the port identifier.
|
used as the port identifier.
|
||||||
|
|
||||||
@@ -1206,7 +1186,7 @@ the interface iid.
|
|||||||
=item $nwss2300->fw_port()
|
=item $nwss2300->fw_port()
|
||||||
|
|
||||||
Returns reference to a hash, value being mac and
|
Returns reference to a hash, value being mac and
|
||||||
nwss2300_sta_slot() combined to match the interface iid.
|
nwss2300_sta_slot() combined to match the interface iid.
|
||||||
|
|
||||||
=item $nwss2300->fw_mac()
|
=item $nwss2300->fw_mac()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Netgear
|
# SNMP::Info::Layer2::Netgear
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Bill Fenner
|
# Copyright (c) 2008 Bill Fenner
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,33 +30,33 @@
|
|||||||
package SNMP::Info::Layer2::Netgear;
|
package SNMP::Info::Layer2::Netgear;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||||
# table by the serial() function.
|
# table by the serial() function.
|
||||||
our $index = undef;
|
our $index = undef;
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer2::MIBS, %SNMP::Info::LLDP::MIBS, );
|
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
ng_fsosver => '.1.3.6.1.4.1.4526.11.11.1.0',
|
ng_fsosver => '.1.3.6.1.4.1.4526.11.11.1.0',
|
||||||
ng_gsmserial => '.1.3.6.1.4.1.4526.10.1.1.1.4.0',
|
ng_gsmserial => '.1.3.6.1.4.1.4526.10.1.1.1.4.0',
|
||||||
ng_gsmosver => '.1.3.6.1.4.1.4526.10.1.1.1.13.0',
|
ng_gsmosver => '.1.3.6.1.4.1.4526.10.1.1.1.13.0',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::LLDP::FUNCS, );
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'netgear';
|
return 'netgear';
|
||||||
@@ -74,7 +73,7 @@ sub os {
|
|||||||
sub serial {
|
sub serial {
|
||||||
my $netgear = shift;
|
my $netgear = shift;
|
||||||
my $serial = undef;
|
my $serial = undef;
|
||||||
|
|
||||||
my $e_serial = $netgear->e_serial();
|
my $e_serial = $netgear->e_serial();
|
||||||
if (defined($e_serial)) { # This unit sports the Entity-MIB
|
if (defined($e_serial)) { # This unit sports the Entity-MIB
|
||||||
# Find entity table entry for this unit
|
# Find entity table entry for this unit
|
||||||
@@ -87,9 +86,9 @@ sub serial {
|
|||||||
return $e_serial->{$index} if defined $index;
|
return $e_serial->{$index} if defined $index;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Without Enitity-MIB, we've got to work our way through a bunch of
|
# Without Entity-MIB, we've got to work our way through a bunch of
|
||||||
# different locales...
|
# different locales...
|
||||||
return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;;
|
return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;;
|
||||||
return 'none';
|
return 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,8 +107,8 @@ sub model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# ifDescr is the same for all interfaces in a class, but the ifName is
|
# ifDescr is the same for all interfaces in a class, but the ifName is
|
||||||
# unique, so let's use that for port name. If all else fails,
|
# unique, so let's use that for port name. If all else fails,
|
||||||
# concatentate ifDesc and ifIndex.
|
# concatenate ifDesc and ifIndex.
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
my $netgear = shift;
|
my $netgear = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -139,7 +138,7 @@ sub interfaces {
|
|||||||
return $interfaces;
|
return $interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
# these seem to work for GSM models but not GS
|
# these seem to work for GSM/FSM models but not GS
|
||||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
|
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $netgear = shift;
|
my $netgear = shift;
|
||||||
@@ -148,7 +147,7 @@ sub os_ver {
|
|||||||
my $os_ver = $netgear->e_swver();
|
my $os_ver = $netgear->e_swver();
|
||||||
return $os_ver->{$index} if defined $os_ver;
|
return $os_ver->{$index} if defined $os_ver;
|
||||||
}
|
}
|
||||||
return $netgear->ng_gsmosver() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;
|
return $netgear->ng_gsmosver() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;
|
||||||
return $netgear->ng_fsosver() if defined $netgear->model and $netgear->model =~ m/FS\d/i;
|
return $netgear->ng_fsosver() if defined $netgear->model and $netgear->model =~ m/FS\d/i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,20 +161,20 @@ SNMP::Info::Layer2::Netgear - SNMP Interface to Netgear switches
|
|||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Bill Fenner and Zoltan Erszenyi,
|
Bill Fenner and Zoltan Erszenyi,
|
||||||
Hacked in LLDP support from Baystack.pm by
|
Hacked in LLDP support from Baystack.pm by
|
||||||
Nic Bernstein <nic@onlight.com>
|
Nic Bernstein <nic@onlight.com>
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $netgear = new SNMP::Info(
|
my $netgear = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $netgear->class();
|
my $class = $netgear->class();
|
||||||
@@ -183,8 +182,8 @@ SNMP::Info::Layer2::Netgear - SNMP Interface to Netgear switches
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
Netgear device through SNMP. See inherited classes' documentation for
|
Netgear device through SNMP. See inherited classes' documentation for
|
||||||
inherited methods.
|
inherited methods.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -192,8 +191,6 @@ inherited methods.
|
|||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
=item SNMP::Info::Entity
|
|
||||||
=item SNMP::Info::LLDP
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -206,10 +203,6 @@ inherited methods.
|
|||||||
MIBs listed in L<SNMP::Info::Layer2/"Required MIBs"> and its inherited
|
MIBs listed in L<SNMP::Info::Layer2/"Required MIBs"> and its inherited
|
||||||
classes.
|
classes.
|
||||||
|
|
||||||
See L<SNMP::Info::Entity/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -226,11 +219,11 @@ Returns 'netgear'
|
|||||||
|
|
||||||
=item $netgear->os()
|
=item $netgear->os()
|
||||||
|
|
||||||
Returns 'netgear'
|
Returns 'netgear'
|
||||||
|
|
||||||
=item $netgear->model()
|
=item $netgear->model()
|
||||||
|
|
||||||
Returns concatenation of $e_model and $e_hwver if Entity MIB present,
|
Returns concatenation of $e_model and $e_hwver if Entity MIB present,
|
||||||
otherwise returns description()
|
otherwise returns description()
|
||||||
|
|
||||||
=item $netgear->os_ver()
|
=item $netgear->os_ver()
|
||||||
@@ -248,14 +241,6 @@ serial number).
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Entity
|
|
||||||
|
|
||||||
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
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of
|
These are methods that return tables of information in the form of
|
||||||
@@ -275,12 +260,4 @@ Uses the i_name() field.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Entity
|
|
||||||
|
|
||||||
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
|
=cut
|
||||||
|
|||||||
249
lib/SNMP/Info/Layer2/Nexans.pm
Normal file
249
lib/SNMP/Info/Layer2/Nexans.pm
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
# SNMP::Info::Layer2::Nexans
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Christoph Neuhaus
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Nexans;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Nexans::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Nexans::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'NEXANS-MIB' => 'nexansANS',
|
||||||
|
'NEXANS-BM-MIB' => 'infoDescr',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'mac' => 'adminAgentPhysAddress.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
'i_duplex' => 'portLinkState', #NEXANS-BM-MIB
|
||||||
|
'i_duplex_admin' => 'portSpeedDuplexSetup', #NEXANS-BM-MIB
|
||||||
|
'nexans_i_name' => 'ifAlias',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
|
'i_duplex' => \&munge_i_duplex,
|
||||||
|
'i_duplex_admin' => \&munge_i_duplex_admin,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub munge_i_duplex {
|
||||||
|
my $duplex = shift;
|
||||||
|
return unless defined $duplex;
|
||||||
|
$duplex = 'half' if $duplex =~/Hdx/;
|
||||||
|
$duplex = 'full' if $duplex =~/Fdx/;
|
||||||
|
return $duplex;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub munge_i_duplex_admin {
|
||||||
|
my $duplex_admin = shift;
|
||||||
|
return unless defined $duplex_admin;
|
||||||
|
$duplex_admin = 'full' if $duplex_admin =~/Fdx/;
|
||||||
|
$duplex_admin = 'half' if $duplex_admin =~/Hdx/;
|
||||||
|
$duplex_admin = 'auto' if $duplex_admin =~/autoneg/;
|
||||||
|
return $duplex_admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'nexans';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $nexans = shift;
|
||||||
|
my $id = $nexans->id() || '';
|
||||||
|
my $model = &SNMP::translateObj($id);
|
||||||
|
return $id unless defined $model;
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'nexanos';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $nexans = shift;
|
||||||
|
my $ver = $nexans->infoMgmtFirmwareVersion() || '';
|
||||||
|
return $ver;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $nexans = shift;
|
||||||
|
return $nexans->infoSeriesNo();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_name {
|
||||||
|
my $nexans = shift;
|
||||||
|
my $return = $nexans->nexans_i_name();
|
||||||
|
# replace i_name where possible
|
||||||
|
foreach my $iid ( keys %$return ) {
|
||||||
|
next unless $return->{$iid} eq "";
|
||||||
|
$return->{$iid} = $iid;
|
||||||
|
}
|
||||||
|
return \%$return;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Nexans - SNMP Interface to Nexans network devices.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Christoph Neuhaus
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
|
||||||
|
my $nexans = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $nexans->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Abstraction subclass for Nexans network devices.
|
||||||
|
|
||||||
|
tested devices:
|
||||||
|
|
||||||
|
fiberSwitch100BmPlus version 3.61
|
||||||
|
gigaSwitch641DeskSfpTp version 3.68, 4.14W
|
||||||
|
gigaSwitchV3d2SfpSfp version 3.68, 4.02, 4.02B, 4.10C, 4,14W
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<NEXANS>
|
||||||
|
|
||||||
|
=item F<NEXANS-BM>
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $nexans->vendor()
|
||||||
|
|
||||||
|
Returns 'nexans'
|
||||||
|
|
||||||
|
=item $nexans->model()
|
||||||
|
|
||||||
|
Returns the chassis model.
|
||||||
|
|
||||||
|
=item $nexans->os()
|
||||||
|
|
||||||
|
Returns 'nexanos'
|
||||||
|
|
||||||
|
=item $nexans->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $nexans->serial()
|
||||||
|
|
||||||
|
Returns the chassis serial number.
|
||||||
|
|
||||||
|
(C<infoSeriesNo>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $nexans->i_name()
|
||||||
|
|
||||||
|
Returns reference to map of IIDs to human-set port name.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head1 Data Munging Callback Subroutines
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item munge_i_duplex()
|
||||||
|
|
||||||
|
Converts duplex returned by C<portLinkState> to either 'full' or 'half'.
|
||||||
|
|
||||||
|
=item munge_i_duplex_admin()
|
||||||
|
|
||||||
|
Converts duplex returned by C<portSpeedDuplexSetup> to either 'full', 'half',
|
||||||
|
or 'auto'.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::Orinoco
|
# SNMP::Info::Layer2::Orinoco
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,6 +30,7 @@
|
|||||||
package SNMP::Info::Layer2::Orinoco;
|
package SNMP::Info::Layer2::Orinoco;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::IEEE802dot11;
|
use SNMP::Info::IEEE802dot11;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
@@ -39,15 +39,13 @@ use SNMP::Info::Layer2;
|
|||||||
= qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
= qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Orinoco::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Orinoco::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::IEEE802dot11::MIBS,
|
%SNMP::Info::IEEE802dot11::MIBS,
|
||||||
|
|
||||||
#'ORiNOCO-MIB' => 'orinoco',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS
|
%GLOBALS
|
||||||
@@ -56,12 +54,6 @@ $VERSION = '3.52';
|
|||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::IEEE802dot11::FUNCS,
|
%SNMP::Info::IEEE802dot11::FUNCS,
|
||||||
|
|
||||||
# ORiNOCO-MIB:oriWirelessIfPropertiesTable
|
|
||||||
#'ori_ssid' => 'oriWirelessIfNetworkName',
|
|
||||||
#'ori_channel' => 'oriWirelessIfChannel',
|
|
||||||
#'ori_closed_sys' => 'oriWirelessIfClosedSystem',
|
|
||||||
# ORiNOCO-MIB:oriSystemInvMgmtComponentTable
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
||||||
@@ -165,22 +157,6 @@ sub interfaces {
|
|||||||
return \%interfaces;
|
return \%interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sub i_ssidbcast {
|
|
||||||
# my $orinoco = shift;
|
|
||||||
# my $partial = shift;
|
|
||||||
#
|
|
||||||
# my $bcast = $orinoco->ori_closed_sys($partial) || {};
|
|
||||||
#
|
|
||||||
# my %i_ssidbcast;
|
|
||||||
# foreach my $iid (keys %$bcast){
|
|
||||||
# my $bc = $bcast->{$iid};
|
|
||||||
# next unless defined $bc;
|
|
||||||
#
|
|
||||||
# $i_ssidbcast{$iid} = $bc;
|
|
||||||
# }
|
|
||||||
# return \%i_ssidbcast;
|
|
||||||
#}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -194,14 +170,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $orinoco = new SNMP::Info(
|
my $orinoco = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $orinoco->class();
|
my $class = $orinoco->class();
|
||||||
@@ -213,11 +189,6 @@ Provides abstraction to the configuration information obtainable from
|
|||||||
Orinoco Access Point through SNMP. Orinoco devices have been manufactured
|
Orinoco Access Point through SNMP. Orinoco devices have been manufactured
|
||||||
by Proxim, Agere, and Lucent.
|
by Proxim, Agere, and Lucent.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $orinoco = new SNMP::Info::Layer2::Orinoco(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -258,7 +229,7 @@ Returns the model extracted from C<sysDescr>.
|
|||||||
|
|
||||||
=item $orinoco->os()
|
=item $orinoco->os()
|
||||||
|
|
||||||
Returns 'Orinoco'
|
Returns 'orinoco'
|
||||||
|
|
||||||
=item $orinoco->os_ver()
|
=item $orinoco->os_ver()
|
||||||
|
|
||||||
@@ -293,7 +264,7 @@ to a hash.
|
|||||||
|
|
||||||
=item $orinoco->interfaces()
|
=item $orinoco->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to physical ports.
|
Returns reference to map of IIDs to physical ports.
|
||||||
|
|
||||||
=item $orinoco->i_ignore()
|
=item $orinoco->i_ignore()
|
||||||
|
|
||||||
|
|||||||
108
lib/SNMP/Info/Layer2/Proscend.pm
Executable file
108
lib/SNMP/Info/Layer2/Proscend.pm
Executable file
@@ -0,0 +1,108 @@
|
|||||||
|
# SNMP::Info::Layer2::Proscend - SNMP Interface to Proscend Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Proscend;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Proscend::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Proscend::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'proscend';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'proscend';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
return $obj->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Proscend - SNMP Interface to Proscend Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Proscend Devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'proscend'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'proscend'
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model()
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
178
lib/SNMP/Info/Layer2/Sixnet.pm
Normal file
178
lib/SNMP/Info/Layer2/Sixnet.pm
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
# SNMP::Info::Layer2::Sixnet
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Eric Miller
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Sixnet;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Sixnet::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Sixnet::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'os_ver' => 'firmwareRevision',
|
||||||
|
's_model' => 'sxid',
|
||||||
|
'ps1_status' => 'p1status',
|
||||||
|
'ps2_status' => 'p2status',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS,);
|
||||||
|
|
||||||
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE,);
|
||||||
|
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'sixnet';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'sixnet';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $sixnet = shift;
|
||||||
|
|
||||||
|
my $s_model = $sixnet->s_model();
|
||||||
|
return $s_model if defined $s_model;
|
||||||
|
|
||||||
|
my $id = $sixnet->id();
|
||||||
|
return unless defined $id;
|
||||||
|
|
||||||
|
my $model = SNMP::translateObj($id);
|
||||||
|
return $model ? $model : $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Sixnet - SNMP Interface to Sixnet industrial switches
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Eric Miller
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
my $sixnet = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $sixnet->class();
|
||||||
|
print " Using device sub class : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Sixnet is a subclass of SNMP::Info that provides an
|
||||||
|
interface to Sixnet industrial switches.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<SIXNET-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $sixnet->vendor()
|
||||||
|
|
||||||
|
Returns 'sixnet'
|
||||||
|
|
||||||
|
=item $sixnet->os()
|
||||||
|
|
||||||
|
Returns 'sixnet'
|
||||||
|
|
||||||
|
=item $sixnet->os_ver()
|
||||||
|
|
||||||
|
Returns the software version returned by C<firmwareRevision>
|
||||||
|
|
||||||
|
=item $sixnet->model()
|
||||||
|
|
||||||
|
Returns model type. Returns C<sxid> if it exists, otherwise cross references
|
||||||
|
$sixnet->id() with the F<SIXNET-MIB>.
|
||||||
|
|
||||||
|
=item $sixnet->ps1_status()
|
||||||
|
|
||||||
|
(C<p1status>)
|
||||||
|
|
||||||
|
=item $sixnet->ps2_status()
|
||||||
|
|
||||||
|
(C<p2status>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
124
lib/SNMP/Info/Layer2/Telindus.pm
Executable file
124
lib/SNMP/Info/Layer2/Telindus.pm
Executable file
@@ -0,0 +1,124 @@
|
|||||||
|
# SNMP::Info::Layer2::Telindus - SNMP Interface to Telindus Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Telindus;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Telindus::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Telindus::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
# 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, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'telindus';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'telind-os';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $obj = shift;
|
||||||
|
$obj->description =~ /\$Telindus\s(\d+)(\$\s(.*)|\s(.*)\$)\s(T\d+\/\d+)/;
|
||||||
|
return $5
|
||||||
|
if defined $5;
|
||||||
|
|
||||||
|
return $obj->SUPER::os_ver();
|
||||||
|
}
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
$obj->description =~ /\$Telindus\s(\d+)(\$\s(.*)|\s(.*)\$)\s(T\d+\/\d+)/;
|
||||||
|
if (defined $1 and defined $3) {
|
||||||
|
return $1 . ' ' . $3;
|
||||||
|
}
|
||||||
|
elsif (defined $1 and defined $4) {
|
||||||
|
return $1 . ' ' . $4;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $obj->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Telindus - SNMP Interface to Telindus Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Telindus Devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'zyxel'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'zynos'
|
||||||
|
|
||||||
|
=item $obj->layers()
|
||||||
|
|
||||||
|
Ensures that layer two is reported, at least.
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
@@ -29,43 +29,37 @@
|
|||||||
package SNMP::Info::Layer2::Trapeze;
|
package SNMP::Info::Layer2::Trapeze;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Bridge;
|
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Trapeze::ISA
|
@SNMP::Info::Layer2::Trapeze::ISA
|
||||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::LLDP Exporter/;
|
= qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Trapeze::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Trapeze::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::Bridge::MIBS,
|
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
'TRAPEZE-NETWORKS-REGISTRATION-DEVICES-MIB' => 'wirelessLANController',
|
'TRAPEZE-NETWORKS-REGISTRATION-DEVICES-MIB' => 'wirelessLANController',
|
||||||
'TRAPEZE-NETWORKS-AP-STATUS-MIB' => 'trpzApStatNumAps',
|
'TRAPEZE-NETWORKS-AP-STATUS-MIB' => 'trpzApStatNumAps',
|
||||||
'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB' => 'trpzClSessTotalSessions',
|
'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB' => 'trpzClSessTotalSessions',
|
||||||
'TRAPEZE-NETWORKS-SYSTEM-MIB' => 'trpzSysCpuAverageLoad',
|
'TRAPEZE-NETWORKS-SYSTEM-MIB' => 'trpzSysCpuAverageLoad',
|
||||||
'TRAPEZE-NETWORKS-BASIC-MIB' => 'trpzVersionString',
|
'TRAPEZE-NETWORKS-BASIC-MIB' => 'trpzVersionString',
|
||||||
|
'TRAPEZE-NETWORKS-AP-CONFIG-MIB' => 'trpzApConfServProfBeaconEnabled',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::Bridge::GLOBALS,
|
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
'os_ver' => 'trpzVersionString',
|
'os_ver' => 'trpzVersionString',
|
||||||
'serial' => 'trpzSerialNumber',
|
'serial' => 'trpzSerialNumber',
|
||||||
'mac' => 'dot1dBaseBridgeAddress',
|
'mac' => 'dot1dBaseBridgeAddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::Bridge::FUNCS,
|
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
# TRAPEZE-NETWORKS-AP-STATUS-MIB::trpzApStatApStatusTable
|
# TRAPEZE-NETWORKS-AP-STATUS-MIB::trpzApStatApStatusTable
|
||||||
'trapeze_ap_mac' => 'trpzApStatApStatusBaseMac',
|
'trapeze_ap_mac' => 'trpzApStatApStatusBaseMac',
|
||||||
'trapeze_ap_name' => 'trpzApStatApStatusApName',
|
'trapeze_ap_name' => 'trpzApStatApStatusApName',
|
||||||
@@ -127,9 +121,7 @@ $VERSION = '3.52';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::Bridge::MUNGE,
|
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
'trapeze_apif_mac' => \&SNMP::Info::munge_mac,
|
'trapeze_apif_mac' => \&SNMP::Info::munge_mac,
|
||||||
'trapeze_apif_bssid' => \&SNMP::Info::munge_mac,
|
'trapeze_apif_bssid' => \&SNMP::Info::munge_mac,
|
||||||
);
|
);
|
||||||
@@ -162,7 +154,7 @@ sub model {
|
|||||||
return $id unless defined $model;
|
return $id unless defined $model;
|
||||||
|
|
||||||
$model =~ s/^wirelessLANController//i;
|
$model =~ s/^wirelessLANController//i;
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _ap_serial {
|
sub _ap_serial {
|
||||||
@@ -392,7 +384,7 @@ sub bp_index {
|
|||||||
sub fw_mac {
|
sub fw_mac {
|
||||||
my $trapeze = shift;
|
my $trapeze = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $serials = $trapeze->trapeze_sta_serial($partial) || {};
|
my $serials = $trapeze->trapeze_sta_serial($partial) || {};
|
||||||
|
|
||||||
my %fw_mac;
|
my %fw_mac;
|
||||||
@@ -404,7 +396,7 @@ sub fw_mac {
|
|||||||
|
|
||||||
$fw_mac{$iid} = $mac;
|
$fw_mac{$iid} = $mac;
|
||||||
}
|
}
|
||||||
return \%fw_mac;
|
return \%fw_mac;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
@@ -497,7 +489,7 @@ sub dot11_cur_tx_pwr_mw {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $cur = $trapeze->trapeze_apif_power($partial);
|
my $cur = $trapeze->trapeze_apif_power($partial);
|
||||||
|
|
||||||
my $dot11_cur_tx_pwr_mw = {};
|
my $dot11_cur_tx_pwr_mw = {};
|
||||||
foreach my $idx ( keys %$cur ) {
|
foreach my $idx ( keys %$cur ) {
|
||||||
my $pwr_dbm = $cur->{$idx};
|
my $pwr_dbm = $cur->{$idx};
|
||||||
@@ -505,7 +497,7 @@ sub dot11_cur_tx_pwr_mw {
|
|||||||
#Convert to milliWatts = 10(dBm/10)
|
#Convert to milliWatts = 10(dBm/10)
|
||||||
my $pwr = int (10 ** ($pwr_dbm / 10));
|
my $pwr = int (10 ** ($pwr_dbm / 10));
|
||||||
|
|
||||||
$dot11_cur_tx_pwr_mw->{$idx} = $pwr;
|
$dot11_cur_tx_pwr_mw->{$idx} = $pwr;
|
||||||
}
|
}
|
||||||
return $dot11_cur_tx_pwr_mw;
|
return $dot11_cur_tx_pwr_mw;
|
||||||
}
|
}
|
||||||
@@ -517,7 +509,7 @@ sub e_index {
|
|||||||
|
|
||||||
# Try new first, fall back to depreciated
|
# Try new first, fall back to depreciated
|
||||||
my $ap_num = $trapeze->trapeze_ap_num() || $trapeze->trapeze_ap_dapnum() || {};
|
my $ap_num = $trapeze->trapeze_ap_num() || $trapeze->trapeze_ap_dapnum() || {};
|
||||||
|
|
||||||
my %e_index;
|
my %e_index;
|
||||||
|
|
||||||
# Chassis
|
# Chassis
|
||||||
@@ -800,7 +792,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -809,25 +801,18 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from
|
Provides abstraction to the configuration information obtainable from
|
||||||
Juniper (Trapeze) Wireless Controllers through SNMP.
|
Juniper (Trapeze) Wireless Controllers through SNMP.
|
||||||
|
|
||||||
This class emulates bridge functionality for the wireless switch. This enables
|
This class emulates bridge functionality for the wireless switch. This enables
|
||||||
end station MAC addresses collection and correlation to the thin access point
|
end station MAC addresses collection and correlation to the thin access point
|
||||||
the end station is using for communication.
|
the end station is using for communication.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $trapeze = new SNMP::Info::Layer2::Trapeze(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=item SNMP::Info::Bridge
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -849,9 +834,7 @@ my $trapeze = new SNMP::Info::Layer2::Trapeze(...);
|
|||||||
|
|
||||||
=head2 Inherited Classes' MIBs
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
@@ -898,20 +881,16 @@ proprietary MIBs.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info
|
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $trapeze->i_ssidlist()
|
=item $trapeze->i_ssidlist()
|
||||||
|
|
||||||
@@ -1142,15 +1121,11 @@ These emulate the F<CISCO-DOT11-MIB>
|
|||||||
|
|
||||||
(C<trpzClSessClientSessStatsUniPktOut>)
|
(C<trpzClSessClientSessStatsUniPktOut>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
|
|
||||||
@@ -1158,14 +1133,14 @@ See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
=item $trapeze->i_index()
|
=item $trapeze->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Extends C<ifIndex> to support thin APs and WLAN virtual interfaces as device
|
Extends C<ifIndex> to support thin APs and WLAN virtual interfaces as device
|
||||||
interfaces.
|
interfaces.
|
||||||
|
|
||||||
=item $trapeze->interfaces()
|
=item $trapeze->interfaces()
|
||||||
|
|
||||||
Returns reference to map of IIDs to ports. Thin APs are implemented as device
|
Returns reference to map of IIDs to ports. Thin APs are implemented as device
|
||||||
interfaces. The thin AP MAC address and Slot ID trapeze_apif_slot() are
|
interfaces. The thin AP MAC address and Slot ID trapeze_apif_slot() are
|
||||||
used as the port identifier.
|
used as the port identifier.
|
||||||
|
|
||||||
@@ -1210,7 +1185,7 @@ the interface iid.
|
|||||||
=item $trapeze->fw_port()
|
=item $trapeze->fw_port()
|
||||||
|
|
||||||
Returns reference to a hash, value being mac and
|
Returns reference to a hash, value being mac and
|
||||||
trapeze_sta_slot() combined to match the interface iid.
|
trapeze_sta_slot() combined to match the interface iid.
|
||||||
|
|
||||||
=item $trapeze->fw_mac()
|
=item $trapeze->fw_mac()
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,35 @@
|
|||||||
# SNMP::Info::Layer2::Ubiquiti
|
# SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Devices
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2019 by The Netdisco Developer Team.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::Layer2::Ubiquiti;
|
package SNMP::Info::Layer2::Ubiquiti;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::IEEE802dot11;
|
use SNMP::Info::IEEE802dot11;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
@@ -16,23 +41,23 @@ use SNMP::Info::Layer3; # only used in sub mac()
|
|||||||
= qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
= qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::Ubiquiti::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Ubiquiti::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::IEEE802dot11::MIBS,
|
%SNMP::Info::IEEE802dot11::MIBS,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS
|
%GLOBALS = (
|
||||||
= ( %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::IEEE802dot11::GLOBALS, );
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::IEEE802dot11::FUNCS,
|
%SNMP::Info::IEEE802dot11::FUNCS,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
||||||
@@ -46,14 +71,14 @@ sub os {
|
|||||||
my $prod = $names->{$iid};
|
my $prod = $names->{$iid};
|
||||||
next unless defined $prod;
|
next unless defined $prod;
|
||||||
# Product names that match AirOS products
|
# Product names that match AirOS products
|
||||||
if((lc $prod) =~ /station/ or (lc $prod) =~ /beam/ or (lc $prod) =~ /grid/){
|
if((lc $prod) =~ /station/ or (lc $prod) =~ /beam/ or (lc $prod) =~ /grid/){
|
||||||
return 'AirOS';
|
return 'AirOS';
|
||||||
# Product names that match UAP
|
# Product names that match UAP
|
||||||
}elsif((lc $prod) =~ /uap/){
|
}elsif((lc $prod) =~ /uap/){
|
||||||
return 'UniFi';
|
return 'UniFi';
|
||||||
}else{
|
}else{
|
||||||
# Continue below to find OS name
|
# Continue below to find OS name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
## EdgeMAX OS (EdgeSwitch and EdgeRouter) name is first field split by space
|
## EdgeMAX OS (EdgeSwitch and EdgeRouter) name is first field split by space
|
||||||
@@ -65,35 +90,54 @@ sub os {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $dot11 = shift;
|
my $ubnt = shift;
|
||||||
|
|
||||||
my $versions = $dot11->dot11_prod_ver();
|
my $versions = $ubnt->dot11_prod_ver();
|
||||||
|
|
||||||
foreach my $iid ( keys %$versions ) {
|
foreach my $iid ( keys %$versions ) {
|
||||||
my $ver = $versions->{$iid};
|
my $ver = $versions->{$iid};
|
||||||
next unless defined $ver;
|
next unless defined $ver;
|
||||||
|
my $os = $ubnt->os;
|
||||||
|
if($os == 'AirOS'){
|
||||||
|
## pretty up the version reporting for AirOS to include hardware (XW, XM, etc) and three major groups of firmware
|
||||||
|
my @firmware = split(/v/, $ver);
|
||||||
|
my @firmwareSplit = split(/\./, $firmware[1]);
|
||||||
|
my @prefix = split(/\./, $ver);
|
||||||
|
$ver = $prefix[0] . '-v' . join('.', @firmwareSplit[0,1,2]);
|
||||||
|
}
|
||||||
return $ver;
|
return $ver;
|
||||||
## Not sure what this function does, it seems to be extraneous being in the same code block after a return statement?
|
## Not sure what this function does, it seems to be extraneous being in the same code block after a return statement?
|
||||||
if ( $ver =~ /([\d\.]+)/ ) {
|
#if ( $ver =~ /([\d\.]+)/ ) {
|
||||||
return $1;
|
# 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];
|
my $ver = $ubnt->description() || '';
|
||||||
|
if((lc $ver) =~ /^edgeswitch/){
|
||||||
|
## EdgeSwitch OS version is second field split by comma and bootcode version is last
|
||||||
|
my @myver = split(/, /, $ver);
|
||||||
|
my @firmware = split(/\./, $myver[1]);
|
||||||
|
my @bootcode = split(/\./, $myver[-1]);
|
||||||
|
|
||||||
|
## Return only three major version groupings and include bootcode version
|
||||||
|
return join('.', @firmware[0,1,2]) . '.-b' . join('.', @bootcode[0,1,2]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
## EdgeRouter OS version is second field split by space
|
## EdgeRouter OS version is second field split by space
|
||||||
my @myver = split(/ /, $ver);
|
my @myver = split(/ /, $ver);
|
||||||
|
my @firmware = split(/\./, $myver[1]);
|
||||||
|
|
||||||
return $myver[1];
|
if($firmware[2] =~ /hotfix$/){
|
||||||
|
# edge case where EdgeOS has hotfix versions in format "EdgeOS v1.9.7+hotfix.4.5024004.171005.0403"
|
||||||
|
$firmware[2] = $firmware[2] . '.' . $firmware[3]
|
||||||
|
}
|
||||||
|
## Return only three major version groupings
|
||||||
|
return join('.', @firmware[0,1,2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'Ubiquiti Networks, Inc.';
|
return 'ubiquiti';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
@@ -106,11 +150,11 @@ sub model {
|
|||||||
next unless defined $prod;
|
next unless defined $prod;
|
||||||
return $prod;
|
return $prod;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $desc = $ubnt->description() || '';
|
my $desc = $ubnt->description() || '';
|
||||||
|
|
||||||
## Pull Model from beginning of description, separated by comma (EdgeSwitch)
|
## Pull Model from beginning of description, separated by comma (EdgeSwitch)
|
||||||
if((lc $desc) =~ /^edgeswitch/){
|
if((lc $desc) =~ /^edgeswitch/){
|
||||||
my @mydesc = split(/, /, $desc);
|
my @mydesc = split(/, /, $desc);
|
||||||
return $mydesc[0];
|
return $mydesc[0];
|
||||||
}
|
}
|
||||||
@@ -118,7 +162,7 @@ sub model {
|
|||||||
if(!((lc $desc) =~ /edgeos/)){
|
if(!((lc $desc) =~ /edgeos/)){
|
||||||
# Not sure what type of device this is to get Model
|
# Not sure what type of device this is to get Model
|
||||||
# Wireless devices report dot11_prod_name
|
# Wireless devices report dot11_prod_name
|
||||||
# EdgeSwitch includes mode directly and edgeos logic is in else statement
|
# EdgeSwitch includes model directly and edgeos logic is in else statement
|
||||||
return ;
|
return ;
|
||||||
}else{
|
}else{
|
||||||
## do some logic to determine ER model based on tech specs from ubnt:
|
## do some logic to determine ER model based on tech specs from ubnt:
|
||||||
@@ -127,15 +171,15 @@ sub model {
|
|||||||
my $ethCount = 0;
|
my $ethCount = 0;
|
||||||
my $switchCount = 0;
|
my $switchCount = 0;
|
||||||
#my $sfpCount = 0;
|
#my $sfpCount = 0;
|
||||||
#my $poeCount = 0;
|
#my $poeCount = 0;
|
||||||
my $memTotalReal = $ubnt->memTotalReal;
|
my $memTotalReal = $ubnt->memTotalReal;
|
||||||
my $cpuLoad = $ubnt->hrProcessorLoad;
|
my $cpuLoad = $ubnt->hrProcessorLoad;
|
||||||
my $cpuCount = 0;
|
my $cpuCount = 0;
|
||||||
## My perl is lacking. Not sure if there's a more efficient way to find the cpu count
|
## My perl is lacking. Not sure if there's a more efficient way to find the cpu count
|
||||||
foreach my $iid ( keys %$cpuLoad ) {
|
foreach my $iid ( keys %$cpuLoad ) {
|
||||||
$cpuCount++;
|
$cpuCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $ifDescs = $ubnt->ifDescr;
|
my $ifDescs = $ubnt->ifDescr;
|
||||||
foreach my $iid ( keys %$ifDescs ) {
|
foreach my $iid ( keys %$ifDescs ) {
|
||||||
my $ifDesc = $ifDescs->{$iid};
|
my $ifDesc = $ifDescs->{$iid};
|
||||||
@@ -148,7 +192,7 @@ sub model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
## If people have other models to further fine-tune this logic that would be great.
|
## If people have other models to further fine-tune this logic that would be great.
|
||||||
if($ethCount eq 9){
|
if($ethCount eq 9){
|
||||||
## Should be ER Infinity
|
## Should be ER Infinity
|
||||||
return "EdgeRouter Infinity"
|
return "EdgeRouter Infinity"
|
||||||
@@ -166,7 +210,7 @@ sub model {
|
|||||||
## failback string
|
## failback string
|
||||||
return "EdgeRouter eth-$ethCount switch-$switchCount mem-$memTotalReal cpuNum-$cpuCount";
|
return "EdgeRouter eth-$ethCount switch-$switchCount mem-$memTotalReal cpuNum-$cpuCount";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,14 +241,12 @@ sub mac {
|
|||||||
|
|
||||||
# syntax stolen from sub munge_mac in SNMP::Info
|
# syntax stolen from sub munge_mac in SNMP::Info
|
||||||
$mac = lc join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) );
|
$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;
|
return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]$/i;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# MAC malformed or missing
|
# MAC malformed or missing
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
@@ -264,14 +306,14 @@ Max Kosmach
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $ubnt = new SNMP::Info(
|
my $ubnt = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $ubnt->class();
|
my $class = $ubnt->class();
|
||||||
@@ -282,11 +324,6 @@ Max Kosmach
|
|||||||
Provides abstraction to the configuration information obtainable from
|
Provides abstraction to the configuration information obtainable from
|
||||||
Ubiquiti Access Point through SNMP.
|
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
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -315,11 +352,11 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $ubnt->vendor()
|
=item $ubnt->vendor()
|
||||||
|
|
||||||
Returns 'Ubiquiti Networks, Inc.'
|
Returns 'ubiquiti'
|
||||||
|
|
||||||
=item $ubnt->model()
|
=item $ubnt->model()
|
||||||
|
|
||||||
Returns the model extracted from C<dot11manufacturerProductName>, with failback to some complex logic for EdgeMax devices
|
Returns the model extracted from C<dot11manufacturerProductName>, with fallback to some complex logic for EdgeMax devices
|
||||||
|
|
||||||
=item $ubnt->serial()
|
=item $ubnt->serial()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer2::ZyXEL_DSLAM
|
# SNMP::Info::Layer2::ZyXEL_DSLAM
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker
|
# Copyright (c) 2008 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,22 +30,23 @@
|
|||||||
package SNMP::Info::Layer2::ZyXEL_DSLAM;
|
package SNMP::Info::Layer2::ZyXEL_DSLAM;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::ZyXEL_DSLAM::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::ZyXEL_DSLAM::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
@SNMP::Info::Layer2::ZyXEL_DSLAM::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::ZyXEL_DSLAM::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
'ip_adresses' => 'ipAdEntAddr',
|
'ip_addresses' => 'ipAdEntAddr',
|
||||||
'i_name' => 'ifDescr',
|
'i_name' => 'ifDescr',
|
||||||
'i_description' => 'adslLineConfProfile',
|
'i_description' => 'adslLineConfProfile',
|
||||||
);
|
);
|
||||||
@@ -58,7 +58,7 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
sub layers {
|
sub layers {
|
||||||
my $zyxel = shift;
|
my $zyxel = shift;
|
||||||
my $layers = $zyxel->layers();
|
my $layers = $zyxel->SUPER::layers();
|
||||||
return $layers if defined $layers;
|
return $layers if defined $layers;
|
||||||
|
|
||||||
# If these don't claim to have any layers, so we'll give them 1+2
|
# If these don't claim to have any layers, so we'll give them 1+2
|
||||||
@@ -77,7 +77,7 @@ sub os_ver {
|
|||||||
my $zyxel = shift;
|
my $zyxel = shift;
|
||||||
my $descr = $zyxel->description();
|
my $descr = $zyxel->description();
|
||||||
|
|
||||||
if ( $descr =~ m/version (\S+) / ) {
|
if ( defined ($descr) && $descr =~ m/version (\S+) / ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -88,11 +88,13 @@ sub model {
|
|||||||
|
|
||||||
my $desc = $zyxel->description();
|
my $desc = $zyxel->description();
|
||||||
|
|
||||||
if ( $desc =~ /8-port ADSL Module\(Annex A\)/ ) {
|
if (defined $desc) {
|
||||||
|
if ($desc =~ /8-port ADSL Module\(Annex A\)/) {
|
||||||
return "AAM1008-61";
|
return "AAM1008-61";
|
||||||
}
|
}
|
||||||
elsif ( $desc =~ /8-port ADSL Module\(Annex B\)/ ) {
|
elsif ($desc =~ /8-port ADSL Module\(Annex B\)/) {
|
||||||
return "AAM1008-63";
|
return "AAM1008-63";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -102,7 +104,9 @@ sub ip {
|
|||||||
my $ip_hash = $zyxel->ip_addresses();
|
my $ip_hash = $zyxel->ip_addresses();
|
||||||
my $found_ip;
|
my $found_ip;
|
||||||
|
|
||||||
foreach my $ip ( keys %{$ip_hash} ) {
|
# Since hashes are random add sort so we get the same address each time
|
||||||
|
# if there happens to be more than one. Will return highest numbered address
|
||||||
|
foreach my $ip ( sort keys %{$ip_hash} ) {
|
||||||
$found_ip = $ip
|
$found_ip = $ip
|
||||||
if ( defined $ip
|
if ( defined $ip
|
||||||
and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ );
|
and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ );
|
||||||
@@ -122,23 +126,23 @@ Dmitry Sergienko (C<dmitry@trifle.net>)
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $zyxel = new SNMP::Info(
|
my $zyxel = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myhub',
|
DestHost => 'myhub',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $l2->class();
|
my $class = $zyxel->class();
|
||||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Provides abstraction to the configuration information obtainable from a
|
Provides abstraction to the configuration information obtainable from a
|
||||||
ZyXEL device through SNMP. See inherited classes' documentation for
|
ZyXEL device through SNMP. See inherited classes' documentation for
|
||||||
inherited methods.
|
inherited methods.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
@@ -172,11 +176,11 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $zyxel->vendor()
|
=item $zyxel->vendor()
|
||||||
|
|
||||||
Returns 'ZyXEL' :)
|
Returns 'zyxel'
|
||||||
|
|
||||||
=item $zyxel->os()
|
=item $zyxel->os()
|
||||||
|
|
||||||
Returns 'ZyXEL'
|
Returns 'zyxel'
|
||||||
|
|
||||||
=item $zyxel->os_ver()
|
=item $zyxel->os_ver()
|
||||||
|
|
||||||
|
|||||||
126
lib/SNMP/Info/Layer2/Zyxel.pm
Executable file
126
lib/SNMP/Info/Layer2/Zyxel.pm
Executable file
@@ -0,0 +1,126 @@
|
|||||||
|
# SNMP::Info::Layer2::Zyxel - SNMP Interface to Zyxel Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Zyxel;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Zyxel::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Zyxel::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
# 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, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'serial_oid' => 'transmission.94.1.1.2.1.1.1',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'zyxel';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'zynos';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $obj = shift;
|
||||||
|
return 'unknown';
|
||||||
|
}
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
my $id = $obj->id;
|
||||||
|
if ($id =~ /890\.1\.5\.11\.11$/) {
|
||||||
|
return 'IES-1000 AAM1212-51';
|
||||||
|
}
|
||||||
|
return 'unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $obj = shift;
|
||||||
|
return $obj->serial_oid;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Zyxel - SNMP Interface to Zyxel Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Zyxel Devices running IOS-like software
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'zyxel'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'zynos'
|
||||||
|
|
||||||
|
=item $obj->layers()
|
||||||
|
|
||||||
|
Ensures that layer two is reported, at least.
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3 - SNMP Interface to Layer3 devices
|
# SNMP::Info::Layer3 - SNMP Interface to Layer3 devices
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker -- All changes from Version 0.7 on
|
# Copyright (c) 2008 Max Baker -- All changes from Version 0.7 on
|
||||||
#
|
#
|
||||||
@@ -33,6 +32,7 @@
|
|||||||
package SNMP::Info::Layer3;
|
package SNMP::Info::Layer3;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
use SNMP::Info::Bridge;
|
use SNMP::Info::Bridge;
|
||||||
@@ -42,23 +42,25 @@ use SNMP::Info::PowerEthernet;
|
|||||||
use SNMP::Info::IPv6;
|
use SNMP::Info::IPv6;
|
||||||
use SNMP::Info::AdslLine;
|
use SNMP::Info::AdslLine;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::DocsisHE;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::ISA = qw/
|
@SNMP::Info::Layer3::ISA = qw/
|
||||||
SNMP::Info::PowerEthernet SNMP::Info::IPv6
|
SNMP::Info::PowerEthernet SNMP::Info::IPv6
|
||||||
SNMP::Info::Entity SNMP::Info::EtherLike
|
SNMP::Info::Entity SNMP::Info::EtherLike
|
||||||
SNMP::Info::Bridge SNMP::Info::AdslLine
|
SNMP::Info::Bridge SNMP::Info::AdslLine
|
||||||
SNMP::Info::LLDP
|
SNMP::Info::LLDP SNMP::Info::DocsisHE
|
||||||
SNMP::Info Exporter/;
|
SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Layer3::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
%SNMP::Info::AdslLine::MIBS,
|
%SNMP::Info::AdslLine::MIBS,
|
||||||
%SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::Bridge::MIBS,
|
||||||
|
%SNMP::Info::DocsisHE::MIBS,
|
||||||
%SNMP::Info::EtherLike::MIBS,
|
%SNMP::Info::EtherLike::MIBS,
|
||||||
%SNMP::Info::Entity::MIBS,
|
%SNMP::Info::Entity::MIBS,
|
||||||
%SNMP::Info::PowerEthernet::MIBS,
|
%SNMP::Info::PowerEthernet::MIBS,
|
||||||
@@ -66,6 +68,7 @@ $VERSION = '3.52';
|
|||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
'IP-MIB' => 'ipNetToMediaIfIndex',
|
'IP-MIB' => 'ipNetToMediaIfIndex',
|
||||||
'OSPF-MIB' => 'ospfRouterId',
|
'OSPF-MIB' => 'ospfRouterId',
|
||||||
|
'ISIS-MIB' => 'isisSysID',
|
||||||
'BGP4-MIB' => 'bgpIdentifier',
|
'BGP4-MIB' => 'bgpIdentifier',
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -75,6 +78,7 @@ $VERSION = '3.52';
|
|||||||
%SNMP::Info::GLOBALS,
|
%SNMP::Info::GLOBALS,
|
||||||
%SNMP::Info::AdslLine::GLOBALS,
|
%SNMP::Info::AdslLine::GLOBALS,
|
||||||
%SNMP::Info::Bridge::GLOBALS,
|
%SNMP::Info::Bridge::GLOBALS,
|
||||||
|
%SNMP::Info::DocsisHE::GLOBALS,
|
||||||
%SNMP::Info::EtherLike::GLOBALS,
|
%SNMP::Info::EtherLike::GLOBALS,
|
||||||
%SNMP::Info::Entity::GLOBALS,
|
%SNMP::Info::Entity::GLOBALS,
|
||||||
%SNMP::Info::PowerEthernet::GLOBALS,
|
%SNMP::Info::PowerEthernet::GLOBALS,
|
||||||
@@ -92,6 +96,7 @@ $VERSION = '3.52';
|
|||||||
%SNMP::Info::FUNCS,
|
%SNMP::Info::FUNCS,
|
||||||
%SNMP::Info::AdslLine::FUNCS,
|
%SNMP::Info::AdslLine::FUNCS,
|
||||||
%SNMP::Info::Bridge::FUNCS,
|
%SNMP::Info::Bridge::FUNCS,
|
||||||
|
%SNMP::Info::DocsisHE::FUNCS,
|
||||||
%SNMP::Info::EtherLike::FUNCS,
|
%SNMP::Info::EtherLike::FUNCS,
|
||||||
%SNMP::Info::Entity::FUNCS,
|
%SNMP::Info::Entity::FUNCS,
|
||||||
%SNMP::Info::PowerEthernet::FUNCS,
|
%SNMP::Info::PowerEthernet::FUNCS,
|
||||||
@@ -123,6 +128,20 @@ $VERSION = '3.52';
|
|||||||
'ospf_peer_id' => 'ospfNbrRtrId',
|
'ospf_peer_id' => 'ospfNbrRtrId',
|
||||||
'ospf_peer_state' => 'ospfNbrState',
|
'ospf_peer_state' => 'ospfNbrState',
|
||||||
|
|
||||||
|
# ISIS-MIB::isisCircTable
|
||||||
|
'isis_circ_if_idx' => 'isisCircIfIndex' ,
|
||||||
|
'isis_circ_admin' => 'isisCircAdminState',
|
||||||
|
'isis_circ_type' => 'isisCircType',
|
||||||
|
'isis_circ_level_type' => 'isisCircLevelType',
|
||||||
|
|
||||||
|
# ISIS-MIB::isisISAdjTable
|
||||||
|
'isis_adj_state' => 'isisISAdjState',
|
||||||
|
'isis_adj_type' => 'isisISAdjNeighSysType',
|
||||||
|
'isis_adj_usage' => 'isisISAdjUsage',
|
||||||
|
'isis_adj_id' => 'isisISAdjNeighSysID',
|
||||||
|
'isis_adj_ip_type' => 'isisISAdjIPAddrType',
|
||||||
|
'isis_adj' => 'isisISAdjIPAddrAddress',
|
||||||
|
|
||||||
# BGP4-MIB::bgpPeerTable
|
# BGP4-MIB::bgpPeerTable
|
||||||
'bgp_peers' => 'bgpPeerLocalAddr',
|
'bgp_peers' => 'bgpPeerLocalAddr',
|
||||||
'bgp_peer_id' => 'bgpPeerIdentifier',
|
'bgp_peer_id' => 'bgpPeerIdentifier',
|
||||||
@@ -152,6 +171,7 @@ $VERSION = '3.52';
|
|||||||
%SNMP::Info::AdslLine::MUNGE,
|
%SNMP::Info::AdslLine::MUNGE,
|
||||||
%SNMP::Info::Bridge::MUNGE,
|
%SNMP::Info::Bridge::MUNGE,
|
||||||
%SNMP::Info::EtherLike::MUNGE,
|
%SNMP::Info::EtherLike::MUNGE,
|
||||||
|
%SNMP::Info::DocsisHE::MUNGE,
|
||||||
%SNMP::Info::Entity::MUNGE,
|
%SNMP::Info::Entity::MUNGE,
|
||||||
%SNMP::Info::PowerEthernet::MUNGE,
|
%SNMP::Info::PowerEthernet::MUNGE,
|
||||||
%SNMP::Info::IPv6::MUNGE,
|
%SNMP::Info::IPv6::MUNGE,
|
||||||
@@ -161,6 +181,32 @@ $VERSION = '3.52';
|
|||||||
'n2p_paddr' => \&SNMP::Info::munge_mac,
|
'n2p_paddr' => \&SNMP::Info::munge_mac,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sub isis_peers {
|
||||||
|
my $l3 = shift;
|
||||||
|
|
||||||
|
my $isis_peers = {};
|
||||||
|
|
||||||
|
# Returns hexstrings. Need to convert to IPv4 dotted or IPv6 hex notation
|
||||||
|
my $adjacencies = $l3->isis_adj();
|
||||||
|
foreach my $key (keys %$adjacencies) {
|
||||||
|
my $hexstr = $adjacencies->{$key};
|
||||||
|
my $l = length $hexstr;
|
||||||
|
my $ip;
|
||||||
|
# 4 bytes = IPv4
|
||||||
|
if ($l == 4) {
|
||||||
|
$ip = join(".", unpack("C*", $hexstr));
|
||||||
|
$isis_peers->{$key} = $ip;
|
||||||
|
}
|
||||||
|
# 16 bytes = IPv6
|
||||||
|
elsif ($l == 16) {
|
||||||
|
$ip = unpack("H*", $hexstr);
|
||||||
|
$ip =~ s/....(?=.)\K/:/sg ;
|
||||||
|
$isis_peers->{$key} = $ip;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $isis_peers;
|
||||||
|
}
|
||||||
|
|
||||||
# Method OverRides
|
# Method OverRides
|
||||||
|
|
||||||
sub root_ip {
|
sub root_ip {
|
||||||
@@ -194,32 +240,18 @@ sub root_ip {
|
|||||||
sub serial {
|
sub serial {
|
||||||
my $l3 = shift;
|
my $l3 = shift;
|
||||||
|
|
||||||
my $serial1 = $l3->serial1();
|
my $entity_serial = $l3->entity_derived_serial();
|
||||||
my $e_parent = $l3->e_parent() || {};
|
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||||
my $e_class = $l3->e_class() || {};
|
return $entity_serial;
|
||||||
|
|
||||||
foreach my $iid ( keys %$e_parent ) {
|
|
||||||
my $parent = $e_parent->{$iid};
|
|
||||||
my $class = $e_class->{$iid} || '';
|
|
||||||
# Only consider serial numbers for entries without a parent, or if they are of type "chassis"
|
|
||||||
if ( $parent eq '0' or $class eq 'chassis') {
|
|
||||||
my $serial = $l3->e_serial($iid);
|
|
||||||
if ( $serial && $serial->{$iid} ) {
|
|
||||||
return $serial->{$iid};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
my $descr = $l3->e_descr($iid);
|
|
||||||
if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i )
|
|
||||||
{
|
|
||||||
return $1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
my $serial1 = $l3->serial1();
|
||||||
|
if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
|
||||||
|
return $serial1;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# $l3->model() - the sysObjectID returns an IID to an entry in
|
# $l3->model() - the sysObjectID returns an IID to an entry in
|
||||||
@@ -298,15 +330,25 @@ sub interfaces {
|
|||||||
|
|
||||||
# Check for duplicates in ifDescr, if so uniquely identify by adding
|
# Check for duplicates in ifDescr, if so uniquely identify by adding
|
||||||
# ifIndex to repeated values
|
# ifIndex to repeated values
|
||||||
my %seen;
|
my (%seen, %first_seen_as);
|
||||||
foreach my $iid ( keys %$i_descr ) {
|
foreach my $iid ( sort keys %$i_descr ) {
|
||||||
my $port = $i_descr->{$iid};
|
my $port = $i_descr->{$iid};
|
||||||
next unless defined $port;
|
next unless defined $port;
|
||||||
|
|
||||||
|
$port = SNMP::Info::munge_null($port);
|
||||||
|
$port =~ s/^\s+//; $port =~ s/\s+$//;
|
||||||
|
next unless length $port;
|
||||||
|
|
||||||
if ( $seen{$port}++ ) {
|
if ( $seen{$port}++ ) {
|
||||||
|
# (#320) also fixup the port this is a duplicate of
|
||||||
|
$interfaces->{ $first_seen_as{$port} }
|
||||||
|
= sprintf( "%s (%d)", $port, $first_seen_as{$port} );
|
||||||
|
|
||||||
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
|
$interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$interfaces->{$iid} = $port;
|
$interfaces->{$iid} = $port;
|
||||||
|
$first_seen_as{$port} = $iid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $interfaces;
|
return $interfaces;
|
||||||
@@ -365,14 +407,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $l3 = new SNMP::Info(
|
my $l3 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $l3->class();
|
my $class = $l3->class();
|
||||||
@@ -395,11 +437,11 @@ This class is usually used as a superclass for more specific device classes
|
|||||||
listed under SNMP::Info::Layer3::* Please read all docs under SNMP::Info
|
listed under SNMP::Info::Layer3::* Please read all docs under SNMP::Info
|
||||||
first.
|
first.
|
||||||
|
|
||||||
Provides generic methods for accessing SNMP data for Layer 3 network devices.
|
Provides generic methods for accessing SNMP data for Layer 3 network devices.
|
||||||
Includes support for Layer2+3 devices.
|
Includes support for Layer2+3 devices.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $l3 = new SNMP::Info::Layer3(...);
|
my $l3 = new SNMP::Info::Layer3(...);
|
||||||
|
|
||||||
@@ -421,6 +463,10 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::LLDP
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
|
=item SNMP::Info::DocsisHE
|
||||||
|
|
||||||
|
=item SNMP::Info::AdslLine
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -429,6 +475,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item F<IP-MIB>
|
=item F<IP-MIB>
|
||||||
|
|
||||||
|
=item F<ISIS-MIB>
|
||||||
|
|
||||||
=item F<OSPF-MIB>
|
=item F<OSPF-MIB>
|
||||||
|
|
||||||
=item F<BGP4-MIB>
|
=item F<BGP4-MIB>
|
||||||
@@ -437,7 +485,7 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=head2 Inherited MIBs
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info/"REQUIREMENTS"> for its MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::Bridge/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
@@ -451,6 +499,10 @@ See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
|
|||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::DocsisHE/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::AdslLine/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar value from SNMP
|
These are methods that return scalar value from SNMP
|
||||||
@@ -475,7 +527,7 @@ Returns the BGP identifier of the local system
|
|||||||
|
|
||||||
=item $l3->bgp_local_as()
|
=item $l3->bgp_local_as()
|
||||||
|
|
||||||
Returns the local autonomous system number
|
Returns the local autonomous system number
|
||||||
|
|
||||||
(C<bgpLocalAs.0>)
|
(C<bgpLocalAs.0>)
|
||||||
|
|
||||||
@@ -493,8 +545,7 @@ Removes 'cisco' from cisco devices for readability.
|
|||||||
|
|
||||||
=item $l3->serial()
|
=item $l3->serial()
|
||||||
|
|
||||||
Tries to cull a serial number from F<ENTITY-MIB>, description, and
|
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
|
||||||
F<OLD-CISCO->... MIB.
|
|
||||||
|
|
||||||
=item $l3->vendor()
|
=item $l3->vendor()
|
||||||
|
|
||||||
@@ -510,7 +561,7 @@ found: OSPF Router ID (C<ospfRouterId>) or any OSPF Host IP Address
|
|||||||
|
|
||||||
=head2 Globals imported from SNMP::Info
|
=head2 Globals imported from SNMP::Info
|
||||||
|
|
||||||
See L<SNMP::Info/"GLOBALS"> for details.
|
See L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::Bridge
|
=head2 Global Methods imported from SNMP::Info::Bridge
|
||||||
|
|
||||||
@@ -536,6 +587,14 @@ See L<SNMP::Info::IPv6/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
See L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::DocsisHE
|
||||||
|
|
||||||
|
See L<SNMP::Info::DocsisHE/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::AdslLine
|
||||||
|
|
||||||
|
See L<SNMP::Info::AdslLine/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
@@ -548,13 +607,13 @@ to a hash.
|
|||||||
=item $l3->interfaces()
|
=item $l3->interfaces()
|
||||||
|
|
||||||
Returns the map between SNMP Interface Identifier (iid) and physical port
|
Returns the map between SNMP Interface Identifier (iid) and physical port
|
||||||
name.
|
name.
|
||||||
|
|
||||||
Only returns those iids that have a description listed in $l3->i_description()
|
Only returns those iids that have a description listed in $l3->i_description()
|
||||||
|
|
||||||
=item $l3->i_name()
|
=item $l3->i_name()
|
||||||
|
|
||||||
Returns reference to hash of iid to human set name.
|
Returns reference to hash of iid to human set name.
|
||||||
|
|
||||||
Defaults to C<ifName>, but checks for an C<ifAlias>
|
Defaults to C<ifName>, but checks for an C<ifAlias>
|
||||||
|
|
||||||
@@ -562,10 +621,10 @@ Defaults to C<ifName>, but checks for an C<ifAlias>
|
|||||||
|
|
||||||
Returns reference to hash of iid to current link duplex setting.
|
Returns reference to hash of iid to current link duplex setting.
|
||||||
|
|
||||||
Maps $l3->el_index() to $l3->el_duplex, then culls out
|
Maps $l3->el_index() to $l3->el_duplex, then culls out
|
||||||
full,half, or auto and sets the map to that value.
|
full,half, or auto and sets the map to that value.
|
||||||
|
|
||||||
See L<SNMP::Info::Etherlike> for the el_index() and el_duplex() methods.
|
See L<SNMP::Info::EtherLike> for the el_index() and el_duplex() methods.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -575,7 +634,7 @@ See L<SNMP::Info::Etherlike> for the el_index() and el_duplex() methods.
|
|||||||
|
|
||||||
=item $l3->at_index()
|
=item $l3->at_index()
|
||||||
|
|
||||||
Returns reference to hash. Maps ARP table entries to Interface IIDs
|
Returns reference to hash. Maps ARP table entries to Interface IIDs
|
||||||
|
|
||||||
(C<ipNetToMediaIfIndex>)
|
(C<ipNetToMediaIfIndex>)
|
||||||
|
|
||||||
@@ -584,7 +643,7 @@ the deprecated C<atIfIndex>.
|
|||||||
|
|
||||||
=item $l3->at_paddr()
|
=item $l3->at_paddr()
|
||||||
|
|
||||||
Returns reference to hash. Maps ARP table entries to MAC addresses.
|
Returns reference to hash. Maps ARP table entries to MAC addresses.
|
||||||
|
|
||||||
(C<ipNetToMediaPhysAddress>)
|
(C<ipNetToMediaPhysAddress>)
|
||||||
|
|
||||||
@@ -593,7 +652,7 @@ the deprecated C<atPhysAddress>.
|
|||||||
|
|
||||||
=item $l3->at_netaddr()
|
=item $l3->at_netaddr()
|
||||||
|
|
||||||
Returns reference to hash. Maps ARP table entries to IP addresses.
|
Returns reference to hash. Maps ARP table entries to IP addresses.
|
||||||
|
|
||||||
(C<ipNetToMediaNetAddress>)
|
(C<ipNetToMediaNetAddress>)
|
||||||
|
|
||||||
@@ -781,9 +840,85 @@ routers
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 IS-IS Circuit Table
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $l3->isis_circ_if_idx()
|
||||||
|
|
||||||
|
Returns reference to hash of the interface index associated with the IS-IS
|
||||||
|
circuit
|
||||||
|
(C<isisCircIfIndex>)
|
||||||
|
|
||||||
|
=item $l3->isis_circ_admin()
|
||||||
|
|
||||||
|
Returns reference to hash of the IS-IS circuit's admin status
|
||||||
|
|
||||||
|
(C<isisCircAdminState>)
|
||||||
|
|
||||||
|
=item $l3->isis_circ_type()
|
||||||
|
|
||||||
|
Returns reference to hash of the IS-IS circuit's type
|
||||||
|
|
||||||
|
(C<isisCircType>)
|
||||||
|
|
||||||
|
=item $l3->isis_circ_level_type()
|
||||||
|
|
||||||
|
Returns reference to hash of the IS-IS circuit's level
|
||||||
|
|
||||||
|
(C<isisCircLevelType>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 IS-IS Adjacency Table
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $l3->isis_adj_id()
|
||||||
|
|
||||||
|
Returns reference to hash of the peer id of adjacencies.
|
||||||
|
|
||||||
|
(C<isisISAdjNeighSysID>)
|
||||||
|
|
||||||
|
=item $l3->isis_adj_type()
|
||||||
|
|
||||||
|
Returns reference to hash of the type of adjacencies (Level 1
|
||||||
|
Intermediate System, Level 2 Intermediate System, Level 1+2
|
||||||
|
Intermediate System, unknown)
|
||||||
|
|
||||||
|
(C<isisISAdjNeighSysType>)
|
||||||
|
|
||||||
|
=item $l3->isis_adj_usage()
|
||||||
|
|
||||||
|
Returns reference to hash of the type of adjacencies in use
|
||||||
|
(undefined, Level 1, Level 2, Level1+2)
|
||||||
|
|
||||||
|
(C<isisISAdjNeighUsage>)
|
||||||
|
|
||||||
|
=item $l3->isis_adj_ip_type()
|
||||||
|
|
||||||
|
Returns reference to hash of type of address (IPv4, IPv6, etc) on adjacencies.
|
||||||
|
|
||||||
|
(C<isisISAdjIPAddrType>)
|
||||||
|
|
||||||
|
=item $l3->isis_adj()
|
||||||
|
|
||||||
|
Returns reference to hash of addresses (IPv4, IPv6, etc) on adjacencies.
|
||||||
|
Note this returns hash-strings, for IPs, use $l3->isis_peers()
|
||||||
|
|
||||||
|
(C<isisISAdjIPAddrAddress>)
|
||||||
|
|
||||||
|
=item $l3->isis_peers()
|
||||||
|
|
||||||
|
Returns reference to hash of addresses (IPv4, IPv6) on adjacencies.
|
||||||
|
Convert hash strings from isis_adj to proper
|
||||||
|
IP (v4 and v6) formatting.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info
|
||||||
|
|
||||||
See L<SNMP::Info/"TABLE METHODS"> for details.
|
See L<SNMP::Info/"USAGE"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
=head2 Table Methods imported from SNMP::Info::Bridge
|
||||||
|
|
||||||
@@ -809,4 +944,12 @@ See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::DocsisHE
|
||||||
|
|
||||||
|
See L<SNMP::Info::DocsisHE/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::AdslLine
|
||||||
|
|
||||||
|
See L<SNMP::Info::AdslLine/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
155
lib/SNMP/Info/Layer3/Accton.pm
Executable file
155
lib/SNMP/Info/Layer3/Accton.pm
Executable file
@@ -0,0 +1,155 @@
|
|||||||
|
# SNMP::Info::Layer3::Accton - SNMP Interface to Accton Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer3::Accton;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::Accton::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
|
@SNMP::Info::Layer3::Accton::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
'os_ver_oid_259_6_10_94' => 'enterprises.259.6.10.94.1.1.5.4.0',
|
||||||
|
'os_ver_oid_259_8_1_5' => 'enterprises.259.8.1.5.1.1.5.4.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'accton';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'accton-os';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
my $hw = $obj->c_hw_ver() || undef;
|
||||||
|
return $obj->SUPER::description() . ' HW:' . $hw if (defined $hw);
|
||||||
|
return $obj->SUPER::description()
|
||||||
|
#return $obj->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $obj = shift;
|
||||||
|
my $sess = $obj->session();
|
||||||
|
my $serial = $sess->get($obj->id() . '.1.1.3.1.10.1') || undef;
|
||||||
|
return $serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hwver {
|
||||||
|
my $obj = shift;
|
||||||
|
my $sess = $obj->session();
|
||||||
|
my $hw = $sess->get($obj->id() . '.1.1.3.1.2.1') || undef;
|
||||||
|
return $hw;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $obj = shift;
|
||||||
|
my $sess = $obj->session();
|
||||||
|
my $os_ver = $sess->get($obj->id() . '.1.1.5.4.0') || undef;
|
||||||
|
my $brom = $sess->get($obj->id() . '.1.1.3.1.5.1') || undef;
|
||||||
|
my $loader = $sess->get($obj->id() . '.1.1.3.1.4.1') || undef;
|
||||||
|
my $full_os_ver = $os_ver if defined($os_ver) || return;
|
||||||
|
$full_os_ver .= ' bootrom:' . $brom if defined($brom);
|
||||||
|
$full_os_ver .= ' loader:' . $loader if defined($loader);
|
||||||
|
return $full_os_ver;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub description {
|
||||||
|
my $obj = shift;
|
||||||
|
my $descr = undef;
|
||||||
|
my $sess = $obj->session();
|
||||||
|
$descr .= $obj->SUPER::description() . "\n";
|
||||||
|
$descr .= "Serial Number: " . $sess->get($obj->id() . '.1.1.3.1.10.1') . "\n";
|
||||||
|
$descr .= "Hardware Version: " . $sess->get($obj->id() . '.1.1.3.1.2.1') . "\n";
|
||||||
|
$descr .= "EPLD Version: " . $sess->get($obj->id() . '.1.1.3.1.15.1') . "\n";
|
||||||
|
$descr .= "Loader Version: " . $sess->get($obj->id() . '.1.1.3.1.4.1') . "\n";
|
||||||
|
$descr .= "Boot ROM Version: " . $sess->get($obj->id() . '.1.1.3.1.5.1') . "\n";
|
||||||
|
$descr .= "Operation Code Version: " . $sess->get($obj->id() . '.1.1.5.4.0') . "\n";
|
||||||
|
return $descr;
|
||||||
|
#$sess->get($obj->id() . '.1.1.5.4.0')
|
||||||
|
}
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Accton - SNMP Interface to Accton Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Accton Devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'accton'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'accton-os'
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model()
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::Aironet
|
# SNMP::Info::Layer3::Aironet
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
|
||||||
#
|
#
|
||||||
@@ -33,15 +32,16 @@
|
|||||||
package SNMP::Info::Layer3::Aironet;
|
package SNMP::Info::Layer3::Aironet;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Aironet::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::Aironet::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::Aironet::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Aironet::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -69,8 +69,8 @@ $VERSION = '3.52';
|
|||||||
'bp_index2' => 'dot1dBasePortIfIndex',
|
'bp_index2' => 'dot1dBasePortIfIndex',
|
||||||
|
|
||||||
# AWC Interface Table (awcIfTable)
|
# AWC Interface Table (awcIfTable)
|
||||||
'awc_default_mac' => 'awcIfDefaultPhyAddress',
|
'awc_default_mac' => 'awcIfDefaultPhysAddress',
|
||||||
'awc_mac' => 'awcIfPhyAddress',
|
'awc_mac' => 'awcIfPhysAddress',
|
||||||
'awc_ip' => 'awcIfIpAddress',
|
'awc_ip' => 'awcIfIpAddress',
|
||||||
'awc_netmask' => 'awcIfIpNetMask',
|
'awc_netmask' => 'awcIfIpNetMask',
|
||||||
'awc_msdu' => 'awcIfMSDUMaxLength',
|
'awc_msdu' => 'awcIfMSDUMaxLength',
|
||||||
@@ -224,14 +224,14 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $aironet = new SNMP::Info(
|
my $aironet = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $aironet->class();
|
my $class = $aironet->class();
|
||||||
@@ -257,7 +257,7 @@ This class is for devices running Cisco IOS software (newer)
|
|||||||
=back
|
=back
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
after determining a more specific class using the method above.
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
my $aironet = new SNMP::Info::Layer3::Aironet(...);
|
my $aironet = new SNMP::Info::Layer3::Aironet(...);
|
||||||
|
|
||||||
@@ -279,9 +279,6 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
These MIBs are now included in the v2.tar.gz archive available from
|
|
||||||
ftp.cisco.com. Make sure you have a current version.
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
These are methods that return scalar value from SNMP
|
These are methods that return scalar value from SNMP
|
||||||
@@ -296,7 +293,7 @@ C<awcEtherDuplex.0>
|
|||||||
|
|
||||||
=item $aironet->mac()
|
=item $aironet->mac()
|
||||||
|
|
||||||
Gives the MAC Address of the wireless side
|
Gives the MAC Address of the wireless side
|
||||||
|
|
||||||
C<dot11StationID.2>
|
C<dot11StationID.2>
|
||||||
|
|
||||||
@@ -364,13 +361,13 @@ Ignores ports that are of type ``rptr'' and ``lo''.
|
|||||||
|
|
||||||
Gives the default MAC address of each interface.
|
Gives the default MAC address of each interface.
|
||||||
|
|
||||||
C<awcIfDefaultPhyAddress>
|
C<awcIfDefaultPhysAddress>
|
||||||
|
|
||||||
=item $aironet->awc_mac()
|
=item $aironet->awc_mac()
|
||||||
|
|
||||||
Gives the actual MAC address of each interface.
|
Gives the actual MAC address of each interface.
|
||||||
|
|
||||||
C<awcIfPhyAddress>
|
C<awcIfPhysAddress>
|
||||||
|
|
||||||
=item $aironet->awc_ip()
|
=item $aironet->awc_ip()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::AlcatelLucent
|
# SNMP::Info::Layer3::AlcatelLucent
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Bill Fenner
|
# Copyright (c) 2008 Bill Fenner
|
||||||
#
|
#
|
||||||
@@ -30,6 +29,7 @@
|
|||||||
package SNMP::Info::Layer3::AlcatelLucent;
|
package SNMP::Info::Layer3::AlcatelLucent;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
@@ -47,9 +47,9 @@ use SNMP::Info::LLDP;
|
|||||||
SNMP::Info::MAU SNMP::Info::Layer3 Exporter/;
|
SNMP::Info::MAU SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::AlcatelLucent::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::AlcatelLucent::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -96,6 +96,8 @@ sub model {
|
|||||||
my $id = $alu->id();
|
my $id = $alu->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
|
|
||||||
|
return 'ASAM 73xx' if $id =~ /637\.61\.1$/;
|
||||||
|
|
||||||
return $id unless defined $model;
|
return $id unless defined $model;
|
||||||
|
|
||||||
$model =~ s/^device//;
|
$model =~ s/^device//;
|
||||||
@@ -112,15 +114,15 @@ sub vendor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $alu = shift;
|
my $alu = shift;
|
||||||
|
|
||||||
my $descr = $alu->description();
|
my $descr = $alu->description();
|
||||||
if ( $descr =~ m/^(\S+)/ ) {
|
if (defined ($descr)) {
|
||||||
return $1;
|
return $1 if $descr =~ m/\b(\d[\.\d]+R\d+) (?:GA|Service Release), /;
|
||||||
}
|
}
|
||||||
|
|
||||||
# No clue what this will try but hey
|
# No clue what this will try but hey
|
||||||
return $alu->SUPER::os_ver();
|
return $alu->SUPER::os_ver();
|
||||||
}
|
}
|
||||||
|
|
||||||
# ps1_type, ps1_status, ps2_type, ps2_status:
|
# ps1_type, ps1_status, ps2_type, ps2_status:
|
||||||
@@ -308,7 +310,7 @@ Bill Fenner
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $alu = new SNMP::Info(
|
my $alu = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -316,7 +318,7 @@ Bill Fenner
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $alu->class();
|
my $class = $alu->class();
|
||||||
@@ -372,7 +374,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $alu->vendor()
|
=item $alu->vendor()
|
||||||
|
|
||||||
Returns 'alcatel-lucent'
|
Returns 'alcatel-lucent'
|
||||||
|
|
||||||
=item $alu->model()
|
=item $alu->model()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::AlteonAD
|
# SNMP::Info::Layer3::AlteonAD
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All Rights Reserved
|
# All Rights Reserved
|
||||||
@@ -31,15 +30,16 @@
|
|||||||
package SNMP::Info::Layer3::AlteonAD;
|
package SNMP::Info::Layer3::AlteonAD;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::AlteonAD::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::AlteonAD::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::AlteonAD::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::AlteonAD::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -163,14 +163,14 @@ sub ps1_status {
|
|||||||
my $alteon = shift;
|
my $alteon = shift;
|
||||||
my $old_ps = $alteon->old_ps1_stat();
|
my $old_ps = $alteon->old_ps1_stat();
|
||||||
my $new_ps = $alteon->new_ps_stat();
|
my $new_ps = $alteon->new_ps_stat();
|
||||||
|
|
||||||
return $old_ps if $old_ps;
|
return $old_ps if $old_ps;
|
||||||
|
|
||||||
if ($new_ps) {
|
if ($new_ps) {
|
||||||
return 'ok' if ($new_ps eq 'singlePowerSupplyOk');
|
return 'ok' if ($new_ps eq 'singlePowerSupplyOk');
|
||||||
return 'failed' if ($new_ps eq 'firstPowerSupplyFailed');
|
return 'failed' if ($new_ps eq 'firstPowerSupplyFailed');
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,9 +178,9 @@ sub ps2_status {
|
|||||||
my $alteon = shift;
|
my $alteon = shift;
|
||||||
my $old_ps = $alteon->old_ps2_stat();
|
my $old_ps = $alteon->old_ps2_stat();
|
||||||
my $new_ps = $alteon->new_ps_stat();
|
my $new_ps = $alteon->new_ps_stat();
|
||||||
|
|
||||||
return $old_ps if $old_ps;
|
return $old_ps if $old_ps;
|
||||||
|
|
||||||
if ($new_ps) {
|
if ($new_ps) {
|
||||||
return 'ok' if ($new_ps eq 'doublePowerSupplyOk');
|
return 'ok' if ($new_ps eq 'doublePowerSupplyOk');
|
||||||
return 'failed' if ($new_ps eq 'secondPowerSupplyFailed');
|
return 'failed' if ($new_ps eq 'secondPowerSupplyFailed');
|
||||||
@@ -242,19 +242,19 @@ sub i_duplex {
|
|||||||
sub i_duplex_admin {
|
sub i_duplex_admin {
|
||||||
my $alteon = shift;
|
my $alteon = shift;
|
||||||
|
|
||||||
my $ag_pref
|
my $ag_pref
|
||||||
= $alteon->new_ag_p_cfg_pref()
|
= $alteon->new_ag_p_cfg_pref()
|
||||||
|| $alteon->old_ag_p_cfg_pref()
|
|| $alteon->old_ag_p_cfg_pref()
|
||||||
|| {};
|
|| {};
|
||||||
my $ag_fe_auto
|
my $ag_fe_auto
|
||||||
= $alteon->new_ag_p_cfg_fe_auto()
|
= $alteon->new_ag_p_cfg_fe_auto()
|
||||||
|| $alteon->old_ag_p_cfg_fe_auto()
|
|| $alteon->old_ag_p_cfg_fe_auto()
|
||||||
|| {};
|
|| {};
|
||||||
my $ag_fe_mode
|
my $ag_fe_mode
|
||||||
= $alteon->new_ag_p_cfg_fe_mode()
|
= $alteon->new_ag_p_cfg_fe_mode()
|
||||||
|| $alteon->old_ag_p_cfg_fe_mode()
|
|| $alteon->old_ag_p_cfg_fe_mode()
|
||||||
|| {};
|
|| {};
|
||||||
my $ag_ge_auto
|
my $ag_ge_auto
|
||||||
= $alteon->new_ag_p_cfg_ge_auto()
|
= $alteon->new_ag_p_cfg_ge_auto()
|
||||||
|| $alteon->old_ag_p_cfg_ge_auto()
|
|| $alteon->old_ag_p_cfg_ge_auto()
|
||||||
|| {};
|
|| {};
|
||||||
@@ -395,7 +395,7 @@ sub i_vlan_membership_untagged {
|
|||||||
my $vlan = $vlans->{$port};
|
my $vlan = $vlans->{$port};
|
||||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,14 +432,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $alteon = new SNMP::Info(
|
my $alteon = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $alteon->class();
|
my $class = $alteon->class();
|
||||||
@@ -450,11 +450,6 @@ Eric Miller
|
|||||||
Abstraction subclass for Radware Alteon Series ADC switches and
|
Abstraction subclass for Radware Alteon Series ADC switches and
|
||||||
Nortel BladeCenter Layer2-3 GbE Switch Modules.
|
Nortel BladeCenter Layer2-3 GbE Switch Modules.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $alteon = new SNMP::Info::Layer3::AlteonAD(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -581,7 +576,7 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
|||||||
Example:
|
Example:
|
||||||
my $interfaces = $alteon->interfaces();
|
my $interfaces = $alteon->interfaces();
|
||||||
my $vlans = $alteon->i_vlan_membership();
|
my $vlans = $alteon->i_vlan_membership();
|
||||||
|
|
||||||
foreach my $iid (sort keys %$interfaces) {
|
foreach my $iid (sort keys %$interfaces) {
|
||||||
my $port = $interfaces->{$iid};
|
my $port = $interfaces->{$iid};
|
||||||
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
||||||
|
|||||||
@@ -1,23 +1,22 @@
|
|||||||
# SNMP::Info::Layer3::Altiga
|
# SNMP::Info::Layer3::Altiga
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Jeroen van Ingen Schenau
|
# Copyright (c) 2008 Jeroen van Ingen Schenau
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are met:
|
# modification, are permitted provided that the following conditions are met:
|
||||||
#
|
#
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
# this list of conditions and the following disclaimer.
|
# this list of conditions and the following disclaimer.
|
||||||
# * Redistributions in binary form must reproduce the above copyright
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
# documentation and/or other materials provided with the distribution.
|
# documentation and/or other materials provided with the distribution.
|
||||||
# * Neither the name of the University of California, Santa Cruz nor the
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
# names of its contributors may be used to endorse or promote products
|
# names of its contributors may be used to endorse or promote products
|
||||||
# derived from this software without specific prior written permission.
|
# derived from this software without specific prior written permission.
|
||||||
#
|
#
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
@@ -31,22 +30,23 @@
|
|||||||
package SNMP::Info::Layer3::Altiga;
|
package SNMP::Info::Layer3::Altiga;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Altiga::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::Altiga::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::Altiga::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Altiga::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE,
|
||||||
$int_include_vpn $fake_idx $type_class/;
|
$int_include_vpn, $fake_idx, $type_class);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
'ALTIGA-VERSION-STATS-MIB' => 'alVersionString',
|
'ALTIGA-VERSION-STATS-MIB' => 'alVersionString',
|
||||||
'ALTIGA-SESSION-STATS-MIB' => 'alActiveSessionCount',
|
'ALTIGA-SESSION-STATS-MIB' => 'alActiveSessionCount',
|
||||||
'ALTIGA-HARDWARE-STATS-MIB' => 'alHardwarePs1Type',
|
'ALTIGA-HARDWARE-STATS-MIB' => 'alHardwarePs1Type',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -70,7 +70,7 @@ $VERSION = '3.52';
|
|||||||
'fan1_alarm' => 'alHardwareFan1RpmAlarm',
|
'fan1_alarm' => 'alHardwareFan1RpmAlarm',
|
||||||
'fan2_alarm' => 'alHardwareFan2RpmAlarm',
|
'fan2_alarm' => 'alHardwareFan2RpmAlarm',
|
||||||
'fan3_alarm' => 'alHardwareFan3RpmAlarm',
|
'fan3_alarm' => 'alHardwareFan3RpmAlarm',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -189,7 +189,7 @@ sub interfaces {
|
|||||||
if ($int_include_vpn) {
|
if ($int_include_vpn) {
|
||||||
my $tun_type = $altiga->vpn_sess_protocol();
|
my $tun_type = $altiga->vpn_sess_protocol();
|
||||||
my $peer = $altiga->vpn_sess_peer_ip();
|
my $peer = $altiga->vpn_sess_peer_ip();
|
||||||
my $remote = $altiga->vpn_sess_rem_ip();
|
my $remote = $altiga->vpn_sess_rem_ip();
|
||||||
my $group = $altiga->vpn_sess_gid();
|
my $group = $altiga->vpn_sess_gid();
|
||||||
foreach my $tunnel (keys %$tun_type) {
|
foreach my $tunnel (keys %$tun_type) {
|
||||||
if ($type_class->{$tun_type->{$tunnel}} eq 1) {
|
if ($type_class->{$tun_type->{$tunnel}} eq 1) {
|
||||||
@@ -197,7 +197,7 @@ sub interfaces {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return \%interfaces;
|
return \%interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,14 +275,14 @@ Jeroen van Ingen Schenau
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $altiga = new SNMP::Info(
|
my $altiga = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'my_vpn_host',
|
DestHost => 'my_vpn_host',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $altiga->class();
|
my $class = $altiga->class();
|
||||||
@@ -304,6 +304,12 @@ Subclass for Cisco (formerly Altiga) VPN concentrators
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<ALTIGA-VERSION-STATS-MIB>
|
||||||
|
|
||||||
|
=item F<ALTIGA-SESSION-STATS-MIB>
|
||||||
|
|
||||||
|
=item F<ALTIGA-HARDWARE-STATS-MIB>
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -366,7 +372,7 @@ to a hash.
|
|||||||
=item $altiga->interfaces()
|
=item $altiga->interfaces()
|
||||||
|
|
||||||
This method overrides the interfaces() method inherited from SNMP::Info.
|
This method overrides the interfaces() method inherited from SNMP::Info.
|
||||||
It provides a mapping between the Interface Table Index (iid) and the physical
|
It provides a mapping between the Interface Table Index (iid) and the physical
|
||||||
port name, adding a port number to the port name to prevent duplicate names.
|
port name, adding a port number to the port name to prevent duplicate names.
|
||||||
|
|
||||||
=item $altiga->i_lastchange()
|
=item $altiga->i_lastchange()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::Arista
|
# SNMP::Info::Layer3::Arista
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Arista Networks, Inc.
|
# Copyright (c) 2008 Arista Networks, Inc.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,49 +30,44 @@
|
|||||||
package SNMP::Info::Layer3::Arista;
|
package SNMP::Info::Layer3::Arista;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
|
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Arista::ISA = qw/
|
@SNMP::Info::Layer3::Arista::ISA = qw/
|
||||||
SNMP::Info::Aggregate
|
SNMP::Info::Aggregate
|
||||||
SNMP::Info::LLDP
|
|
||||||
SNMP::Info::MAU
|
SNMP::Info::MAU
|
||||||
SNMP::Info::Layer3 Exporter
|
SNMP::Info::Layer3
|
||||||
|
Exporter
|
||||||
/;
|
/;
|
||||||
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
%SNMP::Info::Aggregate::MIBS,
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
|
'ARISTA-PRODUCTS-MIB' => 'aristaDCS7124S',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::MAU::GLOBALS,
|
%SNMP::Info::MAU::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::MAU::FUNCS,
|
%SNMP::Info::MAU::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::MAU::MUNGE,
|
%SNMP::Info::MAU::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
# use MAU-MIB for admin. duplex and admin. speed
|
# use MAU-MIB for admin. duplex and admin. speed
|
||||||
@@ -92,11 +86,14 @@ sub os {
|
|||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $arista = shift;
|
my $arista = shift;
|
||||||
my $descr = $arista->description();
|
my $descr = $arista->description();
|
||||||
my $os_ver = undef;
|
|
||||||
|
|
||||||
$os_ver = $1 if ( $descr =~ /\s+EOS\s+version\s+(\S+)\s+/ );
|
if (defined ($descr)) {
|
||||||
return $os_ver;
|
my $os_ver = undef;
|
||||||
|
$os_ver = $1 if ($descr =~ /\s+EOS\s+version\s+(\S+)\s+/);
|
||||||
|
return $os_ver;
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
@@ -146,7 +143,7 @@ Bill Fenner
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $arista = new SNMP::Info(
|
my $arista = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -154,7 +151,7 @@ Bill Fenner
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $arista->class();
|
my $class = $arista->class();
|
||||||
@@ -174,8 +171,6 @@ Subclass for Arista Networks EOS-based devices
|
|||||||
|
|
||||||
=item SNMP::Info::MAU
|
=item SNMP::Info::MAU
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -192,8 +187,6 @@ See L<SNMP::Info::Aggregate/"Required MIBs"> for its own MIB requirements.
|
|||||||
|
|
||||||
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -204,7 +197,7 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=item $arista->vendor()
|
=item $arista->vendor()
|
||||||
|
|
||||||
Returns 'Arista Networks, Inc.'
|
Returns 'arista'
|
||||||
|
|
||||||
=item $arista->model()
|
=item $arista->model()
|
||||||
|
|
||||||
@@ -230,10 +223,6 @@ See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
@@ -269,8 +258,4 @@ See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::Aruba
|
# SNMP::Info::Layer3::Aruba
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013 Eric Miller
|
# Copyright (c) 2013 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,20 +30,19 @@
|
|||||||
package SNMP::Info::Layer3::Aruba;
|
package SNMP::Info::Layer3::Aruba;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Aruba::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::Aruba::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::Aruba::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Aruba::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
'WLSR-AP-MIB' => 'wlsrHideSSID',
|
'WLSR-AP-MIB' => 'wlsrHideSSID',
|
||||||
'WLSX-IFEXT-MIB' => 'ifExtVlanName',
|
'WLSX-IFEXT-MIB' => 'ifExtVlanName',
|
||||||
'WLSX-POE-MIB' => 'wlsxPseSlotPowerAvailable',
|
'WLSX-POE-MIB' => 'wlsxPseSlotPowerAvailable',
|
||||||
@@ -58,7 +56,6 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
'aruba_serial_old' => 'wlsxSwitchLicenseSerialNumber',
|
'aruba_serial_old' => 'wlsxSwitchLicenseSerialNumber',
|
||||||
'aruba_serial_new' => 'wlsxSysExtLicenseSerialNumber',
|
'aruba_serial_new' => 'wlsxSysExtLicenseSerialNumber',
|
||||||
'aruba_model' => 'wlsxModelName',
|
'aruba_model' => 'wlsxModelName',
|
||||||
@@ -67,7 +64,6 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
|
|
||||||
# WLSR-AP-MIB::wlsrConfigTable
|
# WLSR-AP-MIB::wlsrConfigTable
|
||||||
'aruba_ap_ssidbcast' => 'wlsrHideSSID',
|
'aruba_ap_ssidbcast' => 'wlsrHideSSID',
|
||||||
@@ -143,7 +139,6 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
'aruba_ap_fqln' => \&munge_aruba_fqln,
|
'aruba_ap_fqln' => \&munge_aruba_fqln,
|
||||||
'aruba_ap_type' => \&SNMP::Info::munge_e_type,
|
'aruba_ap_type' => \&SNMP::Info::munge_e_type,
|
||||||
'aruba_card_type' => \&SNMP::Info::munge_e_type,
|
'aruba_card_type' => \&SNMP::Info::munge_e_type,
|
||||||
@@ -170,10 +165,9 @@ sub vendor {
|
|||||||
$id = $1 if ( defined($id) && $id =~ /^\.1\.3\.6\.1\.4\.1\.(\d+)/ );
|
$id = $1 if ( defined($id) && $id =~ /^\.1\.3\.6\.1\.4\.1\.(\d+)/ );
|
||||||
|
|
||||||
if ( defined($id) and exists( $oidmap{$id} ) ) {
|
if ( defined($id) and exists( $oidmap{$id} ) ) {
|
||||||
return $oidmap{$id};
|
return $oidmap{$id};
|
||||||
}
|
} else {
|
||||||
else {
|
return 'aruba';
|
||||||
return 'aruba';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +177,7 @@ sub os_ver {
|
|||||||
return unless defined $descr;
|
return unless defined $descr;
|
||||||
|
|
||||||
if ( $descr =~ m/Version\s+(\d+\.\d+\.\d+\.\d+)/ ) {
|
if ( $descr =~ m/Version\s+(\d+\.\d+\.\d+\.\d+)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -1403,7 +1397,7 @@ Eric Miller
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
|
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -1421,11 +1415,6 @@ This class emulates bridge functionality for the wireless switch. This enables
|
|||||||
end station MAC addresses collection and correlation to the thin access point
|
end station MAC addresses collection and correlation to the thin access point
|
||||||
the end station is using for communication.
|
the end station is using for communication.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $aruba = new SNMP::Info::Layer3::Aruba(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -1466,7 +1455,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $aruba->model()
|
=item $aruba->model()
|
||||||
|
|
||||||
Returns model type. Cross references $aruba->id() with product IDs in the
|
Returns model type. Cross references $aruba->id() with product IDs in the
|
||||||
Aruba MIB.
|
Aruba MIB.
|
||||||
|
|
||||||
=item $aruba->vendor()
|
=item $aruba->vendor()
|
||||||
@@ -1540,7 +1529,7 @@ false.
|
|||||||
=item $aruba->i_ssidmac()
|
=item $aruba->i_ssidmac()
|
||||||
|
|
||||||
With the same keys as i_ssidlist, returns the Basic service set
|
With the same keys as i_ssidlist, returns the Basic service set
|
||||||
identification (BSSID), MAC address, the AP is using for the SSID.
|
identification (BSSID), MAC address, the AP is using for the SSID.
|
||||||
|
|
||||||
=item $aruba->cd11_mac()
|
=item $aruba->cd11_mac()
|
||||||
|
|
||||||
@@ -1578,7 +1567,7 @@ Total packets transmitted by the wireless client.
|
|||||||
|
|
||||||
=item $aruba->i_index()
|
=item $aruba->i_index()
|
||||||
|
|
||||||
Returns reference to map of IIDs to Interface index.
|
Returns reference to map of IIDs to Interface index.
|
||||||
|
|
||||||
Extends C<ifIndex> to support APs as device interfaces.
|
Extends C<ifIndex> to support APs as device interfaces.
|
||||||
|
|
||||||
@@ -1614,7 +1603,7 @@ interfaces.
|
|||||||
=item $aruba->i_up_admin()
|
=item $aruba->i_up_admin()
|
||||||
|
|
||||||
Returns reference to map of IIDs to administrative status of the interface.
|
Returns reference to map of IIDs to administrative status of the interface.
|
||||||
Returns C<ifAdminStatus> for Ethernet interfaces and C<wlanAPStatus>
|
Returns C<ifAdminStatus> for Ethernet interfaces and C<wlanAPStatus>
|
||||||
for AP interfaces.
|
for AP interfaces.
|
||||||
|
|
||||||
=item $aruba->i_mac()
|
=item $aruba->i_mac()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::BayRS
|
# SNMP::Info::Layer3::BayRS
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Eric Miller
|
# Copyright (c) 2008 Eric Miller
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,24 +30,21 @@
|
|||||||
package SNMP::Info::Layer3::BayRS;
|
package SNMP::Info::Layer3::BayRS;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::Bridge;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer3::BayRS::ISA = qw/SNMP::Info SNMP::Info::Layer3
|
@SNMP::Info::Layer3::BayRS::ISA = qw/SNMP::Info::Layer3
|
||||||
SNMP::Info::Bridge Exporter/;
|
Exporter/;
|
||||||
@SNMP::Info::Layer3::BayRS::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::BayRS::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE, %MODEL_MAP,
|
||||||
%MODID_MAP %PROCID_MAP/;
|
%MODID_MAP, %PROCID_MAP);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::Bridge::MIBS,
|
|
||||||
'Wellfleet-HARDWARE-MIB' => 'wfHwBpIdOpt',
|
'Wellfleet-HARDWARE-MIB' => 'wfHwBpIdOpt',
|
||||||
'Wellfleet-OSPF-MIB' => 'wfOspfRouterId',
|
'Wellfleet-OSPF-MIB' => 'wfOspfRouterId',
|
||||||
'Wellfleet-DOT1QTAG-CONFIG-MIB' => 'wfDot1qTagCfgVlanName',
|
'Wellfleet-DOT1QTAG-CONFIG-MIB' => 'wfDot1qTagCfgVlanName',
|
||||||
@@ -57,18 +53,14 @@ $VERSION = '3.52';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::GLOBALS,
|
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::Bridge::GLOBALS,
|
|
||||||
'bp_id' => 'wfHwBpIdOpt',
|
'bp_id' => 'wfHwBpIdOpt',
|
||||||
'bp_serial' => 'wfHwBpSerialNumber',
|
'bp_serial' => 'wfHwBpSerialNumber',
|
||||||
'ospf_rtr_id' => 'wfOspfRouterId',
|
'ospf_rtr_id' => 'wfOspfRouterId',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::FUNCS,
|
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::Bridge::FUNCS,
|
|
||||||
|
|
||||||
# From Wellfleet-CSMACD-MIB::wfCSMACDTable
|
# From Wellfleet-CSMACD-MIB::wfCSMACDTable
|
||||||
'wf_csmacd_cct' => 'wfCSMACDCct',
|
'wf_csmacd_cct' => 'wfCSMACDCct',
|
||||||
@@ -107,9 +99,7 @@ $VERSION = '3.52';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::MUNGE,
|
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::Bridge::MUNGE,
|
|
||||||
'wf_hw_boot' => \&munge_hw_rev,
|
'wf_hw_boot' => \&munge_hw_rev,
|
||||||
'wf_hw_diag' => \&munge_hw_rev,
|
'wf_hw_diag' => \&munge_hw_rev,
|
||||||
'wf_hw_mobo_ser' => \&munge_wf_serial,
|
'wf_hw_mobo_ser' => \&munge_wf_serial,
|
||||||
@@ -541,7 +531,10 @@ sub model {
|
|||||||
my $bayrs = shift;
|
my $bayrs = shift;
|
||||||
my $bp_id = $bayrs->bp_id();
|
my $bp_id = $bayrs->bp_id();
|
||||||
|
|
||||||
return defined $MODEL_MAP{$bp_id} ? $MODEL_MAP{$bp_id} : $bp_id;
|
if (defined $bp_id) {
|
||||||
|
return defined $MODEL_MAP{$bp_id} ? $MODEL_MAP{$bp_id} : $bp_id;
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
@@ -776,7 +769,7 @@ sub e_index {
|
|||||||
my $bp_id = $bayrs->bp_id();
|
my $bp_id = $bayrs->bp_id();
|
||||||
|
|
||||||
# Don't like polling all these columns to build the index, can't think of
|
# Don't like polling all these columns to build the index, can't think of
|
||||||
# a better way right now. Luckly all this data will be cached for the
|
# a better way right now. Luckily all this data will be cached for the
|
||||||
# rest of the e_* methods
|
# rest of the e_* methods
|
||||||
|
|
||||||
# Using mib leafs so we don't have to define everything in FUNCS
|
# Using mib leafs so we don't have to define everything in FUNCS
|
||||||
@@ -805,7 +798,7 @@ sub e_index {
|
|||||||
my @slots = ( $wf_mb, $wf_db, $wf_bb, $wf_mod, $wf_mod1, $wf_mod2 );
|
my @slots = ( $wf_mb, $wf_db, $wf_bb, $wf_mod, $wf_mod1, $wf_mod2 );
|
||||||
my @mods = ( $wf_mm, $wf_dm );
|
my @mods = ( $wf_mm, $wf_dm );
|
||||||
|
|
||||||
# We're going to hack an index: Slot/Module/Postion
|
# We're going to hack an index: Slot/Module/Position
|
||||||
my %wf_e_index;
|
my %wf_e_index;
|
||||||
|
|
||||||
# Chassis on BN types
|
# Chassis on BN types
|
||||||
@@ -1389,14 +1382,14 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $bayrs = new SNMP::Info(
|
my $bayrs = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $bayrs->class();
|
my $class = $bayrs->class();
|
||||||
@@ -1404,21 +1397,12 @@ Eric Miller
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Abstraction subclass for routers running Avaya/Nortel BayRS.
|
Abstraction subclass for routers running Avaya/Nortel BayRS.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $bayrs = new SNMP::Info::Layer3::BayRS(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info
|
|
||||||
|
|
||||||
=item SNMP::Info::Bridge
|
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -1441,10 +1425,6 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=head2 Inherited MIBs
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -1458,7 +1438,7 @@ These are methods that return scalar value from SNMP
|
|||||||
Returns the model of the BayRS router. Will translate between the MIB model
|
Returns the model of the BayRS router. Will translate between the MIB model
|
||||||
and the common model with this map :
|
and the common model with this map :
|
||||||
|
|
||||||
C<%MODEL_MAP = (
|
C<%MODEL_MAP = (
|
||||||
'acefn' => 'FN',
|
'acefn' => 'FN',
|
||||||
'aceln' => 'LN',
|
'aceln' => 'LN',
|
||||||
'acecn' => 'CN',
|
'acecn' => 'CN',
|
||||||
@@ -1500,14 +1480,6 @@ undefined.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer3
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||||
@@ -1529,8 +1501,8 @@ passed but the entire table will be returned.
|
|||||||
Returns reference to the map between IID and physical Port.
|
Returns reference to the map between IID and physical Port.
|
||||||
|
|
||||||
The physical port name is stripped to letter and numbers to signify
|
The physical port name is stripped to letter and numbers to signify
|
||||||
port type and slot port (S11) if the default platform naming was
|
port type and slot port (S11) if the default platform naming was
|
||||||
maintained. Otherwise the port is the interface description.
|
maintained. Otherwise the port is the interface description.
|
||||||
|
|
||||||
=item $bayrs->i_name()
|
=item $bayrs->i_name()
|
||||||
|
|
||||||
@@ -1540,7 +1512,7 @@ interfaces.
|
|||||||
=item $bayrs->i_duplex()
|
=item $bayrs->i_duplex()
|
||||||
|
|
||||||
Returns reference to hash. Maps port operational duplexes to IIDs for
|
Returns reference to hash. Maps port operational duplexes to IIDs for
|
||||||
Ethernet interfaces.
|
Ethernet interfaces.
|
||||||
|
|
||||||
=item $bayrs->i_duplex_admin()
|
=item $bayrs->i_duplex_admin()
|
||||||
|
|
||||||
@@ -1625,14 +1597,6 @@ is not contained in any other entity.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Bridge
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=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::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|||||||
@@ -28,15 +28,16 @@ package SNMP::Info::Layer3::BlueCoatSG;
|
|||||||
# POSSIBILITY OF SUCH DAMAGE.
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::BlueCoatSG::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::BlueCoatSG::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::BlueCoatSG::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::BlueCoatSG::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||||
@@ -55,7 +56,7 @@ $VERSION = '3.52';
|
|||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Layer3::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Layer3::MUNGE, );
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'Blue Coat';
|
return 'bluecoat';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
@@ -65,7 +66,7 @@ sub os {
|
|||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $sg = shift;
|
my $sg = shift;
|
||||||
my $os_string = $sg->sw_ver();
|
my $os_string = $sg->sw_ver();
|
||||||
if ($os_string =~ /^Version:\s(\w+)\s([\d\.]+)/) {
|
if (defined ($os_string) && $os_string =~ /^Version:\s(\w+)\s([\d\.]+)/) {
|
||||||
return $2;
|
return $2;
|
||||||
} else {
|
} else {
|
||||||
return ''; # perhaps we can try sysDescr or some other object...
|
return ''; # perhaps we can try sysDescr or some other object...
|
||||||
@@ -92,7 +93,7 @@ Jeroen van Ingen
|
|||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 1
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
@@ -113,10 +114,10 @@ Subclass for Blue Coat SG Series proxy devices
|
|||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
|
|
||||||
BLUECOAT-SG-PROXY-MIB
|
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<BLUECOAT-SG-PROXY-MIB>
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -133,7 +134,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $router->vendor()
|
=item $router->vendor()
|
||||||
|
|
||||||
Returns C<'Blue Coat'>
|
Returns C<'bluecoat'>
|
||||||
|
|
||||||
=item $router->os()
|
=item $router->os()
|
||||||
|
|
||||||
@@ -154,12 +155,6 @@ See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=head2 Overrides
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=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::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::C3550
|
# SNMP::Info::Layer3::C3550
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
|
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
|
||||||
# Copyright (c) 2004 Regents of the University of California
|
# Copyright (c) 2004 Regents of the University of California
|
||||||
@@ -37,7 +36,7 @@ use Exporter;
|
|||||||
use SNMP::Info::CiscoStack;
|
use SNMP::Info::CiscoStack;
|
||||||
use SNMP::Info::Layer3::CiscoSwitch;
|
use SNMP::Info::Layer3::CiscoSwitch;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
# NOTE : Top-most items gets precedence for @ISA
|
# NOTE : Top-most items gets precedence for @ISA
|
||||||
@SNMP::Info::Layer3::C3550::ISA = qw/
|
@SNMP::Info::Layer3::C3550::ISA = qw/
|
||||||
@@ -47,7 +46,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|||||||
|
|
||||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
# NOTE: Order creates precedence
|
# NOTE: Order creates precedence
|
||||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||||
@@ -96,8 +95,8 @@ sub ports {
|
|||||||
my $c3550 = shift;
|
my $c3550 = shift;
|
||||||
|
|
||||||
my $id = $c3550->id();
|
my $id = $c3550->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = SNMP::translateObj($id);
|
||||||
if ( $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
|
if ( defined $model && $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +104,7 @@ sub ports {
|
|||||||
return $ports;
|
return $ports;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Verions prior to 12.1(22)EA1a use the older CiscoStack method
|
# Versions prior to 12.1(22)EA1a use the older CiscoStack method
|
||||||
# Newer versions use the ETHERLIKE-MIB to report operational duplex.
|
# Newer versions use the ETHERLIKE-MIB to report operational duplex.
|
||||||
# See http://www.ciscosystems.com/en/US/products/hw/switches/ps646/prod_release_note09186a00802a08ee.html
|
# See http://www.ciscosystems.com/en/US/products/hw/switches/ps646/prod_release_note09186a00802a08ee.html
|
||||||
|
|
||||||
@@ -206,7 +205,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $c3550 = new SNMP::Info(
|
my $c3550 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -214,7 +213,7 @@ Max Baker
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $c3550->class();
|
my $class = $c3550->class();
|
||||||
@@ -222,17 +221,12 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Abstraction subclass for Cisco Catalyst 3550 Layer 2/3 Switches.
|
Abstraction subclass for Cisco Catalyst 3550 Layer 2/3 Switches.
|
||||||
|
|
||||||
These devices run IOS but have some of the same characteristics as the
|
These devices run IOS but have some of the same characteristics as the
|
||||||
Catalyst WS-C family (5xxx,6xxx). For example, forwarding tables are held in
|
Catalyst WS-C family (5xxx,6xxx). For example, forwarding tables are held in
|
||||||
VLANs, and extended interface information is gleaned from F<CISCO-SWITCH-MIB>.
|
VLANs, and extended interface information is gleaned from F<CISCO-SWITCH-MIB>.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $c3550 = new SNMP::Info::Layer3::C3550(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -304,7 +298,7 @@ Software version 12.1(22)EA1a or greater returns duplex based upon the
|
|||||||
result of $c3550->el_duplex(). Otherwise it uses the result of
|
result of $c3550->el_duplex(). Otherwise it uses the result of
|
||||||
the call to CiscoStack::i_duplex().
|
the call to CiscoStack::i_duplex().
|
||||||
|
|
||||||
See L<SNMP::Info::Etherlike> for el_duplex() method and
|
See L<SNMP::Info::EtherLike> for el_duplex() method and
|
||||||
L<SNMP::Info::CiscoStack> for its i_duplex() method.
|
L<SNMP::Info::CiscoStack> for its i_duplex() method.
|
||||||
|
|
||||||
=item $c3550->i_duplex_admin()
|
=item $c3550->i_duplex_admin()
|
||||||
@@ -327,7 +321,7 @@ Crosses $c3550->p_port() with $c3550->p_duplex() to utilize port C<ifIndex>.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$c3550->interfaces()};
|
my %if_map = reverse %{$c3550->interfaces()};
|
||||||
$c3550->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
$c3550->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port duplex. ",$c3550->error(1);
|
or die "Couldn't change port duplex. ",$c3550->error(1);
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::C4000
|
# SNMP::Info::Layer3::C4000
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Bill Fenner
|
# Copyright (c) 2008 Bill Fenner
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -42,9 +41,9 @@ use SNMP::Info::MAU;
|
|||||||
Exporter/;
|
Exporter/;
|
||||||
@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
@@ -111,7 +110,7 @@ Bill Fenner
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $c4000 = new SNMP::Info(
|
my $c4000 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -119,7 +118,7 @@ Bill Fenner
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $c4000->class();
|
my $class = $c4000->class();
|
||||||
@@ -127,12 +126,7 @@ Bill Fenner
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Abstraction subclass for Cisco Catalyst 4000 Layer 2/3 Switches.
|
Abstraction subclass for Cisco Catalyst 4000 Layer 2/3 Switches.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $c4000 = new SNMP::Info::Layer3::C4000(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::C6500
|
# SNMP::Info::Layer3::C6500
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008-2009 Max Baker
|
# Copyright (c) 2008-2009 Max Baker
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -37,7 +36,7 @@ use SNMP::Info::CiscoStack;
|
|||||||
use SNMP::Info::Layer3::CiscoSwitch;
|
use SNMP::Info::Layer3::CiscoSwitch;
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
# NOTE : Top-most items gets precedence for @ISA
|
# NOTE : Top-most items gets precedence for @ISA
|
||||||
@SNMP::Info::Layer3::C6500::ISA = qw/
|
@SNMP::Info::Layer3::C6500::ISA = qw/
|
||||||
@@ -49,9 +48,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|||||||
|
|
||||||
@SNMP::Info::Layer3::C6500::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C6500::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
$VERSION = '3.52';
|
|
||||||
|
|
||||||
# NOTE: Order creates precedence
|
# NOTE: Order creates precedence
|
||||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||||
@@ -179,7 +176,7 @@ sub set_i_duplex_admin {
|
|||||||
|
|
||||||
my $c6500 = shift;
|
my $c6500 = shift;
|
||||||
my ( $duplex, $iid ) = @_;
|
my ( $duplex, $iid ) = @_;
|
||||||
|
|
||||||
if ( $c6500->is_virtual_switch() ) {
|
if ( $c6500->is_virtual_switch() ) {
|
||||||
|
|
||||||
# VSS -> MAU
|
# VSS -> MAU
|
||||||
@@ -188,7 +185,7 @@ sub set_i_duplex_admin {
|
|||||||
# 2. Disable ifMauAutoNegAdminStatus
|
# 2. Disable ifMauAutoNegAdminStatus
|
||||||
# If the second set is not done, this is not going to be
|
# If the second set is not done, this is not going to be
|
||||||
# working... Cisco Bug id CSCty97033.
|
# working... Cisco Bug id CSCty97033.
|
||||||
# SXI is not working (up to at least relase SXI9).
|
# SXI is not working (up to at least release SXI9).
|
||||||
# SXJ is working at SXJ3 (not before).
|
# SXJ is working at SXJ3 (not before).
|
||||||
|
|
||||||
return $c6500->mau_set_i_duplex_admin( $duplex, $iid );
|
return $c6500->mau_set_i_duplex_admin( $duplex, $iid );
|
||||||
@@ -226,7 +223,7 @@ sub set_i_speed_admin {
|
|||||||
# 2. Disable ifMauAutoNegAdminStatus
|
# 2. Disable ifMauAutoNegAdminStatus
|
||||||
# If the second set is not done, this is not going to be working...
|
# If the second set is not done, this is not going to be working...
|
||||||
# Cisco Bug id CSCty97033.
|
# Cisco Bug id CSCty97033.
|
||||||
# SXI is not working (at least up to relase SXI9).
|
# SXI is not working (at least up to release SXI9).
|
||||||
# SXJ is working at SXJ3 (not before).
|
# SXJ is working at SXJ3 (not before).
|
||||||
|
|
||||||
return $c6500->mau_set_i_speed_admin( $speed, $iid );
|
return $c6500->mau_set_i_speed_admin( $speed, $iid );
|
||||||
@@ -244,7 +241,8 @@ __END__
|
|||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::Layer3::C6500 - SNMP Interface to Cisco Catalyst 6500 Layer 2/3
|
SNMP::Info::Layer3::C6500 - SNMP Interface to Cisco Catalyst 6500 Layer 2/3
|
||||||
Switches running IOS and/or CatOS
|
Switches running IOS and/or CatOS. Also Cisco Catalyst 2960, 2970, 3750 and
|
||||||
|
3850 series and blade switch CBS30x0 and CBS31x0 series running IOS.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -252,7 +250,7 @@ Max Baker
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $c6500 = new SNMP::Info(
|
my $c6500 = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
@@ -260,7 +258,7 @@ Max Baker
|
|||||||
DestHost => 'myswitch',
|
DestHost => 'myswitch',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $c6500->class();
|
my $class = $c6500->class();
|
||||||
@@ -268,16 +266,15 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Abstraction subclass for Cisco Catalyst 6500 Layer 2/3 Switches.
|
Abstraction subclass for Cisco Catalyst 6500 Layer 2/3 Switches.
|
||||||
|
|
||||||
These devices run IOS but have some of the same characteristics as the
|
These devices run IOS but have some of the same characteristics as the
|
||||||
Catalyst WS-C family (5xxx). For example, forwarding tables are held in
|
Catalyst WS-C family (5xxx). For example, forwarding tables are held in
|
||||||
VLANs, and extended interface information is gleaned from F<CISCO-SWITCH-MIB>.
|
VLANs, and extended interface information is gleaned from F<CISCO-SWITCH-MIB>.
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
It also supports the following IOS only series switches: Cisco Catalyst 2960,
|
||||||
after determining a more specific class using the method above.
|
2970, 3750 and 3850 series. Also blade switches from the CBS30x0 and CBS31x0
|
||||||
|
series.
|
||||||
my $c6500 = new SNMP::Info::Layer3::C6500(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -295,6 +292,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<CISCO-VIRTUAL-SWITCH-MIB>
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -314,7 +313,7 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $c6500->vendor()
|
=item $c6500->vendor()
|
||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
|
|
||||||
=item $c6500->cvsSwitchMode()
|
=item $c6500->cvsSwitchMode()
|
||||||
|
|
||||||
@@ -359,7 +358,7 @@ Newer software versions return duplex based upon the result of
|
|||||||
$c6500->el_duplex(). Otherwise it uses the result of the call to
|
$c6500->el_duplex(). Otherwise it uses the result of the call to
|
||||||
CiscoStack::i_duplex().
|
CiscoStack::i_duplex().
|
||||||
|
|
||||||
See L<SNMP::Info::Etherlike> for el_duplex() method and
|
See L<SNMP::Info::EtherLike> for el_duplex() method and
|
||||||
L<SNMP::Info::CiscoStack> for its i_duplex() method.
|
L<SNMP::Info::CiscoStack> for its i_duplex() method.
|
||||||
|
|
||||||
=item $c6500->i_duplex_admin()
|
=item $c6500->i_duplex_admin()
|
||||||
@@ -382,7 +381,7 @@ Crosses $c6500->p_port() with $c6500->p_duplex() to utilize port C<ifIndex>.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
my %if_map = reverse %{$c6500->interfaces()};
|
my %if_map = reverse %{$c6500->interfaces()};
|
||||||
$c6500->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
$c6500->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port duplex. ",$c6500->error(1);
|
or die "Couldn't change port duplex. ",$c6500->error(1);
|
||||||
|
|
||||||
=item $c6500->set_i_speed_admin(speed, ifIndex)
|
=item $c6500->set_i_speed_admin(speed, ifIndex)
|
||||||
@@ -399,13 +398,11 @@ Crosses $c6500->p_port() with $c6500->p_speed() to utilize port C<ifIndex>.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
|
=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::MAU
|
=head2 Table Methods imported from SNMP::Info::MAU
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# SNMP::Info::Layer3::CheckPoint
|
# SNMP::Info::Layer3::CheckPoint
|
||||||
# $Id$
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Bill Fenner
|
# Copyright (c) 2008 Bill Fenner
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@@ -31,38 +30,38 @@
|
|||||||
package SNMP::Info::Layer3::CheckPoint;
|
package SNMP::Info::Layer3::CheckPoint;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
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::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
@SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
$VERSION = '3.52';
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
'CHECKPOINT-MIB' => 'fwProduct',
|
'CHECKPOINT-MIB' => 'fwProduct',
|
||||||
'UCD-SNMP-MIB' => 'versionTag',
|
'UCD-SNMP-MIB' => 'versionTag',
|
||||||
'NET-SNMP-TC' => 'netSnmpAgentOIDs',
|
'NET-SNMP-TC' => 'netSnmpAliasDomain',
|
||||||
'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
|
'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
|
||||||
'HOST-RESOURCES-MIB' => 'hrSystem',
|
'HOST-RESOURCES-MIB' => 'hrSystem',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
'netsnmp_vers' => 'versionTag',
|
'netsnmp_vers' => 'versionTag',
|
||||||
'hrSystemUptime' => 'hrSystemUptime',
|
'hrSystemUptime' => 'hrSystemUptime',
|
||||||
|
'serial_number' => 'svnApplianceSerialNumber',
|
||||||
|
'product_name' => 'svnApplianceProductName',
|
||||||
|
'manufacturer' => 'svnApplianceManufacturer',
|
||||||
|
'version' => 'svnVersion',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
|
|
||||||
# Net-SNMP Extend table that could but customize to add a the CheckPoint version
|
# Net-SNMP Extend table that could but customize to add a the CheckPoint version
|
||||||
'extend_output_table' => 'nsExtendOutputFull',
|
'extend_output_table' => 'nsExtendOutputFull',
|
||||||
@@ -70,11 +69,16 @@ $VERSION = '3.52';
|
|||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'checkpoint';
|
my $ckp = shift;
|
||||||
|
|
||||||
|
if (defined $ckp->manufacturer) {
|
||||||
|
return lc $ckp->manufacturer;
|
||||||
|
} else {
|
||||||
|
return 'checkpoint';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
@@ -83,7 +87,9 @@ sub model {
|
|||||||
|
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
|
|
||||||
if (defined $model) {
|
if (defined $ckp->product_name) {
|
||||||
|
return $ckp->product_name;
|
||||||
|
} elsif (defined $model) {
|
||||||
$model =~ s/^checkPoint//;
|
$model =~ s/^checkPoint//;
|
||||||
return $model;
|
return $model;
|
||||||
} else {
|
} else {
|
||||||
@@ -97,41 +103,48 @@ sub os {
|
|||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $ckp = shift;
|
my $ckp = shift;
|
||||||
my $extend_table = $ckp->extend_output_table() || {};
|
if (defined $ckp->version) {
|
||||||
|
return $ckp->version;
|
||||||
|
} else {
|
||||||
|
my $extend_table = $ckp->extend_output_table() || {};
|
||||||
|
|
||||||
my $descr = $ckp->description();
|
my $descr = $ckp->description();
|
||||||
my $vers = $ckp->netsnmp_vers();
|
my $vers = $ckp->netsnmp_vers();
|
||||||
my $os_ver = undef;
|
my $os_ver = undef;
|
||||||
|
|
||||||
foreach my $ex (keys %$extend_table) {
|
foreach my $ex (keys %$extend_table) {
|
||||||
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
||||||
if ($name eq 'ckpVersion') {
|
if ($name eq 'ckpVersion') {
|
||||||
return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/);
|
return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/);
|
||||||
last;
|
last;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ );
|
$os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ );
|
||||||
if ($vers) {
|
if ($vers) {
|
||||||
$os_ver = "???" unless defined($os_ver);
|
$os_ver = "???" unless defined($os_ver);
|
||||||
$os_ver .= " / Net-SNMP " . $vers;
|
$os_ver .= " / Net-SNMP " . $vers;
|
||||||
|
}
|
||||||
|
return $os_ver;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $os_ver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub serial {
|
sub serial {
|
||||||
my $ckp = shift;
|
my $ckp = shift;
|
||||||
my $extend_table = $ckp->extend_output_table() || {};
|
|
||||||
|
|
||||||
foreach my $ex (keys %$extend_table) {
|
if (defined $ckp->serial_number) {
|
||||||
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
return $ckp->serial_number;
|
||||||
if ($name eq 'ckpAsset') {
|
} else {
|
||||||
return $1 if ($extend_table->{$ex} =~ /Serial Number: (\S+)/);
|
my $extend_table = $ckp->extend_output_table() || {};
|
||||||
last;
|
|
||||||
|
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 '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,14 +197,14 @@ Ambroise Rosset
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $ckp = new SNMP::Info(
|
my $ckp = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
DestHost => 'myrouter',
|
DestHost => 'myrouter',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $ckp->class();
|
my $class = $ckp->class();
|
||||||
@@ -199,11 +212,13 @@ Ambroise Rosset
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Subclass for Generic Net-SNMP devices
|
Subclass for CheckPoint Devices.
|
||||||
|
|
||||||
=head2 WARNING
|
=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:
|
To correctly and completely work on IPSO based devices, you should
|
||||||
|
add the following line in the file C</etc/snmp/snmpd.local.conf> on each
|
||||||
|
of your CheckPoint devices:
|
||||||
|
|
||||||
# Netdisco SNMP configuration
|
# Netdisco SNMP configuration
|
||||||
extend ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver
|
extend ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver
|
||||||
@@ -221,8 +236,12 @@ To correctly and completelly work, you should add the following line in the file
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item F<CHECKPOINT-MIB>
|
||||||
|
|
||||||
=item F<UCD-SNMP-MIB>
|
=item F<UCD-SNMP-MIB>
|
||||||
|
|
||||||
|
=item F<NET-SNMP-EXTEND-MIB>
|
||||||
|
|
||||||
=item F<NET-SNMP-TC>
|
=item F<NET-SNMP-TC>
|
||||||
|
|
||||||
=item F<HOST-RESOURCES-MIB>
|
=item F<HOST-RESOURCES-MIB>
|
||||||
@@ -231,8 +250,6 @@ To correctly and completelly work, you should add the following line in the file
|
|||||||
|
|
||||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -243,11 +260,12 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=item $ckp->vendor()
|
=item $ckp->vendor()
|
||||||
|
|
||||||
Returns 'checkpoint'.
|
Returns C<svnApplianceManufacturer> in lowercase, else 'checkpoint'.
|
||||||
|
|
||||||
=item $ckp->model()
|
=item $ckp->model()
|
||||||
|
|
||||||
Return the model type of the CheckPoint device (Based on the sysObjectOID translation).
|
Returns C<svnApplianceProductName>, else the model type based on the
|
||||||
|
sysObjectOID translation.
|
||||||
|
|
||||||
=item $ckp->os()
|
=item $ckp->os()
|
||||||
|
|
||||||
@@ -255,8 +273,8 @@ Returns the OS extracted from C<sysDescr>.
|
|||||||
|
|
||||||
=item $ckp->os_ver()
|
=item $ckp->os_ver()
|
||||||
|
|
||||||
Returns the software version extracted from C<sysDescr>, along
|
Returns C<svnVersion>, else the software version is extracted from
|
||||||
with the Net-SNMP version.
|
C<sysDescr>, along with the Net-SNMP version.
|
||||||
|
|
||||||
=item $ckp->uptime()
|
=item $ckp->uptime()
|
||||||
|
|
||||||
@@ -266,8 +284,9 @@ are based on agent uptime, so use orig_uptime().
|
|||||||
|
|
||||||
=item $ckp->serial()
|
=item $ckp->serial()
|
||||||
|
|
||||||
Return the serial number of the device if the SNMP server is configured as indicated previously.
|
Returns <svnApplianceSerialNumber>, else the serial number of the
|
||||||
Return '' in other case.
|
device if the SNMP server is configured as indicated previously.
|
||||||
|
Returns '' in other case.
|
||||||
|
|
||||||
=item $ckp->layers()
|
=item $ckp->layers()
|
||||||
|
|
||||||
@@ -279,10 +298,6 @@ Return '01001100'.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3> for details.
|
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
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
@@ -304,12 +319,12 @@ Ignores loopback
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3> for details.
|
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
|
=head1 NOTES
|
||||||
|
|
||||||
|
If your device is not recognized by SNMP::Info as being in the class
|
||||||
|
L<SNMP::Info::Layer3::CheckPoint> you might need additional snmp
|
||||||
|
configuration on the CheckPoint device.
|
||||||
|
|
||||||
In order to cause SNMP::Info to classify your device into this class, it
|
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>
|
may be necessary to put a configuration line into your F<snmpd.conf>
|
||||||
similar to
|
similar to
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user