Compare commits
460 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5fb7c78619 | ||
|
|
603345205a | ||
|
|
bd85ebc8d6 | ||
|
|
2aca6d9300 | ||
|
|
4919cb0f69 | ||
|
|
d134c342e8 | ||
|
|
b1c7e78d12 | ||
|
|
0a0766afbd | ||
|
|
2d39911cba | ||
|
|
3bf60002f4 | ||
|
|
42db01335e | ||
|
|
752e1c632c | ||
|
|
892d2014ca | ||
|
|
1fdc486cd5 | ||
|
|
9e7f7f734e | ||
|
|
e311f8a5c6 | ||
|
|
82755ab8db | ||
|
|
62823e3d83 | ||
|
|
66077c9662 | ||
|
|
74e129154b | ||
|
|
75880d9134 | ||
|
|
245fe93be4 | ||
|
|
54a0baa2fa | ||
|
|
4e18ccc9e2 | ||
|
|
9ed5a187a9 | ||
|
|
a636ba6117 | ||
|
|
facdf0aafe | ||
|
|
75dcf74148 | ||
|
|
e252dac59c | ||
|
|
9d384f2bc2 | ||
|
|
cc9a1c9f47 | ||
|
|
b43eafd09a | ||
|
|
141470fdf4 | ||
|
|
2e18464635 | ||
|
|
87a287e0c9 | ||
|
|
a38eafbf56 | ||
|
|
81c7203642 | ||
|
|
c515a5e4a1 | ||
|
|
02e6807e44 | ||
|
|
90bb0ef071 | ||
|
|
209988cf9e | ||
|
|
da130926a9 | ||
|
|
4c51c29428 | ||
|
|
2301d2e60a | ||
|
|
53a5b5aa0a | ||
|
|
d13adfee80 | ||
|
|
9752bf2878 | ||
|
|
9949eeb389 | ||
|
|
aceed9cc52 | ||
|
|
0371ca35d6 | ||
|
|
ce0a350ef2 | ||
|
|
3b58ba8678 | ||
|
|
a69b45d849 | ||
|
|
ad0a1044b9 | ||
|
|
5336ec2db2 | ||
|
|
e20cd6dd02 | ||
|
|
66f16f6617 | ||
|
|
0755487e02 | ||
|
|
afeb37ae5e | ||
|
|
cc05fb927f | ||
|
|
facdf5b7a7 | ||
|
|
66bedd4d54 | ||
|
|
3a3c1efe46 | ||
|
|
1a069c2b52 | ||
|
|
f7de9ffbc6 | ||
|
|
3c6cfa8ecf | ||
|
|
585d01895b | ||
|
|
63cac2a3a8 | ||
|
|
0623fbfdf1 | ||
|
|
0c711269ae | ||
|
|
f676d27a3b | ||
|
|
64167df588 | ||
|
|
398f3ee74b | ||
|
|
125f02b8a2 | ||
|
|
eeeabeec94 | ||
|
|
5fe0ebaeda | ||
|
|
fda59f51f7 | ||
|
|
e8de74c6a5 | ||
|
|
da6716b107 | ||
|
|
62267f4e8e | ||
|
|
fd1c91edac | ||
|
|
a0b2010994 | ||
|
|
bda796ae98 | ||
|
|
8b3b03b312 | ||
|
|
cbc756a3f8 | ||
|
|
9af7a7661c | ||
|
|
eab89e4736 | ||
|
|
8391cee4f3 | ||
|
|
fcd0e30d64 | ||
|
|
4a454c9431 | ||
|
|
cd751071e1 | ||
|
|
c921e8b35c | ||
|
|
60d5591401 | ||
|
|
98e8e57747 | ||
|
|
f6a4f937ee | ||
|
|
1e5eda927c | ||
|
|
c6eb73bc7b | ||
|
|
c49d8ab921 | ||
|
|
27b310ee68 | ||
|
|
f6d0fb1d7e | ||
|
|
ddc5fd8c96 | ||
|
|
26b13fbcd4 | ||
|
|
91b98085f6 | ||
|
|
1c948d6e45 | ||
|
|
76cbb05f19 | ||
|
|
e7fcd98107 | ||
|
|
090d94191b | ||
|
|
2c3a6a3c6e | ||
|
|
814083e2fa | ||
|
|
7621b30bc2 | ||
|
|
9e2e55dcb3 | ||
|
|
f8a1d5bc7a | ||
|
|
1a65be101e | ||
|
|
4c5d0a5695 | ||
|
|
f8b3381d16 | ||
|
|
8a41e5063a | ||
|
|
24a84cdc25 | ||
|
|
25354e1f3e | ||
|
|
2025044952 | ||
|
|
d00dcdad85 | ||
|
|
fc069c13f5 | ||
|
|
69430f4a21 | ||
|
|
a83855157b | ||
|
|
5ce80ba4ee | ||
|
|
16e96d9fcf | ||
|
|
ac753c5970 | ||
|
|
313e187399 | ||
|
|
f5aaee6c89 | ||
|
|
c8b4f8f4fd | ||
|
|
6113dd3b98 | ||
|
|
e21f22bb3b | ||
|
|
bb4578dea5 | ||
|
|
e83ca6fbe3 | ||
|
|
ae9963cf85 | ||
|
|
650aef9c2d | ||
|
|
397b14da22 | ||
|
|
0f00322e03 | ||
|
|
e2b688077e | ||
|
|
4afbd37cbd | ||
|
|
40d3340ac5 | ||
|
|
9bb71d3df7 | ||
|
|
4860447b06 | ||
|
|
445b3f19a3 | ||
|
|
32efd26999 | ||
|
|
f2f95150bd | ||
|
|
f210bf8812 | ||
|
|
c30e1a2446 | ||
|
|
10392fc08e | ||
|
|
df10473fb5 | ||
|
|
6505e7e85f | ||
|
|
ffd80722b8 | ||
|
|
6bd5bb3dda | ||
|
|
83dec3c1d6 | ||
|
|
82f2a83eec | ||
|
|
5194af9d91 | ||
|
|
a4c76d2fb9 | ||
|
|
57a35075fa | ||
|
|
fb69a60b45 | ||
|
|
2625381e5b | ||
|
|
1c048320a6 | ||
|
|
c5c25cee7f | ||
|
|
dee8177a67 | ||
|
|
abbe040351 | ||
|
|
29a0f849f1 | ||
|
|
7e524f46c6 | ||
|
|
1146e99de2 | ||
|
|
6740929d41 | ||
|
|
831788c1c9 | ||
|
|
7e9d4520af | ||
|
|
c4317e6e6b | ||
|
|
e4e3debce0 | ||
|
|
a5b7431070 | ||
|
|
054808f59d | ||
|
|
0b313d627e | ||
|
|
9813b9db90 | ||
|
|
9a4e024abb | ||
|
|
04a669157f | ||
|
|
a364c1512d | ||
|
|
0451e6f0a6 | ||
|
|
b7f87d9e82 | ||
|
|
e2713fb57a | ||
|
|
c8eff78d34 | ||
|
|
04ca5793fa | ||
|
|
83d00ee9c7 | ||
|
|
bf56ed2540 | ||
|
|
e75aba14b4 | ||
|
|
5d2d2d416f | ||
|
|
62799bfc9d | ||
|
|
df8fbc3c03 | ||
|
|
604de81ab8 | ||
|
|
ed14b09567 | ||
|
|
800758815c | ||
|
|
058b74bd63 | ||
|
|
02a52a4e09 | ||
|
|
74ddc93f7f | ||
|
|
eb8af0c81b | ||
|
|
bd49274808 | ||
|
|
8b1547c589 | ||
|
|
c093f83848 | ||
|
|
c0b28c38c5 | ||
|
|
4621a0898f | ||
|
|
6f02e1035f | ||
|
|
d4ae9237a6 | ||
|
|
914eb05a60 | ||
|
|
4da17227c1 | ||
|
|
20014cab29 | ||
|
|
9d62361c8a | ||
|
|
260992b7bf | ||
|
|
b9cd429551 | ||
|
|
2d18a75ad7 | ||
|
|
0cfc501f83 | ||
|
|
44b19153f1 | ||
|
|
433b87b9df | ||
|
|
f9464bcd6c | ||
|
|
f5c5ec202a | ||
|
|
4b64a70830 | ||
|
|
4c8f7e298e | ||
|
|
2d539be214 | ||
|
|
c35d5814b4 | ||
|
|
7d19ad401b | ||
|
|
985577ce79 | ||
|
|
24e20101d5 | ||
|
|
76c884eb9f | ||
|
|
7041dbab27 | ||
|
|
661051fde4 | ||
|
|
36cba5ce18 | ||
|
|
4753f30c53 | ||
|
|
d719e240d2 | ||
|
|
e35faee278 | ||
|
|
fd3417a09a | ||
|
|
1719709648 | ||
|
|
d37aa3378e | ||
|
|
f017d32860 | ||
|
|
7b23edcb29 | ||
|
|
e48c4b4e84 | ||
|
|
aeca44c7aa | ||
|
|
af6ae8e419 | ||
|
|
5cf88ba3b7 | ||
|
|
f901ba5591 | ||
|
|
7deea96bc3 | ||
|
|
48dfb9bd08 | ||
|
|
85372559fa | ||
|
|
98972b80ef | ||
|
|
d950244232 | ||
|
|
fd898829c3 | ||
|
|
b0158628bb | ||
|
|
0f69a7b391 | ||
|
|
72773117e5 | ||
|
|
06806f5a6e | ||
|
|
a01c785ec8 | ||
|
|
502e206371 | ||
|
|
8fba1bc6a9 | ||
|
|
f43803d6d4 | ||
|
|
338cba6350 | ||
|
|
2a15066062 | ||
|
|
add86bc566 | ||
|
|
e9b4eaaeb9 | ||
|
|
07605051f5 | ||
|
|
998356484b | ||
|
|
e97617ad60 | ||
|
|
9685c3afa8 | ||
|
|
c209b9a72f | ||
|
|
4999b769ba | ||
|
|
d8b5ba2161 | ||
|
|
6f4a4a91cf | ||
|
|
0049f0d72e | ||
|
|
4ea66fc0fd | ||
|
|
8426620572 | ||
|
|
76aece0a3f | ||
|
|
508e7f77a0 | ||
|
|
d250a829cb | ||
|
|
2fada0c31c | ||
|
|
e6ad08733d | ||
|
|
a8d83b5e1c | ||
|
|
9392b74cbc | ||
|
|
e09624efd0 | ||
|
|
d4d7429de4 | ||
|
|
b97cef86a3 | ||
|
|
70615a172b | ||
|
|
d399ca90d3 | ||
|
|
bbc9695075 | ||
|
|
c8fceeb75b | ||
|
|
036cb4556e | ||
|
|
e7b06a0b06 | ||
|
|
c0067113e9 | ||
|
|
ce4349a188 | ||
|
|
224085dfca | ||
|
|
9b3262a5fe | ||
|
|
86856b6d54 | ||
|
|
d5bf08329e | ||
|
|
60efce8404 | ||
|
|
83164f456a | ||
|
|
c0141bcfee | ||
|
|
8dfe9ef1cf | ||
|
|
73d713b670 | ||
|
|
db6c3573c1 | ||
|
|
c8cbdaef8a | ||
|
|
2c7243b87d | ||
|
|
46515dd5d3 | ||
|
|
7eb799adc6 | ||
|
|
c85b61bbd0 | ||
|
|
045ff8b789 | ||
|
|
7b7f197439 | ||
|
|
9e1c462836 | ||
|
|
e97e8309cb | ||
|
|
8c5be1a47d | ||
|
|
afef2e6732 | ||
|
|
7b2051b55c | ||
|
|
8e470a2d72 | ||
|
|
35213d5cb2 | ||
|
|
b24f1a8ac4 | ||
|
|
5454ab577e | ||
|
|
046c15a074 | ||
|
|
ddb9dda894 | ||
|
|
d7047bda13 | ||
|
|
c7934f4d10 | ||
|
|
c97dc06177 | ||
|
|
76b1faa159 | ||
|
|
1e0438857e | ||
|
|
b6494effa6 | ||
|
|
a359184b83 | ||
|
|
ce50a3f627 | ||
|
|
ee7d254329 | ||
|
|
d674b22b39 | ||
|
|
47954aba8e | ||
|
|
09e18e9b64 | ||
|
|
163ba86196 | ||
|
|
e57e7d99d5 | ||
|
|
7ad449303b | ||
|
|
49b853de1a | ||
|
|
03a81ad4be | ||
|
|
eb046b6a61 | ||
|
|
1bf62f9524 | ||
|
|
9aca213a5f | ||
|
|
ce8bb68200 | ||
|
|
7ee562c5ac | ||
|
|
bdb719004d | ||
|
|
842ac96d48 | ||
|
|
5bb9011fb4 | ||
|
|
97564f50b8 | ||
|
|
efcf6a0db3 | ||
|
|
9e813784f7 | ||
|
|
aaca03062b | ||
|
|
c1242017e2 | ||
|
|
5f1426a0a3 | ||
|
|
e84225fb23 | ||
|
|
32c0e64bfb | ||
|
|
0793ff31f5 | ||
|
|
d3c2c1b607 | ||
|
|
893def7910 | ||
|
|
f875639435 | ||
|
|
70bb263d79 | ||
|
|
536d7d6901 | ||
|
|
6ea34316b0 | ||
|
|
aeebe5c95c | ||
|
|
eb62f95636 | ||
|
|
c7ee746fe6 | ||
|
|
9a062499b3 | ||
|
|
0c876452d8 | ||
|
|
3b6088f454 | ||
|
|
719f14984b | ||
|
|
2e480dbec5 | ||
|
|
66910c7827 | ||
|
|
0f5319bc52 | ||
|
|
cd54b07e09 | ||
|
|
b197e9739b | ||
|
|
8dd32c0dd7 | ||
|
|
08e049eb31 | ||
|
|
d09e4a125c | ||
|
|
8353db2bc4 | ||
|
|
250d2a0c0a | ||
|
|
46b3127bb5 | ||
|
|
f1e9e3423d | ||
|
|
158ee40f1b | ||
|
|
713d052b64 | ||
|
|
0e28436086 | ||
|
|
3f7229f4e7 | ||
|
|
1ae7f8c8a2 | ||
|
|
8e63954c3f | ||
|
|
0fbcd5f8b1 | ||
|
|
71f84d48dc | ||
|
|
867a635ab8 | ||
|
|
3d2c9ceaf5 | ||
|
|
47736b08ce | ||
|
|
3f49e5f8ef | ||
|
|
7c8575bfa5 | ||
|
|
102a7e10cc | ||
|
|
9148764d20 | ||
|
|
ce619415de | ||
|
|
745807007f | ||
|
|
e85b3f70aa | ||
|
|
edc0fe4fbe | ||
|
|
3cceec9044 | ||
|
|
18602855da | ||
|
|
72c223f72e | ||
|
|
c6b3c45412 | ||
|
|
c60a04f530 | ||
|
|
f7430ab1a6 | ||
|
|
827398228c | ||
|
|
a264bb36cb | ||
|
|
c24e63ec4c | ||
|
|
6519570839 | ||
|
|
2c88544158 | ||
|
|
d0722d3677 | ||
|
|
d2b404763b | ||
|
|
88fb9e4df3 | ||
|
|
440ec276d3 | ||
|
|
6e91b90c48 | ||
|
|
0bfc8c5ed6 | ||
|
|
63547c2ea1 | ||
|
|
efecf1bbb7 | ||
|
|
682b8c2a9c | ||
|
|
88295e8c1e | ||
|
|
6764f15fd0 | ||
|
|
8b8ee8693e | ||
|
|
fe89001166 | ||
|
|
416a18377c | ||
|
|
8fda38184c | ||
|
|
280e9260f7 | ||
|
|
22642c1095 | ||
|
|
d68b2047b0 | ||
|
|
7240f034e5 | ||
|
|
97ce41e363 | ||
|
|
31a8abc3b8 | ||
|
|
6b49bfd4c4 | ||
|
|
985b4aab3f | ||
|
|
a4e7c3a61a | ||
|
|
d82d8781c4 | ||
|
|
b4c3f92ba3 | ||
|
|
1c57d2eab8 | ||
|
|
409de77b2c | ||
|
|
3e22e24dc9 | ||
|
|
17b1bdacfe | ||
|
|
b570fdbc89 | ||
|
|
cceb0f4e5e | ||
|
|
04f8c7f7e2 | ||
|
|
37aca89af7 | ||
|
|
5445a496db | ||
|
|
0ab93b142c | ||
|
|
d39dc76949 | ||
|
|
c6abd7b62b | ||
|
|
0e572db832 | ||
|
|
602bb15b47 | ||
|
|
b4882285c4 | ||
|
|
834b27bdad | ||
|
|
7db148a5a1 | ||
|
|
9e332095a2 | ||
|
|
7bf950026b | ||
|
|
f246444d89 | ||
|
|
8e84aea1bf | ||
|
|
d6a7a944cc | ||
|
|
fb478d3c7b | ||
|
|
24f8a8fdba | ||
|
|
28bbe0ee19 | ||
|
|
c21ca2062e | ||
|
|
e3e289a27c | ||
|
|
9540f6b9d3 | ||
|
|
539943fb0f | ||
|
|
7a8ebffd40 | ||
|
|
3d48f4e210 |
31
.github/issue_template.md
vendored
Normal file
31
.github/issue_template.md
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<!--- Provide a general summary of the issue in the Title above -->
|
||||||
|
<!--- https://guides.github.com/features/mastering-markdown/#examples -->
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
<!--- If you're describing a bug, tell us what should happen -->
|
||||||
|
<!--- If you're suggesting a change/improvement, tell us how it should work -->
|
||||||
|
|
||||||
|
## Current Behavior
|
||||||
|
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
|
||||||
|
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
|
||||||
|
|
||||||
|
## Possible Solution
|
||||||
|
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
||||||
|
<!--- or ideas how to implement the addition or change -->
|
||||||
|
|
||||||
|
## Steps to Reproduce (for bugs)
|
||||||
|
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
||||||
|
<!--- reproduce this bug. Include code to reproduce, if relevant, or attach screenshots -->
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
4.
|
||||||
|
|
||||||
|
## Context
|
||||||
|
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||||
|
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||||
|
|
||||||
|
## Your Environment
|
||||||
|
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||||
|
* SNMP::Info version used:
|
||||||
|
* Netdisco version (if used):
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -1 +1,12 @@
|
|||||||
*.db
|
*.swp
|
||||||
|
*.pid
|
||||||
|
test.pl
|
||||||
|
MYMETA.*
|
||||||
|
*.tar.gz
|
||||||
|
MANIFEST.*
|
||||||
|
*.komodo*
|
||||||
|
Makefile*
|
||||||
|
Build
|
||||||
|
_build
|
||||||
|
blib
|
||||||
|
cover_db
|
||||||
|
|||||||
29
.travis.yml
Normal file
29
.travis.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
language: perl
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- jq
|
||||||
|
- libsnmp-dev
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^3\.\d{2}$/
|
||||||
|
- 'master'
|
||||||
|
before_install:
|
||||||
|
- mkdir ~/netdisco-mibs
|
||||||
|
- cd ~/netdisco-mibs
|
||||||
|
install:
|
||||||
|
- curl -sL https://github.com/netdisco/netdisco-mibs/releases/download/4.008/netdisco-mibs.tar.gz | tar --strip-components=1 -zxf -
|
||||||
|
- cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP::MAXTC
|
||||||
|
before_script:
|
||||||
|
- 'cd ${TRAVIS_BUILD_DIR}'
|
||||||
|
script:
|
||||||
|
- >
|
||||||
|
perl Build.PL &&
|
||||||
|
PERL_MM_USE_DEFAULT=1 ./Build installdeps --cpan_client 'cpanm --quiet --notest' &&
|
||||||
|
./Build test --test_files t/ --test_files xt/
|
||||||
|
notifications:
|
||||||
|
irc:
|
||||||
|
on_success: change
|
||||||
|
on_failure: always
|
||||||
|
channels:
|
||||||
|
- 'chat.freenode.net#netdisco'
|
||||||
50
Build.PL
Normal file
50
Build.PL
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Module::Build;
|
||||||
|
|
||||||
|
Module::Build->new(
|
||||||
|
module_name => 'SNMP::Info',
|
||||||
|
license => 'bsd',
|
||||||
|
dist_author => 'Eric A. Miller <emiller@cpan.org>',
|
||||||
|
# dynamic_config => 1,
|
||||||
|
create_readme => 1,
|
||||||
|
configure_requires => {
|
||||||
|
'Module::Build' => '0.42',
|
||||||
|
},
|
||||||
|
# build_requires => {
|
||||||
|
# },
|
||||||
|
requires => {
|
||||||
|
'SNMP' => '0',
|
||||||
|
'Math::BigInt' => '0',
|
||||||
|
},
|
||||||
|
recommends => {
|
||||||
|
'PPI' => '0',
|
||||||
|
'Class::ISA' => '0',
|
||||||
|
'Module::Info' => '0',
|
||||||
|
'Module::Load' => '0',
|
||||||
|
'File::Slurp' => '0',
|
||||||
|
},
|
||||||
|
test_requires => {
|
||||||
|
'Test::More' => '0.88',
|
||||||
|
'Test::Distribution' => '0',
|
||||||
|
'Test::Class::Most' => '0',
|
||||||
|
'Test::MockObject::Extends' => '0',
|
||||||
|
'File::Find' => '0',
|
||||||
|
'Path::Class' => '0',
|
||||||
|
'File::Slurper' => '0',
|
||||||
|
'Test::Exception' => '0.43',
|
||||||
|
'Class::Inspector' => '0',
|
||||||
|
},
|
||||||
|
# script_files => [
|
||||||
|
# ],
|
||||||
|
# share_dir => 'share',
|
||||||
|
meta_merge => {
|
||||||
|
resources => {
|
||||||
|
homepage => 'http://netdisco.org/',
|
||||||
|
bugtracker => 'https://github.com/netdisco/snmp-info/issues',
|
||||||
|
repository => 'https://github.com/netdisco/snmp-info',
|
||||||
|
MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users',
|
||||||
|
IRC => 'irc://irc.freenode.org/#netdisco',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)->create_build_script;
|
||||||
@@ -1,4 +1,595 @@
|
|||||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
|
Version 3.56 (2018-04-22)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix table methods when defined as an OID which will not completely
|
||||||
|
translate to a fully qualified textual leaf
|
||||||
|
|
||||||
|
Version 3.55 (2018-04-19)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
* #260 Oneaccess (robwwd)
|
||||||
|
* #259 Add ERX (Old Juniper E-Series JunOSe) Support (robwwd)
|
||||||
|
* #258 Add support for Arbor devices (robwwd)
|
||||||
|
* #253 Nexans switch support (paecker)
|
||||||
|
* #142 Sixnet Switch Support
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #117 Recognition for HP Blade switches (J R Binks)
|
||||||
|
* #196 Support for powerconnect 8164F
|
||||||
|
* Refactor Layer3::Dell for better support of newer models
|
||||||
|
* Increase capture of i_vlan on router interfaces in L3::Cisco
|
||||||
|
* Factor out logic to determine serial number from ENTITY-MIB in Layer2 and
|
||||||
|
Layer3 to new method entity_derived_serial in Entity class and added new
|
||||||
|
method entity_derived_os_ver in Entity class to determine OS version
|
||||||
|
in a similar manner
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #67 Juniper EX4300 Missing/Wrong information
|
||||||
|
* #61 ZyXEL (X)GS1900 family MIB - Fix loop in layers method
|
||||||
|
* Fix ISA in AMAP and EDP classes
|
||||||
|
* Add missing MIB in L2::Trapeze, L2::NWSS2300, and L3::Dell
|
||||||
|
* Fix gigabit logic in i_duplex_admin() of CiscoStack
|
||||||
|
* Prevent potential undefined warnings in i_speed_admin() of L2::C2900 and
|
||||||
|
ports() of L3::C3550
|
||||||
|
* Correct validation and IID/key used in mau_set_i_speed_admin() and
|
||||||
|
mau_set_i_duplex_admin() of MAU
|
||||||
|
* Correct typo in MIB leaf names in L3::Aironet
|
||||||
|
* Don't use MIB leafs that are not-accessible according to MIB
|
||||||
|
NOTE: Fixing this logic now results in methods on MIB leafs specified as
|
||||||
|
not-accessible failing validation in _validate_autoload_method()
|
||||||
|
|
||||||
|
Version 3.54 (2018-04-01)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #141 Avocent ACS files for correct discovery in Netdisco
|
||||||
|
* Add support for Avocent ACS 5K/6K/8K terminal servers in Layer1::Cyclades
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #215 Nokia/Alcatel-Lucent 7705 LLDP
|
||||||
|
* #220 Alcatel-Lucent / Nokia SR 7750 missing neighbors
|
||||||
|
* Improve Layer3::Timetra model detection
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix logic in Layer1::Asante i_up() method
|
||||||
|
* Fix MIB leaf typo in IPv6
|
||||||
|
* Don't use MIB leafs that are not-accessible according to MIB
|
||||||
|
* Fix logic for determining if MIB leaf supports set operations
|
||||||
|
NOTE: Fixing this logic now results in methods starting with set_ on MIB
|
||||||
|
leafs without Write or Create access failing validation in
|
||||||
|
_validate_autoload_method()
|
||||||
|
|
||||||
|
Version 3.53 (2018-03-22)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* #12 add Cisco PortFast support via CiscoStpExtensions::i_faststart_enabled
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Report serial/version on Netgear FSM (paecker)
|
||||||
|
* Add test harness and expand developer test coverage
|
||||||
|
* Add back the base (RFC) MIBs for when net-snmp does not have them builtin
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix AUTOLOAD / can() bug that could result in DESTROY being redefined and
|
||||||
|
dynamic methods not being added to the symbol table.
|
||||||
|
|
||||||
|
version 3.52 (2018-03-19)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* set fallback for nonmatching interfaces in Cumulus class
|
||||||
|
* better interface naming for Ubiquiti
|
||||||
|
* modify mock utility to work under a perlbrew environment
|
||||||
|
|
||||||
|
version 3.50 (2018-03-14)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #198 Add Support for Gigamon devices
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #226 Avaya VSP devices - no ifAlias
|
||||||
|
* #227 Remove bogus can() check in _set()
|
||||||
|
* Fix SNMP::Info::IEEE802dot3ad when more than 1 LAG
|
||||||
|
|
||||||
|
version 3.49 (2018-03-03)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Better Layer3::Cumulus interface naming
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Use GitHub for MIBs download for testing, instead of sf.net
|
||||||
|
|
||||||
|
version 3.48 (2018-03-03)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add Layer3::Cumulus for Cumulus Networks devices
|
||||||
|
|
||||||
|
version 3.47 (2018-02-27)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add LLDP-MIB::lldpXMedRemInventoryTable methods
|
||||||
|
|
||||||
|
version 3.46 (2018-02-17)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add method to get err-disable cause for interfaces on Cisco
|
||||||
|
|
||||||
|
version 3.45 (2018-02-14)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Enable Layer3::Foundry for Brocade VDX platform
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #222 #238 #239 handle BayStack switches with port index 128 (zoeloe)
|
||||||
|
|
||||||
|
version 3.44 (2018-02-12)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Improve F10 OS version detection (laelly)
|
||||||
|
* Better IPv6 prefix derivation
|
||||||
|
|
||||||
|
version 3.43 (2018-02-02)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix identification of Brocade CES
|
||||||
|
|
||||||
|
version 3.42 (2018-02-02)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* IPv6 Prefix Length support via IPv6::ipv6_addr_prefixlength
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix test for updated snmplabs.com data
|
||||||
|
|
||||||
|
version 3.41 (2018-02-01)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fixes to distriution metadata
|
||||||
|
|
||||||
|
version 3.40 (2018-01-28)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #240 Support for CheckPoint devies through SNMP
|
||||||
|
* #240 Cisco SB switches fixup
|
||||||
|
* #244 Add Adtran support
|
||||||
|
* #241 Vyatta/VyOS support
|
||||||
|
* #246 Nexus VRF support (works with Netdisco)
|
||||||
|
* #244 Improve Juniper model reporting
|
||||||
|
* #240 Improve H3C reporting
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #243 Nexus additional debug lines should be hidden
|
||||||
|
|
||||||
|
version 3.39 (2017-12-17)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* #236 Enhanced Ubiquiti device support (L. Begnaud)
|
||||||
|
* add HP J9774A model (H. Teulahti)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* fix scripts (F. Mass)
|
||||||
|
* fix CiscoASA typos (laelly)
|
||||||
|
|
||||||
|
version 3.38 (2017-10-23)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Layer2::Airespace several newer 802.11 data rates added
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #232 Improve generic Info::Layer3 serial number detection
|
||||||
|
|
||||||
|
version 3.37 (2017-07-11)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Layer3::Juniper fixed to return os_ver for JUNOS 14.x and higher
|
||||||
|
|
||||||
|
version 3.36 (2017-06-28)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Migrate to Module::Build for distribution maintenance
|
||||||
|
|
||||||
|
version 3.35 (2017-06-28)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Include loading of LLDP-EXT-MED-MIB in LLDP.pm
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* #180 support CiscoConfig on Nexus (sf.net:scratchfury)
|
||||||
|
* #50 remove interface specific part from vrf interfaces on IOS (W. Vandersmissen)
|
||||||
|
* #211 f5 class should respect UseEnums when faking i_type
|
||||||
|
|
||||||
|
version 3.34 (2016-11-20)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Support Cisco IPS Modules homed on the Cisco ASA (M. Kraus)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Serial number on Nexus 9372 (genereic check for ID before using) (M. Caines)
|
||||||
|
|
||||||
|
version 3.33 (2016-04-27)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Move author-only tests to xt directory so they aren't run on installation
|
||||||
|
by users
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Correct device serial number reporting for Cisco Nexus 5k switches with
|
||||||
|
software version >= 7
|
||||||
|
|
||||||
|
version 3.32 (2016-04-26)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add 200 Mbps and 2.0 Gbps aliases to SPEED_MAP
|
||||||
|
* Add Palo Alto support
|
||||||
|
* Add VMware support
|
||||||
|
* Support for propMultiplexor as ifType
|
||||||
|
* Add device MAC to APC UPS
|
||||||
|
* [#61] Report APC model for PDU products
|
||||||
|
* Removed DeviceMatrix from the distribution
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Support undefined (noSuchInstance) values in Offline mode
|
||||||
|
* Do not init table cache if Cache provided by user
|
||||||
|
* Avoid deep recusion when AUTOLOAD and carp collide
|
||||||
|
* Detect Cisco VG350s as L3 devices instead of APs
|
||||||
|
* fix for 'Use of inherited AUTOLOAD for non-method SNMP::Info::Layer2::HP::agg_ports_ifstack() is deprecated'
|
||||||
|
* Workaround in IPv6.pm to deal with possibly incorrect IPV6-MIB implementations
|
||||||
|
* [#71] AUTOLOAD typo-catcher search for SNMP::Info no longer anchored
|
||||||
|
* [#70] Respect version/comm/secname on passed Session obj
|
||||||
|
|
||||||
|
version 3.31 (2016-01-22)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Support for CiscoSB OS and Version (D. Tuecks)
|
||||||
|
* SONMP support for Enhanced Topology Table
|
||||||
|
* Add support for channelized interfaces in L3::Passport
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Correct link to MIB tarball
|
||||||
|
|
||||||
|
version 3.30 (2015-11-16)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* RT #106254: Add new sysObjectID mapping for Ubiquiti
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Correct link to MIB tarball
|
||||||
|
* Correct port indexing of newer VSP 4K and 8K in L3::Passport
|
||||||
|
* Statistics in the sysIfxStatTable are 64-bit counters, so they should
|
||||||
|
override the 64-bit methods.
|
||||||
|
|
||||||
|
version 3.29 (2015-10-13)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add IPv6::ipv6_addr() method to map IPv6 interface address indexes to actual addresses
|
||||||
|
* Add support for (remote) IPv6 addresses to LLDP::lldp_addr()
|
||||||
|
* Add LLDP::lldp_ipv6() and LLDP::lldp_mac() so that remote management
|
||||||
|
addresses of specific types can be requested
|
||||||
|
|
||||||
|
version 3.28 (2015-06-18)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add Layer3::Huawei class for Huawei Quidway switches
|
||||||
|
* Modified generic Layer3::Cisco class: use community based indexing if
|
||||||
|
the device returns a value for vtpVersion
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Correct port indexing of VSP 4K in L3::Passport
|
||||||
|
|
||||||
|
version 3.27 (2015-05-05)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Cisco Aironet PSU information
|
||||||
|
* Only log adding mibdirs at debug level 2
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* [#221] Drop Cisco Voice VLAN 4096
|
||||||
|
|
||||||
|
version 3.26 (2015-03-07)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add fan and psu reporting to Layer3::Dell
|
||||||
|
* Include Voice VLANs in (tagged) VLAN Membership on Cisco devices
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix typo in MRO::print_superclasses
|
||||||
|
|
||||||
|
version 3.25 (2015-02-25)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add new model name mappings for to Layer2::HP
|
||||||
|
|
||||||
|
version 3.24 (2015-02-04)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Support RSTP and ieee8021d STP operating modes in RapidCity
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix single instance leafs defined in %FUNCS to behave like table leafs
|
||||||
|
* Fix incorrect FDB ID to VLAN ID mapping in Bridge and L3:Enterasys
|
||||||
|
|
||||||
|
version 3.23 (2014-12-09)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Update MIB used in L1::Asante
|
||||||
|
* Enhanced STP support for L3::Extreme
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix Cisco VLAN membership issue introduced in 3.22 related to capturing
|
||||||
|
port VLANs on Cisco interfaces which are configured for trunking but
|
||||||
|
are not in operational trunking mode
|
||||||
|
|
||||||
|
version 3.22 (2014-12-02)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* Support obtaining FDB in Avaya SPBM edge deployments in L2::Baystack
|
||||||
|
NOTE: This requires a RAPID-CITY MIB with the rcBridgeSpbmMacTable
|
||||||
|
* Support for Fortinet devices in new class L3::Fortinet
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Include LLDP support in base Layer2 and Layer3 classes. Due to the
|
||||||
|
widespread adoption of LLDP, this should improve mapping networks
|
||||||
|
when devices aren't supported in a more specific class.
|
||||||
|
* No longer ignore interfaces based on name, in base L2/L3/L7 device
|
||||||
|
classes. For several device classes SNMP::Info will now return tunnel
|
||||||
|
interfaces and/or loopbacks, if present.
|
||||||
|
* Use dot1qVlanCurrentTable if available to capture dynamic and static
|
||||||
|
VLANs, fall back to dot1qVlanStaticTable if not available.
|
||||||
|
* New method i_vlan_membership_untagged() for VLANs transmitted as
|
||||||
|
untagged frames.
|
||||||
|
* Capture Aruba AP hardware and software version when available
|
||||||
|
* New STP methods to support gathering information from devices running
|
||||||
|
mutiple STP instances such as PVST and MST
|
||||||
|
* Enhanced STP support for Avaya and Foundry classes
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* [#64] Misdetection: Wireless APs, add products MIB to L2::3Com
|
||||||
|
* Use FDB ID to VID mapping if available to determine end station VLAN
|
||||||
|
rather than assuming they are the same.
|
||||||
|
* Capture port VLANs on Cisco interfaces which are configured for
|
||||||
|
trunking but are not in operational trunking mode
|
||||||
|
* Correct munging of stp_p_port(), i_stp_port(), and stp_root() methods
|
||||||
|
in Bridge
|
||||||
|
* In LLDP.pm don't create a variable in a conditional
|
||||||
|
|
||||||
|
version 3.20 (2014-09-08)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* Override layers in Juniper for routers with switch modules
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Update MANIFEST to include Ubiquiti files
|
||||||
|
|
||||||
|
version 3.19 (2014-08-01)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* Support for Ubiquiti Access Points in new class L2::Ubiquiti (begemot)
|
||||||
|
* Preliminary support for 3Com switches in new class L2::3Com (begemot)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Fix Avaya detection lldp_port()
|
||||||
|
* Silence uninitialized value warning in L3::Cisco
|
||||||
|
* H3C fixes (begemot)
|
||||||
|
* Only use L2::ZyXEL_DSLAM for ZyXEL DSL modules
|
||||||
|
|
||||||
|
version 3.18 (2014-07-02)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Pseudo ENTITY-MIB methods added to L3::Tasman for hardware information
|
||||||
|
* Capture VPC Keepalive IP addresses in L3::Nexus (jeroenvi)
|
||||||
|
* L2::Netgear inheritance clean up and removal of unnecessary c_* methods
|
||||||
|
defined in Info base class
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Correctly identify device type (class) for instantiated objects which
|
||||||
|
have overridden layers.
|
||||||
|
* [#58] Fix inheritance in L3::FWSM and L3::CiscoASA
|
||||||
|
* [#71] Don't try to match on a false port description in lldp_if
|
||||||
|
* [#54] Possible bad values returned for cdp_id and lldp_port with some HP
|
||||||
|
gear (Joel Leonhardt)
|
||||||
|
|
||||||
|
version 3.17 (2014-06-23)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* POD tests are not required for distribution.
|
||||||
|
|
||||||
|
version 3.16 (2014-06-23)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Add method resolution discovery in SNMP::Info::MRO helper module
|
||||||
|
* Consolidate CiscoImage class into CiscoStats class
|
||||||
|
* Clean up inheritance for Cisco classes. With this change
|
||||||
|
all applicable classes now inherit CiscoAgg, CiscoStpExtensions,
|
||||||
|
CiscoPortSecurity, CiscoPower, and LLDP classes.
|
||||||
|
* Remove inheritance of classes the devices do not support in L3::FWSM
|
||||||
|
and L3::CiscoASA
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Use CiscoVTP methods to get interface VLAN in L3::Cisco rather than
|
||||||
|
solely relying on the interface description.
|
||||||
|
|
||||||
|
version 3.15 (2014-07-10)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* Offline mode and Cache export/priming.
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Return serial number for Cisco 3850 from entPhysicalSerialNum
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Cisco SB serial number probably did not work
|
||||||
|
|
||||||
|
version 3.14 (2014-06-07)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Improvements to Mikrotik module (Alex Z)
|
||||||
|
* Don't unshift length from broken lldpRemManAddrTable implementations (G. Shtern)
|
||||||
|
* 802.3ad LAG support in Layer3::H3C
|
||||||
|
* Add LLDP capabilities to Layer2::HPVC class
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Return correct VLAN info with qb_fw_table() on Layer2::HP
|
||||||
|
|
||||||
|
version 3.13 (2014-03-27)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Cisco PAgP support added to LAG method
|
||||||
|
* HP ProCurve LAG support by inheriting Info::Aggregate class
|
||||||
|
|
||||||
|
version 3.12 (2014-02-10)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Modify L3::Passport to obtain forwarding table information from
|
||||||
|
RAPID-CITY if information is not available in either Q-BRIDGE-MIB or
|
||||||
|
BRIDGE-MIB. Needed for VSP 9000 prior to version 4.x (Tobias Gerlach)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* [#52] NETSCREEN-IP-ARP-MIB considered harmful
|
||||||
|
* Foundry/Brocade aggreate port master ifIndex resolved properly
|
||||||
|
|
||||||
|
version 3.11 (2014-01-26)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* [#31] port-channel (aggregate) support. Aggregate support added in new
|
||||||
|
agg_ports() method. Inital support added for Arista (ifStack),
|
||||||
|
Avaya (MLT), Brocade (MST), and Cisco (802.3ad).
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Use Q-BRIDGE-MIB as default with fallback to BRIDGE-MIB across all
|
||||||
|
classes for the fw_mac, fw_port, and fw_status methods
|
||||||
|
* Additional support for Avaya 8800 series in L3::Passport
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Modify cdp_cap() to handle devices which return space delimited strings
|
||||||
|
for cdpCacheCapabilities rather than hex strings
|
||||||
|
* [#51] Netdisco shows broken topology for devices with no alias entry
|
||||||
|
for primary IP - Collect nsIfMngIp when getting IP interfaces in
|
||||||
|
L3::Netscreen
|
||||||
|
* Fix Extreme XOS i_vlan_membership - Revert [28bbe0], fix bug with
|
||||||
|
untagged being added to @ret twice (Robert Kerr)
|
||||||
|
* Skip default CPU management addresses on VSP and 8800/8600 series in
|
||||||
|
L3::Passport to prevent erroneous duplicate addresses
|
||||||
|
|
||||||
|
version 3.10 (2013-12-16)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Data values of zero are now sent to munge method instead of skipped
|
||||||
|
|
||||||
|
version 3.09 (2013-12-15)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* [#45] IBM (Blade Network Technologies) Rackswitch support in new class
|
||||||
|
L3::IBMGbTor
|
||||||
|
* [] set_i_untagged combines both set_i_vlan and set_i_pvid in one method
|
||||||
|
* [#41] Riverbed Steelhead support added in new class L3::Steelhead
|
||||||
|
* New c_cap(), cdp_cap(), and lldp_cap() methods which return a hash of
|
||||||
|
arrays with each array containing the system capabilities reported as
|
||||||
|
supported by the remote system via CDP or LLDP.
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Remove "Switch" from model name in L3::Foundry
|
||||||
|
* [#49] IOS-XR support, add identification of IOS XR and version in
|
||||||
|
CiscoStats
|
||||||
|
* Aruba POE Support
|
||||||
|
* Aruba utilizes Q-BRIDGE-MIB when available for VLAN information to
|
||||||
|
better support wired switches
|
||||||
|
* Add lldp_platform() method which uses lldp_rem_sysdesc() or
|
||||||
|
lldp_rem_sysname() to provide a clue to type of remote LLDP capable
|
||||||
|
device.
|
||||||
|
* [RT#78232] Extend cdpCacheCapabilities to show more CDP bits
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Modify _xos_i_vlan_membership() in L3::Extreme to only include tagged
|
||||||
|
ports
|
||||||
|
* When determining the BSSID in Airespace there is only one hexadecimal
|
||||||
|
digit available so skip if outside the range of 1-16, 17 is reserved
|
||||||
|
for 3rd party AP's
|
||||||
|
* Don't assume entity index 1 is the chassis and has serial in Layer3
|
||||||
|
* Capture serial number on newer Aruba devices
|
||||||
|
* munge_bits() correctly unpacks BITS
|
||||||
|
* Fix for single instance table leafs in test_class_mocked.pl
|
||||||
|
* Fix power module indexing
|
||||||
|
|
||||||
version 3.08 (2013-10-22)
|
version 3.08 (2013-10-22)
|
||||||
|
|
||||||
@@ -33,7 +624,7 @@ version 3.08 (2013-10-22)
|
|||||||
* [#68] Fix device_port entries for switches with non-unique
|
* [#68] Fix device_port entries for switches with non-unique
|
||||||
ifDesc (Nic Bernstein)
|
ifDesc (Nic Bernstein)
|
||||||
* Don't try to munge undef values
|
* Don't try to munge undef values
|
||||||
* [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
|
* [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
|
||||||
* Silence warning from uninitialized variable in L3::Passport e_descr()
|
* Silence warning from uninitialized variable in L3::Passport e_descr()
|
||||||
|
|
||||||
version 3.07 (2013-10-01)
|
version 3.07 (2013-10-01)
|
||||||
@@ -60,12 +651,11 @@ version 3.05 (2013-08-16)
|
|||||||
Layer2/CiscoSB class
|
Layer2/CiscoSB class
|
||||||
* Add proper LLDP support to Netgear.pm
|
* Add proper LLDP support to Netgear.pm
|
||||||
* Change $netgear->interfaces() to use ifName rather than ifDescr
|
* Change $netgear->interfaces() to use ifName rather than ifDescr
|
||||||
as the former is unique per interface while the latter is not.
|
as the former is unique per interface while the latter is not.
|
||||||
If ifName is not present, concatenate ifDescr and ifIndex
|
If ifName is not present, concatenate ifDescr and ifIndex
|
||||||
to achieve a unique value.
|
to achieve a unique value.
|
||||||
* Properly report hardware version, Serial No. and OS Version for
|
* Properly report hardware version, Serial No. and OS Version for
|
||||||
Netgear.
|
Netgear.
|
||||||
|
|
||||||
|
|
||||||
version 3.03 (2013-07-11)
|
version 3.03 (2013-07-11)
|
||||||
|
|
||||||
@@ -95,7 +685,7 @@ version 3.01 (2013-04-13)
|
|||||||
they can be called directly, sonmp_ip(), cdp_ip(), etc.
|
they can be called directly, sonmp_ip(), cdp_ip(), etc.
|
||||||
* L2::Bay and L2::Foundry have been removed from the distribution. Both
|
* L2::Bay and L2::Foundry have been removed from the distribution. Both
|
||||||
classes were depreciated and all functionality is available through
|
classes were depreciated and all functionality is available through
|
||||||
L2::Baystack and L3::Foundry.
|
L2::Baystack and L3::Foundry.
|
||||||
|
|
||||||
[NEW FEATURES]
|
[NEW FEATURES]
|
||||||
|
|
||||||
@@ -125,7 +715,7 @@ version 3.01 (2013-04-13)
|
|||||||
|
|
||||||
[ENHANCEMENTS]
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
* UNIVERSAL::can() now works with dynamic methods
|
* UNIVERSAL::can() now works with dynamic methods
|
||||||
* Dynamically generated methods are added to symbol table to avoid
|
* Dynamically generated methods are added to symbol table to avoid
|
||||||
AUTOLOAD on subsequent calls
|
AUTOLOAD on subsequent calls
|
||||||
* L2::Airespace now supports 802.11n client tx rates
|
* L2::Airespace now supports 802.11n client tx rates
|
||||||
@@ -157,20 +747,20 @@ version 2.09 (2012-11-28)
|
|||||||
* New method i_ssidmac() to get BSSID's from AP's with initial support
|
* New method i_ssidmac() to get BSSID's from AP's with initial support
|
||||||
in L2::Aironet and Airespace classes
|
in L2::Aironet and Airespace classes
|
||||||
* Support for Avaya Secure Routers in new class L3::Tasman
|
* Support for Avaya Secure Routers in new class L3::Tasman
|
||||||
* Add EDP and LLDP L2 Topology to L3::Extreme
|
* Add EDP and LLDP L2 Topology to L3::Extreme
|
||||||
* [3185393] Support for Juniper SSL VPN in new class L7::Neoteris
|
* [3185393] Support for Juniper SSL VPN in new class L7::Neoteris
|
||||||
* [3381027] Support for Cisco Nexus in new class L3::Nexus
|
* [3381027] Support for Cisco Nexus in new class L3::Nexus
|
||||||
* [1424336] Support for Extreme Discovery Protocol (EDP)
|
* [1424336] Support for Extreme Discovery Protocol (EDP)
|
||||||
|
|
||||||
[ENHANCEMENTS]
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
* [3017571] Add LLDP support for NetSNMP device class (begemot)
|
* [3017571] Add LLDP support for NetSNMP device class (begemot)
|
||||||
* [3418918] Extreme devices now report OS as either extremeware or xos
|
* [3418918] Extreme devices now report OS as either extremeware or xos
|
||||||
* [2809045] Strip preceding netscreen from model name in L3::Netscreen
|
* [2809045] Strip preceding netscreen from model name in L3::Netscreen
|
||||||
* [] Classify Linksys 2024 as L3::Dell (Rogier Krieger)
|
* [] Classify Linksys 2024 as L3::Dell (Rogier Krieger)
|
||||||
|
|
||||||
[BUG FIXES]
|
[BUG FIXES]
|
||||||
|
|
||||||
* Fixed logic to return cached data for table methods when available and
|
* Fixed logic to return cached data for table methods when available and
|
||||||
not a partial fetch
|
not a partial fetch
|
||||||
* Fix typo in PoD for Bridge.pm and CiscoConfig.pm (William Bulley)
|
* Fix typo in PoD for Bridge.pm and CiscoConfig.pm (William Bulley)
|
||||||
@@ -190,7 +780,7 @@ version 2.08 (2012-07-15)
|
|||||||
|
|
||||||
* Pseudo ENTITY-MIB methods added to L3::Juniper for hardware information
|
* Pseudo ENTITY-MIB methods added to L3::Juniper for hardware information
|
||||||
* Add method to report current transmit power of the radio interface,
|
* Add method to report current transmit power of the radio interface,
|
||||||
dot11_cur_tx_pwr_mw(), in Airespace class
|
dot11_cur_tx_pwr_mw(), in Airespace class
|
||||||
* [3085411] Activate L3 properties for Netgear GSM7224v2 (phishphreek)
|
* [3085411] Activate L3 properties for Netgear GSM7224v2 (phishphreek)
|
||||||
* [3085413] SNMP OIDs for Netgear Serial and OS Ver (phishphreek)
|
* [3085413] SNMP OIDs for Netgear Serial and OS Ver (phishphreek)
|
||||||
* [3286549] Dell LLDP Support (Nico Giefing)
|
* [3286549] Dell LLDP Support (Nico Giefing)
|
||||||
@@ -239,7 +829,7 @@ version 2.06 (2011-09-28)
|
|||||||
* [3344843] Fix returning serial() and os_ver() for web-managable HP
|
* [3344843] Fix returning serial() and os_ver() for web-managable HP
|
||||||
switches, introduced by HP/HP4000 class split, reported by J R Binks
|
switches, introduced by HP/HP4000 class split, reported by J R Binks
|
||||||
* [2809033] Put L2-only Cisco blade switches in L3::C6500
|
* [2809033] Put L2-only Cisco blade switches in L3::C6500
|
||||||
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
|
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
|
||||||
incomplete (Michael Borgelt)
|
incomplete (Michael Borgelt)
|
||||||
|
|
||||||
version 2.05 (2011-06-23)
|
version 2.05 (2011-06-23)
|
||||||
@@ -255,13 +845,13 @@ version 2.04 (2011-03-31)
|
|||||||
(Brian De Wolf)
|
(Brian De Wolf)
|
||||||
+ Added L3::Pf for FreeBSD PFSense Firewalls (max)
|
+ Added L3::Pf for FreeBSD PFSense Firewalls (max)
|
||||||
* Added specific functions for neighbor mgmt addresses to CDP class
|
* Added specific functions for neighbor mgmt addresses to CDP class
|
||||||
* Implemented os_bin() method in CiscoStats
|
* Implemented os_bin() method in CiscoStats
|
||||||
+ [2980787] Fix for C1900 bp_index not containing interfaces.
|
+ [2980787] Fix for C1900 bp_index not containing interfaces.
|
||||||
(Brian De Wolf)
|
(Brian De Wolf)
|
||||||
+ [2599795] Added vendor_i_type() method to HP and HP4000 clases
|
+ [2599795] Added vendor_i_type() method to HP and HP4000 clases
|
||||||
+ [2688801] Minor modification for obscure Proxim/Orinoco device
|
+ [2688801] Minor modification for obscure Proxim/Orinoco device
|
||||||
(jrbinks)
|
(jrbinks)
|
||||||
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
|
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
|
||||||
classes (jeroenvi)
|
classes (jeroenvi)
|
||||||
* Minor tweaks to support devices without sysServices
|
* Minor tweaks to support devices without sysServices
|
||||||
* Added Cisco CBS3xxx blade switches to L3::C6500
|
* Added Cisco CBS3xxx blade switches to L3::C6500
|
||||||
@@ -299,7 +889,7 @@ version 2.00 (08/01/08)
|
|||||||
+ Support for Alcatel-Lucent Service Router via L3::Timetra
|
+ Support for Alcatel-Lucent Service Router via L3::Timetra
|
||||||
+ Support for Alcatel-Lucent OmniAccess via L2::Aruba
|
+ Support for Alcatel-Lucent OmniAccess via L2::Aruba
|
||||||
|
|
||||||
* Silence warnings in MAU due to uninitialized variables
|
* Silence warnings in MAU due to uninitialized variables
|
||||||
|
|
||||||
version 1.09 (07/22/08) - Beta/developer release
|
version 1.09 (07/22/08) - Beta/developer release
|
||||||
+ Added support for HP ProCurve Foundry OEM switches, such as the 9300
|
+ Added support for HP ProCurve Foundry OEM switches, such as the 9300
|
||||||
@@ -323,7 +913,7 @@ version 1.09 (07/22/08) - Beta/developer release
|
|||||||
+ Add support to specify MIB to resolve leaf names conflicts in
|
+ Add support to specify MIB to resolve leaf names conflicts in
|
||||||
%GLOBALS and %FUNCS.
|
%GLOBALS and %FUNCS.
|
||||||
+ Added munge_port_list() and modify_port_list() methods to assist in
|
+ Added munge_port_list() and modify_port_list() methods to assist in
|
||||||
working with PortList objects.
|
working with PortList objects.
|
||||||
+ Added set_multi() method to enable a SNMP set command on several new
|
+ Added set_multi() method to enable a SNMP set command on several new
|
||||||
values in one request. Required for complex set operations
|
values in one request. Required for complex set operations
|
||||||
on some agents.
|
on some agents.
|
||||||
@@ -350,7 +940,7 @@ version 1.05 (11/25/07) - CVS only. No official release
|
|||||||
Augenstein)
|
Augenstein)
|
||||||
+ Added device specific support for LLDP in L2::HP, L2::Baystack,
|
+ Added device specific support for LLDP in L2::HP, L2::Baystack,
|
||||||
L3::Enterasys and L3::Foundry
|
L3::Enterasys and L3::Foundry
|
||||||
+ Added support for Enterasys devices as new class L3::Enterasys
|
+ Added support for Enterasys devices as new class L3::Enterasys
|
||||||
+ Added support for Dell PowerConnect switches as new class L3::Dell
|
+ Added support for Dell PowerConnect switches as new class L3::Dell
|
||||||
+ Added basic support for generic routers running Microsoft Windows OS
|
+ Added basic support for generic routers running Microsoft Windows OS
|
||||||
as new class L3::Microsoft (begemot)
|
as new class L3::Microsoft (begemot)
|
||||||
@@ -361,7 +951,7 @@ version 1.05 (11/25/07) - CVS only. No official release
|
|||||||
+ Added support for Cisco (Airespace) wireless controllers as new class
|
+ Added support for Cisco (Airespace) wireless controllers as new class
|
||||||
L2::Airespace
|
L2::Airespace
|
||||||
+ Added support for Nortel Ethernet Routing Switch 2500 series and
|
+ Added support for Nortel Ethernet Routing Switch 2500 series and
|
||||||
Business Ethernet Switches (David Siebörger)
|
Business Ethernet Switches (David Siebörger)
|
||||||
+ Update of L3::Foundry to support all Foundry devices including newer
|
+ Update of L3::Foundry to support all Foundry devices including newer
|
||||||
switches. Depreciate L2::Foundry.
|
switches. Depreciate L2::Foundry.
|
||||||
+ Added generic device type detection using IANA assigned enterpise
|
+ Added generic device type detection using IANA assigned enterpise
|
||||||
@@ -374,7 +964,7 @@ version 1.05 (11/25/07) - CVS only. No official release
|
|||||||
+ New class IEEE802dot11 class for generic standards based wireless AP
|
+ New class IEEE802dot11 class for generic standards based wireless AP
|
||||||
support to include i_ssidlist()and i_80211channel() methods.
|
support to include i_ssidlist()and i_80211channel() methods.
|
||||||
+ L2::Orinoco inherits from new IEEE802dot11 for i_ssidlist()and
|
+ L2::Orinoco inherits from new IEEE802dot11 for i_ssidlist()and
|
||||||
i_80211channel() support.
|
i_80211channel() support.
|
||||||
+ Added new VLAN methods i_pvid(), i_vlan_membership(), set_i_pvid(),
|
+ Added new VLAN methods i_pvid(), i_vlan_membership(), set_i_pvid(),
|
||||||
set_i_vlan(), set_add_i_vlan_tagged(), set_remove_i_vlan_tagged() to
|
set_i_vlan(), set_add_i_vlan_tagged(), set_remove_i_vlan_tagged() to
|
||||||
Bridge, CiscoVTP, Extreme, HP, and RapidCity classes.
|
Bridge, CiscoVTP, Extreme, HP, and RapidCity classes.
|
||||||
@@ -436,14 +1026,14 @@ version 1.04 (07/08/06)
|
|||||||
+ Added C1130 and C1240 to L2::Aironet (Ralf Gross)
|
+ Added C1130 and C1240 to L2::Aironet (Ralf Gross)
|
||||||
+ Added detection for Cisco 2960, 2940, 3400 w/ MetroBase
|
+ Added detection for Cisco 2960, 2940, 3400 w/ MetroBase
|
||||||
+ Added generic L2::Cisco Class
|
+ Added generic L2::Cisco Class
|
||||||
* Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS).
|
* Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS).
|
||||||
* Fixed warnings in CiscoStack
|
* Fixed warnings in CiscoStack
|
||||||
* Updated ProCurve HP device detection for newer firmwares
|
* Updated ProCurve HP device detection for newer firmwares
|
||||||
|
|
||||||
version 1.03 (04/14/06) - Beta/developer release
|
version 1.03 (04/14/06) - Beta/developer release
|
||||||
* Use ipNetToMedia table instead of atTable for ARP
|
* Use ipNetToMedia table instead of atTable for ARP
|
||||||
* Remove CiscoStack from Layer3::C4000
|
* Remove CiscoStack from Layer3::C4000
|
||||||
* Fixed bug in MAU class when polling devices without MAU-MIB support
|
* Fixed bug in MAU class when polling devices without MAU-MIB support
|
||||||
|
|
||||||
version 1.01 (04/08/06) - Beta/developer release
|
version 1.01 (04/08/06) - Beta/developer release
|
||||||
+ Change version numbers to X.XX format. Odd releases are beta
|
+ Change version numbers to X.XX format. Odd releases are beta
|
||||||
@@ -509,15 +1099,15 @@ version 1.0 (04/07/06) - CVS only. No official release
|
|||||||
translated properly
|
translated properly
|
||||||
|
|
||||||
verison 0.9 (11/15/04)
|
verison 0.9 (11/15/04)
|
||||||
+ ** Added full Nortel/Bay/BayStack support
|
+ ** Added full Nortel/Bay/BayStack support
|
||||||
by new developer Eric Miller.
|
by new developer Eric Miller.
|
||||||
L2::Bay now depricated.
|
L2::Bay now depricated.
|
||||||
+ Added Alteon Ace support (Eric Miller)
|
+ Added Alteon Ace support (Eric Miller)
|
||||||
+ Added Nortel Cotivity support (Eric Miller)
|
+ Added Nortel Cotivity support (Eric Miller)
|
||||||
+ Added Nortel BayRS support (Eric Miller)
|
+ Added Nortel BayRS support (Eric Miller)
|
||||||
+ Added Nortel Centillion support (Eric Miller)
|
+ Added Nortel Centillion support (Eric Miller)
|
||||||
+ Added Nortel AP 222x support (Eric Miller)
|
+ Added Nortel AP 222x support (Eric Miller)
|
||||||
+ Added Orinco AP support (Eric Miller)
|
+ Added Orinco AP support (Eric Miller)
|
||||||
+ Added i_lastchange() per suggestion of Nicolai Petri
|
+ Added i_lastchange() per suggestion of Nicolai Petri
|
||||||
+ Added BULKWALK patch by Bradley Baetz - This should
|
+ Added BULKWALK patch by Bradley Baetz - This should
|
||||||
greatly speed up requests on SNMPv2c devices.
|
greatly speed up requests on SNMPv2c devices.
|
||||||
@@ -567,27 +1157,27 @@ version 0.6 (06/18/03)
|
|||||||
|
|
||||||
version 0.5 (06/10/03)
|
version 0.5 (06/10/03)
|
||||||
* Added ability to get paritial tables. For example to get the
|
* Added ability to get paritial tables. For example to get the
|
||||||
IP routing table for 128.114.* you can do
|
IP routing table for 128.114.* you can do
|
||||||
$ipr = $dev->ipr_dest('128.114');
|
$ipr = $dev->ipr_dest('128.114');
|
||||||
* Added IP Routing Table entries from RFC1213 to SNMP::Info
|
* Added IP Routing Table entries from RFC1213 to SNMP::Info
|
||||||
* minor bug fixes
|
* minor bug fixes
|
||||||
|
|
||||||
version 0.4 (04/29/03)
|
version 0.4 (04/29/03)
|
||||||
* BIG CHANGE ! Internal Data structure has changed.
|
* BIG CHANGE ! Internal Data structure has changed.
|
||||||
* Added clear_cache() method
|
* Added clear_cache() method
|
||||||
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
|
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
|
||||||
from SNMP Version 1 devices.
|
from SNMP Version 1 devices.
|
||||||
* Methods load_all() and all() have changed their return value. Sorry but
|
* Methods load_all() and all() have changed their return value. Sorry but
|
||||||
the API had to change.
|
the API had to change.
|
||||||
* New object methods snmp_comm(), snmp_ver(), store(), class(), nosuch()
|
* New object methods snmp_comm(), snmp_ver(), store(), class(), nosuch()
|
||||||
to make it more OO happy.
|
to make it more OO happy.
|
||||||
* Globals are now cached
|
* Globals are now cached
|
||||||
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
|
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
|
||||||
detected in device_type()
|
detected in device_type()
|
||||||
* New method specify() returns a new subclass object
|
* New method specify() returns a new subclass object
|
||||||
* Subclasses are automatically loaded when specify or autospecify is used!
|
* Subclasses are automatically loaded when specify or autospecify is used!
|
||||||
* Added methods for Interface statistics (ifInOctets ...)
|
* Added methods for Interface statistics (ifInOctets ...)
|
||||||
* Added methods for Memory and CPU statistics
|
* Added methods for Memory and CPU statistics
|
||||||
* Added SNMP::Info::Entity, moved out of L2-HP
|
* Added SNMP::Info::Entity, moved out of L2-HP
|
||||||
* Added SNMP::Info::Layer2::Aironet
|
* Added SNMP::Info::Layer2::Aironet
|
||||||
|
|
||||||
@@ -600,7 +1190,7 @@ version 0.3 (03/06/03)
|
|||||||
Thanks to Martin Lorensen <martin /at- lorensen.dk>
|
Thanks to Martin Lorensen <martin /at- lorensen.dk>
|
||||||
* Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
|
* Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
|
||||||
so that the Module will install via CPAN without trying to install the old
|
so that the Module will install via CPAN without trying to install the old
|
||||||
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
|
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
|
||||||
Thanks again to Martin Lorensen <martin /at- lorensen.dk>
|
Thanks again to Martin Lorensen <martin /at- lorensen.dk>
|
||||||
* Moved tests from test.pl to t/*
|
* Moved tests from test.pl to t/*
|
||||||
|
|
||||||
@@ -610,10 +1200,10 @@ version 0.2 (02/19/03)
|
|||||||
* Fixed HP Detection in device_type()
|
* Fixed HP Detection in device_type()
|
||||||
* Added Spanning Tree Protocol (STP) methods to SNMP::Info::Bridge
|
* Added Spanning Tree Protocol (STP) methods to SNMP::Info::Bridge
|
||||||
* Removed HP Specific MIBS in SNMP::Info::Layer2 and cleaned up model()
|
* Removed HP Specific MIBS in SNMP::Info::Layer2 and cleaned up model()
|
||||||
* Added poke for Bay 450 Switches
|
* Added poke for Bay 450 Switches
|
||||||
* Mapped HP Part Numbers to model numbers J4812A => 2512 in
|
* Mapped HP Part Numbers to model numbers J4812A => 2512 in
|
||||||
SNMP::Info::Layer2::HP
|
SNMP::Info::Layer2::HP
|
||||||
|
|
||||||
version 0.1 (12/30/02)
|
version 0.1 (12/30/02)
|
||||||
* Initial Release
|
* Initial Release
|
||||||
* SubClasses Included:
|
* SubClasses Included:
|
||||||
@@ -623,13 +1213,13 @@ version 0.1 (12/30/02)
|
|||||||
* SNMP::Info::MAU
|
* SNMP::Info::MAU
|
||||||
* SNMP::Info::Layer1
|
* SNMP::Info::Layer1
|
||||||
o SNMP::Info::Layer1::Allied
|
o SNMP::Info::Layer1::Allied
|
||||||
o SNMP::Info::Layer1::Asante
|
o SNMP::Info::Layer1::Asante
|
||||||
* SNMP::Info::Layer2
|
* SNMP::Info::Layer2
|
||||||
o SNMP::Info::Layer2::Bay
|
o SNMP::Info::Layer2::Bay
|
||||||
o SNMP::Info::Layer2::C1900
|
o SNMP::Info::Layer2::C1900
|
||||||
o SNMP::Info::Layer2::C2900
|
o SNMP::Info::Layer2::C2900
|
||||||
o SNMP::Info::Layer2::Catalyst
|
o SNMP::Info::Layer2::Catalyst
|
||||||
o SNMP::Info::Layer2::HP
|
o SNMP::Info::Layer2::HP
|
||||||
* SNMP::Info::Layer3
|
* SNMP::Info::Layer3
|
||||||
o SNMP::Info::Layer3::Aironet
|
o SNMP::Info::Layer3::Aironet
|
||||||
o SNMP::Info::Layer3::Foundry
|
o SNMP::Info::Layer3::Foundry
|
||||||
1045
DeviceMatrix.txt
1045
DeviceMatrix.txt
File diff suppressed because it is too large
Load Diff
@@ -1,494 +0,0 @@
|
|||||||
# SNMP::Info::Layer3::Nexus
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012 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::Layer3::Nexus;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use Exporter;
|
|
||||||
use SNMP::Info::LLDP;
|
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoPortSecurity;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
|
||||||
use SNMP::Info::CiscoPower;
|
|
||||||
use SNMP::Info::Layer3;
|
|
||||||
use SNMP::Info::CiscoStpExtensions;
|
|
||||||
use SNMP::Info::CiscoVTP;
|
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|
||||||
|
|
||||||
# NOTE : Top-most items gets precedence for @ISA
|
|
||||||
@SNMP::Info::Layer3::Nexus::ISA = qw/
|
|
||||||
SNMP::Info::CiscoVTP
|
|
||||||
SNMP::Info::CiscoStpExtensions
|
|
||||||
SNMP::Info::LLDP
|
|
||||||
SNMP::Info::CDP
|
|
||||||
SNMP::Info::CiscoImage
|
|
||||||
SNMP::Info::CiscoPortSecurity
|
|
||||||
SNMP::Info::CiscoConfig
|
|
||||||
SNMP::Info::CiscoPower
|
|
||||||
SNMP::Info::Layer3
|
|
||||||
Exporter
|
|
||||||
/;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Nexus::EXPORT_OK = qw//;
|
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|
||||||
|
|
||||||
$VERSION = '3.08';
|
|
||||||
|
|
||||||
# NOTE: Order creates precedence
|
|
||||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
|
||||||
# Bridge is called from Layer3 and CiscoStpExtensions
|
|
||||||
# So we want CiscoVTP to come last to get the right one.
|
|
||||||
# The @ISA order should be reverse of these orders.
|
|
||||||
|
|
||||||
%MIBS = (
|
|
||||||
%SNMP::Info::Layer3::MIBS,
|
|
||||||
%SNMP::Info::CiscoPower::MIBS,
|
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::MIBS,
|
|
||||||
%SNMP::Info::CiscoImage::MIBS,
|
|
||||||
%SNMP::Info::CDP::MIBS,
|
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
%SNMP::Info::CiscoStpExtensions::MIBS,
|
|
||||||
%SNMP::Info::CiscoVTP::MIBS,
|
|
||||||
'CISCO-ENTITY-VENDORTYPE-OID-MIB' => 'cevMIBObjects',
|
|
||||||
);
|
|
||||||
|
|
||||||
%GLOBALS = (
|
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoPower::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoImage::GLOBALS,
|
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
|
||||||
'mac' => 'dot1dBaseBridgeAddress',
|
|
||||||
);
|
|
||||||
|
|
||||||
%FUNCS = (
|
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
|
||||||
%SNMP::Info::CiscoPower::FUNCS,
|
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::FUNCS,
|
|
||||||
%SNMP::Info::CiscoImage::FUNCS,
|
|
||||||
%SNMP::Info::CDP::FUNCS,
|
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
%SNMP::Info::CiscoStpExtensions::FUNCS,
|
|
||||||
%SNMP::Info::CiscoVTP::FUNCS,
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
%MUNGE = (
|
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
|
||||||
%SNMP::Info::CiscoPower::MUNGE,
|
|
||||||
%SNMP::Info::CiscoConfig::MUNGE,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::MUNGE,
|
|
||||||
%SNMP::Info::CiscoImage::MUNGE,
|
|
||||||
%SNMP::Info::CDP::MUNGE,
|
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
%SNMP::Info::CiscoStpExtensions::MUNGE,
|
|
||||||
%SNMP::Info::CiscoVTP::MUNGE,
|
|
||||||
);
|
|
||||||
|
|
||||||
sub cisco_comm_indexing { return 1; }
|
|
||||||
|
|
||||||
sub vendor {
|
|
||||||
return 'cisco';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub os {
|
|
||||||
return 'nx-os';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub os_ver {
|
|
||||||
my $nexus = shift;
|
|
||||||
my $descr = $nexus->description();
|
|
||||||
|
|
||||||
return $1 if ( $descr =~ /\),\s+Version\s+(.+?),/ );
|
|
||||||
return $descr;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub serial {
|
|
||||||
my $nexus = shift;
|
|
||||||
|
|
||||||
my $e_parent = $nexus->e_parent();
|
|
||||||
|
|
||||||
foreach my $iid ( keys %$e_parent ) {
|
|
||||||
my $parent = $e_parent->{$iid};
|
|
||||||
if ($parent eq '0') {
|
|
||||||
my $serial = $nexus->e_serial($iid);
|
|
||||||
return $serial->{$iid};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
# sysObjectID returns an IID to an entry in the CISCO-ENTITY-VENDORTYPE-OID-MIB.
|
|
||||||
# Look it up and return it.
|
|
||||||
sub model {
|
|
||||||
my $nexus = shift;
|
|
||||||
my $id = $nexus->id();
|
|
||||||
|
|
||||||
unless ( defined $id ) {
|
|
||||||
print
|
|
||||||
" SNMP::Info::Layer3::Nexus::model() - Device does not support sysObjectID\n"
|
|
||||||
if $nexus->debug();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $model = &SNMP::translateObj($id);
|
|
||||||
|
|
||||||
return $id unless defined $model;
|
|
||||||
|
|
||||||
$model =~ s/^cevChassis//i;
|
|
||||||
return $model;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Reported version 6.x of NX-OS doesn't use the IPv4 address as index
|
|
||||||
# override methods in ipAddrTable
|
|
||||||
sub ip_table {
|
|
||||||
my $nexus = shift;
|
|
||||||
my $orig_ip_table = $nexus->orig_ip_table();
|
|
||||||
|
|
||||||
my %ip_table;
|
|
||||||
foreach my $iid ( keys %$orig_ip_table ) {
|
|
||||||
my $ip = $orig_ip_table->{$iid};
|
|
||||||
next unless defined $ip;
|
|
||||||
|
|
||||||
$ip_table{$ip} = $ip;
|
|
||||||
}
|
|
||||||
return \%ip_table;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub ip_index {
|
|
||||||
my $nexus = shift;
|
|
||||||
my $orig_ip_table = $nexus->orig_ip_table();
|
|
||||||
my $orig_ip_index = $nexus->orig_ip_index();
|
|
||||||
|
|
||||||
my %ip_index;
|
|
||||||
foreach my $iid ( keys %$orig_ip_table ) {
|
|
||||||
my $ip = $orig_ip_table->{$iid};
|
|
||||||
my $index = $orig_ip_index->{$iid};
|
|
||||||
|
|
||||||
next unless ( defined $ip && defined $index );
|
|
||||||
|
|
||||||
$ip_index{$ip} = $index;
|
|
||||||
}
|
|
||||||
return \%ip_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub ip_netmask {
|
|
||||||
my $nexus = shift;
|
|
||||||
my $orig_ip_table = $nexus->orig_ip_table();
|
|
||||||
my $orig_ip_netmask = $nexus->orig_ip_netmask();
|
|
||||||
|
|
||||||
my %ip_netmask;
|
|
||||||
foreach my $iid ( keys %$orig_ip_table ) {
|
|
||||||
my $ip = $orig_ip_table->{$iid};
|
|
||||||
my $netmask = $orig_ip_netmask->{$iid};
|
|
||||||
|
|
||||||
next unless ( defined $ip && defined $netmask );
|
|
||||||
|
|
||||||
$ip_netmask{$ip} = $netmask;
|
|
||||||
}
|
|
||||||
return \%ip_netmask;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub ip_broadcast {
|
|
||||||
my $nexus = shift;
|
|
||||||
my $orig_ip_table = $nexus->orig_ip_table();
|
|
||||||
my $orig_ip_broadcast = $nexus->orig_ip_broadcast();
|
|
||||||
|
|
||||||
my %ip_broadcast;
|
|
||||||
foreach my $iid ( keys %$orig_ip_table ) {
|
|
||||||
my $ip = $orig_ip_table->{$iid};
|
|
||||||
my $broadcast = $orig_ip_broadcast->{$iid};
|
|
||||||
|
|
||||||
next unless ( defined $ip && defined $broadcast );
|
|
||||||
|
|
||||||
$ip_broadcast{$ip} = $broadcast;
|
|
||||||
}
|
|
||||||
return \%ip_broadcast;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
||||||
__END__
|
|
||||||
|
|
||||||
=head1 NAME
|
|
||||||
|
|
||||||
SNMP::Info::Layer3::Nexus - SNMP Interface to Cisco Nexus Switches running
|
|
||||||
NX-OS
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
|
||||||
|
|
||||||
Eric Miller
|
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
|
||||||
my $nexus = new SNMP::Info(
|
|
||||||
AutoSpecify => 1,
|
|
||||||
Debug => 1,
|
|
||||||
# These arguments are passed directly to SNMP::Session
|
|
||||||
DestHost => 'myswitch',
|
|
||||||
Community => 'public',
|
|
||||||
Version => 2
|
|
||||||
)
|
|
||||||
or die "Can't connect to DestHost.\n";
|
|
||||||
|
|
||||||
my $class = $nexus->class();
|
|
||||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
|
||||||
|
|
||||||
Abstraction subclass for Cisco Nexus Switches running NX-OS.
|
|
||||||
|
|
||||||
For speed or debugging purposes you can call the subclass directly, but not
|
|
||||||
after determining a more specific class using the method above.
|
|
||||||
|
|
||||||
my $nexus = new SNMP::Info::Layer3::Nexus(...);
|
|
||||||
|
|
||||||
=head2 Inherited Classes
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Required MIBs
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item F<CISCO-ENTITY-VENDORTYPE-OID-MIB>
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
|
||||||
|
|
||||||
These are methods that return a scalar value from SNMP
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $nexus->vendor()
|
|
||||||
|
|
||||||
Returns 'cisco'
|
|
||||||
|
|
||||||
=item $nexus->os()
|
|
||||||
|
|
||||||
Returns C<'nx-os'>
|
|
||||||
|
|
||||||
=item $nexus->os_ver()
|
|
||||||
|
|
||||||
Returns operating system version extracted from C<sysDescr>.
|
|
||||||
|
|
||||||
=item $nexus->serial()
|
|
||||||
|
|
||||||
Returns the serial number of the chassis from F<ENTITY-MIB>.
|
|
||||||
|
|
||||||
=item $nexus->model()
|
|
||||||
|
|
||||||
Tries to reference $nexus->id() to F<CISCO-ENTITY-VENDORTYPE-OID-MIB>
|
|
||||||
|
|
||||||
Removes C<'cevChassis'> for readability.
|
|
||||||
|
|
||||||
=item $nexus->mac()
|
|
||||||
|
|
||||||
C<dot1dBaseBridgeAddress>
|
|
||||||
|
|
||||||
=item $nexus->cisco_comm_indexing()
|
|
||||||
|
|
||||||
Returns 1. Use vlan indexing.
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Overrides
|
|
||||||
|
|
||||||
=head3 IP Address Table
|
|
||||||
|
|
||||||
Each entry in this table is an IP address in use on this device. Some
|
|
||||||
versions do not index the table with the IPv4 address in accordance with
|
|
||||||
the MIB definition, these overrides correct that behavior.
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $nexus->ip_index()
|
|
||||||
|
|
||||||
Maps the IP Table to the IID
|
|
||||||
|
|
||||||
(C<ipAdEntIfIndex>)
|
|
||||||
|
|
||||||
=item $nexus->ip_table()
|
|
||||||
|
|
||||||
Maps the Table to the IP address
|
|
||||||
|
|
||||||
(C<ipAdEntAddr>)
|
|
||||||
|
|
||||||
=item $nexus->ip_netmask()
|
|
||||||
|
|
||||||
Gives netmask setting for IP table entry.
|
|
||||||
|
|
||||||
(C<ipAdEntNetMask>)
|
|
||||||
|
|
||||||
=item $nexus->ip_broadcast()
|
|
||||||
|
|
||||||
Gives broadcast address for IP table entry.
|
|
||||||
|
|
||||||
(C<ipAdEntBcastAddr>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a reference
|
|
||||||
to a hash.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
|
|
||||||
details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
All code from version 0.7 on
|
All code from version 0.7 on
|
||||||
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
|
Copyright (c) 2003-2016 Max Baker and SNMP::Info Developers
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Original Code
|
Original Code
|
||||||
388
MANIFEST
388
MANIFEST
@@ -1,118 +1,274 @@
|
|||||||
ChangeLog
|
Build.PL
|
||||||
COPYRIGHT
|
Changes
|
||||||
DEVELOP
|
contrib/DEVELOP
|
||||||
DeviceMatrix.txt
|
contrib/util/docmunge
|
||||||
Info.pm
|
contrib/util/make_dev_matrix.pl
|
||||||
Info/AdslLine.pm
|
contrib/util/make_snmpdata.pl
|
||||||
Info/Airespace.pm
|
contrib/util/push_ver
|
||||||
Info/AMAP.pm
|
contrib/util/run_test
|
||||||
Info/Bridge.pm
|
contrib/util/test_class.pl
|
||||||
Info/CDP.pm
|
contrib/util/test_class_mocked.pl
|
||||||
Info/CiscoConfig.pm
|
lib/SNMP/Info.pm
|
||||||
Info/CiscoImage.pm
|
lib/SNMP/Info/AdslLine.pm
|
||||||
Info/CiscoPortSecurity.pm
|
lib/SNMP/Info/Aggregate.pm
|
||||||
Info/CiscoPower.pm
|
lib/SNMP/Info/Airespace.pm
|
||||||
Info/CiscoQOS.pm
|
lib/SNMP/Info/AMAP.pm
|
||||||
Info/CiscoRTT.pm
|
lib/SNMP/Info/Bridge.pm
|
||||||
Info/CiscoStack.pm
|
lib/SNMP/Info/CDP.pm
|
||||||
Info/CiscoStats.pm
|
lib/SNMP/Info/CiscoAgg.pm
|
||||||
Info/CiscoStpExtensions.pm
|
lib/SNMP/Info/CiscoConfig.pm
|
||||||
Info/CiscoVTP.pm
|
lib/SNMP/Info/CiscoPortSecurity.pm
|
||||||
Info/EDP.pm
|
lib/SNMP/Info/CiscoPower.pm
|
||||||
Info/Entity.pm
|
lib/SNMP/Info/CiscoQOS.pm
|
||||||
Info/EtherLike.pm
|
lib/SNMP/Info/CiscoRTT.pm
|
||||||
Info/FDP.pm
|
lib/SNMP/Info/CiscoStack.pm
|
||||||
Info/IEEE802dot11.pm
|
lib/SNMP/Info/CiscoStats.pm
|
||||||
Info/IPv6.pm
|
lib/SNMP/Info/CiscoStpExtensions.pm
|
||||||
Info/Layer1.pm
|
lib/SNMP/Info/CiscoVTP.pm
|
||||||
Info/Layer1/Allied.pm
|
lib/SNMP/Info/EDP.pm
|
||||||
Info/Layer1/Asante.pm
|
lib/SNMP/Info/Entity.pm
|
||||||
Info/Layer1/Bayhub.pm
|
lib/SNMP/Info/EtherLike.pm
|
||||||
Info/Layer1/Cyclades.pm
|
lib/SNMP/Info/FDP.pm
|
||||||
Info/Layer1/S3000.pm
|
lib/SNMP/Info/IEEE802dot11.pm
|
||||||
Info/Layer2.pm
|
lib/SNMP/Info/IEEE802dot3ad.pm
|
||||||
Info/Layer2/Airespace.pm
|
lib/SNMP/Info/IPv6.pm
|
||||||
Info/Layer2/Aironet.pm
|
lib/SNMP/Info/Layer1.pm
|
||||||
Info/Layer2/Allied.pm
|
lib/SNMP/Info/Layer1/Allied.pm
|
||||||
Info/Layer2/Baystack.pm
|
lib/SNMP/Info/Layer1/Asante.pm
|
||||||
Info/Layer2/C1900.pm
|
lib/SNMP/Info/Layer1/Bayhub.pm
|
||||||
Info/Layer2/C2900.pm
|
lib/SNMP/Info/Layer1/Cyclades.pm
|
||||||
Info/Layer2/Catalyst.pm
|
lib/SNMP/Info/Layer1/S3000.pm
|
||||||
Info/Layer2/Centillion.pm
|
lib/SNMP/Info/Layer2.pm
|
||||||
Info/Layer2/Cisco.pm
|
lib/SNMP/Info/Layer2/3Com.pm
|
||||||
Info/Layer2/CiscoSB.pm
|
lib/SNMP/Info/Layer2/Adtran.pm
|
||||||
Info/Layer2/HP.pm
|
lib/SNMP/Info/Layer2/Airespace.pm
|
||||||
Info/Layer2/HP4000.pm
|
lib/SNMP/Info/Layer2/Aironet.pm
|
||||||
Info/Layer2/HPVC.pm
|
lib/SNMP/Info/Layer2/Allied.pm
|
||||||
Info/Layer2/Kentrox.pm
|
lib/SNMP/Info/Layer2/Baystack.pm
|
||||||
Info/Layer2/N2270.pm
|
lib/SNMP/Info/Layer2/C1900.pm
|
||||||
Info/Layer2/NAP222x.pm
|
lib/SNMP/Info/Layer2/C2900.pm
|
||||||
Info/Layer2/Netgear.pm
|
lib/SNMP/Info/Layer2/Catalyst.pm
|
||||||
Info/Layer2/NWSS2300.pm
|
lib/SNMP/Info/Layer2/Centillion.pm
|
||||||
Info/Layer2/Orinoco.pm
|
lib/SNMP/Info/Layer2/Cisco.pm
|
||||||
Info/Layer2/Trapeze.pm
|
lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||||
Info/Layer2/ZyXEL_DSLAM.pm
|
lib/SNMP/Info/Layer2/HP.pm
|
||||||
Info/Layer3.pm
|
lib/SNMP/Info/Layer2/HP4000.pm
|
||||||
Info/Layer3/Aironet.pm
|
lib/SNMP/Info/Layer2/HPVC.pm
|
||||||
Info/Layer3/AlcatelLucent.pm
|
lib/SNMP/Info/Layer2/Kentrox.pm
|
||||||
Info/Layer3/AlteonAD.pm
|
lib/SNMP/Info/Layer2/N2270.pm
|
||||||
Info/Layer3/Altiga.pm
|
lib/SNMP/Info/Layer2/NAP222x.pm
|
||||||
Info/Layer3/Arista.pm
|
lib/SNMP/Info/Layer2/Netgear.pm
|
||||||
Info/Layer3/Aruba.pm
|
lib/SNMP/Info/Layer2/Nexans.pm
|
||||||
Info/Layer3/BayRS.pm
|
lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||||
Info/Layer3/BlueCoatSG.pm
|
lib/SNMP/Info/Layer2/Orinoco.pm
|
||||||
Info/Layer3/C3550.pm
|
lib/SNMP/Info/Layer2/Sixnet.pm
|
||||||
Info/Layer3/C4000.pm
|
lib/SNMP/Info/Layer2/Trapeze.pm
|
||||||
Info/Layer3/C6500.pm
|
lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||||
Info/Layer3/Cisco.pm
|
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||||
Info/Layer3/CiscoASA.pm
|
lib/SNMP/Info/Layer3.pm
|
||||||
Info/Layer3/CiscoFWSM.pm
|
lib/SNMP/Info/Layer3/Aironet.pm
|
||||||
Info/Layer3/Contivity.pm
|
lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||||
Info/Layer3/Dell.pm
|
lib/SNMP/Info/Layer3/AlteonAD.pm
|
||||||
Info/Layer3/Enterasys.pm
|
lib/SNMP/Info/Layer3/Altiga.pm
|
||||||
Info/Layer3/Extreme.pm
|
lib/SNMP/Info/Layer3/Arista.pm
|
||||||
Info/Layer3/F5.pm
|
lib/SNMP/Info/Layer3/Aruba.pm
|
||||||
Info/Layer3/Force10.pm
|
lib/SNMP/Info/Layer3/BayRS.pm
|
||||||
Info/Layer3/Foundry.pm
|
lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||||
Info/Layer3/H3C.pm
|
lib/SNMP/Info/Layer3/C3550.pm
|
||||||
Info/Layer3/HP9300.pm
|
lib/SNMP/Info/Layer3/C4000.pm
|
||||||
Info/Layer3/Juniper.pm
|
lib/SNMP/Info/Layer3/C6500.pm
|
||||||
Info/Layer3/Lantronix.pm
|
lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||||
Info/Layer3/Microsoft.pm
|
lib/SNMP/Info/Layer3/Cisco.pm
|
||||||
Info/Layer3/Mikrotik.pm
|
lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||||
Info/Layer3/N1600.pm
|
lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||||
Info/Layer3/Netscreen.pm
|
lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||||
Info/Layer3/NetSNMP.pm
|
lib/SNMP/Info/Layer3/Contivity.pm
|
||||||
Info/Layer3/Nexus.pm
|
lib/SNMP/Info/Layer3/Cumulus.pm
|
||||||
Info/Layer3/PacketFront.pm
|
lib/SNMP/Info/Layer3/Dell.pm
|
||||||
Info/Layer3/Passport.pm
|
lib/SNMP/Info/Layer3/DLink.pm
|
||||||
Info/Layer3/Pf.pm
|
lib/SNMP/Info/Layer3/Enterasys.pm
|
||||||
Info/Layer3/Pica8.pm
|
lib/SNMP/Info/Layer3/ERX.pm
|
||||||
Info/Layer3/SonicWALL.pm
|
lib/SNMP/Info/Layer3/Extreme.pm
|
||||||
Info/Layer3/Sun.pm
|
lib/SNMP/Info/Layer3/F5.pm
|
||||||
Info/Layer3/Tasman.pm
|
lib/SNMP/Info/Layer3/Force10.pm
|
||||||
Info/Layer3/Timetra.pm
|
lib/SNMP/Info/Layer3/Fortinet.pm
|
||||||
Info/Layer7.pm
|
lib/SNMP/Info/Layer3/Foundry.pm
|
||||||
Info/Layer7/APC.pm
|
lib/SNMP/Info/Layer3/H3C.pm
|
||||||
Info/Layer7/Neoteris.pm
|
lib/SNMP/Info/Layer3/HP9300.pm
|
||||||
Info/Layer7/Netscaler.pm
|
lib/SNMP/Info/Layer3/Huawei.pm
|
||||||
Info/LLDP.pm
|
lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||||
Info/MAU.pm
|
lib/SNMP/Info/Layer3/Juniper.pm
|
||||||
Info/NortelStack.pm
|
lib/SNMP/Info/Layer3/Lantronix.pm
|
||||||
Info/PowerEthernet.pm
|
lib/SNMP/Info/Layer3/Microsoft.pm
|
||||||
Info/RapidCity.pm
|
lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||||
Info/SONMP.pm
|
lib/SNMP/Info/Layer3/N1600.pm
|
||||||
Makefile.PL
|
lib/SNMP/Info/Layer3/Netscreen.pm
|
||||||
|
lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||||
|
lib/SNMP/Info/Layer3/Nexus.pm
|
||||||
|
lib/SNMP/Info/Layer3/OneAccess.pm
|
||||||
|
lib/SNMP/Info/Layer3/PacketFront.pm
|
||||||
|
lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||||
|
lib/SNMP/Info/Layer3/Passport.pm
|
||||||
|
lib/SNMP/Info/Layer3/Pf.pm
|
||||||
|
lib/SNMP/Info/Layer3/Pica8.pm
|
||||||
|
lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||||
|
lib/SNMP/Info/Layer3/Steelhead.pm
|
||||||
|
lib/SNMP/Info/Layer3/Sun.pm
|
||||||
|
lib/SNMP/Info/Layer3/Tasman.pm
|
||||||
|
lib/SNMP/Info/Layer3/Timetra.pm
|
||||||
|
lib/SNMP/Info/Layer3/VMware.pm
|
||||||
|
lib/SNMP/Info/Layer3/VyOS.pm
|
||||||
|
lib/SNMP/Info/Layer7.pm
|
||||||
|
lib/SNMP/Info/Layer7/APC.pm
|
||||||
|
lib/SNMP/Info/Layer7/Arbor.pm
|
||||||
|
lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||||
|
lib/SNMP/Info/Layer7/Gigamon.pm
|
||||||
|
lib/SNMP/Info/Layer7/Neoteris.pm
|
||||||
|
lib/SNMP/Info/Layer7/Netscaler.pm
|
||||||
|
lib/SNMP/Info/LLDP.pm
|
||||||
|
lib/SNMP/Info/MAU.pm
|
||||||
|
lib/SNMP/Info/MRO.pm
|
||||||
|
lib/SNMP/Info/NortelStack.pm
|
||||||
|
lib/SNMP/Info/PowerEthernet.pm
|
||||||
|
lib/SNMP/Info/RapidCity.pm
|
||||||
|
lib/SNMP/Info/SONMP.pm
|
||||||
|
LICENSE
|
||||||
MANIFEST This list of files
|
MANIFEST This list of files
|
||||||
|
META.json
|
||||||
|
META.yml
|
||||||
README
|
README
|
||||||
t/00-load.t
|
t/00_load.t
|
||||||
t/docmunge
|
xt/.perltidyrc
|
||||||
t/make_dev_matrix.pl
|
xt/00_local_distribution.t
|
||||||
t/pod-coverage.t
|
xt/00_local_docininfo.t
|
||||||
t/pod.t
|
xt/00_local_perlcritic.t
|
||||||
t/prereq.t
|
xt/00_local_pod-coverage.t
|
||||||
t/push_ver
|
xt/00_local_pod.t
|
||||||
t/run_test
|
xt/00_local_prereq.t
|
||||||
t/test_class.pl
|
xt/00_local_spelling.t
|
||||||
t/util/make_snmpdata.pl
|
xt/00_local_versionsync.t
|
||||||
t/util/test_class_mocked.pl
|
xt/10_remote_snmplabs.t
|
||||||
|
xt/20_run.t
|
||||||
|
xt/lib/My/Test/Class.pm
|
||||||
|
xt/lib/Test/SNMP/Info.pm
|
||||||
|
xt/lib/Test/SNMP/Info/AdslLine.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Aggregate.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Airespace.pm
|
||||||
|
xt/lib/Test/SNMP/Info/AMAP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Bridge.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoAgg.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoConfig.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoPortSecurity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoPower.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoQOS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoRTT.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoStack.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoStats.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoStpExtensions.pm
|
||||||
|
xt/lib/Test/SNMP/Info/CiscoVTP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/EDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Entity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/EtherLike.pm
|
||||||
|
xt/lib/Test/SNMP/Info/FDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/IEEE802dot11.pm
|
||||||
|
xt/lib/Test/SNMP/Info/IEEE802dot3ad.pm
|
||||||
|
xt/lib/Test/SNMP/Info/IPv6.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Allied.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Asante.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Bayhub.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/Cyclades.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer1/S3000.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/3Com.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Airespace.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Aironet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Allied.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Baystack.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/C1900.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/C2900.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Catalyst.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Centillion.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Cisco.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/CiscoSB.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/HP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/HP4000.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/HPVC.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Kentrox.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/N2270.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/NAP222x.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Netgear.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Nexans.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Aironet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/AlteonAD.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Altiga.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Arista.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Aruba.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/BayRS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/C3550.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/C4000.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/C6500.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CheckPoint.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Cisco.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CiscoASA.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Contivity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Cumulus.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Dell.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/DLink.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Enterasys.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/ERX.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Extreme.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/F5.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Force10.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Fortinet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Foundry.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/H3C.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/HP9300.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Huawei.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/IBMGbTor.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Juniper.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Lantronix.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Microsoft.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Mikrotik.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/N1600.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Netscreen.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/NetSNMP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Nexus.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/OneAccess.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/PacketFront.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/PaloAlto.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Passport.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Pf.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Pica8.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Sun.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Tasman.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/VMware.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer3/VyOS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/APC.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Arbor.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/CiscoIPS.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Gigamon.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Neoteris.pm
|
||||||
|
xt/lib/Test/SNMP/Info/Layer7/Netscaler.pm
|
||||||
|
xt/lib/Test/SNMP/Info/LLDP.pm
|
||||||
|
xt/lib/Test/SNMP/Info/MAU.pm
|
||||||
|
xt/lib/Test/SNMP/Info/NortelStack.pm
|
||||||
|
xt/lib/Test/SNMP/Info/PowerEthernet.pm
|
||||||
|
xt/lib/Test/SNMP/Info/RapidCity.pm
|
||||||
|
xt/lib/Test/SNMP/Info/SONMP.pm
|
||||||
|
|||||||
@@ -1,28 +1,70 @@
|
|||||||
# Version control files and dirs.
|
\.bak$
|
||||||
|
\.pid$
|
||||||
|
\.swp$
|
||||||
|
|
||||||
|
^SNMP-Info-
|
||||||
|
|
||||||
|
^MANIFEST\.
|
||||||
|
|
||||||
|
# Avoid version control files.
|
||||||
\bRCS\b
|
\bRCS\b
|
||||||
\bCVS\b
|
\bCVS\b
|
||||||
|
\bSCCS\b
|
||||||
,v$
|
,v$
|
||||||
\B\.svn\b
|
\B\.svn\b
|
||||||
\B\.git\b
|
\B\.git\b
|
||||||
.gitignore
|
\B\.gitignore\b
|
||||||
|
\b_darcs\b
|
||||||
|
\B\.cvsignore$
|
||||||
|
|
||||||
# Makemaker generated files and dirs.
|
# Avoid VMS specific MakeMaker generated files
|
||||||
^MANIFEST\.
|
\bDescrip.MMS$
|
||||||
^Makefile$
|
\bDESCRIP.MMS$
|
||||||
^blib/
|
\bdescrip.mms$
|
||||||
^MakeMaker-\d
|
|
||||||
pm_to_blib
|
|
||||||
MYMETA.*
|
|
||||||
|
|
||||||
# Temp, old and emacs backup files.
|
# Avoid Makemaker generated and utility files.
|
||||||
|
\bMANIFEST\.bak
|
||||||
|
\bMakefile$
|
||||||
|
\bblib/
|
||||||
|
\bMakeMaker-\d
|
||||||
|
\bpm_to_blib\.ts$
|
||||||
|
\bpm_to_blib$
|
||||||
|
\bblibdirs\.ts$ # 6.18 through 6.25 generated this
|
||||||
|
|
||||||
|
# Avoid Module::Build generated and utility files.
|
||||||
|
\bBuild$
|
||||||
|
\b_build/
|
||||||
|
\bBuild.bat$
|
||||||
|
\bBuild.COM$
|
||||||
|
\bBUILD.COM$
|
||||||
|
\bbuild.com$
|
||||||
|
|
||||||
|
# Avoid temp and backup files.
|
||||||
~$
|
~$
|
||||||
\.old$
|
\.old$
|
||||||
^#.*#$
|
\#$
|
||||||
^\.#
|
\b\.#
|
||||||
|
\.bak$
|
||||||
|
\.tmp$
|
||||||
|
\.#
|
||||||
|
\.rej$
|
||||||
|
|
||||||
# Private Regression Tests
|
# Avoid OS-specific files/dirs
|
||||||
\d+_local_
|
# Mac OSX metadata
|
||||||
\.?perl\w+\.?rc$
|
\B\.DS_Store
|
||||||
|
# Mac OSX SMB mount metadata files
|
||||||
|
\B\._
|
||||||
|
|
||||||
# Komodo project file
|
# Avoid Devel::Cover and Devel::CoverX::Covered files.
|
||||||
\.kpf$
|
\bcover_db\b
|
||||||
|
\bcovered\b
|
||||||
|
|
||||||
|
# Avoid MYMETA files
|
||||||
|
^MYMETA\.
|
||||||
|
|
||||||
|
.github
|
||||||
|
.travis
|
||||||
|
README.md
|
||||||
|
|
||||||
|
# Avoid Komodo project file
|
||||||
|
\.komodoproject$
|
||||||
|
|||||||
564
META.json
Normal file
564
META.json
Normal file
@@ -0,0 +1,564 @@
|
|||||||
|
{
|
||||||
|
"abstract" : "OO Interface to Network devices and MIBs through SNMP",
|
||||||
|
"author" : [
|
||||||
|
"Eric A. Miller <emiller@cpan.org>"
|
||||||
|
],
|
||||||
|
"dynamic_config" : 1,
|
||||||
|
"generated_by" : "Module::Build version 0.4224",
|
||||||
|
"license" : [
|
||||||
|
"bsd"
|
||||||
|
],
|
||||||
|
"meta-spec" : {
|
||||||
|
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
|
||||||
|
"version" : 2
|
||||||
|
},
|
||||||
|
"name" : "SNMP-Info",
|
||||||
|
"prereqs" : {
|
||||||
|
"configure" : {
|
||||||
|
"requires" : {
|
||||||
|
"Module::Build" : "0.42"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime" : {
|
||||||
|
"recommends" : {
|
||||||
|
"Class::ISA" : "0",
|
||||||
|
"File::Slurp" : "0",
|
||||||
|
"Module::Info" : "0",
|
||||||
|
"Module::Load" : "0",
|
||||||
|
"PPI" : "0"
|
||||||
|
},
|
||||||
|
"requires" : {
|
||||||
|
"Math::BigInt" : "0",
|
||||||
|
"SNMP" : "0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test" : {
|
||||||
|
"requires" : {
|
||||||
|
"Class::Inspector" : "0",
|
||||||
|
"File::Find" : "0",
|
||||||
|
"File::Slurper" : "0",
|
||||||
|
"Path::Class" : "0",
|
||||||
|
"Test::Class::Most" : "0",
|
||||||
|
"Test::Distribution" : "0",
|
||||||
|
"Test::Exception" : "0.43",
|
||||||
|
"Test::MockObject::Extends" : "0",
|
||||||
|
"Test::More" : "0.88"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"provides" : {
|
||||||
|
"SNMP::Info" : {
|
||||||
|
"file" : "lib/SNMP/Info.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::AMAP" : {
|
||||||
|
"file" : "lib/SNMP/Info/AMAP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::AdslLine" : {
|
||||||
|
"file" : "lib/SNMP/Info/AdslLine.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Aggregate" : {
|
||||||
|
"file" : "lib/SNMP/Info/Aggregate.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Airespace" : {
|
||||||
|
"file" : "lib/SNMP/Info/Airespace.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Bridge" : {
|
||||||
|
"file" : "lib/SNMP/Info/Bridge.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CDP" : {
|
||||||
|
"file" : "lib/SNMP/Info/CDP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoAgg" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoAgg.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoConfig" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoConfig.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoPortSecurity" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoPower" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoPower.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoQOS" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoQOS.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoRTT" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoRTT.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoStack" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoStack.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoStats" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoStats.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoStpExtensions" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::CiscoVTP" : {
|
||||||
|
"file" : "lib/SNMP/Info/CiscoVTP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::EDP" : {
|
||||||
|
"file" : "lib/SNMP/Info/EDP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Entity" : {
|
||||||
|
"file" : "lib/SNMP/Info/Entity.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::EtherLike" : {
|
||||||
|
"file" : "lib/SNMP/Info/EtherLike.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::FDP" : {
|
||||||
|
"file" : "lib/SNMP/Info/FDP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::IEEE802dot11" : {
|
||||||
|
"file" : "lib/SNMP/Info/IEEE802dot11.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::IEEE802dot3ad" : {
|
||||||
|
"file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::IPv6" : {
|
||||||
|
"file" : "lib/SNMP/Info/IPv6.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::LLDP" : {
|
||||||
|
"file" : "lib/SNMP/Info/LLDP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer1" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer1.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer1::Allied" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer1/Allied.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer1::Asante" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer1/Asante.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer1::Bayhub" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer1::Cyclades" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer1::S3000" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer1/S3000.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::3Com" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/3Com.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Adtran" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Adtran.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Airespace" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Airespace.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Aironet" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Aironet.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Allied" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Allied.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Baystack" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Baystack.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::C1900" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/C1900.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::C2900" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/C2900.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Catalyst" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Centillion" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Centillion.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Cisco" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Cisco.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::CiscoSB" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::HP" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/HP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::HP4000" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/HP4000.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::HPVC" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/HPVC.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Kentrox" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::N2270" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/N2270.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::NAP222x" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::NWSS2300" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Netgear" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Netgear.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Nexans" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Nexans.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Orinoco" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Sixnet" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Sixnet.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Trapeze" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::Ubiquiti" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer2::ZyXEL_DSLAM" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Aironet" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Aironet.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::AlcatelLucent" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::AlteonAD" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Altiga" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Altiga.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Arista" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Arista.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Aruba" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Aruba.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::BayRS" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/BayRS.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::BlueCoatSG" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::C3550" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/C3550.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::C4000" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/C4000.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::C6500" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/C6500.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::CheckPoint" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Cisco" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Cisco.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::CiscoASA" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::CiscoFWSM" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::CiscoSwitch" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Contivity" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Contivity.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Cumulus" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::DLink" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/DLink.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Dell" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Dell.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::ERX" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/ERX.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Enterasys" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Extreme" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Extreme.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::F5" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/F5.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Force10" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Force10.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Fortinet" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Foundry" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Foundry.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::H3C" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/H3C.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::HP9300" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/HP9300.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Huawei" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Huawei.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::IBMGbTor" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Juniper" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Juniper.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Lantronix" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Microsoft" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Mikrotik" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::N1600" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/N1600.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::NetSNMP" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Netscreen" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Nexus" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Nexus.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::OneAccess" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/OneAccess.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::PacketFront" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::PaloAlto" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Passport" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Passport.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Pf" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Pf.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Pica8" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Pica8.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::SonicWALL" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Steelhead" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Sun" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Sun.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Tasman" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Tasman.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::Timetra" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/Timetra.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::VMware" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/VMware.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer3::VyOS" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer3/VyOS.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::APC" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/APC.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::Arbor" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/Arbor.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::CiscoIPS" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::Gigamon" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::Neoteris" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::Layer7::Netscaler" : {
|
||||||
|
"file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::MAU" : {
|
||||||
|
"file" : "lib/SNMP/Info/MAU.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::MRO" : {
|
||||||
|
"file" : "lib/SNMP/Info/MRO.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::NortelStack" : {
|
||||||
|
"file" : "lib/SNMP/Info/NortelStack.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::PowerEthernet" : {
|
||||||
|
"file" : "lib/SNMP/Info/PowerEthernet.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::RapidCity" : {
|
||||||
|
"file" : "lib/SNMP/Info/RapidCity.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
},
|
||||||
|
"SNMP::Info::SONMP" : {
|
||||||
|
"file" : "lib/SNMP/Info/SONMP.pm",
|
||||||
|
"version" : "3.56"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"release_status" : "stable",
|
||||||
|
"resources" : {
|
||||||
|
"bugtracker" : {
|
||||||
|
"web" : "https://github.com/netdisco/snmp-info/issues"
|
||||||
|
},
|
||||||
|
"homepage" : "http://netdisco.org/",
|
||||||
|
"license" : [
|
||||||
|
"http://opensource.org/licenses/bsd-license.php"
|
||||||
|
],
|
||||||
|
"repository" : {
|
||||||
|
"url" : "https://github.com/netdisco/snmp-info"
|
||||||
|
},
|
||||||
|
"x_IRC" : "irc://irc.freenode.org/#netdisco",
|
||||||
|
"x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
|
||||||
|
},
|
||||||
|
"version" : "3.56",
|
||||||
|
"x_serialization_backend" : "JSON::PP version 2.97001"
|
||||||
|
}
|
||||||
414
META.yml
Normal file
414
META.yml
Normal file
@@ -0,0 +1,414 @@
|
|||||||
|
---
|
||||||
|
abstract: 'OO Interface to Network devices and MIBs through SNMP'
|
||||||
|
author:
|
||||||
|
- 'Eric A. Miller <emiller@cpan.org>'
|
||||||
|
build_requires:
|
||||||
|
Class::Inspector: '0'
|
||||||
|
File::Find: '0'
|
||||||
|
File::Slurper: '0'
|
||||||
|
Path::Class: '0'
|
||||||
|
Test::Class::Most: '0'
|
||||||
|
Test::Distribution: '0'
|
||||||
|
Test::Exception: '0.43'
|
||||||
|
Test::MockObject::Extends: '0'
|
||||||
|
Test::More: '0.88'
|
||||||
|
configure_requires:
|
||||||
|
Module::Build: '0.42'
|
||||||
|
dynamic_config: 1
|
||||||
|
generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 2.150010'
|
||||||
|
license: bsd
|
||||||
|
meta-spec:
|
||||||
|
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
||||||
|
version: '1.4'
|
||||||
|
name: SNMP-Info
|
||||||
|
provides:
|
||||||
|
SNMP::Info:
|
||||||
|
file: lib/SNMP/Info.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::AMAP:
|
||||||
|
file: lib/SNMP/Info/AMAP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::AdslLine:
|
||||||
|
file: lib/SNMP/Info/AdslLine.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Aggregate:
|
||||||
|
file: lib/SNMP/Info/Aggregate.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Airespace:
|
||||||
|
file: lib/SNMP/Info/Airespace.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Bridge:
|
||||||
|
file: lib/SNMP/Info/Bridge.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CDP:
|
||||||
|
file: lib/SNMP/Info/CDP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoAgg:
|
||||||
|
file: lib/SNMP/Info/CiscoAgg.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoConfig:
|
||||||
|
file: lib/SNMP/Info/CiscoConfig.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoPortSecurity:
|
||||||
|
file: lib/SNMP/Info/CiscoPortSecurity.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoPower:
|
||||||
|
file: lib/SNMP/Info/CiscoPower.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoQOS:
|
||||||
|
file: lib/SNMP/Info/CiscoQOS.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoRTT:
|
||||||
|
file: lib/SNMP/Info/CiscoRTT.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoStack:
|
||||||
|
file: lib/SNMP/Info/CiscoStack.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoStats:
|
||||||
|
file: lib/SNMP/Info/CiscoStats.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoStpExtensions:
|
||||||
|
file: lib/SNMP/Info/CiscoStpExtensions.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::CiscoVTP:
|
||||||
|
file: lib/SNMP/Info/CiscoVTP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::EDP:
|
||||||
|
file: lib/SNMP/Info/EDP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Entity:
|
||||||
|
file: lib/SNMP/Info/Entity.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::EtherLike:
|
||||||
|
file: lib/SNMP/Info/EtherLike.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::FDP:
|
||||||
|
file: lib/SNMP/Info/FDP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::IEEE802dot11:
|
||||||
|
file: lib/SNMP/Info/IEEE802dot11.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::IEEE802dot3ad:
|
||||||
|
file: lib/SNMP/Info/IEEE802dot3ad.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::IPv6:
|
||||||
|
file: lib/SNMP/Info/IPv6.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::LLDP:
|
||||||
|
file: lib/SNMP/Info/LLDP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer1:
|
||||||
|
file: lib/SNMP/Info/Layer1.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer1::Allied:
|
||||||
|
file: lib/SNMP/Info/Layer1/Allied.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer1::Asante:
|
||||||
|
file: lib/SNMP/Info/Layer1/Asante.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer1::Bayhub:
|
||||||
|
file: lib/SNMP/Info/Layer1/Bayhub.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer1::Cyclades:
|
||||||
|
file: lib/SNMP/Info/Layer1/Cyclades.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer1::S3000:
|
||||||
|
file: lib/SNMP/Info/Layer1/S3000.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2:
|
||||||
|
file: lib/SNMP/Info/Layer2.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::3Com:
|
||||||
|
file: lib/SNMP/Info/Layer2/3Com.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Adtran:
|
||||||
|
file: lib/SNMP/Info/Layer2/Adtran.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Airespace:
|
||||||
|
file: lib/SNMP/Info/Layer2/Airespace.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Aironet:
|
||||||
|
file: lib/SNMP/Info/Layer2/Aironet.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Allied:
|
||||||
|
file: lib/SNMP/Info/Layer2/Allied.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Baystack:
|
||||||
|
file: lib/SNMP/Info/Layer2/Baystack.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::C1900:
|
||||||
|
file: lib/SNMP/Info/Layer2/C1900.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::C2900:
|
||||||
|
file: lib/SNMP/Info/Layer2/C2900.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Catalyst:
|
||||||
|
file: lib/SNMP/Info/Layer2/Catalyst.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Centillion:
|
||||||
|
file: lib/SNMP/Info/Layer2/Centillion.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Cisco:
|
||||||
|
file: lib/SNMP/Info/Layer2/Cisco.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::CiscoSB:
|
||||||
|
file: lib/SNMP/Info/Layer2/CiscoSB.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::HP:
|
||||||
|
file: lib/SNMP/Info/Layer2/HP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::HP4000:
|
||||||
|
file: lib/SNMP/Info/Layer2/HP4000.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::HPVC:
|
||||||
|
file: lib/SNMP/Info/Layer2/HPVC.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Kentrox:
|
||||||
|
file: lib/SNMP/Info/Layer2/Kentrox.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::N2270:
|
||||||
|
file: lib/SNMP/Info/Layer2/N2270.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::NAP222x:
|
||||||
|
file: lib/SNMP/Info/Layer2/NAP222x.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::NWSS2300:
|
||||||
|
file: lib/SNMP/Info/Layer2/NWSS2300.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Netgear:
|
||||||
|
file: lib/SNMP/Info/Layer2/Netgear.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Nexans:
|
||||||
|
file: lib/SNMP/Info/Layer2/Nexans.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Orinoco:
|
||||||
|
file: lib/SNMP/Info/Layer2/Orinoco.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Sixnet:
|
||||||
|
file: lib/SNMP/Info/Layer2/Sixnet.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Trapeze:
|
||||||
|
file: lib/SNMP/Info/Layer2/Trapeze.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::Ubiquiti:
|
||||||
|
file: lib/SNMP/Info/Layer2/Ubiquiti.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer2::ZyXEL_DSLAM:
|
||||||
|
file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3:
|
||||||
|
file: lib/SNMP/Info/Layer3.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Aironet:
|
||||||
|
file: lib/SNMP/Info/Layer3/Aironet.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::AlcatelLucent:
|
||||||
|
file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::AlteonAD:
|
||||||
|
file: lib/SNMP/Info/Layer3/AlteonAD.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Altiga:
|
||||||
|
file: lib/SNMP/Info/Layer3/Altiga.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Arista:
|
||||||
|
file: lib/SNMP/Info/Layer3/Arista.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Aruba:
|
||||||
|
file: lib/SNMP/Info/Layer3/Aruba.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::BayRS:
|
||||||
|
file: lib/SNMP/Info/Layer3/BayRS.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::BlueCoatSG:
|
||||||
|
file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::C3550:
|
||||||
|
file: lib/SNMP/Info/Layer3/C3550.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::C4000:
|
||||||
|
file: lib/SNMP/Info/Layer3/C4000.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::C6500:
|
||||||
|
file: lib/SNMP/Info/Layer3/C6500.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::CheckPoint:
|
||||||
|
file: lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Cisco:
|
||||||
|
file: lib/SNMP/Info/Layer3/Cisco.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::CiscoASA:
|
||||||
|
file: lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::CiscoFWSM:
|
||||||
|
file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::CiscoSwitch:
|
||||||
|
file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Contivity:
|
||||||
|
file: lib/SNMP/Info/Layer3/Contivity.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Cumulus:
|
||||||
|
file: lib/SNMP/Info/Layer3/Cumulus.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::DLink:
|
||||||
|
file: lib/SNMP/Info/Layer3/DLink.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Dell:
|
||||||
|
file: lib/SNMP/Info/Layer3/Dell.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::ERX:
|
||||||
|
file: lib/SNMP/Info/Layer3/ERX.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Enterasys:
|
||||||
|
file: lib/SNMP/Info/Layer3/Enterasys.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Extreme:
|
||||||
|
file: lib/SNMP/Info/Layer3/Extreme.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::F5:
|
||||||
|
file: lib/SNMP/Info/Layer3/F5.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Force10:
|
||||||
|
file: lib/SNMP/Info/Layer3/Force10.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Fortinet:
|
||||||
|
file: lib/SNMP/Info/Layer3/Fortinet.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Foundry:
|
||||||
|
file: lib/SNMP/Info/Layer3/Foundry.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::H3C:
|
||||||
|
file: lib/SNMP/Info/Layer3/H3C.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::HP9300:
|
||||||
|
file: lib/SNMP/Info/Layer3/HP9300.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Huawei:
|
||||||
|
file: lib/SNMP/Info/Layer3/Huawei.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::IBMGbTor:
|
||||||
|
file: lib/SNMP/Info/Layer3/IBMGbTor.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Juniper:
|
||||||
|
file: lib/SNMP/Info/Layer3/Juniper.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Lantronix:
|
||||||
|
file: lib/SNMP/Info/Layer3/Lantronix.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Microsoft:
|
||||||
|
file: lib/SNMP/Info/Layer3/Microsoft.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Mikrotik:
|
||||||
|
file: lib/SNMP/Info/Layer3/Mikrotik.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::N1600:
|
||||||
|
file: lib/SNMP/Info/Layer3/N1600.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::NetSNMP:
|
||||||
|
file: lib/SNMP/Info/Layer3/NetSNMP.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Netscreen:
|
||||||
|
file: lib/SNMP/Info/Layer3/Netscreen.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Nexus:
|
||||||
|
file: lib/SNMP/Info/Layer3/Nexus.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::OneAccess:
|
||||||
|
file: lib/SNMP/Info/Layer3/OneAccess.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::PacketFront:
|
||||||
|
file: lib/SNMP/Info/Layer3/PacketFront.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::PaloAlto:
|
||||||
|
file: lib/SNMP/Info/Layer3/PaloAlto.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Passport:
|
||||||
|
file: lib/SNMP/Info/Layer3/Passport.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Pf:
|
||||||
|
file: lib/SNMP/Info/Layer3/Pf.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Pica8:
|
||||||
|
file: lib/SNMP/Info/Layer3/Pica8.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::SonicWALL:
|
||||||
|
file: lib/SNMP/Info/Layer3/SonicWALL.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Steelhead:
|
||||||
|
file: lib/SNMP/Info/Layer3/Steelhead.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Sun:
|
||||||
|
file: lib/SNMP/Info/Layer3/Sun.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Tasman:
|
||||||
|
file: lib/SNMP/Info/Layer3/Tasman.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::Timetra:
|
||||||
|
file: lib/SNMP/Info/Layer3/Timetra.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::VMware:
|
||||||
|
file: lib/SNMP/Info/Layer3/VMware.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer3::VyOS:
|
||||||
|
file: lib/SNMP/Info/Layer3/VyOS.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7:
|
||||||
|
file: lib/SNMP/Info/Layer7.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7::APC:
|
||||||
|
file: lib/SNMP/Info/Layer7/APC.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7::Arbor:
|
||||||
|
file: lib/SNMP/Info/Layer7/Arbor.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7::CiscoIPS:
|
||||||
|
file: lib/SNMP/Info/Layer7/CiscoIPS.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7::Gigamon:
|
||||||
|
file: lib/SNMP/Info/Layer7/Gigamon.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7::Neoteris:
|
||||||
|
file: lib/SNMP/Info/Layer7/Neoteris.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::Layer7::Netscaler:
|
||||||
|
file: lib/SNMP/Info/Layer7/Netscaler.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::MAU:
|
||||||
|
file: lib/SNMP/Info/MAU.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::MRO:
|
||||||
|
file: lib/SNMP/Info/MRO.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::NortelStack:
|
||||||
|
file: lib/SNMP/Info/NortelStack.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::PowerEthernet:
|
||||||
|
file: lib/SNMP/Info/PowerEthernet.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::RapidCity:
|
||||||
|
file: lib/SNMP/Info/RapidCity.pm
|
||||||
|
version: '3.56'
|
||||||
|
SNMP::Info::SONMP:
|
||||||
|
file: lib/SNMP/Info/SONMP.pm
|
||||||
|
version: '3.56'
|
||||||
|
recommends:
|
||||||
|
Class::ISA: '0'
|
||||||
|
File::Slurp: '0'
|
||||||
|
Module::Info: '0'
|
||||||
|
Module::Load: '0'
|
||||||
|
PPI: '0'
|
||||||
|
requires:
|
||||||
|
Math::BigInt: '0'
|
||||||
|
SNMP: '0'
|
||||||
|
resources:
|
||||||
|
IRC: irc://irc.freenode.org/#netdisco
|
||||||
|
MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
|
||||||
|
bugtracker: https://github.com/netdisco/snmp-info/issues
|
||||||
|
homepage: http://netdisco.org/
|
||||||
|
license: http://opensource.org/licenses/bsd-license.php
|
||||||
|
repository: https://github.com/netdisco/snmp-info
|
||||||
|
version: '3.56'
|
||||||
|
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
||||||
39
Makefile.PL
39
Makefile.PL
@@ -1,39 +0,0 @@
|
|||||||
# Module makefile for SNMP::Info (using ExtUtils::MakeMaker)
|
|
||||||
# $Id$
|
|
||||||
|
|
||||||
require 5.006;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
use ExtUtils::MakeMaker;
|
|
||||||
|
|
||||||
WriteMakefile(
|
|
||||||
NAME => 'SNMP::Info',
|
|
||||||
AUTHOR => 'Eric A. Miller <emiller@cpan.org>',
|
|
||||||
VERSION_FROM => 'Info.pm',
|
|
||||||
ABSTRACT_FROM => 'Info.pm',
|
|
||||||
PREREQ_PM => {
|
|
||||||
'Test::More' => 0,
|
|
||||||
'Math::BigInt' => 0,
|
|
||||||
'SNMP' => 0,
|
|
||||||
},
|
|
||||||
PMLIBDIRS => [ 'Info', '$(BASEEXT)' ],
|
|
||||||
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
|
|
||||||
clean => { FILES => 'SNMP-Info-*' },
|
|
||||||
realclean => { FILES => 'Makefile.old' },
|
|
||||||
( ( ExtUtils::MakeMaker->VERSION() lt '6.25' ) ? ( 'PL_FILES' => {} )
|
|
||||||
: ()
|
|
||||||
),
|
|
||||||
( ( ExtUtils::MakeMaker->VERSION() gt '6.30' ) ? ( 'LICENSE' => 'bsd' )
|
|
||||||
: ()
|
|
||||||
),
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
sub MY::postamble {
|
|
||||||
"
|
|
||||||
.PHONY: readme
|
|
||||||
readme: README
|
|
||||||
README: Info.pm
|
|
||||||
pod2text -l Info.pm > README";
|
|
||||||
}
|
|
||||||
282
README
282
README
@@ -1,13 +1,10 @@
|
|||||||
NAME
|
NAME
|
||||||
|
|
||||||
SNMP::Info - OO Interface to Network devices and MIBs through SNMP
|
SNMP::Info - OO Interface to Network devices and MIBs through SNMP
|
||||||
|
|
||||||
VERSION
|
VERSION
|
||||||
|
SNMP::Info - Version 3.56
|
||||||
SNMP::Info - Version 3.08
|
|
||||||
|
|
||||||
AUTHOR
|
AUTHOR
|
||||||
|
|
||||||
SNMP::Info is maintained by team of Open Source authors headed by Eric
|
SNMP::Info is maintained by team of Open Source authors headed by Eric
|
||||||
Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits.
|
Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits.
|
||||||
|
|
||||||
@@ -18,22 +15,22 @@ AUTHOR
|
|||||||
<http://netdisco.org> by Max Baker.
|
<http://netdisco.org> by Max Baker.
|
||||||
|
|
||||||
DEVICES SUPPORTED
|
DEVICES SUPPORTED
|
||||||
|
There are now generic classes for most types of device and so the
|
||||||
See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt for
|
authors recommend loading SNMP::Info with AutoSpecify, and then
|
||||||
more details.
|
reporting to the mail list any missing functionality (such as neighbor
|
||||||
|
discovery tables).
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
my $info = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
# Auto Discover more specific Device Class
|
# Auto Discover more specific Device Class
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
# The rest is passed to SNMP::Session
|
# The rest is passed to SNMP::Session
|
||||||
DestHost => 'router',
|
DestHost => 'router',
|
||||||
Community => 'public',
|
Community => 'public',
|
||||||
Version => 2
|
Version => 2
|
||||||
) or die "Can't connect to device.\n";
|
) or die "Can't connect to device.\n";
|
||||||
|
|
||||||
my $err = $info->error();
|
my $err = $info->error();
|
||||||
@@ -64,7 +61,7 @@ SYNOPSIS
|
|||||||
# The CDP Table has table entries different than the interface tables.
|
# The CDP Table has table entries different than the interface tables.
|
||||||
# So we use c_if to get the map from cdp table to interface table.
|
# So we use c_if to get the map from cdp table to interface table.
|
||||||
|
|
||||||
my %c_map = reverse %$c_if;
|
my %c_map = reverse %$c_if;
|
||||||
my $c_key = $c_map{$iid};
|
my $c_key = $c_map{$iid};
|
||||||
unless (defined $c_key) {
|
unless (defined $c_key) {
|
||||||
print "\n\n";
|
print "\n\n";
|
||||||
@@ -79,13 +76,11 @@ SYNOPSIS
|
|||||||
}
|
}
|
||||||
|
|
||||||
SUPPORT
|
SUPPORT
|
||||||
|
|
||||||
Please direct all support, help, and bug requests to the snmp-info-users
|
Please direct all support, help, and bug requests to the snmp-info-users
|
||||||
Mailing List at
|
Mailing List at
|
||||||
<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
|
<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info gives an object oriented interface to information obtained
|
SNMP::Info gives an object oriented interface to information obtained
|
||||||
through SNMP.
|
through SNMP.
|
||||||
|
|
||||||
@@ -112,7 +107,6 @@ DESCRIPTION
|
|||||||
a couple hashes. See EXTENDING SNMP::INFO.
|
a couple hashes. See EXTENDING SNMP::INFO.
|
||||||
|
|
||||||
REQUIREMENTS
|
REQUIREMENTS
|
||||||
|
|
||||||
1. Net-SNMP
|
1. Net-SNMP
|
||||||
To use this module, you must have Net-SNMP installed on your system.
|
To use this module, you must have Net-SNMP installed on your system.
|
||||||
More specifically you need the Perl modules that come with it.
|
More specifically you need the Perl modules that come with it.
|
||||||
@@ -143,14 +137,13 @@ REQUIREMENTS
|
|||||||
|
|
||||||
If you are using SNMP::Info separate from Netdisco, download the
|
If you are using SNMP::Info separate from Netdisco, download the
|
||||||
Netdisco MIB package at
|
Netdisco MIB package at
|
||||||
<http://sourceforge.net/project/showfiles.php?group_id=80033&package
|
<http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest
|
||||||
_id=135517>
|
-snapshot/>
|
||||||
|
|
||||||
Make sure that your snmp.conf is updated to point to your MIB
|
Make sure that your snmp.conf is updated to point to your MIB
|
||||||
directory and that the MIBs are world-readable.
|
directory and that the MIBs are world-readable.
|
||||||
|
|
||||||
DESIGN GOALS
|
DESIGN GOALS
|
||||||
|
|
||||||
1. Use of textual MIB leaf identifier and enumerated values
|
1. Use of textual MIB leaf identifier and enumerated values
|
||||||
|
|
||||||
* All values are retrieved via MIB Leaf node names
|
* All values are retrieved via MIB Leaf node names
|
||||||
@@ -180,14 +173,12 @@ DESIGN GOALS
|
|||||||
inclusion in the next version.
|
inclusion in the next version.
|
||||||
|
|
||||||
SUBCLASSES
|
SUBCLASSES
|
||||||
|
|
||||||
These are the subclasses that implement MIBs and support devices:
|
These are the subclasses that implement MIBs and support devices:
|
||||||
|
|
||||||
Required MIBs not included in the install instructions above are noted
|
Required MIBs not included in the install instructions above are noted
|
||||||
here.
|
here.
|
||||||
|
|
||||||
MIB Subclasses
|
MIB Subclasses
|
||||||
|
|
||||||
These subclasses implement method to access one or more MIBs. These are
|
These subclasses implement method to access one or more MIBs. These are
|
||||||
not used directly, but rather inherited from device subclasses.
|
not used directly, but rather inherited from device subclasses.
|
||||||
|
|
||||||
@@ -200,6 +191,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::AdslLine for details.
|
See documentation in SNMP::Info::AdslLine for details.
|
||||||
|
|
||||||
|
SNMP::Info::Aggregate
|
||||||
|
SNMP Interface to IF-MIB "ifStackTable" Aggregated Links
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Aggregate for details.
|
||||||
|
|
||||||
SNMP::Info::Airespace
|
SNMP::Info::Airespace
|
||||||
AIRESPACE-WIRELESS-MIB and AIRESPACE-SWITCHING-MIB. Inherited by
|
AIRESPACE-WIRELESS-MIB and AIRESPACE-SWITCHING-MIB. Inherited by
|
||||||
devices based on the Airespace wireless platform.
|
devices based on the Airespace wireless platform.
|
||||||
@@ -218,6 +214,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Bridge for details.
|
See documentation in SNMP::Info::Bridge for details.
|
||||||
|
|
||||||
|
SNMP::Info::CiscoAgg
|
||||||
|
SNMP Interface to Cisco Aggregated Links
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::CiscoAgg for details.
|
||||||
|
|
||||||
SNMP::Info::CDP
|
SNMP::Info::CDP
|
||||||
CISCO-CDP-MIB. Cisco Discovery Protocol (CDP) Support. Inherited by
|
CISCO-CDP-MIB. Cisco Discovery Protocol (CDP) Support. Inherited by
|
||||||
Cisco, Enterasys, and HP devices.
|
Cisco, Enterasys, and HP devices.
|
||||||
@@ -230,12 +231,6 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::CiscoConfig for details.
|
See documentation in SNMP::Info::CiscoConfig for details.
|
||||||
|
|
||||||
SNMP::Info::CiscoImage
|
|
||||||
CISCO-IMAGE-MIB. A collection of OIDs providing IOS image
|
|
||||||
characteristics.
|
|
||||||
|
|
||||||
See documentation in SNMP::Info::CiscoImage for details.
|
|
||||||
|
|
||||||
SNMP::Info::CiscoPortSecurity
|
SNMP::Info::CiscoPortSecurity
|
||||||
CISCO-PORT-SECURITY-MIB and CISCO-PAE-MIB.
|
CISCO-PORT-SECURITY-MIB and CISCO-PAE-MIB.
|
||||||
|
|
||||||
@@ -315,6 +310,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::IEEE802dot11 for details.
|
See documentation in SNMP::Info::IEEE802dot11 for details.
|
||||||
|
|
||||||
|
SNMP::Info::IEEE802dot3ad
|
||||||
|
SNMP Interface to IEEE Aggregated Links. IEEE8023-LAG-MIB
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::IEEE802dot3ad for details.
|
||||||
|
|
||||||
SNMP::Info::LLDP
|
SNMP::Info::LLDP
|
||||||
LLDP-MIB, LLDP-EXT-DOT1-MIB, and LLDP-EXT-DOT3-MIB. Link Layer
|
LLDP-MIB, LLDP-EXT-DOT1-MIB, and LLDP-EXT-DOT3-MIB. Link Layer
|
||||||
Discovery Protocol (LLDP) Support.
|
Discovery Protocol (LLDP) Support.
|
||||||
@@ -327,6 +327,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::MAU for details.
|
See documentation in SNMP::Info::MAU for details.
|
||||||
|
|
||||||
|
SNMP::Info::MRO
|
||||||
|
Method resolution introspection for SNMP::Info
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::MRO for details.
|
||||||
|
|
||||||
SNMP::Info::NortelStack
|
SNMP::Info::NortelStack
|
||||||
S5-AGENT-MIB, S5-CHASSIS-MIB.
|
S5-AGENT-MIB, S5-CHASSIS-MIB.
|
||||||
|
|
||||||
@@ -351,7 +356,6 @@ SUBCLASSES
|
|||||||
See documentation in SNMP::Info::SONMP for details.
|
See documentation in SNMP::Info::SONMP for details.
|
||||||
|
|
||||||
Device Subclasses
|
Device Subclasses
|
||||||
|
|
||||||
These subclasses inherit from one or more classes to provide a common
|
These subclasses inherit from one or more classes to provide a common
|
||||||
interface to data obtainable from network devices.
|
interface to data obtainable from network devices.
|
||||||
|
|
||||||
@@ -384,7 +388,7 @@ SUBCLASSES
|
|||||||
See documentation in SNMP::Info::Layer1::Bayhub for details.
|
See documentation in SNMP::Info::Layer1::Bayhub for details.
|
||||||
|
|
||||||
SNMP::Info::Layer1::Cyclades
|
SNMP::Info::Layer1::Cyclades
|
||||||
Subclass for Cyclades terminal servers.
|
Subclass for Cyclades/Avocent terminal servers.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer1::Cyclades for details.
|
See documentation in SNMP::Info::Layer1::Cyclades for details.
|
||||||
|
|
||||||
@@ -399,6 +403,16 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer2 for details.
|
See documentation in SNMP::Info::Layer2 for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::3Com
|
||||||
|
SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2::3Com for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Adtran
|
||||||
|
Subclass for Adtran devices.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2::Adtran for details.
|
||||||
|
|
||||||
SNMP::Info::Layer2::Airespace
|
SNMP::Info::Layer2::Airespace
|
||||||
Subclass for Cisco (Airespace) wireless controllers.
|
Subclass for Cisco (Airespace) wireless controllers.
|
||||||
|
|
||||||
@@ -454,8 +468,9 @@ SUBCLASSES
|
|||||||
See documentation in SNMP::Info::Layer2::Centillion for details.
|
See documentation in SNMP::Info::Layer2::Centillion for details.
|
||||||
|
|
||||||
SNMP::Info::Layer2::Cisco
|
SNMP::Info::Layer2::Cisco
|
||||||
Generic Cisco subclass for layer2 devices that are not yet
|
Generic Cisco subclass for layer 2 devices that are not yet
|
||||||
supported in more specific subclasses.
|
supported in more specific subclassesand the base layer 2 Cisco
|
||||||
|
class for other device specific layer 2 Cisco classes.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer2::Cisco for details.
|
See documentation in SNMP::Info::Layer2::Cisco for details.
|
||||||
|
|
||||||
@@ -500,6 +515,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer2::Netgear for details.
|
See documentation in SNMP::Info::Layer2::Netgear for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Nexans
|
||||||
|
Subclass for Nexans switches
|
||||||
|
|
||||||
|
See documetion in SNMP::Info::Layer2::Nexans for details.
|
||||||
|
|
||||||
SNMP::Info::Layer2::NWSS2300
|
SNMP::Info::Layer2::NWSS2300
|
||||||
SNMP Interface to Avaya (Trapeze) Wireless Controllers
|
SNMP Interface to Avaya (Trapeze) Wireless Controllers
|
||||||
|
|
||||||
@@ -515,6 +535,16 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer2::Trapeze for details.
|
See documentation in SNMP::Info::Layer2::Trapeze for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Sixnet
|
||||||
|
SNMP Interface to Sixnet industrial switches
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2::Sixnet for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Ubiquiti
|
||||||
|
SNMP Interface to Ubiquiti Access Points and other devices
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer2::Ubiquiti for details.
|
||||||
|
|
||||||
SNMP::Info::Layer2::ZyXEL_DSLAM
|
SNMP::Info::Layer2::ZyXEL_DSLAM
|
||||||
Zyxel DSLAMs. Need I say more?
|
Zyxel DSLAMs. Need I say more?
|
||||||
|
|
||||||
@@ -588,9 +618,15 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::C6500 for details.
|
See documentation in SNMP::Info::Layer3::C6500 for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::CheckPoint
|
||||||
|
Subclass for CheckPoint devices
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::CheckPoint for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Cisco
|
SNMP::Info::Layer3::Cisco
|
||||||
This is a simple wrapper around Layer3 for IOS devices. It adds
|
This is a simple wrapper around layer 3 for IOS devices and the
|
||||||
on CiscoVTP.
|
base layer 3 Cisco class for other device specific layer 3 Cisco
|
||||||
|
classes.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Cisco for details.
|
See documentation in SNMP::Info::Layer3::Cisco for details.
|
||||||
|
|
||||||
@@ -604,15 +640,29 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::CiscoFWSM for details.
|
See documentation in SNMP::Info::Layer3::CiscoFWSM for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
Base class for L3 Cisco switches. See documentation in
|
||||||
|
SNMP::Info::Layer3::CiscoSwitch for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Contivity
|
SNMP::Info::Layer3::Contivity
|
||||||
Subclass for Avaya/Nortel Contivity/VPN Routers.
|
Subclass for Avaya/Nortel Contivity/VPN Routers.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Contivity for details.
|
See documentation in SNMP::Info::Layer3::Contivity for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Cumulus
|
||||||
|
Subclass for Cumulus Networks Routers.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::Cumulus for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::DLink
|
||||||
|
Subclass for DLink devices.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::DLink for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Dell
|
SNMP::Info::Layer3::Dell
|
||||||
Subclass for Dell PowerConnect switches. D-Link, the IBM
|
Subclass for Dell PowerConnect switches. The IBM BladeCenter
|
||||||
BladeCenter Gigabit Ethernet Switch Module and some Linksys
|
Gigabit Ethernet Switch Module and some Linksys switches also
|
||||||
switches also use this module based upon MIB support.
|
use this module based upon MIB support.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Dell for details.
|
See documentation in SNMP::Info::Layer3::Dell for details.
|
||||||
|
|
||||||
@@ -621,6 +671,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Enterasys for details.
|
See documentation in SNMP::Info::Layer3::Enterasys for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::ERX
|
||||||
|
Subclass for Juniper ERX switches.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::ERX for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Extreme
|
SNMP::Info::Layer3::Extreme
|
||||||
Subclass for Extreme Networks switches.
|
Subclass for Extreme Networks switches.
|
||||||
|
|
||||||
@@ -636,6 +691,11 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Force10 for details.
|
See documentation in SNMP::Info::Layer3::Force10 for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Fortinet
|
||||||
|
Subclass for Fortinet devices.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::Fortinet for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Foundry
|
SNMP::Info::Layer3::Foundry
|
||||||
Subclass for Brocade (Foundry) Network devices.
|
Subclass for Brocade (Foundry) Network devices.
|
||||||
|
|
||||||
@@ -653,6 +713,17 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::HP9300 for details.
|
See documentation in SNMP::Info::Layer3::HP9300 for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Huawei
|
||||||
|
SNMP Interface to Huawei Layer 3 switches and routers.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::Huawei for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::IBMGbTor
|
||||||
|
SNMP Interface to IBM Rackswitch (formerly Blade Network
|
||||||
|
Technologies) network devices.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::IBMGbTor for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Juniper
|
SNMP::Info::Layer3::Juniper
|
||||||
Subclass for Juniper devices
|
Subclass for Juniper devices
|
||||||
|
|
||||||
@@ -694,12 +765,22 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Nexus for details.
|
See documentation in SNMP::Info::Layer3::Nexus for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::OneAccess
|
||||||
|
Subclass for OneAccess Quidway switches
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::OneAccess for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::PacketFront
|
SNMP::Info::Layer3::PacketFront
|
||||||
Subclass for PacketFront DRG series CPE.
|
Subclass for PacketFront DRG series CPE.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::PacketFront for
|
See documentation in SNMP::Info::Layer3::PacketFront for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::PaloAlto
|
||||||
|
Subclass for Palo Alto firewalls.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::PaloAlto for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Passport
|
SNMP::Info::Layer3::Passport
|
||||||
Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000
|
Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000
|
||||||
series, Accelar, and VSP 9000 series switches.
|
series, Accelar, and VSP 9000 series switches.
|
||||||
@@ -720,6 +801,10 @@ SUBCLASSES
|
|||||||
Subclass for generic SonicWALL devices. See documentation in
|
Subclass for generic SonicWALL devices. See documentation in
|
||||||
SNMP::Info::Layer3::SonicWALL for details.
|
SNMP::Info::Layer3::SonicWALL for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Steelhead
|
||||||
|
Subclass for Riverbed Steelhead WAN optimization appliances. See
|
||||||
|
documentation in SNMP::Info::Layer3::Steelhead for details.
|
||||||
|
|
||||||
SNMP::Info::Layer3::Sun
|
SNMP::Info::Layer3::Sun
|
||||||
Subclass for Generic Sun Routers running SunOS.
|
Subclass for Generic Sun Routers running SunOS.
|
||||||
|
|
||||||
@@ -735,28 +820,53 @@ SUBCLASSES
|
|||||||
|
|
||||||
See documentation in SNMP::Info::Layer3::Timetra for details.
|
See documentation in SNMP::Info::Layer3::Timetra for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::VyOS
|
||||||
|
Subclass for VyOS routers.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::VyOS for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::VMware
|
||||||
|
Subclass for VMware ESXi hosts.
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer3::VMware for details.
|
||||||
|
|
||||||
SNMP::Info::Layer7
|
SNMP::Info::Layer7
|
||||||
Generic Layer7 Devices.
|
Generic Layer7 Devices.
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer7 for details.
|
See documentation in SNMP::Info::Layer7 for details.
|
||||||
|
|
||||||
SNMP::Info::Layer7::APC
|
SNMP::Info::Layer7::APC
|
||||||
SNMP Interface to APC UPS devices
|
Subclass for APC UPS devices
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer7::APC for details.
|
See documentation in SNMP::Info::Layer7::APC for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer7::Arbor
|
||||||
|
Subclass for Arbor appliances
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer7::Arbor for details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer7::CiscoIPS
|
||||||
|
Subclass for Cisco IPS devices
|
||||||
|
|
||||||
|
See documentation in "SNMP::Info::Layer7::Cisco IPS" for
|
||||||
|
details.
|
||||||
|
|
||||||
|
SNMP::Info::Layer7::Gigamon
|
||||||
|
Subclass for Gigamon devices
|
||||||
|
|
||||||
|
See documentation in SNMP::Info::Layer7::Gigamon for details.
|
||||||
|
|
||||||
SNMP::Info::Layer7::Netscaler
|
SNMP::Info::Layer7::Netscaler
|
||||||
SNMP Interface to Citrix Netscaler appliances
|
Subclass for Citrix Netscaler appliances
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer7::Netscaler for details.
|
See documentation in SNMP::Info::Layer7::Netscaler for details.
|
||||||
|
|
||||||
SNMP::Info::Layer7::Neoteris
|
SNMP::Info::Layer7::Neoteris
|
||||||
SNMP Interface to Juniper SSL VPN appliances
|
Subclass for Juniper SSL VPN appliances
|
||||||
|
|
||||||
See documentation in SNMP::Info::Layer7::Neoteris for details.
|
See documentation in SNMP::Info::Layer7::Neoteris for details.
|
||||||
|
|
||||||
Thanks
|
Thanks
|
||||||
|
|
||||||
Thanks for testing and coding help (in no particular order) to :
|
Thanks for testing and coding help (in no particular order) to :
|
||||||
Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex
|
Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex
|
||||||
Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson,
|
Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson,
|
||||||
@@ -767,9 +877,7 @@ Thanks
|
|||||||
Netdisco README!
|
Netdisco README!
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
|
|
||||||
Constructor
|
Constructor
|
||||||
|
|
||||||
new()
|
new()
|
||||||
Creates a new object and connects via SNMP::Session.
|
Creates a new object and connects via SNMP::Session.
|
||||||
|
|
||||||
@@ -868,6 +976,19 @@ USAGE
|
|||||||
|
|
||||||
(default creates session automatically)
|
(default creates session automatically)
|
||||||
|
|
||||||
|
Offline
|
||||||
|
Causes SNMP::Info to avoid network activity and return data only
|
||||||
|
from its cache. If you ask for something not in the cache, an
|
||||||
|
error is thrown. See also the "cache()" and "offline()" methods.
|
||||||
|
|
||||||
|
(default 0, which means "online")
|
||||||
|
|
||||||
|
Cache
|
||||||
|
Pass in a HashRef to prime the cache of retrieved data. Useful
|
||||||
|
for creating an instance in "Offline" mode from a previously
|
||||||
|
dumped cache. See also the "cache()" method to retrieve a cache
|
||||||
|
after running actial queries.
|
||||||
|
|
||||||
OTHER
|
OTHER
|
||||||
All other arguments are passed to SNMP::Session.
|
All other arguments are passed to SNMP::Session.
|
||||||
|
|
||||||
@@ -906,7 +1027,6 @@ USAGE
|
|||||||
identify the device.
|
identify the device.
|
||||||
|
|
||||||
Data is Cached
|
Data is Cached
|
||||||
|
|
||||||
Methods and subroutines requesting data from a device will only load the
|
Methods and subroutines requesting data from a device will only load the
|
||||||
data once, and then return cached versions of that data.
|
data once, and then return cached versions of that data.
|
||||||
|
|
||||||
@@ -916,8 +1036,10 @@ USAGE
|
|||||||
Run $info->clear_cache() to clear the cache to allow reload of both
|
Run $info->clear_cache() to clear the cache to allow reload of both
|
||||||
globals and table methods.
|
globals and table methods.
|
||||||
|
|
||||||
Object Scalar Methods
|
The cache can be retrieved or set using the $info->cache() method. This
|
||||||
|
works together with the "Offline" option.
|
||||||
|
|
||||||
|
Object Scalar Methods
|
||||||
These are for package related data, not directly supplied from SNMP.
|
These are for package related data, not directly supplied from SNMP.
|
||||||
|
|
||||||
$info->clear_cache()
|
$info->clear_cache()
|
||||||
@@ -928,6 +1050,17 @@ USAGE
|
|||||||
Returns current debug status, and optionally toggles debugging info
|
Returns current debug status, and optionally toggles debugging info
|
||||||
for this object.
|
for this object.
|
||||||
|
|
||||||
|
$info->offline([1|0])
|
||||||
|
Returns if offline mode is currently turned on for this object.
|
||||||
|
|
||||||
|
Optionally sets the Offline parameter.
|
||||||
|
|
||||||
|
$info->cache([new_cache])
|
||||||
|
Returns a HashRef of all cached data in this object. There will be a
|
||||||
|
"store" key for table data and then one key for each leaf.
|
||||||
|
|
||||||
|
Optionally sets the cache parameters if passed a HashRef.
|
||||||
|
|
||||||
$info->bulkwalk([1|0])
|
$info->bulkwalk([1|0])
|
||||||
Returns if bulkwalk is currently turned on for this object.
|
Returns if bulkwalk is currently turned on for this object.
|
||||||
|
|
||||||
@@ -951,10 +1084,6 @@ USAGE
|
|||||||
If the device still can be connected to via SNMP::Info, then
|
If the device still can be connected to via SNMP::Info, then
|
||||||
SNMP::Info is returned.
|
SNMP::Info is returned.
|
||||||
|
|
||||||
See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt
|
|
||||||
for more details about device support, or view "device_type()" in
|
|
||||||
Info.pm.
|
|
||||||
|
|
||||||
$info->error(no_clear)
|
$info->error(no_clear)
|
||||||
Returns Error message if there is an error, or undef if there is
|
Returns Error message if there is an error, or undef if there is
|
||||||
not.
|
not.
|
||||||
@@ -994,7 +1123,6 @@ USAGE
|
|||||||
Indexing.html>
|
Indexing.html>
|
||||||
|
|
||||||
Globals (Scalar Methods)
|
Globals (Scalar Methods)
|
||||||
|
|
||||||
These are methods to return scalar data from RFC1213.
|
These are methods to return scalar data from RFC1213.
|
||||||
|
|
||||||
Some subset of these is probably available for any network device that
|
Some subset of these is probably available for any network device that
|
||||||
@@ -1018,7 +1146,7 @@ USAGE
|
|||||||
This returns a binary encoded string where each digit represents a
|
This returns a binary encoded string where each digit represents a
|
||||||
layer of the OSI model served by the device.
|
layer of the OSI model served by the device.
|
||||||
|
|
||||||
eg: 01000010 means layers 2 (physical) and 7 (Application)
|
eg: 01000010 means layers 2 (physical) and 7 (Application)
|
||||||
are served.
|
are served.
|
||||||
|
|
||||||
Note: This string is 8 digits long.
|
Note: This string is 8 digits long.
|
||||||
@@ -1043,7 +1171,6 @@ USAGE
|
|||||||
("ipForwarding")
|
("ipForwarding")
|
||||||
|
|
||||||
Table Methods
|
Table Methods
|
||||||
|
|
||||||
Each of these methods returns a hash_reference to a hash keyed on the
|
Each of these methods returns a hash_reference to a hash keyed on the
|
||||||
interface index in SNMP.
|
interface index in SNMP.
|
||||||
|
|
||||||
@@ -1058,7 +1185,6 @@ USAGE
|
|||||||
cases changes between reboots of the network device.
|
cases changes between reboots of the network device.
|
||||||
|
|
||||||
Partial Table Fetches
|
Partial Table Fetches
|
||||||
|
|
||||||
If you want to get only a part of an SNMP table or a single instance
|
If you want to get only a part of an SNMP table or a single instance
|
||||||
from the table and you know the IID for the part of the table that you
|
from the table and you know the IID for the part of the table that you
|
||||||
want, you can specify it in the call:
|
want, you can specify it in the call:
|
||||||
@@ -1073,7 +1199,6 @@ USAGE
|
|||||||
Partial table results are not cached.
|
Partial table results are not cached.
|
||||||
|
|
||||||
Interface Information
|
Interface Information
|
||||||
|
|
||||||
$info->interfaces()
|
$info->interfaces()
|
||||||
This methods is overridden in each subclass to provide a mapping
|
This methods is overridden in each subclass to provide a mapping
|
||||||
between the Interface Table Index (iid) and the physical port name.
|
between the Interface Table Index (iid) and the physical port name.
|
||||||
@@ -1168,7 +1293,6 @@ USAGE
|
|||||||
("ifAlias")
|
("ifAlias")
|
||||||
|
|
||||||
Interface Statistics
|
Interface Statistics
|
||||||
|
|
||||||
$info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(),
|
$info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(),
|
||||||
$info->i_octets_out64()
|
$info->i_octets_out64()
|
||||||
Bandwidth.
|
Bandwidth.
|
||||||
@@ -1259,7 +1383,6 @@ USAGE
|
|||||||
("ifSpecific")
|
("ifSpecific")
|
||||||
|
|
||||||
IP Address Table
|
IP Address Table
|
||||||
|
|
||||||
Each entry in this table is an IP address in use on this device. Usually
|
Each entry in this table is an IP address in use on this device. Usually
|
||||||
this is implemented in Layer3 Devices.
|
this is implemented in Layer3 Devices.
|
||||||
|
|
||||||
@@ -1284,7 +1407,6 @@ USAGE
|
|||||||
("ipAdEntBcastAddr")
|
("ipAdEntBcastAddr")
|
||||||
|
|
||||||
IP Routing Table
|
IP Routing Table
|
||||||
|
|
||||||
$info->ipr_route()
|
$info->ipr_route()
|
||||||
The route in question. A value of 0.0.0.0 is the default gateway
|
The route in question. A value of 0.0.0.0 is the default gateway
|
||||||
route.
|
route.
|
||||||
@@ -1401,7 +1523,6 @@ USAGE
|
|||||||
("ipRouteInfo")
|
("ipRouteInfo")
|
||||||
|
|
||||||
Topology Information
|
Topology Information
|
||||||
|
|
||||||
Based upon the manufacturer and software version devices may support
|
Based upon the manufacturer and software version devices may support
|
||||||
some combination of Layer 2 topology protocol information. SNMP::Info
|
some combination of Layer 2 topology protocol information. SNMP::Info
|
||||||
supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery
|
supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery
|
||||||
@@ -1419,7 +1540,6 @@ USAGE
|
|||||||
AMAP: See SNMP::Info::AMAP for details.
|
AMAP: See SNMP::Info::AMAP for details.
|
||||||
|
|
||||||
Topology Capabilities
|
Topology Capabilities
|
||||||
|
|
||||||
$info->has_topo()
|
$info->has_topo()
|
||||||
Reports Layer 2 topology protocols which are supported and running
|
Reports Layer 2 topology protocols which are supported and running
|
||||||
on a device.
|
on a device.
|
||||||
@@ -1429,7 +1549,6 @@ USAGE
|
|||||||
protocols are supported or running.
|
protocols are supported or running.
|
||||||
|
|
||||||
Common Topology Table Information
|
Common Topology Table Information
|
||||||
|
|
||||||
The common topology table methods below will query the device for
|
The common topology table methods below will query the device for
|
||||||
information from the specified topology protocols and return a single
|
information from the specified topology protocols and return a single
|
||||||
hash combining all information. As a result, there may be identical
|
hash combining all information. As a result, there may be identical
|
||||||
@@ -1479,10 +1598,17 @@ USAGE
|
|||||||
$info->c_platform(partial, topology_protocol_arrayref)
|
$info->c_platform(partial, topology_protocol_arrayref)
|
||||||
Returns reference to hash. Key: iid, Value: Remote Device Type
|
Returns reference to hash. Key: iid, Value: Remote Device Type
|
||||||
|
|
||||||
Note: LLDP and EDP do not provide this information.
|
Note: EDP does not provide this information. LLDP uses
|
||||||
|
("lldpRemSysDesc") or "lldp_rem_sysname" as the closest match.
|
||||||
|
|
||||||
|
$info->c_cap(partial, topology_protocol_arrayref)
|
||||||
|
Returns reference to hash of arrays. Key: iid, Value: Array of
|
||||||
|
capabilities supported by the device. See the specific protocol
|
||||||
|
class for string values which could be elements within the array.
|
||||||
|
|
||||||
|
Note: Only CDP and LLDP support this method.
|
||||||
|
|
||||||
SETTING DATA VIA SNMP
|
SETTING DATA VIA SNMP
|
||||||
|
|
||||||
This section explains how to use SNMP::Info to do SNMP Set operations.
|
This section explains how to use SNMP::Info to do SNMP Set operations.
|
||||||
|
|
||||||
$info->set_METHOD($value)
|
$info->set_METHOD($value)
|
||||||
@@ -1501,7 +1627,7 @@ SETTING DATA VIA SNMP
|
|||||||
|
|
||||||
# Disable a port administratively
|
# Disable a port administratively
|
||||||
my %if_map = reverse %{$info->interfaces()}
|
my %if_map = reverse %{$info->interfaces()}
|
||||||
$info->set_i_up_admin('down', $if_map{'FastEthernet0/0'})
|
$info->set_i_up_admin('down', $if_map{'FastEthernet0/0'})
|
||||||
or die "Couldn't disable the port. ",$info->error(1);
|
or die "Couldn't disable the port. ",$info->error(1);
|
||||||
|
|
||||||
NOTE: You must be connected to your device with a "ReadWrite" community
|
NOTE: You must be connected to your device with a "ReadWrite" community
|
||||||
@@ -1512,7 +1638,6 @@ SETTING DATA VIA SNMP
|
|||||||
subroutines will need to be added if they haven't been already.
|
subroutines will need to be added if they haven't been already.
|
||||||
|
|
||||||
Quiet Mode
|
Quiet Mode
|
||||||
|
|
||||||
SNMP::Info will not chirp anything to STDOUT unless there is a serious
|
SNMP::Info will not chirp anything to STDOUT unless there is a serious
|
||||||
error (in which case it will probably die).
|
error (in which case it will probably die).
|
||||||
|
|
||||||
@@ -1527,7 +1652,6 @@ Quiet Mode
|
|||||||
my $name = $info->name() or die "Couldn't get sysName!" . $name->error();
|
my $name = $info->name() or die "Couldn't get sysName!" . $name->error();
|
||||||
|
|
||||||
EXTENDING SNMP::INFO
|
EXTENDING SNMP::INFO
|
||||||
|
|
||||||
To support a new class (vendor or platform) of device, add a Perl
|
To support a new class (vendor or platform) of device, add a Perl
|
||||||
package with the data structures and methods listed below.
|
package with the data structures and methods listed below.
|
||||||
|
|
||||||
@@ -1537,14 +1661,13 @@ EXTENDING SNMP::INFO
|
|||||||
to verify the implementation.
|
to verify the implementation.
|
||||||
|
|
||||||
Gathering MIB data for SNMP::Info Developers
|
Gathering MIB data for SNMP::Info Developers
|
||||||
|
|
||||||
The preference is to open a feature request in the SourceForge project.
|
The preference is to open a feature request in the SourceForge project.
|
||||||
This allows all developers to have visibility into the request. Please
|
This allows all developers to have visibility into the request. Please
|
||||||
include pointers to the applicable platform MIBs. For development we
|
include pointers to the applicable platform MIBs. For development we
|
||||||
will need an "snmpwalk" of the device. There is a tool now included in
|
will need an "snmpwalk" of the device. There is a tool now included in
|
||||||
the SNMP::Info distribution to help with this task, although you'll most
|
the SNMP::Info distribution to help with this task, although you'll most
|
||||||
likely need to download the distribution from CPAN as it's included in
|
likely need to download the distribution from CPAN as it's included in
|
||||||
the ""t/util"" directory.
|
the ""contrib/util"" directory.
|
||||||
|
|
||||||
The utility is named "make_snmpdata.pl". Run it with a command line
|
The utility is named "make_snmpdata.pl". Run it with a command line
|
||||||
like:
|
like:
|
||||||
@@ -1563,7 +1686,6 @@ EXTENDING SNMP::INFO
|
|||||||
ticket.
|
ticket.
|
||||||
|
|
||||||
Data Structures required in new Subclass
|
Data Structures required in new Subclass
|
||||||
|
|
||||||
A class inheriting this class must implement these data structures :
|
A class inheriting this class must implement these data structures :
|
||||||
|
|
||||||
$INIT
|
$INIT
|
||||||
@@ -1620,7 +1742,6 @@ EXTENDING SNMP::INFO
|
|||||||
)
|
)
|
||||||
|
|
||||||
Sample Subclass
|
Sample Subclass
|
||||||
|
|
||||||
Let's make a sample Layer 2 Device subclass. This class will inherit the
|
Let's make a sample Layer 2 Device subclass. This class will inherit the
|
||||||
Cisco Vlan module as an example.
|
Cisco Vlan module as an example.
|
||||||
|
|
||||||
@@ -1688,7 +1809,7 @@ EXTENDING SNMP::INFO
|
|||||||
return 'Fire' if $power =~ /reallyhot/i;
|
return 'Fire' if $power =~ /reallyhot/i;
|
||||||
return 'Ice' if $power =~ /reallycold/i;
|
return 'Ice' if $power =~ /reallycold/i;
|
||||||
|
|
||||||
# Else
|
# Else
|
||||||
return $power;
|
return $power;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1713,9 +1834,7 @@ EXTENDING SNMP::INFO
|
|||||||
of SNMP::Info.
|
of SNMP::Info.
|
||||||
|
|
||||||
SNMP::INFO INTERNALS
|
SNMP::INFO INTERNALS
|
||||||
|
|
||||||
Object Namespace
|
Object Namespace
|
||||||
|
|
||||||
Internal data is stored with bareword keys. For example $info->{debug}
|
Internal data is stored with bareword keys. For example $info->{debug}
|
||||||
|
|
||||||
SNMP Data is stored or marked cached with keys starting with an
|
SNMP Data is stored or marked cached with keys starting with an
|
||||||
@@ -1725,7 +1844,6 @@ SNMP::INFO INTERNALS
|
|||||||
above.
|
above.
|
||||||
|
|
||||||
Package Globals
|
Package Globals
|
||||||
|
|
||||||
These set the default value for an object upon creation.
|
These set the default value for an object upon creation.
|
||||||
|
|
||||||
$DEBUG
|
$DEBUG
|
||||||
@@ -1747,7 +1865,6 @@ SNMP::INFO INTERNALS
|
|||||||
for more info. Can change by passing BulkRepeaters option in new()
|
for more info. Can change by passing BulkRepeaters option in new()
|
||||||
|
|
||||||
Data Munging Callback Subroutines
|
Data Munging Callback Subroutines
|
||||||
|
|
||||||
munge_speed()
|
munge_speed()
|
||||||
Makes human friendly speed ratings using %SPEED_MAP
|
Makes human friendly speed ratings using %SPEED_MAP
|
||||||
|
|
||||||
@@ -1756,12 +1873,12 @@ SNMP::INFO INTERNALS
|
|||||||
'64000' => '64 kbps',
|
'64000' => '64 kbps',
|
||||||
'115000' => '115 kpbs',
|
'115000' => '115 kpbs',
|
||||||
'1500000' => '1.5 Mbps',
|
'1500000' => '1.5 Mbps',
|
||||||
'1536000' => 'T1',
|
'1536000' => 'T1',
|
||||||
'1544000' => 'T1',
|
'1544000' => 'T1',
|
||||||
'2000000' => '2.0 Mbps',
|
'2000000' => '2.0 Mbps',
|
||||||
'2048000' => '2.048 Mbps',
|
'2048000' => '2.048 Mbps',
|
||||||
'3072000' => 'Dual T1',
|
'3072000' => 'Dual T1',
|
||||||
'3088000' => 'Dual T1',
|
'3088000' => 'Dual T1',
|
||||||
'4000000' => '4.0 Mbps',
|
'4000000' => '4.0 Mbps',
|
||||||
'10000000' => '10 Mbps',
|
'10000000' => '10 Mbps',
|
||||||
'11000000' => '11 Mbps',
|
'11000000' => '11 Mbps',
|
||||||
@@ -1777,15 +1894,17 @@ SNMP::INFO INTERNALS
|
|||||||
'54000000' => '54 Mbps',
|
'54000000' => '54 Mbps',
|
||||||
'64000000' => '64 Mbps',
|
'64000000' => '64 Mbps',
|
||||||
'100000000' => '100 Mbps',
|
'100000000' => '100 Mbps',
|
||||||
|
'200000000' => '200 Mbps',
|
||||||
'149760000' => 'ATM on OC-3',
|
'149760000' => 'ATM on OC-3',
|
||||||
'155000000' => 'OC-3',
|
'155000000' => 'OC-3',
|
||||||
'155519000' => 'OC-3',
|
'155519000' => 'OC-3',
|
||||||
'155520000' => 'OC-3',
|
'155520000' => 'OC-3',
|
||||||
'400000000' => '400 Mbps',
|
'400000000' => '400 Mbps',
|
||||||
'599040000' => 'ATM on OC-12',
|
'599040000' => 'ATM on OC-12',
|
||||||
'622000000' => 'OC-12',
|
'622000000' => 'OC-12',
|
||||||
'622080000' => 'OC-12',
|
'622080000' => 'OC-12',
|
||||||
'1000000000' => '1.0 Gbps',
|
'1000000000' => '1.0 Gbps',
|
||||||
|
'2000000000' => '2.0 Gbps',
|
||||||
'2488000000' => 'OC-48',
|
'2488000000' => 'OC-48',
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1806,6 +1925,10 @@ SNMP::INFO INTERNALS
|
|||||||
ASCII hex string.
|
ASCII hex string.
|
||||||
|
|
||||||
munge_prio_mac()
|
munge_prio_mac()
|
||||||
|
Takes an 2-byte octet stream (HEX-STRING) and returns a colon
|
||||||
|
separated ASCII hex string.
|
||||||
|
|
||||||
|
munge_prio_port()
|
||||||
Takes an 8-byte octet stream (HEX-STRING) and returns a colon
|
Takes an 8-byte octet stream (HEX-STRING) and returns a colon
|
||||||
separated ASCII hex string.
|
separated ASCII hex string.
|
||||||
|
|
||||||
@@ -1818,10 +1941,6 @@ SNMP::INFO INTERNALS
|
|||||||
munge_bits
|
munge_bits
|
||||||
Takes a SNMP2 'BITS' field and returns the ASCII bit string
|
Takes a SNMP2 'BITS' field and returns the ASCII bit string
|
||||||
|
|
||||||
munge_caps
|
|
||||||
Takes an octet string and returns an ascii binary string, 7 digits
|
|
||||||
long, MSB.
|
|
||||||
|
|
||||||
munge_counter64
|
munge_counter64
|
||||||
If $BIGINT is set to true, then a Math::BigInt object is returned.
|
If $BIGINT is set to true, then a Math::BigInt object is returned.
|
||||||
See Math::BigInt for details.
|
See Math::BigInt for details.
|
||||||
@@ -1849,7 +1968,6 @@ SNMP::INFO INTERNALS
|
|||||||
Takes an OID and return the object name if the right MIB is loaded.
|
Takes an OID and return the object name if the right MIB is loaded.
|
||||||
|
|
||||||
Internally Used Functions
|
Internally Used Functions
|
||||||
|
|
||||||
$info->init()
|
$info->init()
|
||||||
Used internally. Loads all entries in %MIBS.
|
Used internally. Loads all entries in %MIBS.
|
||||||
|
|
||||||
@@ -2027,7 +2145,6 @@ SNMP::INFO INTERNALS
|
|||||||
Returns undef if the method does not exist and can not be created.
|
Returns undef if the method does not exist and can not be created.
|
||||||
|
|
||||||
AUTOLOAD
|
AUTOLOAD
|
||||||
|
|
||||||
Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in
|
Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in
|
||||||
loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated
|
loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated
|
||||||
methods are inserted into the symbol table so that subsequent calls can
|
methods are inserted into the symbol table so that subsequent calls can
|
||||||
@@ -2050,7 +2167,6 @@ SNMP::INFO INTERNALS
|
|||||||
subclass.
|
subclass.
|
||||||
|
|
||||||
COPYRIGHT AND LICENSE
|
COPYRIGHT AND LICENSE
|
||||||
|
|
||||||
Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010
|
Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010
|
||||||
Max Baker and SNMP::Info Developers All rights reserved.
|
Max Baker and SNMP::Info Developers All rights reserved.
|
||||||
|
|
||||||
@@ -2066,8 +2182,8 @@ COPYRIGHT AND LICENSE
|
|||||||
* 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
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ Coding Guidelines:
|
|||||||
- tab-width of 4, no tab characters
|
- tab-width of 4, no tab characters
|
||||||
- keep POD documentation up-to-date
|
- keep POD documentation up-to-date
|
||||||
- always update ChangeLog before committing
|
- always update ChangeLog before committing
|
||||||
- always update DeviceMatrix.txt 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:
|
||||||
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
use File::Glob qw/bsd_glob/;
|
use File::Glob qw/bsd_glob/;
|
||||||
|
|
||||||
my @pms = glob_rec("../Info");
|
my @pms = glob_rec("./lib");
|
||||||
|
|
||||||
$new_version = shift @ARGV || '3.01';
|
$new_version = shift @ARGV || die "missing new version\n";
|
||||||
|
|
||||||
foreach my $p (@pms) {
|
foreach my $p (@pms) {
|
||||||
print "$p\n";
|
print "$p\n";
|
||||||
@@ -16,6 +16,7 @@ foreach my $p (@pms) {
|
|||||||
|
|
||||||
while (<O>) {
|
while (<O>) {
|
||||||
s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
|
s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
|
||||||
|
s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/;
|
||||||
print P;
|
print P;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,6 +42,7 @@ my $EMPTY = q{};
|
|||||||
my $class = $EMPTY;
|
my $class = $EMPTY;
|
||||||
my @dump = ();
|
my @dump = ();
|
||||||
my $debug = 0;
|
my $debug = 0;
|
||||||
|
my $cache = 0;
|
||||||
my $device = '';
|
my $device = '';
|
||||||
my $comm = '';
|
my $comm = '';
|
||||||
my $ver = 2;
|
my $ver = 2;
|
||||||
@@ -58,9 +59,10 @@ GetOptions(
|
|||||||
'v|ver=i' => \$ver,
|
'v|ver=i' => \$ver,
|
||||||
'i|ignore' => \$ignore,
|
'i|ignore' => \$ignore,
|
||||||
'p|print=s' => \@dump,
|
'p|print=s' => \@dump,
|
||||||
'x|debug+' => \$debug,
|
|
||||||
'm|mibdir=s' => \$mibdirs,
|
'm|mibdir=s' => \$mibdirs,
|
||||||
'n|nobulk' => \$nobulk,
|
'n|nobulk' => \$nobulk,
|
||||||
|
'x|debug+' => \$debug,
|
||||||
|
'k|cache' => \$cache,
|
||||||
'h|?|help' => sub { pod2usage(1); },
|
'h|?|help' => sub { pod2usage(1); },
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -170,6 +172,15 @@ foreach my $fn (@dump) {
|
|||||||
if ( !$dumped{$fn} ) { test_fn( $dev, $fn ) }
|
if ( !$dumped{$fn} ) { test_fn( $dev, $fn ) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($cache) {
|
||||||
|
eval {
|
||||||
|
require Data::Printer;
|
||||||
|
} && eval {
|
||||||
|
print "\nDumping cache...\n\n";
|
||||||
|
Data::Printer::p $dev;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#--------------------------------
|
#--------------------------------
|
||||||
|
|
||||||
sub test_global {
|
sub test_global {
|
||||||
@@ -244,10 +255,11 @@ Options:
|
|||||||
-s|comm SNMP community
|
-s|comm SNMP community
|
||||||
-v|ver SNMP version
|
-v|ver SNMP version
|
||||||
-p|print Print values
|
-p|print Print values
|
||||||
-x|debug Debugging flag
|
|
||||||
-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
|
||||||
|
-x|debug Debugging flag
|
||||||
|
-k|cache Dump cache (requires Data::Printer to be installed)
|
||||||
-h|?|help Brief help message
|
-h|?|help Brief help message
|
||||||
|
|
||||||
=head1 OPTIONS
|
=head1 OPTIONS
|
||||||
@@ -286,12 +298,6 @@ multiple times.
|
|||||||
|
|
||||||
-print i_description -print i_type
|
-print i_description -print i_type
|
||||||
|
|
||||||
=item B<-debug>
|
|
||||||
|
|
||||||
Turns on SNMP::Info debug.
|
|
||||||
|
|
||||||
-debug
|
|
||||||
|
|
||||||
=item B<-ignore >
|
=item B<-ignore >
|
||||||
|
|
||||||
Ignore Net-SNMP configuration file snmp.conf. If this used mibdirs must be
|
Ignore Net-SNMP configuration file snmp.conf. If this used mibdirs must be
|
||||||
@@ -312,6 +318,19 @@ Disable SNMP bulkwalk. Default bulkwalk is on and utilized with version 2.
|
|||||||
|
|
||||||
-nobulk
|
-nobulk
|
||||||
|
|
||||||
|
=item B<-debug>
|
||||||
|
|
||||||
|
Turns on SNMP::Info debug.
|
||||||
|
|
||||||
|
-debug
|
||||||
|
|
||||||
|
=item B<-cache>
|
||||||
|
|
||||||
|
Dumps the table and leaf cache at the end of running. Requires that the
|
||||||
|
L<Data::Printer> module be installed, otherwise does nothing.
|
||||||
|
|
||||||
|
-cache
|
||||||
|
|
||||||
=item B<-help>
|
=item B<-help>
|
||||||
|
|
||||||
Print help message and exits.
|
Print help message and exits.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/env perl
|
||||||
#
|
#
|
||||||
# test_class_mocked.pl
|
# test_class_mocked.pl
|
||||||
#
|
#
|
||||||
@@ -33,7 +33,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Carp;
|
use Carp;
|
||||||
use FindBin;
|
use FindBin;
|
||||||
use lib "$FindBin::Bin/../../..";
|
use lib "$FindBin::Bin/../../lib";
|
||||||
use File::Slurp qw(slurp);
|
use File::Slurp qw(slurp);
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
use Pod::Usage;
|
use Pod::Usage;
|
||||||
@@ -286,7 +286,7 @@ sub mock_getnext {
|
|||||||
my $val = $EMPTY;
|
my $val = $EMPTY;
|
||||||
my $data = $c_data->{$leaf};
|
my $data = $c_data->{$leaf};
|
||||||
my $count = scalar keys %{$data} || 0;
|
my $count = scalar keys %{$data} || 0;
|
||||||
if ( $count > 1 ) {
|
if ( $count ) {
|
||||||
my $found = 0;
|
my $found = 0;
|
||||||
foreach my $d_iid ( sort keys %{$data} ) {
|
foreach my $d_iid ( sort keys %{$data} ) {
|
||||||
if ( $d_iid gt $iid && !$found ) {
|
if ( $d_iid gt $iid && !$found ) {
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -33,12 +33,12 @@ use strict;
|
|||||||
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/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS
|
%MIBS
|
||||||
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
||||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# $Id$
|
# SNMP::Info::Aggregate
|
||||||
#
|
#
|
||||||
# Copyright (c) 2005 Matt Tuttle
|
# Copyright (c) 2014 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
|
||||||
@@ -27,88 +27,104 @@
|
|||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
package SNMP::Info::CiscoImage;
|
package SNMP::Info::Aggregate;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info;
|
use SNMP::Info;
|
||||||
|
|
||||||
@SNMP::Info::CiscoImage::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::Aggregate::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoImage::EXPORT_OK = qw//;
|
@SNMP::Info::Aggregate::EXPORT_OK = qw/agg_ports_ifstack/;
|
||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );
|
# Load MIB for leafs referenced within class
|
||||||
|
%MIBS = ('IF-MIB' => 'ifIndex',);
|
||||||
|
|
||||||
%GLOBALS = ();
|
%GLOBALS = ();
|
||||||
|
|
||||||
%FUNCS = ( 'ci_images' => 'ciscoImageString', );
|
%FUNCS = ();
|
||||||
|
|
||||||
%MUNGE = ();
|
%MUNGE = ();
|
||||||
|
|
||||||
|
sub agg_ports_ifstack {
|
||||||
|
my $dev = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $ifStack = $dev->ifStackStatus();
|
||||||
|
# TODO: if we want to do partial, we need to use inverse status
|
||||||
|
my $ifType = $dev->ifType();
|
||||||
|
|
||||||
|
my $ret = {};
|
||||||
|
|
||||||
|
foreach my $idx ( keys %$ifStack ) {
|
||||||
|
my ( $higher, $lower ) = split /\./, $idx;
|
||||||
|
next if ( $higher == 0 or $lower == 0 );
|
||||||
|
if ( $ifType->{ $higher } eq 'ieee8023adLag' or $ifType->{ $higher } eq 'propMultiplexor') {
|
||||||
|
$ret->{ $lower } = $higher;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::CiscoImage - SNMP Interface to image strings for Cisco Devices
|
SNMP::Info::Aggregate - SNMP Interface to ifStackTable Aggregated Links
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Matt Tuttle (C<mtuttle@americanhebrewacademy.org>)
|
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 $ci = new SNMP::Info(
|
my $info = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
# These arguments are passed directly on to SNMP::Session
|
DestHost => 'myrouter',
|
||||||
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 = $ci->class();
|
my $class = $info->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
|
||||||
|
|
||||||
SNMP::Info::CiscoImage is a subclass of SNMP::Info that provides access to
|
This class provides access to Aggregated Links configuration on devices
|
||||||
image strings embedded in an image running on Cisco Devices.
|
supporting C<ifStackTable>.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
None.
|
L<SNMP::Info>
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item F<CISCO-IMAGE-MIB>
|
=item F<IF-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
=head1 METHODS
|
||||||
|
|
||||||
=head1 GLOBALS
|
=over 4
|
||||||
|
|
||||||
None.
|
=item C<agg_ports_ifstack>
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
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
|
||||||
=over
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
=item $ci->ci_images()
|
|
||||||
|
|
||||||
Returns the table of image strings.
|
|
||||||
|
|
||||||
C<ciscoImageString>
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -577,6 +577,13 @@ sub bp_index {
|
|||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $airespace = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $airespace->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $airespace = shift;
|
my $airespace = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -688,42 +695,52 @@ sub i_ssidmac {
|
|||||||
foreach my $oid ( keys %$ssidlist ) {
|
foreach my $oid ( keys %$ssidlist ) {
|
||||||
|
|
||||||
my @parts = split( /\./, $oid );
|
my @parts = split( /\./, $oid );
|
||||||
my $ssid_idx = pop (@parts);
|
my $ssid_idx = pop(@parts);
|
||||||
my $slot = pop (@parts);
|
my $slot = pop(@parts);
|
||||||
my $last = pop (@parts);
|
my $last = pop(@parts);
|
||||||
|
|
||||||
my $iid = $oid;
|
my $iid = $oid;
|
||||||
|
|
||||||
# Get radio band
|
# Get radio band
|
||||||
$iid =~ s/\.\d+$//;
|
$iid =~ s/\.\d+$//;
|
||||||
my $ap_type = $apif_type->{$iid};
|
my $ap_type = $apif_type->{$iid};
|
||||||
|
|
||||||
# Determine if IOS based
|
# Determine if IOS based
|
||||||
$iid =~ s/\.\d+$//;
|
$iid =~ s/\.\d+$//;
|
||||||
my $ios = $ap_ios->{$iid} || '';
|
my $ios = $ap_ios->{$iid} || '';
|
||||||
|
|
||||||
# Four cases:
|
# 17 can be used as index for 3rd Party AP's. We only have one
|
||||||
# IOS and 2.4Ghz count up, starts at zero
|
# hexadecimal digit to work with so skip if outside the range
|
||||||
if ($ios and $ap_type =~ /b$/) {
|
if ( $ssid_idx > 0 and $ssid_idx < 17 ) {
|
||||||
$last = $last + ($ssid_idx - 1);
|
|
||||||
|
# Four cases:
|
||||||
|
# IOS and 2.4Ghz count up, starts at zero
|
||||||
|
if ( $ios and $ap_type =~ /b$/ ) {
|
||||||
|
$last = $last + ( $ssid_idx - 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
# IOS and 5Ghz - count down from maximum of 16
|
||||||
|
elsif ( $ios and $ap_type =~ /a$/ ) {
|
||||||
|
$last = $last + ( 16 - $ssid_idx );
|
||||||
|
}
|
||||||
|
|
||||||
|
# VxWorks and 5Ghz - count up, starts at zero
|
||||||
|
elsif ( $ios and $ap_type =~ /a$/ ) {
|
||||||
|
$last = $last + ( $ssid_idx - 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
# VxWorks and 2.4Ghz - count down from maximum of 16
|
||||||
|
else {
|
||||||
|
$last = $last + ( 16 - $ssid_idx );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
# IOS and 5Ghz - count down from maximum of 16
|
|
||||||
elsif ($ios and $ap_type =~ /a$/) {
|
push( @parts, $last );
|
||||||
$last = $last + (16 - $ssid_idx);
|
my $bssid = join( ':', map { sprintf( "%02x", $_ ) } @parts );
|
||||||
}
|
$i_ssidmac{$oid} = $bssid;
|
||||||
# VxWorks and 5Ghz - count up, starts at zero
|
|
||||||
elsif ($ios and $ap_type =~ /a$/) {
|
|
||||||
$last = $last + ($ssid_idx - 1);
|
|
||||||
}
|
|
||||||
# VxWorks and 2.4Ghz - count down from maximum of 16
|
|
||||||
else {
|
|
||||||
$last = $last + (16 - $ssid_idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
push (@parts, $last);
|
|
||||||
my $bssid = join( ':', map { sprintf( "%02x", $_ ) } @parts );
|
|
||||||
$i_ssidmac{$oid} = $bssid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return \%i_ssidmac;
|
return \%i_ssidmac;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_80211channel {
|
sub i_80211channel {
|
||||||
@@ -42,11 +42,12 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||||
'Q-BRIDGE-MIB' => 'dot1qPvid',
|
'Q-BRIDGE-MIB' => 'dot1qPvid',
|
||||||
|
'RSTP-MIB' => 'dot1dStpPortOperEdgePort',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -84,6 +85,17 @@ $VERSION = '3.08';
|
|||||||
'bs_to' => 'dot1dStaticAllowedToGoTo',
|
'bs_to' => 'dot1dStaticAllowedToGoTo',
|
||||||
'bs_status' => 'dot1dStaticStatus',
|
'bs_status' => 'dot1dStaticStatus',
|
||||||
|
|
||||||
|
# These leafs are not part of a table, but placed here
|
||||||
|
# to return a hash reference to ease API compatibility with
|
||||||
|
# MST and PVST implementations indexed by a spanning tree
|
||||||
|
# instance id
|
||||||
|
'stp_i_mac' => 'dot1dBaseBridgeAddress',
|
||||||
|
'stp_i_time' => 'dot1dStpTimeSinceTopologyChange',
|
||||||
|
'stp_i_ntop' => 'dot1dStpTopChanges',
|
||||||
|
'stp_i_root' => 'dot1dStpDesignatedRoot',
|
||||||
|
'stp_i_root_port' => 'dot1dStpRootPort',
|
||||||
|
'stp_i_priority' => 'dot1dStpPriority',
|
||||||
|
|
||||||
# Spanning Tree Protocol Table : dot1dStpPortTable
|
# Spanning Tree Protocol Table : dot1dStpPortTable
|
||||||
'stp_p_id' => 'dot1dStpPort',
|
'stp_p_id' => 'dot1dStpPort',
|
||||||
'stp_p_priority' => 'dot1dStpPortPriority',
|
'stp_p_priority' => 'dot1dStpPortPriority',
|
||||||
@@ -93,6 +105,10 @@ $VERSION = '3.08';
|
|||||||
'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',
|
||||||
@@ -125,15 +141,18 @@ $VERSION = '3.08';
|
|||||||
'b_mac' => \&SNMP::Info::munge_mac,
|
'b_mac' => \&SNMP::Info::munge_mac,
|
||||||
'fw_mac' => \&SNMP::Info::munge_mac,
|
'fw_mac' => \&SNMP::Info::munge_mac,
|
||||||
'bs_mac' => \&SNMP::Info::munge_mac,
|
'bs_mac' => \&SNMP::Info::munge_mac,
|
||||||
'stp_root' => \&SNMP::Info::munge_mac,
|
'stp_root' => \&SNMP::Info::munge_prio_mac,
|
||||||
|
'stp_i_mac' => \&SNMP::Info::munge_mac,
|
||||||
|
'stp_i_root' => \&SNMP::Info::munge_prio_mac,
|
||||||
'stp_p_root' => \&SNMP::Info::munge_prio_mac,
|
'stp_p_root' => \&SNMP::Info::munge_prio_mac,
|
||||||
'stp_p_bridge' => \&SNMP::Info::munge_prio_mac,
|
'stp_p_bridge' => \&SNMP::Info::munge_prio_mac,
|
||||||
'stp_p_port' => \&SNMP::Info::munge_prio_mac,
|
'stp_p_port' => \&SNMP::Info::munge_prio_port,
|
||||||
'qb_cv_egress' => \&SNMP::Info::munge_port_list,
|
'qb_cv_egress' => \&SNMP::Info::munge_port_list,
|
||||||
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
|
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
|
||||||
'qb_v_egress' => \&SNMP::Info::munge_port_list,
|
'qb_v_egress' => \&SNMP::Info::munge_port_list,
|
||||||
'qb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
|
'qb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
|
||||||
'qb_v_untagged' => \&SNMP::Info::munge_port_list,
|
'qb_v_untagged' => \&SNMP::Info::munge_port_list,
|
||||||
|
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -163,10 +182,20 @@ sub qb_fw_vlan {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $qb_fw_port = $bridge->qb_fw_port($partial);
|
my $qb_fw_port = $bridge->qb_fw_port($partial);
|
||||||
|
my $qb_fdb_ids = $bridge->qb_fdb_index() || {};
|
||||||
|
|
||||||
|
|
||||||
my $qb_fw_vlan = {};
|
my $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);
|
||||||
$qb_fw_vlan->{$idx} = $fdb_id;
|
# Many devices do not populate the dot1qVlanCurrentTable, so default
|
||||||
|
# to FDB ID = VID, but if we have a mapping use it.
|
||||||
|
my $vlan = $fdb_id;
|
||||||
|
# defined as test since some devices have a vlan 0
|
||||||
|
if (defined $qb_fdb_ids->{$fdb_id}) {
|
||||||
|
$vlan = $qb_fdb_ids->{$fdb_id};
|
||||||
|
}
|
||||||
|
$qb_fw_vlan->{$idx} = $vlan;
|
||||||
}
|
}
|
||||||
return $qb_fw_vlan;
|
return $qb_fw_vlan;
|
||||||
}
|
}
|
||||||
@@ -189,6 +218,54 @@ sub qb_i_vlan_t {
|
|||||||
return $i_vlan;
|
return $i_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub qb_fdb_index {
|
||||||
|
my $bridge = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
# Some devices may not implement TimeFilter in a standard manner
|
||||||
|
# appearing to loop on this request. Override in the device class,
|
||||||
|
# see Enterasys for example.
|
||||||
|
my $qb_fdb_ids = $bridge->dot1qVlanFdbId() || {};
|
||||||
|
|
||||||
|
# Strip the TimeFilter
|
||||||
|
my $vl_fdb_index = {};
|
||||||
|
for my $fdb_entry (keys(%$qb_fdb_ids)) {
|
||||||
|
(my $vlan = $fdb_entry) =~ s/^\d+\.//;
|
||||||
|
$vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $vl_fdb_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Most devices now support Q-BRIDGE-MIB, fall back to
|
||||||
|
# BRIDGE-MIB for those that don't.
|
||||||
|
sub fw_mac {
|
||||||
|
my $bridge = shift;
|
||||||
|
|
||||||
|
my $qb = $bridge->qb_fw_mac();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $bridge->SUPER::fw_mac();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_port {
|
||||||
|
my $bridge = shift;
|
||||||
|
|
||||||
|
my $qb = $bridge->qb_fw_port();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $bridge->SUPER::fw_port();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_status {
|
||||||
|
my $bridge = shift;
|
||||||
|
|
||||||
|
my $qb = $bridge->qb_fw_status();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $bridge->SUPER::fw_status();
|
||||||
|
}
|
||||||
|
|
||||||
sub i_stp_state {
|
sub i_stp_state {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -308,24 +385,37 @@ sub i_vlan {
|
|||||||
return $i_vlan;
|
return $i_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_untagged { goto &i_vlan }
|
||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $index = $bridge->bp_index();
|
# Use VlanCurrentTable if available since it will include dynamic
|
||||||
|
# VLANs. However, some devices do not populate the table.
|
||||||
|
my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
|
||||||
|
|
||||||
|
return $bridge->_vlan_hoa($v_ports, $partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership_untagged {
|
||||||
|
my $bridge = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
# Use VlanCurrentTable if available since it will include dynamic
|
# Use VlanCurrentTable if available since it will include dynamic
|
||||||
# VLANs. However, some devices do not populate the table.
|
# VLANs. However, some devices do not populate the table.
|
||||||
|
my $v_ports = $bridge->qb_cv_untagged() || $bridge->qb_v_untagged();
|
||||||
|
|
||||||
# 11/07 - Todo: Issue with some devices trying to query VlanCurrentTable
|
return $bridge->_vlan_hoa($v_ports, $partial);
|
||||||
# as table may grow very large with frequent VLAN changes.
|
}
|
||||||
# 06/08 - VlanCurrentTable may be due to timefilter, should query with
|
|
||||||
# zero partial for no time filter.
|
|
||||||
# my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
|
|
||||||
|
|
||||||
my $v_ports = $bridge->qb_v_egress() || {};
|
sub _vlan_hoa {
|
||||||
|
my $bridge = shift;
|
||||||
|
my ( $v_ports, $partial ) = @_;
|
||||||
|
|
||||||
my $i_vlan_membership = {};
|
my $index = $bridge->bp_index();
|
||||||
|
|
||||||
|
my $vlan_hoa = {};
|
||||||
foreach my $idx ( keys %$v_ports ) {
|
foreach my $idx ( keys %$v_ports ) {
|
||||||
next unless ( defined $v_ports->{$idx} );
|
next unless ( defined $v_ports->{$idx} );
|
||||||
my $portlist = $v_ports->{$idx};
|
my $portlist = $v_ports->{$idx};
|
||||||
@@ -345,10 +435,10 @@ sub i_vlan_membership {
|
|||||||
my $ifindex = $index->{$port};
|
my $ifindex = $index->{$port};
|
||||||
next unless ( defined($ifindex) ); # shouldn't happen
|
next unless ( defined($ifindex) ); # shouldn't happen
|
||||||
next if ( defined $partial and $ifindex !~ /^$partial$/ );
|
next if ( defined $partial and $ifindex !~ /^$partial$/ );
|
||||||
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
push( @{ $vlan_hoa->{$ifindex} }, $vlan );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $i_vlan_membership;
|
return $vlan_hoa;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_i_pvid {
|
sub set_i_pvid {
|
||||||
@@ -365,6 +455,8 @@ sub set_i_vlan {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_i_untagged { goto &set_i_vlan }
|
||||||
|
|
||||||
sub set_add_i_vlan_tagged {
|
sub set_add_i_vlan_tagged {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
|
|
||||||
@@ -597,6 +689,10 @@ to a hash.
|
|||||||
|
|
||||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
||||||
|
|
||||||
|
=item $vtp->i_untagged()
|
||||||
|
|
||||||
|
An alias for C<i_vlan>.
|
||||||
|
|
||||||
=item $bridge->i_vlan_membership()
|
=item $bridge->i_vlan_membership()
|
||||||
|
|
||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
@@ -612,11 +708,21 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
|||||||
print "Port: $port VLAN: $vlan\n";
|
print "Port: $port VLAN: $vlan\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $bridge->i_vlan_membership_untagged()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
|
IDs. These are the VLANs which are members of the untagged egress list for
|
||||||
|
the port.
|
||||||
|
|
||||||
=item $bridge->qb_i_vlan_t()
|
=item $bridge->qb_i_vlan_t()
|
||||||
|
|
||||||
Returns reference to hash: key = C<dot1dBasePort>, value = either 'trunk' for
|
Returns reference to hash: key = C<dot1dBasePort>, value = either 'trunk' for
|
||||||
tagged ports or the VLAN ID.
|
tagged ports or the VLAN ID.
|
||||||
|
|
||||||
|
=item $bridge->qb_fdb_index()
|
||||||
|
|
||||||
|
Returns reference to hash: key = FDB ID, value = VLAN ID.
|
||||||
|
|
||||||
=item $bridge->v_index()
|
=item $bridge->v_index()
|
||||||
|
|
||||||
Returns VLAN IDs
|
Returns VLAN IDs
|
||||||
@@ -670,6 +776,48 @@ to this port.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Spanning Tree Instance Globals
|
||||||
|
|
||||||
|
These are not part of a table, but return a hash reference to ease API
|
||||||
|
compatibility with MST and PVST implementations indexed by a spanning tree
|
||||||
|
instance id.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $bridge->stp_i_time()
|
||||||
|
|
||||||
|
Returns time since last topology change detected. (100ths/second)
|
||||||
|
|
||||||
|
(C<dot1dStpTimeSinceTopologyChange>)
|
||||||
|
|
||||||
|
=item $bridge->stp_i_time()
|
||||||
|
|
||||||
|
Returns the total number of topology changes detected.
|
||||||
|
|
||||||
|
(C<dot1dStpTopChanges>)
|
||||||
|
|
||||||
|
=item $bridge->stp_i_root()
|
||||||
|
|
||||||
|
Returns root of STP.
|
||||||
|
|
||||||
|
(C<dot1dStpDesignatedRoot>)
|
||||||
|
|
||||||
|
=item $bridge->stp_i_root_port()
|
||||||
|
|
||||||
|
Returns the port number of the port that offers the lowest cost path
|
||||||
|
to the root bridge.
|
||||||
|
|
||||||
|
(C<dot1dStpRootPort>)
|
||||||
|
|
||||||
|
=item $bridge->stp_i_priority()
|
||||||
|
|
||||||
|
Returns the port number of the port that offers the lowest cost path
|
||||||
|
to the root bridge.
|
||||||
|
|
||||||
|
(C<dot1dStpPriority>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Spanning Tree Protocol Table (C<dot1dStpPortTable>)
|
=head2 Spanning Tree Protocol Table (C<dot1dStpPortTable>)
|
||||||
|
|
||||||
Descriptions are straight from F<BRIDGE-MIB.my>
|
Descriptions are straight from F<BRIDGE-MIB.my>
|
||||||
@@ -893,6 +1041,10 @@ operations.
|
|||||||
|
|
||||||
Currently unsupported. Throws an error and returns.
|
Currently unsupported. Throws an error and returns.
|
||||||
|
|
||||||
|
=item $bridge->set_i_untagged(vlan, ifIndex)
|
||||||
|
|
||||||
|
An alias for C<set_i_vlan>.
|
||||||
|
|
||||||
=item $bridge->set_i_pvid(pvid, ifIndex)
|
=item $bridge->set_i_pvid(pvid, ifIndex)
|
||||||
|
|
||||||
Currently unsupported. Throws an error and returns.
|
Currently unsupported. Throws an error and returns.
|
||||||
@@ -40,9 +40,10 @@ 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 qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
|
use vars
|
||||||
|
qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# Five data structures required by SNMP::Info
|
# Five data structures required by SNMP::Info
|
||||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
||||||
@@ -57,11 +58,10 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
'cdp_index' => 'cdpCacheIfIndex',
|
|
||||||
'cdp_proto' => 'cdpCacheAddressType',
|
'cdp_proto' => 'cdpCacheAddressType',
|
||||||
'cdp_addr' => 'cdpCacheAddress',
|
'cdp_addr' => 'cdpCacheAddress',
|
||||||
'cdp_ver' => 'cdpCacheVersion',
|
'cdp_ver' => 'cdpCacheVersion',
|
||||||
'cdp_id' => 'cdpCacheDeviceId',
|
'cdp_dev_id' => 'cdpCacheDeviceId',
|
||||||
'cdp_port' => 'cdpCacheDevicePort',
|
'cdp_port' => 'cdpCacheDevicePort',
|
||||||
'cdp_platform' => 'cdpCachePlatform',
|
'cdp_platform' => 'cdpCachePlatform',
|
||||||
'cdp_capabilities' => 'cdpCacheCapabilities',
|
'cdp_capabilities' => 'cdpCacheCapabilities',
|
||||||
@@ -76,17 +76,30 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
'cdp_capabilities' => \&SNMP::Info::munge_caps,
|
'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_port' => \&SNMP::Info::munge_null,
|
||||||
'cdp_id' => \&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 = (
|
||||||
|
'Router' => 0x001,
|
||||||
|
'Trans-Bridge' => 0x002,
|
||||||
|
'Source-Route-Bridge' => 0x004,
|
||||||
|
'Switch' => 0x008,
|
||||||
|
'Host' => 0x010,
|
||||||
|
'IGMP' => 0x020,
|
||||||
|
'Repeater' => 0x040,
|
||||||
|
'VoIP-Phone' => 0x080,
|
||||||
|
'Remotely-Managed-Device' => 0x100,
|
||||||
|
'Supports-STP-Dispute' => 0x200,
|
||||||
|
'Two-port Mac Relay' => 0x400,
|
||||||
|
);
|
||||||
|
|
||||||
sub munge_power {
|
sub munge_power {
|
||||||
my $power = shift;
|
my $power = shift;
|
||||||
my $decimal = substr( $power, -3 );
|
my $decimal = substr( $power, -3 );
|
||||||
@@ -114,11 +127,6 @@ sub hasCDP {
|
|||||||
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(
|
||||||
@@ -160,6 +168,57 @@ sub cdp_ip {
|
|||||||
return \%cdp_ip;
|
return \%cdp_ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cdp_cap {
|
||||||
|
my $cdp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
# Some devices return a hex-string, others return a space separated
|
||||||
|
# string, we need the raw data to determine return value and
|
||||||
|
# take appropriate action
|
||||||
|
my $cdp_caps = $cdp->cdp_capabilities_raw($partial) || {};
|
||||||
|
|
||||||
|
my %cdp_cap;
|
||||||
|
foreach my $key ( keys %$cdp_caps ) {
|
||||||
|
my $cap_raw = $cdp_caps->{$key};
|
||||||
|
next unless $cap_raw;
|
||||||
|
|
||||||
|
# Simple check, smallest single string is either Host or IGMP with a
|
||||||
|
# space added on the end for a length of 5, hex string is normally
|
||||||
|
# 4 bytes, but since only one byte was traditionally needed process
|
||||||
|
# as hex for a length of 4 or less
|
||||||
|
if ( length $cap_raw < 5 ) {
|
||||||
|
my $cap_hex = join( '',
|
||||||
|
map { sprintf "%x", $_ } unpack( 'C*', $cap_raw ) );
|
||||||
|
foreach my $capability ( keys %CDP_CAPABILITIES ) {
|
||||||
|
if ( ( hex $cap_hex ) & $CDP_CAPABILITIES{$capability} ) {
|
||||||
|
push( @{ $cdp_cap{$key} }, $capability );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
my @caps = split /\s/, $cap_raw;
|
||||||
|
push( @{ $cdp_cap{$key} }, @caps );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%cdp_cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cdp_id {
|
||||||
|
my $cdp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $ch = $cdp->cdp_dev_id($partial) || {};
|
||||||
|
|
||||||
|
my %cdp_id;
|
||||||
|
foreach my $key ( sort keys %$ch ) {
|
||||||
|
my $id = $ch->{$key};
|
||||||
|
next unless $id;
|
||||||
|
$id = SNMP::Info::munge_mac($id) || SNMP::Info::munge_null($id);
|
||||||
|
$cdp_id{$key} = $id;
|
||||||
|
}
|
||||||
|
return \%cdp_id;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -283,39 +342,48 @@ 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, 7 digits long, MSB. Each digit represents a bit from the
|
binary string, MSB. Each digit represents a bit from the table below from
|
||||||
table below.
|
the CDP Capabilities Mapping to Smartport Type table within the
|
||||||
|
Cisco Small Business 200 Series Smart Switch Administration Guide,
|
||||||
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
|
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
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item (0x40) - Provides level 1 functionality.
|
=item (0x400) - Two-Port MAC Relay.
|
||||||
|
|
||||||
=item (0x20) - The bridge or switch does not forward IGMP Report packets on
|
=item (0x200) - CAST Phone Port / CVTA / Supports-STP-Dispute depending
|
||||||
|
upon platform.
|
||||||
|
|
||||||
|
=item (0x100) - Remotely-Managed Device.
|
||||||
|
|
||||||
|
=item (0x80) - VoIP Phone.
|
||||||
|
|
||||||
|
=item (0x40) - Provides level 1 functionality.
|
||||||
|
|
||||||
|
=item (0x20) - The bridge or switch does not forward IGMP Report packets on
|
||||||
non router ports.
|
non router ports.
|
||||||
|
|
||||||
=item (0x10) - Sends and receives packets for at least one network layer
|
=item (0x10) - Sends and receives packets for at least one network layer
|
||||||
protocol. If the device is routing the protocol, this bit should not be set.
|
protocol. If the device is routing the protocol, this bit should not be set.
|
||||||
|
|
||||||
=item (0x08) - Performs level 2 switching. The difference between this bit
|
=item (0x08) - Performs level 2 switching. The difference between this bit
|
||||||
and bit 0x02 is that a switch does not run the Spanning-Tree Protocol. This
|
and bit 0x02 is that a switch does not run the Spanning-Tree Protocol. This
|
||||||
device is assumed to be deployed in a physical loop-free topology.
|
device is assumed to be deployed in a physical loop-free topology.
|
||||||
|
|
||||||
=item (0x04) - Performs level 2 source-route bridging. A source-route bridge
|
=item (0x04) - Performs level 2 source-route bridging. A source-route bridge
|
||||||
would set both this bit and bit 0x02.
|
would set both this bit and bit 0x02.
|
||||||
|
|
||||||
=item (0x02) - Performs level 2 transparent bridging.
|
=item (0x02) - Performs level 2 transparent bridging.
|
||||||
|
|
||||||
=item (0x01) - Performs level 3 routing for at least one network layer
|
=item (0x01) - Performs level 3 routing for at least one network layer
|
||||||
protocol.
|
protocol.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to this
|
Thanks to Martin Lorensen for a pointer to the original information and
|
||||||
information.
|
CPAN user Alex for updates.
|
||||||
|
|
||||||
(C<cdpCacheCapabilities>)
|
(C<cdpCacheCapabilities>)
|
||||||
|
|
||||||
@@ -427,6 +495,14 @@ for decimal placement.
|
|||||||
|
|
||||||
(C<cdpCachePowerConsumption>)
|
(C<cdpCachePowerConsumption>)
|
||||||
|
|
||||||
|
=item $cdp->cdp_cap()
|
||||||
|
|
||||||
|
Returns hash of arrays with each array containing the system capabilities
|
||||||
|
supported by the remote system. Possible elements in the array are
|
||||||
|
C<Router>, C<Trans-Bridge>, C<Source-Route-Bridge>, C<Switch>, C<Host>,
|
||||||
|
C<IGMP>, C<Repeater>, C<VoIP-Phone>, C<Remotely-Managed-Device>,
|
||||||
|
C<Supports-STP-Dispute>, and C<Two-port Mac Relay>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 Data Munging Callback Subroutines
|
=head1 Data Munging Callback Subroutines
|
||||||
158
lib/SNMP/Info/CiscoAgg.pm
Normal file
158
lib/SNMP/Info/CiscoAgg.pm
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# SNMP::Info::CiscoAgg
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 SNMP::Info 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::CiscoAgg;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||||
|
|
||||||
|
@SNMP::Info::CiscoAgg::ISA = qw/
|
||||||
|
SNMP::Info::IEEE802dot3ad
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::CiscoAgg::EXPORT_OK = qw/
|
||||||
|
agg_ports
|
||||||
|
/;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||||
|
'CISCO-PAGP-MIB' => 'pagpGroupIfIndex',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = ();
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub agg_ports_pagp {
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
# Note that this mapping will miss any interfaces that are down during
|
||||||
|
# polling. If one of the members is up, we could use
|
||||||
|
# pagpAdminGroupCapability to figure things out, but if they're all
|
||||||
|
# down, we're hosed. Since we could be hosed anyway, we skip the fancy
|
||||||
|
# stuff.
|
||||||
|
my $mapping = {};
|
||||||
|
my $group = $dev->pagpGroupIfIndex;
|
||||||
|
for my $slave (keys %$group) {
|
||||||
|
my $master = $group->{$slave};
|
||||||
|
next if($master == 0 || $slave == $master);
|
||||||
|
|
||||||
|
$mapping->{$slave} = $master;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
# until we have PAgP data and need to combine with LAG data
|
||||||
|
sub agg_ports {
|
||||||
|
my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}};
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::CiscoAgg - SNMP Interface to Cisco Aggregated Links
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
SNMP::Info Developers
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $info = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $info->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This class provides access to Aggregated Links configuration on Cisco devices.
|
||||||
|
It combines Cisco PAgP and IEEE 802.3ad information.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
L<SNMP::Info::IEEE802dot3ad>
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<CISCO-PAGP-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=item C<agg_ports_pagp>
|
||||||
|
|
||||||
|
Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
||||||
@@ -97,6 +97,10 @@ sub copy_run_tftp {
|
|||||||
print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
|
print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
|
||||||
|
|
||||||
#Check each set, delete created row if any fail
|
#Check each set, delete created row if any fail
|
||||||
|
unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) {
|
||||||
|
$ciscoconfig->error_throw("Initializing config copy instruction failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
|
unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
|
||||||
$ciscoconfig->error_throw("Setting source type failed");
|
$ciscoconfig->error_throw("Setting source type failed");
|
||||||
unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
|
unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
|
||||||
@@ -32,18 +32,20 @@ package SNMP::Info::CiscoPortSecurity;
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
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/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
||||||
'CISCO-PAE-MIB' => 'ciscoPaeMIB',
|
'CISCO-PAE-MIB' => 'ciscoPaeMIB',
|
||||||
'IEEE8021-PAE-MIB' => 'dot1xAuthLastEapolFrameSource',
|
'IEEE8021-PAE-MIB' => 'dot1xAuthLastEapolFrameSource',
|
||||||
|
'CISCO-ERR-DISABLE-MIB' => 'ciscoErrDisableMIB',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -81,30 +83,27 @@ $VERSION = '3.08';
|
|||||||
# 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',
|
||||||
'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource',
|
'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource',
|
||||||
|
|
||||||
|
# CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry
|
||||||
|
'cerr_i_cause' => 'cErrDisableIfStatusCause',
|
||||||
);
|
);
|
||||||
|
|
||||||
%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,
|
||||||
);
|
);
|
||||||
@@ -123,13 +122,29 @@ sub munge_pae_capabilities {
|
|||||||
return join( ' ', @vals );
|
return join( ' ', @vals );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Define a generic method to show the cause for a port to be err-disabled.
|
||||||
|
# Cisco indexes cErrDisableIfStatusCause by {ifindex,vlan}, but for a more
|
||||||
|
# generic method, using ifIndex only makes it easier to implement across
|
||||||
|
# device classes. Besides, several (most?) err-disable features will disable
|
||||||
|
# the whole interface anyway, and not just a vlan on the interface.
|
||||||
|
sub i_err_disable_cause {
|
||||||
|
my $cps = shift;
|
||||||
|
my $ret;
|
||||||
|
my $causes = $cps->cerr_i_cause() || {};
|
||||||
|
foreach my $interfacevlan (keys %$causes) {
|
||||||
|
my ($iid, $vid) = split(/\./, $interfacevlan);
|
||||||
|
$ret->{$iid} = $causes->{$interfacevlan};
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::CiscoPortSecurity - SNMP Interface to data from
|
SNMP::Info::CiscoPortSecurity - SNMP Interface to data from
|
||||||
F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>
|
F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and F<CISCO-ERR-DISABLE-MIB>.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -153,8 +168,9 @@ Eric Miller
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides
|
SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides
|
||||||
an interface to the F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>. These
|
an interface to the F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and
|
||||||
MIBs are used across the Catalyst family under CatOS and IOS.
|
F<CISCO-ERR-DISABLE-MIB>. These MIBs are used across the Catalyst
|
||||||
|
family under CatOS and IOS.
|
||||||
|
|
||||||
Use or create in a subclass of SNMP::Info. Do not use directly.
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
@@ -172,6 +188,8 @@ None.
|
|||||||
|
|
||||||
=item F<IEEE8021-PAE-MIB>
|
=item F<IEEE8021-PAE-MIB>
|
||||||
|
|
||||||
|
=item F<CISCO-ERR-DISABLE-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -300,10 +318,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>
|
||||||
@@ -322,14 +336,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>
|
||||||
@@ -348,10 +354,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>
|
||||||
@@ -374,6 +376,31 @@ The source MAC address carried in the most recently received EAPOL frame.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 C<CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry>
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $cps->cerr_i_cause()
|
||||||
|
|
||||||
|
C<cErrDisableIfStatusCause>
|
||||||
|
|
||||||
|
Indicates the feature/event that caused the {interface, vlan} (or the entire
|
||||||
|
interface) to be error-disabled.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item C<i_err_disable_cause>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping ifIndex to err-disabled cause. The returned
|
||||||
|
data is sparse, so if the ifIndex is not present in the return value, the port
|
||||||
|
is not err-disabled.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head1 Data Munging Callback Subroutines
|
=head1 Data Munging Callback Subroutines
|
||||||
|
|
||||||
=over
|
=over
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
||||||
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
||||||
|
|
||||||
@@ -195,7 +195,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';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,14 +42,14 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%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,6 +88,9 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
# CISCO-FLASH-MIB::ciscoFlashDeviceTable
|
# CISCO-FLASH-MIB::ciscoFlashDeviceTable
|
||||||
'cisco_flash_size' => 'ciscoFlashDeviceSize',
|
'cisco_flash_size' => 'ciscoFlashDeviceSize',
|
||||||
|
|
||||||
|
# CISCO-IMAGE-MIB
|
||||||
|
'ci_images' => 'ciscoImageString',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = ();
|
%MUNGE = ();
|
||||||
@@ -103,6 +106,7 @@ 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 =~ /IOS-XE/ );
|
return 'ios-xe' if ( $descr =~ /IOS-XE/ );
|
||||||
|
return 'ios-xr' if ( $descr =~ /IOS XR/ );
|
||||||
return 'ios' if ( $descr =~ /IOS/ );
|
return 'ios' if ( $descr =~ /IOS/ );
|
||||||
return 'catalyst' if ( $descr =~ /catalyst/i );
|
return 'catalyst' if ( $descr =~ /catalyst/i );
|
||||||
return 'css' if ( $descr =~ /Content Switch SW/ );
|
return 'css' if ( $descr =~ /Content Switch SW/ );
|
||||||
@@ -198,6 +202,13 @@ sub os_ver {
|
|||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( defined $os
|
||||||
|
and $os eq 'ios-xr'
|
||||||
|
and defined $descr
|
||||||
|
and $descr =~ m/Version (\d+[\.\d]+)/ )
|
||||||
|
{
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
|
||||||
# Newer Catalysts and IOS devices
|
# Newer Catalysts and IOS devices
|
||||||
if ( defined $descr
|
if ( defined $descr
|
||||||
@@ -409,6 +420,7 @@ Available values:
|
|||||||
|
|
||||||
'ios' for Cisco IOS
|
'ios' for Cisco IOS
|
||||||
'ios-xe' for Cisco IOS XE
|
'ios-xe' for Cisco IOS XE
|
||||||
|
'ios-xr' for Cisco IOS XR
|
||||||
'pix' for Cisco PIX
|
'pix' for Cisco PIX
|
||||||
'asa' for Cisco ASA
|
'asa' for Cisco ASA
|
||||||
'fwsm' for Single-mode FWSM
|
'fwsm' for Single-mode FWSM
|
||||||
@@ -530,4 +542,16 @@ zero if the device has been removed.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Cisco Image Table (C<ciscoImageTable>)
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ci->ci_images()
|
||||||
|
|
||||||
|
Returns the table of image strings.
|
||||||
|
|
||||||
|
C<ciscoImageString>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
|
|||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
@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.08';
|
|||||||
'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.08';
|
|||||||
|
|
||||||
%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,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -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) = @_;
|
||||||
@@ -340,6 +373,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
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-VTP-MIB' => 'vtpVlanName',
|
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||||
@@ -61,7 +61,6 @@ $VERSION = '3.08';
|
|||||||
%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',
|
||||||
@@ -149,6 +148,7 @@ sub i_vlan {
|
|||||||
|
|
||||||
my $port_vlan = $vtp->vtp_trunk_native($partial) || {};
|
my $port_vlan = $vtp->vtp_trunk_native($partial) || {};
|
||||||
my $i_vlan = $vtp->i_vlan2($partial) || {};
|
my $i_vlan = $vtp->i_vlan2($partial) || {};
|
||||||
|
my $trunk_dyn = $vtp->vtp_trunk_dyn($partial) || {};
|
||||||
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
|
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
|
||||||
|
|
||||||
my %i_vlans;
|
my %i_vlans;
|
||||||
@@ -165,15 +165,23 @@ sub i_vlan {
|
|||||||
foreach my $port ( keys %$port_vlan ) {
|
foreach my $port ( keys %$port_vlan ) {
|
||||||
my $vlan = $port_vlan->{$port};
|
my $vlan = $port_vlan->{$port};
|
||||||
next unless defined $vlan;
|
next unless defined $vlan;
|
||||||
|
|
||||||
|
# ports up and trunking should have a trunking status
|
||||||
my $stat = $trunk_dyn_stat->{$port};
|
my $stat = $trunk_dyn_stat->{$port};
|
||||||
if ( defined $stat and $stat =~ /^trunking/ ) {
|
|
||||||
|
# vtp_trunk_dyn_stat is not useful for down ports
|
||||||
|
# so we use vtp_trunk_dyn to see if trunking is set
|
||||||
|
my $dyn = $trunk_dyn->{$port};
|
||||||
|
|
||||||
|
if (($stat and $stat =~ /^trunking/ )
|
||||||
|
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))))
|
||||||
|
{
|
||||||
$i_vlans{$port} = $vlan;
|
$i_vlans{$port} = $vlan;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check in CISCO-VLAN-IFTABLE-RELATION-MIB
|
# Check in CISCO-VLAN-IFTABLE-RELATION-MIB
|
||||||
# Is this only for Aironet??? If so, it needs
|
# Used for traditional Cisco Routers and Aironet
|
||||||
# to be removed from this class
|
|
||||||
|
|
||||||
my $v_cvi_if = $vtp->v_cvi_if();
|
my $v_cvi_if = $vtp->v_cvi_if();
|
||||||
if ( defined $v_cvi_if ) {
|
if ( defined $v_cvi_if ) {
|
||||||
@@ -191,6 +199,22 @@ sub i_vlan {
|
|||||||
return \%i_vlans;
|
return \%i_vlans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_untagged {
|
||||||
|
my $vtp = shift;
|
||||||
|
my ( $ifindex ) = @_;
|
||||||
|
|
||||||
|
# cannot defer to i_vlan - vtp_trunk_dyn_stat is not useful for down ports
|
||||||
|
# so we use vtp_trunk_dyn as a hint to use i_pvid
|
||||||
|
|
||||||
|
my $trunking = eval { $vtp->vtp_trunk_dyn($ifindex)->{$ifindex} };
|
||||||
|
if ($trunking and (($trunking eq 'on') or ($trunking eq 'onNoNegotiate'))) {
|
||||||
|
return $vtp->i_pvid(@_);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $vtp->i_vlan(@_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $vtp = shift;
|
my $vtp = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -202,6 +226,8 @@ sub i_vlan_membership {
|
|||||||
my $vtp_vlans = $vtp->v_state();
|
my $vtp_vlans = $vtp->v_state();
|
||||||
my $i_vlan = $vtp->i_vlan2($partial) || {};
|
my $i_vlan = $vtp->i_vlan2($partial) || {};
|
||||||
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
|
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
|
||||||
|
my $trunk_dyn = $vtp->vtp_trunk_dyn($partial) || {};
|
||||||
|
my $i_voice_vlan = $vtp->i_voice_vlan($partial) || {};
|
||||||
|
|
||||||
my $i_vlan_membership = {};
|
my $i_vlan_membership = {};
|
||||||
|
|
||||||
@@ -209,14 +235,24 @@ sub i_vlan_membership {
|
|||||||
foreach my $port ( keys %$i_vlan ) {
|
foreach my $port ( keys %$i_vlan ) {
|
||||||
my $vlan = $i_vlan->{$port};
|
my $vlan = $i_vlan->{$port};
|
||||||
next unless defined $vlan;
|
next unless defined $vlan;
|
||||||
my $stat = $trunk_dyn_stat->{$port};
|
my $dyn = $trunk_dyn->{$port};
|
||||||
if ( defined $stat and $stat =~ /notTrunking/ ) {
|
unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
|
||||||
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get voice VLANs
|
||||||
|
foreach my $port ( keys %$i_voice_vlan ) {
|
||||||
|
my $vlan = $i_voice_vlan->{$port};
|
||||||
|
next unless defined $vlan;
|
||||||
|
next unless ($vlan =~ m/[[:digit:]]+/ and $vlan < 4095);
|
||||||
|
my $dyn = $trunk_dyn->{$port};
|
||||||
|
unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
|
||||||
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get trunk ports
|
# Get trunk ports
|
||||||
|
|
||||||
my %oper_vlans;
|
my %oper_vlans;
|
||||||
foreach my $iid ( keys %$vtp_vlans ) {
|
foreach my $iid ( keys %$vtp_vlans ) {
|
||||||
my $vlan = 0;
|
my $vlan = 0;
|
||||||
@@ -233,7 +269,9 @@ sub i_vlan_membership {
|
|||||||
|
|
||||||
foreach my $port ( keys %$ports_vlans ) {
|
foreach my $port ( keys %$ports_vlans ) {
|
||||||
my $stat = $trunk_dyn_stat->{$port};
|
my $stat = $trunk_dyn_stat->{$port};
|
||||||
if ( defined $stat and $stat =~ /^trunking/ ) {
|
my $dyn = $trunk_dyn->{$port};
|
||||||
|
if (($stat and $stat =~ /^trunking/ )
|
||||||
|
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate')))) {
|
||||||
my $k = 0;
|
my $k = 0;
|
||||||
my $list1 = $ports_vlans->{$port} || '0';
|
my $list1 = $ports_vlans->{$port} || '0';
|
||||||
my $list2 = $ports_vlans_2k->{$port} || '0';
|
my $list2 = $ports_vlans_2k->{$port} || '0';
|
||||||
@@ -255,6 +293,20 @@ sub i_vlan_membership {
|
|||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership_untagged {
|
||||||
|
my $vtp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $vlans = $vtp->i_vlan($partial);
|
||||||
|
my $i_vlan_membership = {};
|
||||||
|
foreach my $port (keys %$vlans) {
|
||||||
|
my $vlan = $vlans->{$port};
|
||||||
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_vlan_membership;
|
||||||
|
}
|
||||||
|
|
||||||
sub set_i_pvid {
|
sub set_i_pvid {
|
||||||
my $vtp = shift;
|
my $vtp = shift;
|
||||||
my ( $vlan_id, $ifindex ) = @_;
|
my ( $vlan_id, $ifindex ) = @_;
|
||||||
@@ -306,6 +358,22 @@ sub set_i_vlan {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_i_untagged {
|
||||||
|
my $vtp = shift;
|
||||||
|
my ( $vlan_id, $ifindex ) = @_;
|
||||||
|
|
||||||
|
# cannot defer to i_vlan - vtp_trunk_dyn_stat is not useful for down ports
|
||||||
|
# so we use vtp_trunk_dyn as a hint to use i_pvid
|
||||||
|
|
||||||
|
my $trunking = eval { $vtp->vtp_trunk_dyn($ifindex)->{$ifindex} };
|
||||||
|
if ($trunking and (($trunking eq 'on') or ($trunking eq 'onNoNegotiate'))) {
|
||||||
|
return $vtp->set_i_pvid(@_);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $vtp->set_i_vlan(@_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub set_add_i_vlan_tagged {
|
sub set_add_i_vlan_tagged {
|
||||||
my $vtp = shift;
|
my $vtp = shift;
|
||||||
my ( $vlan_id, $ifindex ) = @_;
|
my ( $vlan_id, $ifindex ) = @_;
|
||||||
@@ -540,6 +608,10 @@ Your device will only implement a subset of these methods.
|
|||||||
Returns a mapping between C<ifIndex> and assigned VLAN ID for access ports
|
Returns a mapping between C<ifIndex> and assigned VLAN ID for access ports
|
||||||
and the default VLAN ID for trunk ports.
|
and the default VLAN ID for trunk ports.
|
||||||
|
|
||||||
|
=item $vtp->i_untagged()
|
||||||
|
|
||||||
|
An alias for C<i_vlan>.
|
||||||
|
|
||||||
=item $vtp->i_vlan_membership()
|
=item $vtp->i_vlan_membership()
|
||||||
|
|
||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
@@ -555,6 +627,12 @@ IDs. These are the VLANs which are members of enabled VLAN list for the port.
|
|||||||
print "Port: $port VLAN: $vlan\n";
|
print "Port: $port VLAN: $vlan\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $vtp->i_vlan_membership_untagged()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
|
IDs. These are the VLANs which are members of the untagged egress list for
|
||||||
|
the port.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 VLAN Table (C<CISCO-VTP-MIB::vtpVlanTable>)
|
=head2 VLAN Table (C<CISCO-VTP-MIB::vtpVlanTable>)
|
||||||
@@ -701,10 +779,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>)
|
||||||
@@ -835,6 +909,12 @@ port C<ifIndex>. This method should only be used on trunk ports.
|
|||||||
$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 )
|
||||||
|
|
||||||
|
This method attempts to work out whether the port referenced by ifIndex is
|
||||||
|
trunking, and if so will return the value of C<set_i_pvid>. Otherwise, the
|
||||||
|
value of C<set_i_vlan> is returned.
|
||||||
|
|
||||||
=item $vtp->set_add_i_vlan_tagged ( vlan, ifIndex )
|
=item $vtp->set_add_i_vlan_tagged ( vlan, ifIndex )
|
||||||
|
|
||||||
Adds the VLAN to the enabled VLANs list of the port, must be supplied with the
|
Adds the VLAN to the enabled VLANs list of the port, must be supplied with the
|
||||||
@@ -34,12 +34,12 @@ use strict;
|
|||||||
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/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
||||||
|
|
||||||
@@ -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__
|
||||||
@@ -173,6 +224,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
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
||||||
|
|
||||||
@@ -68,7 +68,6 @@ $VERSION = '3.08';
|
|||||||
'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'
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
||||||
|
|
||||||
@@ -50,11 +50,9 @@ $VERSION = '3.08';
|
|||||||
'fdp_run' => 'snFdpGlobalRun',
|
'fdp_run' => 'snFdpGlobalRun',
|
||||||
'fdp_interval' => 'snFdpGlobalMessageInterval',
|
'fdp_interval' => 'snFdpGlobalMessageInterval',
|
||||||
'fdp_holdtime' => 'snFdpGlobalHoldTime',
|
'fdp_holdtime' => 'snFdpGlobalHoldTime',
|
||||||
'fdp_id' => '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,13 +60,11 @@ $VERSION = '3.08';
|
|||||||
'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_caps,
|
'fdp_capabilities' => \&SNMP::Info::munge_bits,
|
||||||
'fdp_ip' => \&SNMP::Info::munge_ip
|
'fdp_ip' => \&SNMP::Info::munge_ip
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -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(
|
||||||
@@ -231,15 +220,6 @@ Time in seconds that FDP messages are kept.
|
|||||||
|
|
||||||
(C<fdpGlobalHoldTime>)
|
(C<fdpGlobalHoldTime>)
|
||||||
|
|
||||||
=item $fdp->fdp_id()
|
|
||||||
|
|
||||||
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
|
||||||
@@ -289,8 +269,7 @@ CDP compatibility
|
|||||||
=item $fdp->fdp_capabilities()
|
=item $fdp->fdp_capabilities()
|
||||||
|
|
||||||
Returns Device Functional Capabilities. Results are munged into an ascii
|
Returns Device Functional Capabilities. Results are munged into an ascii
|
||||||
binary string, 7 digits long, MSB. Each digit represents a bit from the
|
binary string, MSB. Each digit represents a bit from the table below.
|
||||||
table below.
|
|
||||||
|
|
||||||
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
|
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
|
||||||
|
|
||||||
@@ -320,24 +299,10 @@ protocol.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to
|
Thanks to Martin Lorensen for a pointer to this information.
|
||||||
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
|
||||||
@@ -348,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;
|
||||||
@@ -368,21 +325,9 @@ 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
|
||||||
@@ -413,11 +358,11 @@ 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
|
||||||
|
|
||||||
@@ -32,13 +32,14 @@ package SNMP::Info::IEEE802dot11;
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
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/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
||||||
|
|
||||||
142
lib/SNMP/Info/IEEE802dot3ad.pm
Normal file
142
lib/SNMP/Info/IEEE802dot3ad.pm
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
# SNMP::Info::IEEE802dot3ad
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 SNMP::Info 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::IEEE802dot3ad;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Aggregate;
|
||||||
|
|
||||||
|
@SNMP::Info::IEEE802dot3ad::ISA = qw/
|
||||||
|
SNMP::Info::Aggregate
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::IEEE802dot3ad::EXPORT_OK = qw/
|
||||||
|
agg_ports_lag
|
||||||
|
/;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
|
'IEEE8023-LAG-MIB' => 'dot3adAggPortSelectedAggID',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = ();
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
'ad_lag_ports' => 'dot3adAggPortListPorts',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
'ad_lag_ports' => \&SNMP::Info::munge_port_list,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub agg_ports_lag {
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
# TODO: implement partial
|
||||||
|
my $ports = $dev->ad_lag_ports;
|
||||||
|
|
||||||
|
return {} unless ref {} eq ref $ports and scalar keys %$ports;
|
||||||
|
|
||||||
|
my $ret = {};
|
||||||
|
foreach my $m ( keys %$ports ) {
|
||||||
|
my $idx = $m;
|
||||||
|
my $portlist = $ports->{$m};
|
||||||
|
next unless $portlist;
|
||||||
|
for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
|
||||||
|
$ret->{$i+1} = $idx if ( @$portlist[$i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::IEEE802dot3ad - SNMP Interface to IEEE Aggregated Links
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
SNMP::Info Developers
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $info = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $info->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This class provides access to Aggregated Links configuration on devices
|
||||||
|
implementing C<IEEE8023-LAG-MIB>.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
L<SNMP::Info::Aggregate>
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<IEEE8023-LAG-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item C<agg_ports_lag>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -44,7 +44,7 @@ use constant {
|
|||||||
IPV6MIB => 3,
|
IPV6MIB => 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -67,20 +67,24 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
'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_index' => 'ipAddressIfIndex', # IP-MIBw
|
# Commented out are not-accessible according to MIB
|
||||||
|
#'ip_addr6_pfxlen' => 'ipAddressPrefixLength', # IP-MIB
|
||||||
|
#'c_addr6_pfxlen' => 'cIpAddressPfxLength', # CISCO-IETF-IP-MIB
|
||||||
|
'i6_addr_pfxlen' => 'ipv6AddrPfxLength', # IPV6-MIB
|
||||||
|
|
||||||
|
'ip_addr6_index' => 'ipAddressIfIndex', # IP-MIB
|
||||||
'c_addr6_index' => 'cIpAddressIfIndex', # CISCO-IETF-IP-MIB
|
'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
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -142,6 +146,12 @@ sub ipv6_n2p_addr {
|
|||||||
# 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;
|
||||||
}
|
}
|
||||||
|
if (length($v6_packed) == 17) {
|
||||||
|
# Workaround for IPV6-MIB on Windows 2012: if the address is one byte too long, the SNMP agent probably has an incorrect
|
||||||
|
# implementation where a length field precedes the actual IPv6 address.
|
||||||
|
# In that case, the first character should be chr(16), ie 0x10; strip it if that's the case.
|
||||||
|
$v6_packed =~ s/^\x10//;
|
||||||
|
}
|
||||||
if (length($v6_packed) == 16) {
|
if (length($v6_packed) == 16) {
|
||||||
$v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
|
$v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
|
||||||
$return->{$row} = $v6addr;
|
$return->{$row} = $v6addr;
|
||||||
@@ -307,7 +317,9 @@ sub ipv6_addr_prefix {
|
|||||||
foreach my $row (keys %$ipv6_addr_prefix){
|
foreach my $row (keys %$ipv6_addr_prefix){
|
||||||
if ($row =~ /^(\d+)\.[\d\.]+$/) {
|
if ($row =~ /^(\d+)\.[\d\.]+$/) {
|
||||||
my $type = $1;
|
my $type = $1;
|
||||||
if ($type == 2) { # IPv6
|
if (($type == 2) or ($type == 4)) { # IPv6
|
||||||
|
# Remove interface specific part from vrf interfaces
|
||||||
|
if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
|
||||||
# Remove the OID part from the value
|
# Remove the OID part from the value
|
||||||
my $val = $ipv6_addr_prefix->{$row};
|
my $val = $ipv6_addr_prefix->{$row};
|
||||||
if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
|
if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
|
||||||
@@ -321,9 +333,60 @@ sub ipv6_addr_prefix {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ipv6_addr_prefixlength {
|
||||||
|
my $info = shift;
|
||||||
|
my $return;
|
||||||
|
my $ipv6_addr_prefix = &_test_methods( $info, {
|
||||||
|
ip_addr6_pfx => IPMIB,
|
||||||
|
c_addr6_pfx => CISCO,
|
||||||
|
});
|
||||||
|
return unless defined $ipv6_addr_prefix;
|
||||||
|
foreach my $row (keys %$ipv6_addr_prefix) {
|
||||||
|
if ($row =~ /^(\d+)\.[\d\.]+$/) {
|
||||||
|
my $type = $1;
|
||||||
|
if (($type == 2) or ($type == 4)) { # IPv6
|
||||||
|
# Remove interface specific part from vrf interfaces
|
||||||
|
if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
|
||||||
|
# Remove the OID part from the value
|
||||||
|
my $val = $ipv6_addr_prefix->{$row};
|
||||||
|
if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) {
|
||||||
|
$val = $2;
|
||||||
|
$return->{$row} = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ipv6_addr {
|
||||||
|
my $info = shift;
|
||||||
|
my $return;
|
||||||
|
my $indexes = $info->ipv6_index();
|
||||||
|
foreach my $row (keys %$indexes) {
|
||||||
|
my @parts = split(/\./, $row);
|
||||||
|
my $is_valid = 0;
|
||||||
|
if (scalar @parts == 18) {
|
||||||
|
my $addrtype = shift @parts;
|
||||||
|
$is_valid = 1;
|
||||||
|
} elsif (scalar @parts == 17) {
|
||||||
|
$is_valid = 1;
|
||||||
|
}
|
||||||
|
my $addrsize = shift @parts; # First element now is addrsize, should be 16
|
||||||
|
if ($is_valid && $addrsize == 16) {
|
||||||
|
$return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts)));
|
||||||
|
} else {
|
||||||
|
warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
sub _method_used {
|
sub _method_used {
|
||||||
my $info = shift;
|
my $info = shift;
|
||||||
my $return = 'none of the MIBs';
|
my $return = 'none of the MIBs';
|
||||||
|
# FIXME ugh! a global. makes order of calls important for debug.
|
||||||
if (defined $info::METHOD) {
|
if (defined $info::METHOD) {
|
||||||
if ($info::METHOD eq IPMIB) {
|
if ($info::METHOD eq IPMIB) {
|
||||||
$return = 'IP-MIB';
|
$return = 'IP-MIB';
|
||||||
@@ -343,6 +406,7 @@ sub _test_methods {
|
|||||||
foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
|
foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
|
||||||
$return = $info->$method || {};
|
$return = $info->$method || {};
|
||||||
if (scalar keys %$return) {
|
if (scalar keys %$return) {
|
||||||
|
# FIXME ugh! a global. makes order of calls important for debug.
|
||||||
$info::METHOD = $test->{$method};
|
$info::METHOD = $test->{$method};
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
@@ -459,6 +523,14 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
|
|||||||
|
|
||||||
Maps IPv6 addresses with their prefixes
|
Maps IPv6 addresses with their prefixes
|
||||||
|
|
||||||
|
=item $info->ipv6_addr_prefixlength()
|
||||||
|
|
||||||
|
Maps IPv6 addresses with their prefix length
|
||||||
|
|
||||||
|
=item $info->ipv6_addr()
|
||||||
|
|
||||||
|
Maps a table instance to an IPv6 address
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Internet Address Translation Table
|
=head2 Internet Address Translation Table
|
||||||
@@ -39,10 +39,11 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
||||||
|
'LLDP-EXT-MED-MIB' => 'lldpXMedMIB',
|
||||||
'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
|
'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
|
||||||
'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
|
'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
|
||||||
);
|
);
|
||||||
@@ -67,6 +68,19 @@ $VERSION = '3.08';
|
|||||||
'lldp_rem_sysname' => 'lldpRemSysName',
|
'lldp_rem_sysname' => 'lldpRemSysName',
|
||||||
'lldp_rem_sysdesc' => 'lldpRemSysDesc',
|
'lldp_rem_sysdesc' => 'lldpRemSysDesc',
|
||||||
'lldp_rem_sys_cap' => 'lldpRemSysCapEnabled',
|
'lldp_rem_sys_cap' => 'lldpRemSysCapEnabled',
|
||||||
|
'lldp_rem_cap_spt' => 'lldpRemSysCapSupported',
|
||||||
|
|
||||||
|
# LLDP-MIB::lldpXMedRemInventoryTable
|
||||||
|
'lldp_rem_hw_rev' => 'lldpXMedRemHardwareRev',
|
||||||
|
'lldp_rem_fw_rev' => 'lldpXMedRemFirmwareRev',
|
||||||
|
'lldp_rem_sw_rev' => 'lldpXMedRemSoftwareRev',
|
||||||
|
'lldp_rem_serial' => 'lldpXMedRemSerialNum',
|
||||||
|
'lldp_rem_vendor' => 'lldpXMedRemMfgName',
|
||||||
|
'lldp_rem_model' => 'lldpXMedRemModelName',
|
||||||
|
'lldp_rem_asset' => 'lldpXMedRemAssetID',
|
||||||
|
|
||||||
|
'lldp_rem_media_cap' => 'lldpXMedRemCapCurrent',
|
||||||
|
'lldp_rem_media_cap_spt' => 'lldpXMedRemCapSupported',
|
||||||
|
|
||||||
# LLDP-MIB::lldpRemManAddrTable
|
# LLDP-MIB::lldpRemManAddrTable
|
||||||
'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
|
'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
|
||||||
@@ -80,6 +94,18 @@ $VERSION = '3.08';
|
|||||||
'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
|
'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
|
||||||
'lldp_sys_cap' => \&SNMP::Info::munge_bits,
|
'lldp_sys_cap' => \&SNMP::Info::munge_bits,
|
||||||
'lldp_rem_sys_cap' => \&SNMP::Info::munge_bits,
|
'lldp_rem_sys_cap' => \&SNMP::Info::munge_bits,
|
||||||
|
'lldp_rem_cap_spt' => \&SNMP::Info::munge_bits,
|
||||||
|
|
||||||
|
'lldp_rem_hw_rev' => \&SNMP::Info::munge_null,
|
||||||
|
'lldp_rem_fw_rev' => \&SNMP::Info::munge_null,
|
||||||
|
'lldp_rem_sw_rev' => \&SNMP::Info::munge_null,
|
||||||
|
'lldp_rem_serial' => \&SNMP::Info::munge_null,
|
||||||
|
'lldp_rem_vendor' => \&SNMP::Info::munge_null,
|
||||||
|
'lldp_rem_model' => \&SNMP::Info::munge_null,
|
||||||
|
'lldp_rem_asset' => \&SNMP::Info::munge_null,
|
||||||
|
|
||||||
|
'lldp_rem_media_cap' => \&SNMP::Info::munge_bits,
|
||||||
|
'lldp_rem_media_cap_spt' => \&SNMP::Info::munge_bits,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub hasLLDP {
|
sub hasLLDP {
|
||||||
@@ -88,8 +114,12 @@ sub hasLLDP {
|
|||||||
# We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
|
# We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
|
||||||
# so we could be running LLDP but not return any useful information
|
# so we could be running LLDP but not return any useful information
|
||||||
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
|
||||||
|
my $lldp_rem = $lldp->lldp_rem_id() || {};
|
||||||
|
return 1 if scalar keys %$lldp_rem;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,11 +128,11 @@ sub lldp_if {
|
|||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $addr = $lldp->lldp_rem_pid($partial) || {};
|
my $addr = $lldp->lldp_rem_pid($partial) || {};
|
||||||
my $i_descr = $lldp->i_description() || {};
|
my $i_descr = $lldp->i_description() || {};
|
||||||
my $i_alias = $lldp->i_alias() || {};
|
my $i_alias = $lldp->i_alias() || {};
|
||||||
my %r_i_descr = reverse %$i_descr;
|
my %r_i_descr = reverse %$i_descr;
|
||||||
my %r_i_alias = reverse %$i_alias;
|
my %r_i_alias = reverse %$i_alias;
|
||||||
|
|
||||||
my %lldp_if;
|
my %lldp_if;
|
||||||
foreach my $key ( keys %$addr ) {
|
foreach my $key ( keys %$addr ) {
|
||||||
my @aOID = split( '\.', $key );
|
my @aOID = split( '\.', $key );
|
||||||
@@ -113,14 +143,15 @@ sub lldp_if {
|
|||||||
# prefer ifDescr over ifAlias because using cross ref with description is correct behavior
|
# 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.
|
# 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 ( exists $r_i_descr{$desc} ) {
|
if ( $desc && exists $r_i_descr{$desc} ) {
|
||||||
$port = $r_i_descr{$desc};
|
$port = $r_i_descr{$desc};
|
||||||
} elsif ( exists $r_i_alias{$desc} ) {
|
}
|
||||||
|
elsif ( $desc && exists $r_i_alias{$desc} ) {
|
||||||
$port = $r_i_alias{$desc};
|
$port = $r_i_alias{$desc};
|
||||||
}
|
}
|
||||||
|
|
||||||
$lldp_if{$key} = $port;
|
$lldp_if{$key} = $port;
|
||||||
}
|
}
|
||||||
return \%lldp_if;
|
return \%lldp_if;
|
||||||
@@ -142,6 +173,38 @@ sub lldp_ip {
|
|||||||
return \%lldp_ip;
|
return \%lldp_ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub lldp_ipv6 {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
|
||||||
|
|
||||||
|
my %lldp_ipv6;
|
||||||
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
|
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
||||||
|
next unless defined $index;
|
||||||
|
next unless $proto == 2;
|
||||||
|
$lldp_ipv6{$index} = $addr;
|
||||||
|
}
|
||||||
|
return \%lldp_ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_mac {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
|
||||||
|
|
||||||
|
my %lldp_ipv6;
|
||||||
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
|
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
|
||||||
|
next unless defined $index;
|
||||||
|
next unless $proto == 6;
|
||||||
|
$lldp_ipv6{$index} = $addr;
|
||||||
|
}
|
||||||
|
return \%lldp_ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
sub lldp_addr {
|
sub lldp_addr {
|
||||||
my $lldp = shift;
|
my $lldp = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -164,12 +227,14 @@ sub lldp_port {
|
|||||||
my $pdesc = $lldp->lldp_rem_desc($partial) || {};
|
my $pdesc = $lldp->lldp_rem_desc($partial) || {};
|
||||||
my $pid = $lldp->lldp_rem_pid($partial) || {};
|
my $pid = $lldp->lldp_rem_pid($partial) || {};
|
||||||
my $ptype = $lldp->lldp_rem_pid_type($partial) || {};
|
my $ptype = $lldp->lldp_rem_pid_type($partial) || {};
|
||||||
|
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
|
||||||
|
|
||||||
my %lldp_port;
|
my %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' ) {
|
||||||
|
|
||||||
# If the pid claims to be an interface name,
|
# If the pid claims to be an interface name,
|
||||||
# believe it.
|
# believe it.
|
||||||
$port = $pid->{$key};
|
$port = $pid->{$key};
|
||||||
@@ -188,8 +253,12 @@ sub lldp_port {
|
|||||||
|
|
||||||
# Avaya/Nortel lldpRemPortDesc doesn't match ifDescr, but we can still
|
# Avaya/Nortel lldpRemPortDesc doesn't match ifDescr, but we can still
|
||||||
# figure out slot.port based upon lldpRemPortDesc
|
# figure out slot.port based upon lldpRemPortDesc
|
||||||
if ( $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ ) {
|
if ( defined $desc->{$key}
|
||||||
$port = defined $1 ? "$2.$3" : "$3";
|
&& $desc->{$key}
|
||||||
|
=~ /^Ethernet\s(?:Routing\s)?Switch\s\d|^Virtual\sServices\sPlatform\s\d/
|
||||||
|
&& $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ )
|
||||||
|
{
|
||||||
|
$port = defined $1 ? "$2.$3" : "1.$3";
|
||||||
}
|
}
|
||||||
|
|
||||||
$lldp_port{$key} = $port;
|
$lldp_port{$key} = $port;
|
||||||
@@ -215,10 +284,13 @@ sub lldp_id {
|
|||||||
if ( $type =~ /mac/ ) {
|
if ( $type =~ /mac/ ) {
|
||||||
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
|
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $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 sign, I guess)
|
||||||
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
|
my @octets
|
||||||
|
= ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
|
||||||
|
[ 1 .. 4 ];
|
||||||
$id = join '.', map { hex($_) } @octets;
|
$id = join '.', map { hex($_) } @octets;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,6 +299,87 @@ sub lldp_id {
|
|||||||
return \%lldp_id;
|
return \%lldp_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub lldp_platform {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $rid = $lldp->lldp_rem_id($partial) || {};
|
||||||
|
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
|
||||||
|
my $name = $lldp->lldp_rem_sysname($partial) || {};
|
||||||
|
|
||||||
|
my %lldp_platform;
|
||||||
|
foreach my $key ( keys %$rid ) {
|
||||||
|
$lldp_platform{$key} = $desc->{$key} || $name->{$key};
|
||||||
|
}
|
||||||
|
return \%lldp_platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_cap {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $lldp_caps = $lldp->lldp_rem_cap_spt($partial) || {};
|
||||||
|
|
||||||
|
# Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
|
||||||
|
# be able to enumerate for us, so we have to get it from the MIB
|
||||||
|
# and enumerate ourselves
|
||||||
|
my $oid = SNMP::translateObj( 'lldpRemSysCapEnabled', 0, 1 ) || '';
|
||||||
|
my $enums = (
|
||||||
|
( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
|
||||||
|
? $SNMP::MIB{$oid}{'enums'}
|
||||||
|
: {}
|
||||||
|
);
|
||||||
|
my %r_enums = reverse %$enums;
|
||||||
|
|
||||||
|
my %lldp_cap;
|
||||||
|
foreach my $key ( keys %$lldp_caps ) {
|
||||||
|
my $cap_bits = $lldp_caps->{$key};
|
||||||
|
next unless $cap_bits;
|
||||||
|
|
||||||
|
my $count = 0;
|
||||||
|
foreach my $bit ( split //, $cap_bits ) {
|
||||||
|
if ($bit) {
|
||||||
|
push( @{ $lldp_cap{$key} }, $r_enums{$count} );
|
||||||
|
}
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%lldp_cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_media_cap {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $lldp_caps = $lldp->lldp_rem_media_cap_spt($partial) || {};
|
||||||
|
|
||||||
|
# Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
|
||||||
|
# be able to enumerate for us, so we have to get it from the MIB
|
||||||
|
# and enumerate ourselves
|
||||||
|
my $oid = SNMP::translateObj( 'lldpXMedRemCapCurrent', 0, 1 ) || '';
|
||||||
|
my $enums = (
|
||||||
|
( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
|
||||||
|
? $SNMP::MIB{$oid}{'enums'}
|
||||||
|
: {}
|
||||||
|
);
|
||||||
|
my %r_enums = reverse %$enums;
|
||||||
|
|
||||||
|
my %lldp_cap;
|
||||||
|
foreach my $key ( keys %$lldp_caps ) {
|
||||||
|
my $cap_bits = $lldp_caps->{$key};
|
||||||
|
next unless $cap_bits;
|
||||||
|
|
||||||
|
my $count = 0;
|
||||||
|
foreach my $bit ( split //, $cap_bits ) {
|
||||||
|
if ($bit) {
|
||||||
|
push( @{ $lldp_cap{$key} }, $r_enums{$count} );
|
||||||
|
}
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%lldp_cap;
|
||||||
|
}
|
||||||
|
|
||||||
#sub root_ip {
|
#sub root_ip {
|
||||||
# my $lldp = shift;
|
# my $lldp = shift;
|
||||||
#
|
#
|
||||||
@@ -252,20 +405,26 @@ sub _lldp_addr_index {
|
|||||||
my @oids = split( /\./, $idx );
|
my @oids = split( /\./, $idx );
|
||||||
my $index = join( '.', splice( @oids, 0, 3 ) );
|
my $index = join( '.', splice( @oids, 0, 3 ) );
|
||||||
my $proto = shift(@oids);
|
my $proto = shift(@oids);
|
||||||
my $length = shift(@oids);
|
shift(@oids) if scalar @oids > 4; # $length
|
||||||
|
|
||||||
# IPv4
|
# IPv4
|
||||||
if ( $proto == 1 ) {
|
if ( $proto == 1 ) {
|
||||||
return ( $index, $proto, join( '.', @oids ) );
|
return ( $index, $proto, join( '.', @oids ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# IPv6
|
||||||
|
elsif ( $proto == 2 ) {
|
||||||
|
return ( $index, $proto,
|
||||||
|
join(':', unpack('(H4)*', pack('C*', @oids)) ) );
|
||||||
|
}
|
||||||
|
|
||||||
# MAC
|
# MAC
|
||||||
elsif ( $proto == 6 ) {
|
elsif ( $proto == 6 ) {
|
||||||
return ( $index, $proto,
|
return ( $index, $proto,
|
||||||
join( ':', map { sprintf "%02x", $_ } @oids ) );
|
join( ':', map { sprintf "%02x", $_ } @oids ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO - Need to handle other protocols, i.e. IPv6
|
# TODO - Other protocols may be used as well; implement when needed?
|
||||||
else {
|
else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -333,6 +492,8 @@ None.
|
|||||||
|
|
||||||
=item F<LLDP-MIB>
|
=item F<LLDP-MIB>
|
||||||
|
|
||||||
|
=item F<LLDP-EXT-MED-MIB>
|
||||||
|
|
||||||
=item F<LLDP-EXT-DOT1-MIB>
|
=item F<LLDP-EXT-DOT1-MIB>
|
||||||
|
|
||||||
=item F<LLDP-EXT-DOT3-MIB>
|
=item F<LLDP-EXT-DOT3-MIB>
|
||||||
@@ -431,15 +592,46 @@ if unable defaults to (C<lldpRemLocalPortNum>).
|
|||||||
Returns remote IPv4 address. Returns for all other address types, use
|
Returns remote IPv4 address. Returns for all other address types, use
|
||||||
lldp_addr if you want any return address type.
|
lldp_addr if you want any return address type.
|
||||||
|
|
||||||
|
=item $lldp->lldp_ipv6()
|
||||||
|
|
||||||
|
Returns remote IPv6 address, if known. Returns for all other address types,
|
||||||
|
use lldp_addr if you don't care about return address type.
|
||||||
|
|
||||||
|
=item $lldp->lldp_mac()
|
||||||
|
|
||||||
|
Returns remote (management) MAC address, if known. Returns for all other
|
||||||
|
address types, use lldp_addr if you don't care about return address type.
|
||||||
|
|
||||||
=item $lldp->lldp_addr()
|
=item $lldp->lldp_addr()
|
||||||
|
|
||||||
Returns remote address. Type may be any IANA Address Family Number.
|
Returns remote address. Type may be any IANA Address Family Number.
|
||||||
Currently only returns IPv4 or MAC addresses.
|
Currently only returns IPv4, IPv6 or MAC addresses. If the remote device
|
||||||
|
returns more than one address type, this method will give only one. Which one
|
||||||
|
is returned is decided by chance, phase of the moon and Perl hash ordering.
|
||||||
|
|
||||||
|
Use lldp_mac, lldp_ip or lldp_ipv6 if you want a specific address type.
|
||||||
|
|
||||||
=item $lldp->lldp_port()
|
=item $lldp->lldp_port()
|
||||||
|
|
||||||
Returns remote port ID
|
Returns remote port ID
|
||||||
|
|
||||||
|
=item $lldp->lldp_platform()
|
||||||
|
|
||||||
|
Tries to return something useful from C<lldp_rem_sysdesc()> or
|
||||||
|
C<lldp_rem_sysname()>.
|
||||||
|
|
||||||
|
=item $lldp->lldp_cap()
|
||||||
|
|
||||||
|
Returns hash of arrays with each array containing the system capabilities
|
||||||
|
supported by the remote system. Possible elements in the array are
|
||||||
|
enumerated from C<LldpSystemCapabilitiesMap>.
|
||||||
|
|
||||||
|
=item $lldp->lldp_media_cap()
|
||||||
|
|
||||||
|
Returns hash of arrays with each array containing the media capabilities
|
||||||
|
supported by the remote system. Possible elements in the array are
|
||||||
|
enumerated from C<LldpXMedCapabilities>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 LLDP Remote Table (C<lldpRemTable>)
|
=head2 LLDP Remote Table (C<lldpRemTable>)
|
||||||
@@ -455,7 +647,7 @@ the remote system.
|
|||||||
|
|
||||||
=item $lldp->lldp_rem_id()
|
=item $lldp->lldp_rem_id()
|
||||||
|
|
||||||
Returns the string value used to identify the chassis component associated
|
Returns the string value used to identify the chassis component associated
|
||||||
with the remote system.
|
with the remote system.
|
||||||
|
|
||||||
(C<lldpRemChassisId>)
|
(C<lldpRemChassisId>)
|
||||||
@@ -501,11 +693,70 @@ Nulls are removed before the value is returned.
|
|||||||
|
|
||||||
(C<lldpRemSysDesc>)
|
(C<lldpRemSysDesc>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_hw_rev()
|
||||||
|
|
||||||
|
Returns the string value used to identify the hardware revision of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemHardwareRev>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_fw_rev()
|
||||||
|
|
||||||
|
Returns the string value used to identify the firmware revision of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemHardwareRev>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_sw_rev()
|
||||||
|
|
||||||
|
Returns the string value used to identify the software revision of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemSoftwareRev>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_serial()
|
||||||
|
|
||||||
|
Returns the string value used to identify the serial number of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemSerialNum>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_vendor()
|
||||||
|
|
||||||
|
Returns the string value used to identify the manufacturer of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemMfgName>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_asset()
|
||||||
|
|
||||||
|
Returns the string value used to identify the asset number of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemAssetID>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_model()
|
||||||
|
|
||||||
|
Returns the string value used to identify the model of the
|
||||||
|
remote system. Nulls are removed before the value is returned.
|
||||||
|
|
||||||
|
(C<lldpXMedRemModelName>)
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_media_cap_spt()
|
||||||
|
|
||||||
|
Returns which media capabilities are supported on the remote system. Results
|
||||||
|
are munged into an ascii binary string, LSB.
|
||||||
|
|
||||||
|
=item $lldp->lldp_rem_media_cap()
|
||||||
|
|
||||||
|
Returns which media capabilities are enabled on the remote system. Results
|
||||||
|
are munged into an ascii binary string, LSB.
|
||||||
|
|
||||||
=item $lldp->lldp_rem_sys_cap()
|
=item $lldp->lldp_rem_sys_cap()
|
||||||
|
|
||||||
Returns which system capabilities are enabled on the local system. Results
|
Returns which system capabilities are enabled on the remote system. Results
|
||||||
are munged into an ascii binary string, LSB. Each digit
|
are munged into an ascii binary string, LSB. Each digit represents a bit
|
||||||
represents a bit from the table below:
|
from the table below:
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
||||||
@@ -71,6 +71,7 @@ sub os_ver {
|
|||||||
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
@@ -78,7 +79,7 @@ sub model {
|
|||||||
|
|
||||||
my $desc = $allied->description();
|
my $desc = $allied->description();
|
||||||
|
|
||||||
if ( $desc =~ /(AT-\d{4}\S{1}?)/ ) {
|
if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
||||||
@@ -50,11 +50,11 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Layer1::FUNCS,
|
%SNMP::Info::Layer1::FUNCS,
|
||||||
'asante_port' => 'ePortIndex',
|
'asante_port' => 'ePortIndex',
|
||||||
'asante_group' => 'ePortGrpIndex',
|
'asante_group' => 'ePortGrpIndex',
|
||||||
'i_type' => 'ePortStateType',
|
'i_type' => 'ePortGrpIndex',
|
||||||
'asante_up' => 'ePortStateLinkStatus',
|
'asante_up' => 'ePortStateLinkStatus',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-HUB1012-MIB' => 'asante' );
|
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-AH1012-MIB' => 'asante' );
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
|
||||||
|
|
||||||
@@ -84,6 +84,7 @@ sub os_ver {
|
|||||||
if ( $descr =~ /software v(\d+\.\d+)/ ) {
|
if ( $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;
|
||||||
|
|
||||||
@@ -202,7 +203,7 @@ Asante device through SNMP.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item F<ASANTE-HUB1012-MIB>
|
=item F<ASANTE-AH1012-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -230,7 +231,7 @@ Returns 'asante' :)
|
|||||||
|
|
||||||
=item $asante->model()
|
=item $asante->model()
|
||||||
|
|
||||||
Cross references $asante->id() to the F<ASANTE-HUB1012-MIB> and returns
|
Cross references $asante->id() to the F<ASANTE-AH1012-MIB> and returns
|
||||||
the results.
|
the results.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -334,6 +334,13 @@ sub bp_index {
|
|||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $bayhub = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $bayhub->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $bayhub = shift;
|
my $bayhub = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# SNMP::Info::Layer1::Cyclades
|
# SNMP::Info::Layer1::Cyclades
|
||||||
# $Id$
|
# $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
|
||||||
@@ -39,38 +39,105 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%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
|
||||||
|
|
||||||
@@ -309,7 +496,7 @@ 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
|
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.
|
||||||
@@ -334,6 +521,14 @@ my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
|
|||||||
|
|
||||||
=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>
|
||||||
|
|
||||||
|
=item F<ACS6000-MIB>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Inherited MIBs
|
=head2 Inherited MIBs
|
||||||
@@ -348,11 +543,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 +555,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 +574,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
|
||||||
|
|
||||||
@@ -409,31 +605,34 @@ to a hash.
|
|||||||
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
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -324,6 +324,13 @@ sub bp_index {
|
|||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $s3000 = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $s3000->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $s3000 = shift;
|
my $s3000 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -38,18 +38,20 @@ 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;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::ISA
|
@SNMP::Info::Layer2::ISA
|
||||||
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet Exporter/;
|
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP Exporter/;
|
||||||
@SNMP::Info::Layer2::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%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,
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -57,6 +59,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Bridge::GLOBALS,
|
%SNMP::Info::Bridge::GLOBALS,
|
||||||
%SNMP::Info::Entity::GLOBALS,
|
%SNMP::Info::Entity::GLOBALS,
|
||||||
%SNMP::Info::PowerEthernet::GLOBALS,
|
%SNMP::Info::PowerEthernet::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
'serial1' =>
|
'serial1' =>
|
||||||
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
||||||
);
|
);
|
||||||
@@ -64,6 +67,7 @@ $VERSION = '3.08';
|
|||||||
%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,
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -73,6 +77,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Bridge::MUNGE,
|
%SNMP::Info::Bridge::MUNGE,
|
||||||
%SNMP::Info::Entity::MUNGE,
|
%SNMP::Info::Entity::MUNGE,
|
||||||
%SNMP::Info::PowerEthernet::MUNGE,
|
%SNMP::Info::PowerEthernet::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
# Method OverRides
|
# Method OverRides
|
||||||
@@ -113,41 +118,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 i_ignore {
|
|
||||||
my $l2 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $i_type = $l2->i_type($partial) || {};
|
|
||||||
|
|
||||||
my %i_ignore = ();
|
|
||||||
|
|
||||||
foreach my $if ( keys %$i_type ) {
|
|
||||||
my $type = $i_type->{$if};
|
|
||||||
$i_ignore{$if}++
|
|
||||||
if $type =~ /(loopback|other|cpu)/i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return \%i_ignore;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub interfaces {
|
sub interfaces {
|
||||||
@@ -235,6 +217,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::Entity
|
=item SNMP::Info::Entity
|
||||||
|
|
||||||
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -272,7 +256,7 @@ 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
|
||||||
|
|
||||||
@@ -288,6 +272,10 @@ See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=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
|
||||||
@@ -304,12 +292,6 @@ name.
|
|||||||
|
|
||||||
Defaults to C<ifDescr> but checks and overrides with C<ifName>
|
Defaults to C<ifDescr> but checks and overrides with C<ifName>
|
||||||
|
|
||||||
=item $l2->i_ignore()
|
|
||||||
|
|
||||||
Returns reference to hash. Increments value of IID if port is to be ignored.
|
|
||||||
|
|
||||||
Ignores ports with C<ifType> of loopback, propvirtual, other, and cpu
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info
|
=head2 Table Methods imported from SNMP::Info
|
||||||
@@ -324,4 +306,8 @@ See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
178
lib/SNMP/Info/Layer2/3Com.pm
Normal file
178
lib/SNMP/Info/Layer2/3Com.pm
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
package SNMP::Info::Layer2::3Com;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::CDP;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::3Com::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::3Com::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'A3Com-products-MIB' => 'wlanAP7760',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return '3Com';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $dev = shift;
|
||||||
|
my $e_serial = $dev->e_serial();
|
||||||
|
|
||||||
|
# Find entity table entry for this unit
|
||||||
|
foreach my $e ( sort keys %$e_serial ) {
|
||||||
|
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
|
||||||
|
return $e_serial->{$e};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
|
||||||
|
my $dev = shift;
|
||||||
|
my $e_swver = $dev->e_swver();
|
||||||
|
# Find entity table entry for this unit
|
||||||
|
foreach my $e ( sort keys %$e_swver ) {
|
||||||
|
if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
|
||||||
|
return $e_swver->{$e};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return '3Com';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
|
||||||
|
my $dsmodel = shift;
|
||||||
|
my $descr = $dsmodel->description();
|
||||||
|
if ( $descr =~ /^([\S ]+) Software.*/){
|
||||||
|
return $1;
|
||||||
|
} else {
|
||||||
|
return $descr;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Max Kosmach
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $router = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 1
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $router->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for 3Com L2 devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<A3Com-products-MIB>
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $device->vendor()
|
||||||
|
|
||||||
|
Returns '3Com'
|
||||||
|
|
||||||
|
=item $device->os()
|
||||||
|
|
||||||
|
Returns '3Com'
|
||||||
|
|
||||||
|
=item $device->os_ver()
|
||||||
|
|
||||||
|
Return os version
|
||||||
|
|
||||||
|
=item $device->model()
|
||||||
|
|
||||||
|
Returns device model extracted from description
|
||||||
|
|
||||||
|
=item $device->serial()
|
||||||
|
|
||||||
|
Returns serial number
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
286
lib/SNMP/Info/Layer2/Adtran.pm
Normal file
286
lib/SNMP/Info/Layer2/Adtran.pm
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
package SNMP::Info::Layer2::Adtran;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Adtran::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Adtran::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||||
|
# table by the serial() function.
|
||||||
|
our $index = undef;
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
'ADTRAN-GENEVC-MIB' => 'adGenEVCMIB',
|
||||||
|
'ADTRAN-GENMEF-MIB' => 'adGenMEFMIB',
|
||||||
|
'ADTRAN-GENPORT-MIB' => 'adGenPort',
|
||||||
|
'ADTRAN-MIB' => 'adtran',
|
||||||
|
'ADTRAN-AOSUNIT' => 'adGenAOSUnitMib',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
'serial' => 'adProdSerialNumber',
|
||||||
|
'ad_mgmtevcvid' => 'adGenEVCSysMgmtEVCSTagVID',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
'ad_evcstag' => 'adGenEVCLookupName',
|
||||||
|
'ad_menport' => 'adGenMenPortRowStatus',
|
||||||
|
'ad_evcnamevid' => 'adGenEVCSTagVID',
|
||||||
|
'ad_mgmtevcports' => 'adGenSysMgmtEVCInterfaceConnectionType',
|
||||||
|
'ad_evcmapuniport' => 'adGenMEFMapUNIPort',
|
||||||
|
'ad_evcmapevc' => 'adGenMEFMapAssociatedEVCAlias',
|
||||||
|
'ad_genportcustuse' => 'adGenPortCustomerUse',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, %SNMP::Info::Layer3::MUNGE );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'adtran';
|
||||||
|
}
|
||||||
|
sub os {
|
||||||
|
return 'aos';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub layers {
|
||||||
|
my $adtran = shift;
|
||||||
|
|
||||||
|
my $layers = $adtran->SUPER::layers();
|
||||||
|
# Some netvantas don't report L2 properly
|
||||||
|
my $macs = $adtran->fw_mac();
|
||||||
|
|
||||||
|
if (keys %$macs) {
|
||||||
|
my $l = substr $layers, 6, 1, "1";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $layers;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $ver = $adtran->adProdSwVersion() || undef;
|
||||||
|
return $ver if (defined $ver);
|
||||||
|
my $aos_ver = $adtran->adAOSDeviceVersion();
|
||||||
|
return $aos_ver;
|
||||||
|
}
|
||||||
|
sub model {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $id = $adtran->id();
|
||||||
|
my $mod = $adtran->adProdName() || undef;
|
||||||
|
return $mod if (defined $mod);
|
||||||
|
my $model = $adtran->adAOSDeviceProductName() || undef;
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
sub serial {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $e_serial = $adtran->e_serial() || {};
|
||||||
|
my $serial2 = $e_serial->{1} || undef;
|
||||||
|
return $serial2 if ( defined $serial2 );
|
||||||
|
return $adtran->orig_serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_name {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
my $i_name = $adtran->SUPER::i_alias() || undef;
|
||||||
|
return $i_name if (defined $i_name);
|
||||||
|
$i_name = {};
|
||||||
|
my $adname = $adtran->ad_genportcustuse() || undef;
|
||||||
|
if (defined $adname) {
|
||||||
|
foreach my $port (keys %$adname) {
|
||||||
|
my @split = split(/\./,$port);
|
||||||
|
$i_name->{@split[1]} = $adname->{$port};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $i_name;
|
||||||
|
}
|
||||||
|
sub i_vlan {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
my $uniports = $adtran->ad_evcmapuniport() || undef;
|
||||||
|
my $evcmaps = $adtran->ad_evcmapevc() || undef;
|
||||||
|
my $v_names = $adtran->ad_evcnamevid() || undef;
|
||||||
|
if (defined $uniports) {
|
||||||
|
my $vlans = {};
|
||||||
|
foreach my $oid (keys %$v_names) {
|
||||||
|
my $name = pack("C*", split(/\./,$oid));
|
||||||
|
$vlans->{$name} = $v_names->{$oid};
|
||||||
|
}
|
||||||
|
my $i_vlan = {};
|
||||||
|
foreach my $evcmap (keys %$evcmaps) {
|
||||||
|
$i_vlan->{$uniports->{$evcmap}} = $vlans->{$evcmaps->{$evcmap}};
|
||||||
|
}
|
||||||
|
return $i_vlan;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
my $i_vlan = $adtran->ad_menport();
|
||||||
|
if (defined $i_vlan) {
|
||||||
|
my $vlans = {};
|
||||||
|
my $v_name = $adtran->v_name();
|
||||||
|
foreach my $vid (keys %$v_name) {
|
||||||
|
$vlans->{$v_name->{$vid}} = $vid;
|
||||||
|
}
|
||||||
|
my $if_vlans = {};
|
||||||
|
foreach my $entry (keys %$i_vlan) {
|
||||||
|
my @split = split(/(\.0)+\./,$entry);
|
||||||
|
my $name = pack("C*", split(/\./,@split[0]));
|
||||||
|
push @{$if_vlans->{@split[2]}}, $vlans->{$name};
|
||||||
|
}
|
||||||
|
my $mgmtevcports = $adtran->ad_mgmtevcports();
|
||||||
|
my $mgmtevcid = $adtran->ad_mgmtevcvid();
|
||||||
|
foreach my $port (keys %$mgmtevcports) {
|
||||||
|
push @{$if_vlans->{$port}}, $mgmtevcid;
|
||||||
|
}
|
||||||
|
return $if_vlans;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub v_name {
|
||||||
|
my $adtran = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
my $v_index = $adtran->ad_evcstag();
|
||||||
|
return {} unless defined $v_index;
|
||||||
|
$v_index->{$adtran->ad_mgmtevcvid()} = 'system-management-evc';
|
||||||
|
return $v_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $adtran = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $adtran->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for adtran Devices running JUNOS
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $adtran->vendor()
|
||||||
|
|
||||||
|
Returns 'adtran'
|
||||||
|
|
||||||
|
=item $adtran->os()
|
||||||
|
|
||||||
|
Returns 'aos'
|
||||||
|
|
||||||
|
=item $adtran->layers()
|
||||||
|
|
||||||
|
Ensures that layer two is reported, at least.
|
||||||
|
|
||||||
|
=item $adtran->os_ver()
|
||||||
|
|
||||||
|
Returns the software version extracted first from C<adProdSwVersion> or
|
||||||
|
C<adAOSDeviceVersion>.
|
||||||
|
|
||||||
|
=item $adtran->model()
|
||||||
|
|
||||||
|
Returns the model extracted first from C<adProdName> or
|
||||||
|
C<adAOSDeviceProductName>.
|
||||||
|
|
||||||
|
=item $adtran->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $adtran->v_name()
|
||||||
|
|
||||||
|
VLAN names table.
|
||||||
|
|
||||||
|
=item $adtran->i_name()
|
||||||
|
|
||||||
|
Interface names table.
|
||||||
|
|
||||||
|
=item $adtran->i_vlan()
|
||||||
|
|
||||||
|
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
||||||
|
|
||||||
|
=item $adtran->i_vlan_membership()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
|
IDs. These are the VLANs which are members of the egress list for the port.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
@@ -97,6 +97,14 @@ my $mcs_index = {
|
|||||||
m13 => '104',
|
m13 => '104',
|
||||||
m14 => '117',
|
m14 => '117',
|
||||||
m15 => '130',
|
m15 => '130',
|
||||||
|
m16 => '19.5',
|
||||||
|
m17 => '39',
|
||||||
|
m18 => '58.5',
|
||||||
|
m19 => '78',
|
||||||
|
m20 => '117',
|
||||||
|
m21 => '156',
|
||||||
|
m22 => '175.5',
|
||||||
|
m23 => '195',
|
||||||
# This is a cheat for 802.11a bonded
|
# This is a cheat for 802.11a bonded
|
||||||
m108 => '108',
|
m108 => '108',
|
||||||
},
|
},
|
||||||
@@ -117,6 +125,14 @@ my $mcs_index = {
|
|||||||
m13 => '240',
|
m13 => '240',
|
||||||
m14 => '270',
|
m14 => '270',
|
||||||
m15 => '300',
|
m15 => '300',
|
||||||
|
m16 => '45',
|
||||||
|
m17 => '90',
|
||||||
|
m18 => '135',
|
||||||
|
m19 => '180',
|
||||||
|
m20 => '270',
|
||||||
|
m21 => '360',
|
||||||
|
m22 => '405',
|
||||||
|
m23 => '450',
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -165,6 +181,7 @@ sub cd11_txrate {
|
|||||||
elsif ( $rate =~ /^m/ ) {
|
elsif ( $rate =~ /^m/ ) {
|
||||||
my $band = $protos->{$idx};
|
my $band = $protos->{$idx};
|
||||||
my $bw = $bws->{$band};
|
my $bw = $bws->{$band};
|
||||||
|
# FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"...
|
||||||
$cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
|
$cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::IEEE802dot11::GLOBALS,
|
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||||
@@ -60,7 +60,7 @@ $VERSION = '3.08';
|
|||||||
%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'
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -97,6 +97,7 @@ $VERSION = '3.08';
|
|||||||
'CISCO-DOT11-ASSOCIATION-MIB' => 'cDot11ClientSubIfIndex',
|
'CISCO-DOT11-ASSOCIATION-MIB' => 'cDot11ClientSubIfIndex',
|
||||||
'CISCO-DOT11-SSID-SECURITY-MIB' => 'cdot11SecVlanNameId',
|
'CISCO-DOT11-SSID-SECURITY-MIB' => 'cdot11SecVlanNameId',
|
||||||
'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex',
|
'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex',
|
||||||
|
'CISCO-POE-PD-MIB' => 'cpoePdCurrentPowerSource',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
@@ -134,7 +135,7 @@ 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};
|
$descr = "$e_descr->{1} $descr" if defined $e_descr->{1};
|
||||||
@@ -457,6 +458,18 @@ sub i_ssidmac {
|
|||||||
return $i_ssidmac;
|
return $i_ssidmac;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###
|
||||||
|
# PoE status. The ps1_type is the PoE injector type, which is just
|
||||||
|
# a scalar; the status is a little more complex.
|
||||||
|
sub ps1_status {
|
||||||
|
my $aironet = shift;
|
||||||
|
my $idx = $aironet->cpoePdCurrentPowerLevel();
|
||||||
|
my $mw = $aironet->cpoePdSupportedPower( $idx );
|
||||||
|
my $descr = $aironet->cpoePdSupportedPowerMode( $idx );
|
||||||
|
|
||||||
|
return sprintf( "%.2fW (%s)", $mw->{$idx} * 0.001, $descr->{$idx} );
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -540,17 +553,13 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $aironet->discription()
|
|
||||||
|
|
||||||
Adds info from method e_descr() from SNMP::Info::Entity
|
|
||||||
|
|
||||||
=item $aironet->vendor()
|
=item $aironet->vendor()
|
||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
|
|
||||||
=item $aironet->description()
|
=item $aironet->description()
|
||||||
|
|
||||||
System description
|
System description. Adds info from method e_descr() from SNMP::Info::Entity
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -648,6 +657,11 @@ being broadcast.
|
|||||||
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()
|
||||||
|
|
||||||
|
Returns the PoE injector status based on C<cpoePdSupportedPower> and
|
||||||
|
C<cpoePdSupportedPowerMode>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||||
|
|
||||||
@@ -73,6 +73,7 @@ sub os_ver {
|
|||||||
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
if ( $descr =~ m/version (\d+\.\d+)/ ) {
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
||||||
@@ -229,7 +229,7 @@ sub index_factor {
|
|||||||
if ( ( $model =~ /(470)/ )
|
if ( ( $model =~ /(470)/ )
|
||||||
or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
|
or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
|
||||||
$index_factor = 128
|
$index_factor = 128
|
||||||
if ( ( $model =~ /(5[56]\d\d)|VSP/ )
|
if ( ( $model =~ /(5[56]\d\d)|VSP|4950|59100/ )
|
||||||
and ( $os_ver >= 6 ) );
|
and ( $os_ver >= 6 ) );
|
||||||
|
|
||||||
return $index_factor;
|
return $index_factor;
|
||||||
@@ -341,6 +341,60 @@ sub peth_port_ifindex {
|
|||||||
return \%peth_port_ifindex;
|
return \%peth_port_ifindex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Currently only ERS 4800 v5.8+ support the rcBridgeSpbmMacTable
|
||||||
|
# which holds the FDB for a SPBM edge deployment.
|
||||||
|
#
|
||||||
|
# Q-BRIDGE still holds some entries when the rcBridgeSpbmMacTable is in use
|
||||||
|
# so we merge hash entries.
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
|
||||||
|
my $qb = $rapidcity->SUPER::fw_mac() || {};
|
||||||
|
my $spbm = $rapidcity->rc_spbm_fw_mac() || {};
|
||||||
|
my $fw_mac = { %$qb, %$spbm };
|
||||||
|
|
||||||
|
return $fw_mac;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_port {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
|
||||||
|
my $qb = $rapidcity->SUPER::fw_port() || {};
|
||||||
|
my $spbm = $rapidcity->rc_spbm_fw_port() || {};
|
||||||
|
my $fw_port = { %$qb, %$spbm };
|
||||||
|
|
||||||
|
return $fw_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_status {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
|
||||||
|
my $qb = $rapidcity->SUPER::fw_status() || {};
|
||||||
|
my $spbm = $rapidcity->rc_spbm_fw_status() || {};
|
||||||
|
my $fw_status = { %$qb, %$spbm };
|
||||||
|
|
||||||
|
return $fw_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub qb_fw_vlan {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
|
||||||
|
my $qb = $rapidcity->SUPER::qb_fw_vlan() || {};
|
||||||
|
my $spbm = $rapidcity->rc_spbm_fw_vlan() || {};
|
||||||
|
my $qb_fw_vlan = { %$qb, %$spbm };
|
||||||
|
|
||||||
|
return $qb_fw_vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Baystack uses S5-AGENT-MIB (loaded in NortelStack) versus RAPID-CITY
|
||||||
|
sub stp_ver {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
|
||||||
|
return $rapidcity->s5AgSysSpanningTreeOperMode()
|
||||||
|
|| $rapidcity->SUPER::stp_ver();
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -444,6 +498,14 @@ Returns 'baystack' or 'boss' depending on software version.
|
|||||||
|
|
||||||
Returns the firmware version extracted from C<sysDescr>.
|
Returns the firmware version extracted from C<sysDescr>.
|
||||||
|
|
||||||
|
=item $baystack->stp_ver()
|
||||||
|
|
||||||
|
Returns the particular STP version running on this device.
|
||||||
|
|
||||||
|
Values: C<nortelStpg>, C<pvst>, C<rstp>, C<mstp>, C<ieee8021d>
|
||||||
|
|
||||||
|
(C<s5AgSysSpanningTreeOperMode>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
@@ -600,6 +662,32 @@ ns_e_vendor().
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Layer 2 Forwarding Database
|
||||||
|
|
||||||
|
These methods try to obtain the layer 2 forwarding database entries via the
|
||||||
|
normal bridge methods as well as SPBM entries via rapid city methods.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $baystack->fw_mac()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table MAC Addresses
|
||||||
|
|
||||||
|
=item $baystack->fw_port()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries port interface
|
||||||
|
identifier (iid)
|
||||||
|
|
||||||
|
=item $baystack->qb_fw_vlan()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries VLAN ID
|
||||||
|
|
||||||
|
=item $baystack->fw_status()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries status
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::SONMP
|
=head2 Table Methods imported from SNMP::Info::SONMP
|
||||||
|
|
||||||
See L<SNMP::Info::SONMP/"TABLE METHODS"> for details.
|
See L<SNMP::Info::SONMP/"TABLE METHODS"> for details.
|
||||||
@@ -37,19 +37,23 @@ use Exporter;
|
|||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
use SNMP::Info::CiscoConfig;
|
use SNMP::Info::CiscoConfig;
|
||||||
|
use SNMP::Info::CiscoStpExtensions;
|
||||||
|
use SNMP::Info::CiscoAgg;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::C1900::ISA = qw/SNMP::Info::CDP SNMP::Info::CiscoStats
|
@SNMP::Info::Layer2::C1900::ISA = qw/SNMP::Info::CDP SNMP::Info::CiscoStats
|
||||||
SNMP::Info::CiscoConfig SNMP::Info::Layer2
|
SNMP::Info::CiscoConfig SNMP::Info::CiscoStpExtensions SNMP::Info::CiscoAgg 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/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoAgg::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
%SNMP::Info::CiscoStats::GLOBALS,
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
@@ -58,6 +62,8 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::CiscoAgg::FUNCS,
|
||||||
|
%SNMP::Info::CiscoStpExtensions::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::CiscoConfig::FUNCS,
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
%SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CDP::FUNCS,
|
||||||
@@ -75,6 +81,8 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
%SNMP::Info::CiscoAgg::MIBS,
|
||||||
|
%SNMP::Info::CiscoStpExtensions::MIBS,
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::CiscoConfig::MIBS,
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
%SNMP::Info::CiscoStats::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
@@ -84,8 +92,9 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoAgg::MUNGE,
|
||||||
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
|
%SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
|
||||||
|
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub bulkwalk_no { return 1; }
|
sub bulkwalk_no { return 1; }
|
||||||
@@ -191,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};
|
||||||
@@ -203,16 +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 = $c1900->bridgeGroupAllowMembershipOverlap()
|
my $overlap
|
||||||
|
= $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 ) {
|
||||||
@@ -234,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 ) {
|
||||||
@@ -251,6 +263,8 @@ sub i_vlan_membership {
|
|||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership_untagged { return {}; }
|
||||||
|
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
my $c1900 = shift;
|
my $c1900 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -258,7 +272,7 @@ sub bp_index {
|
|||||||
my $if_index = $c1900->i_index($partial);
|
my $if_index = $c1900->i_index($partial);
|
||||||
my $index = $c1900->orig_bp_index($partial) || {};
|
my $index = $c1900->orig_bp_index($partial) || {};
|
||||||
foreach my $iid ( keys %$if_index ) {
|
foreach my $iid ( keys %$if_index ) {
|
||||||
$index->{$iid} = $iid if(!defined $index->{$iid});
|
$index->{$iid} = $iid if ( !defined $index->{$iid} );
|
||||||
}
|
}
|
||||||
return $index;
|
return $index;
|
||||||
}
|
}
|
||||||
@@ -312,6 +326,10 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
=item SNMP::Info::CiscoConfig
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -336,6 +354,10 @@ See L<SNMP::Info::CiscoStats/"Required MIBs"> for its MIB requirements.
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -394,6 +416,14 @@ See L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
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.
|
||||||
@@ -444,6 +474,9 @@ bridge group IDs.
|
|||||||
print "Port: $port VLAN: $vlan\n";
|
print "Port: $port VLAN: $vlan\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $c1900->i_vlan_membership_untagged()
|
||||||
|
|
||||||
|
Unsupported, returns nothing.
|
||||||
|
|
||||||
=item $c1900->bp_index()
|
=item $c1900->bp_index()
|
||||||
|
|
||||||
@@ -513,6 +546,14 @@ See L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
See L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoAgg/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
@@ -34,33 +34,21 @@ package SNMP::Info::Layer2::C2900;
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::Layer2::Cisco;
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoStats;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
|
||||||
use SNMP::Info::Layer2;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
|
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2::Cisco Exporter/;
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig
|
|
||||||
SNMP::Info::Layer2 Exporter/;
|
|
||||||
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,
|
%SNMP::Info::Layer2::Cisco::GLOBALS,
|
||||||
%SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::Cisco::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
|
||||||
%SNMP::Info::CDP::FUNCS,
|
|
||||||
%SNMP::Info::CiscoVTP::FUNCS,
|
|
||||||
'i_name' => 'ifAlias',
|
'i_name' => 'ifAlias',
|
||||||
|
|
||||||
# C2900PortEntry
|
# C2900PortEntry
|
||||||
@@ -71,15 +59,12 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::Layer2::Cisco::MIBS,
|
||||||
%SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
|
'CISCO-C2900-MIB' => 'ciscoC2900MIB',
|
||||||
%SNMP::Info::CiscoVTP::MIBS, 'CISCO-C2900-MIB' => 'ciscoC2900MIB',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::Layer2::Cisco::MUNGE,
|
||||||
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
|
|
||||||
%SNMP::Info::CiscoVTP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
@@ -143,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,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;
|
||||||
@@ -269,15 +253,7 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
=item SNMP::Info::Layer2::Cisco
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
=item SNMP::Info::Layer2
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -293,15 +269,7 @@ Part of the v2 MIBs from Cisco.
|
|||||||
|
|
||||||
=head2 Inherited MIBs
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::Layer2::Cisco/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
@@ -321,25 +289,9 @@ Returns 1. Use vlan indexing.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoVTP
|
=head2 Globals imported from SNMP::Info::Layer2::Cisco
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
See L<SNMP::Info::Layer2::Cisco/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer2
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
@@ -411,25 +363,9 @@ Gives Admin speed of port
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
=head2 Table Methods imported from SNMP::Info::Layer2::Cisco
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
See L<SNMP::Info::Layer2::Cisco/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head1 SET METHODS
|
=head1 SET METHODS
|
||||||
|
|
||||||
@@ -34,48 +34,34 @@ package SNMP::Info::Layer2::Catalyst;
|
|||||||
use strict;
|
use strict;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoStack;
|
use SNMP::Info::CiscoStack;
|
||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::Layer2::Cisco;
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoStats;
|
|
||||||
use SNMP::Info::CiscoPortSecurity;
|
|
||||||
use SNMP::Info::Layer2;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Catalyst::ISA
|
@SNMP::Info::Layer2::Catalyst::ISA
|
||||||
= qw/SNMP::Info::CiscoStack SNMP::Info::CiscoVTP
|
= qw/SNMP::Info::CiscoStack SNMP::Info::Layer2::Cisco Exporter/;
|
||||||
SNMP::Info::CDP SNMP::Info::CiscoStats
|
|
||||||
SNMP::Info::CiscoPortSecurity
|
|
||||||
SNMP::Info::Layer2 Exporter/;
|
|
||||||
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
|
%SNMP::Info::Layer2::Cisco::MIBS,
|
||||||
%SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CiscoStack::MIBS,
|
||||||
%SNMP::Info::CiscoVTP::MIBS, %SNMP::Info::CiscoStack::MIBS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::Cisco::GLOBALS,
|
||||||
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStack::GLOBALS,
|
%SNMP::Info::CiscoStack::GLOBALS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
|
%SNMP::Info::Layer2::Cisco::FUNCS,
|
||||||
%SNMP::Info::CiscoStats::FUNCS, %SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CiscoStack::FUNCS,
|
||||||
%SNMP::Info::CiscoVTP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
|
%SNMP::Info::Layer2::Cisco::MUNGE,
|
||||||
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
%SNMP::Info::CiscoVTP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
# Overidden Methods
|
# Overidden Methods
|
||||||
@@ -84,7 +70,7 @@ $VERSION = '3.08';
|
|||||||
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 ) {
|
||||||
@@ -118,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 ) {
|
||||||
@@ -228,18 +214,10 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2::Cisco
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStack
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
=item SNMP::Info::Layer2
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -248,19 +226,10 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2::Cisco/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
These MIBs are found in the standard v2 MIBs from Cisco.
|
These MIBs are found in the standard v2 MIBs from Cisco.
|
||||||
@@ -290,30 +259,14 @@ Returns 1. Use vlan indexing.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer2::Cisco
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2::Cisco/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer2
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"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
|
||||||
@@ -348,29 +301,12 @@ have problems with F<BRIDGE-MIB>
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2::Cisco
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2::Cisco/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
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::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
|
|
||||||
details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -246,6 +246,20 @@ sub slot_offset {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $centillion = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $centillion->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_port {
|
||||||
|
my $centillion = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $centillion->SUPER::fw_port($partial);
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -371,11 +385,6 @@ Returns 'Centillion'
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $centillion->layers()
|
|
||||||
|
|
||||||
Returns 00000011. Class emulates Layer 2 functionality through proprietary
|
|
||||||
MIBs.
|
|
||||||
|
|
||||||
=item $centillion->index_factor()
|
=item $centillion->index_factor()
|
||||||
|
|
||||||
Required by SNMP::Info::SONMP. Number representing the number of ports
|
Required by SNMP::Info::SONMP. Number representing the number of ports
|
||||||
@@ -35,49 +35,71 @@ use Exporter;
|
|||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::CiscoVTP;
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoRTT;
|
use SNMP::Info::CiscoRTT;
|
||||||
use SNMP::Info::CiscoQOS;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
use SNMP::Info::CiscoConfig;
|
||||||
|
use SNMP::Info::CiscoPortSecurity;
|
||||||
|
use SNMP::Info::CiscoStpExtensions;
|
||||||
|
use SNMP::Info::CiscoAgg;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
|
@SNMP::Info::Layer2::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
|
SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
|
||||||
SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
|
SNMP::Info::CiscoConfig SNMP::Info::CiscoPortSecurity
|
||||||
SNMP::Info::CiscoConfig SNMP::Info::Layer2
|
SNMP::Info::CiscoStpExtensions SNMP::Info::CiscoAgg
|
||||||
|
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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
%SNMP::Info::CiscoQOS::MIBS, %SNMP::Info::CiscoRTT::MIBS,
|
%SNMP::Info::CiscoAgg::MIBS,
|
||||||
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
|
%SNMP::Info::CiscoStpExtensions::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoVTP::MIBS,
|
%SNMP::Info::CiscoPortSecurity::MIBS,
|
||||||
|
%SNMP::Info::CiscoConfig::MIBS,
|
||||||
|
%SNMP::Info::CiscoRTT::MIBS,
|
||||||
|
%SNMP::Info::CiscoStats::MIBS,
|
||||||
|
%SNMP::Info::CDP::MIBS,
|
||||||
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
%SNMP::Info::CiscoQOS::GLOBALS, %SNMP::Info::CiscoRTT::GLOBALS,
|
%SNMP::Info::CiscoAgg::GLOBALS,
|
||||||
%SNMP::Info::CiscoImage::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS,
|
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
||||||
%SNMP::Info::CDP::GLOBALS, %SNMP::Info::CiscoVTP::GLOBALS,
|
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoRTT::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoStats::GLOBALS,
|
||||||
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS, %SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
%SNMP::Info::CiscoQOS::FUNCS, %SNMP::Info::CiscoRTT::FUNCS,
|
%SNMP::Info::CiscoAgg::FUNCS,
|
||||||
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
|
%SNMP::Info::CiscoStpExtensions::FUNCS,
|
||||||
%SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
|
%SNMP::Info::CiscoPortSecurity::FUNCS,
|
||||||
|
%SNMP::Info::CiscoConfig::FUNCS,
|
||||||
|
%SNMP::Info::CiscoRTT::FUNCS,
|
||||||
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
|
%SNMP::Info::CDP::FUNCS,
|
||||||
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
%SNMP::Info::CiscoQOS::MUNGE, %SNMP::Info::CiscoRTT::MUNGE,
|
%SNMP::Info::CiscoAgg::MUNGE,
|
||||||
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
|
%SNMP::Info::CiscoStpExtensions::MUNGE,
|
||||||
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
|
%SNMP::Info::CiscoPortSecurity::MUNGE,
|
||||||
|
%SNMP::Info::CiscoConfig::MUNGE,
|
||||||
|
%SNMP::Info::CiscoRTT::MUNGE,
|
||||||
|
%SNMP::Info::CiscoStats::MUNGE,
|
||||||
|
%SNMP::Info::CDP::MUNGE,
|
||||||
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -85,8 +107,9 @@ __END__
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::Layer2::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
|
SNMP::Info::Layer2::Cisco - SNMP Interface to L2 Cisco devices that are
|
||||||
that are not covered in other classes.
|
not covered in other classes and the base L2 Cisco class for other device
|
||||||
|
specific L2 Cisco classes.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -110,7 +133,8 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Subclass for Generic Cisco Routers running IOS
|
Subclass for Generic Layer 2 Cisco devices and the base L2 Cisco class for
|
||||||
|
other device specific L2 Cisco classes.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -122,14 +146,16 @@ Subclass for Generic Cisco Routers running IOS
|
|||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
=item SNMP::Info::CiscoStats
|
||||||
|
|
||||||
=item SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoRTT
|
=item SNMP::Info::CiscoRTT
|
||||||
|
|
||||||
=item SNMP::Info::CiscoQOS
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
=item SNMP::Info::CiscoConfig
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoPortSecurity
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -142,18 +168,20 @@ Subclass for Generic Cisco Routers running IOS
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoQOS/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -182,22 +210,26 @@ See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoRTT
|
=head2 Globals imported from SNMP::Info::CiscoRTT
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoQOS
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoQOS/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
|
=head2 Globals imported from SNMP::Info::CiscoConfig
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::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.
|
||||||
@@ -219,22 +251,26 @@ See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoRTT
|
=head2 Table Methods imported from SNMP::Info::CiscoRTT
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoQOS
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoQOS/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
|
=head2 Table Methods imported from SNMP::Info::CiscoConfig
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoAgg/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=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.
|
||||||
@@ -50,11 +50,7 @@ use SNMP::Info::CDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
|
||||||
# table by the serial() function.
|
|
||||||
our $index = undef;
|
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
@@ -98,39 +94,46 @@ sub vendor {
|
|||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
|
|
||||||
# Walk the entPhysicalSerialNum table and return both the first serial
|
sub os {
|
||||||
# number found as well as the index of that entry.
|
return 'ros';
|
||||||
|
}
|
||||||
|
|
||||||
|
# Walk the entPhysicalSerialNum table and return the first serial found
|
||||||
sub serial {
|
sub serial {
|
||||||
my $ciscosb = shift;
|
my $ciscosb = shift;
|
||||||
my $serial = undef;
|
|
||||||
my $e_serial = $ciscosb->e_serial();
|
my $e_serial = $ciscosb->e_serial();
|
||||||
|
|
||||||
# Find entity table entry for this unit
|
# Find entity table entry for this unit
|
||||||
foreach my $e ( keys %$e_serial ) {
|
foreach my $e ( sort keys %$e_serial ) {
|
||||||
if (defined ($e_serial->{$e}) and $e_serial->{$e} !~ /^\s*$/) {
|
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
|
||||||
$index = $e;
|
return $e_serial->{$e};
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $e_serial->{$index} if defined $index;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $ciscosb = shift;
|
my $ciscosb = shift;
|
||||||
my $os_ver = $ciscosb->e_swver();
|
my $e_swver = $ciscosb->e_swver();
|
||||||
|
|
||||||
return $os_ver->{$index} if defined $index;
|
foreach my $e ( sort keys %$e_swver ) {
|
||||||
|
if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
|
||||||
|
return $e_swver->{$e};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Grab e_model from Entity and tag on e_hwver
|
# Grab e_model from Entity and tag on e_hwver
|
||||||
sub model {
|
sub model {
|
||||||
my $ciscosb = shift;
|
my $ciscosb = shift;
|
||||||
my $e_model = $ciscosb->e_model();
|
my $e_model = $ciscosb->e_model();
|
||||||
my $e_hwver = $ciscosb->e_hwver();
|
my $e_hwver = $ciscosb->e_hwver();
|
||||||
|
|
||||||
if (defined ($index)) {
|
foreach my $e ( sort keys %$e_model ) {
|
||||||
my $model = "$e_model->{$index} $e_hwver->{$index}";
|
if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) {
|
||||||
return $model;
|
return $e_model->{$e};
|
||||||
|
#my $model = "$e_model->{$e} $e_hwver->{$e}";
|
||||||
|
#return $model;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $ciscosb->description();
|
return $ciscosb->description();
|
||||||
}
|
}
|
||||||
@@ -160,14 +163,14 @@ Nic Bernstein (shamelessly stolen from Max Baker's Aironet code)
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $ciscosb = new SNMP::Info(
|
my $ciscosb = 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 = $ciscosb->class();
|
my $class = $ciscosb->class();
|
||||||
@@ -214,6 +217,10 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
|
|
||||||
|
=item $ciscosb->os()
|
||||||
|
|
||||||
|
Returns 'ros'
|
||||||
|
|
||||||
=item $ciscosb->os_ver()
|
=item $ciscosb->os_ver()
|
||||||
|
|
||||||
Returns software version (C<entPhysicalSoftwareRev>)
|
Returns software version (C<entPhysicalSoftwareRev>)
|
||||||
@@ -36,39 +36,45 @@ use strict;
|
|||||||
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::CDP;
|
use SNMP::Info::CDP;
|
||||||
|
use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||||
|
|
||||||
@SNMP::Info::Layer2::HP::ISA
|
@SNMP::Info::Layer2::HP::ISA = qw/
|
||||||
= qw/SNMP::Info::Layer3 SNMP::Info::MAU SNMP::Info::LLDP
|
SNMP::Info::Aggregate
|
||||||
SNMP::Info::CDP Exporter/;
|
SNMP::Info::Layer3
|
||||||
|
SNMP::Info::MAU
|
||||||
|
SNMP::Info::CDP
|
||||||
|
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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%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',
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
'HP-ICF-OID' => 'hpSwitch4000',
|
'RFC1271-MIB' => 'logDescription',
|
||||||
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
'HP-ICF-OID' => 'hpSwitch4000',
|
||||||
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
||||||
'CONFIG-MIB' => 'hpSwitchConfig',
|
'NETSWITCH-MIB' => 'hpMsgBufFree',
|
||||||
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
|
'CONFIG-MIB' => 'hpSwitchConfig',
|
||||||
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
|
'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
|
||||||
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
|
'HP-ICF-BRIDGE' => 'hpicfBridgeRstpForceVersion',
|
||||||
'SEMI-MIB' => 'hpHttpMgSerialNumber',
|
'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
|
||||||
|
'SEMI-MIB' => 'hpHttpMgSerialNumber',
|
||||||
|
'HP-SWITCH-PL-MIB' => 'hpSwitchProliant',
|
||||||
|
'BLADETYPE4-NETWORK-MIB' => 'hpProLiant-GbE2c-InterconnectSwitch',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::MAU::GLOBALS,
|
%SNMP::Info::MAU::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
|
%SNMP::Info::Aggregate::GLOBALS,
|
||||||
'serial1' => 'entPhysicalSerialNum.1',
|
'serial1' => 'entPhysicalSerialNum.1',
|
||||||
'serial2' => 'hpHttpMgSerialNumber.0',
|
'serial2' => 'hpHttpMgSerialNumber.0',
|
||||||
'hp_cpu' => 'hpSwitchCpuStat.0',
|
'hp_cpu' => 'hpSwitchCpuStat.0',
|
||||||
@@ -85,8 +91,8 @@ $VERSION = '3.08';
|
|||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
%SNMP::Info::MAU::FUNCS,
|
%SNMP::Info::MAU::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
|
||||||
%SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CDP::FUNCS,
|
||||||
|
%SNMP::Info::Aggregate::FUNCS,
|
||||||
'i_type2' => 'ifType',
|
'i_type2' => 'ifType',
|
||||||
|
|
||||||
# RFC1271
|
# RFC1271
|
||||||
@@ -110,8 +116,8 @@ $VERSION = '3.08';
|
|||||||
# Inherit all the built in munging
|
# Inherit all the built in munging
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::MAU::MUNGE,
|
%SNMP::Info::MAU::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
|
||||||
%SNMP::Info::CDP::MUNGE,
|
%SNMP::Info::CDP::MUNGE,
|
||||||
|
%SNMP::Info::Aggregate::MUNGE,
|
||||||
'c_id' => \&munge_hp_c_id,
|
'c_id' => \&munge_hp_c_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -121,6 +127,8 @@ $VERSION = '3.08';
|
|||||||
%MODEL_MAP = (
|
%MODEL_MAP = (
|
||||||
'J8131A' => 'WAP-420-WW',
|
'J8131A' => 'WAP-420-WW',
|
||||||
'J8130A' => 'WAP-420-NA',
|
'J8130A' => 'WAP-420-NA',
|
||||||
|
'J9833A' => 'PS1810-8G',
|
||||||
|
'J9834A' => 'PS1810-24G',
|
||||||
'J8133A' => 'AP520WL',
|
'J8133A' => 'AP520WL',
|
||||||
'J8680A' => '9408sl',
|
'J8680A' => '9408sl',
|
||||||
'J9091A' => '8212zl',
|
'J9091A' => '8212zl',
|
||||||
@@ -135,8 +143,10 @@ $VERSION = '3.08';
|
|||||||
'J8992A' => '6200yl-24G',
|
'J8992A' => '6200yl-24G',
|
||||||
'J4902A' => '6108',
|
'J4902A' => '6108',
|
||||||
'J8698A' => '5412zl',
|
'J8698A' => '5412zl',
|
||||||
|
'J9851A' => '5412R-zl2',
|
||||||
'J8719A' => '5408yl',
|
'J8719A' => '5408yl',
|
||||||
'J8697A' => '5406zl',
|
'J8697A' => '5406zl',
|
||||||
|
'J9850A' => '5406R-zl2',
|
||||||
'J8718A' => '5404yl',
|
'J8718A' => '5404yl',
|
||||||
'J4819A' => '5308XL',
|
'J4819A' => '5308XL',
|
||||||
'J4850A' => '5304XL',
|
'J4850A' => '5304XL',
|
||||||
@@ -168,8 +178,12 @@ $VERSION = '3.08';
|
|||||||
'J4815A' => '3324XL',
|
'J4815A' => '3324XL',
|
||||||
'J4851A' => '3124',
|
'J4851A' => '3124',
|
||||||
'J9729A' => '2920-48G-PoE+',
|
'J9729A' => '2920-48G-PoE+',
|
||||||
|
'J9729A' => '2920-48G-PoE+',
|
||||||
|
'J9728A' => '2920-48G',
|
||||||
'J9728A' => '2920-48G',
|
'J9728A' => '2920-48G',
|
||||||
'J9727A' => '2920-24G-PoE+',
|
'J9727A' => '2920-24G-PoE+',
|
||||||
|
'J9727A' => '2920-24G-PoE+',
|
||||||
|
'J9726A' => '2920-24G',
|
||||||
'J9726A' => '2920-24G',
|
'J9726A' => '2920-24G',
|
||||||
'J9562A' => '2915-8G-PoE',
|
'J9562A' => '2915-8G-PoE',
|
||||||
'J9148A' => '2910al-48G-PoE+',
|
'J9148A' => '2910al-48G-PoE+',
|
||||||
@@ -182,30 +196,42 @@ $VERSION = '3.08';
|
|||||||
'J4903A' => '2824',
|
'J4903A' => '2824',
|
||||||
'J9022A' => '2810-48G',
|
'J9022A' => '2810-48G',
|
||||||
'J9021A' => '2810-24G',
|
'J9021A' => '2810-24G',
|
||||||
'J4899C' => '2650C',
|
|
||||||
'J8165A' => '2650-PWR',
|
'J8165A' => '2650-PWR',
|
||||||
'J4899B' => '2650-CR',
|
'J4899B' => '2650-CR',
|
||||||
|
'J4899C' => '2650C',
|
||||||
'J4899A' => '2650',
|
'J4899A' => '2650',
|
||||||
'J4900C' => '2626C',
|
|
||||||
'J8164A' => '2626-PWR',
|
'J8164A' => '2626-PWR',
|
||||||
'J4900B' => '2626-CR',
|
'J4900B' => '2626-CR',
|
||||||
|
'J4900C' => '2626C',
|
||||||
'J4900A' => '2626',
|
'J4900A' => '2626',
|
||||||
'J9627A' => '2620-48-PoE+',
|
'J9627A' => '2620-48-PoE+',
|
||||||
'J9626A' => '2620-48',
|
'J9626A' => '2620-48',
|
||||||
'J9625A' => '2620-24-PoE+',
|
|
||||||
'J9624A' => '2620-24-PPoE+',
|
'J9624A' => '2620-24-PPoE+',
|
||||||
|
'J9625A' => '2620-24-PoE+',
|
||||||
'J9623A' => '2620-24',
|
'J9623A' => '2620-24',
|
||||||
'J9565A' => '2615-8-PoE',
|
'J9565A' => '2615-8-PoE',
|
||||||
'J9089A' => '2610-48-PWR',
|
'J9089A' => '2610-48-PWR',
|
||||||
'J9088A' => '2610-48',
|
'J9088A' => '2610-48',
|
||||||
'J9086A' => '2610-24/12PWR',
|
|
||||||
'J9087A' => '2610-24-PWR',
|
'J9087A' => '2610-24-PWR',
|
||||||
|
'J9086A' => '2610-24/12PWR',
|
||||||
'J9085A' => '2610-24',
|
'J9085A' => '2610-24',
|
||||||
'J8762A' => '2600-8-PWR',
|
'J8762A' => '2600-8-PWR',
|
||||||
|
'J9780A' => '2530-8-PoE+',
|
||||||
|
'J9774A' => '2530-8G-PoEP',
|
||||||
|
'J9777A' => '2530-8G',
|
||||||
|
'J9783A' => '2530-8',
|
||||||
|
'J9778A' => '2530-48-PoE+',
|
||||||
|
'J9853A' => '2530-48G-PoE+-2SFP+',
|
||||||
'J9772A' => '2530-48G-PoE+',
|
'J9772A' => '2530-48G-PoE+',
|
||||||
|
'J9855A' => '2530-48G-2SFP+',
|
||||||
'J9775A' => '2530-48G',
|
'J9775A' => '2530-48G',
|
||||||
|
'J9781A' => '2530-48',
|
||||||
|
'J9779A' => '2530-24-PoE+',
|
||||||
|
'J9854A' => '2530-24G-PoE+-2SFP+',
|
||||||
'J9773A' => '2530-24G-PoE+',
|
'J9773A' => '2530-24G-PoE+',
|
||||||
|
'J9856A' => '2530-24G-2SFP+',
|
||||||
'J9776A' => '2530-24G',
|
'J9776A' => '2530-24G',
|
||||||
|
'J9782A' => '2530-24',
|
||||||
'J4813A' => '2524',
|
'J4813A' => '2524',
|
||||||
'J9298A' => '2520G-8-PoE',
|
'J9298A' => '2520G-8-PoE',
|
||||||
'J9299A' => '2520G-24-PoE',
|
'J9299A' => '2520G-24-PoE',
|
||||||
@@ -221,6 +247,8 @@ $VERSION = '3.08';
|
|||||||
'J4817A' => '2312',
|
'J4817A' => '2312',
|
||||||
'J9449A' => '1810G-8',
|
'J9449A' => '1810G-8',
|
||||||
'J9450A' => '1810G-24',
|
'J9450A' => '1810G-24',
|
||||||
|
'J9802A' => '1810-8G',
|
||||||
|
'J9803A' => '1810-24G',
|
||||||
'J9029A' => '1800-8G',
|
'J9029A' => '1800-8G',
|
||||||
'J9028A' => '1800-24G',
|
'J9028A' => '1800-24G',
|
||||||
);
|
);
|
||||||
@@ -524,6 +552,8 @@ sub set_i_vlan_tagged {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub agg_ports { return agg_ports_ifstack(@_) }
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -570,8 +600,6 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::Layer2
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
|
||||||
|
|
||||||
=item SNMP::Info::MAU
|
=item SNMP::Info::MAU
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -598,6 +626,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
|
||||||
@@ -797,10 +833,6 @@ Returns what version of STP the device is running.
|
|||||||
|
|
||||||
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::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::MAU
|
=head2 Globals imported from SNMP::Info::MAU
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
||||||
@@ -812,7 +844,7 @@ to a hash.
|
|||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
|
|
||||||
=over
|
=over 4
|
||||||
|
|
||||||
=item $hp->interfaces()
|
=item $hp->interfaces()
|
||||||
|
|
||||||
@@ -840,16 +872,18 @@ Crosses i_name() with $hp->e_name() using $hp->e_port() and i_alias()
|
|||||||
Returns reference to hash of power Ethernet port table entries map back to
|
Returns reference to hash of power Ethernet port table entries map back to
|
||||||
interface index (c<ifIndex>)
|
interface index (c<ifIndex>)
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
=back
|
=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.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::MAU
|
=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.
|
||||||
@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -376,6 +376,20 @@ sub i_vlan_membership {
|
|||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership_untagged {
|
||||||
|
my $hp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $vlans = $hp->i_vlan($partial);
|
||||||
|
my $i_vlan_membership = {};
|
||||||
|
foreach my $port (keys %$vlans) {
|
||||||
|
my $vlan = $vlans->{$port};
|
||||||
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_vlan_membership;
|
||||||
|
}
|
||||||
|
|
||||||
sub set_i_vlan {
|
sub set_i_vlan {
|
||||||
my $hp = shift;
|
my $hp = shift;
|
||||||
my $rv;
|
my $rv;
|
||||||
@@ -680,6 +694,12 @@ It is the union of tagged, untagged, and auto ports.
|
|||||||
print "Port: $port VLAN: $vlan\n";
|
print "Port: $port VLAN: $vlan\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $hp->i_vlan_membership_untagged()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
|
IDs. These are the VLANs which are members of the untagged egress list for
|
||||||
|
the port.
|
||||||
|
|
||||||
=item $hp->v_index()
|
=item $hp->v_index()
|
||||||
|
|
||||||
Returns VLAN IDs
|
Returns VLAN IDs
|
||||||
@@ -33,17 +33,19 @@ package SNMP::Info::Layer2::HPVC;
|
|||||||
use strict;
|
use strict;
|
||||||
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 Exporter/;
|
= qw/SNMP::Info::Layer2 SNMP::Info::LLDP Exporter/;
|
||||||
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%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',
|
||||||
@@ -51,6 +53,7 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%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',
|
||||||
@@ -59,12 +62,14 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%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,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -66,6 +66,7 @@ sub os_ver {
|
|||||||
if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
|
if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub serial {
|
sub serial {
|
||||||
@@ -75,7 +76,7 @@ sub serial {
|
|||||||
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';
|
||||||
@@ -87,6 +88,7 @@ sub model {
|
|||||||
if ( $descr =~ /^(\S+\s\S+)/){
|
if ( $descr =~ /^(\S+\s\S+)/){
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Bridge;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -49,6 +49,7 @@ $VERSION = '3.08';
|
|||||||
'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 = (
|
||||||
@@ -33,32 +33,31 @@ package SNMP::Info::Layer2::Netgear;
|
|||||||
use strict;
|
use strict;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
use SNMP::Info::Entity;
|
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::LLDP SNMP::Info::Entity SNMP::Info::Layer2 Exporter/;
|
@SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::LLDP 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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# 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::Entity::MIBS, %SNMP::Info::LLDP::MIBS, );
|
%MIBS = ( %SNMP::Info::Layer2::MIBS, %SNMP::Info::LLDP::MIBS, );
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::Entity::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::LLDP::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::Entity::FUNCS, %SNMP::Info::LLDP::FUNCS, );
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::LLDP::FUNCS, );
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Entity::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'netgear';
|
return 'netgear';
|
||||||
@@ -90,7 +89,7 @@ sub serial {
|
|||||||
|
|
||||||
# Without Enitity-MIB, we've got to work our way through a bunch of
|
# Without Enitity-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';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,26 +139,7 @@ sub interfaces {
|
|||||||
return $interfaces;
|
return $interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# these seem to work for GSM/FSM models but not GS
|
||||||
# This is model-dependent. Some netgear brand devices don't implement
|
|
||||||
# the bridge MIB forwarding table, so we use the Q-BRIDGE-MIB forwarding
|
|
||||||
# table. Fall back to the orig functions if the qb versions don't
|
|
||||||
# return anything.
|
|
||||||
sub fw_mac {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $ret = $netgear->qb_fw_mac();
|
|
||||||
$ret = $netgear->orig_fw_mac() if ( !defined($ret) );
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $ret = $netgear->qb_fw_port();
|
|
||||||
$ret = $netgear->orig_fw_port() if ( !defined($ret) );
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
# these seem to work for GSM 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;
|
||||||
@@ -168,138 +148,10 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use LLDP
|
|
||||||
|
|
||||||
sub hasCDP {
|
|
||||||
my $netgear = shift;
|
|
||||||
return $netgear->hasLLDP() || $netgear->SUPER::hasCDP();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub c_ip {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $cdp = $netgear->SUPER::c_ip($partial) || {};
|
|
||||||
my $lldp = $netgear->lldp_ip($partial) || {};
|
|
||||||
|
|
||||||
my %c_ip;
|
|
||||||
foreach my $iid ( keys %$cdp ) {
|
|
||||||
my $ip = $cdp->{$iid};
|
|
||||||
next unless defined $ip;
|
|
||||||
|
|
||||||
$c_ip{$iid} = $ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $iid ( keys %$lldp ) {
|
|
||||||
my $ip = $lldp->{$iid};
|
|
||||||
next unless defined $ip;
|
|
||||||
|
|
||||||
$c_ip{$iid} = $ip;
|
|
||||||
}
|
|
||||||
return \%c_ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub c_if {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $lldp = $netgear->lldp_if($partial) || {};
|
|
||||||
my $cdp = $netgear->SUPER::c_if($partial) || {};
|
|
||||||
|
|
||||||
my %c_if;
|
|
||||||
foreach my $iid ( keys %$cdp ) {
|
|
||||||
my $if = $cdp->{$iid};
|
|
||||||
next unless defined $if;
|
|
||||||
|
|
||||||
$c_if{$iid} = $if;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $iid ( keys %$lldp ) {
|
|
||||||
my $if = $lldp->{$iid};
|
|
||||||
next unless defined $if;
|
|
||||||
|
|
||||||
$c_if{$iid} = $if;
|
|
||||||
}
|
|
||||||
return \%c_if;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub c_port {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $lldp = $netgear->lldp_port($partial) || {};
|
|
||||||
my $cdp = $netgear->SUPER::c_port($partial) || {};
|
|
||||||
|
|
||||||
my %c_port;
|
|
||||||
foreach my $iid ( keys %$cdp ) {
|
|
||||||
my $port = $cdp->{$iid};
|
|
||||||
next unless defined $port;
|
|
||||||
|
|
||||||
$c_port{$iid} = $port;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $iid ( keys %$lldp ) {
|
|
||||||
my $port = $lldp->{$iid};
|
|
||||||
next unless defined $port;
|
|
||||||
|
|
||||||
$c_port{$iid} = $port;
|
|
||||||
}
|
|
||||||
return \%c_port;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub c_id {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $lldp = $netgear->lldp_id($partial) || {};
|
|
||||||
my $cdp = $netgear->SUPER::c_id($partial) || {};
|
|
||||||
|
|
||||||
my %c_id;
|
|
||||||
foreach my $iid ( keys %$cdp ) {
|
|
||||||
my $id = $cdp->{$iid};
|
|
||||||
next unless defined $id;
|
|
||||||
|
|
||||||
$c_id{$iid} = $id;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $iid ( keys %$lldp ) {
|
|
||||||
my $id = $lldp->{$iid};
|
|
||||||
next unless defined $id;
|
|
||||||
|
|
||||||
$c_id{$iid} = $id;
|
|
||||||
}
|
|
||||||
return \%c_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub c_platform {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $lldp = $netgear->lldp_rem_sysdesc($partial) || {};
|
|
||||||
my $cdp = $netgear->SUPER::c_platform($partial) || {};
|
|
||||||
|
|
||||||
my %c_platform;
|
|
||||||
foreach my $iid ( keys %$cdp ) {
|
|
||||||
my $platform = $cdp->{$iid};
|
|
||||||
next unless defined $platform;
|
|
||||||
|
|
||||||
$c_platform{$iid} = $platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $iid ( keys %$lldp ) {
|
|
||||||
my $platform = $lldp->{$iid};
|
|
||||||
next unless defined $platform;
|
|
||||||
|
|
||||||
$c_platform{$iid} = $platform;
|
|
||||||
}
|
|
||||||
return \%c_platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -413,72 +265,12 @@ a reference to a hash.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $netgear->fw_mac()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table MAC Addresses.
|
|
||||||
|
|
||||||
Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
|
|
||||||
the C<Q-BRIDGE-MIB> forwarding table. Fall back to the C<BRIDGE-MIB> if
|
|
||||||
C<Q-BRIDGE-MIB> doesn't return anything.
|
|
||||||
|
|
||||||
=item $netgear->fw_port()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table entries port interface
|
|
||||||
identifier (iid)
|
|
||||||
|
|
||||||
Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
|
|
||||||
the C<Q-BRIDGE-MIB> forwarding table. Fall back to the C<BRIDGE-MIB> if
|
|
||||||
C<Q-BRIDGE-MIB> doesn't return anything.
|
|
||||||
|
|
||||||
=item $netgear->interfaces()
|
=item $netgear->interfaces()
|
||||||
|
|
||||||
Uses the i_name() field.
|
Uses the i_name() field.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Topology information
|
|
||||||
|
|
||||||
Based upon the software version devices may support Link Layer Discovery
|
|
||||||
Protocol (LLDP).
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $netgear->hasCDP()
|
|
||||||
|
|
||||||
Returns true if the device is running LLDP.
|
|
||||||
|
|
||||||
=item $netgear->c_if()
|
|
||||||
|
|
||||||
Returns reference to hash. Key: iid Value: local device port (interfaces)
|
|
||||||
|
|
||||||
=item $netgear->c_ip()
|
|
||||||
|
|
||||||
Returns reference to hash. Key: iid Value: remote IPv4 address
|
|
||||||
|
|
||||||
If multiple entries exist with the same local port, c_if(), with the same IPv4
|
|
||||||
address, c_ip(), it may be a duplicate entry.
|
|
||||||
|
|
||||||
If multiple entries exist with the same local port, c_if(), with different
|
|
||||||
IPv4 addresses, c_ip(), there is either a non-LLDP device in between two or
|
|
||||||
more devices or multiple devices which are not directly connected.
|
|
||||||
|
|
||||||
Use the data from the Layer2 Topology Table below to dig deeper.
|
|
||||||
|
|
||||||
=item $netgear->c_port()
|
|
||||||
|
|
||||||
Returns reference to hash. Key: iid Value: remote port (interfaces)
|
|
||||||
|
|
||||||
=item $netgear->c_id()
|
|
||||||
|
|
||||||
Returns reference to hash. Key: iid Value: string value used to identify the
|
|
||||||
chassis component associated with the remote system.
|
|
||||||
|
|
||||||
=item $netgear->c_platform()
|
|
||||||
|
|
||||||
Returns reference to hash. Key: iid Value: Remote Device Type
|
|
||||||
|
|
||||||
=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.
|
||||||
253
lib/SNMP/Info/Layer2/Nexans.pm
Normal file
253
lib/SNMP/Info/Layer2/Nexans.pm
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
# SNMP::Info::Layer2::Nexans
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Christoph Neuhaus
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Nexans;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Nexans::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Nexans::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
'NEXANS-MIB' => 'nexansANS',
|
||||||
|
'NEXANS-BM-MIB' => 'infoDescr',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'mac' => 'adminAgentPhysAddress.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
'i_duplex' => 'portLinkState', #NEXANS-BM-MIB
|
||||||
|
'i_duplex_admin' => 'portSpeedDuplexSetup', #NEXANS-BM-MIB
|
||||||
|
'nexans_i_name' => 'ifAlias',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
|
'i_duplex' => \&munge_i_duplex,
|
||||||
|
'i_duplex_admin' => \&munge_i_duplex_admin,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub munge_i_duplex {
|
||||||
|
my $duplex = shift;
|
||||||
|
return unless defined $duplex;
|
||||||
|
$duplex = 'half' if $duplex =~/Hdx/;
|
||||||
|
$duplex = 'full' if $duplex =~/Fdx/;
|
||||||
|
return $duplex;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub munge_i_duplex_admin {
|
||||||
|
my $duplex_admin = shift;
|
||||||
|
return unless defined $duplex_admin;
|
||||||
|
$duplex_admin = 'full' if $duplex_admin =~/Fdx/;
|
||||||
|
$duplex_admin = 'half' if $duplex_admin =~/Hdx/;
|
||||||
|
$duplex_admin = 'auto' if $duplex_admin =~/autoneg/;
|
||||||
|
return $duplex_admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'nexans';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $nexans = shift;
|
||||||
|
my $id = $nexans->id() || '';
|
||||||
|
my $model = &SNMP::translateObj($id);
|
||||||
|
return $id unless defined $model;
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'nexanos';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $nexans = shift;
|
||||||
|
my $ver = $nexans->infoMgmtFirmwareVersion() || '';
|
||||||
|
return $ver;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $nexans = shift;
|
||||||
|
return $nexans->infoSeriesNo();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_name {
|
||||||
|
my $nexans = shift;
|
||||||
|
my $return = $nexans->nexans_i_name();
|
||||||
|
# replace i_name where possible
|
||||||
|
foreach my $iid ( keys %$return ) {
|
||||||
|
next unless $return->{$iid} eq "";
|
||||||
|
$return->{$iid} = $iid;
|
||||||
|
}
|
||||||
|
return \%$return;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Nexans - SNMP Interface to Nexans network devices.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Christoph Neuhaus
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
|
||||||
|
my $nexans = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $nexans->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Abstraction subclass for Nexans network devices.
|
||||||
|
|
||||||
|
tested devices:
|
||||||
|
|
||||||
|
fiberSwitch100BmPlus version 3.61
|
||||||
|
gigaSwitch641DeskSfpTp version 3.68, 4.14W
|
||||||
|
gigaSwitchV3d2SfpSfp version 3.68, 4.02, 4.02B, 4.10C, 4,14W
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
|
my $nexans = new SNMP::Info::Layer2::Nexans(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<NEXANS>
|
||||||
|
|
||||||
|
=item F<NEXANS-BM>
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $nexans->vendor()
|
||||||
|
|
||||||
|
Returns 'nexans'
|
||||||
|
|
||||||
|
=item $nexans->model()
|
||||||
|
|
||||||
|
Returns the chassis model.
|
||||||
|
|
||||||
|
=item $nexans->os()
|
||||||
|
|
||||||
|
Returns 'nexanos'
|
||||||
|
|
||||||
|
=item $nexans->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $nexans->serial()
|
||||||
|
|
||||||
|
Returns the chassis serial number.
|
||||||
|
|
||||||
|
(C<infoSeriesNo>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $nexans->i_name()
|
||||||
|
|
||||||
|
Returns reference to map of IIDs to human-set port name.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head1 Data Munging Callback Subroutines
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item munge_i_duplex()
|
||||||
|
|
||||||
|
Converts duplex returned by C<portLinkState> to either 'full' or 'half'.
|
||||||
|
|
||||||
|
=item munge_i_duplex_admin()
|
||||||
|
|
||||||
|
Converts duplex returned by C<portSpeedDuplexSetup> to either 'full', 'half',
|
||||||
|
or 'auto'.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -41,13 +41,11 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%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.08';
|
|||||||
%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__
|
||||||
|
|
||||||
182
lib/SNMP/Info/Layer2/Sixnet.pm
Normal file
182
lib/SNMP/Info/Layer2/Sixnet.pm
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
# SNMP::Info::Layer2::Sixnet
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Eric Miller
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Sixnet;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Sixnet::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Sixnet::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'os_ver' => 'firmwareRevision',
|
||||||
|
's_model' => 'sxid',
|
||||||
|
'ps1_status' => 'p1status',
|
||||||
|
'ps2_status' => 'p2status',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (%SNMP::Info::Layer2::FUNCS,);
|
||||||
|
|
||||||
|
%MUNGE = (%SNMP::Info::Layer2::MUNGE,);
|
||||||
|
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'sixnet';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'sixnet';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $sixnet = shift;
|
||||||
|
|
||||||
|
my $s_model = $sixnet->s_model();
|
||||||
|
return $s_model if defined $s_model;
|
||||||
|
|
||||||
|
my $id = $sixnet->id();
|
||||||
|
return unless defined $id;
|
||||||
|
|
||||||
|
my $model = SNMP::translateObj($id);
|
||||||
|
return $model ? $model : $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Sixnet - SNMP Interface to Sixnet industrial switches
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Eric Miller
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
my $sixnet = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $sixnet->class();
|
||||||
|
print " Using device sub class : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Sixnet is a subclass of SNMP::Info that provides an
|
||||||
|
interface to Sixnet industrial switches.
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
|
my $sixnet = new SNMP::Info::Layer2::Sixnet(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<SIXNET-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $sixnet->vendor()
|
||||||
|
|
||||||
|
Returns 'sixnet'
|
||||||
|
|
||||||
|
=item $sixnet->os()
|
||||||
|
|
||||||
|
Returns 'sixnet'
|
||||||
|
|
||||||
|
=item $sixnet->os_ver()
|
||||||
|
|
||||||
|
Returns the software version returned by C<firmwareRevision>
|
||||||
|
|
||||||
|
=item $sixnet->model()
|
||||||
|
|
||||||
|
Returns model type. Returns C<sxid> if it exists, otherwise cross references
|
||||||
|
$sixnet->id() with the F<SIXNET-MIB>.
|
||||||
|
|
||||||
|
=item $sixnet->ps1_status()
|
||||||
|
|
||||||
|
(C<p1status>)
|
||||||
|
|
||||||
|
=item $sixnet->ps2_status()
|
||||||
|
|
||||||
|
(C<p2status>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -51,6 +51,7 @@ $VERSION = '3.08';
|
|||||||
'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 = (
|
||||||
377
lib/SNMP/Info/Layer2/Ubiquiti.pm
Normal file
377
lib/SNMP/Info/Layer2/Ubiquiti.pm
Normal file
@@ -0,0 +1,377 @@
|
|||||||
|
# SNMP::Info::Layer2::Ubiquiti
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Ubiquiti;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::IEEE802dot11;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::Layer3; # only used in sub mac()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Ubiquiti::ISA
|
||||||
|
= qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Ubiquiti::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
%SNMP::Info::IEEE802dot11::MIBS,
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS
|
||||||
|
= ( %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::IEEE802dot11::GLOBALS, );
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::IEEE802dot11::FUNCS,
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
my $ubnt = shift;
|
||||||
|
|
||||||
|
my $names = $ubnt->dot11_prod_name();
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$names ) {
|
||||||
|
my $prod = $names->{$iid};
|
||||||
|
next unless defined $prod;
|
||||||
|
# Product names that match AirOS products
|
||||||
|
if((lc $prod) =~ /station/ or (lc $prod) =~ /beam/ or (lc $prod) =~ /grid/){
|
||||||
|
return 'AirOS';
|
||||||
|
# Product names that match UAP
|
||||||
|
}elsif((lc $prod) =~ /uap/){
|
||||||
|
return 'UniFi';
|
||||||
|
}else{
|
||||||
|
# Continue below to find OS name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
## EdgeMAX OS (EdgeSwitch and EdgeRouter) name is first field split by space
|
||||||
|
my $ver = $ubnt->description() || '';
|
||||||
|
|
||||||
|
my @myver = split(/ /, $ver);
|
||||||
|
|
||||||
|
return $myver[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $dot11 = shift;
|
||||||
|
|
||||||
|
my $versions = $dot11->dot11_prod_ver();
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$versions ) {
|
||||||
|
my $ver = $versions->{$iid};
|
||||||
|
next unless defined $ver;
|
||||||
|
return $ver;
|
||||||
|
## Not sure what this function does, it seems to be extraneous being in the same code block after a return statement?
|
||||||
|
if ( $ver =~ /([\d\.]+)/ ) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my $ver = $dot11->description() || '';
|
||||||
|
if($ver =~ /^edgeswitch/){
|
||||||
|
## EdgeSwitch OS version is second field split by comma
|
||||||
|
my @myver = split(/, /, $ver);
|
||||||
|
|
||||||
|
return $myver[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
## EdgeRouter OS version is second field split by space
|
||||||
|
my @myver = split(/ /, $ver);
|
||||||
|
|
||||||
|
return $myver[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'Ubiquiti Networks, Inc.';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $ubnt = shift;
|
||||||
|
|
||||||
|
my $names = $ubnt->dot11_prod_name();
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$names ) {
|
||||||
|
my $prod = $names->{$iid};
|
||||||
|
next unless defined $prod;
|
||||||
|
return $prod;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $desc = $ubnt->description() || '';
|
||||||
|
|
||||||
|
## Pull Model from beginning of description, separated by comma (EdgeSwitch)
|
||||||
|
if((lc $desc) =~ /^edgeswitch/){
|
||||||
|
my @mydesc = split(/, /, $desc);
|
||||||
|
return $mydesc[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!((lc $desc) =~ /edgeos/)){
|
||||||
|
# Not sure what type of device this is to get Model
|
||||||
|
# Wireless devices report dot11_prod_name
|
||||||
|
# EdgeSwitch includes mode directly and edgeos logic is in else statement
|
||||||
|
return ;
|
||||||
|
}else{
|
||||||
|
## do some logic to determine ER model based on tech specs from ubnt:
|
||||||
|
## https://help.ubnt.com/hc/en-us/articles/219652227--EdgeRouter-Which-EdgeRouter-Should-I-Use-#tech%20specs
|
||||||
|
## Would be nice if UBNT simply adds the model string to their SNMP daemon directly
|
||||||
|
my $ethCount = 0;
|
||||||
|
my $switchCount = 0;
|
||||||
|
#my $sfpCount = 0;
|
||||||
|
#my $poeCount = 0;
|
||||||
|
my $memTotalReal = $ubnt->memTotalReal;
|
||||||
|
my $cpuLoad = $ubnt->hrProcessorLoad;
|
||||||
|
my $cpuCount = 0;
|
||||||
|
## My perl is lacking. Not sure if there's a more efficient way to find the cpu count
|
||||||
|
foreach my $iid ( keys %$cpuLoad ) {
|
||||||
|
$cpuCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $ifDescs = $ubnt->ifDescr;
|
||||||
|
foreach my $iid ( keys %$ifDescs ) {
|
||||||
|
my $ifDesc = $ifDescs->{$iid};
|
||||||
|
next unless defined $ifDesc;
|
||||||
|
|
||||||
|
if((lc $ifDesc) =~ /^eth\d+$/){ # exclude vlan interfaces. Ex: eth1.5
|
||||||
|
$ethCount++;
|
||||||
|
}elsif((lc $ifDesc) =~ /^switch/){
|
||||||
|
$switchCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
## If people have other models to further fine-tune this logic that would be great.
|
||||||
|
if($ethCount eq 9){
|
||||||
|
## Should be ER Infinity
|
||||||
|
return "EdgeRouter Infinity"
|
||||||
|
}if($ethCount eq 8){
|
||||||
|
## Could be ER-8 Pro, ER-8, or EP-R8
|
||||||
|
return "EdgeRouter 8-Port"
|
||||||
|
}elsif($ethCount eq 5 and $cpuCount eq 4){
|
||||||
|
## Could be ER-X or ER-X-SFP
|
||||||
|
return "EdgeRouter X 5-Port"
|
||||||
|
}elsif($ethCount eq 5){
|
||||||
|
return "EdgeRouter PoE 5-Port"
|
||||||
|
}elsif($ethCount eq 3 and $cpuCount eq 2){
|
||||||
|
return "EdgeRouter LITE 3-Port"
|
||||||
|
}else{
|
||||||
|
## failback string
|
||||||
|
return "EdgeRouter eth-$ethCount switch-$switchCount mem-$memTotalReal cpuNum-$cpuCount";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
## simply take the MAC and clean it up
|
||||||
|
sub serial {
|
||||||
|
my $ubnt = shift;
|
||||||
|
|
||||||
|
my $serial = $ubnt->mac();
|
||||||
|
if($serial){
|
||||||
|
$serial =~ s/://g;
|
||||||
|
return uc $serial;
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
## UBNT doesn't put the primary-mac interface at index 1
|
||||||
|
sub mac {
|
||||||
|
my $ubnt = shift;
|
||||||
|
my $ifDescs = $ubnt->ifDescr;
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$ifDescs ) {
|
||||||
|
my $ifDesc = $ifDescs->{$iid};
|
||||||
|
next unless defined $ifDesc;
|
||||||
|
## CPU Interface will have the primary MAC for EdgeSwitch
|
||||||
|
## eth0 will have primary MAC for linux-based UBNT devices
|
||||||
|
if($ifDesc =~ /CPU/ or $ifDesc eq 'eth0'){
|
||||||
|
my $mac = $ubnt->ifPhysAddress->{$iid};
|
||||||
|
|
||||||
|
# syntax stolen from sub munge_mac in SNMP::Info
|
||||||
|
$mac = lc join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) );
|
||||||
|
return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]$/i;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# MAC malformed or missing
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub interfaces {
|
||||||
|
my $netgear = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $interfaces = $netgear->i_index($partial) || {};
|
||||||
|
my $i_descr = $netgear->i_description($partial) || {};
|
||||||
|
my $return = {};
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$i_descr ) {
|
||||||
|
# Slot: 0 Port: 4 Gigabit - Level
|
||||||
|
if ($i_descr->{$iid} =~ m/([0-9]+)[^0-9]+([0-9]+)/) {
|
||||||
|
$return->{$iid} = $1 .'/'. $2;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
# Link Aggregate 4
|
||||||
|
if ($i_descr->{$iid} =~ m/Link Aggregate (\d+)/) {
|
||||||
|
$return->{$iid} = '3/'. $1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
$return->{$iid} = $i_descr->{$iid};
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_ignore {
|
||||||
|
my $l2 = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $interfaces = $l2->interfaces($partial) || {};
|
||||||
|
my $i_descr = $l2->i_description($partial) || {};
|
||||||
|
|
||||||
|
my %i_ignore;
|
||||||
|
foreach my $if ( keys %$interfaces ) {
|
||||||
|
|
||||||
|
# CPU Interface
|
||||||
|
if ( $i_descr->{$if} =~ /CPU Interface/i ) {
|
||||||
|
$i_ignore{$if}++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%i_ignore;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Max Kosmach
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $ubnt = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $ubnt->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Provides abstraction to the configuration information obtainable from
|
||||||
|
Ubiquiti Access Point through SNMP.
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
|
my $ubnt = new SNMP::Info::Layer2::Ubiquiti(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=item SNMP::Info::IEEE802dot11
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
=head2 Inherited MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::IEEE802dot11/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ubnt->vendor()
|
||||||
|
|
||||||
|
Returns 'Ubiquiti Networks, Inc.'
|
||||||
|
|
||||||
|
=item $ubnt->model()
|
||||||
|
|
||||||
|
Returns the model extracted from C<dot11manufacturerProductName>, with failback to some complex logic for EdgeMax devices
|
||||||
|
|
||||||
|
=item $ubnt->serial()
|
||||||
|
|
||||||
|
Serial Number.
|
||||||
|
|
||||||
|
=item $ubnt->mac()
|
||||||
|
|
||||||
|
Bridge MAC address.
|
||||||
|
|
||||||
|
=item $ubnt->os()
|
||||||
|
|
||||||
|
Returns 'Ubiquiti Networks, Inc.'
|
||||||
|
|
||||||
|
=item $ubnt->os_ver()
|
||||||
|
|
||||||
|
Returns the software version extracted from C<dot11manufacturerProductVersion>, with failback to description splitting for EdgeMax devices
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::IEEE802dot11
|
||||||
|
|
||||||
|
See L<SNMP::Info::IEEE802dot11/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ubiquiti->interfaces()
|
||||||
|
|
||||||
|
Uses the i_name() field.
|
||||||
|
|
||||||
|
=item $ubiquiti->i_ignore()
|
||||||
|
|
||||||
|
Ignores interfaces with "CPU Interface" in them.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::IEEE802dot11
|
||||||
|
|
||||||
|
See L<SNMP::Info::IEEE802dot11/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -39,14 +39,14 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# 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.08';
|
|||||||
|
|
||||||
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
|
||||||
@@ -102,7 +102,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}$/ );
|
||||||
@@ -41,17 +41,19 @@ use SNMP::Info::Entity;
|
|||||||
use SNMP::Info::PowerEthernet;
|
use SNMP::Info::PowerEthernet;
|
||||||
use SNMP::Info::IPv6;
|
use SNMP::Info::IPv6;
|
||||||
use SNMP::Info::AdslLine;
|
use SNMP::Info::AdslLine;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
@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 Exporter/;
|
SNMP::Info Exporter/;
|
||||||
@SNMP::Info::Layer3::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -61,6 +63,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Entity::MIBS,
|
%SNMP::Info::Entity::MIBS,
|
||||||
%SNMP::Info::PowerEthernet::MIBS,
|
%SNMP::Info::PowerEthernet::MIBS,
|
||||||
%SNMP::Info::IPv6::MIBS,
|
%SNMP::Info::IPv6::MIBS,
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
'IP-MIB' => 'ipNetToMediaIfIndex',
|
'IP-MIB' => 'ipNetToMediaIfIndex',
|
||||||
'OSPF-MIB' => 'ospfRouterId',
|
'OSPF-MIB' => 'ospfRouterId',
|
||||||
'BGP4-MIB' => 'bgpIdentifier',
|
'BGP4-MIB' => 'bgpIdentifier',
|
||||||
@@ -76,6 +79,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Entity::GLOBALS,
|
%SNMP::Info::Entity::GLOBALS,
|
||||||
%SNMP::Info::PowerEthernet::GLOBALS,
|
%SNMP::Info::PowerEthernet::GLOBALS,
|
||||||
%SNMP::Info::IPv6::GLOBALS,
|
%SNMP::Info::IPv6::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
'mac' => 'ifPhysAddress.1',
|
'mac' => 'ifPhysAddress.1',
|
||||||
'serial1' =>
|
'serial1' =>
|
||||||
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
|
||||||
@@ -92,6 +96,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Entity::FUNCS,
|
%SNMP::Info::Entity::FUNCS,
|
||||||
%SNMP::Info::PowerEthernet::FUNCS,
|
%SNMP::Info::PowerEthernet::FUNCS,
|
||||||
%SNMP::Info::IPv6::FUNCS,
|
%SNMP::Info::IPv6::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
|
||||||
# Obsolete Address Translation Table (ARP Cache)
|
# Obsolete Address Translation Table (ARP Cache)
|
||||||
'old_at_index' => 'atIfIndex',
|
'old_at_index' => 'atIfIndex',
|
||||||
@@ -150,6 +155,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::Entity::MUNGE,
|
%SNMP::Info::Entity::MUNGE,
|
||||||
%SNMP::Info::PowerEthernet::MUNGE,
|
%SNMP::Info::PowerEthernet::MUNGE,
|
||||||
%SNMP::Info::IPv6::MUNGE,
|
%SNMP::Info::IPv6::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
'old_at_paddr' => \&SNMP::Info::munge_mac,
|
'old_at_paddr' => \&SNMP::Info::munge_mac,
|
||||||
'at_paddr' => \&SNMP::Info::munge_mac,
|
'at_paddr' => \&SNMP::Info::munge_mac,
|
||||||
'n2p_paddr' => \&SNMP::Info::munge_mac,
|
'n2p_paddr' => \&SNMP::Info::munge_mac,
|
||||||
@@ -185,44 +191,21 @@ sub root_ip {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_ignore {
|
|
||||||
my $l3 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
my $interfaces = $l3->interfaces($partial) || {};
|
|
||||||
|
|
||||||
my %i_ignore;
|
|
||||||
foreach my $if ( keys %$interfaces ) {
|
|
||||||
|
|
||||||
# lo -> cisco aironet 350 loopback
|
|
||||||
if ( $interfaces->{$if} =~ /(tunnel|loopback|\blo\b|null)/i ) {
|
|
||||||
$i_ignore{$if}++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return \%i_ignore;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub serial {
|
sub serial {
|
||||||
my $l3 = shift;
|
my $l3 = shift;
|
||||||
|
|
||||||
my $serial1 = $l3->serial1();
|
my $entity_serial = $l3->entity_derived_serial();
|
||||||
my $e_descr = $l3->e_descr() || {};
|
if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
|
||||||
my $e_serial = $l3->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 = $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
|
||||||
@@ -422,6 +405,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item SNMP::Info::IPv6
|
=item SNMP::Info::IPv6
|
||||||
|
|
||||||
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -450,6 +435,8 @@ See L<SNMP::Info::PowerEthernet/"Required MIBs"> for its MIB requirements.
|
|||||||
|
|
||||||
See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
|
See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP/"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
|
||||||
@@ -492,8 +479,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()
|
||||||
|
|
||||||
@@ -523,6 +509,18 @@ See L<SNMP::Info::EtherLike/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::Entity/"GLOBALS"> for details.
|
See L<SNMP::Info::Entity/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info:PowerEthernet
|
||||||
|
|
||||||
|
See L<SNMP::Info::PowerEthernet/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::IPv6
|
||||||
|
|
||||||
|
See L<SNMP::Info::IPv6/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=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
|
||||||
@@ -539,12 +537,6 @@ 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_ignore()
|
|
||||||
|
|
||||||
Returns reference to hash. Creates a key for each IID that should be ignored.
|
|
||||||
|
|
||||||
Currently looks for tunnel,loopback,lo,null from $l3->interfaces()
|
|
||||||
|
|
||||||
=item $l3->i_name()
|
=item $l3->i_name()
|
||||||
|
|
||||||
Returns reference to hash of iid to human set name.
|
Returns reference to hash of iid to human set name.
|
||||||
@@ -798,4 +790,8 @@ See L<SNMP::Info::PowerEthernet/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
|
See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -69,8 +69,8 @@ $VERSION = '3.08';
|
|||||||
'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',
|
||||||
@@ -364,13 +364,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()
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -198,21 +198,6 @@ sub interfaces {
|
|||||||
return $alu->orig_i_name($partial);
|
return $alu->orig_i_name($partial);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
|
||||||
sub fw_mac {
|
|
||||||
my $alu = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $alu->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $alu = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $alu->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
|
# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
my $alu = shift;
|
my $alu = shift;
|
||||||
@@ -445,14 +430,6 @@ to a hash.
|
|||||||
Returns interface name from C<ifName>, since the default return value
|
Returns interface name from C<ifName>, since the default return value
|
||||||
of C<ifDescr> includes the OS version.
|
of C<ifDescr> includes the OS version.
|
||||||
|
|
||||||
=item $alu->fw_mac()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $alu->fw_port()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $alu->bp_index()
|
=item $alu->bp_index()
|
||||||
|
|
||||||
Work around various bugs in the F<BRIDGE-MIB> and
|
Work around various bugs in the F<BRIDGE-MIB> and
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -385,6 +385,20 @@ sub i_vlan_membership {
|
|||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership_untagged {
|
||||||
|
my $alteon = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $vlans = $alteon->i_vlan($partial);
|
||||||
|
my $i_vlan_membership = {};
|
||||||
|
foreach my $port (keys %$vlans) {
|
||||||
|
my $vlan = $vlans->{$port};
|
||||||
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_vlan_membership;
|
||||||
|
}
|
||||||
|
|
||||||
# Bridge MIB does not map Bridge Port to ifIndex correctly on some code
|
# Bridge MIB does not map Bridge Port to ifIndex correctly on some code
|
||||||
# versions
|
# versions
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
@@ -574,6 +588,12 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
|||||||
print "Port: $port VLAN: $vlan\n";
|
print "Port: $port VLAN: $vlan\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $alteon->i_vlan_membership_untagged()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
|
IDs. These are the VLANs which are members of the untagged egress list for
|
||||||
|
the port.
|
||||||
|
|
||||||
=item $alteon->v_index()
|
=item $alteon->v_index()
|
||||||
|
|
||||||
Returns VLAN IDs
|
Returns VLAN IDs
|
||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
|
|||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
||||||
$int_include_vpn $fake_idx $type_class/;
|
$int_include_vpn $fake_idx $type_class/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -36,20 +36,26 @@ 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::LLDP;
|
||||||
|
use SNMP::Info::Aggregate 'agg_ports_ifstack';
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Arista::ISA = qw/SNMP::Info::LLDP SNMP::Info::MAU
|
@SNMP::Info::Layer3::Arista::ISA = qw/
|
||||||
SNMP::Info::Layer3 Exporter/;
|
SNMP::Info::Aggregate
|
||||||
|
SNMP::Info::LLDP
|
||||||
|
SNMP::Info::MAU
|
||||||
|
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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
|
'ARISTA-PRODUCTS-MIB' => 'aristaDCS7124S',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
@@ -104,22 +110,6 @@ sub model {
|
|||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
|
||||||
|
|
||||||
sub fw_mac {
|
|
||||||
my $arista = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $arista->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $arista = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $arista->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
# The LLDP MIB leaves it up in the air what the index means.
|
# The LLDP MIB leaves it up in the air what the index means.
|
||||||
# On EOS, it's a dot1d port.
|
# On EOS, it's a dot1d port.
|
||||||
sub lldp_if {
|
sub lldp_if {
|
||||||
@@ -141,6 +131,8 @@ sub lldp_if {
|
|||||||
return $lldp_if;
|
return $lldp_if;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub agg_ports { return agg_ports_ifstack(@_) }
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -176,6 +168,8 @@ Subclass for Arista Networks EOS-based devices
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Aggregate
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=item SNMP::Info::MAU
|
=item SNMP::Info::MAU
|
||||||
@@ -194,6 +188,8 @@ Subclass for Arista Networks EOS-based devices
|
|||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
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.
|
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -245,14 +241,6 @@ to a hash.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $arista->fw_mac()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $arista->fw_port()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $arista->i_duplex_admin()
|
=item $arista->i_duplex_admin()
|
||||||
|
|
||||||
Returns info from F<MAU-MIB>
|
Returns info from F<MAU-MIB>
|
||||||
@@ -265,6 +253,12 @@ Returns info from F<MAU-MIB>
|
|||||||
|
|
||||||
Returns the mapping to the SNMP Interface Table.
|
Returns the mapping to the SNMP Interface Table.
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
@@ -40,13 +40,14 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::LLDP::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-SWITCH-MIB' => 'wlsxHostname',
|
'WLSX-SWITCH-MIB' => 'wlsxHostname',
|
||||||
'WLSX-SYSTEMEXT-MIB' => 'wlsxSysExtSwitchBaseMacaddress',
|
'WLSX-SYSTEMEXT-MIB' => 'wlsxSysExtSwitchBaseMacaddress',
|
||||||
'WLSX-USER-MIB' => 'nUserCurrentVlan',
|
'WLSX-USER-MIB' => 'nUserCurrentVlan',
|
||||||
@@ -58,9 +59,10 @@ $VERSION = '3.08';
|
|||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
'aruba_serial' => 'wlsxSwitchLicenseSerialNumber',
|
'aruba_serial_old' => 'wlsxSwitchLicenseSerialNumber',
|
||||||
'aruba_model' => 'wlsxModelName',
|
'aruba_serial_new' => 'wlsxSysExtLicenseSerialNumber',
|
||||||
'mac' => 'wlsxSysExtSwitchBaseMacaddress',
|
'aruba_model' => 'wlsxModelName',
|
||||||
|
'mac' => 'wlsxSysExtSwitchBaseMacaddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
@@ -80,7 +82,7 @@ $VERSION = '3.08';
|
|||||||
'aruba_if_vlan_member' => 'ifExtVlanMemberStatus',
|
'aruba_if_vlan_member' => 'ifExtVlanMemberStatus',
|
||||||
|
|
||||||
# WLSX-IFEXT-MIB::::wlsxIfExtVlanTable
|
# WLSX-IFEXT-MIB::::wlsxIfExtVlanTable
|
||||||
'v_name' => 'ifExtVlanName',
|
'aruba_v_name' => 'ifExtVlanName',
|
||||||
|
|
||||||
# Other cd11_ methods are indexed by staPhyAddress, we need to
|
# Other cd11_ methods are indexed by staPhyAddress, we need to
|
||||||
# strip staAccessPointBSSID from the aruba_cd11_ methods.
|
# strip staAccessPointBSSID from the aruba_cd11_ methods.
|
||||||
@@ -122,6 +124,8 @@ $VERSION = '3.08';
|
|||||||
'aruba_ap_model' => 'wlanAPModelName',
|
'aruba_ap_model' => 'wlanAPModelName',
|
||||||
'aruba_ap_name' => 'wlanAPName',
|
'aruba_ap_name' => 'wlanAPName',
|
||||||
'aruba_ap_ip' => 'wlanAPIpAddress',
|
'aruba_ap_ip' => 'wlanAPIpAddress',
|
||||||
|
'aruba_ap_hw_ver' => 'wlanAPHwVersion',
|
||||||
|
'aruba_ap_sw_ver' => 'wlanAPSwVersion',
|
||||||
|
|
||||||
# WLSX-WLAN-MIB::wlsxWlanESSIDVlanPoolTable
|
# WLSX-WLAN-MIB::wlsxWlanESSIDVlanPoolTable
|
||||||
'aruba_ssid_vlan' => 'wlanESSIDVlanPoolStatus',
|
'aruba_ssid_vlan' => 'wlanESSIDVlanPoolStatus',
|
||||||
@@ -198,7 +202,7 @@ sub model {
|
|||||||
sub serial {
|
sub serial {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
|
|
||||||
return $aruba->aruba_serial();
|
return $aruba->aruba_serial_old() || $aruba->aruba_serial_new();
|
||||||
}
|
}
|
||||||
|
|
||||||
# Thin APs do not support ifMIB requirement
|
# Thin APs do not support ifMIB requirement
|
||||||
@@ -454,85 +458,130 @@ sub i_duplex {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub v_index {
|
sub v_index {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $v_name = $aruba->v_name($partial);
|
return $aruba->SUPER::v_index($partial)
|
||||||
my %v_index;
|
if keys %{ $aruba->SUPER::v_index($partial) };
|
||||||
foreach my $idx ( keys %$v_name ) {
|
|
||||||
$v_index{$idx} = $idx;
|
my $v_name = $aruba->v_name($partial);
|
||||||
}
|
my %v_index;
|
||||||
return \%v_index;
|
foreach my $idx ( keys %$v_name ) {
|
||||||
|
$v_index{$idx} = $idx;
|
||||||
|
}
|
||||||
|
return \%v_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub v_name {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $aruba->SUPER::v_name() || $aruba->aruba_v_name();
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_vlan {
|
sub i_vlan {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $index = $aruba->aruba_if_idx();
|
return $aruba->SUPER::i_vlan($partial)
|
||||||
|
if keys %{ $aruba->SUPER::i_vlan($partial) };
|
||||||
|
|
||||||
if ($partial) {
|
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
|
||||||
my %r_index = reverse %$index;
|
my $index = $aruba->aruba_if_idx();
|
||||||
$partial = $r_index{$partial};
|
|
||||||
}
|
|
||||||
|
|
||||||
my $i_pvid = $aruba->aruba_if_pvid($partial) || {};
|
if ($partial) {
|
||||||
my %i_vlan;
|
my %r_index = reverse %$index;
|
||||||
|
$partial = $r_index{$partial};
|
||||||
|
}
|
||||||
|
|
||||||
foreach my $port ( keys %$i_pvid ) {
|
my $i_pvid = $aruba->aruba_if_pvid($partial) || {};
|
||||||
my $vlan = $i_pvid->{$port};
|
my %i_vlan;
|
||||||
my $ifindex = $index->{$port};
|
|
||||||
next unless defined $ifindex;
|
|
||||||
|
|
||||||
$i_vlan{$ifindex} = $vlan;
|
foreach my $port ( keys %$i_pvid ) {
|
||||||
}
|
my $vlan = $i_pvid->{$port};
|
||||||
|
my $ifindex = $index->{$port};
|
||||||
|
next unless defined $ifindex;
|
||||||
|
|
||||||
return \%i_vlan;
|
$i_vlan{$ifindex} = $vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
return \%i_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
my $essid_ssid = $aruba->aruba_ap_bssid_ssid();
|
return $aruba->SUPER::i_vlan_membership($partial)
|
||||||
my $ssid_vlans = $aruba->aruba_ssid_vlan();
|
if keys %{ $aruba->SUPER::i_vlan_membership($partial) };
|
||||||
my $if_vlans = $aruba->aruba_if_vlan_member();
|
|
||||||
|
|
||||||
my %vlan_essid;
|
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
|
||||||
|
my $essid_ssid = $aruba->aruba_ap_bssid_ssid();
|
||||||
|
my $ssid_vlans = $aruba->aruba_ssid_vlan();
|
||||||
|
my $if_vlans = $aruba->aruba_if_vlan_member();
|
||||||
|
|
||||||
# Create a hash of vlan and textual ssid
|
my %vlan_essid;
|
||||||
# Possible to have more than one vlan per ssid
|
|
||||||
foreach my $oid ( keys %$ssid_vlans ) {
|
|
||||||
my @parts = split( /\./, $oid );
|
|
||||||
my $ssidlen = shift(@parts);
|
|
||||||
my $ssid = pack( "C*", splice( @parts, 0, $ssidlen ) );
|
|
||||||
|
|
||||||
# Remove any control chars
|
# Create a hash of vlan and textual ssid
|
||||||
$ssid =~ s/[[:cntrl:]]//g;
|
# Possible to have more than one vlan per ssid
|
||||||
my $vlan = shift(@parts);
|
foreach my $oid ( keys %$ssid_vlans ) {
|
||||||
|
my @parts = split( /\./, $oid );
|
||||||
|
my $ssidlen = shift(@parts);
|
||||||
|
my $ssid = pack( "C*", splice( @parts, 0, $ssidlen ) );
|
||||||
|
|
||||||
$vlan_essid{$vlan} = $ssid;
|
# Remove any control chars
|
||||||
}
|
$ssid =~ s/[[:cntrl:]]//g;
|
||||||
|
my $vlan = shift(@parts);
|
||||||
|
|
||||||
my $i_vlan_membership = {};
|
$vlan_essid{$vlan} = $ssid;
|
||||||
|
|
||||||
# Handle physical ports first
|
|
||||||
foreach my $oid ( keys %$if_vlans ) {
|
|
||||||
my @parts = split( /\./, $oid );
|
|
||||||
my $vlan = shift(@parts);
|
|
||||||
my $ifindex = shift(@parts);
|
|
||||||
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $oid ( keys %$essid_ssid ) {
|
|
||||||
my $ssid = $essid_ssid->{$oid};
|
|
||||||
my @parts = split( /\./, $oid );
|
|
||||||
my $idx = join( ".", @parts[ 0 .. 6 ] );
|
|
||||||
|
|
||||||
my @vlans = grep { $vlan_essid{$_} eq $ssid } keys %vlan_essid;
|
|
||||||
foreach my $vlan (@vlans) {
|
|
||||||
push( @{ $i_vlan_membership->{$idx} }, $vlan );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $i_vlan_membership = {};
|
||||||
|
|
||||||
|
# Handle physical ports first
|
||||||
|
foreach my $oid ( keys %$if_vlans ) {
|
||||||
|
my @parts = split( /\./, $oid );
|
||||||
|
my $vlan = shift(@parts);
|
||||||
|
my $ifindex = shift(@parts);
|
||||||
|
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $oid ( keys %$essid_ssid ) {
|
||||||
|
my $ssid = $essid_ssid->{$oid};
|
||||||
|
my @parts = split( /\./, $oid );
|
||||||
|
my $idx = join( ".", @parts[ 0 .. 6 ] );
|
||||||
|
|
||||||
|
my @vlans = grep { $vlan_essid{$_} eq $ssid } keys %vlan_essid;
|
||||||
|
foreach my $vlan (@vlans) {
|
||||||
|
push( @{ $i_vlan_membership->{$idx} }, $vlan );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $i_vlan_membership;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_vlan_membership_untagged {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $aruba->SUPER::i_vlan_membership_untagged($partial)
|
||||||
|
if keys %{ $aruba->SUPER::i_vlan_membership_untagged($partial) };
|
||||||
|
|
||||||
|
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
|
||||||
|
# It is unclear if native VLAN is transmitted untagged
|
||||||
|
# This assumes Cisco-like behavior on trunks that native VLAN is
|
||||||
|
# transmitted untagged, if this needs to be changed we will need to
|
||||||
|
# consider ifExtMode rather than just using i_vlan
|
||||||
|
my $if_membership = $aruba->i_vlan_membership();
|
||||||
|
my $if_ = $aruba->i_vlan();
|
||||||
|
my $if_mode = $aruba->aruba_if_mode();
|
||||||
|
|
||||||
|
my $vlans = $aruba->i_vlan($partial);
|
||||||
|
my $i_vlan_membership = {};
|
||||||
|
foreach my $port (keys %$vlans) {
|
||||||
|
my $vlan = $vlans->{$port};
|
||||||
|
push( @{ $i_vlan_membership->{$port} }, $vlan );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,35 +674,49 @@ sub i_ssidmac {
|
|||||||
# Wired switches currently (AOS 7.2.0.0) do, but it seems only for
|
# Wired switches currently (AOS 7.2.0.0) do, but it seems only for
|
||||||
# dot1q ports or access ports that are 'untrusted' ?
|
# dot1q ports or access ports that are 'untrusted' ?
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_index = $aruba->orig_i_index($partial) || {};
|
my $i_index = $aruba->ifExtPortIfIndex($partial) || {};
|
||||||
my $essid_ssid = $aruba->aruba_ap_bssid_ssid($partial) || {};
|
my $essid_ssid = $aruba->aruba_ap_bssid_ssid($partial) || {};
|
||||||
|
|
||||||
# Collect standard bp_index first
|
# Collect standard bp_index first
|
||||||
my $wired_bp_index = $aruba->SUPER::bp_index($partial) || {};
|
my $wired_bp_index = $aruba->SUPER::bp_index($partial) || {};
|
||||||
my %bp_index = %$wired_bp_index;
|
my %bp_index;
|
||||||
|
my %offset;
|
||||||
|
|
||||||
foreach my $iid ( keys %$i_index ) {
|
foreach my $iid ( keys %$wired_bp_index ) {
|
||||||
my $index = $i_index->{$iid};
|
my $index = $wired_bp_index->{$iid};
|
||||||
next unless defined $index;
|
my $delta = $iid - $index;
|
||||||
|
|
||||||
# Only augment bp_index, don't overwrite any existing mappings
|
$offset{$delta}++;
|
||||||
next if exists $bp_index{$iid};
|
$bp_index{$iid} = $index;
|
||||||
|
}
|
||||||
|
|
||||||
$bp_index{$iid} = $index;
|
# If the offset between dot1dBasePortIfIndex and ifIndex is consistent
|
||||||
}
|
# add potentially missing mappings
|
||||||
|
if ( keys %offset == 1 ) {
|
||||||
|
foreach my $iid ( keys %$i_index ) {
|
||||||
|
my $index = $i_index->{$iid};
|
||||||
|
next unless defined $index;
|
||||||
|
|
||||||
# Get Attached APs as Interfaces
|
# Only augment bp_index, don't overwrite any existing mappings
|
||||||
foreach my $oid ( keys %$essid_ssid ) {
|
my $iid = (keys %offset)[0] + $index;
|
||||||
my @parts = split( /\./, $oid );
|
next if exists $bp_index{$iid};
|
||||||
my $iid = join( ".", splice( @parts, 0, 7 ) );
|
|
||||||
my $bssid = join( '.', @parts );
|
|
||||||
|
|
||||||
$bp_index{$bssid} = $iid;
|
$bp_index{$iid} = $index;
|
||||||
}
|
}
|
||||||
return \%bp_index;
|
}
|
||||||
|
|
||||||
|
# Get Attached APs as Interfaces
|
||||||
|
foreach my $oid ( keys %$essid_ssid ) {
|
||||||
|
my @parts = split( /\./, $oid );
|
||||||
|
my $iid = join( ".", splice( @parts, 0, 7 ) );
|
||||||
|
my $bssid = join( '.', @parts );
|
||||||
|
|
||||||
|
$bp_index{$bssid} = $iid;
|
||||||
|
}
|
||||||
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
@@ -962,8 +1025,9 @@ sub e_type {
|
|||||||
sub e_hwver {
|
sub e_hwver {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
|
|
||||||
my $ap_hw = $aruba->aruba_card_hw() || {};
|
my $ap_hw = $aruba->aruba_card_hw() || {};
|
||||||
my $ap_fpga = $aruba->aruba_card_fpga() || {};
|
my $ap_fpga = $aruba->aruba_card_fpga() || {};
|
||||||
|
my $ap_hw_ver = $aruba->aruba_ap_hw_ver() || {};
|
||||||
|
|
||||||
my %e_hwver;
|
my %e_hwver;
|
||||||
|
|
||||||
@@ -975,9 +1039,36 @@ sub e_hwver {
|
|||||||
|
|
||||||
$e_hwver{$iid} = "$hw $fpga";
|
$e_hwver{$iid} = "$hw $fpga";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# APs
|
||||||
|
foreach my $idx ( keys %$ap_hw_ver ) {
|
||||||
|
my $hw_ver = $ap_hw_ver->{$idx};
|
||||||
|
next unless defined $hw_ver;
|
||||||
|
|
||||||
|
$e_hwver{$idx} = "$hw_ver";
|
||||||
|
}
|
||||||
|
|
||||||
return \%e_hwver;
|
return \%e_hwver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub e_swver {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $ap_sw_ver = $aruba->aruba_ap_hw_ver() || {};
|
||||||
|
|
||||||
|
my %e_swver;
|
||||||
|
|
||||||
|
# APs
|
||||||
|
foreach my $idx ( keys %$ap_sw_ver ) {
|
||||||
|
my $sw_ver = $ap_sw_ver->{$idx};
|
||||||
|
next unless defined $sw_ver;
|
||||||
|
|
||||||
|
$e_swver{$idx} = "$sw_ver";
|
||||||
|
}
|
||||||
|
|
||||||
|
return \%e_swver;
|
||||||
|
}
|
||||||
|
|
||||||
sub e_vendor {
|
sub e_vendor {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
|
|
||||||
@@ -999,7 +1090,7 @@ sub e_serial {
|
|||||||
my %e_serial;
|
my %e_serial;
|
||||||
|
|
||||||
# Chassis
|
# Chassis
|
||||||
$e_serial{0} = $aruba->aruba_serial();
|
$e_serial{0} = $aruba->serial() || '';
|
||||||
|
|
||||||
# Cards
|
# Cards
|
||||||
foreach my $iid ( keys %$card_serial ) {
|
foreach my $iid ( keys %$card_serial ) {
|
||||||
@@ -1123,6 +1214,175 @@ sub munge_aruba_fqln {
|
|||||||
return $loc;
|
return $loc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The index of wlsxPsePortTable is wlsxPsePortIndex which equals
|
||||||
|
# ifIndex; however, to emulate POWER-ETHERNET-MIB we need a "module.port"
|
||||||
|
# index. If ifDescr has the format x/x/x use it to determine the module
|
||||||
|
# otherwise default to 1. Unfortunately, this means we can't map any
|
||||||
|
# wlsxPsePortTable leafs directly and partials will not be supported.
|
||||||
|
sub peth_port_ifindex {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $indexes = $aruba->wlsxPsePortAdminStatus();
|
||||||
|
my $descrs = $aruba->i_description();
|
||||||
|
|
||||||
|
my $peth_port_ifindex = {};
|
||||||
|
foreach my $i ( keys %$indexes ) {
|
||||||
|
my $descr = $descrs->{$i};
|
||||||
|
next unless $descr;
|
||||||
|
|
||||||
|
my $new_idx = "1.$i";
|
||||||
|
|
||||||
|
if ( $descr =~ /(\d+)\/\d+\/\d+/ ) {
|
||||||
|
$new_idx = "$1.$i";
|
||||||
|
}
|
||||||
|
$peth_port_ifindex->{$new_idx} = $i;
|
||||||
|
}
|
||||||
|
return $peth_port_ifindex;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_admin {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $admin_states = $aruba->wlsxPsePortAdminStatus() || {};
|
||||||
|
|
||||||
|
my $peth_port_admin = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $state = $admin_states->{$port};
|
||||||
|
|
||||||
|
if ( $state =~ /enable/ ) {
|
||||||
|
$peth_port_admin->{$i} = 'true';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$peth_port_admin->{$i} = 'false';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $peth_port_admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_neg_power {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $port_alloc = $aruba->wlsxPsePortPowerAllocated() || {};
|
||||||
|
|
||||||
|
my $peth_port_neg_power = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $power = $port_alloc->{$port};
|
||||||
|
next unless $power;
|
||||||
|
|
||||||
|
$peth_port_neg_power->{$i} = $power;
|
||||||
|
}
|
||||||
|
return $peth_port_neg_power;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_power {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $port_consumed = $aruba->wlsxPsePortPowerConsumed() || {};
|
||||||
|
|
||||||
|
my $peth_port_power = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $power = $port_consumed->{$port};
|
||||||
|
next unless $power;
|
||||||
|
|
||||||
|
$peth_port_power->{$i} = $power;
|
||||||
|
}
|
||||||
|
return $peth_port_power;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_class {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $port_class = $aruba->wlsxPsePortPdClass() || {};
|
||||||
|
|
||||||
|
my $peth_port_class = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $power = $port_class->{$port};
|
||||||
|
next unless $power;
|
||||||
|
|
||||||
|
$peth_port_class->{$i} = $power;
|
||||||
|
}
|
||||||
|
return $peth_port_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_status {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $admin_states = $aruba->wlsxPsePortState() || {};
|
||||||
|
|
||||||
|
my $peth_port_status = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $state = $admin_states->{$port};
|
||||||
|
|
||||||
|
if ( $state eq 'on' ) {
|
||||||
|
$peth_port_status->{$i} = 'deliveringPower';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$peth_port_status->{$i} = 'disabled';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $peth_port_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_power_status {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $watts = $aruba->wlsxPseSlotPowerAvailable($partial) || {};
|
||||||
|
|
||||||
|
my $offset = (exists $watts->{0}) ? 1 : 0;
|
||||||
|
|
||||||
|
my $peth_power_status = {};
|
||||||
|
foreach my $i ( keys %$watts ) {
|
||||||
|
$peth_power_status->{$i + $offset} = 'on';
|
||||||
|
}
|
||||||
|
return $peth_power_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_power_watts {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $watts_total = $aruba->wlsxPseSlotPowerAvailable($partial) || {};
|
||||||
|
|
||||||
|
my $offset = (exists $watts_total->{0}) ? 1 : 0;
|
||||||
|
|
||||||
|
my $peth_power_watts = {};
|
||||||
|
foreach my $i ( keys %$watts_total ) {
|
||||||
|
my $total = $watts_total->{$i};
|
||||||
|
next unless $total;
|
||||||
|
|
||||||
|
$peth_power_watts->{$i + $offset} = $total;
|
||||||
|
}
|
||||||
|
return $peth_power_watts;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_power_consumption {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $watts = $aruba->wlsxPseSlotPowerConsumption() || {};
|
||||||
|
|
||||||
|
my $offset = (exists $watts->{0}) ? 1 : 0;
|
||||||
|
|
||||||
|
my $peth_power_consumed = {};
|
||||||
|
foreach my $i ( keys %$watts ) {
|
||||||
|
my $total = $watts->{$i};
|
||||||
|
next unless $total;
|
||||||
|
|
||||||
|
$peth_power_consumed->{$i + $offset} = $total;
|
||||||
|
}
|
||||||
|
return $peth_power_consumed;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -1182,6 +1442,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item F<WLSX-IFEXT-MIB>
|
=item F<WLSX-IFEXT-MIB>
|
||||||
|
|
||||||
|
=item F<WLSX-POE-MIB>
|
||||||
|
|
||||||
=item F<WLSX-SWITCH-MIB>
|
=item F<WLSX-SWITCH-MIB>
|
||||||
|
|
||||||
=item F<WLSX-SYSTEMEXT-MIB>
|
=item F<WLSX-SYSTEMEXT-MIB>
|
||||||
@@ -1233,7 +1495,7 @@ Thin APs through proprietary MIBs.
|
|||||||
=item $aruba->serial()
|
=item $aruba->serial()
|
||||||
|
|
||||||
Returns the device serial number extracted
|
Returns the device serial number extracted
|
||||||
from C<wlsxSwitchLicenseSerialNumber>
|
from C<wlsxSwitchLicenseSerialNumber> or C<wlsxSysExtLicenseSerialNumber>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -1367,7 +1629,11 @@ only.
|
|||||||
|
|
||||||
=item $aruba->v_index()
|
=item $aruba->v_index()
|
||||||
|
|
||||||
Returns VLAN IDs
|
Returns VLAN IDs.
|
||||||
|
|
||||||
|
=item $aruba->v_name()
|
||||||
|
|
||||||
|
Human-entered name for vlans.
|
||||||
|
|
||||||
=item $aruba->i_vlan()
|
=item $aruba->i_vlan()
|
||||||
|
|
||||||
@@ -1378,6 +1644,12 @@ Returns reference to map of IIDs to VLAN ID of the interface.
|
|||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
IDs. These are the VLANs for which the port is a member.
|
IDs. These are the VLANs for which the port is a member.
|
||||||
|
|
||||||
|
=item $aruba->i_vlan_membership_untagged()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
|
IDs. These are the VLANs which are members of the untagged egress list for
|
||||||
|
the port.
|
||||||
|
|
||||||
=item $aruba->bp_index()
|
=item $aruba->bp_index()
|
||||||
|
|
||||||
Augments the bridge MIB by returning reference to a hash containing the
|
Augments the bridge MIB by returning reference to a hash containing the
|
||||||
@@ -1440,6 +1712,10 @@ Returns reference to hash. Key: IID, Value: Type of component.
|
|||||||
|
|
||||||
Returns reference to hash. Key: IID, Value: Hardware revision.
|
Returns reference to hash. Key: IID, Value: Hardware revision.
|
||||||
|
|
||||||
|
=item $aruba->e_swver()
|
||||||
|
|
||||||
|
Returns reference to hash. Key: IID, Value: Software revision.
|
||||||
|
|
||||||
=item $aruba->e_vendor()
|
=item $aruba->e_vendor()
|
||||||
|
|
||||||
Returns reference to hash. Key: IID, Value: aruba.
|
Returns reference to hash. Key: IID, Value: aruba.
|
||||||
@@ -1461,6 +1737,70 @@ entity which 'contains' this entity.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Power Over Ethernet Port Table
|
||||||
|
|
||||||
|
These methods emulate the F<POWER-ETHERNET-MIB> Power Source Entity (PSE)
|
||||||
|
Port Table C<pethPsePortTable> methods using the F<WLSX-POE-MIB> Power
|
||||||
|
over Ethernet Port Table C<wlsxPsePortTable>.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aruba->peth_port_ifindex()
|
||||||
|
|
||||||
|
Creates an index of module.port to align with the indexing of the
|
||||||
|
C<wlsxPsePortTable> with a value of C<ifIndex>. The module defaults 1
|
||||||
|
if otherwise unknown.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_admin()
|
||||||
|
|
||||||
|
Administrative status: is this port permitted to deliver power?
|
||||||
|
|
||||||
|
C<wlsxPsePortAdminStatus>
|
||||||
|
|
||||||
|
=item $aruba->peth_port_status()
|
||||||
|
|
||||||
|
Current status: is this port delivering power.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_class()
|
||||||
|
|
||||||
|
Device class: if status is delivering power, this represents the 802.3af
|
||||||
|
class of the device being powered.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_neg_power()
|
||||||
|
|
||||||
|
The power, in milliwatts, that has been committed to this port.
|
||||||
|
This value is derived from the 802.3af class of the device being
|
||||||
|
powered.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_power()
|
||||||
|
|
||||||
|
The power, in milliwatts, that the port is delivering.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Power Over Ethernet Module Table
|
||||||
|
|
||||||
|
These methods emulate the F<POWER-ETHERNET-MIB> Main Power Source Entity
|
||||||
|
(PSE) Table C<pethMainPseTable> methods using the F<WLSX-POE-MIB> Power
|
||||||
|
over Ethernet Port Table C<wlsxPseSlotTable>.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aruba->peth_power_watts()
|
||||||
|
|
||||||
|
The power supply's capacity, in watts.
|
||||||
|
|
||||||
|
=item $aruba->peth_power_status()
|
||||||
|
|
||||||
|
The power supply's operational status.
|
||||||
|
|
||||||
|
=item $aruba->peth_power_consumption()
|
||||||
|
|
||||||
|
How much power, in watts, this power supply has been committed to
|
||||||
|
deliver.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Arp Cache Table Augmentation
|
=head2 Arp Cache Table Augmentation
|
||||||
|
|
||||||
The controller has knowledge of MAC->IP mappings for wireless clients.
|
The controller has knowledge of MAC->IP mappings for wireless clients.
|
||||||
@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
|
|||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
||||||
%MODID_MAP %PROCID_MAP/;
|
%MODID_MAP %PROCID_MAP/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -732,6 +732,8 @@ sub i_vlan {
|
|||||||
return \%i_vlan;
|
return \%i_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_pvid { goto &i_vlan }
|
||||||
|
|
||||||
sub root_ip {
|
sub root_ip {
|
||||||
my $bayrs = shift;
|
my $bayrs = shift;
|
||||||
|
|
||||||
@@ -1549,6 +1551,10 @@ interfaces.
|
|||||||
|
|
||||||
Returns reference to hash. Maps port VLAN ID to IIDs.
|
Returns reference to hash. Maps port VLAN ID to IIDs.
|
||||||
|
|
||||||
|
=item $bayrs->i_pvid()
|
||||||
|
|
||||||
|
Returns reference to hash. Maps port VLAN ID to IIDs.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Pseudo F<ENTITY-MIB> information
|
=head2 Pseudo F<ENTITY-MIB> information
|
||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||||
@@ -32,39 +32,22 @@
|
|||||||
package SNMP::Info::Layer3::C3550;
|
package SNMP::Info::Layer3::C3550;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoVTP;
|
|
||||||
use SNMP::Info::CiscoStack;
|
use SNMP::Info::CiscoStack;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::Layer3::CiscoSwitch;
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
|
||||||
use SNMP::Info::CiscoStats;
|
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoPortSecurity;
|
|
||||||
use SNMP::Info::CiscoPower;
|
|
||||||
use SNMP::Info::Layer3;
|
|
||||||
use SNMP::Info::CiscoStpExtensions;
|
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$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/
|
||||||
SNMP::Info::CiscoVTP
|
|
||||||
SNMP::Info::CiscoStpExtensions
|
|
||||||
SNMP::Info::CiscoStack
|
SNMP::Info::CiscoStack
|
||||||
SNMP::Info::LLDP
|
SNMP::Info::Layer3::CiscoSwitch
|
||||||
SNMP::Info::CDP
|
|
||||||
SNMP::Info::CiscoStats
|
|
||||||
SNMP::Info::CiscoImage
|
|
||||||
SNMP::Info::CiscoPortSecurity
|
|
||||||
SNMP::Info::CiscoConfig
|
|
||||||
SNMP::Info::CiscoPower
|
|
||||||
SNMP::Info::Layer3
|
|
||||||
Exporter/;
|
Exporter/;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# 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
|
||||||
@@ -72,46 +55,23 @@ $VERSION = '3.08';
|
|||||||
# So we want CiscoVTP to come last to get the right one.
|
# So we want CiscoVTP to come last to get the right one.
|
||||||
# The @ISA order should match these orders.
|
# The @ISA order should match these orders.
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS
|
||||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,
|
= ( %SNMP::Info::Layer3::CiscoSwitch::MIBS, %SNMP::Info::CiscoStack::MIBS,
|
||||||
%SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
|
);
|
||||||
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
|
|
||||||
%SNMP::Info::LLDP::MIBS, %SNMP::Info::CDP::MIBS,
|
|
||||||
%SNMP::Info::CiscoStack::MIBS, %SNMP::Info::CiscoStpExtensions::MIBS,
|
|
||||||
%SNMP::Info::CiscoVTP::MIBS,
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
|
||||||
%SNMP::Info::CiscoPower::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoImage::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStack::GLOBALS,
|
%SNMP::Info::CiscoStack::GLOBALS,
|
||||||
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
|
%SNMP::Info::Layer3::CiscoSwitch::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
|
%SNMP::Info::CiscoStack::FUNCS,
|
||||||
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
|
|
||||||
%SNMP::Info::LLDP::FUNCS, %SNMP::Info::CDP::FUNCS,
|
|
||||||
%SNMP::Info::CiscoStack::FUNCS, %SNMP::Info::CiscoStpExtensions::FUNCS,
|
|
||||||
%SNMP::Info::CiscoVTP::FUNCS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
|
%SNMP::Info::Layer3::CiscoSwitch::MUNGE,
|
||||||
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
|
|
||||||
%SNMP::Info::LLDP::MUNGE, %SNMP::Info::CDP::MUNGE,
|
|
||||||
%SNMP::Info::CiscoStack::MUNGE, %SNMP::Info::CiscoStpExtensions::MUNGE,
|
|
||||||
%SNMP::Info::CiscoVTP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
@@ -136,8 +96,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,10 +192,6 @@ sub set_i_duplex_admin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub cisco_comm_indexing {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -281,25 +237,9 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoSTPExtensions
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStack
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
=item SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -309,26 +249,10 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
|
||||||
|
requirements.
|
||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -353,51 +277,15 @@ Will take the translated model number and try to format it better.
|
|||||||
|
|
||||||
Tries to cull the number of ports from the model number.
|
Tries to cull the number of ports from the model number.
|
||||||
|
|
||||||
=item $c3550->cisco_comm_indexing()
|
|
||||||
|
|
||||||
Returns 1. Use vlan indexing.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer3
|
=head2 Globals imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CDP
|
=head2 Globals imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
@@ -444,45 +332,13 @@ Crosses $c3550->p_port() with $c3550->p_duplex() to utilize port C<ifIndex>.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
|
|
||||||
details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
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::CDP
|
=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
|
||||||
|
details.
|
||||||
=head2 Table Methods imported from SNMP::Info::LLDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
@@ -31,48 +31,30 @@
|
|||||||
package SNMP::Info::Layer3::C4000;
|
package SNMP::Info::Layer3::C4000;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::Layer3::CiscoSwitch;
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoStats;
|
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoPortSecurity;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
use SNMP::Info::Layer3;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer3::C4000::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
|
@SNMP::Info::Layer3::C4000::ISA = qw/
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
|
SNMP::Info::Layer3::CiscoSwitch
|
||||||
SNMP::Info::CiscoPortSecurity
|
SNMP::Info::MAU
|
||||||
SNMP::Info::CiscoConfig SNMP::Info::MAU
|
Exporter/;
|
||||||
SNMP::Info::Layer3 Exporter/;
|
|
||||||
@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::Layer3::CiscoSwitch::MIBS,
|
||||||
%SNMP::Info::CiscoPortSecurity::MIBS,
|
|
||||||
%SNMP::Info::CiscoImage::MIBS,
|
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
|
||||||
%SNMP::Info::CDP::MIBS,
|
|
||||||
%SNMP::Info::CiscoVTP::MIBS,
|
|
||||||
'CISCO-ENVMON-MIB' => 'ciscoEnvMonMIB',
|
'CISCO-ENVMON-MIB' => 'ciscoEnvMonMIB',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
|
||||||
%SNMP::Info::MAU::GLOBALS,
|
%SNMP::Info::MAU::GLOBALS,
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
%SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
|
||||||
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoImage::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
|
||||||
'ps1_type' => 'ciscoEnvMonSupplyStatusDescr.1',
|
'ps1_type' => 'ciscoEnvMonSupplyStatusDescr.1',
|
||||||
'ps1_status' => 'ciscoEnvMonSupplyState.1',
|
'ps1_status' => 'ciscoEnvMonSupplyState.1',
|
||||||
'ps2_type' => 'ciscoEnvMonSupplyStatusDescr.2',
|
'ps2_type' => 'ciscoEnvMonSupplyStatusDescr.2',
|
||||||
@@ -80,24 +62,14 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
|
||||||
%SNMP::Info::MAU::FUNCS,
|
%SNMP::Info::MAU::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::Layer3::CiscoSwitch::FUNCS,
|
||||||
%SNMP::Info::CiscoPortSecurity::FUNCS,
|
|
||||||
%SNMP::Info::CiscoImage::FUNCS,
|
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
|
||||||
%SNMP::Info::CDP::FUNCS,
|
|
||||||
%SNMP::Info::CiscoVTP::FUNCS,
|
|
||||||
'fan_state' => 'ciscoEnvMonFanState',
|
'fan_state' => 'ciscoEnvMonFanState',
|
||||||
'fan_descr' => 'ciscoEnvMonFanStatusDescr',
|
'fan_descr' => 'ciscoEnvMonFanStatusDescr',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE
|
||||||
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::MAU::MUNGE,
|
= ( %SNMP::Info::MAU::MUNGE, %SNMP::Info::Layer3::CiscoSwitch::MUNGE, );
|
||||||
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
|
|
||||||
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
|
|
||||||
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
|
|
||||||
);
|
|
||||||
|
|
||||||
# Override Inheritance for these specific methods
|
# Override Inheritance for these specific methods
|
||||||
# use MAU-MIB for admin. duplex and admin. speed
|
# use MAU-MIB for admin. duplex and admin. speed
|
||||||
@@ -111,7 +83,6 @@ $VERSION = '3.08';
|
|||||||
*SNMP::Info::Layer3::C4000::set_i_speed_admin
|
*SNMP::Info::Layer3::C4000::set_i_speed_admin
|
||||||
= \&SNMP::Info::MAU::mau_set_i_speed_admin;
|
= \&SNMP::Info::MAU::mau_set_i_speed_admin;
|
||||||
|
|
||||||
|
|
||||||
sub fan {
|
sub fan {
|
||||||
my $c4000 = shift;
|
my $c4000 = shift;
|
||||||
my $fan_state = $c4000->fan_state();
|
my $fan_state = $c4000->fan_state();
|
||||||
@@ -126,8 +97,6 @@ sub fan {
|
|||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub cisco_comm_indexing { return 1; }
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -169,22 +138,10 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
=item SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
=item SNMP::Info::MAU
|
=item SNMP::Info::MAU
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Required MIBs
|
=head2 Required MIBs
|
||||||
@@ -193,23 +150,11 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
|
|
||||||
requirements.
|
requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"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::Layer3/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
@@ -220,48 +165,20 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $c4000->cisco_comm_indexing()
|
|
||||||
|
|
||||||
Returns 1. Use vlan indexing.
|
|
||||||
|
|
||||||
=item $c4000->fan()
|
=item $c4000->fan()
|
||||||
|
|
||||||
Returns fan status
|
Returns fan status
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
=head2 Globals imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::MAU
|
=head2 Globals imported from SNMP::Info::MAU
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals 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
|
||||||
@@ -301,37 +218,13 @@ Duplex choices are 'auto', 'half', 'full'.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
|
|
||||||
details.
|
details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for 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.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
@@ -31,35 +31,18 @@
|
|||||||
package SNMP::Info::Layer3::C6500;
|
package SNMP::Info::Layer3::C6500;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoStack;
|
use SNMP::Info::CiscoStack;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::Layer3::CiscoSwitch;
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoStats;
|
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoPortSecurity;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
|
||||||
use SNMP::Info::CiscoPower;
|
|
||||||
use SNMP::Info::Layer3;
|
|
||||||
use SNMP::Info::CiscoStpExtensions;
|
|
||||||
use SNMP::Info::CiscoVTP;
|
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$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/
|
||||||
SNMP::Info::CiscoVTP
|
|
||||||
SNMP::Info::CiscoStpExtensions
|
|
||||||
SNMP::Info::CiscoStack
|
SNMP::Info::CiscoStack
|
||||||
SNMP::Info::LLDP
|
SNMP::Info::Layer3::CiscoSwitch
|
||||||
SNMP::Info::CDP
|
|
||||||
SNMP::Info::CiscoImage
|
|
||||||
SNMP::Info::CiscoStats
|
|
||||||
SNMP::Info::CiscoPortSecurity
|
|
||||||
SNMP::Info::CiscoConfig
|
|
||||||
SNMP::Info::CiscoPower
|
|
||||||
SNMP::Info::Layer3
|
|
||||||
SNMP::Info::MAU
|
SNMP::Info::MAU
|
||||||
Exporter
|
Exporter
|
||||||
/;
|
/;
|
||||||
@@ -68,7 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
# 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
|
||||||
@@ -78,58 +61,49 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::CiscoSwitch::MIBS,
|
||||||
%SNMP::Info::CiscoPower::MIBS,
|
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::MIBS,
|
|
||||||
%SNMP::Info::CiscoImage::MIBS,
|
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
|
||||||
%SNMP::Info::CDP::MIBS,
|
|
||||||
%SNMP::Info::LLDP::MIBS,
|
|
||||||
%SNMP::Info::CiscoStack::MIBS,
|
%SNMP::Info::CiscoStack::MIBS,
|
||||||
%SNMP::Info::CiscoStpExtensions::MIBS,
|
|
||||||
%SNMP::Info::CiscoVTP::MIBS,
|
|
||||||
'CISCO-VIRTUAL-SWITCH-MIB' => 'cvsSwitchMode',
|
'CISCO-VIRTUAL-SWITCH-MIB' => 'cvsSwitchMode',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::MAU::GLOBALS,
|
%SNMP::Info::MAU::GLOBALS,
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
|
||||||
%SNMP::Info::CiscoPower::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoImage::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStats::GLOBALS,
|
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoStack::GLOBALS,
|
%SNMP::Info::CiscoStack::GLOBALS,
|
||||||
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::MAU::FUNCS, %SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::MAU::FUNCS,
|
||||||
%SNMP::Info::CiscoPower::FUNCS, %SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::Layer3::CiscoSwitch::FUNCS,
|
||||||
%SNMP::Info::CiscoPortSecurity::FUNCS, %SNMP::Info::CiscoImage::FUNCS,
|
%SNMP::Info::CiscoStack::FUNCS,
|
||||||
%SNMP::Info::CiscoStats::FUNCS, %SNMP::Info::CDP::FUNCS,
|
|
||||||
%SNMP::Info::LLDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
|
|
||||||
%SNMP::Info::CiscoStpExtensions::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::MAU::MUNGE, %SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::MAU::MUNGE,
|
||||||
%SNMP::Info::CiscoPower::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::Layer3::CiscoSwitch::MUNGE,
|
||||||
%SNMP::Info::CiscoPortSecurity::MUNGE, %SNMP::Info::CiscoImage::MUNGE,
|
%SNMP::Info::CiscoStack::MUNGE,
|
||||||
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
|
|
||||||
%SNMP::Info::LLDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
|
|
||||||
%SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub cisco_comm_indexing { return 1; }
|
sub serial {
|
||||||
|
my $c6500 = shift;
|
||||||
|
|
||||||
|
my $serial = $c6500->SUPER::serial();
|
||||||
|
return $serial if defined $serial and $serial;
|
||||||
|
|
||||||
|
# now grab the table only if SUPER cannot find it
|
||||||
|
my $e_serial = $c6500->e_serial();
|
||||||
|
|
||||||
|
# Find entity table entry for this unit
|
||||||
|
foreach my $e ( sort keys %$e_serial ) {
|
||||||
|
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
|
||||||
|
return $e_serial->{$e};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Newer versions use the ETHERLIKE-MIB to report operational duplex.
|
# Newer versions use the ETHERLIKE-MIB to report operational duplex.
|
||||||
|
|
||||||
@@ -309,25 +283,11 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStack
|
=item SNMP::Info::CiscoStack
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
=item SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
=item SNMP::Info::MAU
|
||||||
|
|
||||||
=item SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -337,26 +297,12 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
|
|
||||||
requirements.
|
requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -370,10 +316,6 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
Returns 'cisco'
|
Returns 'cisco'
|
||||||
|
|
||||||
=item $c6500->cisco_comm_indexing()
|
|
||||||
|
|
||||||
Returns 1. Use vlan indexing.
|
|
||||||
|
|
||||||
=item $c6500->cvsSwitchMode()
|
=item $c6500->cvsSwitchMode()
|
||||||
|
|
||||||
Returns the Switch status: multiNode or standalone.
|
Returns the Switch status: multiNode or standalone.
|
||||||
@@ -382,47 +324,23 @@ Returns the Switch status: multiNode or standalone.
|
|||||||
|
|
||||||
Return 1 if the switch (C<cvsSwitchMode>) is in multimode (VSS).
|
Return 1 if the switch (C<cvsSwitchMode>) is in multimode (VSS).
|
||||||
|
|
||||||
|
=item $c6500->serial()
|
||||||
|
|
||||||
|
Returns serial number of unit (falls back to C<entPhysicalSerialNum>).
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
=head2 Globals imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoStack
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CDP
|
=head2 Globals imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStats
|
=head2 Globals imported from SNMP::Info::MAU
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
@@ -477,47 +395,19 @@ Crosses $c6500->p_port() with $c6500->p_speed() to utilize port C<ifIndex>.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
=head2 Table Methods imported from SNMP::Info::CiscoStack
|
||||||
|
|
||||||
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::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
|
|
||||||
details.
|
details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
=head2 Table Methods imported from SNMP::Info::MAU
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoPower
|
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for
|
|
||||||
details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
330
lib/SNMP/Info/Layer3/CheckPoint.pm
Normal file
330
lib/SNMP/Info/Layer3/CheckPoint.pm
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
# SNMP::Info::Layer3::CheckPoint
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Bill Fenner
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer3::CheckPoint;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::CheckPoint::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
||||||
|
@SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
|
'CHECKPOINT-MIB' => 'fwProduct',
|
||||||
|
'UCD-SNMP-MIB' => 'versionTag',
|
||||||
|
'NET-SNMP-TC' => 'netSnmpAliasDomain',
|
||||||
|
'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
|
||||||
|
'HOST-RESOURCES-MIB' => 'hrSystem',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
'netsnmp_vers' => 'versionTag',
|
||||||
|
'hrSystemUptime' => 'hrSystemUptime',
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
|
||||||
|
# Net-SNMP Extend table that could but customize to add a the CheckPoint version
|
||||||
|
'extend_output_table' => 'nsExtendOutputFull',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'checkpoint';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $ckp = shift;
|
||||||
|
my $id = $ckp->id;
|
||||||
|
|
||||||
|
my $model = &SNMP::translateObj($id);
|
||||||
|
|
||||||
|
if (defined $model) {
|
||||||
|
$model =~ s/^checkPoint//;
|
||||||
|
return $model;
|
||||||
|
} else {
|
||||||
|
return $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'checkpoint';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $ckp = shift;
|
||||||
|
my $extend_table = $ckp->extend_output_table() || {};
|
||||||
|
|
||||||
|
my $descr = $ckp->description();
|
||||||
|
my $vers = $ckp->netsnmp_vers();
|
||||||
|
my $os_ver = undef;
|
||||||
|
|
||||||
|
foreach my $ex (keys %$extend_table) {
|
||||||
|
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
||||||
|
if ($name eq 'ckpVersion') {
|
||||||
|
return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/);
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ );
|
||||||
|
if ($vers) {
|
||||||
|
$os_ver = "???" unless defined($os_ver);
|
||||||
|
$os_ver .= " / Net-SNMP " . $vers;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $os_ver;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $ckp = shift;
|
||||||
|
my $extend_table = $ckp->extend_output_table() || {};
|
||||||
|
|
||||||
|
foreach my $ex (keys %$extend_table) {
|
||||||
|
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
|
||||||
|
if ($name eq 'ckpAsset') {
|
||||||
|
return $1 if ($extend_table->{$ex} =~ /Serial Number: (\S+)/);
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub layers {
|
||||||
|
return '01001100';
|
||||||
|
}
|
||||||
|
|
||||||
|
# sysUptime gives us the time since the SNMP daemon has restarted,
|
||||||
|
# so return the system uptime since that's probably what the user
|
||||||
|
# wants. (Caution: this could cause trouble if using
|
||||||
|
# sysUptime-based discontinuity timers or other TimeStamp
|
||||||
|
# objects.
|
||||||
|
sub uptime {
|
||||||
|
my $ckp = shift;
|
||||||
|
my $uptime;
|
||||||
|
|
||||||
|
$uptime = $ckp->hrSystemUptime();
|
||||||
|
return $uptime if defined $uptime;
|
||||||
|
|
||||||
|
return $ckp->SUPER::uptime();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_ignore {
|
||||||
|
my $l3 = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $interfaces = $l3->interfaces($partial) || {};
|
||||||
|
|
||||||
|
my %i_ignore;
|
||||||
|
foreach my $if ( keys %$interfaces ) {
|
||||||
|
|
||||||
|
# lo0 etc
|
||||||
|
if ( $interfaces->{$if} =~ /\blo\d*\b/i ) {
|
||||||
|
$i_ignore{$if}++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%i_ignore;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::CheckPoint - SNMP Interface to CheckPoint Devices
|
||||||
|
|
||||||
|
=head1 AUTHORS
|
||||||
|
|
||||||
|
Ambroise Rosset
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $ckp = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $ckp->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Generic Net-SNMP devices
|
||||||
|
|
||||||
|
=head2 WARNING
|
||||||
|
|
||||||
|
To correctly and completelly work, you should add the following line in the file C</etc/snmp/snmpd.local.conf> on each of your CheckPoint devices:
|
||||||
|
|
||||||
|
# Netdisco SNMP configuration
|
||||||
|
extend ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver
|
||||||
|
extend ckpAsset /bin/clish -c 'show asset all'
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<UCD-SNMP-MIB>
|
||||||
|
|
||||||
|
=item F<NET-SNMP-TC>
|
||||||
|
|
||||||
|
=item F<HOST-RESOURCES-MIB>
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ckp->vendor()
|
||||||
|
|
||||||
|
Returns 'checkpoint'.
|
||||||
|
|
||||||
|
=item $ckp->model()
|
||||||
|
|
||||||
|
Return the model type of the CheckPoint device (Based on the sysObjectOID translation).
|
||||||
|
|
||||||
|
=item $ckp->os()
|
||||||
|
|
||||||
|
Returns the OS extracted from C<sysDescr>.
|
||||||
|
|
||||||
|
=item $ckp->os_ver()
|
||||||
|
|
||||||
|
Returns the software version extracted from C<sysDescr>, along
|
||||||
|
with the Net-SNMP version.
|
||||||
|
|
||||||
|
=item $ckp->uptime()
|
||||||
|
|
||||||
|
Returns the system uptime instead of the agent uptime.
|
||||||
|
NOTE: discontinuity timers and other Time Stamp based objects
|
||||||
|
are based on agent uptime, so use orig_uptime().
|
||||||
|
|
||||||
|
=item $ckp->serial()
|
||||||
|
|
||||||
|
Return the serial number of the device if the SNMP server is configured as indicated previously.
|
||||||
|
Return '' in other case.
|
||||||
|
|
||||||
|
=item $ckp->layers()
|
||||||
|
|
||||||
|
Return '01001100'.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP> for details.
|
||||||
|
|
||||||
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ckp->i_ignore()
|
||||||
|
|
||||||
|
Returns reference to hash. Increments value of IID if port is to be ignored.
|
||||||
|
|
||||||
|
Ignores loopback
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP> for details.
|
||||||
|
|
||||||
|
=head1 NOTES
|
||||||
|
|
||||||
|
In order to cause SNMP::Info to classify your device into this class, it
|
||||||
|
may be necessary to put a configuration line into your F<snmpd.conf>
|
||||||
|
similar to
|
||||||
|
|
||||||
|
sysobjectid .1.3.6.1.4.1.8072.3.2.N
|
||||||
|
|
||||||
|
where N is the object ID for your OS from the C<NET-SNMP-TC> MIB (or
|
||||||
|
255 if not listed). Some Net-SNMP installations default to an
|
||||||
|
incorrect return value for C<system.sysObjectId>.
|
||||||
|
|
||||||
|
In order to recognize a Net-SNMP device as Layer3, it may be necessary
|
||||||
|
to put a configuration line similar to
|
||||||
|
|
||||||
|
sysservices 76
|
||||||
|
|
||||||
|
in your F<snmpd.conf>.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -31,59 +31,70 @@
|
|||||||
package SNMP::Info::Layer3::Cisco;
|
package SNMP::Info::Layer3::Cisco;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::CiscoVTP;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoRTT;
|
use SNMP::Info::CiscoRTT;
|
||||||
use SNMP::Info::CiscoQOS;
|
use SNMP::Info::CiscoQOS;
|
||||||
use SNMP::Info::CiscoConfig;
|
use SNMP::Info::CiscoConfig;
|
||||||
use SNMP::Info::CiscoPower;
|
use SNMP::Info::CiscoPower;
|
||||||
|
use SNMP::Info::CiscoStpExtensions;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
|
@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
|
SNMP::Info::LLDP SNMP::Info::CDP
|
||||||
SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
|
SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
|
||||||
SNMP::Info::CiscoConfig SNMP::Info::CiscoPower
|
SNMP::Info::CiscoQOS SNMP::Info::CiscoConfig
|
||||||
|
SNMP::Info::CiscoPower SNMP::Info::CiscoStpExtensions
|
||||||
SNMP::Info::Layer3
|
SNMP::Info::Layer3
|
||||||
Exporter/;
|
Exporter/;
|
||||||
@SNMP::Info::Layer3::Cisco::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Cisco::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
%SNMP::Info::CiscoStpExtensions::MIBS,
|
||||||
%SNMP::Info::CiscoPower::MIBS,
|
%SNMP::Info::CiscoPower::MIBS,
|
||||||
%SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::CiscoConfig::MIBS,
|
||||||
%SNMP::Info::CiscoQOS::MIBS,
|
%SNMP::Info::CiscoQOS::MIBS,
|
||||||
%SNMP::Info::CiscoRTT::MIBS,
|
%SNMP::Info::CiscoRTT::MIBS,
|
||||||
%SNMP::Info::CiscoImage::MIBS,
|
|
||||||
%SNMP::Info::CiscoStats::MIBS,
|
%SNMP::Info::CiscoStats::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
%SNMP::Info::CiscoVTP::MIBS,
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
'CISCO-EIGRP-MIB' => 'cEigrpAsRouterId',
|
'CISCO-EIGRP-MIB' => 'cEigrpAsRouterId',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoPower::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::CiscoConfig::GLOBALS, %SNMP::Info::CiscoQOS::GLOBALS,
|
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
||||||
%SNMP::Info::CiscoRTT::GLOBALS, %SNMP::Info::CiscoImage::GLOBALS,
|
%SNMP::Info::CiscoPower::GLOBALS,
|
||||||
%SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CiscoConfig::GLOBALS,
|
||||||
%SNMP::Info::CiscoVTP::GLOBALS, 'eigrp_id' => 'cEigrpAsRouterId',
|
%SNMP::Info::CiscoQOS::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoRTT::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoStats::GLOBALS,
|
||||||
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||||
|
'eigrp_id' => 'cEigrpAsRouterId',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::CiscoStpExtensions::FUNCS,
|
||||||
%SNMP::Info::CiscoPower::FUNCS,
|
%SNMP::Info::CiscoPower::FUNCS,
|
||||||
%SNMP::Info::CiscoConfig::FUNCS,
|
%SNMP::Info::CiscoConfig::FUNCS,
|
||||||
%SNMP::Info::CiscoQOS::FUNCS,
|
%SNMP::Info::CiscoQOS::FUNCS,
|
||||||
%SNMP::Info::CiscoRTT::FUNCS,
|
%SNMP::Info::CiscoRTT::FUNCS,
|
||||||
%SNMP::Info::CiscoImage::FUNCS,
|
|
||||||
%SNMP::Info::CiscoStats::FUNCS,
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
%SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CDP::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
%SNMP::Info::CiscoVTP::FUNCS,
|
%SNMP::Info::CiscoVTP::FUNCS,
|
||||||
|
|
||||||
# EIGRP
|
# EIGRP
|
||||||
@@ -92,33 +103,50 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
%SNMP::Info::CiscoStpExtensions::MUNGE,
|
||||||
%SNMP::Info::CiscoPower::MUNGE,
|
%SNMP::Info::CiscoPower::MUNGE,
|
||||||
%SNMP::Info::CiscoConfig::MUNGE,
|
%SNMP::Info::CiscoConfig::MUNGE,
|
||||||
%SNMP::Info::CiscoQOS::MUNGE,
|
%SNMP::Info::CiscoQOS::MUNGE,
|
||||||
%SNMP::Info::CiscoRTT::MUNGE,
|
%SNMP::Info::CiscoRTT::MUNGE,
|
||||||
%SNMP::Info::CiscoImage::MUNGE,
|
|
||||||
%SNMP::Info::CiscoStats::MUNGE,
|
%SNMP::Info::CiscoStats::MUNGE,
|
||||||
%SNMP::Info::CDP::MUNGE,
|
%SNMP::Info::CDP::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
%SNMP::Info::CiscoVTP::MUNGE,
|
%SNMP::Info::CiscoVTP::MUNGE,
|
||||||
'eigrp_peers' => \&SNMP::Info::munge_ip,
|
'eigrp_peers' => \&SNMP::Info::munge_ip,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub i_vlan {
|
sub i_vlan {
|
||||||
my ($cisco) = shift;
|
my $cisco = shift;
|
||||||
my ($partial) = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my ($i_type) = $cisco->i_type($partial);
|
my $i_type = $cisco->i_type($partial);
|
||||||
my ($i_descr) = $cisco->i_description($partial);
|
my $i_descr = $cisco->i_description($partial);
|
||||||
my %i_vlan;
|
my $i_vlan = $cisco->SUPER::i_vlan($partial);
|
||||||
|
|
||||||
foreach my $idx ( keys %$i_descr ) {
|
foreach my $idx ( keys %$i_descr ) {
|
||||||
if ( $i_type->{$idx} eq 'l2vlan' || $i_type->{$idx} eq 135 ) {
|
next unless $i_type->{$idx};
|
||||||
|
if ( $i_type->{$idx} eq 'l2vlan'
|
||||||
|
|| $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} )
|
||||||
|
{
|
||||||
|
# Not sure where this regex came from, anchored at end?
|
||||||
if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
|
if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
|
||||||
$i_vlan{$idx} = $1;
|
$i_vlan->{$idx} = $1;
|
||||||
|
}
|
||||||
|
# This matches 101 in 'Ethernet0.101-802.1Q vLAN subif'
|
||||||
|
elsif ( $i_descr->{$idx} =~ /\.(\d+)-/ ) {
|
||||||
|
$i_vlan->{$idx} = $1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return \%i_vlan;
|
return $i_vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cisco_comm_indexing {
|
||||||
|
my $cisco = shift;
|
||||||
|
# If we get a VTP version, it's *extremely* likely that the device needs
|
||||||
|
# community based indexing
|
||||||
|
my $vtp = $cisco->vtp_version() || '0';
|
||||||
|
return $vtp ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -127,7 +155,9 @@ __END__
|
|||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::Layer3::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
|
SNMP::Info::Layer3::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
|
||||||
that are not covered in other classes.
|
that are not covered in other classes and the base L3 Cisco class for other
|
||||||
|
device specific L3 Cisco classes.
|
||||||
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -151,7 +181,8 @@ Max Baker
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Subclass for Generic Cisco Routers running IOS
|
Subclass for Generic Cisco Routers running IOS and the base L3 Cisco class
|
||||||
|
for other device specific L3 Cisco classes.
|
||||||
|
|
||||||
=head2 Inherited Classes
|
=head2 Inherited Classes
|
||||||
|
|
||||||
@@ -159,12 +190,12 @@ Subclass for Generic Cisco Routers running IOS
|
|||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
=item SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
=item SNMP::Info::CDP
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStats
|
=item SNMP::Info::CiscoStats
|
||||||
|
|
||||||
=item SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
=item SNMP::Info::CiscoRTT
|
=item SNMP::Info::CiscoRTT
|
||||||
|
|
||||||
=item SNMP::Info::CiscoQOS
|
=item SNMP::Info::CiscoQOS
|
||||||
@@ -173,6 +204,8 @@ Subclass for Generic Cisco Routers running IOS
|
|||||||
|
|
||||||
=item SNMP::Info::Power
|
=item SNMP::Info::Power
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -187,12 +220,12 @@ Subclass for Generic Cisco Routers running IOS
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
|
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoQOS/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoQOS/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -201,6 +234,8 @@ See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
|
|||||||
|
|
||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoStpExtensions/"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.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -211,20 +246,25 @@ These are methods that return scalar value from SNMP
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $cisco->vendor()
|
|
||||||
|
|
||||||
Returns 'cisco'
|
|
||||||
|
|
||||||
=item $cisco->eigrp_id()
|
=item $cisco->eigrp_id()
|
||||||
|
|
||||||
(C<cEigrpAsRouterId>)
|
(C<cEigrpAsRouterId>)
|
||||||
|
|
||||||
|
=item $switch->cisco_comm_indexing()
|
||||||
|
|
||||||
|
Returns 1 when the device is likely to need vlan indexing.
|
||||||
|
Determined by checking C<vtpVersion>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoVTP/"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::CDP
|
=head2 Globals imported from SNMP::Info::CDP
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
||||||
@@ -233,10 +273,6 @@ See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoRTT
|
=head2 Globals imported from SNMP::Info::CiscoRTT
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
|
||||||
@@ -253,6 +289,10 @@ See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::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.
|
||||||
@@ -280,6 +320,10 @@ Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoVTP/"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::CDP
|
=head2 Table Methods imported from SNMP::Info::CDP
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
||||||
@@ -288,10 +332,6 @@ See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoRTT
|
=head2 Table Methods imported from SNMP::Info::CiscoRTT
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
|
||||||
@@ -308,6 +348,10 @@ See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::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.
|
||||||
@@ -32,68 +32,61 @@
|
|||||||
package SNMP::Info::Layer3::CiscoASA;
|
package SNMP::Info::Layer3::CiscoASA;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::CiscoVTP;
|
|
||||||
use SNMP::Info::CDP;
|
|
||||||
use SNMP::Info::CiscoStats;
|
use SNMP::Info::CiscoStats;
|
||||||
use SNMP::Info::CiscoImage;
|
|
||||||
use SNMP::Info::CiscoRTT;
|
|
||||||
use SNMP::Info::CiscoQOS;
|
|
||||||
use SNMP::Info::CiscoConfig;
|
|
||||||
use SNMP::Info::CiscoPower;
|
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::Layer3::Cisco;
|
|
||||||
|
|
||||||
@SNMP::Info::Layer3::CiscoASA::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
|
@SNMP::Info::Layer3::CiscoASA::ISA = qw/
|
||||||
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
|
SNMP::Info::CiscoStats
|
||||||
SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
|
|
||||||
SNMP::Info::CiscoConfig SNMP::Info::CiscoPower
|
|
||||||
SNMP::Info::Layer3::Cisco
|
|
||||||
SNMP::Info::Layer3
|
SNMP::Info::Layer3
|
||||||
Exporter/;
|
Exporter/;
|
||||||
@SNMP::Info::Layer3::CiscoASA::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::CiscoASA::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
|
||||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
|
||||||
);
|
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS
|
||||||
%SNMP::Info::Layer3::Cisco::GLOBALS,
|
= ( %SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, );
|
||||||
);
|
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::Cisco::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
'mac_table' => 'ifPhysAddress',
|
'mac_table' => 'ifPhysAddress',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::Cisco::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
'mac_table' => \&SNMP::Info::munge_mac, );
|
%SNMP::Info::CiscoStats::MUNGE,
|
||||||
|
'mac_table' => \&SNMP::Info::munge_mac,
|
||||||
|
);
|
||||||
|
|
||||||
sub b_mac {
|
sub b_mac {
|
||||||
my ($asa) = shift;
|
my ($asa) = shift;
|
||||||
my $macs = $asa->mac_table();
|
my $macs = $asa->mac_table();
|
||||||
my @macs;
|
my @macs;
|
||||||
# gather physical addresses
|
|
||||||
foreach my $i ( keys %$macs ) {
|
# gather physical addresses
|
||||||
my $mac = $macs->{$i};
|
foreach my $i ( keys %$macs ) {
|
||||||
# don't catch the bad macs with zeroed OUI
|
my $mac = $macs->{$i};
|
||||||
if ( $mac !~ m/(0{1,2}:){3}/ ) {
|
|
||||||
push( @macs, $mac);
|
# don't catch the bad macs with bogus OUI
|
||||||
}
|
if ( $mac !~ m/(0{1,2}:){2}(00|01)/ ) {
|
||||||
@macs = sort( @macs );
|
push( @macs, $mac );
|
||||||
}
|
}
|
||||||
# return the least mac
|
@macs = sort(@macs);
|
||||||
return $macs[0];
|
}
|
||||||
|
|
||||||
|
# return the least mac
|
||||||
|
return $macs[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
sub i_description {
|
sub i_description {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_descr = $self->orig_i_description($partial) || {};
|
my $i_descr = $self->orig_i_description($partial) || {};
|
||||||
|
|
||||||
@@ -141,7 +134,9 @@ Subclass for Cisco ASA Devices
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::Layer3::Cisco
|
=item SNMP::Info::CiscoStats
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -149,11 +144,11 @@ Subclass for Cisco ASA Devices
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item F<CISCO-EIGRP-MIB>
|
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -176,77 +171,25 @@ configured interface name instead of "Adaptive Security Appliance
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoStats
|
=head2 Globals imported from SNMP::Info::CiscoStats
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoImage
|
=head2 Global Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoRTT
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoQOS
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoQOS/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::CiscoPower
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=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.
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer3::Cisco
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
|
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
These are methods that return tables of information in the form of a
|
These are methods that return tables of information in the form of a
|
||||||
reference to a hash.
|
reference to a hash.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CDP
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoRTT
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::CiscoQOS
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::CiscoQOS/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
|
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
@@ -31,34 +31,31 @@
|
|||||||
package SNMP::Info::Layer3::CiscoFWSM;
|
package SNMP::Info::Layer3::CiscoFWSM;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use warnings;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3::Cisco;
|
use SNMP::Info::CiscoStats;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::CiscoFWSM::ISA = qw/SNMP::Info::Layer3::Cisco
|
@SNMP::Info::Layer3::CiscoFWSM::ISA = qw/SNMP::Info::CiscoStats
|
||||||
Exporter/;
|
SNMP::Info::Layer3
|
||||||
|
Exporter/;
|
||||||
@SNMP::Info::Layer3::CiscoFWSM::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::CiscoFWSM::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
|
||||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
|
||||||
);
|
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS
|
||||||
%SNMP::Info::Layer3::Cisco::GLOBALS,
|
= ( %SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, );
|
||||||
);
|
|
||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer3::Cisco::FUNCS,
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::CiscoStats::FUNCS,
|
||||||
);
|
|
||||||
|
|
||||||
%MUNGE = (
|
|
||||||
%SNMP::Info::Layer3::Cisco::MUNGE,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoStats::MUNGE, );
|
||||||
|
|
||||||
# For FWSMs, the ipNetToPhysicalPhysAddress table appears to be of the form:
|
# For FWSMs, the ipNetToPhysicalPhysAddress table appears to be of the form:
|
||||||
# $ifindex.$inetaddresstype.$proto.$ip_address -> $mac_address
|
# $ifindex.$inetaddresstype.$proto.$ip_address -> $mac_address
|
||||||
@@ -69,65 +66,65 @@ $VERSION = '3.08';
|
|||||||
# This doesn't really line up to what at_* return, so we munge it
|
# This doesn't really line up to what at_* return, so we munge it
|
||||||
|
|
||||||
sub at_paddr {
|
sub at_paddr {
|
||||||
my ($fwsm) = shift;
|
my ($fwsm) = shift;
|
||||||
my ($partial) = shift;
|
my ($partial) = shift;
|
||||||
|
|
||||||
my $paddrs = $fwsm->n2p_paddr($partial);
|
my $paddrs = $fwsm->n2p_paddr($partial);
|
||||||
my $n_paddrs = {};
|
my $n_paddrs = {};
|
||||||
|
|
||||||
foreach my $key (keys %$paddrs) {
|
|
||||||
my $paddr = $paddrs->{$key};
|
|
||||||
my @parts = split /\./, $key;
|
|
||||||
my ($ifindex, $addrtype, $proto) = splice @parts, 0, 3;
|
|
||||||
my $ip = join ".", @parts;
|
|
||||||
|
|
||||||
next if($proto != 4); # at_paddr doesn't support non-IPv4
|
foreach my $key ( keys %$paddrs ) {
|
||||||
|
my $paddr = $paddrs->{$key};
|
||||||
|
my @parts = split /\./, $key;
|
||||||
|
my ( $ifindex, $addrtype, $proto ) = splice @parts, 0, 3;
|
||||||
|
my $ip = join ".", @parts;
|
||||||
|
|
||||||
$n_paddrs->{"$ifindex.$ip"} = $paddr;
|
next if ( $proto != 4 ); # at_paddr doesn't support non-IPv4
|
||||||
}
|
|
||||||
return $n_paddrs;
|
$n_paddrs->{"$ifindex.$ip"} = $paddr;
|
||||||
|
}
|
||||||
|
return $n_paddrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub at_netaddr {
|
sub at_netaddr {
|
||||||
my ($fwsm) = shift;
|
my ($fwsm) = shift;
|
||||||
my ($partial) = shift;
|
my ($partial) = shift;
|
||||||
|
|
||||||
my $paddrs = $fwsm->n2p_paddr($partial);
|
my $paddrs = $fwsm->n2p_paddr($partial);
|
||||||
|
|
||||||
my $netaddrs = {};
|
my $netaddrs = {};
|
||||||
|
|
||||||
foreach my $key (keys %$paddrs) {
|
|
||||||
my $paddr = $paddrs->{$key};
|
|
||||||
my @parts = split /\./, $key;
|
|
||||||
my ($ifindex, $addrtype, $proto) = splice @parts, 0, 3;
|
|
||||||
my $ip = join ".", @parts;
|
|
||||||
|
|
||||||
next if($proto != 4); # at_netaddr doesn't support non-IPv4
|
foreach my $key ( keys %$paddrs ) {
|
||||||
|
my $paddr = $paddrs->{$key};
|
||||||
|
my @parts = split /\./, $key;
|
||||||
|
my ( $ifindex, $addrtype, $proto ) = splice @parts, 0, 3;
|
||||||
|
my $ip = join ".", @parts;
|
||||||
|
|
||||||
$netaddrs->{"$ifindex.$ip"} = $ip;
|
next if ( $proto != 4 ); # at_netaddr doesn't support non-IPv4
|
||||||
}
|
|
||||||
return $netaddrs;
|
$netaddrs->{"$ifindex.$ip"} = $ip;
|
||||||
|
}
|
||||||
|
return $netaddrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub at_ifaddr {
|
sub at_ifaddr {
|
||||||
my ($fwsm) = shift;
|
my ($fwsm) = shift;
|
||||||
my ($partial) = shift;
|
my ($partial) = shift;
|
||||||
|
|
||||||
my $paddrs = $fwsm->n2p_paddr($partial);
|
my $paddrs = $fwsm->n2p_paddr($partial);
|
||||||
|
|
||||||
my $ifaddrs = {};
|
my $ifaddrs = {};
|
||||||
|
|
||||||
foreach my $key (keys %$paddrs) {
|
|
||||||
my $paddr = $paddrs->{$key};
|
|
||||||
my @parts = split /\./, $key;
|
|
||||||
my ($ifindex, $addrtype, $proto) = splice @parts, 0, 3;
|
|
||||||
my $ip = join ".", @parts;
|
|
||||||
|
|
||||||
next if($proto != 4); # at_ifaddr doesn't support non-IPv4
|
foreach my $key ( keys %$paddrs ) {
|
||||||
|
my $paddr = $paddrs->{$key};
|
||||||
|
my @parts = split /\./, $key;
|
||||||
|
my ( $ifindex, $addrtype, $proto ) = splice @parts, 0, 3;
|
||||||
|
my $ip = join ".", @parts;
|
||||||
|
|
||||||
$ifaddrs->{"$ifindex.$ip"} = $ip;
|
next if ( $proto != 4 ); # at_ifaddr doesn't support non-IPv4
|
||||||
}
|
|
||||||
return $ifaddrs;
|
$ifaddrs->{"$ifindex.$ip"} = $ip;
|
||||||
|
}
|
||||||
|
return $ifaddrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -135,8 +132,8 @@ __END__
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules for
|
SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules
|
||||||
features not covered elsewhere.
|
for features not covered elsewhere.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -146,14 +143,14 @@ Brian De Wolf
|
|||||||
|
|
||||||
# Let SNMP::Info determine the correct subclass for you.
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
my $fwsm = new SNMP::Info(
|
my $fwsm = new SNMP::Info(
|
||||||
AutoSpecify => 1,
|
AutoSpecify => 1,
|
||||||
Debug => 1,
|
Debug => 1,
|
||||||
# These arguments are passed directly to SNMP::Session
|
# These arguments are passed directly to SNMP::Session
|
||||||
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 = $fwsm->class();
|
my $class = $fwsm->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";
|
||||||
@@ -166,7 +163,9 @@ Subclass for Cisco Firewall Services Modules
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item SNMP::Info::Layer3::Cisco
|
=item SNMP::Info::CiscoStats
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -176,15 +175,21 @@ Subclass for Cisco Firewall Services Modules
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 GLOBALS
|
=head1 GLOBALS
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::Layer3::Cisco
|
=head2 Globals imported from SNMP::Info::CiscoStats
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"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
|
||||||
|
|
||||||
@@ -216,8 +221,12 @@ the MIB to provide that information isn't supported on FWSM.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
|
=head2 Table Methods imported from SNMP::Info::CiscoStats
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
|
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
190
lib/SNMP/Info/Layer3/CiscoSwitch.pm
Normal file
190
lib/SNMP/Info/Layer3/CiscoSwitch.pm
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
# SNMP::Info::Layer3::CiscoSwitch
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014 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::Layer3::CiscoSwitch;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::CiscoAgg;
|
||||||
|
use SNMP::Info::CiscoPortSecurity;
|
||||||
|
use SNMP::Info::Layer3::Cisco;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::CiscoSwitch::ISA = qw/
|
||||||
|
SNMP::Info::CiscoAgg
|
||||||
|
SNMP::Info::CiscoPortSecurity
|
||||||
|
SNMP::Info::Layer3::Cisco
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::CiscoSwitch::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::Cisco::MIBS,
|
||||||
|
%SNMP::Info::CiscoPortSecurity::MIBS,
|
||||||
|
%SNMP::Info::CiscoAgg::MIBS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::Cisco::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoPortSecurity::GLOBALS,
|
||||||
|
%SNMP::Info::CiscoAgg::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::Cisco::FUNCS,
|
||||||
|
%SNMP::Info::CiscoPortSecurity::FUNCS,
|
||||||
|
%SNMP::Info::CiscoAgg::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer3::Cisco::MUNGE,
|
||||||
|
%SNMP::Info::CiscoPortSecurity::MUNGE,
|
||||||
|
%SNMP::Info::CiscoAgg::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub cisco_comm_indexing { return 1; }
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::CiscoSwitch - Base class for L3 Cisco switches
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Eric Miller
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $switch = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
# These arguments are passed directly to SNMP::Session
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $switch->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Base subclass for Cisco Layer 2/3 Switches.
|
||||||
|
|
||||||
|
These devices have switch specific characteristics beyond those in
|
||||||
|
traditional routers covered by L<SNMP::Info::Layer3::Cisco>. For example,
|
||||||
|
port security interface information from L<SNMP::Info::CiscoPortSecurity>.
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
|
my $swich = new SNMP::Info::Layer3::CiscoSwitch(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoPortSecurity
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3::Cisco
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
|
||||||
|
requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $switch->cisco_comm_indexing()
|
||||||
|
|
||||||
|
Returns 1. Use vlan indexing.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer3::Cisco
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoAgg/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
|
||||||
|
details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.56';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
||||||
@@ -101,7 +101,7 @@ sub mac {
|
|||||||
my $i_mac = $contivity->i_mac();
|
my $i_mac = $contivity->i_mac();
|
||||||
|
|
||||||
# Return Interface MAC
|
# Return Interface MAC
|
||||||
foreach my $entry ( keys %$i_mac ) {
|
foreach my $entry ( sort keys %$i_mac ) {
|
||||||
my $sn = $i_mac->{$entry};
|
my $sn = $i_mac->{$entry};
|
||||||
next unless $sn;
|
next unless $sn;
|
||||||
return $sn;
|
return $sn;
|
||||||
306
lib/SNMP/Info/Layer3/Cumulus.pm
Normal file
306
lib/SNMP/Info/Layer3/Cumulus.pm
Normal file
@@ -0,0 +1,306 @@
|
|||||||
|
# SNMP::Info::Layer3::Cumulus
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Bill Fenner and Oliver Gorwits
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the University of California, Santa Cruz nor the
|
||||||
|
# names of its contributors may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer3::Cumulus;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::Cumulus::ISA = qw/
|
||||||
|
SNMP::Info::IEEE802dot3ad
|
||||||
|
SNMP::Info::LLDP
|
||||||
|
SNMP::Info::Layer3
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::Layer3::Cumulus::EXPORT_OK = qw/ agg_ports /;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
|
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||||
|
'UCD-SNMP-MIB' => 'versionTag',
|
||||||
|
'NET-SNMP-TC' => 'netSnmpAliasDomain',
|
||||||
|
'HOST-RESOURCES-MIB' => 'hrSystem',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
'netsnmp_vers' => 'versionTag',
|
||||||
|
'hrSystemUptime' => 'hrSystemUptime',
|
||||||
|
'chassis' => 'entPhysicalDescr.1',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
%SNMP::Info::IEEE802dot3ad::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
|
%SNMP::Info::IEEE802dot3ad::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub vendor { return 'Cumulus Networks' }
|
||||||
|
|
||||||
|
sub os { return 'cumulus' }
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $netsnmp = shift;
|
||||||
|
my $descr = $netsnmp->description();
|
||||||
|
|
||||||
|
# STRING: "Cumulus Linux version 3.5.1 running on innotek GmbH VirtualBox"
|
||||||
|
return $1 if ( $descr =~ /^Cumulus Linux.+(\d+\.\d+\.\d+)\s/ );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $netsnmp = shift;
|
||||||
|
my $chassis = $netsnmp->chassis();
|
||||||
|
|
||||||
|
# STRING: "Cumulus Networks VX Chassis"
|
||||||
|
return $1 if ( $chassis =~ /^Cumulus Networks\s+(.+)/ );
|
||||||
|
return $netsnmp->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
# sysUptime gives us the time since the SNMP daemon has restarted,
|
||||||
|
# so return the system uptime since that's probably what the user
|
||||||
|
# wants. (Caution: this could cause trouble if using
|
||||||
|
# sysUptime-based discontinuity timers or other TimeStamp
|
||||||
|
# objects.
|
||||||
|
sub uptime {
|
||||||
|
my $netsnmp = shift;
|
||||||
|
my $uptime;
|
||||||
|
|
||||||
|
$uptime = $netsnmp->hrSystemUptime();
|
||||||
|
return $uptime if defined $uptime;
|
||||||
|
|
||||||
|
return $netsnmp->SUPER::uptime();
|
||||||
|
}
|
||||||
|
|
||||||
|
# ifDescr is the same for all interfaces in a class, but the ifName is
|
||||||
|
# unique, so let's use that for port name. If all else fails,
|
||||||
|
# concatentate ifDesc and ifIndex.
|
||||||
|
# (code from SNMP/Info/Layer2/Netgear.pm)
|
||||||
|
sub interfaces {
|
||||||
|
my $netsnmp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $interfaces = $netsnmp->i_index($partial) || {};
|
||||||
|
my $i_descr = $netsnmp->i_description($partial) || {};
|
||||||
|
my $i_name = $netsnmp->i_name($partial);
|
||||||
|
my $i_isset = ();
|
||||||
|
# Replace the description with the ifName field, if set
|
||||||
|
foreach my $iid ( keys %$i_name ) {
|
||||||
|
my $name = $i_name->{$iid};
|
||||||
|
next unless defined $name;
|
||||||
|
if (defined $name and $name !~ /^\s*$/) {
|
||||||
|
$interfaces->{$iid} = $name;
|
||||||
|
$i_isset->{$iid} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Replace the Index with the ifDescr field, appended with index
|
||||||
|
# number, to deal with devices with non-unique ifDescr.
|
||||||
|
foreach my $iid ( keys %$i_descr ) {
|
||||||
|
my $port = $i_descr->{$iid} . '-' . $iid;
|
||||||
|
next unless defined $port;
|
||||||
|
next if (defined $i_isset->{$iid} and $i_isset->{$iid} == 1);
|
||||||
|
$interfaces->{$iid} = $port;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $interfaces;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_ignore {
|
||||||
|
my $l3 = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $interfaces = $l3->interfaces($partial) || {};
|
||||||
|
|
||||||
|
my %i_ignore;
|
||||||
|
foreach my $if ( keys %$interfaces ) {
|
||||||
|
|
||||||
|
# vlan1@br0 or peerlink.4094@peerlink
|
||||||
|
if ( $interfaces->{$if} =~ /@/i ) {
|
||||||
|
$i_ignore{$if}++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%i_ignore;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub agg_ports { return agg_ports_lag(@_) }
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Cumulus - SNMP Interface to Cumulus Networks Devices
|
||||||
|
|
||||||
|
=head1 AUTHORS
|
||||||
|
|
||||||
|
Oliver Gorwits - based on Layer3::NetSNMP implementation
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $cumulus = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $cumulus->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Cumulus Networks devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<UCD-SNMP-MIB>
|
||||||
|
|
||||||
|
=item F<NET-SNMP-TC>
|
||||||
|
|
||||||
|
=item F<HOST-RESOURCES-MIB>
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::IEEE802dot3ad> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $cumulus->vendor()
|
||||||
|
|
||||||
|
Returns 'Cumulus Networks'.
|
||||||
|
|
||||||
|
=item $cumulus->os()
|
||||||
|
|
||||||
|
Returns 'cumulus'.
|
||||||
|
|
||||||
|
=item $cumulus->os_ver()
|
||||||
|
|
||||||
|
Returns the software version extracted from C<sysDescr>.
|
||||||
|
|
||||||
|
=item $cumulus->uptime()
|
||||||
|
|
||||||
|
Returns the system uptime instead of the agent uptime.
|
||||||
|
NOTE: discontinuity timers and other Time Stamp based objects
|
||||||
|
are based on agent uptime, so use orig_uptime().
|
||||||
|
|
||||||
|
=item $l3->model()
|
||||||
|
|
||||||
|
Returns the chassis type.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP> for details.
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::IEEE802dot3ad
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||||
|
|
||||||
|
=head1 TABLE ENTRIES
|
||||||
|
|
||||||
|
These are methods that return tables of information in the form of a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $cumulus->interfaces()
|
||||||
|
|
||||||
|
Uses the i_name() field.
|
||||||
|
|
||||||
|
=item $cumulus->i_ignore()
|
||||||
|
|
||||||
|
Ignores interfaces with an "@" in them.
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
218
lib/SNMP/Info/Layer3/DLink.pm
Normal file
218
lib/SNMP/Info/Layer3/DLink.pm
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
package SNMP::Info::Layer3::DLink;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::DLink::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
||||||
|
@SNMP::Info::Layer3::DLink::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.56';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
|
'DLINK-ID-REC-MIB' => 'dlink',
|
||||||
|
'SWPRIMGMT-DES3200-MIB' => 'dlink-des3200SeriesProd',
|
||||||
|
'SWPRIMGMT-DES30XXP-MIB' => 'dlink-des30xxproductProd',
|
||||||
|
'SWPRIMGMT-DES1228ME-MIB' => 'dlink-des1228MEproductProd',
|
||||||
|
'SWDES3528-52PRIMGMT-MIB' => 'dlink-Des3500Series',
|
||||||
|
'DES-1210-28-AX' => 'des-1210-28ax',
|
||||||
|
'DES-1210-10MEbx' => 'des-1210-10mebx',
|
||||||
|
'DES-1210-26MEbx' => 'des-1210-26mebx',
|
||||||
|
'DES-1210-52-BX' => 'des-1210-52bx',
|
||||||
|
'DES-1210-52-CX' => 'des-1210-52-cx',
|
||||||
|
'DGS-1210-24-AX' => 'dgs-1210-24ax',
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
'dlink_fw' => 'probeSoftwareRev',
|
||||||
|
'dlink_hw' => 'probeHardwareRev',
|
||||||
|
# Replaced with OID since these MIBs are no longer in the netdisco-mibs
|
||||||
|
# collection. Commit reference of MIB removal in netdisco-mibs:
|
||||||
|
# d6ec3f15861e28d220a681e7fa3b222c21664fda
|
||||||
|
'dlink_stp_i_root_port' => '.1.3.6.1.4.1.171.12.15.2.3.1.18',
|
||||||
|
'dlink_serial_no' => '.1.3.6.1.4.1.171.12.1.1.12',
|
||||||
|
# TODO: hardcoded OIDs using get() in method calls below should be
|
||||||
|
# replaced similarly and use the library getter methods
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $dlink=shift;
|
||||||
|
my $id = $dlink->id();
|
||||||
|
my $model = &SNMP::translateObj($id);
|
||||||
|
return $id unless defined $model;
|
||||||
|
if (defined $model && $model !~ /dlink-products/) {
|
||||||
|
return $model;
|
||||||
|
} else {
|
||||||
|
#If don't have a device MIB
|
||||||
|
return $dlink->description();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'dlink';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $dlink = shift;
|
||||||
|
my $model = $dlink->model();
|
||||||
|
my $id = $dlink->id();
|
||||||
|
my $serial;
|
||||||
|
if ($model =~ /1210/) {
|
||||||
|
#Due to the zoo of MIB from DLink by 1210 series
|
||||||
|
$serial->{0} = $dlink->session()->get($id.'.1.30.0');
|
||||||
|
} else {
|
||||||
|
$serial = $dlink->dlink_serial_no();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $serial->{0} if ( defined $serial->{0} and $serial->{0} !~ /^\s*$/ and $serial->{0} !~ 'NOSUCHOBJECT' );
|
||||||
|
return $dlink->SUPER::serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fwver {
|
||||||
|
my $dlink=shift;
|
||||||
|
my $model = $dlink->model();
|
||||||
|
my $id = $dlink->id();
|
||||||
|
my $fw;
|
||||||
|
if ($model =~ /1210/) {
|
||||||
|
#Due to the zoo of MIB from DLink by 1210 series
|
||||||
|
$fw->{0} = $dlink->session()->get($id.'.1.3.0');
|
||||||
|
} else {
|
||||||
|
$fw = $dlink->dlink_fw();
|
||||||
|
}
|
||||||
|
return $fw->{0} if ( defined $fw->{0} and $fw->{0} !~ /^\s*$/ and $fw->{0} !~ 'NOSUCHOBJECT');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hwver {
|
||||||
|
my $dlink=shift;
|
||||||
|
my $model = $dlink->model();
|
||||||
|
my $id = $dlink->id();
|
||||||
|
my $hw;
|
||||||
|
if ($model =~ /1210/) {
|
||||||
|
#Due to the zoo of MIB from DLink by 1210 series
|
||||||
|
$hw->{0} = $dlink->session()->get($id.'.1.2.0');
|
||||||
|
} else {
|
||||||
|
$hw = $dlink->dlink_hw();
|
||||||
|
}
|
||||||
|
return $hw->{0} if ( defined $hw->{0} and $hw->{0} !~ /^\s*$/ and $hw->{0} !~ 'NOSUCHOBJECT');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub stp_i_root_port {
|
||||||
|
my $dlink=shift;
|
||||||
|
my $model = $dlink->model();
|
||||||
|
my $id = $dlink->id();
|
||||||
|
my $stp_i_root_port;
|
||||||
|
if ($model =~ /1210-(?:10|26)/) {
|
||||||
|
#Due to the zoo of MIB from DLink by 1210 series
|
||||||
|
$stp_i_root_port->{0} = $dlink->session()->get($id.'.6.1.13.0');
|
||||||
|
} else {
|
||||||
|
$stp_i_root_port = $dlink->dlink_stp_i_root_port();
|
||||||
|
}
|
||||||
|
return $stp_i_root_port if ( defined $stp_i_root_port->{0} and $stp_i_root_port->{0} !~ /^\s*$/ and $stp_i_root_port->{0} !~ 'NOSUCHOBJECT');
|
||||||
|
return $dlink->SUPER::stp_i_root_port();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::DLink - SNMP Interface to DLink Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $dlink = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $dlink->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Vyatta Devices running dlink.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $dlink->model()
|
||||||
|
|
||||||
|
Returns the ID or else description.
|
||||||
|
|
||||||
|
=item $dlink->vendor()
|
||||||
|
|
||||||
|
Returns 'dlink'.
|
||||||
|
|
||||||
|
=item $dlink->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=item $dlink->fwver()
|
||||||
|
|
||||||
|
Returns the firmware version.
|
||||||
|
|
||||||
|
=item $dlink->hwver()
|
||||||
|
|
||||||
|
Returns the hardware version.
|
||||||
|
|
||||||
|
=item $dlink->stp_i_root_port()
|
||||||
|
|
||||||
|
Returns the STP root port.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user