Compare commits

...

343 Commits

Author SHA1 Message Date
Eric A. Miller
0755487e02 release 3.54 2018-04-01 22:22:32 -04:00
Eric A. Miller
afeb37ae5e Additional test classes 2018-04-01 22:09:50 -04:00
Eric A. Miller
cc05fb927f Track down mysterious CARP_TRACE, don’t try to AUTOLOAD or create method through can()
Remove test for previous appearance in _global
2018-04-01 22:04:07 -04:00
Eric A. Miller
facdf5b7a7 Relax validation of MIB access checks until we have broader test coverage that this is a non-breaking change
Mark corresponding test TODO in Info test class
2018-04-01 21:50:26 -04:00
Eric A. Miller
66bedd4d54 Load MIB for leafs referenced within class so we can instantiate class
Aggregate test class
2018-04-01 21:03:40 -04:00
Eric A. Miller
3a3c1efe46 Explicit returns
Layer2::3Com test class
2018-04-01 21:01:06 -04:00
Eric A. Miller
1a069c2b52 Make sure MIB leaf is actually in the MIB we're loading, not the imports
Add initial Layer1::Bayhub and Layer2::Baystack test classes
2018-04-01 20:59:32 -04:00
Eric A. Miller
f7de9ffbc6 Explicit return 2018-04-01 20:49:23 -04:00
Eric A. Miller
3c6cfa8ecf Cover overridden layers in Layer1::Cyclades 2018-04-01 20:46:02 -04:00
Eric A. Miller
585d01895b Use cmp_deeply versus is_deeply for better diagnostics 2018-04-01 20:44:17 -04:00
Eric A. Miller
63cac2a3a8 Test harness only checks for existence of data structures in constructor test
Test harness skips globals, funcs, mibs, and munges tests if the hash is empty
Add test to check that subclass methods have coverage with ability to mark class as TODO
2018-04-01 20:28:58 -04:00
Eric A. Miller
0623fbfdf1 Update changes for last commit set 2018-04-01 20:27:11 -04:00
Eric A. Miller
0c711269ae #141 Avocent ACS files for correct discovery in Netdisco
Add support for ACS 5K/6K/8K terminal servers in Layer1::Cyclades requires new MIBs
Layer1::Cyclades test class
2018-03-31 23:25:10 -04:00
Eric A. Miller
f676d27a3b Updated Layer3::Timetra requires latest MIBs
Update Changes and MANIFEST for recent changes
2018-03-30 17:34:35 -04:00
Eric A. Miller
64167df588 #215 Nokia/Alcatel-Lucent 7705 LLDP
#220 Alcatel-Lucent / Nokia SR 7750 missing neighbors
Improve Layer3::Timetra model detection
Layer3::Timetra test class
2018-03-30 17:17:44 -04:00
Eric A. Miller
398f3ee74b Layer1::Asante test class
Fix logic in Layer1::Asante i_up() method
Don't end a subroutine with a conditional block
2018-03-30 17:11:22 -04:00
Eric A. Miller
125f02b8a2 Layer1::Allied test class
Don't end a subroutine with a conditional block
2018-03-30 17:08:39 -04:00
Eric A. Miller
eeeabeec94 Sort keys in globals, funcs, mibs, and munges tests so that reported order is consistent between test runs 2018-03-30 17:06:00 -04:00
Eric A. Miller
5fe0ebaeda Fix typo in MIB leaf
Don't use MIB leafs that are not-accessible according to MIB
2018-03-30 17:03:48 -04:00
Eric A. Miller
fda59f51f7 Correct comment on table containing ifName 2018-03-29 15:50:34 -04:00
Eric A. Miller
e8de74c6a5 Move common device_type() tests to base test class 2018-03-29 15:49:13 -04:00
Eric A. Miller
da6716b107 Make class names reflect new directory structure 2018-03-29 12:25:12 -04:00
Eric A. Miller
62267f4e8e Change Test class naming to minimize directories 2018-03-29 12:18:22 -04:00
Eric A. Miller
fd1c91edac Move common test methods to base class and mark them to be skipped in base class itself 2018-03-28 23:12:25 -04:00
Eric A. Miller
a0b2010994 Comment on todo_skip tests in update() 2018-03-28 22:47:07 -04:00
Eric A. Miller
bda796ae98 Mark failing v3 context update tests as todo_skip 2018-03-27 22:25:02 -04:00
Eric A. Miller
8b3b03b312 Create a new v3 based object for to test update() with Context 2018-03-27 21:53:05 -04:00
Eric A. Miller
cbc756a3f8 Test harness improvements and test coverage of all methods within SNMP::Info base class 2018-03-27 21:07:04 -04:00
Eric A. Miller
9af7a7661c Fix logic for determining if MIB leaf supports set operations 2018-03-27 21:05:26 -04:00
Eric A. Miller
eab89e4736 Just return rather than create anon sub 2018-03-26 23:52:31 -04:00
Eric A. Miller
8391cee4f3 Remove unused variables from _load_attr method 2018-03-26 23:32:48 -04:00
Eric A. Miller
fcd0e30d64 If we don't have valid arguments stop and return, we also won't be able to report attr or val. 2018-03-26 20:57:46 -04:00
Eric A. Miller
c921e8b35c Mark problematic update() tests as todo_skip 2018-03-22 23:19:12 -04:00
Eric A. Miller
60d5591401 More base class test coverage 2018-03-22 22:52:58 -04:00
Oliver Gorwits
98e8e57747 release 3.53 2018-03-22 21:36:10 +00:00
Eric A. Miller
1e5eda927c Remove problematic update() tests 2018-03-22 01:01:09 -04:00
Eric A. Miller
c6eb73bc7b Update changes 2018-03-22 00:38:49 -04:00
Eric A. Miller
c49d8ab921 Test::Exception version recommended by test system 2018-03-22 00:38:04 -04:00
Eric A. Miller
27b310ee68 Merge branch 'test-coverage' 2018-03-22 00:20:03 -04:00
Eric A. Miller
f6d0fb1d7e Don't use indirect syntax for new() 2018-03-22 00:15:06 -04:00
Eric A. Miller
ddc5fd8c96 Add test harness and inital test coverage of the base class. 2018-03-21 23:45:00 -04:00
Eric A. Miller
26b13fbcd4 Ignore Devel::Cover files 2018-03-21 23:43:27 -04:00
Eric A. Miller
91b98085f6 Fix AUTOLOAD / can() bug that could result in DESTROY being redefined and dynamic methods not being added to the symbol table. 2018-03-21 23:41:16 -04:00
Eric A. Miller
1c948d6e45 Prevent warning in _get_topo_data() from undef arg 2018-03-21 23:33:10 -04:00
Eric A. Miller
76cbb05f19 Identify where base MIBs are from and include base MIBs for cases where Net-SNMP library doesn't have them complied in. 2018-03-21 23:30:13 -04:00
Oliver Gorwits
e7fcd98107 #12 add Cisco PortFast support via CiscoStpExtensions::i_faststart_enabled 2018-03-21 10:35:09 +00:00
Jeroen van Ingen
090d94191b Update README and Netgear
- Reflect Netgear FSM change by paecker in README
- Remove pipe from character class in Netgear GSM/FSM match
2018-03-20 11:47:57 +01:00
Jeroen van Ingen Schenau
2c3a6a3c6e Merge pull request #251 from paecker/netgear_fsm_fix
modified Netgear.pm for serial/version compatibility to FSM series
2018-03-20 11:42:51 +01:00
Christoph Neuhaus
814083e2fa modified Netgear.pm for serial/model compatibility to FSM73xx series 2018-03-20 10:34:12 +01:00
Oliver Gorwits
7621b30bc2 release 3.52 2018-03-19 18:07:51 +00:00
Oliver Gorwits
9e2e55dcb3 release 3.51 2018-03-17 15:42:41 +00:00
Oliver Gorwits
f8a1d5bc7a set fallback for nonmatching interfaces 2018-03-17 15:35:55 +00:00
Oliver Gorwits
1a65be101e update docs 2018-03-17 14:26:30 +00:00
Oliver Gorwits
4c5d0a5695 better interface naming for Ubiquiti 2018-03-17 14:18:09 +00:00
Eric A. Miller
f8b3381d16 Modify mock utility for new location and to work under a perlbrew environment 2018-03-15 23:59:04 -04:00
Eric A. Miller
8a41e5063a release 3.50 2018-03-14 16:35:08 -04:00
Eric A. Miller
24a84cdc25 #198 Add Support for Gigamon devices 2018-03-14 15:59:23 -04:00
Eric A. Miller
25354e1f3e Test agent name keeps changing 2018-03-13 22:28:34 -04:00
Eric A. Miller
2025044952 #226 Avaya VSP devices - no ifAlias 2018-03-13 22:16:43 -04:00
Eric A. Miller
d00dcdad85 #227 remove bogus can() check in _set() 2018-03-12 17:34:28 -04:00
Eric A. Miller
fc069c13f5 Test SNMP agent name change 2018-03-12 17:32:57 -04:00
Eric A. Miller
69430f4a21 Make Test::Perl::Critic pass 2018-03-12 17:31:18 -04:00
Eric A. Miller
a83855157b Fix SNMP::Info::IEEE802dot3ad when more than 1 LAG 2018-03-10 19:01:31 -05:00
Oliver Gorwits
5ce80ba4ee release 3.49 2018-03-03 18:25:08 +00:00
Oliver Gorwits
16e96d9fcf better interface names for Cumulus 2018-03-03 17:59:59 +00:00
Oliver Gorwits
ac753c5970 try github url instead of sourceforge 2018-03-03 17:37:57 +00:00
Oliver Gorwits
313e187399 Revert "remove downlaod of mibs from travis test"
This reverts commit f5aaee6c89.
2018-03-03 17:36:41 +00:00
Oliver Gorwits
f5aaee6c89 remove downlaod of mibs from travis test 2018-03-03 17:24:37 +00:00
Oliver Gorwits
c8b4f8f4fd release 3.48 2018-03-03 17:20:24 +00:00
Oliver Gorwits
6113dd3b98 fix pod for new Cumulus class 2018-03-03 17:18:29 +00:00
Oliver Gorwits
e21f22bb3b initial Cumulus Networks support 2018-03-02 23:42:46 +00:00
Oliver Gorwits
bb4578dea5 release 3.47 2018-02-27 22:51:38 +00:00
Oliver Gorwits
e83ca6fbe3 fix test 2018-02-27 22:49:44 +00:00
Oliver Gorwits
ae9963cf85 Add LLDP-MIB::lldpXMedRemInventoryTable methods 2018-02-27 22:48:26 +00:00
Oliver Gorwits
650aef9c2d release 3.46 2018-02-17 13:05:25 +00:00
Oliver Gorwits
397b14da22 Add method to show err-disable cause on Cisco (#248)
Method i_err_disable_cause implemented on CiscoPortSecurity.pm. Returns
sparse data: ifIndex -> textual err-disable cause, for interfaces that
are err-disabled.
2018-02-17 11:47:56 +00:00
Oliver Gorwits
0f00322e03 release 3.45 2018-02-14 22:16:26 +00:00
Oliver Gorwits
e2b688077e Enable Layer3::Foundry for Brocade VDX platform 2018-02-14 22:01:04 +00:00
Oliver Gorwits
4afbd37cbd fix #222 #238 #239 handle BayStack switches with port index 128 (zoeloe) 2018-02-12 22:15:38 +00:00
Oliver Gorwits
40d3340ac5 release 3.44 2018-02-12 19:32:53 +00:00
Oliver Gorwits
9bb71d3df7 Merge remote-tracking branch 'origin/ipv6-prefixlen' 2018-02-12 19:27:59 +00:00
Jeroen van Ingen Schenau
4860447b06 Merge pull request #247 from laelly/master
Improve F10 OS version detection
2018-02-12 09:10:05 +01:00
laelly
445b3f19a3 Improve F10 OS version detection 2018-02-10 01:50:27 +01:00
Jeroen van Ingen
32efd26999 Alternative ipv6_addr_prefixlength implementation 2018-02-05 20:23:06 +01:00
Oliver Gorwits
f2f95150bd release 3.43 2018-02-02 18:03:34 +00:00
Oliver Gorwits
f210bf8812 Fix identification of Brocade CES 2018-02-02 17:51:28 +00:00
Oliver Gorwits
c30e1a2446 release 3.42 2018-02-02 16:42:11 +00:00
Oliver Gorwits
10392fc08e IPv6 Prefix Length support via IPv6::ipv6_addr_prefixlength 2018-02-02 16:41:05 +00:00
Oliver Gorwits
df10473fb5 change in name of test host?! 2018-02-02 15:14:14 +00:00
Oliver Gorwits
6505e7e85f release 3.41 2018-02-01 22:55:12 +00:00
Oliver Gorwits
ffd80722b8 fix travis notifications 2018-02-01 20:59:14 +00:00
Oliver Gorwits
6bd5bb3dda change travis on success [skip ci] 2018-01-31 18:09:48 +00:00
Oliver Gorwits
83dec3c1d6 add irc notifications 2018-01-30 16:23:21 +00:00
Oliver Gorwits
82f2a83eec add adtran docs 2018-01-30 16:13:54 +00:00
Oliver Gorwits
5194af9d91 add dlink docs 2018-01-30 16:07:07 +00:00
Oliver Gorwits
a4c76d2fb9 add vyos docs 2018-01-30 16:02:06 +00:00
Oliver Gorwits
57a35075fa small bits of missing POD 2018-01-30 15:55:25 +00:00
Oliver Gorwits
fb69a60b45 add readme and update meta 2018-01-30 15:41:53 +00:00
Oliver Gorwits
2625381e5b fix Using a hash as a reference is deprecated warning 2018-01-30 15:38:43 +00:00
Oliver Gorwits
1c048320a6 \o/ working, quieten debug 2018-01-30 15:34:37 +00:00
Oliver Gorwits
c5c25cee7f try setting MIBS 2018-01-30 15:25:32 +00:00
Oliver Gorwits
dee8177a67 more debu 2018-01-30 14:25:44 +00:00
Oliver Gorwits
abbe040351 try snmpconf 2018-01-30 11:18:39 +00:00
Oliver Gorwits
29a0f849f1 fix typo 2018-01-30 10:58:33 +00:00
Oliver Gorwits
7e524f46c6 different command order 2018-01-30 10:50:22 +00:00
Oliver Gorwits
1146e99de2 different source for mibs 2018-01-30 10:47:24 +00:00
Oliver Gorwits
6740929d41 try to fix escaping 2018-01-30 10:22:27 +00:00
Oliver Gorwits
831788c1c9 try to fix escaping 2018-01-30 10:15:39 +00:00
Oliver Gorwits
7e9d4520af try to fix escaping 2018-01-30 10:08:11 +00:00
Oliver Gorwits
c4317e6e6b reorder build commands 2018-01-30 10:05:25 +00:00
Oliver Gorwits
e4e3debce0 reorder build commands 2018-01-30 09:54:08 +00:00
Oliver Gorwits
a5b7431070 try combining 2018-01-29 23:36:53 +00:00
Oliver Gorwits
054808f59d revert debug 2018-01-29 23:22:21 +00:00
Oliver Gorwits
0b313d627e more deps for MRO 2018-01-29 23:15:14 +00:00
Oliver Gorwits
9813b9db90 try more debug 2018-01-29 23:12:06 +00:00
Oliver Gorwits
9a4e024abb cd back to dist to build 2018-01-29 22:59:17 +00:00
Oliver Gorwits
04a669157f try building net-snmp 2018-01-29 22:48:39 +00:00
Oliver Gorwits
a364c1512d add libsnmp-perl dependency to travis 2018-01-29 22:35:00 +00:00
Oliver Gorwits
0451e6f0a6 add travis config file 2018-01-29 22:30:58 +00:00
Oliver Gorwits
b7f87d9e82 add real snmp test against demo.snmplabs.com 2018-01-28 21:28:21 +00:00
Oliver Gorwits
e2713fb57a fix versionsync test 2018-01-28 20:00:04 +00:00
Oliver Gorwits
c8eff78d34 change Checkpoint to CheckPoint 2018-01-28 19:57:29 +00:00
Oliver Gorwits
04ca5793fa fix for doc tests 2018-01-28 19:55:28 +00:00
Oliver Gorwits
83d00ee9c7 release 3.40 2018-01-28 18:53:50 +00:00
Oliver Gorwits
bf56ed2540 update changes 2018-01-28 18:50:44 +00:00
Oliver Gorwits
e75aba14b4 Merge pull request #240 from earendilfr/master
Improvement for Checkpoint, CiscoSB and H3C devices
2018-01-28 18:45:29 +00:00
Oliver Gorwits
5d2d2d416f Merge pull request #244 from pyro3d/master
Add Adtran Support, Some fixes for Juniper
2018-01-28 18:43:07 +00:00
LBegnaud
62799bfc9d Add support for Vyatta/VyOS (#241) 2018-01-28 18:39:43 +00:00
dtuecks
df8fbc3c03 Nexus.pm prints output even if $self->debug() is unset. (#243) 2018-01-28 18:36:06 +00:00
Ambroise
604de81ab8 Nexus vrf support (#246)
Initial commit to add the suport of the Interfaces in VRF for Nexus devices
To tune to correctly retrieve the context for the VRF

On Nexus device, you need to add the following command for each VRF:
snmp-server context <context> vrf <vrf>
2018-01-28 18:35:22 +00:00
Ryan Gasik
ed14b09567 Fix version number in Adtran 2018-01-12 19:28:30 -08:00
Ryan Gasik
800758815c Add Adtran, improve Juniper 2018-01-12 19:21:37 -08:00
Ambroise
058b74bd63 Fix some model error for 3Com and H3C devices 2017-12-21 16:54:22 +01:00
Ambroise
02a52a4e09 Some Cisco SB switches work as Layer3 devices + avoid a numbers of model type 2017-12-21 16:45:20 +01:00
Ambroise
74ddc93f7f Add a real support for Checkpoint devies through SNMP 2017-12-21 16:42:32 +01:00
Oliver Gorwits
eb8af0c81b release 3.39 2017-12-17 20:19:54 +00:00
LBegnaud
bd49274808 Enhanced Ubiquiti device support (#236)
* Include EdgeSwitch and update subs to support more UBNT devices

* Adjust EdgeRouter model logic to use only standard OIDs

* Comments and code cleanup

* cleanup

* Include ER Infinity
2017-12-02 20:59:34 +00:00
Frank Maas
8b1547c589 Correct location of make_snmpdata.pl (#234)
Changed 't/util' to 'contrib/util'
2017-12-02 20:54:11 +00:00
Hannu Teulahti
c093f83848 Update HP.pm (#233)
Add missing J9774A -model
2017-12-02 20:53:53 +00:00
Jeroen van Ingen Schenau
c0b28c38c5 Merge pull request #235 from laelly/master
fix typo in CiscoASA.pm
2017-11-20 08:35:33 +01:00
laelly
4621a0898f fix typo 2017-11-18 14:53:40 +01:00
Oliver Gorwits
6f02e1035f release 3.38 2017-10-23 20:02:45 +01:00
Jeroen van Ingen
d4ae9237a6 Improve generic Info::Layer3 serial number detection
Serial numbers weren't reported for stackable Layer3::H3C devices, even
when not actually stacked. Report serial number not only if the entity
has no parent, but also if it has a parent but is of type "chassis".

This fixes #232.
2017-10-23 15:45:04 +02:00
Nathan Neulinger
914eb05a60 fdp_id masked via GLOBALS, rename to fdp_gid to match CDP module (#231) 2017-10-11 22:02:44 +01:00
Jeroen van Ingen
4da17227c1 Add newer data rates (mcs 16-23) for Cisco WLAN
Data rates up to MCS 15 (two spatial streams) at 20 MHz and 40 MHz were
defined; added MCS 16 through 23.
Decoding MCS rates at SS1 and SS2 not implemented yet.
2017-07-27 17:26:27 +02:00
operatorofhell
20014cab29 remove more bogus MAC's from Cisco ASA (#225) 2017-07-20 14:16:47 +01:00
Oliver Gorwits
9d62361c8a release 3.37 2017-07-11 21:03:39 +01:00
Oliver Gorwits
260992b7bf fix push_ver for new file loc 2017-07-11 21:02:20 +01:00
Oliver Gorwits
b9cd429551 Layer3::Juniper fixed to return os_ver for JUNOS 14.x and higher 2017-07-11 21:01:33 +01:00
Oliver Gorwits
2d18a75ad7 release 3.36 2017-06-28 22:56:35 +01:00
Oliver Gorwits
0cfc501f83 add Module::Build distmeta 2017-06-28 22:50:32 +01:00
Oliver Gorwits
44b19153f1 migrate from EUMM to Module::Build 2017-06-28 22:45:33 +01:00
Oliver Gorwits
433b87b9df release 3.35 2017-06-28 20:23:44 +01:00
Oliver Gorwits
f9464bcd6c #211 f5 class should respect UseEnums when faking i_type 2017-06-28 17:36:23 +01:00
Jeroen van Ingen
f5c5ec202a Include loading of LLDP-EXT-MED-MIB in LLDP.pm 2017-06-01 18:45:52 +02:00
Kirill Petrov
4b64a70830 Create DLink.pm (K.Petrov) (#223)
* Create DLink.pm

Create DLink class

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm

* Update Info.pm

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm

* Update DLink.pm
2017-05-23 08:16:31 +01:00
Endgame IT
4c8f7e298e fix error if debug is enabled (#213) 2017-02-27 14:19:05 +00:00
Oliver Gorwits
2d539be214 #50 remove interface specific part from vrf interfaces on IOS (#210)
* remove interface specific part from vrf interfaces in IOS

* Update ChangeLog

* Update ChangeLog
2017-02-04 18:35:50 +00:00
Oliver Gorwits
c35d5814b4 fix #180 support CiscoConfig on Nexus (#209)
* fix #180 support CiscoConfig on Nexus

* Update ChangeLog
2017-02-04 18:15:23 +00:00
Justin Hunter
7d19ad401b Merge branch 'master' of github.com:netdisco/snmp-info 2017-01-13 21:37:48 -07:00
Oliver Gorwits
985577ce79 Added issues template 2017-01-06 12:53:32 +00:00
Oliver Gorwits
24e20101d5 release 3.34 2016-11-20 17:45:49 +00:00
Jeroen van Ingen
76c884eb9f Document new L7::CiscoIPS support in ChangeLog 2016-10-19 10:36:42 +02:00
Jeroen van Ingen
7041dbab27 Merge remote-tracking branch 'operatorofhell/ciscoips' 2016-10-19 10:30:13 +02:00
Moritz Kraus
661051fde4 Documentation for Info::Layer7::CiscoIPS written 2016-10-12 10:52:58 +02:00
Justin Hunter
36cba5ce18 * better handling of i_vlan_membership()
* make funcs() for ALD related functions to ensure mib loaded
2016-09-19 14:46:27 -07:00
Justin Hunter
4753f30c53 return the original result unless we have the proper mapping tables 2016-09-09 16:44:04 -07:00
Justin Hunter
d719e240d2 return proper VLAN IDs for Juniper 2016-09-09 14:45:33 -07:00
Justin Hunter
e35faee278 add sensible fallback for native vlan 2016-09-09 14:31:22 -07:00
Moritz Kraus
fd3417a09a faked e_index with e_id 2016-09-09 15:59:52 +02:00
Moritz Kraus
1719709648 override e_index for IPS with e_id 2016-09-09 15:53:30 +02:00
Moritz Kraus
d37aa3378e Added sub productname 2016-09-08 17:41:11 +02:00
Moritz Kraus
f017d32860 added CiscoIPS Class 2016-09-08 16:59:53 +02:00
Justin Hunter
7b23edcb29 remove trailing comma from Juniper os_ver 2016-09-01 16:22:34 -07:00
Jeroen van Ingen
e48c4b4e84 Fix errors with serial number on Nexus and make Nexus.pm code style more consistent (#269) 2016-07-18 10:35:33 +02:00
Oliver Gorwits
aeca44c7aa Serial number on Nexus 9372 (genereic check for ID before using) (M. Caines) 2016-05-17 16:37:36 +01:00
Alexander Hartmaier
af6ae8e419 skip everything in the xt directory regardless of its name 2016-04-27 18:04:54 +02:00
Oliver Gorwits
5cf88ba3b7 release 3.33 2016-04-27 16:55:11 +01:00
Alexander Hartmaier
f901ba5591 Move author-only tests to xt directory
so they aren't run on installation by users
2016-04-27 17:49:26 +02:00
Alexander Hartmaier
7deea96bc3 Correct device serial number reporting for Cisco Nexus 5k switches with software version >= 7 2016-04-27 16:54:02 +02:00
Alexander Hartmaier
48dfb9bd08 fix Useless use of greediness modifier '?' in regex 2016-04-27 16:23:48 +02:00
Alexander Hartmaier
85372559fa fix t/00_local_pod-coverage.t 2016-04-27 16:18:49 +02:00
Alexander Hartmaier
98972b80ef fix t/00_local_docininfo.t 2016-04-27 15:54:04 +02:00
Alexander Hartmaier
d950244232 fix t/00_local_spelling.t 2016-04-27 15:39:17 +02:00
Oliver Gorwits
fd898829c3 release 3.32 2016-04-26 21:26:39 +01:00
Oliver Gorwits
b0158628bb update copyright year 2016-04-26 21:25:09 +01:00
Oliver Gorwits
0f69a7b391 Removed DeviceMatrix from the distribution 2016-04-26 21:24:27 +01:00
Oliver Gorwits
72773117e5 Respect version/comm/secname on passed Session obj 2016-04-26 21:17:35 +01:00
Oliver Gorwits
06806f5a6e AUTOLOAD typo-catcher search for SNMP::Info no longer anchored 2016-04-26 21:02:57 +01:00
Oliver Gorwits
a01c785ec8 add missing changelog entries GRRRRRR! 2016-04-26 21:01:08 +01:00
Brian De Wolf
502e206371 Improve VG350 detection
Cisco VG350s get detected as Aironet 350s, which breaks CDP collection.  This
overrides the behavior to mark VG350s as generic Cisco Layer3 devices.
2016-04-08 16:18:30 -07:00
Max Kosmach
8fba1bc6a9 Remove L2 from PaloAlto layers 2016-03-19 15:27:21 +03:00
Jeroen van Ingen
f43803d6d4 Merge /u/begemot/snmp-info/ branch support-for-paloalto-v2 into master
https://sourceforge.net/p/snmp-info/code/merge-requests/14/
2016-03-17 13:59:00 +00:00
Jeroen van Ingen
338cba6350 Merge /u/begemot/snmp-info/ branch support-for-vmware-v2 into master
https://sourceforge.net/p/snmp-info/code/merge-requests/15/
2016-03-11 08:16:12 +00:00
Jeroen van Ingen
2a15066062 APC: also report model for PDU products (#61) 2016-03-07 10:12:55 +01:00
Jeroen van Ingen
add86bc566 Add workaround in IPv6.pm to deal with possibly incorrect IPV6-MIB implementations 2016-03-01 08:37:26 +01:00
Jeroen van Ingen
e9b4eaaeb9 Merge /u/begemot/snmp-info/ branch fix-apc-mac into master
http://sourceforge.net/p/snmp-info/code/merge-requests/17/
2016-02-29 09:23:08 +00:00
Oliver Gorwits
07605051f5 Avoid deep recusion when AUTOLOAD and carp collide 2016-02-25 20:02:19 +00:00
Oliver Gorwits
998356484b Merge branch 'master' of ssh://git.code.sf.net/p/snmp-info/code 2016-02-25 17:54:11 +00:00
Oliver Gorwits
e97617ad60 Do not init table cache if Cache provided by user 2016-02-25 08:04:20 +00:00
Oliver Gorwits
9685c3afa8 Support undefined (noSuchIntance) values in Offline mode 2016-02-25 07:49:55 +00:00
Bill Fenner
c209b9a72f Merge /u/begemot/snmp-info/ branch fix-aggregate into master
http://sourceforge.net/p/snmp-info/code/merge-requests/18/
2016-02-24 16:49:59 +00:00
Max Kosmach
4999b769ba fix for 'Use of inherited AUTOLOAD for non-method SNMP::Info::Layer2::HP::agg_ports_ifstack() is deprecated' 2016-02-24 18:50:45 +03:00
Max Kosmach
d8b5ba2161 Add device MAC to APC UPS 2016-02-23 19:20:52 +03:00
Max Kosmach
6f4a4a91cf Add support for propMultiplexor as ifType.
3Com/H3C switches use this type for Link Aggegation without LACP.
2016-02-19 18:46:49 +03:00
Max Kosmach
0049f0d72e Add VMware support 2016-02-17 01:59:24 +03:00
Max Kosmach
4ea66fc0fd Add Palo Alto support 2016-02-17 01:45:32 +03:00
Max Kosmach
8426620572 Add 200 Mbps and 2.0 Gbps aliases to SPEED_MAP (useful withport aggregation) 2016-02-11 21:50:44 +03:00
Oliver Gorwits
76aece0a3f release 3.31 2016-01-22 20:40:09 +00:00
Eric A. Miller
508e7f77a0 Add support for channelized interfaces in L3::Passport.
Channelized interfaces are 40G or 100G ports split into multiple 10G sub ports, reported as Slot.Port.Sub-Port.  Note: Currently ifDescr reports the interface correctly as Slot/Port/Sub-Port on channelized interfaces but ifName misreports as just Slot/Port.
2016-01-19 23:24:00 -05:00
Eric A. Miller
d250a829cb SONMP support for Enhanced Topology Table
The Enhanced Topology Table (s5EnMsTopNmmEnhancedTable) supports channelized interfaces as sub ports and is the only table populated on newer VOSS based devices.
2016-01-19 23:16:21 -05:00
Oliver Gorwits
2fada0c31c Support for CiscoSB OS and Version (D. Tuecks) 2015-11-28 20:19:33 +00:00
Oliver Gorwits
e6ad08733d release 3.30 2015-11-16 21:35:59 +00:00
Eric A. Miller
a8d83b5e1c Statistics in the sysIfxStatTable are 64-bit counters, so they should override the 64-bit methods. See documentation at https://metacpan.org/pod/SNMP::Info#Interface-Statistics for implications. The proprietary MIB does not have 32-bit counters, as a result 32-bit counter methods are not overridden. 2015-11-10 23:05:47 -05:00
Eric A. Miller
9392b74cbc Correct port indexing of newer VSP 4K and 8K in L3::Passport 2015-11-10 22:42:15 -05:00
Eric A. Miller
e09624efd0 RT #106254: Add new sysObjectID mapping for Ubiquiti 2015-11-10 22:21:21 -05:00
Alexander Hartmaier
d4d7429de4 Correct link to MIB tarball 2015-11-10 10:26:31 +01:00
Oliver Gorwits
b97cef86a3 release 3.29 2015-10-13 22:31:16 +01:00
Jeroen van Ingen
70615a172b IPv6 related updated to Info::LLDP
- LLDP::lldp_addr() may now also return neighbor IPv6 addresses
- Make more clear in POD that lldp_addr() will not return all management addresses reported by neighbor, it's a kind of roulette
- Add LLDP::lldp_ipv6() and LLDP::lldp_mac() methods for remote management addresses of types IPv6 and MAC, respectively
2015-09-04 16:15:08 +02:00
Jeroen van Ingen
d399ca90d3 Add IPv6::ipv6_addr() method for decoding table instances to actual addresses 2015-09-01 14:53:34 +02:00
Jeroen van Ingen
bbc9695075 Report L2 capability on PacketFront devices if they have bridge ports 2015-06-29 17:02:48 +02:00
Oliver Gorwits
c8fceeb75b release 3.28 2015-06-18 22:37:26 +01:00
Eric A. Miller
036cb4556e Correct port indexing of VSP 4K in L3::Passport 2015-06-11 18:23:23 -04:00
Jeroen van Ingen
e7b06a0b06 POD fixes in Layer2::Aironet 2015-06-09 17:17:46 +02:00
Jeroen van Ingen
c0067113e9 Add model translation to Layer3::Huawei by loading correct MIB 2015-06-09 17:17:01 +02:00
Jeroen van Ingen
ce4349a188 Try to determine whether a device in generic Layer3::Cisco class needs community based indexing
Layer3 capable Cisco device without a mapping to a more specific class fall
under the Layer3::Cisco class. These can be "real" routers that don't need
community based indexing, or Layer 3 switches that do need community based
indexing (to fetch L2 forwarding tables for different VLANs). Generally, if
community based indexing is needed on a platform, it also supports the
CISCO-VTP-MIB. Dynamically return cisco_comm_indexing based on vtpVersion.
2015-06-02 18:07:50 +02:00
Jeroen van Ingen
224085dfca Add Layer3::Huawei class 2015-06-02 17:17:13 +02:00
Oliver Gorwits
9b3262a5fe release 3.27 2015-05-05 20:32:40 +01:00
Oliver Gorwits
86856b6d54 Only log adding mibdirs at debug level 2 2015-05-05 20:24:44 +01:00
Oliver Gorwits
d5bf08329e [#221] Drop Cisco Voice VLAN 4096 2015-05-05 20:18:48 +01:00
Bill Fenner
60efce8404 Add power supply information
Use ps1_type and ps1_status to report power injector type
(e.g., cdp negotiated, inline power, etc.) and status
(e.g., full power, reduced power)
2015-03-18 19:05:40 +00:00
Oliver Gorwits
83164f456a release 3.26 2015-03-07 17:08:25 +00:00
Oliver Gorwits
c0141bcfee Include Voice VLANs in (tagged) VLAN Membership on Cisco devices 2015-03-07 17:07:17 +00:00
Oliver Gorwits
8dfe9ef1cf Fix typo in MRO::print_superclasses 2015-02-28 21:13:38 +00:00
Oliver Gorwits
73d713b670 Add fan and psu reporting to Layer3::Dell 2015-02-28 12:47:59 +00:00
Oliver Gorwits
db6c3573c1 release 3.25 2015-02-25 22:09:18 +00:00
Jeroen van Ingen
c8cbdaef8a Add more model name mappings to Layer2::HP (includes several 2530 models and 5400R series) 2015-02-23 15:52:07 +01:00
Oliver Gorwits
2c7243b87d release 3.24 2015-02-04 18:42:16 +00:00
Eric A. Miller
46515dd5d3 Support RSTP and ieee8021d STP operating modes in RapidCity 2015-01-22 22:16:34 -05:00
Eric A. Miller
7eb799adc6 Fix incorrect FDB ID to VLAN ID mapping in Bridge and L3:Enterasys 2015-01-22 21:57:06 -05:00
Eric A. Miller
c85b61bbd0 Fix single instance leafs defined in %FUNCS to behave like table leafs; return a reference to a hash and don't add zero instance identifier 2014-12-18 22:05:33 -05:00
Oliver Gorwits
045ff8b789 release 3.23 2014-12-09 07:26:25 +00:00
Eric A. Miller
7b7f197439 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 2014-12-08 21:12:01 -05:00
Eric A. Miller
9e1c462836 Enhanced STP support for L3::Extreme. Document previous STP changes in ChangeLog. 2014-12-04 23:19:06 -05:00
Eric A. Miller
e97e8309cb Update MIB used in L1::Asante 2014-12-04 23:11:36 -05:00
Oliver Gorwits
8c5be1a47d release 3.22 2014-12-02 13:20:53 +00:00
Jeroen van Ingen
afef2e6732 Don't include LLDP in Layer2/HP.om directly, it's inherited via Layer3 class now 2014-12-02 13:45:53 +01:00
Jeroen van Ingen
7b2051b55c Add LLDP into base Layer2 class
...and update ChangeLog
2014-12-02 13:35:00 +01:00
Jeroen van Ingen
8e470a2d72 pod additions for Layer3.pm 2014-12-02 13:24:39 +01:00
Jeroen van Ingen
35213d5cb2 Add LLDP into base Layer3 class 2014-12-02 13:22:20 +01:00
Oliver Gorwits
b24f1a8ac4 release 3.21_001 2014-11-14 00:28:27 +00:00
Oliver Gorwits
5454ab577e In LLDP.pm don't create a variable in a conditional 2014-11-14 00:28:14 +00:00
Eric A. Miller
046c15a074 Merge branch 'master' of ssh://git.code.sf.net/p/snmp-info/code 2014-11-11 23:13:45 -05:00
Eric A. Miller
ddb9dda894 Add stp_i_mac() to get per STP instance bridge address 2014-11-11 23:09:21 -05:00
Eric A. Miller
d7047bda13 Add methods to gather PVST information in L3::Foundry 2014-11-11 22:55:30 -05:00
Eric A. Miller
c7934f4d10 Enable determination of spanning tree version running on Avaya switches and add methods to gather information from multiple instances 2014-11-11 22:05:59 -05:00
Eric A. Miller
c97dc06177 Add stp_i_time(), stp_i_ntop(), stp_i_root(), stp_i_root_port(), stp_i_priority() methods which return a hash reference to ease API compatibility with MST and PVST implementations indexed by a spanning tree instance id. 2014-11-11 22:02:07 -05:00
Eric A. Miller
76b1faa159 POD syntax fix in L3::Extreme 2014-11-11 22:01:23 -05:00
Eric A. Miller
1e0438857e Document i_pvid() in L3::BayRS 2014-11-11 22:00:47 -05:00
Eric A. Miller
b6494effa6 POD updates, add version to MRO 2014-11-11 22:00:01 -05:00
Eric A. Miller
a359184b83 Ignore build files 2014-11-11 21:58:13 -05:00
Bill Fenner
ce50a3f627 Recognize C2700 and C3700 as Layer2::Aironet 2014-11-10 20:39:08 +00:00
Eric A. Miller
ee7d254329 Capture Aruba AP software version when available 2014-11-09 18:01:11 -05:00
Eric A. Miller
d674b22b39 Correct munging of stp_root() 2014-11-09 17:53:48 -05:00
Eric A. Miller
47954aba8e Correct munging of dot1dStpPortDesignatedPort in stp_p_port() and i_stp_port() methods 2014-11-09 17:43:41 -05:00
Eric A. Miller
09e18e9b64 Capture Aruba AP hardware version when available 2014-11-08 12:21:31 -05:00
Eric A. Miller
163ba86196 Add i_vlan_membership_untagged() to L3::Extreme 2014-11-08 10:55:39 -05:00
Eric A. Miller
e57e7d99d5 Add i_vlan_membership_untagged() to L3::AlteonAD 2014-11-08 10:06:12 -05:00
Eric A. Miller
7ad449303b L3::Force10 now inherits i_vlan_membership() and i_vlan_membership_untagged() from Bridge and only overrides VLAN mapping 2014-11-08 09:52:41 -05:00
Eric A. Miller
49b853de1a Document i_vlan_membership_untagged() 2014-11-08 09:40:07 -05:00
Eric A. Miller
03a81ad4be Add i_vlan_membership_untagged() method to L3::Aruba 2014-11-08 09:36:42 -05:00
Eric A. Miller
eb046b6a61 L3::Juniper now inherits i_vlan_membership() and i_vlan_membership_untagged() from Bridge and only overrides VLAN mapping
Correct VLAN mapping of FDB entries in L3::Juniper
2014-11-08 08:50:44 -05:00
Eric A. Miller
1bf62f9524 Use defined as test to catch vlan zero 2014-11-08 08:33:15 -05:00
Eric A. Miller
9aca213a5f Add i_vlan_membership_untagged() to L3::F5, L2::C1900, and L2::HP4000 2014-11-06 23:02:35 -05:00
Eric A. Miller
ce8bb68200 Add i_vlan_membership_untagged() to RapidCity 2014-11-06 21:31:56 -05:00
Eric A. Miller
7ee562c5ac i_vlan_membership_untagged() should return HoA 2014-11-05 22:58:35 -05:00
Eric A. Miller
bdb719004d Document i_vlan_membership_untagged() 2014-11-05 21:54:48 -05:00
Eric A. Miller
842ac96d48 Capture port VLANs on Cisco interfaces which are configured for trunking but are not in operational trunking mode 2014-11-05 21:07:11 -05:00
Eric A. Miller
5bb9011fb4 Override qb_fdb_index() in L3::Dell since the dot1qTpFdbTable uses dot1qVlanIndex rather than dot1qFdbId as an index 2014-11-01 20:20:12 -04:00
Eric A. Miller
97564f50b8 New method qb_fdb_index() for VLAN ID to FDB ID mapping. 2014-11-01 20:18:58 -04:00
Eric A. Miller
efcf6a0db3 Support for Fortinet devices in new class L3::Fortinet 2014-11-01 19:37:22 -04:00
Eric A. Miller
9e813784f7 Remove qb_fw_vlan() override from L2::HP as it should no longer be necessary. 2014-10-30 23:38:39 -04:00
Eric A. Miller
aaca03062b Use FDB ID to VID mapping if available to determine end station VLAN.
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.
Add partial of zero to L3::Enterasys methods which use dot1qVlanCurrentTable to work around non standard TimeFilter implementation.
2014-10-30 23:36:12 -04:00
Eric A. Miller
c1242017e2 [#64] Misdetection: Wireless APs 2014-10-30 22:44:18 -04:00
Eric A. Miller
5f1426a0a3 Support obtaining FDB in Avaya SPBM edge deployments in L2::Baystack
NOTE: This requires a RAPID-CITY MIB with the rcBridgeSpbmMacTable
2014-10-21 23:23:20 -04:00
Eric A. Miller
e84225fb23 Use the same method for both i_vlan and i_pvid in BayRS 2014-10-21 20:53:28 -04:00
Eric A. Miller
32c0e64bfb Ignore komodo files 2014-10-21 20:51:57 -04:00
Jeroen van Ingen
0793ff31f5 No longer use default i_ignore() subs in L2/L3/L7 base classes 2014-10-21 16:54:49 +02:00
Jeroen van Ingen
d3c2c1b607 Remove all trailing whitespace from ChangeLog entries 2014-10-21 15:15:17 +02:00
Oliver Gorwits
893def7910 release 3.20 2014-09-08 13:50:56 +01:00
Eric A. Miller
f875639435 Override layers in Juniper for routers with switch modules not reporting L2 capability 2014-09-03 23:22:33 -04:00
Oliver Gorwits
70bb263d79 release 3.19 2014-08-01 07:53:34 +01:00
Eric A. Miller
536d7d6901 Only use L2::ZyXEL_DSLAM for ZyXEL DSL modules 2014-07-30 23:07:22 -04:00
Eric A. Miller
6ea34316b0 POD updates and update change log for begemot's merges 2014-07-30 23:04:12 -04:00
Eric A. Miller
aeebe5c95c POD updates 2014-07-30 23:02:31 -04:00
Eric A. Miller
eb62f95636 POD fix 2014-07-30 22:56:14 -04:00
Eric A. Miller
c7ee746fe6 Merge commit '3b6088f454b5211ea00267fddd45b9a6b3563312' 2014-07-30 22:49:54 -04:00
Eric A. Miller
9a062499b3 Merge commit '719f14984b5d614b7ee52493bf07d6ced99adad4' 2014-07-30 22:33:23 -04:00
Eric A. Miller
0c876452d8 Merge commit '2e480dbec54e3b31586f7660f7f88d8797ac2446' 2014-07-30 22:32:36 -04:00
Max Kosmach
3b6088f454 add L2:3Com.pm 2014-07-28 17:46:09 +04:00
Max Kosmach
719f14984b Add Ubiquiti UniFi AP support 2014-07-28 15:47:01 +04:00
Max Kosmach
2e480dbec5 Small H3C fixes 2014-07-28 15:41:46 +04:00
Max Kosmach
66910c7827 Add L2:3Com support 2014-07-28 15:32:04 +04:00
Eric A. Miller
0f5319bc52 Silence uninitialized value warning in L3::Cisco 2014-07-08 21:48:50 -04:00
Eric A. Miller
cd54b07e09 Fix Avaya detection in lldp_port() 2014-07-08 21:33:18 -04:00
Oliver Gorwits
b197e9739b release 3.18 2014-07-02 09:12:57 +01:00
Eric A. Miller
8dd32c0dd7 [#54] Possible bad values returned for lldp_port with some HP gear 2014-07-01 23:06:25 -04:00
Eric A. Miller
08e049eb31 [#54] Possible bad values returned for cdp_id with some HP gear (Joel Leonhardt) 2014-07-01 23:01:24 -04:00
Eric A. Miller
d09e4a125c L2::Netgear inheritance clean up and removal of unnecessary c_* methods defined in Info base class 2014-07-01 22:30:37 -04:00
Eric A. Miller
8353db2bc4 [#71] Don't try to match on a false port description in lldp_if 2014-07-01 22:26:07 -04:00
Eric A. Miller
250d2a0c0a Update change log for L3::Nexus capture of VPC Keepalive IP addresses 2014-07-01 20:07:37 -04:00
Eric A. Miller
46b3127bb5 [#58] Fix inheritance in L3::FWSM and L3::CiscoASA 2014-07-01 20:05:46 -04:00
Eric A. Miller
f1e9e3423d Merge branch 'jvi_nexus' 2014-07-01 19:56:26 -04:00
Eric A. Miller
158ee40f1b Correctly identify device type (class) for instantiated objects which have overridden layers. 2014-06-24 21:14:14 -04:00
Eric A. Miller
713d052b64 POD update 2014-06-24 21:00:29 -04:00
Eric A. Miller
0e28436086 Pseudo ENTITY-MIB methods added to L3::Tasman for hardware information 2014-06-24 21:00:02 -04:00
Jeroen van Ingen
3f7229f4e7 Cisco Nexus workaround: add probable VPC IP address to device IP address table, determined by checking listening UDP sockets 2014-06-24 17:50:03 +02:00
Oliver Gorwits
1ae7f8c8a2 release 3.17
POD tests are not required for distribution
2014-06-23 19:31:14 +01:00
Oliver Gorwits
8e63954c3f release 3.16 2014-06-23 13:53:22 +01:00
Eric A. Miller
0fbcd5f8b1 Documentation updates for Cisco inheritance clean-up 2014-06-22 20:16:34 -04:00
Eric A. Miller
71f84d48dc Clean up inheritance for L3 Cisco classes. With this change all applicable classes will now support LLDP and aggregation methods. 2014-06-22 19:57:48 -04:00
Eric A. Miller
867a635ab8 Remove SNMP::Info inheritance from CiscoStack to prevent issues caused by multiple inheritance, documentation states that this class should not be used directly. 2014-06-22 19:53:53 -04:00
Eric A. Miller
3d2c9ceaf5 Add L3::CiscoSwitch base class for L3 Cisco switches 2014-06-22 19:31:00 -04:00
Eric A. Miller
47736b08ce FWSM and ASA only support methods in CiscoStats, don't inherit other Cisco classes which the devices don't support 2014-06-22 19:28:03 -04:00
Eric A. Miller
3f49e5f8ef Add LLDP and CiscoStpExtensions to L3::Cisco 2014-06-22 17:35:32 -04:00
Eric A. Miller
7c8575bfa5 Clarify CISCO-VLAN-IFTABLE-RELATION-MIB usage comment 2014-06-22 11:21:55 -04:00
Eric A. Miller
102a7e10cc L3::Cisco i_vlan() will now call SUPER and try interface description as a fallback 2014-06-22 11:21:02 -04:00
Eric A. Miller
9148764d20 Remove CiscoImage from all classes as its now included in CiscoStats class 2014-06-22 09:31:44 -04:00
Eric A. Miller
ce619415de Make L2::Cisco base class for L2::Catalyst and L2::C2900
Add CiscoPortSecurity, CiscoStpExtensions, CiscoAgg to L2::Cisco
Remove CiscoQOS and CiscoImage from L2::Cisco
2014-06-21 11:41:17 -04:00
Eric A. Miller
745807007f Remove CiscoImage class as its now included in CiscoStats class 2014-06-21 11:37:55 -04:00
Eric A. Miller
e85b3f70aa Consolidate CiscoImage class into CiscoStats class 2014-06-21 11:36:33 -04:00
Eric A. Miller
edc0fe4fbe Enterprise edition versions 8 and 9 of C1900 support aggregation and stp extensions 2014-06-21 11:35:03 -04:00
Oliver Gorwits
3cceec9044 add MRO synopsis and remove empty all_methods keys 2014-06-20 13:48:36 +01:00
Oliver Gorwits
18602855da use array instead of hash for key/val 2014-06-19 17:04:22 +01:00
Oliver Gorwits
72c223f72e make all_methods explicitly show all subs/globals/funcs 2014-06-19 16:51:12 +01:00
Oliver Gorwits
c6b3c45412 version of all_methods using positional array for sub/global/func 2014-06-19 16:42:36 +01:00
Oliver Gorwits
c60a04f530 Add method resolution discovery in SNMP::Info::MRO helper module 2014-06-19 15:46:42 +01:00
Oliver Gorwits
f7430ab1a6 Add method resolution discovery in SNMP::Info::MRO helper module 2014-06-19 15:44:51 +01:00
Oliver Gorwits
827398228c Add superclass discovery methods 2014-06-18 13:22:09 +01:00
Oliver Gorwits
a264bb36cb release 3.15 2014-06-10 13:17:33 +01:00
Oliver Gorwits
c24e63ec4c Return serial number for Cisco 3850 from entPhysicalSerialNum 2014-06-10 13:12:08 +01:00
Oliver Gorwits
6519570839 Offline mode and Cache export/priming 2014-06-09 22:30:30 +01:00
Oliver Gorwits
2c88544158 implement cache and offline mode 2014-06-09 21:21:26 +01:00
169 changed files with 14170 additions and 3736 deletions

31
.github/issue_template.md vendored Normal file
View File

@@ -0,0 +1,31 @@
<!--- Provide a general summary of the issue in the Title above -->
<!--- https://guides.github.com/features/mastering-markdown/#examples -->
## Expected Behavior
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
## Current Behavior
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change -->
## Steps to Reproduce (for bugs)
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant, or attach screenshots -->
1.
2.
3.
4.
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in -->
* SNMP::Info version used:
* Netdisco version (if used):

14
.gitignore vendored
View File

@@ -1,2 +1,12 @@
*.db
SNMP
*.swp
*.pid
test.pl
MYMETA.*
*.tar.gz
MANIFEST.*
*.komodo*
Makefile*
Build
_build
blib
cover_db

29
.travis.yml Normal file
View 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.007/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
View 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;

View File

@@ -1,4 +1,448 @@
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
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)
@@ -136,7 +580,7 @@ version 3.08 (2013-10-22)
* [#68] Fix device_port entries for switches with non-unique
ifDesc (Nic Bernstein)
* Don't try to munge undef values
* [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
* [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
* Silence warning from uninitialized variable in L3::Passport e_descr()
version 3.07 (2013-10-01)
@@ -163,12 +607,11 @@ version 3.05 (2013-08-16)
Layer2/CiscoSB class
* Add proper LLDP support to Netgear.pm
* Change $netgear->interfaces() to use ifName rather than ifDescr
as the former is unique per interface while the latter is not.
as the former is unique per interface while the latter is not.
If ifName is not present, concatenate ifDescr and ifIndex
to achieve a unique value.
* Properly report hardware version, Serial No. and OS Version for
Netgear.
version 3.03 (2013-07-11)
@@ -198,7 +641,7 @@ version 3.01 (2013-04-13)
they can be called directly, sonmp_ip(), cdp_ip(), etc.
* L2::Bay and L2::Foundry have been removed from the distribution. Both
classes were depreciated and all functionality is available through
L2::Baystack and L3::Foundry.
L2::Baystack and L3::Foundry.
[NEW FEATURES]
@@ -228,7 +671,7 @@ version 3.01 (2013-04-13)
[ENHANCEMENTS]
* UNIVERSAL::can() now works with dynamic methods
* UNIVERSAL::can() now works with dynamic methods
* Dynamically generated methods are added to symbol table to avoid
AUTOLOAD on subsequent calls
* L2::Airespace now supports 802.11n client tx rates
@@ -260,20 +703,20 @@ version 2.09 (2012-11-28)
* New method i_ssidmac() to get BSSID's from AP's with initial support
in L2::Aironet and Airespace classes
* Support for Avaya Secure Routers in new class L3::Tasman
* Add EDP and LLDP L2 Topology to L3::Extreme
* Add EDP and LLDP L2 Topology to L3::Extreme
* [3185393] Support for Juniper SSL VPN in new class L7::Neoteris
* [3381027] Support for Cisco Nexus in new class L3::Nexus
* [3381027] Support for Cisco Nexus in new class L3::Nexus
* [1424336] Support for Extreme Discovery Protocol (EDP)
[ENHANCEMENTS]
* [3017571] Add LLDP support for NetSNMP device class (begemot)
* [3017571] Add LLDP support for NetSNMP device class (begemot)
* [3418918] Extreme devices now report OS as either extremeware or xos
* [2809045] Strip preceding netscreen from model name in L3::Netscreen
* [] Classify Linksys 2024 as L3::Dell (Rogier Krieger)
[BUG FIXES]
* Fixed logic to return cached data for table methods when available and
not a partial fetch
* Fix typo in PoD for Bridge.pm and CiscoConfig.pm (William Bulley)
@@ -293,7 +736,7 @@ version 2.08 (2012-07-15)
* Pseudo ENTITY-MIB methods added to L3::Juniper for hardware information
* Add method to report current transmit power of the radio interface,
dot11_cur_tx_pwr_mw(), in Airespace class
dot11_cur_tx_pwr_mw(), in Airespace class
* [3085411] Activate L3 properties for Netgear GSM7224v2 (phishphreek)
* [3085413] SNMP OIDs for Netgear Serial and OS Ver (phishphreek)
* [3286549] Dell LLDP Support (Nico Giefing)
@@ -342,7 +785,7 @@ version 2.06 (2011-09-28)
* [3344843] Fix returning serial() and os_ver() for web-managable HP
switches, introduced by HP/HP4000 class split, reported by J R Binks
* [2809033] Put L2-only Cisco blade switches in L3::C6500
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
* [3408506] Fix uninitialized value in IPv6 when neighbor state is
incomplete (Michael Borgelt)
version 2.05 (2011-06-23)
@@ -358,13 +801,13 @@ version 2.04 (2011-03-31)
(Brian De Wolf)
+ Added L3::Pf for FreeBSD PFSense Firewalls (max)
* Added specific functions for neighbor mgmt addresses to CDP class
* Implemented os_bin() method in CiscoStats
* Implemented os_bin() method in CiscoStats
+ [2980787] Fix for C1900 bp_index not containing interfaces.
(Brian De Wolf)
+ [2599795] Added vendor_i_type() method to HP and HP4000 clases
+ [2688801] Minor modification for obscure Proxim/Orinoco device
(jrbinks)
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
+ [3051443] Add PoE measured power per port to Cisco, Extrme and HP
classes (jeroenvi)
* Minor tweaks to support devices without sysServices
* Added Cisco CBS3xxx blade switches to L3::C6500
@@ -402,7 +845,7 @@ version 2.00 (08/01/08)
+ Support for Alcatel-Lucent Service Router via L3::Timetra
+ Support for Alcatel-Lucent OmniAccess via L2::Aruba
* Silence warnings in MAU due to uninitialized variables
* Silence warnings in MAU due to uninitialized variables
version 1.09 (07/22/08) - Beta/developer release
+ Added support for HP ProCurve Foundry OEM switches, such as the 9300
@@ -426,7 +869,7 @@ version 1.09 (07/22/08) - Beta/developer release
+ Add support to specify MIB to resolve leaf names conflicts in
%GLOBALS and %FUNCS.
+ Added munge_port_list() and modify_port_list() methods to assist in
working with PortList objects.
working with PortList objects.
+ Added set_multi() method to enable a SNMP set command on several new
values in one request. Required for complex set operations
on some agents.
@@ -453,7 +896,7 @@ version 1.05 (11/25/07) - CVS only. No official release
Augenstein)
+ Added device specific support for LLDP in L2::HP, L2::Baystack,
L3::Enterasys and L3::Foundry
+ Added support for Enterasys devices as new class L3::Enterasys
+ Added support for Enterasys devices as new class L3::Enterasys
+ Added support for Dell PowerConnect switches as new class L3::Dell
+ Added basic support for generic routers running Microsoft Windows OS
as new class L3::Microsoft (begemot)
@@ -464,7 +907,7 @@ version 1.05 (11/25/07) - CVS only. No official release
+ Added support for Cisco (Airespace) wireless controllers as new class
L2::Airespace
+ Added support for Nortel Ethernet Routing Switch 2500 series and
Business Ethernet Switches (David Siebörger)
Business Ethernet Switches (David Siebörger)
+ Update of L3::Foundry to support all Foundry devices including newer
switches. Depreciate L2::Foundry.
+ Added generic device type detection using IANA assigned enterpise
@@ -477,7 +920,7 @@ version 1.05 (11/25/07) - CVS only. No official release
+ New class IEEE802dot11 class for generic standards based wireless AP
support to include i_ssidlist()and i_80211channel() methods.
+ L2::Orinoco inherits from new IEEE802dot11 for i_ssidlist()and
i_80211channel() support.
i_80211channel() support.
+ Added new VLAN methods i_pvid(), i_vlan_membership(), set_i_pvid(),
set_i_vlan(), set_add_i_vlan_tagged(), set_remove_i_vlan_tagged() to
Bridge, CiscoVTP, Extreme, HP, and RapidCity classes.
@@ -539,14 +982,14 @@ version 1.04 (07/08/06)
+ Added C1130 and C1240 to L2::Aironet (Ralf Gross)
+ Added detection for Cisco 2960, 2940, 3400 w/ MetroBase
+ Added generic L2::Cisco Class
* Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS).
* Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS).
* Fixed warnings in CiscoStack
* Updated ProCurve HP device detection for newer firmwares
version 1.03 (04/14/06) - Beta/developer release
* Use ipNetToMedia table instead of atTable for ARP
* Remove CiscoStack from Layer3::C4000
* Fixed bug in MAU class when polling devices without MAU-MIB support
* Fixed bug in MAU class when polling devices without MAU-MIB support
version 1.01 (04/08/06) - Beta/developer release
+ Change version numbers to X.XX format. Odd releases are beta
@@ -612,15 +1055,15 @@ version 1.0 (04/07/06) - CVS only. No official release
translated properly
verison 0.9 (11/15/04)
+ ** Added full Nortel/Bay/BayStack support
by new developer Eric Miller.
+ ** Added full Nortel/Bay/BayStack support
by new developer Eric Miller.
L2::Bay now depricated.
+ Added Alteon Ace support (Eric Miller)
+ Added Nortel Cotivity support (Eric Miller)
+ Added Nortel BayRS support (Eric Miller)
+ Added Nortel Centillion support (Eric Miller)
+ Added Nortel AP 222x support (Eric Miller)
+ Added Orinco AP support (Eric Miller)
+ Added Orinco AP support (Eric Miller)
+ Added i_lastchange() per suggestion of Nicolai Petri
+ Added BULKWALK patch by Bradley Baetz - This should
greatly speed up requests on SNMPv2c devices.
@@ -670,27 +1113,27 @@ version 0.6 (06/18/03)
version 0.5 (06/10/03)
* Added ability to get paritial tables. For example to get the
IP routing table for 128.114.* you can do
IP routing table for 128.114.* you can do
$ipr = $dev->ipr_dest('128.114');
* Added IP Routing Table entries from RFC1213 to SNMP::Info
* minor bug fixes
version 0.4 (04/29/03)
* BIG CHANGE ! Internal Data structure has changed.
* BIG CHANGE ! Internal Data structure has changed.
* Added clear_cache() method
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
* Added NO_SUCH support for snmpget (TABLE) calls to get SNMP MIB II data
from SNMP Version 1 devices.
* Methods load_all() and all() have changed their return value. Sorry but
the API had to change.
* New object methods snmp_comm(), snmp_ver(), store(), class(), nosuch()
to make it more OO happy.
* Globals are now cached
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
* Added new argument 'AutoSpecify' to new() to auto-connect with subclass
detected in device_type()
* New method specify() returns a new subclass object
* Subclasses are automatically loaded when specify or autospecify is used!
* Added methods for Interface statistics (ifInOctets ...)
* Added methods for Memory and CPU statistics
* Added methods for Memory and CPU statistics
* Added SNMP::Info::Entity, moved out of L2-HP
* Added SNMP::Info::Layer2::Aironet
@@ -703,7 +1146,7 @@ version 0.3 (03/06/03)
Thanks to Martin Lorensen <martin /at- lorensen.dk>
* Removed requirement for SNMP in the Makefile.PL and moved it to t/prereq.t
so that the Module will install via CPAN without trying to install the old
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
4.2.0 version of SNMP on CPAN. Will now fail in the test phase.
Thanks again to Martin Lorensen <martin /at- lorensen.dk>
* Moved tests from test.pl to t/*
@@ -713,10 +1156,10 @@ version 0.2 (02/19/03)
* Fixed HP Detection in device_type()
* Added Spanning Tree Protocol (STP) methods to SNMP::Info::Bridge
* Removed HP Specific MIBS in SNMP::Info::Layer2 and cleaned up model()
* Added poke for Bay 450 Switches
* Added poke for Bay 450 Switches
* Mapped HP Part Numbers to model numbers J4812A => 2512 in
SNMP::Info::Layer2::HP
version 0.1 (12/30/02)
* Initial Release
* SubClasses Included:
@@ -726,13 +1169,13 @@ version 0.1 (12/30/02)
* SNMP::Info::MAU
* SNMP::Info::Layer1
o SNMP::Info::Layer1::Allied
o SNMP::Info::Layer1::Asante
o SNMP::Info::Layer1::Asante
* SNMP::Info::Layer2
o SNMP::Info::Layer2::Bay
o SNMP::Info::Layer2::C1900
o SNMP::Info::Layer2::C2900
o SNMP::Info::Layer2::Catalyst
o SNMP::Info::Layer2::HP
o SNMP::Info::Layer2::HP
* SNMP::Info::Layer3
o SNMP::Info::Layer3::Aironet
o SNMP::Info::Layer3::Foundry

File diff suppressed because it is too large Load Diff

View File

@@ -1,115 +0,0 @@
# $Id$
#
# Copyright (c) 2005 Matt Tuttle
# 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::CiscoImage;
use strict;
use Exporter;
use SNMP::Info;
@SNMP::Info::CiscoImage::ISA = qw/SNMP::Info Exporter/;
@SNMP::Info::CiscoImage::EXPORT_OK = qw//;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );
%GLOBALS = ();
%FUNCS = ( 'ci_images' => 'ciscoImageString', );
%MUNGE = ();
1;
__END__
=head1 NAME
SNMP::Info::CiscoImage - SNMP Interface to image strings for Cisco Devices
=head1 AUTHOR
Matt Tuttle (C<mtuttle@americanhebrewacademy.org>)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $ci = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $ci->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
SNMP::Info::CiscoImage is a subclass of SNMP::Info that provides access to
image strings embedded in an image running on Cisco Devices.
Use or create in a subclass of SNMP::Info. Do not use directly.
=head2 Inherited Classes
None.
=head2 Required MIBs
=over
=item F<CISCO-IMAGE-MIB>
=back
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
=head1 GLOBALS
None.
=head1 TABLE METHODS
=over
=item $ci->ci_images()
Returns the table of image strings.
C<ciscoImageString>
=back
=cut

View File

@@ -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.14';
# 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

View File

@@ -1,5 +1,5 @@
All code from version 0.7 on
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
Copyright (c) 2003-2016 Max Baker and SNMP::Info Developers
All rights reserved.
Original Code

280
MANIFEST
View File

@@ -1,123 +1,161 @@
ChangeLog
COPYRIGHT
DEVELOP
DeviceMatrix.txt
Info.pm
Info/AdslLine.pm
Info/Aggregate.pm
Info/Airespace.pm
Info/AMAP.pm
Info/Bridge.pm
Info/CDP.pm
Info/CiscoAgg.pm
Info/CiscoConfig.pm
Info/CiscoImage.pm
Info/CiscoPortSecurity.pm
Info/CiscoPower.pm
Info/CiscoQOS.pm
Info/CiscoRTT.pm
Info/CiscoStack.pm
Info/CiscoStats.pm
Info/CiscoStpExtensions.pm
Info/CiscoVTP.pm
Info/EDP.pm
Info/Entity.pm
Info/EtherLike.pm
Info/FDP.pm
Info/IEEE802dot11.pm
Info/IEEE802dot3ad.pm
Info/IPv6.pm
Info/Layer1.pm
Info/Layer1/Allied.pm
Info/Layer1/Asante.pm
Info/Layer1/Bayhub.pm
Info/Layer1/Cyclades.pm
Info/Layer1/S3000.pm
Info/Layer2.pm
Info/Layer2/Airespace.pm
Info/Layer2/Aironet.pm
Info/Layer2/Allied.pm
Info/Layer2/Baystack.pm
Info/Layer2/C1900.pm
Info/Layer2/C2900.pm
Info/Layer2/Catalyst.pm
Info/Layer2/Centillion.pm
Info/Layer2/Cisco.pm
Info/Layer2/CiscoSB.pm
Info/Layer2/HP.pm
Info/Layer2/HP4000.pm
Info/Layer2/HPVC.pm
Info/Layer2/Kentrox.pm
Info/Layer2/N2270.pm
Info/Layer2/NAP222x.pm
Info/Layer2/Netgear.pm
Info/Layer2/NWSS2300.pm
Info/Layer2/Orinoco.pm
Info/Layer2/Trapeze.pm
Info/Layer2/ZyXEL_DSLAM.pm
Info/Layer3.pm
Info/Layer3/Aironet.pm
Info/Layer3/AlcatelLucent.pm
Info/Layer3/AlteonAD.pm
Info/Layer3/Altiga.pm
Info/Layer3/Arista.pm
Info/Layer3/Aruba.pm
Info/Layer3/BayRS.pm
Info/Layer3/BlueCoatSG.pm
Info/Layer3/C3550.pm
Info/Layer3/C4000.pm
Info/Layer3/C6500.pm
Info/Layer3/Cisco.pm
Info/Layer3/CiscoASA.pm
Info/Layer3/CiscoFWSM.pm
Info/Layer3/Contivity.pm
Info/Layer3/Dell.pm
Info/Layer3/Enterasys.pm
Info/Layer3/Extreme.pm
Info/Layer3/F5.pm
Info/Layer3/Force10.pm
Info/Layer3/Foundry.pm
Info/Layer3/H3C.pm
Info/Layer3/HP9300.pm
Info/Layer3/IBMGbTor.pm
Info/Layer3/Juniper.pm
Info/Layer3/Lantronix.pm
Info/Layer3/Microsoft.pm
Info/Layer3/Mikrotik.pm
Info/Layer3/N1600.pm
Info/Layer3/Netscreen.pm
Info/Layer3/NetSNMP.pm
Info/Layer3/Nexus.pm
Info/Layer3/PacketFront.pm
Info/Layer3/Passport.pm
Info/Layer3/Pf.pm
Info/Layer3/Pica8.pm
Info/Layer3/SonicWALL.pm
Info/Layer3/Steelhead.pm
Info/Layer3/Sun.pm
Info/Layer3/Tasman.pm
Info/Layer3/Timetra.pm
Info/Layer7.pm
Info/Layer7/APC.pm
Info/Layer7/Neoteris.pm
Info/Layer7/Netscaler.pm
Info/LLDP.pm
Info/MAU.pm
Info/NortelStack.pm
Info/PowerEthernet.pm
Info/RapidCity.pm
Info/SONMP.pm
Makefile.PL
Build.PL
Changes
contrib/DEVELOP
contrib/util/docmunge
contrib/util/make_dev_matrix.pl
contrib/util/make_snmpdata.pl
contrib/util/push_ver
contrib/util/run_test
contrib/util/test_class.pl
contrib/util/test_class_mocked.pl
lib/SNMP/Info.pm
lib/SNMP/Info/AdslLine.pm
lib/SNMP/Info/Aggregate.pm
lib/SNMP/Info/Airespace.pm
lib/SNMP/Info/AMAP.pm
lib/SNMP/Info/Bridge.pm
lib/SNMP/Info/CDP.pm
lib/SNMP/Info/CiscoAgg.pm
lib/SNMP/Info/CiscoConfig.pm
lib/SNMP/Info/CiscoPortSecurity.pm
lib/SNMP/Info/CiscoPower.pm
lib/SNMP/Info/CiscoQOS.pm
lib/SNMP/Info/CiscoRTT.pm
lib/SNMP/Info/CiscoStack.pm
lib/SNMP/Info/CiscoStats.pm
lib/SNMP/Info/CiscoStpExtensions.pm
lib/SNMP/Info/CiscoVTP.pm
lib/SNMP/Info/EDP.pm
lib/SNMP/Info/Entity.pm
lib/SNMP/Info/EtherLike.pm
lib/SNMP/Info/FDP.pm
lib/SNMP/Info/IEEE802dot11.pm
lib/SNMP/Info/IEEE802dot3ad.pm
lib/SNMP/Info/IPv6.pm
lib/SNMP/Info/Layer1.pm
lib/SNMP/Info/Layer1/Allied.pm
lib/SNMP/Info/Layer1/Asante.pm
lib/SNMP/Info/Layer1/Bayhub.pm
lib/SNMP/Info/Layer1/Cyclades.pm
lib/SNMP/Info/Layer1/S3000.pm
lib/SNMP/Info/Layer2.pm
lib/SNMP/Info/Layer2/3Com.pm
lib/SNMP/Info/Layer2/Adtran.pm
lib/SNMP/Info/Layer2/Airespace.pm
lib/SNMP/Info/Layer2/Aironet.pm
lib/SNMP/Info/Layer2/Allied.pm
lib/SNMP/Info/Layer2/Baystack.pm
lib/SNMP/Info/Layer2/C1900.pm
lib/SNMP/Info/Layer2/C2900.pm
lib/SNMP/Info/Layer2/Catalyst.pm
lib/SNMP/Info/Layer2/Centillion.pm
lib/SNMP/Info/Layer2/Cisco.pm
lib/SNMP/Info/Layer2/CiscoSB.pm
lib/SNMP/Info/Layer2/HP.pm
lib/SNMP/Info/Layer2/HP4000.pm
lib/SNMP/Info/Layer2/HPVC.pm
lib/SNMP/Info/Layer2/Kentrox.pm
lib/SNMP/Info/Layer2/N2270.pm
lib/SNMP/Info/Layer2/NAP222x.pm
lib/SNMP/Info/Layer2/Netgear.pm
lib/SNMP/Info/Layer2/NWSS2300.pm
lib/SNMP/Info/Layer2/Orinoco.pm
lib/SNMP/Info/Layer2/Trapeze.pm
lib/SNMP/Info/Layer2/Ubiquiti.pm
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
lib/SNMP/Info/Layer3.pm
lib/SNMP/Info/Layer3/Aironet.pm
lib/SNMP/Info/Layer3/AlcatelLucent.pm
lib/SNMP/Info/Layer3/AlteonAD.pm
lib/SNMP/Info/Layer3/Altiga.pm
lib/SNMP/Info/Layer3/Arista.pm
lib/SNMP/Info/Layer3/Aruba.pm
lib/SNMP/Info/Layer3/BayRS.pm
lib/SNMP/Info/Layer3/BlueCoatSG.pm
lib/SNMP/Info/Layer3/C3550.pm
lib/SNMP/Info/Layer3/C4000.pm
lib/SNMP/Info/Layer3/C6500.pm
lib/SNMP/Info/Layer3/CheckPoint.pm
lib/SNMP/Info/Layer3/Cisco.pm
lib/SNMP/Info/Layer3/CiscoASA.pm
lib/SNMP/Info/Layer3/CiscoFWSM.pm
lib/SNMP/Info/Layer3/CiscoSwitch.pm
lib/SNMP/Info/Layer3/Contivity.pm
lib/SNMP/Info/Layer3/Cumulus.pm
lib/SNMP/Info/Layer3/Dell.pm
lib/SNMP/Info/Layer3/DLink.pm
lib/SNMP/Info/Layer3/Enterasys.pm
lib/SNMP/Info/Layer3/Extreme.pm
lib/SNMP/Info/Layer3/F5.pm
lib/SNMP/Info/Layer3/Force10.pm
lib/SNMP/Info/Layer3/Fortinet.pm
lib/SNMP/Info/Layer3/Foundry.pm
lib/SNMP/Info/Layer3/H3C.pm
lib/SNMP/Info/Layer3/HP9300.pm
lib/SNMP/Info/Layer3/Huawei.pm
lib/SNMP/Info/Layer3/IBMGbTor.pm
lib/SNMP/Info/Layer3/Juniper.pm
lib/SNMP/Info/Layer3/Lantronix.pm
lib/SNMP/Info/Layer3/Microsoft.pm
lib/SNMP/Info/Layer3/Mikrotik.pm
lib/SNMP/Info/Layer3/N1600.pm
lib/SNMP/Info/Layer3/Netscreen.pm
lib/SNMP/Info/Layer3/NetSNMP.pm
lib/SNMP/Info/Layer3/Nexus.pm
lib/SNMP/Info/Layer3/PacketFront.pm
lib/SNMP/Info/Layer3/PaloAlto.pm
lib/SNMP/Info/Layer3/Passport.pm
lib/SNMP/Info/Layer3/Pf.pm
lib/SNMP/Info/Layer3/Pica8.pm
lib/SNMP/Info/Layer3/SonicWALL.pm
lib/SNMP/Info/Layer3/Steelhead.pm
lib/SNMP/Info/Layer3/Sun.pm
lib/SNMP/Info/Layer3/Tasman.pm
lib/SNMP/Info/Layer3/Timetra.pm
lib/SNMP/Info/Layer3/VMware.pm
lib/SNMP/Info/Layer3/VyOS.pm
lib/SNMP/Info/Layer7.pm
lib/SNMP/Info/Layer7/APC.pm
lib/SNMP/Info/Layer7/CiscoIPS.pm
lib/SNMP/Info/Layer7/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
META.json
META.yml
README
t/00-load.t
t/docmunge
t/make_dev_matrix.pl
t/pod-coverage.t
t/pod.t
t/prereq.t
t/push_ver
t/run_test
t/test_class.pl
t/util/make_snmpdata.pl
t/util/test_class_mocked.pl
t/00_load.t
xt/.perltidyrc
xt/00_local_distribution.t
xt/00_local_docininfo.t
xt/00_local_perlcritic.t
xt/00_local_pod-coverage.t
xt/00_local_pod.t
xt/00_local_prereq.t
xt/00_local_spelling.t
xt/00_local_versionsync.t
xt/10_remote_snmplabs.t
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/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/3Com.pm
xt/lib/Test/SNMP/Info/Layer2/Airespace.pm
xt/lib/Test/SNMP/Info/Layer2/Allied.pm
xt/lib/Test/SNMP/Info/Layer2/Baystack.pm
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm

View File

@@ -1,28 +1,70 @@
# Version control files and dirs.
\.bak$
\.pid$
\.swp$
^SNMP-Info-
^MANIFEST\.
# Avoid version control files.
\bRCS\b
\bCVS\b
\bSCCS\b
,v$
\B\.svn\b
\B\.git\b
.gitignore
\B\.gitignore\b
\b_darcs\b
\B\.cvsignore$
# Makemaker generated files and dirs.
^MANIFEST\.
^Makefile$
^blib/
^MakeMaker-\d
pm_to_blib
MYMETA.*
# Avoid VMS specific MakeMaker generated files
\bDescrip.MMS$
\bDESCRIP.MMS$
\bdescrip.mms$
# Temp, old and emacs backup files.
# Avoid Makemaker generated and utility files.
\bMANIFEST\.bak
\bMakefile$
\bblib/
\bMakeMaker-\d
\bpm_to_blib\.ts$
\bpm_to_blib$
\bblibdirs\.ts$ # 6.18 through 6.25 generated this
# Avoid Module::Build generated and utility files.
\bBuild$
\b_build/
\bBuild.bat$
\bBuild.COM$
\bBUILD.COM$
\bbuild.com$
# Avoid temp and backup files.
~$
\.old$
^#.*#$
^\.#
\#$
\b\.#
\.bak$
\.tmp$
\.#
\.rej$
# Private Regression Tests
\d+_local_
\.?perl\w+\.?rc$
# Avoid OS-specific files/dirs
# Mac OSX metadata
\B\.DS_Store
# Mac OSX SMB mount metadata files
\B\._
# Komodo project file
\.kpf$
# Avoid Devel::Cover and Devel::CoverX::Covered files.
\bcover_db\b
\bcovered\b
# Avoid MYMETA files
^MYMETA\.
.github
.travis
README.md
# Avoid Komodo project file
\.komodoproject$

544
META.json Normal file
View File

@@ -0,0 +1,544 @@
{
"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.54"
},
"SNMP::Info::AMAP" : {
"file" : "lib/SNMP/Info/AMAP.pm",
"version" : "3.54"
},
"SNMP::Info::AdslLine" : {
"file" : "lib/SNMP/Info/AdslLine.pm",
"version" : "3.54"
},
"SNMP::Info::Aggregate" : {
"file" : "lib/SNMP/Info/Aggregate.pm",
"version" : "3.54"
},
"SNMP::Info::Airespace" : {
"file" : "lib/SNMP/Info/Airespace.pm",
"version" : "3.54"
},
"SNMP::Info::Bridge" : {
"file" : "lib/SNMP/Info/Bridge.pm",
"version" : "3.54"
},
"SNMP::Info::CDP" : {
"file" : "lib/SNMP/Info/CDP.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoAgg" : {
"file" : "lib/SNMP/Info/CiscoAgg.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoConfig" : {
"file" : "lib/SNMP/Info/CiscoConfig.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoPortSecurity" : {
"file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoPower" : {
"file" : "lib/SNMP/Info/CiscoPower.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoQOS" : {
"file" : "lib/SNMP/Info/CiscoQOS.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoRTT" : {
"file" : "lib/SNMP/Info/CiscoRTT.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoStack" : {
"file" : "lib/SNMP/Info/CiscoStack.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoStats" : {
"file" : "lib/SNMP/Info/CiscoStats.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoStpExtensions" : {
"file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
"version" : "3.54"
},
"SNMP::Info::CiscoVTP" : {
"file" : "lib/SNMP/Info/CiscoVTP.pm",
"version" : "3.54"
},
"SNMP::Info::EDP" : {
"file" : "lib/SNMP/Info/EDP.pm",
"version" : "3.54"
},
"SNMP::Info::Entity" : {
"file" : "lib/SNMP/Info/Entity.pm",
"version" : "3.54"
},
"SNMP::Info::EtherLike" : {
"file" : "lib/SNMP/Info/EtherLike.pm",
"version" : "3.54"
},
"SNMP::Info::FDP" : {
"file" : "lib/SNMP/Info/FDP.pm",
"version" : "3.54"
},
"SNMP::Info::IEEE802dot11" : {
"file" : "lib/SNMP/Info/IEEE802dot11.pm",
"version" : "3.54"
},
"SNMP::Info::IEEE802dot3ad" : {
"file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
"version" : "3.54"
},
"SNMP::Info::IPv6" : {
"file" : "lib/SNMP/Info/IPv6.pm",
"version" : "3.54"
},
"SNMP::Info::LLDP" : {
"file" : "lib/SNMP/Info/LLDP.pm",
"version" : "3.54"
},
"SNMP::Info::Layer1" : {
"file" : "lib/SNMP/Info/Layer1.pm",
"version" : "3.54"
},
"SNMP::Info::Layer1::Allied" : {
"file" : "lib/SNMP/Info/Layer1/Allied.pm",
"version" : "3.54"
},
"SNMP::Info::Layer1::Asante" : {
"file" : "lib/SNMP/Info/Layer1/Asante.pm",
"version" : "3.54"
},
"SNMP::Info::Layer1::Bayhub" : {
"file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
"version" : "3.54"
},
"SNMP::Info::Layer1::Cyclades" : {
"file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
"version" : "3.54"
},
"SNMP::Info::Layer1::S3000" : {
"file" : "lib/SNMP/Info/Layer1/S3000.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2" : {
"file" : "lib/SNMP/Info/Layer2.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::3Com" : {
"file" : "lib/SNMP/Info/Layer2/3Com.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Adtran" : {
"file" : "lib/SNMP/Info/Layer2/Adtran.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Airespace" : {
"file" : "lib/SNMP/Info/Layer2/Airespace.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Aironet" : {
"file" : "lib/SNMP/Info/Layer2/Aironet.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Allied" : {
"file" : "lib/SNMP/Info/Layer2/Allied.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Baystack" : {
"file" : "lib/SNMP/Info/Layer2/Baystack.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::C1900" : {
"file" : "lib/SNMP/Info/Layer2/C1900.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::C2900" : {
"file" : "lib/SNMP/Info/Layer2/C2900.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Catalyst" : {
"file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Centillion" : {
"file" : "lib/SNMP/Info/Layer2/Centillion.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Cisco" : {
"file" : "lib/SNMP/Info/Layer2/Cisco.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::CiscoSB" : {
"file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::HP" : {
"file" : "lib/SNMP/Info/Layer2/HP.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::HP4000" : {
"file" : "lib/SNMP/Info/Layer2/HP4000.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::HPVC" : {
"file" : "lib/SNMP/Info/Layer2/HPVC.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Kentrox" : {
"file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::N2270" : {
"file" : "lib/SNMP/Info/Layer2/N2270.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::NAP222x" : {
"file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::NWSS2300" : {
"file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Netgear" : {
"file" : "lib/SNMP/Info/Layer2/Netgear.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Orinoco" : {
"file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Trapeze" : {
"file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::Ubiquiti" : {
"file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
"version" : "3.54"
},
"SNMP::Info::Layer2::ZyXEL_DSLAM" : {
"file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3" : {
"file" : "lib/SNMP/Info/Layer3.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Aironet" : {
"file" : "lib/SNMP/Info/Layer3/Aironet.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::AlcatelLucent" : {
"file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::AlteonAD" : {
"file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Altiga" : {
"file" : "lib/SNMP/Info/Layer3/Altiga.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Arista" : {
"file" : "lib/SNMP/Info/Layer3/Arista.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Aruba" : {
"file" : "lib/SNMP/Info/Layer3/Aruba.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::BayRS" : {
"file" : "lib/SNMP/Info/Layer3/BayRS.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::BlueCoatSG" : {
"file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::C3550" : {
"file" : "lib/SNMP/Info/Layer3/C3550.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::C4000" : {
"file" : "lib/SNMP/Info/Layer3/C4000.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::C6500" : {
"file" : "lib/SNMP/Info/Layer3/C6500.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::CheckPoint" : {
"file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Cisco" : {
"file" : "lib/SNMP/Info/Layer3/Cisco.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::CiscoASA" : {
"file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::CiscoFWSM" : {
"file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::CiscoSwitch" : {
"file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Contivity" : {
"file" : "lib/SNMP/Info/Layer3/Contivity.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Cumulus" : {
"file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::DLink" : {
"file" : "lib/SNMP/Info/Layer3/DLink.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Dell" : {
"file" : "lib/SNMP/Info/Layer3/Dell.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Enterasys" : {
"file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Extreme" : {
"file" : "lib/SNMP/Info/Layer3/Extreme.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::F5" : {
"file" : "lib/SNMP/Info/Layer3/F5.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Force10" : {
"file" : "lib/SNMP/Info/Layer3/Force10.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Fortinet" : {
"file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Foundry" : {
"file" : "lib/SNMP/Info/Layer3/Foundry.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::H3C" : {
"file" : "lib/SNMP/Info/Layer3/H3C.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::HP9300" : {
"file" : "lib/SNMP/Info/Layer3/HP9300.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Huawei" : {
"file" : "lib/SNMP/Info/Layer3/Huawei.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::IBMGbTor" : {
"file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Juniper" : {
"file" : "lib/SNMP/Info/Layer3/Juniper.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Lantronix" : {
"file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Microsoft" : {
"file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Mikrotik" : {
"file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::N1600" : {
"file" : "lib/SNMP/Info/Layer3/N1600.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::NetSNMP" : {
"file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Netscreen" : {
"file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Nexus" : {
"file" : "lib/SNMP/Info/Layer3/Nexus.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::PacketFront" : {
"file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::PaloAlto" : {
"file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Passport" : {
"file" : "lib/SNMP/Info/Layer3/Passport.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Pf" : {
"file" : "lib/SNMP/Info/Layer3/Pf.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Pica8" : {
"file" : "lib/SNMP/Info/Layer3/Pica8.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::SonicWALL" : {
"file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Steelhead" : {
"file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Sun" : {
"file" : "lib/SNMP/Info/Layer3/Sun.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Tasman" : {
"file" : "lib/SNMP/Info/Layer3/Tasman.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::Timetra" : {
"file" : "lib/SNMP/Info/Layer3/Timetra.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::VMware" : {
"file" : "lib/SNMP/Info/Layer3/VMware.pm",
"version" : "3.54"
},
"SNMP::Info::Layer3::VyOS" : {
"file" : "lib/SNMP/Info/Layer3/VyOS.pm",
"version" : "3.54"
},
"SNMP::Info::Layer7" : {
"file" : "lib/SNMP/Info/Layer7.pm",
"version" : "3.54"
},
"SNMP::Info::Layer7::APC" : {
"file" : "lib/SNMP/Info/Layer7/APC.pm",
"version" : "3.54"
},
"SNMP::Info::Layer7::CiscoIPS" : {
"file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
"version" : "3.54"
},
"SNMP::Info::Layer7::Gigamon" : {
"file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
"version" : "3.54"
},
"SNMP::Info::Layer7::Neoteris" : {
"file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
"version" : "3.54"
},
"SNMP::Info::Layer7::Netscaler" : {
"file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
"version" : "3.54"
},
"SNMP::Info::MAU" : {
"file" : "lib/SNMP/Info/MAU.pm",
"version" : "3.54"
},
"SNMP::Info::MRO" : {
"file" : "lib/SNMP/Info/MRO.pm",
"version" : "3.54"
},
"SNMP::Info::NortelStack" : {
"file" : "lib/SNMP/Info/NortelStack.pm",
"version" : "3.54"
},
"SNMP::Info::PowerEthernet" : {
"file" : "lib/SNMP/Info/PowerEthernet.pm",
"version" : "3.54"
},
"SNMP::Info::RapidCity" : {
"file" : "lib/SNMP/Info/RapidCity.pm",
"version" : "3.54"
},
"SNMP::Info::SONMP" : {
"file" : "lib/SNMP/Info/SONMP.pm",
"version" : "3.54"
}
},
"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.54",
"x_serialization_backend" : "JSON::PP version 2.97001"
}

399
META.yml Normal file
View File

@@ -0,0 +1,399 @@
---
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.54'
SNMP::Info::AMAP:
file: lib/SNMP/Info/AMAP.pm
version: '3.54'
SNMP::Info::AdslLine:
file: lib/SNMP/Info/AdslLine.pm
version: '3.54'
SNMP::Info::Aggregate:
file: lib/SNMP/Info/Aggregate.pm
version: '3.54'
SNMP::Info::Airespace:
file: lib/SNMP/Info/Airespace.pm
version: '3.54'
SNMP::Info::Bridge:
file: lib/SNMP/Info/Bridge.pm
version: '3.54'
SNMP::Info::CDP:
file: lib/SNMP/Info/CDP.pm
version: '3.54'
SNMP::Info::CiscoAgg:
file: lib/SNMP/Info/CiscoAgg.pm
version: '3.54'
SNMP::Info::CiscoConfig:
file: lib/SNMP/Info/CiscoConfig.pm
version: '3.54'
SNMP::Info::CiscoPortSecurity:
file: lib/SNMP/Info/CiscoPortSecurity.pm
version: '3.54'
SNMP::Info::CiscoPower:
file: lib/SNMP/Info/CiscoPower.pm
version: '3.54'
SNMP::Info::CiscoQOS:
file: lib/SNMP/Info/CiscoQOS.pm
version: '3.54'
SNMP::Info::CiscoRTT:
file: lib/SNMP/Info/CiscoRTT.pm
version: '3.54'
SNMP::Info::CiscoStack:
file: lib/SNMP/Info/CiscoStack.pm
version: '3.54'
SNMP::Info::CiscoStats:
file: lib/SNMP/Info/CiscoStats.pm
version: '3.54'
SNMP::Info::CiscoStpExtensions:
file: lib/SNMP/Info/CiscoStpExtensions.pm
version: '3.54'
SNMP::Info::CiscoVTP:
file: lib/SNMP/Info/CiscoVTP.pm
version: '3.54'
SNMP::Info::EDP:
file: lib/SNMP/Info/EDP.pm
version: '3.54'
SNMP::Info::Entity:
file: lib/SNMP/Info/Entity.pm
version: '3.54'
SNMP::Info::EtherLike:
file: lib/SNMP/Info/EtherLike.pm
version: '3.54'
SNMP::Info::FDP:
file: lib/SNMP/Info/FDP.pm
version: '3.54'
SNMP::Info::IEEE802dot11:
file: lib/SNMP/Info/IEEE802dot11.pm
version: '3.54'
SNMP::Info::IEEE802dot3ad:
file: lib/SNMP/Info/IEEE802dot3ad.pm
version: '3.54'
SNMP::Info::IPv6:
file: lib/SNMP/Info/IPv6.pm
version: '3.54'
SNMP::Info::LLDP:
file: lib/SNMP/Info/LLDP.pm
version: '3.54'
SNMP::Info::Layer1:
file: lib/SNMP/Info/Layer1.pm
version: '3.54'
SNMP::Info::Layer1::Allied:
file: lib/SNMP/Info/Layer1/Allied.pm
version: '3.54'
SNMP::Info::Layer1::Asante:
file: lib/SNMP/Info/Layer1/Asante.pm
version: '3.54'
SNMP::Info::Layer1::Bayhub:
file: lib/SNMP/Info/Layer1/Bayhub.pm
version: '3.54'
SNMP::Info::Layer1::Cyclades:
file: lib/SNMP/Info/Layer1/Cyclades.pm
version: '3.54'
SNMP::Info::Layer1::S3000:
file: lib/SNMP/Info/Layer1/S3000.pm
version: '3.54'
SNMP::Info::Layer2:
file: lib/SNMP/Info/Layer2.pm
version: '3.54'
SNMP::Info::Layer2::3Com:
file: lib/SNMP/Info/Layer2/3Com.pm
version: '3.54'
SNMP::Info::Layer2::Adtran:
file: lib/SNMP/Info/Layer2/Adtran.pm
version: '3.54'
SNMP::Info::Layer2::Airespace:
file: lib/SNMP/Info/Layer2/Airespace.pm
version: '3.54'
SNMP::Info::Layer2::Aironet:
file: lib/SNMP/Info/Layer2/Aironet.pm
version: '3.54'
SNMP::Info::Layer2::Allied:
file: lib/SNMP/Info/Layer2/Allied.pm
version: '3.54'
SNMP::Info::Layer2::Baystack:
file: lib/SNMP/Info/Layer2/Baystack.pm
version: '3.54'
SNMP::Info::Layer2::C1900:
file: lib/SNMP/Info/Layer2/C1900.pm
version: '3.54'
SNMP::Info::Layer2::C2900:
file: lib/SNMP/Info/Layer2/C2900.pm
version: '3.54'
SNMP::Info::Layer2::Catalyst:
file: lib/SNMP/Info/Layer2/Catalyst.pm
version: '3.54'
SNMP::Info::Layer2::Centillion:
file: lib/SNMP/Info/Layer2/Centillion.pm
version: '3.54'
SNMP::Info::Layer2::Cisco:
file: lib/SNMP/Info/Layer2/Cisco.pm
version: '3.54'
SNMP::Info::Layer2::CiscoSB:
file: lib/SNMP/Info/Layer2/CiscoSB.pm
version: '3.54'
SNMP::Info::Layer2::HP:
file: lib/SNMP/Info/Layer2/HP.pm
version: '3.54'
SNMP::Info::Layer2::HP4000:
file: lib/SNMP/Info/Layer2/HP4000.pm
version: '3.54'
SNMP::Info::Layer2::HPVC:
file: lib/SNMP/Info/Layer2/HPVC.pm
version: '3.54'
SNMP::Info::Layer2::Kentrox:
file: lib/SNMP/Info/Layer2/Kentrox.pm
version: '3.54'
SNMP::Info::Layer2::N2270:
file: lib/SNMP/Info/Layer2/N2270.pm
version: '3.54'
SNMP::Info::Layer2::NAP222x:
file: lib/SNMP/Info/Layer2/NAP222x.pm
version: '3.54'
SNMP::Info::Layer2::NWSS2300:
file: lib/SNMP/Info/Layer2/NWSS2300.pm
version: '3.54'
SNMP::Info::Layer2::Netgear:
file: lib/SNMP/Info/Layer2/Netgear.pm
version: '3.54'
SNMP::Info::Layer2::Orinoco:
file: lib/SNMP/Info/Layer2/Orinoco.pm
version: '3.54'
SNMP::Info::Layer2::Trapeze:
file: lib/SNMP/Info/Layer2/Trapeze.pm
version: '3.54'
SNMP::Info::Layer2::Ubiquiti:
file: lib/SNMP/Info/Layer2/Ubiquiti.pm
version: '3.54'
SNMP::Info::Layer2::ZyXEL_DSLAM:
file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
version: '3.54'
SNMP::Info::Layer3:
file: lib/SNMP/Info/Layer3.pm
version: '3.54'
SNMP::Info::Layer3::Aironet:
file: lib/SNMP/Info/Layer3/Aironet.pm
version: '3.54'
SNMP::Info::Layer3::AlcatelLucent:
file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
version: '3.54'
SNMP::Info::Layer3::AlteonAD:
file: lib/SNMP/Info/Layer3/AlteonAD.pm
version: '3.54'
SNMP::Info::Layer3::Altiga:
file: lib/SNMP/Info/Layer3/Altiga.pm
version: '3.54'
SNMP::Info::Layer3::Arista:
file: lib/SNMP/Info/Layer3/Arista.pm
version: '3.54'
SNMP::Info::Layer3::Aruba:
file: lib/SNMP/Info/Layer3/Aruba.pm
version: '3.54'
SNMP::Info::Layer3::BayRS:
file: lib/SNMP/Info/Layer3/BayRS.pm
version: '3.54'
SNMP::Info::Layer3::BlueCoatSG:
file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
version: '3.54'
SNMP::Info::Layer3::C3550:
file: lib/SNMP/Info/Layer3/C3550.pm
version: '3.54'
SNMP::Info::Layer3::C4000:
file: lib/SNMP/Info/Layer3/C4000.pm
version: '3.54'
SNMP::Info::Layer3::C6500:
file: lib/SNMP/Info/Layer3/C6500.pm
version: '3.54'
SNMP::Info::Layer3::CheckPoint:
file: lib/SNMP/Info/Layer3/CheckPoint.pm
version: '3.54'
SNMP::Info::Layer3::Cisco:
file: lib/SNMP/Info/Layer3/Cisco.pm
version: '3.54'
SNMP::Info::Layer3::CiscoASA:
file: lib/SNMP/Info/Layer3/CiscoASA.pm
version: '3.54'
SNMP::Info::Layer3::CiscoFWSM:
file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
version: '3.54'
SNMP::Info::Layer3::CiscoSwitch:
file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
version: '3.54'
SNMP::Info::Layer3::Contivity:
file: lib/SNMP/Info/Layer3/Contivity.pm
version: '3.54'
SNMP::Info::Layer3::Cumulus:
file: lib/SNMP/Info/Layer3/Cumulus.pm
version: '3.54'
SNMP::Info::Layer3::DLink:
file: lib/SNMP/Info/Layer3/DLink.pm
version: '3.54'
SNMP::Info::Layer3::Dell:
file: lib/SNMP/Info/Layer3/Dell.pm
version: '3.54'
SNMP::Info::Layer3::Enterasys:
file: lib/SNMP/Info/Layer3/Enterasys.pm
version: '3.54'
SNMP::Info::Layer3::Extreme:
file: lib/SNMP/Info/Layer3/Extreme.pm
version: '3.54'
SNMP::Info::Layer3::F5:
file: lib/SNMP/Info/Layer3/F5.pm
version: '3.54'
SNMP::Info::Layer3::Force10:
file: lib/SNMP/Info/Layer3/Force10.pm
version: '3.54'
SNMP::Info::Layer3::Fortinet:
file: lib/SNMP/Info/Layer3/Fortinet.pm
version: '3.54'
SNMP::Info::Layer3::Foundry:
file: lib/SNMP/Info/Layer3/Foundry.pm
version: '3.54'
SNMP::Info::Layer3::H3C:
file: lib/SNMP/Info/Layer3/H3C.pm
version: '3.54'
SNMP::Info::Layer3::HP9300:
file: lib/SNMP/Info/Layer3/HP9300.pm
version: '3.54'
SNMP::Info::Layer3::Huawei:
file: lib/SNMP/Info/Layer3/Huawei.pm
version: '3.54'
SNMP::Info::Layer3::IBMGbTor:
file: lib/SNMP/Info/Layer3/IBMGbTor.pm
version: '3.54'
SNMP::Info::Layer3::Juniper:
file: lib/SNMP/Info/Layer3/Juniper.pm
version: '3.54'
SNMP::Info::Layer3::Lantronix:
file: lib/SNMP/Info/Layer3/Lantronix.pm
version: '3.54'
SNMP::Info::Layer3::Microsoft:
file: lib/SNMP/Info/Layer3/Microsoft.pm
version: '3.54'
SNMP::Info::Layer3::Mikrotik:
file: lib/SNMP/Info/Layer3/Mikrotik.pm
version: '3.54'
SNMP::Info::Layer3::N1600:
file: lib/SNMP/Info/Layer3/N1600.pm
version: '3.54'
SNMP::Info::Layer3::NetSNMP:
file: lib/SNMP/Info/Layer3/NetSNMP.pm
version: '3.54'
SNMP::Info::Layer3::Netscreen:
file: lib/SNMP/Info/Layer3/Netscreen.pm
version: '3.54'
SNMP::Info::Layer3::Nexus:
file: lib/SNMP/Info/Layer3/Nexus.pm
version: '3.54'
SNMP::Info::Layer3::PacketFront:
file: lib/SNMP/Info/Layer3/PacketFront.pm
version: '3.54'
SNMP::Info::Layer3::PaloAlto:
file: lib/SNMP/Info/Layer3/PaloAlto.pm
version: '3.54'
SNMP::Info::Layer3::Passport:
file: lib/SNMP/Info/Layer3/Passport.pm
version: '3.54'
SNMP::Info::Layer3::Pf:
file: lib/SNMP/Info/Layer3/Pf.pm
version: '3.54'
SNMP::Info::Layer3::Pica8:
file: lib/SNMP/Info/Layer3/Pica8.pm
version: '3.54'
SNMP::Info::Layer3::SonicWALL:
file: lib/SNMP/Info/Layer3/SonicWALL.pm
version: '3.54'
SNMP::Info::Layer3::Steelhead:
file: lib/SNMP/Info/Layer3/Steelhead.pm
version: '3.54'
SNMP::Info::Layer3::Sun:
file: lib/SNMP/Info/Layer3/Sun.pm
version: '3.54'
SNMP::Info::Layer3::Tasman:
file: lib/SNMP/Info/Layer3/Tasman.pm
version: '3.54'
SNMP::Info::Layer3::Timetra:
file: lib/SNMP/Info/Layer3/Timetra.pm
version: '3.54'
SNMP::Info::Layer3::VMware:
file: lib/SNMP/Info/Layer3/VMware.pm
version: '3.54'
SNMP::Info::Layer3::VyOS:
file: lib/SNMP/Info/Layer3/VyOS.pm
version: '3.54'
SNMP::Info::Layer7:
file: lib/SNMP/Info/Layer7.pm
version: '3.54'
SNMP::Info::Layer7::APC:
file: lib/SNMP/Info/Layer7/APC.pm
version: '3.54'
SNMP::Info::Layer7::CiscoIPS:
file: lib/SNMP/Info/Layer7/CiscoIPS.pm
version: '3.54'
SNMP::Info::Layer7::Gigamon:
file: lib/SNMP/Info/Layer7/Gigamon.pm
version: '3.54'
SNMP::Info::Layer7::Neoteris:
file: lib/SNMP/Info/Layer7/Neoteris.pm
version: '3.54'
SNMP::Info::Layer7::Netscaler:
file: lib/SNMP/Info/Layer7/Netscaler.pm
version: '3.54'
SNMP::Info::MAU:
file: lib/SNMP/Info/MAU.pm
version: '3.54'
SNMP::Info::MRO:
file: lib/SNMP/Info/MRO.pm
version: '3.54'
SNMP::Info::NortelStack:
file: lib/SNMP/Info/NortelStack.pm
version: '3.54'
SNMP::Info::PowerEthernet:
file: lib/SNMP/Info/PowerEthernet.pm
version: '3.54'
SNMP::Info::RapidCity:
file: lib/SNMP/Info/RapidCity.pm
version: '3.54'
SNMP::Info::SONMP:
file: lib/SNMP/Info/SONMP.pm
version: '3.54'
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.54'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

View File

@@ -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";
}

190
README
View File

@@ -1,13 +1,10 @@
NAME
SNMP::Info - OO Interface to Network devices and MIBs through SNMP
VERSION
SNMP::Info - Version 3.12
SNMP::Info - Version 3.54
AUTHOR
SNMP::Info is maintained by team of Open Source authors headed by Eric
Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits.
@@ -18,12 +15,12 @@ AUTHOR
<http://netdisco.org> by Max Baker.
DEVICES SUPPORTED
See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt for
more details.
There are now generic classes for most types of device and so the
authors recommend loading SNMP::Info with AutoSpecify, and then
reporting to the mail list any missing functionality (such as neighbor
discovery tables).
SYNOPSIS
use SNMP::Info;
my $info = new SNMP::Info(
@@ -79,13 +76,11 @@ SYNOPSIS
}
SUPPORT
Please direct all support, help, and bug requests to the snmp-info-users
Mailing List at
<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
DESCRIPTION
SNMP::Info gives an object oriented interface to information obtained
through SNMP.
@@ -112,7 +107,6 @@ DESCRIPTION
a couple hashes. See EXTENDING SNMP::INFO.
REQUIREMENTS
1. Net-SNMP
To use this module, you must have Net-SNMP installed on your system.
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
Netdisco MIB package at
<http://sourceforge.net/project/showfiles.php?group_id=80033&package
_id=135517>
<http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest
-snapshot/>
Make sure that your snmp.conf is updated to point to your MIB
directory and that the MIBs are world-readable.
DESIGN GOALS
1. Use of textual MIB leaf identifier and enumerated values
* All values are retrieved via MIB Leaf node names
@@ -180,14 +173,12 @@ DESIGN GOALS
inclusion in the next version.
SUBCLASSES
These are the subclasses that implement MIBs and support devices:
Required MIBs not included in the install instructions above are noted
here.
MIB Subclasses
These subclasses implement method to access one or more MIBs. These are
not used directly, but rather inherited from device subclasses.
@@ -240,12 +231,6 @@ SUBCLASSES
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
CISCO-PORT-SECURITY-MIB and CISCO-PAE-MIB.
@@ -342,6 +327,11 @@ SUBCLASSES
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
S5-AGENT-MIB, S5-CHASSIS-MIB.
@@ -366,7 +356,6 @@ SUBCLASSES
See documentation in SNMP::Info::SONMP for details.
Device Subclasses
These subclasses inherit from one or more classes to provide a common
interface to data obtainable from network devices.
@@ -399,7 +388,7 @@ SUBCLASSES
See documentation in SNMP::Info::Layer1::Bayhub for details.
SNMP::Info::Layer1::Cyclades
Subclass for Cyclades terminal servers.
Subclass for Cyclades/Avocent terminal servers.
See documentation in SNMP::Info::Layer1::Cyclades for details.
@@ -414,6 +403,16 @@ SUBCLASSES
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
Subclass for Cisco (Airespace) wireless controllers.
@@ -469,8 +468,9 @@ SUBCLASSES
See documentation in SNMP::Info::Layer2::Centillion for details.
SNMP::Info::Layer2::Cisco
Generic Cisco subclass for layer2 devices that are not yet
supported in more specific subclasses.
Generic Cisco subclass for layer 2 devices that are not yet
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.
@@ -530,6 +530,11 @@ SUBCLASSES
See documentation in SNMP::Info::Layer2::Trapeze 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
Zyxel DSLAMs. Need I say more?
@@ -603,9 +608,15 @@ SUBCLASSES
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
This is a simple wrapper around Layer3 for IOS devices. It adds
on CiscoVTP.
This is a simple wrapper around layer 3 for IOS devices and the
base layer 3 Cisco class for other device specific layer 3 Cisco
classes.
See documentation in SNMP::Info::Layer3::Cisco for details.
@@ -619,11 +630,25 @@ SUBCLASSES
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
Subclass for Avaya/Nortel Contivity/VPN Routers.
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
Subclass for Dell PowerConnect switches. D-Link, the IBM
BladeCenter Gigabit Ethernet Switch Module and some Linksys
@@ -651,6 +676,11 @@ SUBCLASSES
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
Subclass for Brocade (Foundry) Network devices.
@@ -668,6 +698,11 @@ SUBCLASSES
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.
@@ -721,6 +756,11 @@ SUBCLASSES
See documentation in SNMP::Info::Layer3::PacketFront for
details.
SNMP::Info::Layer3::PaloAlto
Subclass for Palo Alto firewalls.
See documentation in SNMP::Info::Layer3::PaloAlto for details.
SNMP::Info::Layer3::Passport
Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000
series, Accelar, and VSP 9000 series switches.
@@ -760,28 +800,48 @@ SUBCLASSES
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
Generic Layer7 Devices.
See documentation in SNMP::Info::Layer7 for details.
SNMP::Info::Layer7::APC
SNMP Interface to APC UPS devices
Subclass for APC UPS devices
See documentation in SNMP::Info::Layer7::APC 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 Interface to Citrix Netscaler appliances
Subclass for Citrix Netscaler appliances
See documentation in SNMP::Info::Layer7::Netscaler for details.
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.
Thanks
Thanks for testing and coding help (in no particular order) to :
Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex
Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson,
@@ -792,9 +852,7 @@ Thanks
Netdisco README!
USAGE
Constructor
new()
Creates a new object and connects via SNMP::Session.
@@ -893,6 +951,19 @@ USAGE
(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
All other arguments are passed to SNMP::Session.
@@ -931,7 +1002,6 @@ USAGE
identify the device.
Data is Cached
Methods and subroutines requesting data from a device will only load the
data once, and then return cached versions of that data.
@@ -941,8 +1011,10 @@ USAGE
Run $info->clear_cache() to clear the cache to allow reload of both
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.
$info->clear_cache()
@@ -953,6 +1025,17 @@ USAGE
Returns current debug status, and optionally toggles debugging info
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])
Returns if bulkwalk is currently turned on for this object.
@@ -976,10 +1059,6 @@ USAGE
If the device still can be connected to via SNMP::Info, then
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)
Returns Error message if there is an error, or undef if there is
not.
@@ -1019,7 +1098,6 @@ USAGE
Indexing.html>
Globals (Scalar Methods)
These are methods to return scalar data from RFC1213.
Some subset of these is probably available for any network device that
@@ -1068,7 +1146,6 @@ USAGE
("ipForwarding")
Table Methods
Each of these methods returns a hash_reference to a hash keyed on the
interface index in SNMP.
@@ -1083,7 +1160,6 @@ USAGE
cases changes between reboots of the network device.
Partial Table Fetches
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
want, you can specify it in the call:
@@ -1098,7 +1174,6 @@ USAGE
Partial table results are not cached.
Interface Information
$info->interfaces()
This methods is overridden in each subclass to provide a mapping
between the Interface Table Index (iid) and the physical port name.
@@ -1193,7 +1268,6 @@ USAGE
("ifAlias")
Interface Statistics
$info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(),
$info->i_octets_out64()
Bandwidth.
@@ -1284,7 +1358,6 @@ USAGE
("ifSpecific")
IP Address Table
Each entry in this table is an IP address in use on this device. Usually
this is implemented in Layer3 Devices.
@@ -1309,7 +1382,6 @@ USAGE
("ipAdEntBcastAddr")
IP Routing Table
$info->ipr_route()
The route in question. A value of 0.0.0.0 is the default gateway
route.
@@ -1426,7 +1498,6 @@ USAGE
("ipRouteInfo")
Topology Information
Based upon the manufacturer and software version devices may support
some combination of Layer 2 topology protocol information. SNMP::Info
supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery
@@ -1444,7 +1515,6 @@ USAGE
AMAP: See SNMP::Info::AMAP for details.
Topology Capabilities
$info->has_topo()
Reports Layer 2 topology protocols which are supported and running
on a device.
@@ -1454,7 +1524,6 @@ USAGE
protocols are supported or running.
Common Topology Table Information
The common topology table methods below will query the device for
information from the specified topology protocols and return a single
hash combining all information. As a result, there may be identical
@@ -1515,7 +1584,6 @@ USAGE
Note: Only CDP and LLDP support this method.
SETTING DATA VIA SNMP
This section explains how to use SNMP::Info to do SNMP Set operations.
$info->set_METHOD($value)
@@ -1545,7 +1613,6 @@ SETTING DATA VIA SNMP
subroutines will need to be added if they haven't been already.
Quiet Mode
SNMP::Info will not chirp anything to STDOUT unless there is a serious
error (in which case it will probably die).
@@ -1560,7 +1627,6 @@ Quiet Mode
my $name = $info->name() or die "Couldn't get sysName!" . $name->error();
EXTENDING SNMP::INFO
To support a new class (vendor or platform) of device, add a Perl
package with the data structures and methods listed below.
@@ -1570,14 +1636,13 @@ EXTENDING SNMP::INFO
to verify the implementation.
Gathering MIB data for SNMP::Info Developers
The preference is to open a feature request in the SourceForge project.
This allows all developers to have visibility into the request. Please
include pointers to the applicable platform MIBs. For development we
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
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
like:
@@ -1596,7 +1661,6 @@ EXTENDING SNMP::INFO
ticket.
Data Structures required in new Subclass
A class inheriting this class must implement these data structures :
$INIT
@@ -1653,7 +1717,6 @@ EXTENDING SNMP::INFO
)
Sample Subclass
Let's make a sample Layer 2 Device subclass. This class will inherit the
Cisco Vlan module as an example.
@@ -1746,9 +1809,7 @@ EXTENDING SNMP::INFO
of SNMP::Info.
SNMP::INFO INTERNALS
Object Namespace
Internal data is stored with bareword keys. For example $info->{debug}
SNMP Data is stored or marked cached with keys starting with an
@@ -1758,7 +1819,6 @@ SNMP::INFO INTERNALS
above.
Package Globals
These set the default value for an object upon creation.
$DEBUG
@@ -1780,7 +1840,6 @@ SNMP::INFO INTERNALS
for more info. Can change by passing BulkRepeaters option in new()
Data Munging Callback Subroutines
munge_speed()
Makes human friendly speed ratings using %SPEED_MAP
@@ -1810,6 +1869,7 @@ SNMP::INFO INTERNALS
'54000000' => '54 Mbps',
'64000000' => '64 Mbps',
'100000000' => '100 Mbps',
'200000000' => '200 Mbps',
'149760000' => 'ATM on OC-3',
'155000000' => 'OC-3',
'155519000' => 'OC-3',
@@ -1819,6 +1879,7 @@ SNMP::INFO INTERNALS
'622000000' => 'OC-12',
'622080000' => 'OC-12',
'1000000000' => '1.0 Gbps',
'2000000000' => '2.0 Gbps',
'2488000000' => 'OC-48',
)
@@ -1839,6 +1900,10 @@ SNMP::INFO INTERNALS
ASCII hex string.
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
separated ASCII hex string.
@@ -1878,7 +1943,6 @@ SNMP::INFO INTERNALS
Takes an OID and return the object name if the right MIB is loaded.
Internally Used Functions
$info->init()
Used internally. Loads all entries in %MIBS.
@@ -2056,7 +2120,6 @@ SNMP::INFO INTERNALS
Returns undef if the method does not exist and can not be created.
AUTOLOAD
Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in
loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated
methods are inserted into the symbol table so that subsequent calls can
@@ -2079,7 +2142,6 @@ SNMP::INFO INTERNALS
subclass.
COPYRIGHT AND LICENSE
Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010
Max Baker and SNMP::Info Developers All rights reserved.

View File

@@ -4,7 +4,6 @@ Coding Guidelines:
- tab-width of 4, no tab characters
- keep POD documentation up-to-date
- always update ChangeLog before committing
- always update DeviceMatrix.txt before committing
- check-in required mibs to netdisco-mibs and release new package if needed
Release and Testing Instructions:

View File

@@ -3,9 +3,9 @@
use File::Glob qw/bsd_glob/;
my @pms = glob_rec("../Info");
my @pms = glob_rec("./lib");
$new_version = shift @ARGV || '3.01';
$new_version = shift @ARGV || die "missing new version\n";
foreach my $p (@pms) {
print "$p\n";
@@ -16,6 +16,7 @@ foreach my $p (@pms) {
while (<O>) {
s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/;
print P;
}

View File

@@ -42,6 +42,7 @@ my $EMPTY = q{};
my $class = $EMPTY;
my @dump = ();
my $debug = 0;
my $cache = 0;
my $device = '';
my $comm = '';
my $ver = 2;
@@ -58,9 +59,10 @@ GetOptions(
'v|ver=i' => \$ver,
'i|ignore' => \$ignore,
'p|print=s' => \@dump,
'x|debug+' => \$debug,
'm|mibdir=s' => \$mibdirs,
'n|nobulk' => \$nobulk,
'x|debug+' => \$debug,
'k|cache' => \$cache,
'h|?|help' => sub { pod2usage(1); },
);
@@ -170,6 +172,15 @@ foreach my $fn (@dump) {
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 {
@@ -244,10 +255,11 @@ Options:
-s|comm SNMP community
-v|ver SNMP version
-p|print Print values
-x|debug Debugging flag
-i|ignore Ignore Net-SNMP configuration file
-m|mibdir Directory containing MIB Files
-n|nobulk Disable bulkwalk
-x|debug Debugging flag
-k|cache Dump cache (requires Data::Printer to be installed)
-h|?|help Brief help message
=head1 OPTIONS
@@ -286,12 +298,6 @@ multiple times.
-print i_description -print i_type
=item B<-debug>
Turns on SNMP::Info debug.
-debug
=item B<-ignore >
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
=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>
Print help message and exits.

View File

@@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
#
# test_class_mocked.pl
#
@@ -33,7 +33,7 @@ use strict;
use warnings;
use Carp;
use FindBin;
use lib "$FindBin::Bin/../../..";
use lib "$FindBin::Bin/../../lib";
use File::Slurp qw(slurp);
use Getopt::Long;
use Pod::Usage;

View File

@@ -24,7 +24,7 @@ use vars
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
$NOSUCH $BIGINT $REPEATERS/;
$VERSION = '3.14';
$VERSION = '3.54';
=head1 NAME
@@ -32,7 +32,7 @@ SNMP::Info - OO Interface to Network devices and MIBs through SNMP
=head1 VERSION
SNMP::Info - Version 3.14
SNMP::Info - Version 3.54
=head1 AUTHOR
@@ -47,7 +47,9 @@ by Max Baker.
=head1 DEVICES SUPPORTED
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details.
There are now generic classes for most types of device and so the authors
recommend loading SNMP::Info with AutoSpecify, and then reporting to the mail
list any missing functionality (such as neighbor discovery tables).
=head1 SYNOPSIS
@@ -168,7 +170,7 @@ install by hand.
SNMP::Info operates on textual descriptors found in MIBs.
If you are using SNMP::Info separate from Netdisco,
download the Netdisco MIB package at L<http://sourceforge.net/project/showfiles.php?group_id=80033&package_id=135517>
download the Netdisco MIB package at L<http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest-snapshot/>
Make sure that your snmp.conf is updated to point to your MIB directory
and that the MIBs are world-readable.
@@ -282,12 +284,6 @@ These OIDs facilitate the writing of configuration files.
See documentation in L<SNMP::Info::CiscoConfig> for details.
=item SNMP::Info::CiscoImage
F<CISCO-IMAGE-MIB>. A collection of OIDs providing IOS image characteristics.
See documentation in L<SNMP::Info::CiscoImage> for details.
=item SNMP::Info::CiscoPortSecurity
F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>.
@@ -401,6 +397,12 @@ F<MAU-MIB> (RFC2668). Some Layer2 devices use this for extended Ethernet
See documentation in L<SNMP::Info::MAU> for details.
=item SNMP::Info::MRO
Method resolution introspection for SNMP::Info
See documentation in L<SNMP::Info::MRO> for details.
=item SNMP::Info::NortelStack
F<S5-AGENT-MIB>, F<S5-CHASSIS-MIB>.
@@ -437,7 +439,7 @@ interface to data obtainable from network devices.
All the required MIB files are included in the netdisco-mib package.
(See Above).
=over
=over 4
=item SNMP::Info::Layer1
@@ -445,7 +447,7 @@ Generic Layer1 Device subclass.
See documentation in L<SNMP::Info::Layer1> for details.
=over
=over 4
=item SNMP::Info::Layer1::Allied
@@ -472,7 +474,7 @@ See documentation in L<SNMP::Info::Layer1::Bayhub> for details.
=item SNMP::Info::Layer1::Cyclades
Subclass for Cyclades terminal servers.
Subclass for Cyclades/Avocent terminal servers.
See documentation in L<SNMP::Info::Layer1::Cyclades> for details.
@@ -493,6 +495,18 @@ See documentation in L<SNMP::Info::Layer2> for details.
=over
=item SNMP::Info::Layer2::3Com
SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
See documentation in L<SNMP::Info::Layer2::3Com> for details.
=item SNMP::Info::Layer2::Adtran
Subclass for Adtran devices.
See documentation in L<SNMP::Info::Layer2::Adtran> for details.
=item SNMP::Info::Layer2::Airespace
Subclass for Cisco (Airespace) wireless controllers.
@@ -553,8 +567,9 @@ See documentation in L<SNMP::Info::Layer2::Centillion> for details.
=item SNMP::Info::Layer2::Cisco
Generic Cisco subclass for layer2 devices that are not yet supported
in more specific subclasses.
Generic Cisco subclass for layer 2 devices that are not yet supported
in more specific subclassesand the base layer 2 Cisco class for
other device specific layer 2 Cisco classes.
See documentation in L<SNMP::Info::Layer2::Cisco> for details.
@@ -623,6 +638,12 @@ SNMP Interface to Juniper (Trapeze) Wireless Controllers
See documentation in L<SNMP::Info::Layer2::Trapeze> for details.
=item SNMP::Info::Layer2::Ubiquiti
SNMP Interface to Ubiquiti Access Points and other devices
See documentation in L<SNMP::Info::Layer2::Ubiquiti> for details.
=item SNMP::Info::Layer2::ZyXEL_DSLAM
Zyxel DSLAMs. Need I say more?
@@ -709,9 +730,16 @@ This class covers Catalyst 6500s in native mode, hybrid mode. Catalyst
See documentation in L<SNMP::Info::Layer3::C6500> for details.
=item SNMP::Info::Layer3::CheckPoint
Subclass for CheckPoint devices
See documentation in L<SNMP::Info::Layer3::CheckPoint> for details.
=item SNMP::Info::Layer3::Cisco
This is a simple wrapper around Layer3 for IOS devices. It adds on CiscoVTP.
This is a simple wrapper around layer 3 for IOS devices and the base layer 3
Cisco class for other device specific layer 3 Cisco classes.
See documentation in L<SNMP::Info::Layer3::Cisco> for details.
@@ -727,12 +755,29 @@ Subclass for Cisco Firewall Services Modules.
See documentation in L<SNMP::Info::Layer3::CiscoFWSM> for details.
=item SNMP::Info::Layer3::CiscoSwitch
Base class for L3 Cisco switches. See documentation in
L<SNMP::Info::Layer3::CiscoSwitch> for details.
=item SNMP::Info::Layer3::Contivity
Subclass for Avaya/Nortel Contivity/VPN Routers.
See documentation in L<SNMP::Info::Layer3::Contivity> for details.
=item SNMP::Info::Layer3::Cumulus
Subclass for Cumulus Networks Routers.
See documentation in L<SNMP::Info::Layer3::Cumulus> for details.
=item SNMP::Info::Layer3::DLink
Subclass for DLink devices.
See documentation in L<SNMP::Info::Layer3::DLink> for details.
=item SNMP::Info::Layer3::Dell
Subclass for Dell PowerConnect switches. D-Link, the IBM BladeCenter
@@ -765,6 +810,12 @@ Subclass for Force10 devices.
See documentation in L<SNMP::Info::Layer3::Force10> for details.
=item SNMP::Info::Layer3::Fortinet
Subclass for Fortinet devices.
See documentation in L<SNMP::Info::Layer3::Fortinet> for details.
=item SNMP::Info::Layer3::Foundry
Subclass for Brocade (Foundry) Network devices.
@@ -784,6 +835,12 @@ Original Equipment Manufacturer (OEM) such as the HP ProCurve 9300 and 6300 seri
See documentation in L<SNMP::Info::Layer3::HP9300> for details.
=item SNMP::Info::Layer3::Huawei
SNMP Interface to Huawei Layer 3 switches and routers.
See documentation in L<SNMP::Info::Layer3::Huawei> for details.
=item SNMP::Info::Layer3::IBMGbTor
SNMP Interface to IBM Rackswitch (formerly Blade Network Technologies)
@@ -845,6 +902,12 @@ Subclass for PacketFront DRG series CPE.
See documentation in L<SNMP::Info::Layer3::PacketFront> for details.
=item SNMP::Info::Layer3::PaloAlto
Subclass for Palo Alto firewalls.
See documentation in L<SNMP::Info::Layer3::PaloAlto> for details.
=item SNMP::Info::Layer3::Passport
Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000 series,
@@ -892,6 +955,18 @@ Alcatel-Lucent SR Class.
See documentation in L<SNMP::Info::Layer3::Timetra> for details.
=item SNMP::Info::Layer3::VyOS
Subclass for VyOS routers.
See documentation in L<SNMP::Info::Layer3::VyOS> for details.
=item SNMP::Info::Layer3::VMware
Subclass for VMware ESXi hosts.
See documentation in L<SNMP::Info::Layer3::VMware> for details.
=back
=back
@@ -908,19 +983,31 @@ See documentation in L<SNMP::Info::Layer7> for details.
=item SNMP::Info::Layer7::APC
SNMP Interface to APC UPS devices
Subclass for APC UPS devices
See documentation in L<SNMP::Info::Layer7::APC> for details.
=item SNMP::Info::Layer7::CiscoIPS
Subclass for Cisco IPS devices
See documentation in L<SNMP::Info::Layer7::Cisco IPS> for details.
=item SNMP::Info::Layer7::Gigamon
Subclass for Gigamon devices
See documentation in L<SNMP::Info::Layer7::Gigamon> for details.
=item SNMP::Info::Layer7::Netscaler
SNMP Interface to Citrix Netscaler appliances
Subclass for Citrix Netscaler appliances
See documentation in L<SNMP::Info::Layer7::Netscaler> for details.
=item SNMP::Info::Layer7::Neoteris
SNMP Interface to Juniper SSL VPN appliances
Subclass for Juniper SSL VPN appliances
See documentation in L<SNMP::Info::Layer7::Neoteris> for details.
@@ -1053,6 +1140,20 @@ SNMP::Session object to use instead of connecting on own.
(default creates session automatically)
=item 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 C<cache()> and C<offline()> methods.
(default 0, which means "online")
=item Cache
Pass in a HashRef to prime the cache of retrieved data. Useful for creating an
instance in C<Offline> mode from a previously dumped cache. See also the
C<cache()> method to retrieve a cache after running actial queries.
=item OTHER
All other arguments are passed to SNMP::Session.
@@ -1142,6 +1243,16 @@ sub new {
delete $sess_args{IgnoreNetSNMPConf};
}
if ( defined $args{Offline} ) {
$new_obj->{Offline} = $args{Offline} || 0;
delete $sess_args{Offline};
}
if ( defined $args{Cache} and ref {} eq ref $args{Cache} ) {
$new_obj->{$_} = $args{Cache}->{$_} for keys %{$args{Cache}};
delete $sess_args{Cache};
}
my $sess = undef;
if ( defined $args{Session} ) {
$sess = $args{Session};
@@ -1166,7 +1277,7 @@ sub new {
}
# Connects to device unless open session is provided.
$sess = new SNMP::Session(
$sess = SNMP::Session->new(
'UseEnums' => 1,
%sess_args, 'RetryNoSuch' => $new_obj->{nosuch}
) unless defined $sess;
@@ -1185,16 +1296,13 @@ sub new {
return;
}
# Table function store
my $store = {};
# Save Args for later
$new_obj->{store} = $store;
$new_obj->{store} ||= {};
$new_obj->{sess} = $sess;
$new_obj->{args} = \%args;
$new_obj->{snmp_ver} = $args{Version} || 2;
$new_obj->{snmp_comm} = $args{Community} || 'public';
$new_obj->{snmp_user} = $args{SecName} || 'initial';
$new_obj->{snmp_ver} = $sess->{Version} || $args{Version} || 2;
$new_obj->{snmp_comm} = $sess->{Community} || $args{Community} || 'public';
$new_obj->{snmp_user} = $sess->{SecName} || $args{SecName} || 'initial';
return $auto_specific ? $new_obj->specify() : $new_obj;
}
@@ -1231,7 +1339,7 @@ sub update {
delete $sess_args{BigInt};
delete $sess_args{MibDirs};
my $sess = new SNMP::Session(
my $sess = SNMP::Session->new(
'UseEnums' => 1,
%sess_args, 'RetryNoSuch' => $obj->{nosuch}
);
@@ -1258,7 +1366,7 @@ sub update {
=head2 Data is Cached
Methods and subroutines requesting data from a device will only load the data
once, and then return cached versions of that data.
once, and then return cached versions of that data.
Run $info->load_METHOD() where method is something like 'i_name' to reload
data from a method.
@@ -1266,6 +1374,9 @@ data from a method.
Run $info->clear_cache() to clear the cache to allow reload of both globals
and table methods.
The cache can be retrieved or set using the $info->cache() method. This works
together with the C<Offline> option.
=head2 Object Scalar Methods
These are for package related data, not directly supplied
@@ -1314,6 +1425,50 @@ sub debug {
return $self->{debug};
}
=item $info->offline([1|0])
Returns if offline mode is currently turned on for this object.
Optionally sets the Offline parameter.
=cut
sub offline {
my $self = shift;
my $ol = shift;
if ( defined $ol ) {
$self->{Offline} = $ol;
}
return $self->{Offline};
}
=item $info->cache([new_cache])
Returns a HashRef of all cached data in this object. There will be a C<store>
key for table data and then one key for each leaf.
Optionally sets the cache parameters if passed a HashRef.
=cut
sub cache {
my $self = shift;
my $data = shift;
if ( defined $data and ref {} eq ref $data ) {
$self->{$_} = $data->{$_} for keys %$data;
}
my $cache = { store => $self->{store} };
foreach my $key ( keys %$self ) {
next unless defined $key;
next unless $key =~ /^_/;
$cache->{$key} = $self->{$key};
}
return $cache;
}
=item $info->bulkwalk([1|0])
Returns if bulkwalk is currently turned on for this object.
@@ -1364,9 +1519,6 @@ SNMP::Info::Layer3 subclasses.
If the device still can be connected to via SNMP::Info, then
SNMP::Info is returned.
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details
about device support, or view C<device_type()> in F<Info.pm>.
=cut
sub device_type {
@@ -1400,16 +1552,21 @@ sub device_type {
11 => 'SNMP::Info::Layer2::HP',
18 => 'SNMP::Info::Layer3::BayRS',
42 => 'SNMP::Info::Layer3::Sun',
43 => 'SNMP::Info::Layer2::3Com',
45 => 'SNMP::Info::Layer2::Baystack',
171 => 'SNMP::Info::Layer3::Dell',
171 => 'SNMP::Info::Layer3::DLink',
244 => 'SNMP::Info::Layer3::Lantronix',
311 => 'SNMP::Info::Layer3::Microsoft',
664 => 'SNMP::Info::Layer2::Adtran',
674 => 'SNMP::Info::Layer3::Dell',
1588 => 'SNMP::Info::Layer3::Foundry',
1872 => 'SNMP::Info::Layer3::AlteonAD',
1916 => 'SNMP::Info::Layer3::Extreme',
1991 => 'SNMP::Info::Layer3::Foundry',
2011 => 'SNMP::Info::Layer3::Huawei',
2021 => 'SNMP::Info::Layer3::NetSNMP',
2272 => 'SNMP::Info::Layer3::Passport',
2620 => 'SNMP::Info::Layer3::CheckPoint',
2636 => 'SNMP::Info::Layer3::Juniper',
2925 => 'SNMP::Info::Layer1::Cyclades',
3076 => 'SNMP::Info::Layer3::Altiga',
@@ -1421,28 +1578,42 @@ sub device_type {
6027 => 'SNMP::Info::Layer3::Force10',
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
6527 => 'SNMP::Info::Layer3::Timetra',
6876 => 'SNMP::Info::Layer3::VMware',
8072 => 'SNMP::Info::Layer3::NetSNMP',
9303 => 'SNMP::Info::Layer3::PacketFront',
10002 => 'SNMP::Info::Layer2::Ubiquiti',
10418 => 'SNMP::Info::Layer1::Cyclades',
12325 => 'SNMP::Info::Layer3::Pf',
12356 => 'SNMP::Info::Layer3::Fortinet',
14179 => 'SNMP::Info::Layer2::Airespace',
14525 => 'SNMP::Info::Layer2::Trapeze',
14823 => 'SNMP::Info::Layer3::Aruba',
14988 => 'SNMP::Info::Layer3::Mikrotik',
17163 => 'SNMP::Info::Layer3::Steelhead',
25506 => 'SNMP::Info::Layer3::H3C',
25461 => 'SNMP::Info::Layer3::PaloAlto',
26543 => 'SNMP::Info::Layer3::IBMGbTor',
30065 => 'SNMP::Info::Layer3::Arista',
35098 => 'SNMP::Info::Layer3::Pica8',
41112 => 'SNMP::Info::Layer2::Ubiquiti',
4413 => 'SNMP::Info::Layer2::Ubiquiti',
30803 => 'SNMP::Info::Layer3::VyOS',
40310 => 'SNMP::Info::Layer3::Cumulus',
);
my %l2sysoidmap = (
9 => 'SNMP::Info::Layer2::Cisco',
11 => 'SNMP::Info::Layer2::HP',
43 => 'SNMP::Info::Layer2::3Com',
45 => 'SNMP::Info::Layer2::Baystack',
171 => 'SNMP::Info::Layer3::Dell',
171 => 'SNMP::Info::Layer3::DLink',
207 => 'SNMP::Info::Layer2::Allied',
664 => 'SNMP::Info::Layer2::Adtran',
674 => 'SNMP::Info::Layer3::Dell',
1872 => 'SNMP::Info::Layer3::AlteonAD',
1916 => 'SNMP::Info::Layer3::Extreme',
1991 => 'SNMP::Info::Layer3::Foundry',
2011 => 'SNMP::Info::Layer3::Huawei',
2272 => 'SNMP::Info::Layer3::Passport',
2925 => 'SNMP::Info::Layer1::Cyclades',
3224 => 'SNMP::Info::Layer3::Netscreen',
@@ -1450,6 +1621,8 @@ sub device_type {
4526 => 'SNMP::Info::Layer2::Netgear',
5624 => 'SNMP::Info::Layer3::Enterasys',
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
9303 => 'SNMP::Info::Layer3::PacketFront',
10418 => 'SNMP::Info::Layer1::Cyclades',
11898 => 'SNMP::Info::Layer2::Orinoco',
14179 => 'SNMP::Info::Layer2::Airespace',
14525 => 'SNMP::Info::Layer2::Trapeze',
@@ -1458,11 +1631,17 @@ sub device_type {
26543 => 'SNMP::Info::Layer3::IBMGbTor',
);
my %l1sysoidmap = (
2925 => 'SNMP::Info::Layer1::Cyclades',
10418 => 'SNMP::Info::Layer1::Cyclades',
);
my %l7sysoidmap = (
318 => 'SNMP::Info::Layer7::APC',
5951 => 'SNMP::Info::Layer7::Netscaler',
14525 => 'SNMP::Info::Layer2::Trapeze',
12532 => 'SNMP::Info::Layer7::Neoteris',
26866 => 'SNMP::Info::Layer7::Gigamon',
);
# Get just the enterprise number for generic mapping
@@ -1493,6 +1672,9 @@ sub device_type {
$objtype = 'SNMP::Info::Layer3::Aironet'
if ( $desc =~ /Aironet/ and $desc =~ /\D(AP4800)\D/ );
# Override voice gateway device (VG350) showing up as Aironet
$objtype = 'SNMP::Info::Layer3::Cisco' if $desc =~ /VG350/;
# Cat6k with older SUPs (hybrid CatOS/IOS?)
$objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /(c6sup2|c6sup1)/;
@@ -1542,7 +1724,9 @@ sub device_type {
=~ /^(BayStack|Ethernet\s+Routing\s+Switch)\s[2345](\d){2,3}/i );
# Nortel Contivity
$objtype = 'SNMP::Info::Layer3::Contivity' if $desc =~ /(\bCES\b|\bNVR\sV\d)/;
$objtype = 'SNMP::Info::Layer3::Contivity'
if $desc =~ /(\bCES\b|\bNVR\sV\d)/
and (!defined $id or !defined $l3sysoidmap{$id});
# SonicWALL
$objtype = 'SNMP::Info::Layer3::SonicWALL' if $desc =~ /SonicWALL/i;
@@ -1560,6 +1744,11 @@ sub device_type {
$objtype = 'SNMP::Info::Layer3::CiscoFWSM'
if ( $desc =~ /Cisco Firewall Services Module/i );
# Cisco Small Business (300 500) series override
# This is for enterprises(1).cisco(9).otherEnterprises(6).ciscosb(1)
$objtype = 'SNMP::Info::Layer2::CiscoSB'
if ( $soid =~ /^\.?1\.3\.6\.1\.4\.1\.9\.6\.1/ );
# Avaya Secure Router
$objtype = 'SNMP::Info::Layer3::Tasman'
if ( $desc =~ /^(avaya|nortel)\s+(SR|secure\srouter)\s+\d{4}/i );
@@ -1572,9 +1761,23 @@ sub device_type {
# Starting with IOS 15, Aironet reports sysServices 6, even though
# it still is the same layer2 access point.
$objtype = 'SNMP::Info::Layer2::Aironet'
if ($desc =~ /\b(C1100|C1130|C1140|AP1200|C350|C1200|C1240|C1250)\b/
if ($desc =~ /\b(C1100|C1130|C1140|AP1200|C350|C1200|C1240|C1250|C2700|C3700)\b/
and $desc =~ /\bIOS\b/ );
# Airespace (WLC) Module
$objtype = 'SNMP::Info::Layer2::Airespace'
if ( $desc =~ /^Cisco Controller$/ );
#Nortel 2270
$objtype = 'SNMP::Info::Layer2::N2270'
if (
$desc =~ /Nortel\s+(Networks\s+)??WLAN\s+-\s+Security\s+Switch/ );
# Nortel (Trapeze) WSS 2300 Series
$objtype = 'SNMP::Info::Layer2::NWSS2300'
if (
$desc =~ /^(Nortel\s)??Wireless\sSecurity\sSwitch\s23[568][012]\b/);
# Generic device classification based upon sysObjectID
if ( ( $objtype eq 'SNMP::Info::Layer3' )
and ( defined($id) )
@@ -1592,6 +1795,18 @@ sub device_type {
# Device Type Overrides
# Bay Hub (Needed here for layers override)
$objtype = 'SNMP::Info::Layer1::Bayhub'
if ( $desc =~ /\bNMM.*Agent/ );
$objtype = 'SNMP::Info::Layer1::Bayhub'
if ( $desc =~ /\bBay\s*Stack.*Hub/i );
# Synoptics Hub (Needed here for layers override)
# This will override Bay Hub only for specific devices supported
# by this class
$objtype = 'SNMP::Info::Layer1::S3000'
if ( $desc =~ /\bNMM\s+(281|3000|3030)/i );
# Catalyst 1900 series override
$objtype = 'SNMP::Info::Layer2::C1900'
if ( $desc =~ /catalyst/i and $desc =~ /\D19\d{2}/ );
@@ -1678,7 +1893,7 @@ sub device_type {
# Airespace (WLC) Module
$objtype = 'SNMP::Info::Layer2::Airespace'
if ( $desc =~ /Cisco Controller/ );
if ( $desc =~ /^Cisco Controller$/ );
#Nortel 2270
$objtype = 'SNMP::Info::Layer2::N2270'
@@ -1689,6 +1904,9 @@ sub device_type {
$objtype = 'SNMP::Info::Layer2::HPVC'
if ( $desc =~ /HP\sVC\s/ );
$objtype = 'SNMP::Info::Layer2::ZyXEL_DSLAM'
if ( $desc =~ /8-port .DSL Module\(Annex .\)/i );
# Generic device classification based upon sysObjectID
if ( ( $objtype eq 'SNMP::Info::Layer2' )
and ( defined($id) )
@@ -1712,12 +1930,20 @@ sub device_type {
if ( $desc =~ /\bBay\s*Stack.*Hub/i );
# Synoptics Hub
# This will override Bay Hub only for specific devices supported by this class
# This will override Bay Hub only for specific devices supported
# by this class
$objtype = 'SNMP::Info::Layer1::S3000'
if ( $desc =~ /\bNMM\s+(281|3000|3030)/i );
# These devices don't claim to have Layer1-3 but we like em anyways.
# Generic device classification based upon sysObjectID
if ( ( $objtype eq 'SNMP::Info::Layer1' )
and ( defined($id) )
and ( exists( $l1sysoidmap{$id} ) ) )
{
$objtype = $l1sysoidmap{$id};
}
}
# These devices don't claim to have Layer1-3 but we like em anyways.
else {
$objtype = 'SNMP::Info::Layer2::ZyXEL_DSLAM'
if ( $desc =~ /8-port .DSL Module\(Annex .\)/i );
@@ -1744,7 +1970,12 @@ sub device_type {
# Nortel (Trapeze) WSS 2300 Series
$objtype = 'SNMP::Info::Layer2::NWSS2300'
if ( $desc =~ /\bWireless\sSecurity\sSwitch\s23[568][012]\b/);
if (
$desc =~ /^(Nortel\s)??Wireless\sSecurity\sSwitch\s23[568][012]\b/);
# Cisco IPS, older version which doesn't report layer 3 functionality
$objtype = 'SNMP::Info::Layer7::CiscoIPS'
if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.9\.1\.1545/i );
# Generic device classification based upon sysObjectID
if ( defined($id) and $objtype eq 'SNMP::Info') {
@@ -2493,7 +2724,7 @@ sub _get_topo_data {
my $self = shift;
my $partial = shift;
my $topo_cap = shift;
my $method = shift;
my $method = shift || '';
return unless $method =~ /(ip|if|port|id|platform|cap)/;
@@ -2769,7 +3000,7 @@ allows all developers to have visibility into the request. Please include
pointers to the applicable platform MIBs. For development we will need an
C<snmpwalk> of the device. There is a tool now included in the SNMP::Info
distribution to help with this task, although you'll most likely need to
download the distribution from CPAN as it's included in the "C<t/util>"
download the distribution from CPAN as it's included in the "C<contrib/util>"
directory.
The utility is named C<make_snmpdata.pl>. Run it with a command line like:
@@ -2828,7 +3059,9 @@ the SNMP::Info methods.
'name' => 'sysName',
'location' => 'sysLocation',
'layers' => 'sysServices',
# IF-MIB
'ports' => 'ifNumber',
# IP-MIB
'ipforwarding' => 'ipForwarding',
);
@@ -2846,7 +3079,9 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
=cut
%FUNCS = (
# IF-MIB::IfEntry
'interfaces' => 'ifIndex',
# IF-MIB::IfXEntry
'i_name' => 'ifName',
# IF-MIB::IfEntry
@@ -2876,13 +3111,13 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
# IF-MIB::IfStackTable
'i_stack_status' => 'ifStackStatus',
# IP Address Table
# IP::MIB::ipAddrTable (deprecated IPv4 address table)
'ip_index' => 'ipAdEntIfIndex',
'ip_table' => 'ipAdEntAddr',
'ip_netmask' => 'ipAdEntNetMask',
'ip_broadcast' => 'ipAdEntBcastAddr',
# ifXTable - Extension Table
# IF-MIB::ifXTable - Extension Table
'i_speed_high' => 'ifHighSpeed',
'i_pkts_multi_in' => 'ifInMulticastPkts',
'i_pkts_multi_out' => 'ifOutMulticastPkts',
@@ -2898,7 +3133,7 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
'i_pkts_bcast_out64' => 'ifHCOutBroadcastPkts',
'i_alias' => 'ifAlias',
# IP Routing Table
# RFC-1213::ipRoute (deprecated Table IP Routing Table)
'ipr_route' => 'ipRouteDest',
'ipr_if' => 'ipRouteIfIndex',
'ipr_1' => 'ipRouteMetric1',
@@ -2929,7 +3164,13 @@ $info->init() will throw an exception if a MIB does not load.
%MIBS = (
# The "main" MIBs are automagically loaded in Net-SNMP now.
# Include these here for cases where the Net-SNMP default MIB list has
# been overridden during the compliation of the local Net-SNMP library.
# These cover the globals and funcs defined in this file.
'SNMPv2-MIB' => 'sysObjectID',
'RFC1213-MIB' => 'ipRouteIfIndex',
'IP-MIB' => 'ipAdEntAddr',
'IF-MIB' => 'ifIndex',
);
=item %MUNGE
@@ -3150,6 +3391,7 @@ Makes human friendly speed ratings using %SPEED_MAP
'54000000' => '54 Mbps',
'64000000' => '64 Mbps',
'100000000' => '100 Mbps',
'200000000' => '200 Mbps',
'149760000' => 'ATM on OC-3',
'155000000' => 'OC-3',
'155519000' => 'OC-3',
@@ -3159,6 +3401,7 @@ Makes human friendly speed ratings using %SPEED_MAP
'622000000' => 'OC-12',
'622080000' => 'OC-12',
'1000000000' => '1.0 Gbps',
'2000000000' => '2.0 Gbps',
'2488000000' => 'OC-48',
)
@@ -3195,6 +3438,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
'54000000' => '54 Mbps',
'64000000' => '64 Mbps',
'100000000' => '100 Mbps',
'200000000' => '200 Mbps',
'149760000' => 'ATM on OC-3',
'155000000' => 'OC-3',
'155519000' => 'OC-3',
@@ -3204,6 +3448,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
'622000000' => 'OC-12',
'622080000' => 'OC-12',
'1000000000' => '1.0 Gbps',
'2000000000' => '2.0 Gbps',
'2488000000' => 'OC-48',
);
@@ -3273,7 +3518,7 @@ sub munge_mac {
=item munge_prio_mac()
Takes an 8-byte octet stream (HEX-STRING) and returns a colon separated ASCII
Takes an 2-byte octet stream (HEX-STRING) and returns a colon separated ASCII
hex string.
=cut
@@ -3287,6 +3532,22 @@ sub munge_prio_mac {
return;
}
=item munge_prio_port()
Takes an 8-byte octet stream (HEX-STRING) and returns a colon separated ASCII
hex string.
=cut
sub munge_prio_port {
my $mac = shift;
return unless defined $mac;
return unless length $mac;
$mac = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) );
return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){1}[0-9A-F][0-9A-F]$/i;
return;
}
=item munge_octet2hex()
Takes a binary octet stream and returns an ASCII hex string
@@ -3462,7 +3723,8 @@ sub init {
foreach my $d (@$mibdirs) {
next unless -d $d;
print "SNMP::Info::init() - Adding new mibdir:$d\n" if $self->debug();
print "SNMP::Info::init() - Adding new mibdir:$d\n"
if $self->debug() > 1;
SNMP::addMibDirs($d);
}
@@ -3639,7 +3901,7 @@ sub _global {
# Return cached data unless loading
# We now store in raw format so munge before returning
# unless expecting raw data
if ( defined $self->{"_$attr"} && !$load ) {
if ( exists $self->{"_$attr"} && !$load ) {
my $val = $self->{"_$attr"};
if ( !$raw ) {
@@ -3649,6 +3911,12 @@ sub _global {
}
}
if ( $self->{Offline} ) {
$self->error_throw(
"SNMP::Info::_global: Offline but $attr is not in cache\n" );
return;
}
if ( $self->debug() ) {
# Let's get the MIB Module and leaf name along with the OID
my $qual_leaf = SNMP::translateObj($oid,0,1) || '';
@@ -3713,8 +3981,9 @@ sub _set {
}
else {
$self->error_throw(
"SNMP::Info::_set($attr,$val) - Failed. Invalid argument for attr."
"SNMP::Info::_set - Failed. Invalid arguments"
);
return;
}
my $sess = $self->session();
@@ -3734,16 +4003,6 @@ sub _set {
# Instance is 0 for scalars without a supplied instance
$var_list->[1] = $list_iid = defined $list_iid ? $list_iid : '0';
# Check if this method is from a sub or from the tables.
if ( $self->can($list_attr) ) {
$self->error_throw(
"SNMP::Info::_set($list_attr,$list_val) - Failed. $list_attr is generated in a sub(). set_$list_attr sub required."
);
# if sub set_attr() existed, we wouldn't have gotten this far.
return;
}
# Lookup oid
my $oid = undef;
$oid = $list_attr if SNMP::translateObj($list_attr);
@@ -3955,8 +4214,6 @@ sub _load_attr {
return unless defined $sess;
my $ver = $self->snmp_ver();
my $nosuch = $self->nosuch();
my $store = $self->store();
my $load = $method =~ /^load/;
my $raw = $method =~ /raw$/;
@@ -3973,6 +4230,12 @@ sub _load_attr {
&& !$load
&& !defined $partial );
if ( $self->{Offline} ) {
$self->error_throw(
"SNMP::Info::_load_atrr: Offline but $attr is not in cache\n" );
return;
}
# We want the qualified leaf name so that we can
# specify the Module (MIB) in the case of private leaf naming
# conflicts. Example: ALTEON-TIGON-SWITCH-MIB::agSoftwareVersion
@@ -3985,7 +4248,7 @@ sub _load_attr {
# partial fetch may strip the Module portion upon return. We need
# the match to make sure we didn't leave the table during getnext
# requests
my ($leaf) = $qual_leaf =~ /::(\w+)$/;
$self->debug()
@@ -3993,7 +4256,7 @@ sub _load_attr {
defined $partial ? "($partial)" : '', " : $oid" ,
defined $partial ? ".$partial" : '', "\n";
my $var = new SNMP::Varbind( [$qual_leaf, $partial] );
my $var = SNMP::Varbind->new( [$qual_leaf, $partial] );
# So devices speaking SNMP v.1 are not supposed to give out
# data from SNMP2, but most do. Net-SNMP, being very precise
@@ -4182,10 +4445,11 @@ sub snmp_connect_ip {
my $ver = $self->snmp_ver();
my $comm = $self->snmp_comm();
return if $self->{Offline};
return if ( $ip eq '0.0.0.0' ) or ( $ip =~ /^127\./ );
# Create session object
my $snmp_test = new SNMP::Session(
my $snmp_test = SNMP::Session->new(
'DestHost' => $ip,
'Community' => $comm,
'Version' => $ver
@@ -4336,6 +4600,11 @@ sub _validate_autoload_method {
$leaf_name =~ s/_/-/g;
}
# skip if offline
if ( $self->{Offline} ) {
return [1,(exists $self->{store}->{$method} ? 1: 0)];
}
# Translate MIB leaf node name to OID
my $oid = SNMP::translateObj($leaf_name);
@@ -4356,15 +4625,13 @@ sub _validate_autoload_method {
# If we were given a fully qualified OID because we don't have the MIB
# file, it will translate above but we won't be able to check access so
# skip the check and return
if ($access) {
unless ( ( $method =~ /^set/ && $access =~ /Write|Create/ )
|| $access =~ /Read|Create/ )
{
if ($access && $method =~ /^set/ && $access !~ /Write|Create/) {
print
"SNMP::Info::_validate_autoload_method($attr : $oid) Not accessable for requested operation.\n"
if $self->debug();
return;
}
}
# If the parent of the leaf has indexes it is contained within a table
@@ -4372,7 +4639,8 @@ sub _validate_autoload_method {
my $table_leaf = 0;
if ( !$globals->{$attr}
&& ( defined $indexes && scalar( @{$indexes} ) > 0 ) )
&& ( ( defined $indexes && scalar( @{$indexes} ) > 0 )
|| $funcs->{$attr} ))
{
$table_leaf = 1;
}
@@ -4411,6 +4679,8 @@ sub can {
# use results of parent can()
return $self->SUPER::can($method) if $self->SUPER::can($method);
return if $method eq 'CARP_TRACE';
my $validated = $self->_validate_autoload_method($method);
return unless $validated;
@@ -4421,21 +4691,27 @@ sub can {
my $funcs = $self->funcs();
# We need to resolve funcs with a prefix or suffix
my $f_method = $method;
$f_method =~ s/^(load|orig)_//;
$f_method =~ s/_raw$//;
my $base_method = $method;
$base_method =~ s/^(load|orig)_//;
$base_method =~ s/_raw$//;
no strict 'refs'; ## no critic (ProhibitNoStrict )
# We could add load_/orig_/_raw alternatives to symbol table here on
# first call of any type for a global or func since they all use the same
# destination code, but they aren't used heavily in main code base so
# well just create if/when they are called rather than pollute the
# symbol table with entries that never get called.
# Check for set_ ing.
if ( $method =~ /^set_/ ) {
return *{$AUTOLOAD} = _make_setter( $method, $oid, @_ );
return *{$method} = _make_setter( $method, $oid, @_ );
}
elsif ( defined $funcs->{$f_method} || $table ) {
return *{$AUTOLOAD} = _load_attr( $method, $oid, @_ );
elsif ( defined $funcs->{$base_method} || $table ) {
return *{$method} = _load_attr( $method, $oid, @_ );
}
else {
return *{$AUTOLOAD} = _global( $method, $oid );
return *{$method} = _global( $method, $oid );
}
}
@@ -4475,16 +4751,18 @@ subclass.
=cut
our $AUTOLOAD;
sub AUTOLOAD {
my $self = shift;
my ($sub_name) = $AUTOLOAD =~ /::(\w+)$/;
return if $sub_name =~ /DESTROY$/;
return if $sub_name eq 'CARP_TRACE';
# Typos in function calls in SNMP::Info subclasses turn into
# AUTOLOAD requests for non-methods. While this is deprecated,
# we'll still get called, so report a less confusing error.
if ( ref($self) !~ /^SNMP::Info/ ) {
if ( ref($self) !~ /SNMP::Info/ ) {
# croak reports one level too high. die reports here.
# I would really like to get the place that's likely to
@@ -4507,6 +4785,9 @@ sub AUTOLOAD {
}
# Skip AUTOLOAD()
sub DESTROY {}
1;
=head1 COPYRIGHT AND LICENSE

View File

@@ -38,7 +38,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );

View File

@@ -38,7 +38,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );

View File

@@ -38,9 +38,10 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (); # IF-MIB
# Load MIB for leafs referenced within class
%MIBS = ('IF-MIB' => 'ifIndex',);
%GLOBALS = ();
@@ -61,7 +62,7 @@ sub agg_ports_ifstack {
foreach my $idx ( keys %$ifStack ) {
my ( $higher, $lower ) = split /\./, $idx;
next if ( $higher == 0 or $lower == 0 );
if ( $ifType->{ $higher } eq 'ieee8023adLag' ) {
if ( $ifType->{ $higher } eq 'ieee8023adLag' or $ifType->{ $higher } eq 'propMultiplexor') {
$ret->{ $lower } = $higher;
}
}

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -42,11 +42,12 @@ use SNMP::Info;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
'Q-BRIDGE-MIB' => 'dot1qPvid',
'RSTP-MIB' => 'dot1dStpPortOperEdgePort',
);
%GLOBALS = (
@@ -84,6 +85,17 @@ $VERSION = '3.14';
'bs_to' => 'dot1dStaticAllowedToGoTo',
'bs_status' => 'dot1dStaticStatus',
# These leafs are not part of a table, but placed here
# to return a hash reference to ease API compatibility with
# MST and PVST implementations indexed by a spanning tree
# instance id
'stp_i_mac' => 'dot1dBaseBridgeAddress',
'stp_i_time' => 'dot1dStpTimeSinceTopologyChange',
'stp_i_ntop' => 'dot1dStpTopChanges',
'stp_i_root' => 'dot1dStpDesignatedRoot',
'stp_i_root_port' => 'dot1dStpRootPort',
'stp_i_priority' => 'dot1dStpPriority',
# Spanning Tree Protocol Table : dot1dStpPortTable
'stp_p_id' => 'dot1dStpPort',
'stp_p_priority' => 'dot1dStpPortPriority',
@@ -93,6 +105,10 @@ $VERSION = '3.14';
'stp_p_bridge' => 'dot1dStpPortDesignatedBridge',
'stp_p_port' => 'dot1dStpPortDesignatedPort',
# Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort',
'is_edgeport_oper' => 'dot1dStpPortOperEdgePort',
# Q-BRIDGE-MIB : dot1qPortVlanTable
'qb_i_vlan' => 'dot1qPvid',
'qb_i_vlan_type' => 'dot1qPortAcceptableFrameTypes',
@@ -125,15 +141,18 @@ $VERSION = '3.14';
'b_mac' => \&SNMP::Info::munge_mac,
'fw_mac' => \&SNMP::Info::munge_mac,
'bs_mac' => \&SNMP::Info::munge_mac,
'stp_root' => \&SNMP::Info::munge_mac,
'stp_root' => \&SNMP::Info::munge_prio_mac,
'stp_i_mac' => \&SNMP::Info::munge_mac,
'stp_i_root' => \&SNMP::Info::munge_prio_mac,
'stp_p_root' => \&SNMP::Info::munge_prio_mac,
'stp_p_bridge' => \&SNMP::Info::munge_prio_mac,
'stp_p_port' => \&SNMP::Info::munge_prio_mac,
'stp_p_port' => \&SNMP::Info::munge_prio_port,
'qb_cv_egress' => \&SNMP::Info::munge_port_list,
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
'qb_v_egress' => \&SNMP::Info::munge_port_list,
'qb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
'qb_v_untagged' => \&SNMP::Info::munge_port_list,
'qb_cv_untagged' => \&SNMP::Info::munge_port_list,
);
@@ -163,10 +182,20 @@ sub qb_fw_vlan {
my $partial = shift;
my $qb_fw_port = $bridge->qb_fw_port($partial);
my $qb_fdb_ids = $bridge->qb_fdb_index() || {};
my $qb_fw_vlan = {};
foreach my $idx ( keys %$qb_fw_port ) {
my ( $fdb_id, $mac ) = _qb_fdbtable_index($idx);
$qb_fw_vlan->{$idx} = $fdb_id;
# Many devices do not populate the dot1qVlanCurrentTable, so default
# to FDB ID = VID, but if we have a mapping use it.
my $vlan = $fdb_id;
# defined as test since some devices have a vlan 0
if (defined $qb_fdb_ids->{$fdb_id}) {
$vlan = $qb_fdb_ids->{$fdb_id};
}
$qb_fw_vlan->{$idx} = $vlan;
}
return $qb_fw_vlan;
}
@@ -189,6 +218,25 @@ sub qb_i_vlan_t {
return $i_vlan;
}
sub qb_fdb_index {
my $bridge = shift;
my $partial = shift;
# Some devices may not implement TimeFilter in a standard manner
# appearing to loop on this request. Override in the device class,
# see Enterasys for example.
my $qb_fdb_ids = $bridge->dot1qVlanFdbId() || {};
# Strip the TimeFilter
my $vl_fdb_index = {};
for my $fdb_entry (keys(%$qb_fdb_ids)) {
(my $vlan = $fdb_entry) =~ s/^\d+\.//;
$vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan;
}
return $vl_fdb_index;
}
# Most devices now support Q-BRIDGE-MIB, fall back to
# BRIDGE-MIB for those that don't.
sub fw_mac {
@@ -343,20 +391,31 @@ sub i_vlan_membership {
my $bridge = shift;
my $partial = shift;
my $index = $bridge->bp_index();
# Use VlanCurrentTable if available since it will include dynamic
# VLANs. However, some devices do not populate the table.
my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
return $bridge->_vlan_hoa($v_ports, $partial);
}
sub i_vlan_membership_untagged {
my $bridge = shift;
my $partial = shift;
# Use VlanCurrentTable if available since it will include dynamic
# VLANs. However, some devices do not populate the table.
my $v_ports = $bridge->qb_cv_untagged() || $bridge->qb_v_untagged();
# 11/07 - Todo: Issue with some devices trying to query VlanCurrentTable
# as table may grow very large with frequent VLAN changes.
# 06/08 - VlanCurrentTable may be due to timefilter, should query with
# zero partial for no time filter.
# my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
return $bridge->_vlan_hoa($v_ports, $partial);
}
my $v_ports = $bridge->qb_v_egress() || {};
sub _vlan_hoa {
my $bridge = shift;
my ( $v_ports, $partial ) = @_;
my $i_vlan_membership = {};
my $index = $bridge->bp_index();
my $vlan_hoa = {};
foreach my $idx ( keys %$v_ports ) {
next unless ( defined $v_ports->{$idx} );
my $portlist = $v_ports->{$idx};
@@ -376,10 +435,10 @@ sub i_vlan_membership {
my $ifindex = $index->{$port};
next unless ( defined($ifindex) ); # shouldn't happen
next if ( defined $partial and $ifindex !~ /^$partial$/ );
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
push( @{ $vlan_hoa->{$ifindex} }, $vlan );
}
}
return $i_vlan_membership;
return $vlan_hoa;
}
sub set_i_pvid {
@@ -649,11 +708,21 @@ IDs. These are the VLANs which are members of the egress list for the port.
print "Port: $port VLAN: $vlan\n";
}
=item $bridge->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=item $bridge->qb_i_vlan_t()
Returns reference to hash: key = C<dot1dBasePort>, value = either 'trunk' for
tagged ports or the VLAN ID.
=item $bridge->qb_fdb_index()
Returns reference to hash: key = VLAN ID, value = FDB ID.
=item $bridge->v_index()
Returns VLAN IDs
@@ -707,6 +776,48 @@ to this port.
=back
=head2 Spanning Tree Instance Globals
These are not part of a table, but return a hash reference to ease API
compatibility with MST and PVST implementations indexed by a spanning tree
instance id.
=over
=item $bridge->stp_i_time()
Returns time since last topology change detected. (100ths/second)
(C<dot1dStpTimeSinceTopologyChange>)
=item $bridge->stp_i_time()
Returns the total number of topology changes detected.
(C<dot1dStpTopChanges>)
=item $bridge->stp_i_root()
Returns root of STP.
(C<dot1dStpDesignatedRoot>)
=item $bridge->stp_i_root_port()
Returns the port number of the port that offers the lowest cost path
to the root bridge.
(C<dot1dStpRootPort>)
=item $bridge->stp_i_priority()
Returns the port number of the port that offers the lowest cost path
to the root bridge.
(C<dot1dStpPriority>)
=back
=head2 Spanning Tree Protocol Table (C<dot1dStpPortTable>)
Descriptions are straight from F<BRIDGE-MIB.my>

View File

@@ -43,7 +43,7 @@ use SNMP::Info;
use vars
qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
$VERSION = '3.14';
$VERSION = '3.54';
# Five data structures required by SNMP::Info
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
@@ -62,7 +62,7 @@ $VERSION = '3.14';
'cdp_proto' => 'cdpCacheAddressType',
'cdp_addr' => 'cdpCacheAddress',
'cdp_ver' => 'cdpCacheVersion',
'cdp_id' => 'cdpCacheDeviceId',
'cdp_dev_id' => 'cdpCacheDeviceId',
'cdp_port' => 'cdpCacheDevicePort',
'cdp_platform' => 'cdpCachePlatform',
'cdp_capabilities' => 'cdpCacheCapabilities',
@@ -81,7 +81,6 @@ $VERSION = '3.14';
'cdp_platform' => \&SNMP::Info::munge_null,
'cdp_domain' => \&SNMP::Info::munge_null,
'cdp_port' => \&SNMP::Info::munge_null,
'cdp_id' => \&SNMP::Info::munge_null,
'cdp_ver' => \&SNMP::Info::munge_null,
'cdp_ip' => \&SNMP::Info::munge_ip,
'cdp_power' => \&munge_power,
@@ -210,6 +209,22 @@ sub cdp_cap {
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;
__END__

View File

@@ -1,6 +1,6 @@
# SNMP::Info::CiscoAgg
#
# Copyright (c) 2014 SNMP::Info Developers
# Copyright (c) 2018 SNMP::Info Developers
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -43,7 +43,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::IEEE802dot3ad::MIBS,
@@ -52,9 +52,13 @@ $VERSION = '3.14';
%GLOBALS = ();
%FUNCS = ();
%FUNCS = (
%SNMP::Info::IEEE802dot3ad::FUNCS,
);
%MUNGE = ();
%MUNGE = (
%SNMP::Info::IEEE802dot3ad::MUNGE,
);
sub agg_ports_pagp {
my $dev = shift;
@@ -147,4 +151,8 @@ automatically.
=back
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
=cut

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
@@ -97,6 +97,10 @@ sub copy_run_tftp {
print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
#Check each set, delete created row if any fail
unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) {
$ciscoconfig->error_throw("Initializing config copy instruction failed");
return;
}
unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
$ciscoconfig->error_throw("Setting source type failed");
unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {

View File

@@ -38,12 +38,13 @@ use Exporter;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
'CISCO-PAE-MIB' => 'ciscoPaeMIB',
'IEEE8021-PAE-MIB' => 'dot1xAuthLastEapolFrameSource',
'CISCO-ERR-DISABLE-MIB' => 'ciscoErrDisableMIB',
);
%GLOBALS = (
@@ -99,6 +100,9 @@ $VERSION = '3.14';
# IEEE8021-PAE-MIB::dot1xPaePortEntry
'pae_i_capabilities' => 'dot1xPaePortCapabilities',
'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource',
# CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry
'cerr_i_cause' => 'cErrDisableIfStatusCause',
);
%MUNGE = (
@@ -123,13 +127,29 @@ sub munge_pae_capabilities {
return join( ' ', @vals );
}
# Define a generic method to show the cause for a port to be err-disabled.
# Cisco indexes cErrDisableIfStatusCause by {ifindex,vlan}, but for a more
# generic method, using ifIndex only makes it easier to implement across
# device classes. Besides, several (most?) err-disable features will disable
# the whole interface anyway, and not just a vlan on the interface.
sub i_err_disable_cause {
my $cps = shift;
my $ret;
my $causes = $cps->cerr_i_cause() || {};
foreach my $interfacevlan (keys %$causes) {
my ($iid, $vid) = split(/\./, $interfacevlan);
$ret->{$iid} = $causes->{$interfacevlan};
}
return $ret;
}
1;
__END__
=head1 NAME
SNMP::Info::CiscoPortSecurity - SNMP Interface to data from
F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>
F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and F<CISCO-ERR-DISABLE-MIB>.
=head1 AUTHOR
@@ -153,8 +173,9 @@ Eric Miller
=head1 DESCRIPTION
SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides
an interface to the F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>. These
MIBs are used across the Catalyst family under CatOS and IOS.
an interface to the F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and
F<CISCO-ERR-DISABLE-MIB>. These MIBs are used across the Catalyst
family under CatOS and IOS.
Use or create in a subclass of SNMP::Info. Do not use directly.
@@ -172,6 +193,8 @@ None.
=item F<IEEE8021-PAE-MIB>
=item F<CISCO-ERR-DISABLE-MIB>
=back
=head1 GLOBALS
@@ -374,6 +397,31 @@ The source MAC address carried in the most recently received EAPOL frame.
=back
=head2 C<CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry>
=over
=item $cps->cerr_i_cause()
C<cErrDisableIfStatusCause>
Indicates the feature/event that caused the {interface, vlan} (or the entire
interface) to be error-disabled.
=back
=head1 METHODS
=over
=item C<i_err_disable_cause>
Returns a HASH reference mapping ifIndex to err-disabled cause. The returned
data is sparse, so if the ifIndex is not present in the return value, the port
is not err-disabled.
=back
=head1 Data Munging Callback Subroutines
=over

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );

View File

@@ -32,14 +32,13 @@ package SNMP::Info::CiscoStack;
use strict;
use Exporter;
use SNMP::Info;
@SNMP::Info::CiscoStack::ISA = qw/SNMP::Info Exporter/;
@SNMP::Info::CiscoStack::ISA = qw/Exporter/;
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'SNMPv2-MIB' => 'sysDescr',
@@ -88,6 +88,9 @@ $VERSION = '3.14';
# CISCO-FLASH-MIB::ciscoFlashDeviceTable
'cisco_flash_size' => 'ciscoFlashDeviceSize',
# CISCO-IMAGE-MIB
'ci_images' => 'ciscoImageString',
);
%MUNGE = ();
@@ -539,4 +542,16 @@ zero if the device has been removed.
=back
=head2 Cisco Image Table (C<ciscoImageTable>)
=over
=item $ci->ci_images()
Returns the table of image strings.
C<ciscoImageString>
=back
=cut

View File

@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
$VERSION = '3.14';
$VERSION = '3.54';
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
@@ -54,12 +54,15 @@ $VERSION = '3.14';
'stpx_stp_type' => 'stpxSpanningTreeType',
'stpx_bpduguard_enable' => 'stpxFastStartBpduGuardEnable',
'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
'stpx_faststart_default' => 'stpxFastStartGlobalDefaultMode',
);
%FUNCS = (
%SNMP::Info::Bridge::FUNCS,
'stpx_rootguard_enabled' => 'stpxRootGuardConfigEnabled',
'stpx_loopguard_enabled' => 'stpxLoopGuardConfigEnabled',
'stpx_faststart_enabled' => 'stpxFastStartPortEnable',
'stpx_faststart_operational' => 'stpxFastStartPortMode',
'stpx_port_bpduguard_mode' => 'stpxFastStartPortBpduGuardMode',
'stpx_port_bpdufilter_mode' => 'stpxFastStartPortBpduFilterMode',
'stpx_smst_root' => 'stpxSMSTInstanceCISTRegionalRoot',
@@ -69,7 +72,7 @@ $VERSION = '3.14';
%MUNGE = (
%SNMP::Info::Bridge::MUNGE,
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
'stpx_mst_config_digest' => \&SNMP::Info::CiscoStpExtensions::oct2str,
);
@@ -225,6 +228,36 @@ sub i_bpdufilter_enabled {
return \%res;
}
sub i_faststart_enabled {
my $self = shift;
my $partial = shift;
my $faststart_default = $self->stpx_faststart_default();
my $bp_index = $self->bp_index($partial);
my $faststart = $self->stpx_faststart_enabled();
my $faststart_oper = $self->stpx_faststart_operational();
my %res;
# stpxFastStartPortEnable is deprecated in favour of stpxFastStartPortMode
# see https://github.com/netdisco/netdisco/issues/12
foreach my $index ( keys %$faststart, keys %$faststart_oper ){
my $mode = $faststart_oper->{$index} || $faststart->{$index};
my $iid = $bp_index->{$index};
next unless defined $iid;
next unless defined $mode;
if ( $mode eq 'default' ){
$res{$iid} = $faststart_default;
}else{
$res{$iid} = $mode;
}
$res{$iid} = 'enable' if $res{$iid} eq 'true';
$res{$iid} = 'disable' if $res{$iid} eq 'false';
$res{$iid} = 1 if $res{$iid} =~ m/enable/i; # enableForTrunk
$res{$iid} = 0 if $res{$iid} eq 'disable';
}
return \%res;
}
sub oct2str {
my ($v) = @_;
@@ -340,6 +373,13 @@ Format is a hash reference with key = C<ifIndex>, value = [1|0]
(C<stpxFastStartBpduFilterEnable>)
=item $stpx->i_faststart_enabled()
Returns 1 or 0 depending on whether FastStart (aka PortFast) is enabled on a
given port. Format is a hash reference with key = C<ifIndex>, value = [1|0]
(C<stpxFastStartPortEnable> and C<stpxFastStartPortMode>)
=back
=head1 MUNGES

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'CISCO-VTP-MIB' => 'vtpVlanName',
@@ -149,6 +149,7 @@ sub i_vlan {
my $port_vlan = $vtp->vtp_trunk_native($partial) || {};
my $i_vlan = $vtp->i_vlan2($partial) || {};
my $trunk_dyn = $vtp->vtp_trunk_dyn($partial) || {};
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
my %i_vlans;
@@ -165,15 +166,23 @@ sub i_vlan {
foreach my $port ( keys %$port_vlan ) {
my $vlan = $port_vlan->{$port};
next unless defined $vlan;
# ports up and trunking should have a trunking status
my $stat = $trunk_dyn_stat->{$port};
if ( defined $stat and $stat =~ /^trunking/ ) {
# vtp_trunk_dyn_stat is not useful for down ports
# so we use vtp_trunk_dyn to see if trunking is set
my $dyn = $trunk_dyn->{$port};
if (($stat and $stat =~ /^trunking/ )
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))))
{
$i_vlans{$port} = $vlan;
}
}
# Check in CISCO-VLAN-IFTABLE-RELATION-MIB
# Is this only for Aironet??? If so, it needs
# to be removed from this class
# Used for traditional Cisco Routers and Aironet
my $v_cvi_if = $vtp->v_cvi_if();
if ( defined $v_cvi_if ) {
@@ -218,6 +227,8 @@ sub i_vlan_membership {
my $vtp_vlans = $vtp->v_state();
my $i_vlan = $vtp->i_vlan2($partial) || {};
my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
my $trunk_dyn = $vtp->vtp_trunk_dyn($partial) || {};
my $i_voice_vlan = $vtp->i_voice_vlan($partial) || {};
my $i_vlan_membership = {};
@@ -225,14 +236,24 @@ sub i_vlan_membership {
foreach my $port ( keys %$i_vlan ) {
my $vlan = $i_vlan->{$port};
next unless defined $vlan;
my $stat = $trunk_dyn_stat->{$port};
if ( defined $stat and $stat =~ /notTrunking/ ) {
my $dyn = $trunk_dyn->{$port};
unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
push( @{ $i_vlan_membership->{$port} }, $vlan );
}
}
# Get voice VLANs
foreach my $port ( keys %$i_voice_vlan ) {
my $vlan = $i_voice_vlan->{$port};
next unless defined $vlan;
next unless ($vlan =~ m/[[:digit:]]+/ and $vlan < 4095);
my $dyn = $trunk_dyn->{$port};
unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
push( @{ $i_vlan_membership->{$port} }, $vlan );
}
}
# Get trunk ports
my %oper_vlans;
foreach my $iid ( keys %$vtp_vlans ) {
my $vlan = 0;
@@ -249,7 +270,9 @@ sub i_vlan_membership {
foreach my $port ( keys %$ports_vlans ) {
my $stat = $trunk_dyn_stat->{$port};
if ( defined $stat and $stat =~ /^trunking/ ) {
my $dyn = $trunk_dyn->{$port};
if (($stat and $stat =~ /^trunking/ )
or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate')))) {
my $k = 0;
my $list1 = $ports_vlans->{$port} || '0';
my $list2 = $ports_vlans_2k->{$port} || '0';
@@ -271,6 +294,20 @@ sub i_vlan_membership {
return $i_vlan_membership;
}
sub i_vlan_membership_untagged {
my $vtp = shift;
my $partial = shift;
my $vlans = $vtp->i_vlan($partial);
my $i_vlan_membership = {};
foreach my $port (keys %$vlans) {
my $vlan = $vlans->{$port};
push( @{ $i_vlan_membership->{$port} }, $vlan );
}
return $i_vlan_membership;
}
sub set_i_pvid {
my $vtp = shift;
my ( $vlan_id, $ifindex ) = @_;
@@ -591,6 +628,12 @@ IDs. These are the VLANs which are members of enabled VLAN list for the port.
print "Port: $port VLAN: $vlan\n";
}
=item $vtp->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=back
=head2 VLAN Table (C<CISCO-VTP-MIB::vtpVlanTable>)

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
@@ -68,7 +68,6 @@ $VERSION = '3.14';
'el_xmit_defer' => 'dot3StatsDeferredTransmissions',
# Ethernet-like Collision Statistics Group
'el_coll_count' => 'dot3CollCount',
'el_coll_freq' => 'dot3CollFrequencies'
);

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
@@ -50,7 +50,7 @@ $VERSION = '3.14';
'fdp_run' => 'snFdpGlobalRun',
'fdp_interval' => 'snFdpGlobalMessageInterval',
'fdp_holdtime' => 'snFdpGlobalHoldTime',
'fdp_id' => 'snFdpGlobalDeviceId',
'fdp_gid' => 'snFdpGlobalDeviceId',
);
%FUNCS = (
@@ -231,7 +231,7 @@ Time in seconds that FDP messages are kept.
(C<fdpGlobalHoldTime>)
=item $fdp->fdp_id()
=item $fdp->fdp_gid()
Returns FDP device ID.

View File

@@ -38,7 +38,7 @@ use Exporter;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );

View File

@@ -1,6 +1,6 @@
# SNMP::Info::IEEE802dot3ad
#
# Copyright (c) 2014 SNMP::Info Developers
# Copyright (c) 2018 SNMP::Info Developers
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -43,7 +43,7 @@ use SNMP::Info::Aggregate;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Aggregate::MIBS,
@@ -52,29 +52,30 @@ $VERSION = '3.14';
%GLOBALS = ();
%FUNCS = ();
%FUNCS = (
'ad_lag_ports' => 'dot3adAggPortListPorts',
);
%MUNGE = ();
%MUNGE = (
'ad_lag_ports' => \&SNMP::Info::munge_port_list,
);
sub agg_ports_lag {
my $dev = shift;
# TODO: implement partial
my $masters = $dev->dot3adAggActorOperKey;
my $slaves = $dev->dot3adAggPortActorOperKey;
my $ports = $dev->ad_lag_ports;
return {} unless
ref {} eq ref $masters and scalar keys %$masters
and ref {} eq ref $slaves and scalar keys %$slaves;
return {} unless ref {} eq ref $ports and scalar keys %$ports;
my $ret = {};
foreach my $s (keys %$slaves) {
next if $slaves->{$s} == 0;
foreach my $m (keys %$masters) {
next unless $masters->{$m} == $slaves->{$s};
$ret->{$s} = $m;
last;
}
foreach my $m ( keys %$ports ) {
my $idx = $m;
my $portlist = $ports->{$m};
next unless $portlist;
for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
$ret->{$i+1} = $idx if ( @$portlist[$i] );
}
}
return $ret;

View File

@@ -44,7 +44,7 @@ use constant {
IPV6MIB => 3,
};
$VERSION = '3.14';
$VERSION = '3.54';
@@ -67,20 +67,24 @@ $VERSION = '3.14';
'ip_n2p_phys_state' => 'ipNetToPhysicalState', # IP-MIB
'c_inet_phys_state' => 'cInetNetToMediaState', # CISCO-IETF-IP-MIB
'i6_n2p_phys_state' => 'ipv6NetToMediaState', # IPV6-MIB
'i6_n2p_phys_state' => 'ipv6IfNetToMediaState', # IPV6-MIB
'ip_pfx_origin' => 'ipAddressPrefixOrigin', # IP-MIB
'c_pfx_origin' => 'cIpAddressPfxOrigin', # CISCO-IETF-IP-MIB
'ip_addr6_pfx' => 'ipAddressPrefix', # IP-MIB
'ip_addr6_pfx' => 'ipAddressPrefix', # IP-MIB
'c_addr6_pfx' => 'cIpAddressPrefix', # CISCO-IETF-IP-MIB
'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
'ip_addr6_type' => 'ipAddressType', # IP-MIB
'c_addr6_type' => 'cIpAddressType', # CISCO-IETF-IP-MIB
);
%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.
$v6_packed = pack('C', $addrsize) . $v6_packed;
}
if (length($v6_packed) == 17) {
# Workaround for IPV6-MIB on Windows 2012: if the address is one byte too long, the SNMP agent probably has an incorrect
# implementation where a length field precedes the actual IPv6 address.
# In that case, the first character should be chr(16), ie 0x10; strip it if that's the case.
$v6_packed =~ s/^\x10//;
}
if (length($v6_packed) == 16) {
$v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
$return->{$row} = $v6addr;
@@ -307,7 +317,9 @@ sub ipv6_addr_prefix {
foreach my $row (keys %$ipv6_addr_prefix){
if ($row =~ /^(\d+)\.[\d\.]+$/) {
my $type = $1;
if ($type == 2) { # IPv6
if (($type == 2) or ($type == 4)) { # IPv6
# Remove interface specific part from vrf interfaces
if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
# Remove the OID part from the value
my $val = $ipv6_addr_prefix->{$row};
if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
@@ -321,9 +333,60 @@ sub ipv6_addr_prefix {
return $return;
}
sub ipv6_addr_prefixlength {
my $info = shift;
my $return;
my $ipv6_addr_prefix = &_test_methods( $info, {
ip_addr6_pfx => IPMIB,
c_addr6_pfx => CISCO,
});
return unless defined $ipv6_addr_prefix;
foreach my $row (keys %$ipv6_addr_prefix) {
if ($row =~ /^(\d+)\.[\d\.]+$/) {
my $type = $1;
if (($type == 2) or ($type == 4)) { # IPv6
# Remove interface specific part from vrf interfaces
if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
# Remove the OID part from the value
my $val = $ipv6_addr_prefix->{$row};
if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) {
$val = $2;
$return->{$row} = $val;
}
}
}
}
printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
return $return;
}
sub ipv6_addr {
my $info = shift;
my $return;
my $indexes = $info->ipv6_index();
foreach my $row (keys %$indexes) {
my @parts = split(/\./, $row);
my $is_valid = 0;
if (scalar @parts == 18) {
my $addrtype = shift @parts;
$is_valid = 1;
} elsif (scalar @parts == 17) {
$is_valid = 1;
}
my $addrsize = shift @parts; # First element now is addrsize, should be 16
if ($is_valid && $addrsize == 16) {
$return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts)));
} else {
warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
}
}
return $return;
}
sub _method_used {
my $info = shift;
my $return = 'none of the MIBs';
# FIXME ugh! a global. makes order of calls important for debug.
if (defined $info::METHOD) {
if ($info::METHOD eq IPMIB) {
$return = 'IP-MIB';
@@ -343,6 +406,7 @@ sub _test_methods {
foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
$return = $info->$method || {};
if (scalar keys %$return) {
# FIXME ugh! a global. makes order of calls important for debug.
$info::METHOD = $test->{$method};
last;
}
@@ -459,6 +523,14 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
Maps IPv6 addresses with their prefixes
=item $info->ipv6_addr_prefixlength()
Maps IPv6 addresses with their prefix length
=item $info->ipv6_addr()
Maps a table instance to an IPv6 address
=back
=head2 Internet Address Translation Table

View File

@@ -39,10 +39,11 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
'LLDP-MIB' => 'lldpLocSysCapEnabled',
'LLDP-EXT-MED-MIB' => 'lldpXMedMIB',
'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
);
@@ -69,6 +70,18 @@ $VERSION = '3.14';
'lldp_rem_sys_cap' => 'lldpRemSysCapEnabled',
'lldp_rem_cap_spt' => 'lldpRemSysCapSupported',
# LLDP-MIB::lldpXMedRemInventoryTable
'lldp_rem_hw_rev' => 'lldpXMedRemHardwareRev',
'lldp_rem_fw_rev' => 'lldpXMedRemFirmwareRev',
'lldp_rem_sw_rev' => 'lldpXMedRemSoftwareRev',
'lldp_rem_serial' => 'lldpXMedRemSerialNum',
'lldp_rem_vendor' => 'lldpXMedRemMfgName',
'lldp_rem_model' => 'lldpXMedRemModelName',
'lldp_rem_asset' => 'lldpXMedRemAssetID',
'lldp_rem_media_cap' => 'lldpXMedRemCapCurrent',
'lldp_rem_media_cap_spt' => 'lldpXMedRemCapSupported',
# LLDP-MIB::lldpRemManAddrTable
'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
);
@@ -82,6 +95,17 @@ $VERSION = '3.14';
'lldp_sys_cap' => \&SNMP::Info::munge_bits,
'lldp_rem_sys_cap' => \&SNMP::Info::munge_bits,
'lldp_rem_cap_spt' => \&SNMP::Info::munge_bits,
'lldp_rem_hw_rev' => \&SNMP::Info::munge_null,
'lldp_rem_fw_rev' => \&SNMP::Info::munge_null,
'lldp_rem_sw_rev' => \&SNMP::Info::munge_null,
'lldp_rem_serial' => \&SNMP::Info::munge_null,
'lldp_rem_vendor' => \&SNMP::Info::munge_null,
'lldp_rem_model' => \&SNMP::Info::munge_null,
'lldp_rem_asset' => \&SNMP::Info::munge_null,
'lldp_rem_media_cap' => \&SNMP::Info::munge_bits,
'lldp_rem_media_cap_spt' => \&SNMP::Info::munge_bits,
);
sub hasLLDP {
@@ -95,7 +119,7 @@ sub hasLLDP {
# If the device doesn't return local system capabilities, fallback by checking if it would report neighbors
my $lldp_rem = $lldp->lldp_rem_id() || {};
return 1 if scalar keys %$lldp_rem;
return;
}
@@ -104,11 +128,11 @@ sub lldp_if {
my $partial = shift;
my $addr = $lldp->lldp_rem_pid($partial) || {};
my $i_descr = $lldp->i_description() || {};
my $i_alias = $lldp->i_alias() || {};
my $i_descr = $lldp->i_description() || {};
my $i_alias = $lldp->i_alias() || {};
my %r_i_descr = reverse %$i_descr;
my %r_i_alias = reverse %$i_alias;
my %lldp_if;
foreach my $key ( keys %$addr ) {
my @aOID = split( '\.', $key );
@@ -119,14 +143,15 @@ sub lldp_if {
# prefer ifDescr over ifAlias because using cross ref with description is correct behavior
# according to the LLDP-MIB. Some devices (eg H3C gear) seem to use ifAlias though.
my $lldp_desc = $lldp->lldpLocPortDesc($port);
my $desc = $lldp_desc->{$port};
my $desc = $lldp_desc->{$port};
# If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum
if ( exists $r_i_descr{$desc} ) {
if ( $desc && exists $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};
}
$lldp_if{$key} = $port;
}
return \%lldp_if;
@@ -148,6 +173,38 @@ sub lldp_ip {
return \%lldp_ip;
}
sub lldp_ipv6 {
my $lldp = shift;
my $partial = shift;
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
my %lldp_ipv6;
foreach my $key ( keys %$rman_addr ) {
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
next unless defined $index;
next unless $proto == 2;
$lldp_ipv6{$index} = $addr;
}
return \%lldp_ipv6;
}
sub lldp_mac {
my $lldp = shift;
my $partial = shift;
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
my %lldp_ipv6;
foreach my $key ( keys %$rman_addr ) {
my ( $index, $proto, $addr ) = _lldp_addr_index($key);
next unless defined $index;
next unless $proto == 6;
$lldp_ipv6{$index} = $addr;
}
return \%lldp_ipv6;
}
sub lldp_addr {
my $lldp = shift;
my $partial = shift;
@@ -170,12 +227,14 @@ sub lldp_port {
my $pdesc = $lldp->lldp_rem_desc($partial) || {};
my $pid = $lldp->lldp_rem_pid($partial) || {};
my $ptype = $lldp->lldp_rem_pid_type($partial) || {};
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
my %lldp_port;
foreach my $key ( sort keys %$pid ) {
my $port = $pdesc->{$key};
my $type = $ptype->{$key};
if ( $type and $type eq 'interfaceName' ) {
# If the pid claims to be an interface name,
# believe it.
$port = $pid->{$key};
@@ -194,8 +253,12 @@ sub lldp_port {
# Avaya/Nortel lldpRemPortDesc doesn't match ifDescr, but we can still
# figure out slot.port based upon lldpRemPortDesc
if ( $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ ) {
$port = defined $1 ? "$2.$3" : "$3";
if ( defined $desc->{$key}
&& $desc->{$key}
=~ /^Ethernet\s(?:Routing\s)?Switch\s\d|^Virtual\sServices\sPlatform\s\d/
&& $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ )
{
$port = defined $1 ? "$2.$3" : "1.$3";
}
$lldp_port{$key} = $port;
@@ -221,10 +284,13 @@ sub lldp_id {
if ( $type =~ /mac/ ) {
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
}
elsif ($type eq 'networkAddress') {
if ( length(unpack('H*', $id)) == 10 ) {
elsif ( $type eq 'networkAddress' ) {
if ( length( unpack( 'H*', $id ) ) == 10 ) {
# IP address (first octet is sign, I guess)
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
my @octets
= ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
[ 1 .. 4 ];
$id = join '.', map { hex($_) } @octets;
}
}
@@ -237,39 +303,76 @@ sub lldp_platform {
my $lldp = shift;
my $partial = shift;
my $rid = $lldp->lldp_rem_id($partial) || {};
my $rid = $lldp->lldp_rem_id($partial) || {};
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
my $name = $lldp->lldp_rem_sysname($partial) || {};
my %lldp_platform;
foreach my $key (keys %$rid) {
foreach my $key ( keys %$rid ) {
$lldp_platform{$key} = $desc->{$key} || $name->{$key};
}
return \%lldp_platform;
}
sub lldp_cap {
my $lldp = shift;
my $lldp = shift;
my $partial = shift;
my $lldp_caps = $lldp->lldp_rem_cap_spt($partial) || {};
my $lldp_caps = $lldp->lldp_rem_cap_spt($partial) || {};
# Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
# be able to enumerate for us, so we have to get it from the MIB
# and enumerate ourselves
my $oid = SNMP::translateObj('lldpRemSysCapEnabled',0,1) || '';
my $enums = ((ref {} eq ref $SNMP::MIB{$oid}{'enums'}) ? $SNMP::MIB{$oid}{'enums'} : {});
my $oid = SNMP::translateObj( 'lldpRemSysCapEnabled', 0, 1 ) || '';
my $enums = (
( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
? $SNMP::MIB{$oid}{'enums'}
: {}
);
my %r_enums = reverse %$enums;
my %lldp_cap;
foreach my $key ( keys %$lldp_caps ) {
my $cap_bits = $lldp_caps->{$key};
next unless $cap_bits;
my $count = 0;
foreach my $bit (split //,$cap_bits) {
if ( $bit ) {
push ( @{$lldp_cap{$key}}, $r_enums{$count});
foreach my $bit ( split //, $cap_bits ) {
if ($bit) {
push( @{ $lldp_cap{$key} }, $r_enums{$count} );
}
$count++;
}
}
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++;
}
@@ -302,20 +405,26 @@ sub _lldp_addr_index {
my @oids = split( /\./, $idx );
my $index = join( '.', splice( @oids, 0, 3 ) );
my $proto = shift(@oids);
my $length = shift(@oids) if scalar @oids > 4;
shift(@oids) if scalar @oids > 4; # $length
# IPv4
if ( $proto == 1 ) {
return ( $index, $proto, join( '.', @oids ) );
}
# IPv6
elsif ( $proto == 2 ) {
return ( $index, $proto,
join(':', unpack('(H4)*', pack('C*', @oids)) ) );
}
# MAC
elsif ( $proto == 6 ) {
return ( $index, $proto,
join( ':', map { sprintf "%02x", $_ } @oids ) );
}
# TODO - Need to handle other protocols, i.e. IPv6
# TODO - Other protocols may be used as well; implement when needed?
else {
return;
}
@@ -383,6 +492,8 @@ None.
=item F<LLDP-MIB>
=item F<LLDP-EXT-MED-MIB>
=item F<LLDP-EXT-DOT1-MIB>
=item F<LLDP-EXT-DOT3-MIB>
@@ -481,10 +592,24 @@ if unable defaults to (C<lldpRemLocalPortNum>).
Returns remote IPv4 address. Returns for all other address types, use
lldp_addr if you want any return address type.
=item $lldp->lldp_ipv6()
Returns remote IPv6 address, if known. Returns for all other address types,
use lldp_addr if you don't care about return address type.
=item $lldp->lldp_mac()
Returns remote (management) MAC address, if known. Returns for all other
address types, use lldp_addr if you don't care about return address type.
=item $lldp->lldp_addr()
Returns remote address. Type may be any IANA Address Family Number.
Currently only returns IPv4 or MAC addresses.
Currently only returns IPv4, IPv6 or MAC addresses. If the remote device
returns more than one address type, this method will give only one. Which one
is returned is decided by chance, phase of the moon and Perl hash ordering.
Use lldp_mac, lldp_ip or lldp_ipv6 if you want a specific address type.
=item $lldp->lldp_port()
@@ -501,6 +626,12 @@ Returns hash of arrays with each array containing the system capabilities
supported by the remote system. Possible elements in the array are
enumerated from C<LldpSystemCapabilitiesMap>.
=item $lldp->lldp_media_cap()
Returns hash of arrays with each array containing the media capabilities
supported by the remote system. Possible elements in the array are
enumerated from C<LldpXMedCapabilities>.
=back
=head2 LLDP Remote Table (C<lldpRemTable>)
@@ -516,7 +647,7 @@ the remote system.
=item $lldp->lldp_rem_id()
Returns the string value used to identify the chassis component associated
Returns the string value used to identify the chassis component associated
with the remote system.
(C<lldpRemChassisId>)
@@ -562,6 +693,65 @@ Nulls are removed before the value is returned.
(C<lldpRemSysDesc>)
=item $lldp->lldp_rem_hw_rev()
Returns the string value used to identify the hardware revision of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemHardwareRev>)
=item $lldp->lldp_rem_fw_rev()
Returns the string value used to identify the firmware revision of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemHardwareRev>)
=item $lldp->lldp_rem_sw_rev()
Returns the string value used to identify the software revision of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemSoftwareRev>)
=item $lldp->lldp_rem_serial()
Returns the string value used to identify the serial number of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemSerialNum>)
=item $lldp->lldp_rem_vendor()
Returns the string value used to identify the manufacturer of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemMfgName>)
=item $lldp->lldp_rem_asset()
Returns the string value used to identify the asset number of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemAssetID>)
=item $lldp->lldp_rem_model()
Returns the string value used to identify the model of the
remote system. Nulls are removed before the value is returned.
(C<lldpXMedRemModelName>)
=item $lldp->lldp_rem_media_cap_spt()
Returns which media capabilities are supported on the remote system. Results
are munged into an ascii binary string, LSB.
=item $lldp->lldp_rem_media_cap()
Returns which media capabilities are enabled on the remote system. Results
are munged into an ascii binary string, LSB.
=item $lldp->lldp_rem_sys_cap()
Returns which system capabilities are enabled on the remote system. Results

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
@@ -71,6 +71,7 @@ sub os_ver {
if ( $descr =~ m/version (\d+\.\d+)/ ) {
return $1;
}
return;
}
sub model {
@@ -78,7 +79,7 @@ sub model {
my $desc = $allied->description();
if ( $desc =~ /(AT-\d{4}\S{1}?)/ ) {
if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
return $1;
}
return;

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
@@ -50,11 +50,11 @@ $VERSION = '3.14';
%SNMP::Info::Layer1::FUNCS,
'asante_port' => 'ePortIndex',
'asante_group' => 'ePortGrpIndex',
'i_type' => 'ePortStateType',
'i_type' => 'ePortGrpIndex',
'asante_up' => 'ePortStateLinkStatus',
);
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-HUB1012-MIB' => 'asante' );
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-AH1012-MIB' => 'asante' );
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
@@ -84,6 +84,7 @@ sub os_ver {
if ( $descr =~ /software v(\d+\.\d+)/ ) {
return $1;
}
return;
}
sub vendor {
@@ -94,7 +95,7 @@ sub model {
my $asante = shift;
my $id = $asante->id();
my $model = &SNMP::translateObj($id);
my $model = SNMP::translateObj($id);
return $model;
}
@@ -108,8 +109,8 @@ sub i_up {
my $i_up = {};
foreach my $port ( keys %$asante_up ) {
my $up = $asante_up->{$port};
$i_up->{$port} = 'down' if $up =~ /on/;
$i_up->{$port} = 'up' if $up =~ /off/;
$i_up->{$port} = 'down' if $up =~ /off/;
$i_up->{$port} = 'up' if $up =~ /on/;
}
return $i_up;
@@ -149,7 +150,7 @@ sub i_name {
my $asante = shift;
my $partial = shift;
my $i_name = $asante->orig_i_descr($partial) || {};
my $i_name = $asante->orig_i_description($partial) || {};
my %i_name;
@@ -202,7 +203,7 @@ Asante device through SNMP.
=over
=item F<ASANTE-HUB1012-MIB>
=item F<ASANTE-AH1012-MIB>
=back
@@ -230,7 +231,7 @@ Returns 'asante' :)
=item $asante->model()
Cross references $asante->id() to the F<ASANTE-HUB1012-MIB> and returns
Cross references $asante->id() to the F<ASANTE-AH1012-MIB> and returns
the results.
=back

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -1,7 +1,7 @@
# SNMP::Info::Layer1::Cyclades
# $Id$
#
# Copyright (c) 2008 Eric Miller
# Copyright (c) 2018 Eric Miller
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -39,38 +39,105 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer1::MIBS,
'CYCLADES-ACS-SYS-MIB' => 'cyACSversion',
'CYCLADES-ACS-CONF-MIB' => 'cyEthIPaddr',
'CYCLADES-ACS-INFO-MIB' => 'cyISPortTty',
'CYCLADES-ACS-SYS-MIB' => 'cyACSversion',
'CYCLADES-ACS5K-SYS-MIB' => 'cyACS5Kversion',
'CYCLADES-ACS-CONF-MIB' => 'cyACSConf',
'CYCLADES-ACS5K-CONF-MIB' => 'cyACS5KConf',
'CYCLADES-ACS-INFO-MIB' => 'cyACSInfo',
'CYCLADES-ACS5K-INFO-MIB' => 'cyACS5KInfo',
'ACS-MIB' => 'acs6016',
'ACS8000-MIB' => 'acs8048',
);
%GLOBALS = (
# CYCLADES-ACS-SYS-MIB
%SNMP::Info::Layer1::GLOBALS,
'os_ver' => 'cyACSversion',
'cy_model' => 'cyACSpname',
'serial' => 'cyACSDevId',
'root_ip' => 'cyEthIPaddr',
'ps1_status' => 'cyACSPw1',
'ps2_status' => 'cyACSPw2',
# CYCLADES-ACS-SYS-MIB
'cy_os_ver' => 'cyACSversion',
'cy_model' => 'cyACSpname',
'cy_serial' => 'cyACSDevId',
'cy_ps1_status' => 'cyACSPw1',
'cy_ps2_status' => 'cyACSPw2',
# CYCLADES-ACS-CONF-MIB
'cy_root_ip' => 'CYCLADES_ACS_CONF_MIB__cyEthIPaddr',
# CYCLADES-ACS5K-SYS-MIB
'cy5k_os_ver' => 'cyACS5Kversion',
'cy5k_model' => 'cyACS5Kpname',
'cy5k_serial' => 'cyACS5KDevId',
'cy5k_ps1_status' => 'cyACS5KPw1',
'cy5k_ps2_status' => 'cyACS5KPw2',
# CYCLADES-ACS5K-CONF-MIB
'cy5k_root_ip' => 'CYCLADES_ACS5K_CONF_MIB__cyEthIPaddr',
# ACS-MIB
'acs_os_ver' => 'ACS_MIB__acsFirmwareVersion',
'acs_model' => 'ACS_MIB__acsProductModel',
'acs_serial' => 'ACS_MIB__acsSerialNumber',
'acs_ps1_status' => 'ACS_MIB__acsPowerSupplyStatePw1',
'acs_ps2_status' => 'ACS_MIB__acsPowerSupplyStatePw2',
# ACS8000-MIB
'acs8k_os_ver' => 'ACS8000_MIB__acsFirmwareVersion',
'acs8k_model' => 'ACS8000_MIB__acsProductModel',
'acs8k_serial' => 'ACS8000_MIB__acsSerialNumber',
'acs8k_ps1_status' => 'ACS8000_MIB__acsPowerSupplyStatePw1',
'acs8k_ps2_status' => 'ACS8000_MIB__acsPowerSupplyStatePw2',
);
%FUNCS = (
%SNMP::Info::Layer1::FUNCS,
# CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
'cy_port_tty' => 'cyISPortTty',
'cy_port_name' => 'cyISPortName',
'cy_port_speed' => 'cyISPortSpeed',
'cy_port_cd' => 'cyISPortSigCD',
'cy_port_tty' => 'CYCLADES_ACS_INFO_MIB__cyISPortTty',
'cy_port_name' => 'CYCLADES_ACS_INFO_MIB__cyISPortName',
'cy_port_speed' => 'CYCLADES_ACS_INFO_MIB__cyISPortSpeed',
'cy_port_cd' => 'CYCLADES_ACS_INFO_MIB__cyISPortSigCD',
# CYCLADES-ACS-CONF-MIB::cySerialPortTable
'cy_port_socket' => 'cySPortSocketPort',
'cy_port_socket' => 'CYCLADES_ACS_CONF_MIB__cySPortSocketPort',
# CYCLADES-ACS5K-INFO-MIB::cyInfoSerialTable
'cy5k_port_tty' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortTty',
'cy5k_port_name' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortName',
'cy5k_port_speed' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSpeed',
'cy5k_port_cd' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSigCD',
# CYCLADES-ACS5K-CONF-MIB::cySerialPortTable
'cy5k_port_socket' => 'CYCLADES_ACS5K_CONF_MIB__cySPortSocketPort',
# ACS-MIB::acsSerialPortTable
'acs_port_tty' => 'ACS_MIB__acsSerialPortTableDeviceName',
'acs_port_name' => 'ACS_MIB__acsSerialPortTableName',
'acs_port_speed' => 'ACS_MIB__acsSerialPortTableComSpeed',
'acs_port_cd' => 'ACS_MIB__acsSerialPortTableSignalStateDCD',
# Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
# Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
# to be unique so that we can differentiate between the index in the
# acsSerialPortTable from ifIndex which are both integers
# ACS-MIB::acsSerialPortTableEntry
'acs_port_socket' => 'ACS_MIB__acsSerialPortTableDeviceName',
# ACS8000-MIB::acsSerialPortTable
'acs8k_port_tty' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
'acs8k_port_name' => 'ACS8000_MIB__acsSerialPortTableName',
'acs8k_port_speed' => 'ACS8000_MIB__acsSerialPortTableComSpeed',
'acs8k_port_cd' => 'ACS8000_MIB__acsSerialPortTableSignalStateDCD',
# Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
# Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
# to be unique so that we can differentiate between the index in the
# acsSerialPortTable from ifIndex which are both integers
# ACS8000-MIB::acsSerialPortTableEntry
'acs8k_port_socket' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
);
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
@@ -82,21 +149,85 @@ sub layers {
}
sub os {
return 'cyclades';
return 'avocent';
}
# Use "short circuit" to return the first MIB instance that returns data to
# reduce network communications
# We'll try newest (acs*) first assuming those are most likely deployed
sub os_ver {
my $cyclades = shift;
return
$cyclades->acs_os_ver()
|| $cyclades->acs8k_os_ver()
|| $cyclades->cy5k_os_ver()
|| $cyclades->cy_os_ver()
|| undef;
}
sub vendor {
return 'cyclades';
return 'vertiv';
}
sub model {
my $cyclades = shift;
my $model = $cyclades->cy_model();
my $model
= $cyclades->acs_model()
|| $cyclades->acs8k_model()
|| $cyclades->cy5k_model()
|| $cyclades->cy_model()
|| undef;
return unless defined $model;
return lc($model) if ( defined $model );
return lc($model);
my $id = $cyclades->id();
my $prod = SNMP::translateObj($id);
return $prod || $id;
}
sub serial {
my $cyclades = shift;
return
$cyclades->acs_serial()
|| $cyclades->acs8k_serial()
|| $cyclades->cy5k_serial()
|| $cyclades->cy_serial()
|| undef;
}
sub root_ip {
my $cyclades = shift;
return
$cyclades->cy5k_root_ip()
|| $cyclades->cy_root_ip()
|| undef;
}
sub ps1_status {
my $cyclades = shift;
return
$cyclades->acs_ps1_status()
|| $cyclades->acs8k_ps1_status()
|| $cyclades->cy5k_ps1_status()
|| $cyclades->cy_ps1_status()
|| undef;
}
sub ps2_status {
my $cyclades = shift;
return
$cyclades->acs_ps2_status()
|| $cyclades->acs8k_ps2_status()
|| $cyclades->cy5k_ps2_status()
|| $cyclades->cy_ps2_status()
|| undef;
}
# Extend interface methods to include serial ports
@@ -109,7 +240,12 @@ sub i_index {
my $partial = shift;
my $orig_index = $cyclades->orig_i_index($partial) || {};
my $cy_index = $cyclades->cy_port_socket() || {};
my $cy_index
= $cyclades->acs_port_socket()
|| $cyclades->acs8k_port_socket()
|| $cyclades->cy5k_port_socket()
|| $cyclades->cy_port_socket()
|| {};
my %i_index;
foreach my $iid ( keys %$orig_index ) {
@@ -136,9 +272,19 @@ sub interfaces {
my $cyclades = shift;
my $partial = shift;
my $i_descr = $cyclades->orig_i_description($partial) || {};
my $cy_index = $cyclades->cy_port_socket() || {};
my $cy_p_tty = $cyclades->cy_port_tty() || {};
my $i_descr = $cyclades->orig_i_description($partial) || {};
my $cy_index
= $cyclades->acs_port_socket()
|| $cyclades->acs8k_port_socket()
|| $cyclades->cy5k_port_socket()
|| $cyclades->cy_port_socket()
|| {};
my $cy_p_tty
= $cyclades->acs_port_tty()
|| $cyclades->acs8k_port_tty()
|| $cyclades->cy5k_port_tty()
|| $cyclades->cy_port_tty()
|| {};
my %if;
foreach my $iid ( keys %$i_descr ) {
@@ -166,8 +312,18 @@ sub i_speed {
my $partial = shift;
my $i_speed = $cyclades->orig_i_speed($partial) || {};
my $cy_index = $cyclades->cy_port_socket() || {};
my $cy_p_speed = $cyclades->cy_port_speed() || {};
my $cy_index
= $cyclades->acs_port_socket()
|| $cyclades->acs8k_port_socket()
|| $cyclades->cy5k_port_socket()
|| $cyclades->cy_port_socket()
|| {};
my $cy_p_speed
= $cyclades->acs_port_speed()
|| $cyclades->acs8k_port_speed()
|| $cyclades->cy5k_port_speed()
|| $cyclades->cy_port_speed()
|| {};
my %i_speed;
foreach my $iid ( keys %$i_speed ) {
@@ -195,8 +351,18 @@ sub i_up {
my $partial = shift;
my $i_up = $cyclades->orig_i_up($partial) || {};
my $cy_index = $cyclades->cy_port_socket() || {};
my $cy_p_up = $cyclades->cy_port_cd() || {};
my $cy_index
= $cyclades->acs_port_socket()
|| $cyclades->acs8k_port_socket()
|| $cyclades->cy5k_port_socket()
|| $cyclades->cy_port_socket()
|| {};
my $cy_p_up
= $cyclades->acs_port_cd()
|| $cyclades->acs8k_port_cd()
|| $cyclades->cy5k_port_cd()
|| $cyclades->cy_port_cd()
|| {};
my %i_up;
foreach my $iid ( keys %$i_up ) {
@@ -224,8 +390,18 @@ sub i_description {
my $partial = shift;
my $i_desc = $cyclades->orig_i_description($partial) || {};
my $cy_index = $cyclades->cy_port_socket() || {};
my $cy_p_desc = $cyclades->cy_port_name() || {};
my $cy_index
= $cyclades->acs_port_socket()
|| $cyclades->acs8k_port_socket()
|| $cyclades->cy5k_port_socket()
|| $cyclades->cy_port_socket()
|| {};
my $cy_p_desc
= $cyclades->acs_port_name()
|| $cyclades->acs8k_port_name()
|| $cyclades->cy5k_port_name()
|| $cyclades->cy_port_name()
|| {};
my %descr;
foreach my $iid ( keys %$i_desc ) {
@@ -253,8 +429,18 @@ sub i_name {
my $partial = shift;
my $i_name = $cyclades->orig_i_name($partial) || {};
my $cy_index = $cyclades->cy_port_socket() || {};
my $cy_p_desc = $cyclades->cy_port_name() || {};
my $cy_index
= $cyclades->acs_port_socket()
|| $cyclades->acs8k_port_socket()
|| $cyclades->cy5k_port_socket()
|| $cyclades->cy_port_socket()
|| {};
my $cy_p_desc
= $cyclades->acs_port_name()
|| $cyclades->acs8k_port_name()
|| $cyclades->cy5k_port_name()
|| $cyclades->cy_port_name()
|| {};
my %i_name;
foreach my $iid ( keys %$i_name ) {
@@ -282,7 +468,8 @@ __END__
=head1 NAME
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades terminal servers
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades/Avocent terminal
servers
=head1 AUTHOR
@@ -309,7 +496,7 @@ Eric Miller
=head1 DESCRIPTION
Provides abstraction to the configuration information obtainable from a
Cyclades device through SNMP.
Cyclades/Avocent device through SNMP.
For speed or debugging purposes you can call the subclass directly, but not
after determining a more specific class using the method above.
@@ -334,6 +521,14 @@ my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
=item F<CYCLADES-ACS-INFO-MIB>
=item F<CYCLADES-ACS5K-SYS-MIB>
=item F<CYCLADES-ACS5K-CONF-MIB>
=item F<CYCLADES-ACS5K-INFO-MIB>
=item F<ACS6000-MIB>
=back
=head2 Inherited MIBs
@@ -348,11 +543,11 @@ These are methods that return scalar value from SNMP
=item $cyclades->os_ver()
(C<cyACSversion>)
(C<acsFirmwareVersion>), (C<cyACS5Kversion>), or (C<cyACSversion>)
=item $cyclades->serial()
(C<cyACSDevId>)
(C<acsSerialNumber>), (C<cyACS5KDevId>), or (C<cyACSDevId>)
=item $cyclades->root_ip()
@@ -360,11 +555,11 @@ These are methods that return scalar value from SNMP
=item $cyclades->ps1_status()
(C<cyACSPw1>)
(C<acsPowerSupplyStatePw1>), (C<cyACS5KPw1>), or (C<cyACSPw1>)
=item $cyclades->ps2_status()
(C<cyACSPw2>)
(C<acsPowerSupplyStatePw2>), (C<cyACS5KPw2>), or (C<cyACSPw2>)
=back
@@ -379,15 +574,16 @@ to poll for an ARP cache so turn off reported Layer 2 and Layer 3.
=item $cyclades->vendor()
Returns 'cyclades'
Returns 'vertiv'
=item $cyclades->os()
Returns 'cyclades'
Returns 'avocent'
=item $cyclades->model()
Returns lower case (C<cyACSpname>)
Returns lower case (C<cyACSpname>) or (C<acsProductModel>) if it exists
otherwise tries to reference $cyclades->id() to one of the MIBs listed above
=back
@@ -409,31 +605,34 @@ to a hash.
Returns reference to map of IIDs to Interface index.
Extended to include serial ports. Serial ports are indexed with the
alternative labeling system for the serial port, the listening socket port
C<cySPortSocketPort> to avoid conflicts with C<ifIndex>.
alternative labeling system for the serial port, either the listening socket
port C<cySPortSocketPort> or C<acsSerialPortTableDeviceName> name to avoid
conflicts with C<ifIndex>.
=item $cyclades->interfaces()
Returns reference to map of IIDs to physical ports. Extended to include
serial ports, C<cyISPortTty>.
serial ports, C<acsSerialPortTableDeviceName> or C<cyISPortTty>.
=item $cyclades->i_speed()
Returns interface speed. Extended to include serial ports, C<cyISPortSpeed>.
Returns interface speed. Extended to include serial ports,
C<acsSerialPortTableComSpeed> or C<cyISPortSpeed>.
=item $cyclades->i_up()
Returns link status for each port. Extended to include serial ports,
C<cyISPortSigCD>.
C<acsSerialPortTableSignalStateDCD> or C<cyISPortSigCD>.
=item $cyclades->i_description()
Returns description of each port. Extended to include serial ports,
C<cyISPortName>.
C<acsSerialPortTableName> or C<cyISPortName>.
=item $cyclades->i_name()
Returns name of each port. Extended to include serial ports, C<cyISPortName>.
Returns name of each port. Extended to include serial ports,
C<acsSerialPortTableName> or C<cyISPortName>.
=back

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -38,18 +38,20 @@ use SNMP::Info;
use SNMP::Info::Bridge;
use SNMP::Info::Entity;
use SNMP::Info::PowerEthernet;
use SNMP::Info::LLDP;
@SNMP::Info::Layer2::ISA
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet Exporter/;
= qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP Exporter/;
@SNMP::Info::Layer2::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
%SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
%SNMP::Info::LLDP::MIBS,
);
%GLOBALS = (
@@ -57,6 +59,7 @@ $VERSION = '3.14';
%SNMP::Info::Bridge::GLOBALS,
%SNMP::Info::Entity::GLOBALS,
%SNMP::Info::PowerEthernet::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
'serial1' =>
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
);
@@ -64,6 +67,7 @@ $VERSION = '3.14';
%FUNCS = (
%SNMP::Info::FUNCS, %SNMP::Info::Bridge::FUNCS,
%SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
%SNMP::Info::LLDP::FUNCS,
);
%MUNGE = (
@@ -73,6 +77,7 @@ $VERSION = '3.14';
%SNMP::Info::Bridge::MUNGE,
%SNMP::Info::Entity::MUNGE,
%SNMP::Info::PowerEthernet::MUNGE,
%SNMP::Info::LLDP::MUNGE,
);
# Method OverRides
@@ -133,23 +138,6 @@ sub serial {
return;
}
sub i_ignore {
my $l2 = shift;
my $partial = shift;
my $i_type = $l2->i_type($partial) || {};
my %i_ignore = ();
foreach my $if ( keys %$i_type ) {
my $type = $i_type->{$if};
$i_ignore{$if}++
if $type =~ /(loopback|other|cpu)/i;
}
return \%i_ignore;
}
sub interfaces {
my $l2 = shift;
my $partial = shift;
@@ -235,6 +223,8 @@ after determining a more specific class using the method above.
=item SNMP::Info::Entity
=item SNMP::Info::LLDP
=back
=head2 Required MIBs
@@ -288,6 +278,10 @@ See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
@@ -304,12 +298,6 @@ name.
Defaults to C<ifDescr> but checks and overrides with C<ifName>
=item $l2->i_ignore()
Returns reference to hash. Increments value of IID if port is to be ignored.
Ignores ports with C<ifType> of loopback, propvirtual, other, and cpu
=back
=head2 Table Methods imported from SNMP::Info
@@ -324,4 +312,8 @@ See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View 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.54';
%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

View 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.54';
# 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

View File

@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
@@ -97,6 +97,14 @@ my $mcs_index = {
m13 => '104',
m14 => '117',
m15 => '130',
m16 => '19.5',
m17 => '39',
m18 => '58.5',
m19 => '78',
m20 => '117',
m21 => '156',
m22 => '175.5',
m23 => '195',
# This is a cheat for 802.11a bonded
m108 => '108',
},
@@ -117,6 +125,14 @@ my $mcs_index = {
m13 => '240',
m14 => '270',
m15 => '300',
m16 => '45',
m17 => '90',
m18 => '135',
m19 => '180',
m20 => '270',
m21 => '360',
m22 => '405',
m23 => '450',
}
};
@@ -165,6 +181,7 @@ sub cd11_txrate {
elsif ( $rate =~ /^m/ ) {
my $band = $protos->{$idx};
my $bw = $bws->{$band};
# FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"...
$cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
}
else {

View File

@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%GLOBALS = (
%SNMP::Info::IEEE802dot11::GLOBALS,
@@ -60,7 +60,8 @@ $VERSION = '3.14';
%SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
'serial' => 'entPhysicalSerialNum.1',
'descr' => 'sysDescr'
'descr' => 'sysDescr',
'ps1_type' => 'cpoePdCurrentPowerSource'
);
%FUNCS = (
@@ -97,6 +98,7 @@ $VERSION = '3.14';
'CISCO-DOT11-ASSOCIATION-MIB' => 'cDot11ClientSubIfIndex',
'CISCO-DOT11-SSID-SECURITY-MIB' => 'cdot11SecVlanNameId',
'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex',
'CISCO-POE-PD-MIB' => 'cpoePdCurrentPowerSource',
);
%MUNGE = (
@@ -457,6 +459,18 @@ sub i_ssidmac {
return $i_ssidmac;
}
###
# PoE status. The ps1_type is the PoE injector type, which is just
# a scalar; the status is a little more complex.
sub ps1_status {
my $aironet = shift;
my $idx = $aironet->cpoePdCurrentPowerLevel();
my $mw = $aironet->cpoePdSupportedPower( $idx );
my $descr = $aironet->cpoePdSupportedPowerMode( $idx );
return sprintf( "%.2fW (%s)", $mw->{$idx} * 0.001, $descr->{$idx} );
}
1;
__END__
@@ -540,17 +554,13 @@ These are methods that return scalar value from SNMP
=over
=item $aironet->discription()
Adds info from method e_descr() from SNMP::Info::Entity
=item $aironet->vendor()
Returns 'cisco'
=item $aironet->description()
System description
System description. Adds info from method e_descr() from SNMP::Info::Entity
=back
@@ -648,6 +658,11 @@ being broadcast.
With the same keys as i_ssidlist, returns the Basic service set
identification (BSSID), MAC address, the AP is using for the SSID.
=item $aironet ps1_status()
Returns the PoE injector status based on C<cpoePdSupportedPower> and
C<cpoePdSupportedPowerMode>.
=back
=head2 Table Methods imported from SNMP::Info::Layer2

View File

@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
@@ -73,6 +73,7 @@ sub os_ver {
if ( $descr =~ m/version (\d+\.\d+)/ ) {
return $1;
}
return;
}
sub model {

View File

@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
@@ -229,7 +229,7 @@ sub index_factor {
if ( ( $model =~ /(470)/ )
or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
$index_factor = 128
if ( ( $model =~ /(5[56]\d\d)|VSP/ )
if ( ( $model =~ /(5[56]\d\d)|VSP|4950|59100/ )
and ( $os_ver >= 6 ) );
return $index_factor;
@@ -341,6 +341,60 @@ sub peth_port_ifindex {
return \%peth_port_ifindex;
}
# Currently only ERS 4800 v5.8+ support the rcBridgeSpbmMacTable
# which holds the FDB for a SPBM edge deployment.
#
# Q-BRIDGE still holds some entries when the rcBridgeSpbmMacTable is in use
# so we merge hash entries.
sub fw_mac {
my $rapidcity = shift;
my $qb = $rapidcity->SUPER::fw_mac() || {};
my $spbm = $rapidcity->rc_spbm_fw_mac() || {};
my $fw_mac = { %$qb, %$spbm };
return $fw_mac;
}
sub fw_port {
my $rapidcity = shift;
my $qb = $rapidcity->SUPER::fw_port() || {};
my $spbm = $rapidcity->rc_spbm_fw_port() || {};
my $fw_port = { %$qb, %$spbm };
return $fw_port;
}
sub fw_status {
my $rapidcity = shift;
my $qb = $rapidcity->SUPER::fw_status() || {};
my $spbm = $rapidcity->rc_spbm_fw_status() || {};
my $fw_status = { %$qb, %$spbm };
return $fw_status;
}
sub qb_fw_vlan {
my $rapidcity = shift;
my $qb = $rapidcity->SUPER::qb_fw_vlan() || {};
my $spbm = $rapidcity->rc_spbm_fw_vlan() || {};
my $qb_fw_vlan = { %$qb, %$spbm };
return $qb_fw_vlan;
}
# Baystack uses S5-AGENT-MIB (loaded in NortelStack) versus RAPID-CITY
sub stp_ver {
my $rapidcity = shift;
return $rapidcity->s5AgSysSpanningTreeOperMode()
|| $rapidcity->SUPER::stp_ver();
}
1;
__END__
@@ -444,6 +498,14 @@ Returns 'baystack' or 'boss' depending on software version.
Returns the firmware version extracted from C<sysDescr>.
=item $baystack->stp_ver()
Returns the particular STP version running on this device.
Values: C<nortelStpg>, C<pvst>, C<rstp>, C<mstp>, C<ieee8021d>
(C<s5AgSysSpanningTreeOperMode>)
=back
=head2 Overrides
@@ -600,6 +662,32 @@ ns_e_vendor().
=back
=head2 Layer 2 Forwarding Database
These methods try to obtain the layer 2 forwarding database entries via the
normal bridge methods as well as SPBM entries via rapid city methods.
=over
=item $baystack->fw_mac()
Returns reference to hash of forwarding table MAC Addresses
=item $baystack->fw_port()
Returns reference to hash of forwarding table entries port interface
identifier (iid)
=item $baystack->qb_fw_vlan()
Returns reference to hash of forwarding table entries VLAN ID
=item $baystack->fw_status()
Returns reference to hash of forwarding table entries status
=back
=head2 Table Methods imported from SNMP::Info::SONMP
See L<SNMP::Info::SONMP/"TABLE METHODS"> for details.

View File

@@ -37,19 +37,23 @@ use Exporter;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoConfig;
use SNMP::Info::CiscoStpExtensions;
use SNMP::Info::CiscoAgg;
use SNMP::Info::Layer2;
@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/;
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
%SNMP::Info::CiscoAgg::GLOBALS,
%SNMP::Info::CiscoStpExtensions::GLOBALS,
%SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
@@ -58,6 +62,8 @@ $VERSION = '3.14';
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
%SNMP::Info::CiscoAgg::FUNCS,
%SNMP::Info::CiscoStpExtensions::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS,
@@ -75,6 +81,8 @@ $VERSION = '3.14';
%MIBS = (
%SNMP::Info::Layer2::MIBS,
%SNMP::Info::CiscoAgg::MIBS,
%SNMP::Info::CiscoStpExtensions::MIBS,
%SNMP::Info::CiscoConfig::MIBS,
%SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS,
@@ -84,8 +92,9 @@ $VERSION = '3.14';
);
%MUNGE = (
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoAgg::MUNGE,
%SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
);
sub bulkwalk_no { return 1; }
@@ -203,7 +212,8 @@ sub i_vlan {
my $partial = shift;
# Overlap allows more than one VLAN per port. Unable to determine default
my $overlap = $c1900->bridgeGroupAllowMembershipOverlap()
my $overlap
= $c1900->bridgeGroupAllowMembershipOverlap()
|| $c1900->vlanAllowMembershipOverlap()
|| 'disabled';
@@ -251,6 +261,8 @@ sub i_vlan_membership {
return $i_vlan_membership;
}
sub i_vlan_membership_untagged { return; }
sub bp_index {
my $c1900 = shift;
my $partial = shift;
@@ -258,7 +270,7 @@ sub bp_index {
my $if_index = $c1900->i_index($partial);
my $index = $c1900->orig_bp_index($partial) || {};
foreach my $iid ( keys %$if_index ) {
$index->{$iid} = $iid if(!defined $index->{$iid});
$index->{$iid} = $iid if ( !defined $index->{$iid} );
}
return $index;
}
@@ -312,6 +324,10 @@ after determining a more specific class using the method above.
=item SNMP::Info::CiscoConfig
=item SNMP::Info::CiscoStpExtensions
=item SNMP::Info::CiscoAgg
=item SNMP::Info::Layer2
=back
@@ -336,6 +352,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::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.
=head1 GLOBALS
@@ -394,6 +414,14 @@ See L<SNMP::Info::CiscoStats/"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
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
@@ -444,6 +472,9 @@ bridge group IDs.
print "Port: $port VLAN: $vlan\n";
}
=item $c1900->i_vlan_membership_untagged()
Unsupported, returns nothing.
=item $c1900->bp_index()
@@ -513,6 +544,14 @@ See L<SNMP::Info::CiscoStats/"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
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.

View File

@@ -34,33 +34,21 @@ package SNMP::Info::Layer2::C2900;
use strict;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoConfig;
use SNMP::Info::Layer2;
use SNMP::Info::Layer2::Cisco;
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
SNMP::Info::CiscoStats SNMP::Info::CiscoConfig
SNMP::Info::Layer2 Exporter/;
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2::Cisco Exporter/;
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
%SNMP::Info::Layer2::Cisco::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer2::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS,
%SNMP::Info::CiscoVTP::FUNCS,
%SNMP::Info::Layer2::Cisco::FUNCS,
'i_name' => 'ifAlias',
# C2900PortEntry
@@ -71,15 +59,12 @@ $VERSION = '3.14';
);
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
%SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoVTP::MIBS, 'CISCO-C2900-MIB' => 'ciscoC2900MIB',
%SNMP::Info::Layer2::Cisco::MIBS,
'CISCO-C2900-MIB' => 'ciscoC2900MIB',
);
%MUNGE = (
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE,
%SNMP::Info::Layer2::Cisco::MUNGE,
);
sub vendor {
@@ -269,15 +254,7 @@ after determining a more specific class using the method above.
=over
=item SNMP::Info::CiscoVTP
=item SNMP::Info::CDP
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoConfig
=item SNMP::Info::Layer2
=item SNMP::Info::Layer2::Cisco
=back
@@ -293,15 +270,7 @@ Part of the v2 MIBs from Cisco.
=head2 Inherited MIBs
See L<SNMP::Info::CiscoVTP/"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.
See L<SNMP::Info::Layer2::Cisco/"Required MIBs"> for its MIB requirements.
=head1 GLOBALS
@@ -321,25 +290,9 @@ Returns 1. Use vlan indexing.
=back
=head2 Globals imported from SNMP::Info::CiscoVTP
=head2 Globals imported from SNMP::Info::Layer2::Cisco
See L<SNMP::Info::CiscoVTP/"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.
See L<SNMP::Info::Layer2::Cisco/"GLOBALS"> for details.
=head1 TABLE METHODS
@@ -411,25 +364,9 @@ Gives Admin speed of port
=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.
=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.
See L<SNMP::Info::Layer2::Cisco/"TABLE METHODS"> for details.
=head1 SET METHODS

View File

@@ -34,48 +34,34 @@ package SNMP::Info::Layer2::Catalyst;
use strict;
use Exporter;
use SNMP::Info::CiscoStack;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoPortSecurity;
use SNMP::Info::Layer2;
use SNMP::Info::Layer2::Cisco;
@SNMP::Info::Layer2::Catalyst::ISA
= qw/SNMP::Info::CiscoStack SNMP::Info::CiscoVTP
SNMP::Info::CDP SNMP::Info::CiscoStats
SNMP::Info::CiscoPortSecurity
SNMP::Info::Layer2 Exporter/;
= qw/SNMP::Info::CiscoStack SNMP::Info::Layer2::Cisco Exporter/;
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
%SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoVTP::MIBS, %SNMP::Info::CiscoStack::MIBS,
%SNMP::Info::Layer2::Cisco::MIBS,
%SNMP::Info::CiscoStack::MIBS,
);
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
%SNMP::Info::CiscoPortSecurity::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
%SNMP::Info::Layer2::Cisco::GLOBALS,
%SNMP::Info::CiscoStack::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer2::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
%SNMP::Info::CiscoStats::FUNCS, %SNMP::Info::CDP::FUNCS,
%SNMP::Info::CiscoVTP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
%SNMP::Info::Layer2::Cisco::FUNCS,
%SNMP::Info::CiscoStack::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
%SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
%SNMP::Info::Layer2::Cisco::MUNGE,
%SNMP::Info::CiscoStack::MUNGE,
);
# Overidden Methods
@@ -228,18 +214,10 @@ after determining a more specific class using the method above.
=over
=item SNMP::Info::Layer2::Cisco
=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
=head2 Required MIBs
@@ -248,19 +226,10 @@ after determining a more specific class using the method above.
=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::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
These MIBs are found in the standard v2 MIBs from Cisco.
@@ -290,30 +259,14 @@ Returns 1. Use vlan indexing.
=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
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
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
=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
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

View File

@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS,
@@ -385,11 +385,6 @@ Returns 'Centillion'
=over
=item $centillion->layers()
Returns 00000011. Class emulates Layer 2 functionality through proprietary
MIBs.
=item $centillion->index_factor()
Required by SNMP::Info::SONMP. Number representing the number of ports

View File

@@ -35,49 +35,71 @@ use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoImage;
use SNMP::Info::CiscoRTT;
use SNMP::Info::CiscoQOS;
use SNMP::Info::CiscoConfig;
use SNMP::Info::CiscoPortSecurity;
use SNMP::Info::CiscoStpExtensions;
use SNMP::Info::CiscoAgg;
use SNMP::Info::Layer2;
@SNMP::Info::Layer2::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
SNMP::Info::CiscoConfig SNMP::Info::Layer2
SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
SNMP::Info::CiscoConfig SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoStpExtensions SNMP::Info::CiscoAgg
SNMP::Info::Layer2
Exporter/;
@SNMP::Info::Layer2::Cisco::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
%SNMP::Info::CiscoQOS::MIBS, %SNMP::Info::CiscoRTT::MIBS,
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoVTP::MIBS,
%SNMP::Info::Layer2::MIBS,
%SNMP::Info::CiscoAgg::MIBS,
%SNMP::Info::CiscoStpExtensions::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 = (
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CiscoQOS::GLOBALS, %SNMP::Info::CiscoRTT::GLOBALS,
%SNMP::Info::CiscoImage::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CDP::GLOBALS, %SNMP::Info::CiscoVTP::GLOBALS,
%SNMP::Info::Layer2::GLOBALS,
%SNMP::Info::CiscoAgg::GLOBALS,
%SNMP::Info::CiscoStpExtensions::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 = (
%SNMP::Info::Layer2::FUNCS, %SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CiscoQOS::FUNCS, %SNMP::Info::CiscoRTT::FUNCS,
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
%SNMP::Info::Layer2::FUNCS,
%SNMP::Info::CiscoAgg::FUNCS,
%SNMP::Info::CiscoStpExtensions::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 = (
%SNMP::Info::Layer2::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CiscoQOS::MUNGE, %SNMP::Info::CiscoRTT::MUNGE,
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
%SNMP::Info::Layer2::MUNGE,
%SNMP::Info::CiscoAgg::MUNGE,
%SNMP::Info::CiscoStpExtensions::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;
@@ -85,8 +107,9 @@ __END__
=head1 NAME
SNMP::Info::Layer2::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
that are not covered in other classes.
SNMP::Info::Layer2::Cisco - SNMP Interface to L2 Cisco devices that are
not covered in other classes and the base L2 Cisco class for other device
specific L2 Cisco classes.
=head1 AUTHOR
@@ -110,7 +133,8 @@ Max Baker
=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
@@ -122,14 +146,16 @@ Subclass for Generic Cisco Routers running IOS
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoImage
=item SNMP::Info::CiscoRTT
=item SNMP::Info::CiscoQOS
=item SNMP::Info::CiscoConfig
=item SNMP::Info::CiscoPortSecurity
=item SNMP::Info::CiscoStpExtensions
=item SNMP::Info::CiscoAgg
=item SNMP::Info::Layer2
=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::CiscoStats/"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::CiscoQOS/"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.
=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.
=head2 Globals imported from SNMP::Info::CiscoImage
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::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
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.
=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
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
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
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.

View File

@@ -50,11 +50,7 @@ use SNMP::Info::CDP;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
# This will be filled in with the device's index into the EntPhysicalEntry
# table by the serial() function.
our $index = undef;
$VERSION = '3.54';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
@@ -98,39 +94,46 @@ sub vendor {
return 'cisco';
}
# Walk the entPhysicalSerialNum table and return both the first serial
# number found as well as the index of that entry.
sub os {
return 'ros';
}
# Walk the entPhysicalSerialNum table and return the first serial found
sub serial {
my $ciscosb = shift;
my $serial = undef;
my $e_serial = $ciscosb->e_serial();
# Find entity table entry for this unit
foreach my $e ( keys %$e_serial ) {
if (defined ($e_serial->{$e}) and $e_serial->{$e} !~ /^\s*$/) {
$index = $e;
last;
foreach my $e ( sort keys %$e_serial ) {
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
return $e_serial->{$e};
}
}
return $e_serial->{$index} if defined $index;
}
sub os_ver {
my $ciscosb = shift;
my $os_ver = $ciscosb->e_swver();
my $e_swver = $ciscosb->e_swver();
return $os_ver->{$index} if defined $index;
foreach my $e ( sort keys %$e_swver ) {
if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
return $e_swver->{$e};
}
}
}
# Grab e_model from Entity and tag on e_hwver
sub model {
my $ciscosb = shift;
my $e_model = $ciscosb->e_model();
my $e_model = $ciscosb->e_model();
my $e_hwver = $ciscosb->e_hwver();
if (defined ($index)) {
my $model = "$e_model->{$index} $e_hwver->{$index}";
return $model;
foreach my $e ( sort keys %$e_model ) {
if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) {
return $e_model->{$e};
#my $model = "$e_model->{$e} $e_hwver->{$e}";
#return $model;
}
}
return $ciscosb->description();
}
@@ -160,14 +163,14 @@ Nic Bernstein (shamelessly stolen from Max Baker's Aironet code)
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
# Let SNMP::Info determine the correct subclass for you.
my $ciscosb = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
)
or die "Can't connect to DestHost.\n";
my $class = $ciscosb->class();
@@ -214,6 +217,10 @@ These are methods that return scalar value from SNMP
Returns 'cisco'
=item $ciscosb->os()
Returns 'ros'
=item $ciscosb->os_ver()
Returns software version (C<entPhysicalSoftwareRev>)

View File

@@ -36,15 +36,13 @@ use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::MAU;
use SNMP::Info::LLDP;
use SNMP::Info::CDP;
use SNMP::Info::Aggregate;
use SNMP::Info::Aggregate 'agg_ports_ifstack';
@SNMP::Info::Layer2::HP::ISA = qw/
SNMP::Info::Aggregate
SNMP::Info::Layer3
SNMP::Info::MAU
SNMP::Info::LLDP
SNMP::Info::CDP
Exporter
/;
@@ -52,12 +50,11 @@ use SNMP::Info::Aggregate;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::MAU::MIBS,
%SNMP::Info::LLDP::MIBS,
%SNMP::Info::CDP::MIBS,
%SNMP::Info::Aggregate::MIBS,
'RFC1271-MIB' => 'logDescription',
@@ -74,7 +71,6 @@ $VERSION = '3.14';
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::MAU::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::Aggregate::GLOBALS,
'serial1' => 'entPhysicalSerialNum.1',
@@ -93,7 +89,6 @@ $VERSION = '3.14';
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::MAU::FUNCS,
%SNMP::Info::LLDP::FUNCS,
%SNMP::Info::CDP::FUNCS,
%SNMP::Info::Aggregate::FUNCS,
'i_type2' => 'ifType',
@@ -119,7 +114,6 @@ $VERSION = '3.14';
# Inherit all the built in munging
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::MAU::MUNGE,
%SNMP::Info::LLDP::MUNGE,
%SNMP::Info::CDP::MUNGE,
%SNMP::Info::Aggregate::MUNGE,
'c_id' => \&munge_hp_c_id,
@@ -131,6 +125,8 @@ $VERSION = '3.14';
%MODEL_MAP = (
'J8131A' => 'WAP-420-WW',
'J8130A' => 'WAP-420-NA',
'J9833A' => 'PS1810-8G',
'J9834A' => 'PS1810-24G',
'J8133A' => 'AP520WL',
'J8680A' => '9408sl',
'J9091A' => '8212zl',
@@ -145,8 +141,10 @@ $VERSION = '3.14';
'J8992A' => '6200yl-24G',
'J4902A' => '6108',
'J8698A' => '5412zl',
'J9851A' => '5412R-zl2',
'J8719A' => '5408yl',
'J8697A' => '5406zl',
'J9850A' => '5406R-zl2',
'J8718A' => '5404yl',
'J4819A' => '5308XL',
'J4850A' => '5304XL',
@@ -178,8 +176,12 @@ $VERSION = '3.14';
'J4815A' => '3324XL',
'J4851A' => '3124',
'J9729A' => '2920-48G-PoE+',
'J9729A' => '2920-48G-PoE+',
'J9728A' => '2920-48G',
'J9728A' => '2920-48G',
'J9727A' => '2920-24G-PoE+',
'J9727A' => '2920-24G-PoE+',
'J9726A' => '2920-24G',
'J9726A' => '2920-24G',
'J9562A' => '2915-8G-PoE',
'J9148A' => '2910al-48G-PoE+',
@@ -192,30 +194,42 @@ $VERSION = '3.14';
'J4903A' => '2824',
'J9022A' => '2810-48G',
'J9021A' => '2810-24G',
'J4899C' => '2650C',
'J8165A' => '2650-PWR',
'J4899B' => '2650-CR',
'J4899C' => '2650C',
'J4899A' => '2650',
'J4900C' => '2626C',
'J8164A' => '2626-PWR',
'J4900B' => '2626-CR',
'J4900C' => '2626C',
'J4900A' => '2626',
'J9627A' => '2620-48-PoE+',
'J9626A' => '2620-48',
'J9625A' => '2620-24-PoE+',
'J9624A' => '2620-24-PPoE+',
'J9625A' => '2620-24-PoE+',
'J9623A' => '2620-24',
'J9565A' => '2615-8-PoE',
'J9089A' => '2610-48-PWR',
'J9088A' => '2610-48',
'J9086A' => '2610-24/12PWR',
'J9087A' => '2610-24-PWR',
'J9086A' => '2610-24/12PWR',
'J9085A' => '2610-24',
'J8762A' => '2600-8-PWR',
'J9780A' => '2530-8-PoE+',
'J9774A' => '2530-8G-PoEP',
'J9777A' => '2530-8G',
'J9783A' => '2530-8',
'J9778A' => '2530-48-PoE+',
'J9853A' => '2530-48G-PoE+-2SFP+',
'J9772A' => '2530-48G-PoE+',
'J9855A' => '2530-48G-2SFP+',
'J9775A' => '2530-48G',
'J9781A' => '2530-48',
'J9779A' => '2530-24-PoE+',
'J9854A' => '2530-24G-PoE+-2SFP+',
'J9773A' => '2530-24G-PoE+',
'J9856A' => '2530-24G-2SFP+',
'J9776A' => '2530-24G',
'J9782A' => '2530-24',
'J4813A' => '2524',
'J9298A' => '2520G-8-PoE',
'J9299A' => '2520G-24-PoE',
@@ -231,6 +245,8 @@ $VERSION = '3.14';
'J4817A' => '2312',
'J9449A' => '1810G-8',
'J9450A' => '1810G-24',
'J9802A' => '1810-8G',
'J9803A' => '1810-24G',
'J9029A' => '1800-8G',
'J9028A' => '1800-24G',
);
@@ -536,30 +552,6 @@ sub set_i_vlan_tagged {
sub agg_ports { return agg_ports_ifstack(@_) }
sub qb_fw_vlan {
my $hp = shift;
my $partial = shift;
my $qb_fw_vlan = $hp->SUPER::qb_fw_vlan($partial);
my $fdb_to_dot1q = {};
my $fdb_id = $hp->dot1qVlanFdbId(0);
foreach my $fdb_entry (keys %$fdb_id) {
my ($timemark, $vlan_id) = split(/\./, $fdb_entry);
$fdb_to_dot1q->{$fdb_id->{$fdb_entry}} = $vlan_id;
}
foreach my $learn (keys %$qb_fw_vlan) {
my $fdb_idx = $qb_fw_vlan->{$learn};
if (exists $fdb_to_dot1q->{$fdb_idx}) {
$qb_fw_vlan->{$learn} = $fdb_to_dot1q->{$fdb_idx};
}
}
return $qb_fw_vlan;
}
1;
__END__
@@ -606,8 +598,6 @@ after determining a more specific class using the method above.
=item SNMP::Info::Layer2
=item SNMP::Info::LLDP
=item SNMP::Info::MAU
=back
@@ -827,22 +817,12 @@ Power supplied by PoE ports, in milliwatts
Returns what version of STP the device is running.
(C<hpicfBridgeRstpForceVersion> with fallback to inherited stp_ver())
=item $hp->qb_fw_vlan()
Returns reference to hash of forwarding table entries VLAN ID
(C<dot1qFdbId>), (C<rcBridgeTpFdbVlanId>)
=back
=head2 Globals imported from SNMP::Info::Layer2
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
@@ -894,10 +874,6 @@ ifIndex of the corresponding master ports.
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.

View File

@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -376,6 +376,20 @@ sub i_vlan_membership {
return $i_vlan_membership;
}
sub i_vlan_membership_untagged {
my $hp = shift;
my $partial = shift;
my $vlans = $hp->i_vlan($partial);
my $i_vlan_membership = {};
foreach my $port (keys %$vlans) {
my $vlan = $vlans->{$port};
push( @{ $i_vlan_membership->{$port} }, $vlan );
}
return $i_vlan_membership;
}
sub set_i_vlan {
my $hp = shift;
my $rv;
@@ -680,6 +694,12 @@ It is the union of tagged, untagged, and auto ports.
print "Port: $port VLAN: $vlan\n";
}
=item $hp->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=item $hp->v_index()
Returns VLAN IDs

View File

@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Bridge;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -33,32 +33,31 @@ package SNMP::Info::Layer2::Netgear;
use strict;
use Exporter;
use SNMP::Info::Layer2;
use SNMP::Info::Entity;
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//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
# 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::Entity::MIBS, %SNMP::Info::LLDP::MIBS, );
%MIBS = ( %SNMP::Info::Layer2::MIBS, %SNMP::Info::LLDP::MIBS, );
%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_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',
);
%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 {
return 'netgear';
@@ -90,7 +89,7 @@ sub serial {
# Without Enitity-MIB, we've got to work our way through a bunch of
# different locales...
return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;;
return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;;
return 'none';
}
@@ -140,7 +139,7 @@ sub interfaces {
return $interfaces;
}
# these seem to work for GSM models but not GS
# these seem to work for GSM/FSM models but not GS
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
sub os_ver {
my $netgear = shift;
@@ -149,137 +148,10 @@ sub os_ver {
my $os_ver = $netgear->e_swver();
return $os_ver->{$index} if defined $os_ver;
}
return $netgear->ng_gsmosver() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;
return $netgear->ng_gsmosver() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;
return $netgear->ng_fsosver() if defined $netgear->model and $netgear->model =~ m/FS\d/i;
}
# 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;
__END__
@@ -399,49 +271,6 @@ Uses the i_name() field.
=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
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS,

View 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.54';
%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

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );

View File

@@ -41,17 +41,19 @@ use SNMP::Info::Entity;
use SNMP::Info::PowerEthernet;
use SNMP::Info::IPv6;
use SNMP::Info::AdslLine;
use SNMP::Info::LLDP;
@SNMP::Info::Layer3::ISA = qw/
SNMP::Info::PowerEthernet SNMP::Info::IPv6
SNMP::Info::Entity SNMP::Info::EtherLike
SNMP::Info::Bridge SNMP::Info::AdslLine
SNMP::Info::LLDP
SNMP::Info Exporter/;
@SNMP::Info::Layer3::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS,
@@ -61,6 +63,7 @@ $VERSION = '3.14';
%SNMP::Info::Entity::MIBS,
%SNMP::Info::PowerEthernet::MIBS,
%SNMP::Info::IPv6::MIBS,
%SNMP::Info::LLDP::MIBS,
'IP-MIB' => 'ipNetToMediaIfIndex',
'OSPF-MIB' => 'ospfRouterId',
'BGP4-MIB' => 'bgpIdentifier',
@@ -76,6 +79,7 @@ $VERSION = '3.14';
%SNMP::Info::Entity::GLOBALS,
%SNMP::Info::PowerEthernet::GLOBALS,
%SNMP::Info::IPv6::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
'mac' => 'ifPhysAddress.1',
'serial1' =>
'.1.3.6.1.4.1.9.3.6.3.0', # OLD-CISCO-CHASSIS-MIB::chassisId.0
@@ -92,6 +96,7 @@ $VERSION = '3.14';
%SNMP::Info::Entity::FUNCS,
%SNMP::Info::PowerEthernet::FUNCS,
%SNMP::Info::IPv6::FUNCS,
%SNMP::Info::LLDP::FUNCS,
# Obsolete Address Translation Table (ARP Cache)
'old_at_index' => 'atIfIndex',
@@ -150,6 +155,7 @@ $VERSION = '3.14';
%SNMP::Info::Entity::MUNGE,
%SNMP::Info::PowerEthernet::MUNGE,
%SNMP::Info::IPv6::MUNGE,
%SNMP::Info::LLDP::MUNGE,
'old_at_paddr' => \&SNMP::Info::munge_mac,
'at_paddr' => \&SNMP::Info::munge_mac,
'n2p_paddr' => \&SNMP::Info::munge_mac,
@@ -185,34 +191,20 @@ sub root_ip {
return;
}
sub i_ignore {
my $l3 = shift;
my $partial = shift;
my $interfaces = $l3->interfaces($partial) || {};
my %i_ignore;
foreach my $if ( keys %$interfaces ) {
# lo -> cisco aironet 350 loopback
if ( $interfaces->{$if} =~ /(tunnel|loopback|\blo\b|null)/i ) {
$i_ignore{$if}++;
}
}
return \%i_ignore;
}
sub serial {
my $l3 = shift;
my $serial1 = $l3->serial1();
my $e_parent = $l3->e_parent() || {};
my $e_class = $l3->e_class() || {};
foreach my $iid ( keys %$e_parent ) {
my $parent = $e_parent->{$iid};
if ( $parent eq '0' ) {
my $class = $e_class->{$iid} || '';
# Only consider serial numbers for entries without a parent, or if they are of type "chassis"
if ( $parent eq '0' or $class eq 'chassis') {
my $serial = $l3->e_serial($iid);
if ( $serial ) {
if ( $serial && $serial->{$iid} ) {
return $serial->{$iid};
}
else {
@@ -427,6 +419,8 @@ after determining a more specific class using the method above.
=item SNMP::Info::IPv6
=item SNMP::Info::LLDP
=back
=head2 Required MIBs
@@ -455,6 +449,8 @@ See L<SNMP::Info::PowerEthernet/"Required MIBs"> for its MIB requirements.
See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
=head1 GLOBALS
These are methods that return scalar value from SNMP
@@ -528,6 +524,18 @@ See L<SNMP::Info::EtherLike/"GLOBALS"> for details.
See L<SNMP::Info::Entity/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info:PowerEthernet
See L<SNMP::Info::PowerEthernet/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info::IPv6
See L<SNMP::Info::IPv6/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info::LLDP
See L<SNMP::Info::LLDP/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
@@ -544,12 +552,6 @@ name.
Only returns those iids that have a description listed in $l3->i_description()
=item $l3->i_ignore()
Returns reference to hash. Creates a key for each IID that should be ignored.
Currently looks for tunnel,loopback,lo,null from $l3->interfaces()
=item $l3->i_name()
Returns reference to hash of iid to human set name.
@@ -803,4 +805,8 @@ See L<SNMP::Info::PowerEthernet/"TABLE METHODS"> for details.
See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -385,6 +385,20 @@ sub i_vlan_membership {
return $i_vlan_membership;
}
sub i_vlan_membership_untagged {
my $alteon = shift;
my $partial = shift;
my $vlans = $alteon->i_vlan($partial);
my $i_vlan_membership = {};
foreach my $port (keys %$vlans) {
my $vlan = $vlans->{$port};
push( @{ $i_vlan_membership->{$port} }, $vlan );
}
return $i_vlan_membership;
}
# Bridge MIB does not map Bridge Port to ifIndex correctly on some code
# versions
sub bp_index {
@@ -574,6 +588,12 @@ IDs. These are the VLANs which are members of the egress list for the port.
print "Port: $port VLAN: $vlan\n";
}
=item $alteon->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=item $alteon->v_index()
Returns VLAN IDs

View File

@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
$int_include_vpn $fake_idx $type_class/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -36,7 +36,7 @@ use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::MAU;
use SNMP::Info::LLDP;
use SNMP::Info::Aggregate;
use SNMP::Info::Aggregate 'agg_ports_ifstack';
@SNMP::Info::Layer3::Arista::ISA = qw/
SNMP::Info::Aggregate
@@ -48,7 +48,7 @@ use SNMP::Info::Aggregate;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -124,6 +124,8 @@ $VERSION = '3.14';
'aruba_ap_model' => 'wlanAPModelName',
'aruba_ap_name' => 'wlanAPName',
'aruba_ap_ip' => 'wlanAPIpAddress',
'aruba_ap_hw_ver' => 'wlanAPHwVersion',
'aruba_ap_sw_ver' => 'wlanAPSwVersion',
# WLSX-WLAN-MIB::wlsxWlanESSIDVlanPoolTable
'aruba_ssid_vlan' => 'wlanESSIDVlanPoolStatus',
@@ -484,6 +486,7 @@ sub i_vlan {
return $aruba->SUPER::i_vlan($partial)
if keys %{ $aruba->SUPER::i_vlan($partial) };
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
my $index = $aruba->aruba_if_idx();
if ($partial) {
@@ -512,6 +515,7 @@ sub i_vlan_membership {
return $aruba->SUPER::i_vlan_membership($partial)
if keys %{ $aruba->SUPER::i_vlan_membership($partial) };
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
my $essid_ssid = $aruba->aruba_ap_bssid_ssid();
my $ssid_vlans = $aruba->aruba_ssid_vlan();
my $if_vlans = $aruba->aruba_if_vlan_member();
@@ -555,6 +559,32 @@ sub i_vlan_membership {
return $i_vlan_membership;
}
sub i_vlan_membership_untagged {
my $aruba = shift;
my $partial = shift;
return $aruba->SUPER::i_vlan_membership_untagged($partial)
if keys %{ $aruba->SUPER::i_vlan_membership_untagged($partial) };
# If we don't have Q-BRIDGE-MIB, we're a wireless controller
# It is unclear if native VLAN is transmitted untagged
# This assumes Cisco-like behavior on trunks that native VLAN is
# transmitted untagged, if this needs to be changed we will need to
# consider ifExtMode rather than just using i_vlan
my $if_membership = $aruba->i_vlan_membership();
my $if_ = $aruba->i_vlan();
my $if_mode = $aruba->aruba_if_mode();
my $vlans = $aruba->i_vlan($partial);
my $i_vlan_membership = {};
foreach my $port (keys %$vlans) {
my $vlan = $vlans->{$port};
push( @{ $i_vlan_membership->{$port} }, $vlan );
}
return $i_vlan_membership;
}
sub i_80211channel {
my $aruba = shift;
my $partial = shift;
@@ -995,8 +1025,9 @@ sub e_type {
sub e_hwver {
my $aruba = shift;
my $ap_hw = $aruba->aruba_card_hw() || {};
my $ap_fpga = $aruba->aruba_card_fpga() || {};
my $ap_hw = $aruba->aruba_card_hw() || {};
my $ap_fpga = $aruba->aruba_card_fpga() || {};
my $ap_hw_ver = $aruba->aruba_ap_hw_ver() || {};
my %e_hwver;
@@ -1008,9 +1039,36 @@ sub e_hwver {
$e_hwver{$iid} = "$hw $fpga";
}
# APs
foreach my $idx ( keys %$ap_hw_ver ) {
my $hw_ver = $ap_hw_ver->{$idx};
next unless defined $hw_ver;
$e_hwver{$idx} = "$hw_ver";
}
return \%e_hwver;
}
sub e_swver {
my $aruba = shift;
my $ap_sw_ver = $aruba->aruba_ap_hw_ver() || {};
my %e_swver;
# APs
foreach my $idx ( keys %$ap_sw_ver ) {
my $sw_ver = $ap_sw_ver->{$idx};
next unless defined $sw_ver;
$e_swver{$idx} = "$sw_ver";
}
return \%e_swver;
}
sub e_vendor {
my $aruba = shift;
@@ -1586,6 +1644,12 @@ Returns reference to map of IIDs to VLAN ID of the interface.
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs for which the port is a member.
=item $aruba->i_vlan_membership_untagged()
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
IDs. These are the VLANs which are members of the untagged egress list for
the port.
=item $aruba->bp_index()
Augments the bridge MIB by returning reference to a hash containing the
@@ -1648,6 +1712,10 @@ Returns reference to hash. Key: IID, Value: Type of component.
Returns reference to hash. Key: IID, Value: Hardware revision.
=item $aruba->e_swver()
Returns reference to hash. Key: IID, Value: Software revision.
=item $aruba->e_vendor()
Returns reference to hash. Key: IID, Value: aruba.

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
%MODID_MAP %PROCID_MAP/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS,
@@ -732,6 +732,8 @@ sub i_vlan {
return \%i_vlan;
}
sub i_pvid { goto &i_vlan }
sub root_ip {
my $bayrs = shift;
@@ -1549,6 +1551,10 @@ interfaces.
Returns reference to hash. Maps port VLAN ID to IIDs.
=item $bayrs->i_pvid()
Returns reference to hash. Maps port VLAN ID to IIDs.
=back
=head2 Pseudo F<ENTITY-MIB> information

View File

@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,

View File

@@ -32,39 +32,22 @@
package SNMP::Info::Layer3::C3550;
use strict;
use warnings;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CiscoStack;
use SNMP::Info::LLDP;
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 SNMP::Info::Layer3::CiscoSwitch;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
# NOTE : Top-most items gets precedence for @ISA
@SNMP::Info::Layer3::C3550::ISA = qw/
SNMP::Info::CiscoVTP
SNMP::Info::CiscoStpExtensions
SNMP::Info::CiscoStack
SNMP::Info::LLDP
SNMP::Info::CDP
SNMP::Info::CiscoStats
SNMP::Info::CiscoImage
SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoConfig
SNMP::Info::CiscoPower
SNMP::Info::Layer3
SNMP::Info::Layer3::CiscoSwitch
Exporter/;
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
$VERSION = '3.14';
$VERSION = '3.54';
# NOTE: Order creates precedence
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
@@ -72,46 +55,23 @@ $VERSION = '3.14';
# So we want CiscoVTP to come last to get the right one.
# The @ISA order should match 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::CiscoStats::MIBS,
%SNMP::Info::LLDP::MIBS, %SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoStack::MIBS, %SNMP::Info::CiscoStpExtensions::MIBS,
%SNMP::Info::CiscoVTP::MIBS,
);
%MIBS
= ( %SNMP::Info::Layer3::CiscoSwitch::MIBS, %SNMP::Info::CiscoStack::MIBS,
);
%GLOBALS = (
%SNMP::Info::Layer3::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::Layer3::CiscoSwitch::GLOBALS,
%SNMP::Info::CiscoStack::GLOBALS,
%SNMP::Info::CiscoStpExtensions::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::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,
%SNMP::Info::Layer3::CiscoSwitch::FUNCS,
%SNMP::Info::CiscoStack::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::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,
%SNMP::Info::Layer3::CiscoSwitch::MUNGE,
%SNMP::Info::CiscoStack::MUNGE,
);
sub vendor {
@@ -232,10 +192,6 @@ sub set_i_duplex_admin {
}
}
sub cisco_comm_indexing {
return 1;
}
1;
__END__
@@ -281,25 +237,9 @@ after determining a more specific class using the method above.
=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::CDP
=item SNMP::Info::LLDP
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoImage
=item SNMP::Info::Layer3::CiscoSwitch
=back
@@ -309,26 +249,10 @@ after determining a more specific class using the method above.
=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::CiscoStats/"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.
See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
requirements.
=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.
=item $c3550->cisco_comm_indexing()
Returns 1. Use vlan indexing.
=back
=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.
=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
=head2 Globals imported from SNMP::Info::CiscoStack
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.
=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.
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
=head1 TABLE METHODS
@@ -444,45 +332,13 @@ Crosses $c3550->p_port() with $c3550->p_duplex() to utilize port C<ifIndex>.
=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
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.
=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.
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
details.
=cut

View File

@@ -31,48 +31,30 @@
package SNMP::Info::Layer3::C4000;
use strict;
use warnings;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CDP;
use SNMP::Info::CiscoStats;
use SNMP::Info::CiscoImage;
use SNMP::Info::CiscoPortSecurity;
use SNMP::Info::CiscoConfig;
use SNMP::Info::Layer3::CiscoSwitch;
use SNMP::Info::MAU;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::C4000::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoConfig SNMP::Info::MAU
SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::C4000::ISA = qw/
SNMP::Info::Layer3::CiscoSwitch
SNMP::Info::MAU
Exporter/;
@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::MAU::MIBS,
%SNMP::Info::CiscoConfig::MIBS,
%SNMP::Info::CiscoPortSecurity::MIBS,
%SNMP::Info::CiscoImage::MIBS,
%SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS,
%SNMP::Info::CiscoVTP::MIBS,
%SNMP::Info::Layer3::CiscoSwitch::MIBS,
'CISCO-ENVMON-MIB' => 'ciscoEnvMonMIB',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::MAU::GLOBALS,
%SNMP::Info::CiscoConfig::GLOBALS,
%SNMP::Info::CiscoPortSecurity::GLOBALS,
%SNMP::Info::CiscoImage::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS,
%SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
%SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
'ps1_type' => 'ciscoEnvMonSupplyStatusDescr.1',
'ps1_status' => 'ciscoEnvMonSupplyState.1',
'ps2_type' => 'ciscoEnvMonSupplyStatusDescr.2',
@@ -80,24 +62,14 @@ $VERSION = '3.14';
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::MAU::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CiscoPortSecurity::FUNCS,
%SNMP::Info::CiscoImage::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS,
%SNMP::Info::CiscoVTP::FUNCS,
%SNMP::Info::Layer3::CiscoSwitch::FUNCS,
'fan_state' => 'ciscoEnvMonFanState',
'fan_descr' => 'ciscoEnvMonFanStatusDescr',
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::MAU::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,
);
%MUNGE
= ( %SNMP::Info::MAU::MUNGE, %SNMP::Info::Layer3::CiscoSwitch::MUNGE, );
# Override Inheritance for these specific methods
# use MAU-MIB for admin. duplex and admin. speed
@@ -111,7 +83,6 @@ $VERSION = '3.14';
*SNMP::Info::Layer3::C4000::set_i_speed_admin
= \&SNMP::Info::MAU::mau_set_i_speed_admin;
sub fan {
my $c4000 = shift;
my $fan_state = $c4000->fan_state();
@@ -126,8 +97,6 @@ sub fan {
return $ret;
}
sub cisco_comm_indexing { return 1; }
1;
__END__
@@ -169,22 +138,10 @@ after determining a more specific class using the method above.
=over
=item SNMP::Info::CiscoVTP
=item SNMP::Info::CDP
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoImage
=item SNMP::Info::CiscoPortSecurity
=item SNMP::Info::CiscoConfig
=item SNMP::Info::Layer3::CiscoSwitch
=item SNMP::Info::MAU
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
@@ -193,23 +150,11 @@ after determining a more specific class using the method above.
=item Inherited Classes' MIBs
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::CiscoImage/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
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::Layer3/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
@@ -220,48 +165,20 @@ These are methods that return scalar value from SNMP
=over
=item $c4000->cisco_comm_indexing()
Returns 1. Use vlan indexing.
=item $c4000->fan()
Returns fan status
=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.
=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.
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
=head2 Globals imported from SNMP::Info::MAU
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
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
=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.
=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
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"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::MAU
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

View File

@@ -31,37 +31,18 @@
package SNMP::Info::Layer3::C6500;
use strict;
use warnings;
use Exporter;
use SNMP::Info::CiscoStack;
use SNMP::Info::LLDP;
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::CiscoAgg;
use SNMP::Info::Layer3::CiscoSwitch;
use SNMP::Info::MAU;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
# NOTE : Top-most items gets precedence for @ISA
@SNMP::Info::Layer3::C6500::ISA = qw/
SNMP::Info::CiscoAgg
SNMP::Info::CiscoVTP
SNMP::Info::CiscoStpExtensions
SNMP::Info::CiscoStack
SNMP::Info::LLDP
SNMP::Info::CDP
SNMP::Info::CiscoImage
SNMP::Info::CiscoStats
SNMP::Info::CiscoPortSecurity
SNMP::Info::CiscoConfig
SNMP::Info::CiscoPower
SNMP::Info::Layer3
SNMP::Info::Layer3::CiscoSwitch
SNMP::Info::MAU
Exporter
/;
@@ -70,7 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
# NOTE: Order creates precedence
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
@@ -80,59 +61,49 @@ $VERSION = '3.14';
%MIBS = (
%SNMP::Info::MAU::MIBS,
%SNMP::Info::Layer3::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::Layer3::CiscoSwitch::MIBS,
%SNMP::Info::CiscoStack::MIBS,
%SNMP::Info::CiscoStpExtensions::MIBS,
%SNMP::Info::CiscoVTP::MIBS,
%SNMP::Info::CiscoAgg::MIBS,
'CISCO-VIRTUAL-SWITCH-MIB' => 'cvsSwitchMode',
);
%GLOBALS = (
%SNMP::Info::MAU::GLOBALS,
%SNMP::Info::Layer3::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::Layer3::CiscoSwitch::GLOBALS,
%SNMP::Info::CiscoStack::GLOBALS,
%SNMP::Info::CiscoStpExtensions::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::MAU::FUNCS, %SNMP::Info::Layer3::FUNCS,
%SNMP::Info::CiscoPower::FUNCS, %SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CiscoPortSecurity::FUNCS, %SNMP::Info::CiscoImage::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,
%SNMP::Info::MAU::FUNCS,
%SNMP::Info::Layer3::CiscoSwitch::FUNCS,
%SNMP::Info::CiscoStack::FUNCS,
);
%MUNGE = (
%SNMP::Info::MAU::MUNGE, %SNMP::Info::Layer3::MUNGE,
%SNMP::Info::CiscoPower::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CiscoPortSecurity::MUNGE, %SNMP::Info::CiscoImage::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,
%SNMP::Info::MAU::MUNGE,
%SNMP::Info::Layer3::CiscoSwitch::MUNGE,
%SNMP::Info::CiscoStack::MUNGE,
);
sub vendor {
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.
@@ -312,27 +283,11 @@ after determining a more specific class using the method above.
=over
=item SNMP::Info::CiscoAgg
=item SNMP::Info::CiscoVTP
=item SNMP::Info::CiscoStack
=item SNMP::Info::CDP
=item SNMP::Info::Layer3::CiscoSwitch
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoImage
=item SNMP::Info::CiscoPortSecurity
=item SNMP::Info::CiscoConfig
=item SNMP::Info::CiscoPower
=item SNMP::Info::Layer3
=item SNMP::Info::CiscoStpExtensions
=item SNMP::Info::MAU
=back
@@ -342,28 +297,12 @@ after determining a more specific class using the method above.
=item Inherited Classes' MIBs
See L<SNMP::Info::CiscoAgg/"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::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
See L<SNMP::Info::Layer3::CiscoSwitch/"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::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
=back
@@ -377,10 +316,6 @@ These are methods that return scalar value from SNMP
Returns 'cisco'
=item $c6500->cisco_comm_indexing()
Returns 1. Use vlan indexing.
=item $c6500->cvsSwitchMode()
Returns the Switch status: multiNode or standalone.
@@ -389,47 +324,23 @@ Returns the Switch status: multiNode or standalone.
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
=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
=head2 Globals imported from SNMP::Info::CiscoStack
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.
=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.
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
=head1 TABLE METHODS
@@ -484,47 +395,19 @@ Crosses $c6500->p_port() with $c6500->p_speed() to utilize port C<ifIndex>.
=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
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::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
See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"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::MAU
=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::Layer3
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
=cut

View 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.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::LLDP::MIBS,
'CHECKPOINT-MIB' => 'fwProduct',
'UCD-SNMP-MIB' => 'versionTag',
'NET-SNMP-TC' => 'netSnmpAgentOIDs',
'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
'HOST-RESOURCES-MIB' => 'hrSystem',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
'netsnmp_vers' => 'versionTag',
'hrSystemUptime' => 'hrSystemUptime',
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::LLDP::FUNCS,
# Net-SNMP Extend table that could but customize to add a the CheckPoint version
'extend_output_table' => 'nsExtendOutputFull',
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::LLDP::MUNGE,
);
sub vendor {
return 'checkpoint';
}
sub model {
my $ckp = shift;
my $id = $ckp->id;
my $model = &SNMP::translateObj($id);
if (defined $model) {
$model =~ s/^checkPoint//;
return $model;
} else {
return $id;
}
}
sub os {
return 'checkpoint';
}
sub os_ver {
my $ckp = shift;
my $extend_table = $ckp->extend_output_table() || {};
my $descr = $ckp->description();
my $vers = $ckp->netsnmp_vers();
my $os_ver = undef;
foreach my $ex (keys %$extend_table) {
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
if ($name eq 'ckpVersion') {
return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/);
last;
}
}
$os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ );
if ($vers) {
$os_ver = "???" unless defined($os_ver);
$os_ver .= " / Net-SNMP " . $vers;
}
return $os_ver;
}
sub serial {
my $ckp = shift;
my $extend_table = $ckp->extend_output_table() || {};
foreach my $ex (keys %$extend_table) {
(my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
if ($name eq 'ckpAsset') {
return $1 if ($extend_table->{$ex} =~ /Serial Number: (\S+)/);
last;
}
}
return '';
}
sub layers {
return '01001100';
}
# sysUptime gives us the time since the SNMP daemon has restarted,
# so return the system uptime since that's probably what the user
# wants. (Caution: this could cause trouble if using
# sysUptime-based discontinuity timers or other TimeStamp
# objects.
sub uptime {
my $ckp = shift;
my $uptime;
$uptime = $ckp->hrSystemUptime();
return $uptime if defined $uptime;
return $ckp->SUPER::uptime();
}
sub i_ignore {
my $l3 = shift;
my $partial = shift;
my $interfaces = $l3->interfaces($partial) || {};
my %i_ignore;
foreach my $if ( keys %$interfaces ) {
# lo0 etc
if ( $interfaces->{$if} =~ /\blo\d*\b/i ) {
$i_ignore{$if}++;
}
}
return \%i_ignore;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::CheckPoint - SNMP Interface to CheckPoint Devices
=head1 AUTHORS
Ambroise Rosset
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $ckp = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myrouter',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $ckp->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Generic Net-SNMP devices
=head2 WARNING
To correctly and completelly work, you should add the following line in the file C</etc/snmp/snmpd.local.conf> on each of your CheckPoint devices:
# Netdisco SNMP configuration
extend ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver
extend ckpAsset /bin/clish -c 'show asset all'
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
=over
=item F<UCD-SNMP-MIB>
=item F<NET-SNMP-TC>
=item F<HOST-RESOURCES-MIB>
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3> for its own MIB requirements.
See L<SNMP::Info::LLDP> for its own MIB requirements.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $ckp->vendor()
Returns 'checkpoint'.
=item $ckp->model()
Return the model type of the CheckPoint device (Based on the sysObjectOID translation).
=item $ckp->os()
Returns the OS extracted from C<sysDescr>.
=item $ckp->os_ver()
Returns the software version extracted from C<sysDescr>, along
with the Net-SNMP version.
=item $ckp->uptime()
Returns the system uptime instead of the agent uptime.
NOTE: discontinuity timers and other Time Stamp based objects
are based on agent uptime, so use orig_uptime().
=item $ckp->serial()
Return the serial number of the device if the SNMP server is configured as indicated previously.
Return '' in other case.
=item $ckp->layers()
Return '01001100'.
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3> for details.
=head2 Globals imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP> for details.
=head1 TABLE ENTRIES
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Overrides
=over
=item $ckp->i_ignore()
Returns reference to hash. Increments value of IID if port is to be ignored.
Ignores loopback
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP> for details.
=head1 NOTES
In order to cause SNMP::Info to classify your device into this class, it
may be necessary to put a configuration line into your F<snmpd.conf>
similar to
sysobjectid .1.3.6.1.4.1.8072.3.2.N
where N is the object ID for your OS from the C<NET-SNMP-TC> MIB (or
255 if not listed). Some Net-SNMP installations default to an
incorrect return value for C<system.sysObjectId>.
In order to recognize a Net-SNMP device as Layer3, it may be necessary
to put a configuration line similar to
sysservices 76
in your F<snmpd.conf>.
=cut

View File

@@ -31,59 +31,70 @@
package SNMP::Info::Layer3::Cisco;
use strict;
use warnings;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::LLDP;
use SNMP::Info::CDP;
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::CiscoStpExtensions;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
SNMP::Info::CiscoConfig SNMP::Info::CiscoPower
@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP
SNMP::Info::LLDP SNMP::Info::CDP
SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
SNMP::Info::CiscoQOS SNMP::Info::CiscoConfig
SNMP::Info::CiscoPower SNMP::Info::CiscoStpExtensions
SNMP::Info::Layer3
Exporter/;
@SNMP::Info::Layer3::Cisco::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::CiscoStpExtensions::MIBS,
%SNMP::Info::CiscoPower::MIBS,
%SNMP::Info::CiscoConfig::MIBS,
%SNMP::Info::CiscoQOS::MIBS,
%SNMP::Info::CiscoRTT::MIBS,
%SNMP::Info::CiscoImage::MIBS,
%SNMP::Info::CiscoStats::MIBS,
%SNMP::Info::CDP::MIBS,
%SNMP::Info::LLDP::MIBS,
%SNMP::Info::CiscoVTP::MIBS,
'CISCO-EIGRP-MIB' => 'cEigrpAsRouterId',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoPower::GLOBALS,
%SNMP::Info::CiscoConfig::GLOBALS, %SNMP::Info::CiscoQOS::GLOBALS,
%SNMP::Info::CiscoRTT::GLOBALS, %SNMP::Info::CiscoImage::GLOBALS,
%SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS,
%SNMP::Info::CiscoVTP::GLOBALS, 'eigrp_id' => 'cEigrpAsRouterId',
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::CiscoStpExtensions::GLOBALS,
%SNMP::Info::CiscoPower::GLOBALS,
%SNMP::Info::CiscoConfig::GLOBALS,
%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 = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::CiscoStpExtensions::FUNCS,
%SNMP::Info::CiscoPower::FUNCS,
%SNMP::Info::CiscoConfig::FUNCS,
%SNMP::Info::CiscoQOS::FUNCS,
%SNMP::Info::CiscoRTT::FUNCS,
%SNMP::Info::CiscoImage::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
%SNMP::Info::CDP::FUNCS,
%SNMP::Info::LLDP::FUNCS,
%SNMP::Info::CiscoVTP::FUNCS,
# EIGRP
@@ -92,33 +103,44 @@ $VERSION = '3.14';
%MUNGE = (
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::CiscoStpExtensions::MUNGE,
%SNMP::Info::CiscoPower::MUNGE,
%SNMP::Info::CiscoConfig::MUNGE,
%SNMP::Info::CiscoQOS::MUNGE,
%SNMP::Info::CiscoRTT::MUNGE,
%SNMP::Info::CiscoImage::MUNGE,
%SNMP::Info::CiscoStats::MUNGE,
%SNMP::Info::CDP::MUNGE,
%SNMP::Info::LLDP::MUNGE,
%SNMP::Info::CiscoVTP::MUNGE,
'eigrp_peers' => \&SNMP::Info::munge_ip,
);
sub i_vlan {
my ($cisco) = shift;
my ($partial) = shift;
my $cisco = shift;
my $partial = shift;
my ($i_type) = $cisco->i_type($partial);
my ($i_descr) = $cisco->i_description($partial);
my %i_vlan;
my $i_type = $cisco->i_type($partial);
my $i_descr = $cisco->i_description($partial);
my $i_vlan = $cisco->SUPER::i_vlan($partial);
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} )
{
if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
$i_vlan{$idx} = $1;
$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 ne '0');
}
1;
@@ -127,7 +149,9 @@ __END__
=head1 NAME
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
@@ -151,7 +175,8 @@ Max Baker
=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
@@ -159,12 +184,12 @@ Subclass for Generic Cisco Routers running IOS
=item SNMP::Info::CiscoVTP
=item SNMP::Info::LLDP
=item SNMP::Info::CDP
=item SNMP::Info::CiscoStats
=item SNMP::Info::CiscoImage
=item SNMP::Info::CiscoRTT
=item SNMP::Info::CiscoQOS
@@ -173,6 +198,8 @@ Subclass for Generic Cisco Routers running IOS
=item SNMP::Info::Power
=item SNMP::Info::CiscoStpExtensions
=item SNMP::Info::Layer3
=back
@@ -187,12 +214,12 @@ Subclass for Generic Cisco Routers running IOS
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::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::CiscoQOS/"Required MIBs"> for its own MIB requirements.
@@ -201,6 +228,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::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
=back
@@ -211,20 +240,25 @@ These are methods that return scalar value from SNMP
=over
=item $cisco->vendor()
Returns 'cisco'
=item $cisco->eigrp_id()
(C<cEigrpAsRouterId>)
=item $switch->cisco_comm_indexing()
Returns 1 when the device is likely to need vlan indexing.
Determined by checking C<vtpVersion>.
=back
=head2 Global Methods imported from SNMP::Info::CiscoVTP
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
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
@@ -233,10 +267,6 @@ See documentation in L<SNMP::Info::CDP/"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
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
@@ -253,6 +283,10 @@ See documentation in L<SNMP::Info::CiscoConfig/"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
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
@@ -280,6 +314,10 @@ Returns a mapping between C<ifIndex> and the PVID or default VLAN.
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
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
@@ -288,10 +326,6 @@ See documentation in L<SNMP::Info::CDP/"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
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
@@ -308,6 +342,10 @@ See documentation in L<SNMP::Info::CiscoConfig/"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.

View File

@@ -32,68 +32,61 @@
package SNMP::Info::Layer3::CiscoASA;
use strict;
use warnings;
use Exporter;
use SNMP::Info::CiscoVTP;
use SNMP::Info::CDP;
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::Cisco;
@SNMP::Info::Layer3::CiscoASA::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
SNMP::Info::CiscoStats SNMP::Info::CiscoImage
SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
SNMP::Info::CiscoConfig SNMP::Info::CiscoPower
SNMP::Info::Layer3::Cisco
@SNMP::Info::Layer3::CiscoASA::ISA = qw/
SNMP::Info::CiscoStats
SNMP::Info::Layer3
Exporter/;
@SNMP::Info::Layer3::CiscoASA::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::Cisco::MIBS,
);
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
%GLOBALS = (
%SNMP::Info::Layer3::Cisco::GLOBALS,
);
%GLOBALS
= ( %SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, );
%FUNCS = (
%SNMP::Info::Layer3::Cisco::FUNCS,
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
'mac_table' => 'ifPhysAddress',
);
%MUNGE = (
%SNMP::Info::Layer3::Cisco::MUNGE,
'mac_table' => \&SNMP::Info::munge_mac, );
%SNMP::Info::Layer3::MUNGE,
%SNMP::Info::CiscoStats::MUNGE,
'mac_table' => \&SNMP::Info::munge_mac,
);
sub b_mac {
my ($asa) = shift;
my $macs = $asa->mac_table();
my @macs;
# gather physical addresses
foreach my $i ( keys %$macs ) {
my $mac = $macs->{$i};
# don't catch the bad macs with zeroed OUI
if ( $mac !~ m/(0{1,2}:){3}/ ) {
push( @macs, $mac);
}
@macs = sort( @macs );
}
# return the least mac
return $macs[0];
my ($asa) = shift;
my $macs = $asa->mac_table();
my @macs;
# gather physical addresses
foreach my $i ( keys %$macs ) {
my $mac = $macs->{$i};
# don't catch the bad macs with bogus OUI
if ( $mac !~ m/(0{1,2}:){2}(00|01)/ ) {
push( @macs, $mac );
}
@macs = sort(@macs);
}
# return the least mac
return $macs[0];
}
sub i_description {
my $self = shift;
my $partial = shift;
my $self = shift;
my $partial = shift;
my $i_descr = $self->orig_i_description($partial) || {};
@@ -141,7 +134,9 @@ Subclass for Cisco ASA Devices
=over
=item SNMP::Info::Layer3::Cisco
=item SNMP::Info::CiscoStats
=item SNMP::Info::Layer3
=back
@@ -149,11 +144,11 @@ Subclass for Cisco ASA Devices
=over
=item F<CISCO-EIGRP-MIB>
=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
@@ -176,77 +171,25 @@ configured interface name instead of "Adaptive Security Appliance
=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
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
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
=head2 Global Methods imported from SNMP::Info::Layer3
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
These are methods that return tables of information in the form of a
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
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.
=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.
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
=cut

View File

@@ -31,34 +31,31 @@
package SNMP::Info::Layer3::CiscoFWSM;
use strict;
use warnings;
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
Exporter/;
@SNMP::Info::Layer3::CiscoFWSM::ISA = qw/SNMP::Info::CiscoStats
SNMP::Info::Layer3
Exporter/;
@SNMP::Info::Layer3::CiscoFWSM::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::Cisco::MIBS,
);
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
%GLOBALS = (
%SNMP::Info::Layer3::Cisco::GLOBALS,
);
%GLOBALS
= ( %SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, );
%FUNCS = (
%SNMP::Info::Layer3::Cisco::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::Cisco::MUNGE,
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::CiscoStats::FUNCS,
);
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoStats::MUNGE, );
# For FWSMs, the ipNetToPhysicalPhysAddress table appears to be of the form:
# $ifindex.$inetaddresstype.$proto.$ip_address -> $mac_address
@@ -69,65 +66,65 @@ $VERSION = '3.14';
# This doesn't really line up to what at_* return, so we munge it
sub at_paddr {
my ($fwsm) = shift;
my ($partial) = shift;
my ($fwsm) = shift;
my ($partial) = shift;
my $paddrs = $fwsm->n2p_paddr($partial);
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;
my $paddrs = $fwsm->n2p_paddr($partial);
my $n_paddrs = {};
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;
}
return $n_paddrs;
next if ( $proto != 4 ); # at_paddr doesn't support non-IPv4
$n_paddrs->{"$ifindex.$ip"} = $paddr;
}
return $n_paddrs;
}
sub at_netaddr {
my ($fwsm) = shift;
my ($partial) = shift;
my ($fwsm) = shift;
my ($partial) = shift;
my $paddrs = $fwsm->n2p_paddr($partial);
my $paddrs = $fwsm->n2p_paddr($partial);
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;
my $netaddrs = {};
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;
}
return $netaddrs;
next if ( $proto != 4 ); # at_netaddr doesn't support non-IPv4
$netaddrs->{"$ifindex.$ip"} = $ip;
}
return $netaddrs;
}
sub at_ifaddr {
my ($fwsm) = shift;
my ($partial) = shift;
my ($fwsm) = shift;
my ($partial) = shift;
my $paddrs = $fwsm->n2p_paddr($partial);
my $paddrs = $fwsm->n2p_paddr($partial);
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;
my $ifaddrs = {};
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;
}
return $ifaddrs;
next if ( $proto != 4 ); # at_ifaddr doesn't support non-IPv4
$ifaddrs->{"$ifindex.$ip"} = $ip;
}
return $ifaddrs;
}
1;
@@ -135,8 +132,8 @@ __END__
=head1 NAME
SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules for
features not covered elsewhere.
SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules
for features not covered elsewhere.
=head1 AUTHOR
@@ -146,14 +143,14 @@ Brian De Wolf
# Let SNMP::Info determine the correct subclass for you.
my $fwsm = 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";
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 = $fwsm->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
@@ -166,7 +163,9 @@ Subclass for Cisco Firewall Services Modules
=over
=item SNMP::Info::Layer3::Cisco
=item SNMP::Info::CiscoStats
=item SNMP::Info::Layer3
=back
@@ -176,15 +175,21 @@ Subclass for Cisco Firewall Services Modules
=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
=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
@@ -216,8 +221,12 @@ the MIB to provide that information isn't supported on FWSM.
=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

View 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.54';
%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

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,

View 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.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::LLDP::MIBS,
%SNMP::Info::IEEE802dot3ad::MIBS,
'UCD-SNMP-MIB' => 'versionTag',
'NET-SNMP-TC' => 'netSnmpAgentOIDs',
'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 (\S+)\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

View File

@@ -0,0 +1,213 @@
package SNMP::Info::Layer3::DLink;
use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::LLDP;
@SNMP::Info::Layer3::DLink::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::DLink::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::LLDP::MIBS,
'DLINK-ID-REC-MIB' => 'dlink',
'SWPRIMGMT-DES3200-MIB' => 'dlink-des3200SeriesProd',
'SWPRIMGMT-DES30XXP-MIB' => 'dlink-des30xxproductProd',
'SWPRIMGMT-DES1228ME-MIB' => 'dlink-des1228MEproductProd',
'SWDES3528-52PRIMGMT-MIB' => 'dlink-Des3500Series',
'DES-1210-28-AX' => 'des-1210-28ax',
'DES-1210-10MEbx' => 'des-1210-10mebx',
'DES-1210-26MEbx' => 'des-1210-26mebx',
'DES-1210-52-BX' => 'des-1210-52bx',
'DES-1210-52-CX' => 'des-1210-52-cx',
'DGS-1210-24-AX' => 'dgs-1210-24ax',
);
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS,
%SNMP::Info::LLDP::FUNCS,
'dlink_fw' => 'probeSoftwareRev',
'dlink_hw' => 'probeHardwareRev',
'dlink_stp_i_root_port' => 'MSTP_MIB__swMSTPInstRootPort',
'dlink_serial_no' => 'AGENT_GENERAL_MIB__agentSerialNumber',
);
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
sub model {
my $dlink=shift;
my $id = $dlink->id();
my $model = &SNMP::translateObj($id);
return $id unless defined $model;
if (defined $model && $model !~ /dlink-products/) {
return $model;
} else {
#If don't have a device MIB
return $dlink->description();
}
}
sub vendor {
return 'dlink';
}
sub serial {
my $dlink = shift;
my $model = $dlink->model();
my $id = $dlink->id();
my $serial;
if ($model =~ /1210/) {
#Due to the zoo of MIB from DLink by 1210 series
$serial->{0} = $dlink->session()->get($id.'.1.30.0');
} else {
$serial = $dlink->dlink_serial_no();
}
return $serial->{0} if ( defined $serial->{0} and $serial->{0} !~ /^\s*$/ and $serial->{0} !~ 'NOSUCHOBJECT' );
return $dlink->SUPER::serial();
}
sub fwver {
my $dlink=shift;
my $model = $dlink->model();
my $id = $dlink->id();
my $fw;
if ($model =~ /1210/) {
#Due to the zoo of MIB from DLink by 1210 series
$fw->{0} = $dlink->session()->get($id.'.1.3.0');
} else {
$fw = $dlink->dlink_fw();
}
return $fw->{0} if ( defined $fw->{0} and $fw->{0} !~ /^\s*$/ and $fw->{0} !~ 'NOSUCHOBJECT');
}
sub hwver {
my $dlink=shift;
my $model = $dlink->model();
my $id = $dlink->id();
my $hw;
if ($model =~ /1210/) {
#Due to the zoo of MIB from DLink by 1210 series
$hw->{0} = $dlink->session()->get($id.'.1.2.0');
} else {
$hw = $dlink->dlink_hw();
}
return $hw->{0} if ( defined $hw->{0} and $hw->{0} !~ /^\s*$/ and $hw->{0} !~ 'NOSUCHOBJECT');
}
sub stp_i_root_port {
my $dlink=shift;
my $model = $dlink->model();
my $id = $dlink->id();
my $stp_i_root_port;
if ($model =~ /1210-(?:10|26)/) {
#Due to the zoo of MIB from DLink by 1210 series
$stp_i_root_port->{0} = $dlink->session()->get($id.'.6.1.13.0');
} else {
$stp_i_root_port = $dlink->dlink_stp_i_root_port();
}
return $stp_i_root_port if ( defined $stp_i_root_port->{0} and $stp_i_root_port->{0} !~ /^\s*$/ and $stp_i_root_port->{0} !~ 'NOSUCHOBJECT');
return $dlink->SUPER::stp_i_root_port();
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::DLink - SNMP Interface to DLink Devices
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $dlink = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myrouter',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $dlink->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Vyatta Devices running dlink.
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=item SNMP::Info::LLDP
=back
=head2 Inherited Classes' MIBs
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $dlink->model()
Returns the ID or else description.
=item $dlink->vendor()
Returns 'dlink'.
=item $dlink->serial()
Returns serial number.
=item $dlink->fwver()
Returns the firmware version.
=item $dlink->hwver()
Returns the hardware version.
=item $dlink->stp_i_root_port()
Returns the STP root port.
=back
=head2 Globals imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
=head1 TABLE METHODS
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View File

@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '3.14';
$VERSION = '3.54';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -153,6 +153,48 @@ sub serial {
return $dell->SUPER::serial();
}
# check all fans, and report overall status
sub fan {
my $dell = shift;
my $fan = $dell->dell_fan_desc() || {};
my $state = $dell->dell_fan_state() || {};
my @messages = ();
foreach my $k (keys %$fan) {
next if $state->{$k} and $state->{$k} eq 'normal';
push @messages, "$fan->{$k}: $state->{$k}";
}
push @messages, ((scalar keys %$fan). " fans OK")
if scalar @messages == 0;
return (join ", ", @messages);
}
sub _ps_status {
my ($dell, $unit) = @_;
my $status = 'unknown';
return $status if !defined $unit;
my $desc = $dell->dell_pwr_desc() || {};
my $state = $dell->dell_pwr_state() || {};
foreach my $k (keys %$desc) {
next unless $desc->{$k} and $desc->{$k} eq "ps1_unit$unit";
return ($state->{$k} || $status);
}
return $status;
}
sub ps1_type { return 'internalRedundant' }
sub ps2_type { return 'internalRedundant' }
sub ps1_status { return (shift)->_ps_status(1) }
sub ps2_status { return (shift)->_ps_status(2) }
sub interfaces {
my $dell = shift;
my $partial = shift;
@@ -213,6 +255,10 @@ sub _vendor {
}
}
# dot1qTpFdbTable uses dot1qVlanIndex rather than dot1qFdbId as index,
# so pretend we don't have the mapping
sub qb_fdb_index {return}
1;
__END__
@@ -308,6 +354,26 @@ id(). Defaults to 'dlink'.
Returns 'dell', 'dlink', or 'ibm' based upon the IANA enterprise number in
id(). Defaults to 'dlink'.
=item $dell->fan()
Return the status of all fans from the F<Dell-Vendor-MIB>
=item $dell->ps1_type()
Return the type of the first power supply from the F<Dell-Vendor-MIB>
=item $dell->ps2_type()
Return the type of the second power supply from the F<Dell-Vendor-MIB>
=item $dell->ps1_status()
Return the status of the first power supply from the F<Dell-Vendor-MIB>
=item $dell->ps2_status()
Return the status of the second power supply from the F<Dell-Vendor-MIB>
=back
=head2 Overrides
@@ -387,6 +453,10 @@ sometimes not unique.
Returns reference to hash of iid to current link administrative duplex
setting.
=item $dell->qb_fdb_index()
Returns nothing to work around incorrect indexing of C<dot1qTpFdbTable>
=back
=head2 Table Methods imported from SNMP::Info::Layer3

Some files were not shown because too many files have changed in this diff Show More