Compare commits
	
		
			337 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | a1769aa905 | ||
|  | 78119d6547 | ||
|  | f27d76fa9d | ||
|  | 4f8534169a | ||
|  | f531c9d9a7 | ||
|  | 1a80138026 | ||
|  | 4ff904f3cd | ||
|  | 721193ccb8 | ||
|  | b263fa4375 | ||
|  | 4681004b52 | ||
|  | 0ab688964f | ||
|  | 7e0ef60e24 | ||
|  | 41339c8df4 | ||
|  | 119c077d25 | ||
|  | 9af3f7c579 | ||
|  | e7c93b7abd | ||
|  | 20b655c7a2 | ||
|  | 9fca5b1e42 | ||
|  | 1c581f8e8f | ||
|  | 8d35e15624 | ||
|  | cf42fe1496 | ||
|  | 1af11bd088 | ||
|  | 073ec319e7 | ||
|  | 5852c3548b | ||
|  | 2344a1eacf | ||
|  | d0887fbea7 | ||
|  | e5ebda1b1e | ||
|  | 8d1681dbfc | ||
|  | 7221797826 | ||
|  | f2fdbb077c | ||
|  | a6fdb107b4 | ||
|  | 7f31038462 | ||
|  | 5fb7c78619 | ||
|  | 603345205a | ||
|  | bd85ebc8d6 | ||
|  | 2aca6d9300 | ||
|  | 4919cb0f69 | ||
|  | d134c342e8 | ||
|  | b1c7e78d12 | ||
|  | 0a0766afbd | ||
|  | 2d39911cba | ||
|  | 3bf60002f4 | ||
|  | 42db01335e | ||
|  | 752e1c632c | ||
|  | 892d2014ca | ||
|  | 1fdc486cd5 | ||
|  | 9e7f7f734e | ||
|  | e311f8a5c6 | ||
|  | 82755ab8db | ||
|  | 62823e3d83 | ||
|  | 66077c9662 | ||
|  | 74e129154b | ||
|  | 75880d9134 | ||
|  | 245fe93be4 | ||
|  | 54a0baa2fa | ||
|  | 4e18ccc9e2 | ||
|  | 9ed5a187a9 | ||
|  | a636ba6117 | ||
|  | facdf0aafe | ||
|  | 75dcf74148 | ||
|  | e252dac59c | ||
|  | 9d384f2bc2 | ||
|  | cc9a1c9f47 | ||
|  | b43eafd09a | ||
|  | 141470fdf4 | ||
|  | 2e18464635 | ||
|  | 87a287e0c9 | ||
|  | a38eafbf56 | ||
|  | 81c7203642 | ||
|  | c515a5e4a1 | ||
|  | 02e6807e44 | ||
|  | 90bb0ef071 | ||
|  | 209988cf9e | ||
|  | da130926a9 | ||
|  | 4c51c29428 | ||
|  | 2301d2e60a | ||
|  | 53a5b5aa0a | ||
|  | d13adfee80 | ||
|  | 9752bf2878 | ||
|  | 9949eeb389 | ||
|  | aceed9cc52 | ||
|  | 0371ca35d6 | ||
|  | ce0a350ef2 | ||
|  | 3b58ba8678 | ||
|  | a69b45d849 | ||
|  | ad0a1044b9 | ||
|  | 5336ec2db2 | ||
|  | e20cd6dd02 | ||
|  | 66f16f6617 | ||
|  | 0755487e02 | ||
|  | afeb37ae5e | ||
|  | cc05fb927f | ||
|  | facdf5b7a7 | ||
|  | 66bedd4d54 | ||
|  | 3a3c1efe46 | ||
|  | 1a069c2b52 | ||
|  | f7de9ffbc6 | ||
|  | 3c6cfa8ecf | ||
|  | 585d01895b | ||
|  | 63cac2a3a8 | ||
|  | 0623fbfdf1 | ||
|  | 0c711269ae | ||
|  | f676d27a3b | ||
|  | 64167df588 | ||
|  | 398f3ee74b | ||
|  | 125f02b8a2 | ||
|  | eeeabeec94 | ||
|  | 5fe0ebaeda | ||
|  | fda59f51f7 | ||
|  | e8de74c6a5 | ||
|  | da6716b107 | ||
|  | 62267f4e8e | ||
|  | fd1c91edac | ||
|  | a0b2010994 | ||
|  | bda796ae98 | ||
|  | 8b3b03b312 | ||
|  | cbc756a3f8 | ||
|  | 9af7a7661c | ||
|  | eab89e4736 | ||
|  | 8391cee4f3 | ||
|  | fcd0e30d64 | ||
|  | 4a454c9431 | ||
|  | cd751071e1 | ||
|  | c921e8b35c | ||
|  | 60d5591401 | ||
|  | 98e8e57747 | ||
|  | f6a4f937ee | ||
|  | 1e5eda927c | ||
|  | c6eb73bc7b | ||
|  | c49d8ab921 | ||
|  | 27b310ee68 | ||
|  | f6d0fb1d7e | ||
|  | ddc5fd8c96 | ||
|  | 26b13fbcd4 | ||
|  | 91b98085f6 | ||
|  | 1c948d6e45 | ||
|  | 76cbb05f19 | ||
|  | e7fcd98107 | ||
|  | 090d94191b | ||
|  | 2c3a6a3c6e | ||
|  | 814083e2fa | ||
|  | 7621b30bc2 | ||
|  | 9e2e55dcb3 | ||
|  | f8a1d5bc7a | ||
|  | 1a65be101e | ||
|  | 4c5d0a5695 | ||
|  | f8b3381d16 | ||
|  | 8a41e5063a | ||
|  | 24a84cdc25 | ||
|  | 25354e1f3e | ||
|  | 2025044952 | ||
|  | d00dcdad85 | ||
|  | fc069c13f5 | ||
|  | 69430f4a21 | ||
|  | a83855157b | ||
|  | 5ce80ba4ee | ||
|  | 16e96d9fcf | ||
|  | ac753c5970 | ||
|  | 313e187399 | ||
|  | f5aaee6c89 | ||
|  | c8b4f8f4fd | ||
|  | 6113dd3b98 | ||
|  | e21f22bb3b | ||
|  | bb4578dea5 | ||
|  | e83ca6fbe3 | ||
|  | ae9963cf85 | ||
|  | 650aef9c2d | ||
|  | 397b14da22 | ||
|  | 0f00322e03 | ||
|  | e2b688077e | ||
|  | 4afbd37cbd | ||
|  | 40d3340ac5 | ||
|  | 9bb71d3df7 | ||
|  | 4860447b06 | ||
|  | 445b3f19a3 | ||
|  | 32efd26999 | ||
|  | f2f95150bd | ||
|  | f210bf8812 | ||
|  | c30e1a2446 | ||
|  | 10392fc08e | ||
|  | df10473fb5 | ||
|  | 6505e7e85f | ||
|  | ffd80722b8 | ||
|  | 6bd5bb3dda | ||
|  | 83dec3c1d6 | ||
|  | 82f2a83eec | ||
|  | 5194af9d91 | ||
|  | a4c76d2fb9 | ||
|  | 57a35075fa | ||
|  | fb69a60b45 | ||
|  | 2625381e5b | ||
|  | 1c048320a6 | ||
|  | c5c25cee7f | ||
|  | dee8177a67 | ||
|  | abbe040351 | ||
|  | 29a0f849f1 | ||
|  | 7e524f46c6 | ||
|  | 1146e99de2 | ||
|  | 6740929d41 | ||
|  | 831788c1c9 | ||
|  | 7e9d4520af | ||
|  | c4317e6e6b | ||
|  | e4e3debce0 | ||
|  | a5b7431070 | ||
|  | 054808f59d | ||
|  | 0b313d627e | ||
|  | 9813b9db90 | ||
|  | 9a4e024abb | ||
|  | 04a669157f | ||
|  | a364c1512d | ||
|  | 0451e6f0a6 | ||
|  | b7f87d9e82 | ||
|  | e2713fb57a | ||
|  | c8eff78d34 | ||
|  | 04ca5793fa | ||
|  | 83d00ee9c7 | ||
|  | bf56ed2540 | ||
|  | e75aba14b4 | ||
|  | 5d2d2d416f | ||
|  | 62799bfc9d | ||
|  | df8fbc3c03 | ||
|  | 604de81ab8 | ||
|  | ed14b09567 | ||
|  | 800758815c | ||
|  | 058b74bd63 | ||
|  | 02a52a4e09 | ||
|  | 74ddc93f7f | ||
|  | eb8af0c81b | ||
|  | bd49274808 | ||
|  | 8b1547c589 | ||
|  | c093f83848 | ||
|  | c0b28c38c5 | ||
|  | 4621a0898f | ||
|  | 6f02e1035f | ||
|  | d4ae9237a6 | ||
|  | 914eb05a60 | ||
|  | 4da17227c1 | ||
|  | 20014cab29 | ||
|  | 9d62361c8a | ||
|  | 260992b7bf | ||
|  | b9cd429551 | ||
|  | 2d18a75ad7 | ||
|  | 0cfc501f83 | ||
|  | 44b19153f1 | ||
|  | 433b87b9df | ||
|  | f9464bcd6c | ||
|  | f5c5ec202a | ||
|  | 4b64a70830 | ||
|  | 4c8f7e298e | ||
|  | 2d539be214 | ||
|  | c35d5814b4 | ||
|  | 7d19ad401b | ||
|  | 985577ce79 | ||
|  | 24e20101d5 | ||
|  | 76c884eb9f | ||
|  | 7041dbab27 | ||
|  | 661051fde4 | ||
|  | 36cba5ce18 | ||
|  | 4753f30c53 | ||
|  | d719e240d2 | ||
|  | e35faee278 | ||
|  | fd3417a09a | ||
|  | 1719709648 | ||
|  | d37aa3378e | ||
|  | f017d32860 | ||
|  | 7b23edcb29 | ||
|  | e48c4b4e84 | ||
|  | aeca44c7aa | ||
|  | af6ae8e419 | ||
|  | 5cf88ba3b7 | ||
|  | f901ba5591 | ||
|  | 7deea96bc3 | ||
|  | 48dfb9bd08 | ||
|  | 85372559fa | ||
|  | 98972b80ef | ||
|  | d950244232 | ||
|  | fd898829c3 | ||
|  | b0158628bb | ||
|  | 0f69a7b391 | ||
|  | 72773117e5 | ||
|  | 06806f5a6e | ||
|  | a01c785ec8 | ||
|  | 502e206371 | ||
|  | 8fba1bc6a9 | ||
|  | f43803d6d4 | ||
|  | 338cba6350 | ||
|  | 2a15066062 | ||
|  | add86bc566 | ||
|  | e9b4eaaeb9 | ||
|  | 07605051f5 | ||
|  | 998356484b | ||
|  | e97617ad60 | ||
|  | 9685c3afa8 | ||
|  | c209b9a72f | ||
|  | 4999b769ba | ||
|  | d8b5ba2161 | ||
|  | 6f4a4a91cf | ||
|  | 0049f0d72e | ||
|  | 4ea66fc0fd | ||
|  | 8426620572 | ||
|  | 76aece0a3f | ||
|  | 508e7f77a0 | ||
|  | d250a829cb | ||
|  | 2fada0c31c | ||
|  | e6ad08733d | ||
|  | a8d83b5e1c | ||
|  | 9392b74cbc | ||
|  | e09624efd0 | ||
|  | d4d7429de4 | ||
|  | b97cef86a3 | ||
|  | 70615a172b | ||
|  | d399ca90d3 | ||
|  | bbc9695075 | ||
|  | c8fceeb75b | ||
|  | 036cb4556e | ||
|  | e7b06a0b06 | ||
|  | c0067113e9 | ||
|  | ce4349a188 | ||
|  | 224085dfca | ||
|  | 9b3262a5fe | ||
|  | 86856b6d54 | ||
|  | d5bf08329e | ||
|  | 60efce8404 | ||
|  | 83164f456a | ||
|  | c0141bcfee | ||
|  | 8dfe9ef1cf | ||
|  | 73d713b670 | ||
|  | db6c3573c1 | ||
|  | c8cbdaef8a | ||
|  | 2c7243b87d | ||
|  | 46515dd5d3 | ||
|  | 7eb799adc6 | ||
|  | c85b61bbd0 | ||
|  | 045ff8b789 | ||
|  | 7b7f197439 | ||
|  | 9e1c462836 | ||
|  | e97e8309cb | 
							
								
								
									
										31
									
								
								.github/issue_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.github/issue_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | <!--- Provide a general summary of the issue in the Title above --> | ||||||
|  | <!--- https://guides.github.com/features/mastering-markdown/#examples --> | ||||||
|  |  | ||||||
|  | ## Expected Behavior | ||||||
|  | <!--- If you're describing a bug, tell us what should happen --> | ||||||
|  | <!--- If you're suggesting a change/improvement, tell us how it should work --> | ||||||
|  |  | ||||||
|  | ## Current Behavior | ||||||
|  | <!--- If describing a bug, tell us what happens instead of the expected behavior --> | ||||||
|  | <!--- If suggesting a change/improvement, explain the difference from current behavior --> | ||||||
|  |  | ||||||
|  | ## Possible Solution | ||||||
|  | <!--- Not obligatory, but suggest a fix/reason for the bug, --> | ||||||
|  | <!--- or ideas how to implement the addition or change --> | ||||||
|  |  | ||||||
|  | ## Steps to Reproduce (for bugs) | ||||||
|  | <!--- Provide a link to a live example, or an unambiguous set of steps to --> | ||||||
|  | <!--- reproduce this bug. Include code to reproduce, if relevant, or attach screenshots --> | ||||||
|  | 1.  | ||||||
|  | 2.  | ||||||
|  | 3.  | ||||||
|  | 4.  | ||||||
|  |  | ||||||
|  | ## Context | ||||||
|  | <!--- How has this issue affected you? What are you trying to accomplish? --> | ||||||
|  | <!--- Providing context helps us come up with a solution that is most useful in the real world --> | ||||||
|  |  | ||||||
|  | ## Your Environment | ||||||
|  | <!--- Include as many relevant details about the environment you experienced the bug in --> | ||||||
|  | * SNMP::Info version used:  | ||||||
|  | * Netdisco version (if used):  | ||||||
							
								
								
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +1,12 @@ | |||||||
| *.db | *.swp | ||||||
| SNMP | *.pid | ||||||
| *.komodo* | test.pl | ||||||
| blib/ |  | ||||||
| META.* |  | ||||||
| MYMETA.* | MYMETA.* | ||||||
| Makefile | *.tar.gz | ||||||
| Makefile.old | MANIFEST.* | ||||||
| pm_to_blib | *.komodo* | ||||||
|  | Makefile* | ||||||
|  | Build | ||||||
|  | _build | ||||||
|  | blib | ||||||
|  | cover_db | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | language: perl | ||||||
|  | addons: | ||||||
|  |   apt: | ||||||
|  |     packages: | ||||||
|  |       - jq | ||||||
|  |       - libsnmp-dev | ||||||
|  | branches: | ||||||
|  |   only: | ||||||
|  |     - /^3\.\d{2}$/ | ||||||
|  |     - 'master' | ||||||
|  | before_install: | ||||||
|  |   - mkdir ~/netdisco-mibs | ||||||
|  |   - cd ~/netdisco-mibs | ||||||
|  | install: | ||||||
|  |   - curl -sL https://github.com/netdisco/netdisco-mibs/releases/download/4.010/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' | ||||||
							
								
								
									
										51
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | 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', | ||||||
|  |     'NetAddr::IP' => '4.068', | ||||||
|  |   }, | ||||||
|  |   recommends => { | ||||||
|  |     'PPI' => '0', | ||||||
|  |     'Class::ISA' => '0', | ||||||
|  |     'Module::Info' => '0', | ||||||
|  |     'Module::Load' => '0', | ||||||
|  |     'File::Slurp' => '0', | ||||||
|  |   }, | ||||||
|  |   test_requires => { | ||||||
|  |     'Test::More' => '0.88', | ||||||
|  |     'Test::Distribution' => '0', | ||||||
|  |     'Test::Class::Most'  => '0', | ||||||
|  |     'Test::MockObject::Extends' => '0', | ||||||
|  |     'File::Find' => '0', | ||||||
|  |     'Path::Class' => '0', | ||||||
|  |     'File::Slurper' => '0', | ||||||
|  |     'Test::Exception' => '0.43', | ||||||
|  |     'Class::Inspector' => '0', | ||||||
|  |   }, | ||||||
|  |   # script_files => [ | ||||||
|  |   # ], | ||||||
|  |   # share_dir => 'share', | ||||||
|  |   meta_merge => { | ||||||
|  |     resources => { | ||||||
|  |       homepage => 'http://netdisco.org/', | ||||||
|  |       bugtracker => 'https://github.com/netdisco/snmp-info/issues', | ||||||
|  |       repository => 'https://github.com/netdisco/snmp-info', | ||||||
|  |       MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users', | ||||||
|  |       IRC => 'irc://irc.freenode.org/#netdisco', | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | )->create_build_script; | ||||||
| @@ -1,18 +1,470 @@ | |||||||
| SNMP::Info - Friendly OO-style interface to Network devices using SNMP. | Version 3.61 (2018-05-09) | ||||||
| 
 | 
 | ||||||
| version 3.22 (2014-12-02) |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * #255 IPv6 support - Set the transport-specifier if given an IPv6 address | ||||||
|  |   * #195 IP address table - IPv4 Address Table will use the | ||||||
|  |      IP-MIB::ipAddressTable if the deprecated IP-MIB::ipAddrTable doesn't | ||||||
|  |      return results | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * #261 EIGRP Peer Neighbor Formatting / Munge | ||||||
|  |   * #252 Unpack binary MAC if present in cdp_port | ||||||
|  |   * Fix SNMPv1 cdp_run check | ||||||
|  | 
 | ||||||
|  | Version 3.60 (2018-05-06) | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * #263 detect Aerohive ap250 & ap230 models (inphobia) | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * #140 LLDP fixes - treat remote port type of 'local' as an interface name if | ||||||
|  |     the remote port id doesn't look like an index | ||||||
|  |   * Fix potential issue in enumeration of LLDP reported system capabilities | ||||||
|  |     supported by the remote system due to the 'lldpRemSysCapSupported' leaf | ||||||
|  |     name being defined in multiple MIBs | ||||||
|  | 
 | ||||||
|  | Version 3.59 (2018-05-01) | ||||||
|  | 
 | ||||||
|  |   [NEW FEATURES] | ||||||
|  | 
 | ||||||
|  |   * #214 SNMP::Info Device models Genua, ATMedia, Liebert | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * Capture base MAC in L3::Huawei | ||||||
|  |   * Change _lldp_addr_index to a method so it can be properly overridden in | ||||||
|  |     subclasses | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * Capture fan ans power supply status in L3::Huawei when description is | ||||||
|  |     not available | ||||||
|  | 
 | ||||||
|  | Version 3.58 (2018-04-29) | ||||||
|  | 
 | ||||||
|  |   [NEW FEATURES] | ||||||
|  | 
 | ||||||
|  |   * #202 Support for Aerohive access points | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * #220 Alcatel-Lucent / Nokia SR 7750 missing port information. Add duplex, | ||||||
|  |     fan, and power supply status, as well as, module inventory to L3::Timetra | ||||||
|  |   * Add fan and power supply status to L3::Huawei | ||||||
|  |   * Override ifMTU with max frame size when applicable in L3::Huawei | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * Correct POE power module to port mapping in L3::Huawei | ||||||
|  | 
 | ||||||
|  | Version 3.57 (2018-04-26) | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * #145 Patch for Huawei (robwwd) | ||||||
|  |   * #228 Huawei aggregate link support | ||||||
|  |   * POE and duplex admin support added to L3::Huawei | ||||||
|  |   * Significant performance improvement validating AUTOLOAD methods | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * IEEE802dot3ad portlist is indexed with a dot1dBasePort, cross reference | ||||||
|  |     with dot1dBasePortIfIndex | ||||||
|  |   * Fix for macsuck in Cisco classes introduced in 3.55 caused by inheritance | ||||||
|  |     issue in CiscoStack | ||||||
|  | 
 | ||||||
|  | Version 3.56 (2018-04-22) | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * Fix table methods when defined as an OID which will not completely | ||||||
|  |     translate to a fully qualified textual leaf  | ||||||
|  | 
 | ||||||
|  | Version 3.55 (2018-04-19) | ||||||
|  | 
 | ||||||
|  |   [NEW FEATURES] | ||||||
|  |   * #260 Oneaccess (robwwd) | ||||||
|  |   * #259 Add ERX (Old Juniper E-Series JunOSe) Support (robwwd) | ||||||
|  |   * #258 Add support for Arbor devices (robwwd) | ||||||
|  |   * #253 Nexans switch support (paecker) | ||||||
|  |   * #142 Sixnet Switch Support | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * #117 Recognition for HP Blade switches (J R Binks) | ||||||
|  |   * #196 Support for powerconnect 8164F | ||||||
|  |   * Refactor Layer3::Dell for better support of newer models | ||||||
|  |   * Increase capture of i_vlan on router interfaces in L3::Cisco | ||||||
|  |   * Factor out logic to determine serial number from ENTITY-MIB in Layer2 and | ||||||
|  |     Layer3 to new method entity_derived_serial in Entity class and added new | ||||||
|  |     method entity_derived_os_ver in Entity class to determine OS version | ||||||
|  |     in a similar manner | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * #67 Juniper EX4300 Missing/Wrong information | ||||||
|  |   * #61 ZyXEL (X)GS1900 family MIB - Fix loop in layers method | ||||||
|  |   * Fix ISA in AMAP and EDP classes | ||||||
|  |   * Add missing MIB in L2::Trapeze, L2::NWSS2300, and L3::Dell | ||||||
|  |   * Fix gigabit logic in i_duplex_admin() of CiscoStack | ||||||
|  |   * Prevent potential undefined warnings in i_speed_admin() of L2::C2900 and | ||||||
|  |     ports() of L3::C3550 | ||||||
|  |   * Correct validation and IID/key used in mau_set_i_speed_admin() and | ||||||
|  |     mau_set_i_duplex_admin() of MAU | ||||||
|  |   * Correct typo in MIB leaf names in L3::Aironet  | ||||||
|  |   * Don't use MIB leafs that are not-accessible according to MIB | ||||||
|  |     NOTE: Fixing this logic now results in methods on MIB leafs specified as | ||||||
|  |     not-accessible failing validation in _validate_autoload_method() | ||||||
|  | 
 | ||||||
|  | Version 3.54 (2018-04-01) | ||||||
|  | 
 | ||||||
|  |   [NEW FEATURES] | ||||||
|  | 
 | ||||||
|  |   * #141 Avocent ACS files for correct discovery in Netdisco | ||||||
|  |   * Add support for Avocent ACS 5K/6K/8K terminal servers in Layer1::Cyclades | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * #215 Nokia/Alcatel-Lucent 7705 LLDP | ||||||
|  |   * #220 Alcatel-Lucent / Nokia SR 7750 missing neighbors | ||||||
|  |   * Improve Layer3::Timetra model detection | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   * Fix logic in Layer1::Asante i_up() method | ||||||
|  |   * Fix MIB leaf typo in IPv6 | ||||||
|  |   * Don't use MIB leafs that are not-accessible according to MIB | ||||||
|  |   * Fix logic for determining if MIB leaf supports set operations | ||||||
|  |     NOTE: Fixing this logic now results in methods starting with set_ on MIB | ||||||
|  |     leafs without Write or Create access failing validation in | ||||||
|  |     _validate_autoload_method() | ||||||
|  | 
 | ||||||
|  | Version 3.53 (2018-03-22) | ||||||
|  | 
 | ||||||
|  |   [NEW FEATURES] | ||||||
|  | 
 | ||||||
|  |   * #12 add Cisco PortFast support via CiscoStpExtensions::i_faststart_enabled | ||||||
|  | 
 | ||||||
|  |   [ENHANCEMENTS] | ||||||
|  | 
 | ||||||
|  |   * Report serial/version on Netgear FSM (paecker) | ||||||
|  |   * Add test harness and expand developer test coverage | ||||||
|  |   * Add back the base (RFC) MIBs for when net-snmp does not have them builtin | ||||||
|  | 
 | ||||||
|  |   [BUG FIXES] | ||||||
|  | 
 | ||||||
|  |   *  Fix AUTOLOAD / can() bug that could result in DESTROY being redefined and | ||||||
|  |      dynamic methods not being added to the symbol table. | ||||||
|  | 
 | ||||||
|  | version 3.52 (2018-03-19) | ||||||
|  | 
 | ||||||
|  |   [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] |    [ENHANCEMENTS] | ||||||
| 
 | 
 | ||||||
|     * Include LLDP support in base Layer2 and Layer3 classes. Due to the |     * Support RSTP and ieee8021d STP operating modes in RapidCity | ||||||
|       widespread adoption of LLDP, this should improve mapping networks | 
 | ||||||
|       when devices aren't supported in a more specific class. |    [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 |     * Support obtaining FDB in Avaya SPBM edge deployments in L2::Baystack | ||||||
|       NOTE: This requires a RAPID-CITY MIB with the rcBridgeSpbmMacTable |       NOTE: This requires a RAPID-CITY MIB with the rcBridgeSpbmMacTable | ||||||
|     * Support for Fortinet devices in new class L3::Fortinet |     * Support for Fortinet devices in new class L3::Fortinet | ||||||
| 
 | 
 | ||||||
|    [ENHANCEMENTS] |    [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 |     * No longer ignore interfaces based on name, in base L2/L3/L7 device | ||||||
|       classes. For several device classes SNMP::Info will now return tunnel |       classes. For several device classes SNMP::Info will now return tunnel | ||||||
|       interfaces and/or loopbacks, if present. |       interfaces and/or loopbacks, if present. | ||||||
| @@ -21,6 +473,9 @@ version 3.22 (2014-12-02) | |||||||
|     * New method i_vlan_membership_untagged() for VLANs transmitted as |     * New method i_vlan_membership_untagged() for VLANs transmitted as | ||||||
|       untagged frames. |       untagged frames. | ||||||
|     * Capture Aruba AP hardware and software version when available |     * 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] |    [BUG FIXES] | ||||||
| 
 | 
 | ||||||
| @@ -575,7 +1030,7 @@ version 1.05 (11/25/07) - CVS only. No official release | |||||||
|     + Added support for Cisco (Airespace) wireless controllers as new class |     + Added support for Cisco (Airespace) wireless controllers as new class | ||||||
|       L2::Airespace |       L2::Airespace | ||||||
|     + Added support for Nortel Ethernet Routing Switch 2500 series and |     + Added support for Nortel Ethernet Routing Switch 2500 series and | ||||||
|       Business Ethernet Switches (David Siebörger) |       Business Ethernet Switches (David Siebörger) | ||||||
|     + Update of L3::Foundry to support all Foundry devices including newer |     + Update of L3::Foundry to support all Foundry devices including newer | ||||||
|       switches.  Depreciate L2::Foundry. |       switches.  Depreciate L2::Foundry. | ||||||
|     + Added generic device type detection using IANA assigned enterpise |     + Added generic device type detection using IANA assigned enterpise | ||||||
							
								
								
									
										1045
									
								
								DeviceMatrix.txt
									
									
									
									
									
								
							
							
						
						
									
										1045
									
								
								DeviceMatrix.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,177 +0,0 @@ | |||||||
| # SNMP::Info::Layer2::Ubiquiti |  | ||||||
| # $Id$ |  | ||||||
| # |  | ||||||
|  |  | ||||||
| package SNMP::Info::Layer2::Ubiquiti; |  | ||||||
|  |  | ||||||
| use strict; |  | ||||||
| use Exporter; |  | ||||||
| use SNMP::Info::IEEE802dot11; |  | ||||||
| use SNMP::Info::Layer2; |  | ||||||
|  |  | ||||||
| @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.22'; |  | ||||||
|  |  | ||||||
| %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 { |  | ||||||
|     return 'Ubiquiti'; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| 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; |  | ||||||
|         if ( $ver =~ /([\d\.]+)/ ) { |  | ||||||
|             return $1; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub vendor { |  | ||||||
|     return 'Ubiquiti Networks, Inc.'; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub model { |  | ||||||
|     my $dot11 = shift; |  | ||||||
|  |  | ||||||
|     my $names = $dot11->dot11_prod_name(); |  | ||||||
|  |  | ||||||
|     foreach my $iid ( keys %$names ) { |  | ||||||
|         my $prod = $names->{$iid}; |  | ||||||
|         next unless defined $prod; |  | ||||||
|         return $prod; |  | ||||||
|     } |  | ||||||
|     return; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 1; |  | ||||||
| __END__ |  | ||||||
|  |  | ||||||
| =head1 NAME |  | ||||||
|  |  | ||||||
| SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points |  | ||||||
|  |  | ||||||
| =head1 AUTHOR |  | ||||||
|  |  | ||||||
| Max Kosmach |  | ||||||
|  |  | ||||||
| =head1 SYNOPSIS |  | ||||||
|  |  | ||||||
|  # Let SNMP::Info determine the correct subclass for you.  |  | ||||||
|  my $ubnt = new SNMP::Info( |  | ||||||
|                           AutoSpecify => 1, |  | ||||||
|                           Debug       => 1, |  | ||||||
|                           DestHost    => 'myswitch', |  | ||||||
|                           Community   => 'public', |  | ||||||
|                           Version     => 2 |  | ||||||
|                         )  |  | ||||||
|     or die "Can't connect to DestHost.\n"; |  | ||||||
|  |  | ||||||
|  my $class = $ubnt->class(); |  | ||||||
|  print "SNMP::Info determined this device to fall under subclass : $class\n"; |  | ||||||
|  |  | ||||||
| =head1 DESCRIPTION |  | ||||||
|  |  | ||||||
| Provides abstraction to the configuration information obtainable from |  | ||||||
| Ubiquiti Access Point through SNMP. |  | ||||||
|  |  | ||||||
| For speed or debugging purposes you can call the subclass directly, but not |  | ||||||
| after determining a more specific class using the method above.  |  | ||||||
|  |  | ||||||
|  my $ubnt = new SNMP::Info::Layer2::Ubiquiti(...); |  | ||||||
|  |  | ||||||
| =head2 Inherited Classes |  | ||||||
|  |  | ||||||
| =over |  | ||||||
|  |  | ||||||
| =item SNMP::Info::Layer2 |  | ||||||
|  |  | ||||||
| =item SNMP::Info::IEEE802dot11 |  | ||||||
|  |  | ||||||
| =back |  | ||||||
|  |  | ||||||
| =head2 Required MIBs |  | ||||||
|  |  | ||||||
| None. |  | ||||||
|  |  | ||||||
| =head2 Inherited MIBs |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements. |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::IEEE802dot11/"Required MIBs"> for its MIB requirements. |  | ||||||
|  |  | ||||||
| =head1 GLOBALS |  | ||||||
|  |  | ||||||
| These are methods that return scalar value from SNMP |  | ||||||
|  |  | ||||||
| =over |  | ||||||
|  |  | ||||||
| =item $ubnt->vendor() |  | ||||||
|  |  | ||||||
| Returns 'Ubiquiti Networks, Inc.' |  | ||||||
|  |  | ||||||
| =item $ubnt->model() |  | ||||||
|  |  | ||||||
| Returns the model extracted from C<dot11manufacturerProductName>. |  | ||||||
|  |  | ||||||
| =item $ubnt->os() |  | ||||||
|  |  | ||||||
| Returns 'Ubiquiti' |  | ||||||
|  |  | ||||||
| =item $ubnt->os_ver() |  | ||||||
|  |  | ||||||
| Returns the software version extracted from C<dot11manufacturerProductVersion>. |  | ||||||
|  |  | ||||||
| =back |  | ||||||
|  |  | ||||||
| =head2 Global Methods imported from SNMP::Info::Layer2 |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::Layer2/"GLOBALS"> for details. |  | ||||||
|  |  | ||||||
| =head2 Global Methods imported from SNMP::Info::IEEE802dot11 |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::IEEE802dot11/"GLOBALS"> for details. |  | ||||||
|  |  | ||||||
| =head1 TABLE METHODS |  | ||||||
|  |  | ||||||
| These are methods that return tables of information in the form of a reference |  | ||||||
| to a hash. |  | ||||||
|  |  | ||||||
| =head2 Table Methods imported from SNMP::Info::Layer2 |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::Layer2/"TABLE METHODS"> for details. |  | ||||||
|  |  | ||||||
| =head2 Table Methods imported from SNMP::Info::IEEE802dot11 |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::IEEE802dot11/"TABLE METHODS"> for details. |  | ||||||
|  |  | ||||||
| =cut |  | ||||||
| @@ -1,194 +0,0 @@ | |||||||
| # SNMP::Info::Layer3::Timetra |  | ||||||
| # $Id$ |  | ||||||
| # |  | ||||||
| # Copyright (c) 2008 Bill Fenner |  | ||||||
| # |  | ||||||
| # 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::Timetra; |  | ||||||
|  |  | ||||||
| use strict; |  | ||||||
|  |  | ||||||
| use Exporter; |  | ||||||
| use SNMP::Info::Layer3; |  | ||||||
|  |  | ||||||
| @SNMP::Info::Layer3::Timetra::ISA = qw/SNMP::Info::Layer3 |  | ||||||
|     Exporter/; |  | ||||||
| @SNMP::Info::Layer3::Timetra::EXPORT_OK = qw//; |  | ||||||
|  |  | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; |  | ||||||
|  |  | ||||||
| $VERSION = '3.22'; |  | ||||||
|  |  | ||||||
| %MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', ); |  | ||||||
|  |  | ||||||
| %GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, ); |  | ||||||
|  |  | ||||||
| %FUNCS = ( %SNMP::Info::Layer3::FUNCS, ); |  | ||||||
|  |  | ||||||
| %MUNGE = ( %SNMP::Info::Layer3::MUNGE, ); |  | ||||||
|  |  | ||||||
| sub model { |  | ||||||
|     my $timetra = shift; |  | ||||||
|     my $id      = $timetra->id(); |  | ||||||
|     my $model   = &SNMP::translateObj($id); |  | ||||||
|  |  | ||||||
|     return $id unless defined $model; |  | ||||||
|  |  | ||||||
|     $model =~ s/^tmnxModel//; |  | ||||||
|  |  | ||||||
|     return $model; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub os { |  | ||||||
|     return 'TiMOS'; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub vendor { |  | ||||||
|     return 'alcatel-lucent'; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub os_ver { |  | ||||||
|     my $timetra = shift; |  | ||||||
|  |  | ||||||
|     my $descr = $timetra->description(); |  | ||||||
|     if ( $descr =~ m/^TiMOS-(\S+)/ ) { |  | ||||||
|         return $1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     # No clue what this will try but hey |  | ||||||
|     return $timetra->SUPER::os_ver(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # The interface description contains the SFP type, so |  | ||||||
| # to avoid losing historical information through a configuration change |  | ||||||
| # we use interface name instead. |  | ||||||
| sub interfaces { |  | ||||||
|     my $alu     = shift; |  | ||||||
|     my $partial = shift; |  | ||||||
|  |  | ||||||
|     return $alu->orig_i_name($partial); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| 1; |  | ||||||
| __END__ |  | ||||||
|  |  | ||||||
| =head1 NAME |  | ||||||
|  |  | ||||||
| SNMP::Info::Layer3::Timetra - SNMP Interface to Alcatel-Lucent SR |  | ||||||
|  |  | ||||||
| =head1 AUTHOR |  | ||||||
|  |  | ||||||
| Bill Fenner |  | ||||||
|  |  | ||||||
| =head1 SYNOPSIS |  | ||||||
|  |  | ||||||
|  # Let SNMP::Info determine the correct subclass for you.  |  | ||||||
|  my $alu = 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      = $alu->class(); |  | ||||||
|  print "SNMP::Info determined this device to fall under subclass : $class\n"; |  | ||||||
|  |  | ||||||
| =head1 DESCRIPTION |  | ||||||
|  |  | ||||||
| Subclass for Alcatel-Lucent Service Routers |  | ||||||
|  |  | ||||||
| =head2 Inherited Classes |  | ||||||
|  |  | ||||||
| =over |  | ||||||
|  |  | ||||||
| =item SNMP::Info::Layer3 |  | ||||||
|  |  | ||||||
| =back |  | ||||||
|  |  | ||||||
| =head2 Required MIBs |  | ||||||
|  |  | ||||||
| =over |  | ||||||
|  |  | ||||||
| =item F<TIMETRA-GLOBAL-MIB> |  | ||||||
|  |  | ||||||
| =item Inherited Classes' MIBs |  | ||||||
|  |  | ||||||
| See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements. |  | ||||||
|  |  | ||||||
| =back |  | ||||||
|  |  | ||||||
| =head1 GLOBALS |  | ||||||
|  |  | ||||||
| These are methods that return scalar value from SNMP |  | ||||||
|  |  | ||||||
| =over |  | ||||||
|  |  | ||||||
| =item $alu->vendor() |  | ||||||
|  |  | ||||||
| Returns 'alcatel-lucent' |  | ||||||
|  |  | ||||||
| =item $alu->os() |  | ||||||
|  |  | ||||||
| Returns 'TiMOS' |  | ||||||
|  |  | ||||||
| =item $alu->os_ver() |  | ||||||
|  |  | ||||||
| Grabs the version string from C<sysDescr>. |  | ||||||
|  |  | ||||||
| =item $alu->model() |  | ||||||
|  |  | ||||||
| Tries to reference $alu->id() to one of the product MIBs listed above |  | ||||||
|  |  | ||||||
| Removes 'tmnxModel' from the name for readability. |  | ||||||
|  |  | ||||||
| =back |  | ||||||
|  |  | ||||||
| =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 |  | ||||||
| to a hash. |  | ||||||
|  |  | ||||||
| =over |  | ||||||
|  |  | ||||||
| =item $alu->interfaces() |  | ||||||
|  |  | ||||||
| Returns C<ifName>, since the default Layer3 C<ifDescr> varies based |  | ||||||
| upon the transceiver inserted. |  | ||||||
|  |  | ||||||
| =back |  | ||||||
|  |  | ||||||
| =head2 Table Methods imported from SNMP::Info::Layer3 |  | ||||||
|  |  | ||||||
| See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details. |  | ||||||
|  |  | ||||||
| =cut |  | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| All code from version 0.7 on | All code from version 0.7 on | ||||||
| Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers | Copyright (c) 2003-2016 Max Baker and SNMP::Info Developers | ||||||
| All rights reserved. | All rights reserved. | ||||||
| 
 | 
 | ||||||
| Original Code | Original Code | ||||||
							
								
								
									
										403
									
								
								MANIFEST
									
									
									
									
									
								
							
							
						
						
									
										403
									
								
								MANIFEST
									
									
									
									
									
								
							| @@ -1,125 +1,282 @@ | |||||||
| ChangeLog | .perltidyrc | ||||||
| COPYRIGHT | Build.PL | ||||||
| DEVELOP | Changes | ||||||
| DeviceMatrix.txt | contrib/DEVELOP | ||||||
| Info.pm | contrib/util/docmunge | ||||||
| Info/AdslLine.pm | contrib/util/make_dev_matrix.pl | ||||||
| Info/Aggregate.pm | contrib/util/make_snmpdata.pl | ||||||
| Info/Airespace.pm | contrib/util/push_ver | ||||||
| Info/AMAP.pm | contrib/util/run_test | ||||||
| Info/Bridge.pm | contrib/util/test_class.pl | ||||||
| Info/CDP.pm | contrib/util/test_class_mocked.pl | ||||||
| Info/CiscoAgg.pm | lib/SNMP/Info.pm | ||||||
| Info/CiscoConfig.pm | lib/SNMP/Info/AdslLine.pm | ||||||
| Info/CiscoPortSecurity.pm | lib/SNMP/Info/Aggregate.pm | ||||||
| Info/CiscoPower.pm | lib/SNMP/Info/Airespace.pm | ||||||
| Info/CiscoQOS.pm | lib/SNMP/Info/AMAP.pm | ||||||
| Info/CiscoRTT.pm | lib/SNMP/Info/Bridge.pm | ||||||
| Info/CiscoStack.pm | lib/SNMP/Info/CDP.pm | ||||||
| Info/CiscoStats.pm | lib/SNMP/Info/CiscoAgg.pm | ||||||
| Info/CiscoStpExtensions.pm | lib/SNMP/Info/CiscoConfig.pm | ||||||
| Info/CiscoVTP.pm | lib/SNMP/Info/CiscoPortSecurity.pm | ||||||
| Info/EDP.pm | lib/SNMP/Info/CiscoPower.pm | ||||||
| Info/Entity.pm | lib/SNMP/Info/CiscoQOS.pm | ||||||
| Info/EtherLike.pm | lib/SNMP/Info/CiscoRTT.pm | ||||||
| Info/FDP.pm | lib/SNMP/Info/CiscoStack.pm | ||||||
| Info/IEEE802dot11.pm | lib/SNMP/Info/CiscoStats.pm | ||||||
| Info/IEEE802dot3ad.pm | lib/SNMP/Info/CiscoStpExtensions.pm | ||||||
| Info/IPv6.pm | lib/SNMP/Info/CiscoVTP.pm | ||||||
| Info/Layer1.pm | lib/SNMP/Info/EDP.pm | ||||||
| Info/Layer1/Allied.pm | lib/SNMP/Info/Entity.pm | ||||||
| Info/Layer1/Asante.pm | lib/SNMP/Info/EtherLike.pm | ||||||
| Info/Layer1/Bayhub.pm | lib/SNMP/Info/FDP.pm | ||||||
| Info/Layer1/Cyclades.pm | lib/SNMP/Info/IEEE802dot11.pm | ||||||
| Info/Layer1/S3000.pm | lib/SNMP/Info/IEEE802dot3ad.pm | ||||||
| Info/Layer2.pm | lib/SNMP/Info/IPv6.pm | ||||||
| Info/Layer2/3Com.pm | lib/SNMP/Info/Layer1.pm | ||||||
| Info/Layer2/Airespace.pm | lib/SNMP/Info/Layer1/Allied.pm | ||||||
| Info/Layer2/Aironet.pm | lib/SNMP/Info/Layer1/Asante.pm | ||||||
| Info/Layer2/Allied.pm | lib/SNMP/Info/Layer1/Bayhub.pm | ||||||
| Info/Layer2/Baystack.pm | lib/SNMP/Info/Layer1/Cyclades.pm | ||||||
| Info/Layer2/C1900.pm | lib/SNMP/Info/Layer1/S3000.pm | ||||||
| Info/Layer2/C2900.pm | lib/SNMP/Info/Layer2.pm | ||||||
| Info/Layer2/Catalyst.pm | lib/SNMP/Info/Layer2/3Com.pm | ||||||
| Info/Layer2/Centillion.pm | lib/SNMP/Info/Layer2/Adtran.pm | ||||||
| Info/Layer2/Cisco.pm | lib/SNMP/Info/Layer2/Aerohive.pm | ||||||
| Info/Layer2/CiscoSB.pm | lib/SNMP/Info/Layer2/Airespace.pm | ||||||
| Info/Layer2/HP.pm | lib/SNMP/Info/Layer2/Aironet.pm | ||||||
| Info/Layer2/HP4000.pm | lib/SNMP/Info/Layer2/Allied.pm | ||||||
| Info/Layer2/HPVC.pm | lib/SNMP/Info/Layer2/Atmedia.pm | ||||||
| Info/Layer2/Kentrox.pm | lib/SNMP/Info/Layer2/Baystack.pm | ||||||
| Info/Layer2/N2270.pm | lib/SNMP/Info/Layer2/C1900.pm | ||||||
| Info/Layer2/NAP222x.pm | lib/SNMP/Info/Layer2/C2900.pm | ||||||
| Info/Layer2/Netgear.pm | lib/SNMP/Info/Layer2/Catalyst.pm | ||||||
| Info/Layer2/NWSS2300.pm | lib/SNMP/Info/Layer2/Centillion.pm | ||||||
| Info/Layer2/Orinoco.pm | lib/SNMP/Info/Layer2/Cisco.pm | ||||||
| Info/Layer2/Trapeze.pm | lib/SNMP/Info/Layer2/CiscoSB.pm | ||||||
| Info/Layer2/Ubiquiti.pm | lib/SNMP/Info/Layer2/HP.pm | ||||||
| Info/Layer2/ZyXEL_DSLAM.pm | lib/SNMP/Info/Layer2/HP4000.pm | ||||||
| Info/Layer3.pm | lib/SNMP/Info/Layer2/HPVC.pm | ||||||
| Info/Layer3/Aironet.pm | lib/SNMP/Info/Layer2/Kentrox.pm | ||||||
| Info/Layer3/AlcatelLucent.pm | lib/SNMP/Info/Layer2/N2270.pm | ||||||
| Info/Layer3/AlteonAD.pm | lib/SNMP/Info/Layer2/NAP222x.pm | ||||||
| Info/Layer3/Altiga.pm | lib/SNMP/Info/Layer2/Netgear.pm | ||||||
| Info/Layer3/Arista.pm | lib/SNMP/Info/Layer2/Nexans.pm | ||||||
| Info/Layer3/Aruba.pm | lib/SNMP/Info/Layer2/NWSS2300.pm | ||||||
| Info/Layer3/BayRS.pm | lib/SNMP/Info/Layer2/Orinoco.pm | ||||||
| Info/Layer3/BlueCoatSG.pm | lib/SNMP/Info/Layer2/Sixnet.pm | ||||||
| Info/Layer3/C3550.pm | lib/SNMP/Info/Layer2/Trapeze.pm | ||||||
| Info/Layer3/C4000.pm | lib/SNMP/Info/Layer2/Ubiquiti.pm | ||||||
| Info/Layer3/C6500.pm | lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm | ||||||
| Info/Layer3/Cisco.pm | lib/SNMP/Info/Layer3.pm | ||||||
| Info/Layer3/CiscoASA.pm | lib/SNMP/Info/Layer3/Aironet.pm | ||||||
| Info/Layer3/CiscoFWSM.pm | lib/SNMP/Info/Layer3/AlcatelLucent.pm | ||||||
| Info/Layer3/CiscoSwitch.pm | lib/SNMP/Info/Layer3/AlteonAD.pm | ||||||
| Info/Layer3/Contivity.pm | lib/SNMP/Info/Layer3/Altiga.pm | ||||||
| Info/Layer3/Dell.pm | lib/SNMP/Info/Layer3/Arista.pm | ||||||
| Info/Layer3/Enterasys.pm | lib/SNMP/Info/Layer3/Aruba.pm | ||||||
| Info/Layer3/Extreme.pm | lib/SNMP/Info/Layer3/BayRS.pm | ||||||
| Info/Layer3/F5.pm | lib/SNMP/Info/Layer3/BlueCoatSG.pm | ||||||
| Info/Layer3/Force10.pm | lib/SNMP/Info/Layer3/C3550.pm | ||||||
| Info/Layer3/Fortinet.pm | lib/SNMP/Info/Layer3/C4000.pm | ||||||
| Info/Layer3/Foundry.pm | lib/SNMP/Info/Layer3/C6500.pm | ||||||
| Info/Layer3/H3C.pm | lib/SNMP/Info/Layer3/CheckPoint.pm | ||||||
| Info/Layer3/HP9300.pm | lib/SNMP/Info/Layer3/Cisco.pm | ||||||
| Info/Layer3/IBMGbTor.pm | lib/SNMP/Info/Layer3/CiscoASA.pm | ||||||
| Info/Layer3/Juniper.pm | lib/SNMP/Info/Layer3/CiscoFWSM.pm | ||||||
| Info/Layer3/Lantronix.pm | lib/SNMP/Info/Layer3/CiscoSwitch.pm | ||||||
| Info/Layer3/Microsoft.pm | lib/SNMP/Info/Layer3/Contivity.pm | ||||||
| Info/Layer3/Mikrotik.pm | lib/SNMP/Info/Layer3/Cumulus.pm | ||||||
| Info/Layer3/N1600.pm | lib/SNMP/Info/Layer3/Dell.pm | ||||||
| Info/Layer3/Netscreen.pm | lib/SNMP/Info/Layer3/DLink.pm | ||||||
| Info/Layer3/NetSNMP.pm | lib/SNMP/Info/Layer3/Enterasys.pm | ||||||
| Info/Layer3/Nexus.pm | lib/SNMP/Info/Layer3/ERX.pm | ||||||
| Info/Layer3/PacketFront.pm | lib/SNMP/Info/Layer3/Extreme.pm | ||||||
| Info/Layer3/Passport.pm | lib/SNMP/Info/Layer3/F5.pm | ||||||
| Info/Layer3/Pf.pm | lib/SNMP/Info/Layer3/Force10.pm | ||||||
| Info/Layer3/Pica8.pm | lib/SNMP/Info/Layer3/Fortinet.pm | ||||||
| Info/Layer3/SonicWALL.pm | lib/SNMP/Info/Layer3/Foundry.pm | ||||||
| Info/Layer3/Steelhead.pm | lib/SNMP/Info/Layer3/Genua.pm | ||||||
| Info/Layer3/Sun.pm | lib/SNMP/Info/Layer3/H3C.pm | ||||||
| Info/Layer3/Tasman.pm | lib/SNMP/Info/Layer3/HP9300.pm | ||||||
| Info/Layer3/Timetra.pm | lib/SNMP/Info/Layer3/Huawei.pm | ||||||
| Info/Layer7.pm | lib/SNMP/Info/Layer3/IBMGbTor.pm | ||||||
| Info/Layer7/APC.pm | lib/SNMP/Info/Layer3/Juniper.pm | ||||||
| Info/Layer7/Neoteris.pm | lib/SNMP/Info/Layer3/Lantronix.pm | ||||||
| Info/Layer7/Netscaler.pm | lib/SNMP/Info/Layer3/Microsoft.pm | ||||||
| Info/LLDP.pm | lib/SNMP/Info/Layer3/Mikrotik.pm | ||||||
| Info/MAU.pm | lib/SNMP/Info/Layer3/N1600.pm | ||||||
| Info/MRO.pm | lib/SNMP/Info/Layer3/Netscreen.pm | ||||||
| Info/NortelStack.pm | lib/SNMP/Info/Layer3/NetSNMP.pm | ||||||
| Info/PowerEthernet.pm | lib/SNMP/Info/Layer3/Nexus.pm | ||||||
| Info/RapidCity.pm | lib/SNMP/Info/Layer3/OneAccess.pm | ||||||
| Info/SONMP.pm | lib/SNMP/Info/Layer3/PacketFront.pm | ||||||
| Makefile.PL | lib/SNMP/Info/Layer3/PaloAlto.pm | ||||||
|  | lib/SNMP/Info/Layer3/Passport.pm | ||||||
|  | lib/SNMP/Info/Layer3/Pf.pm | ||||||
|  | lib/SNMP/Info/Layer3/Pica8.pm | ||||||
|  | lib/SNMP/Info/Layer3/SonicWALL.pm | ||||||
|  | lib/SNMP/Info/Layer3/Steelhead.pm | ||||||
|  | lib/SNMP/Info/Layer3/Sun.pm | ||||||
|  | lib/SNMP/Info/Layer3/Tasman.pm | ||||||
|  | lib/SNMP/Info/Layer3/Timetra.pm | ||||||
|  | lib/SNMP/Info/Layer3/VMware.pm | ||||||
|  | lib/SNMP/Info/Layer3/VyOS.pm | ||||||
|  | lib/SNMP/Info/Layer7.pm | ||||||
|  | lib/SNMP/Info/Layer7/APC.pm | ||||||
|  | lib/SNMP/Info/Layer7/Arbor.pm | ||||||
|  | lib/SNMP/Info/Layer7/CiscoIPS.pm | ||||||
|  | lib/SNMP/Info/Layer7/Gigamon.pm | ||||||
|  | lib/SNMP/Info/Layer7/Liebert.pm | ||||||
|  | lib/SNMP/Info/Layer7/Neoteris.pm | ||||||
|  | lib/SNMP/Info/Layer7/Netscaler.pm | ||||||
|  | lib/SNMP/Info/LLDP.pm | ||||||
|  | lib/SNMP/Info/MAU.pm | ||||||
|  | lib/SNMP/Info/MRO.pm | ||||||
|  | lib/SNMP/Info/NortelStack.pm | ||||||
|  | lib/SNMP/Info/PowerEthernet.pm | ||||||
|  | lib/SNMP/Info/RapidCity.pm | ||||||
|  | lib/SNMP/Info/SONMP.pm | ||||||
|  | LICENSE | ||||||
| MANIFEST			This list of files | MANIFEST			This list of files | ||||||
|  | META.json | ||||||
|  | META.yml | ||||||
| README | README | ||||||
| t/00-load.t | t/00_load.t | ||||||
| t/docmunge | xt/.perltidyrc | ||||||
| t/make_dev_matrix.pl | xt/00_local_distribution.t | ||||||
| t/prereq.t | xt/00_local_docininfo.t | ||||||
| t/push_ver | xt/00_local_perlcritic.t | ||||||
| t/run_test | xt/00_local_pod-coverage.t | ||||||
| t/test_class.pl | xt/00_local_pod.t | ||||||
| t/util/make_snmpdata.pl | xt/00_local_prereq.t | ||||||
| t/util/test_class_mocked.pl | xt/00_local_spelling.t | ||||||
|  | xt/00_local_versionsync.t | ||||||
|  | xt/10_remote_snmplabs.t | ||||||
|  | xt/20_run.t | ||||||
|  | xt/lib/My/Test/Class.pm | ||||||
|  | xt/lib/Test/SNMP/Info.pm | ||||||
|  | xt/lib/Test/SNMP/Info/AdslLine.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Aggregate.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Airespace.pm | ||||||
|  | xt/lib/Test/SNMP/Info/AMAP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Bridge.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CDP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoAgg.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoConfig.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoPortSecurity.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoPower.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoQOS.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoRTT.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoStats.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoStpExtensions.pm | ||||||
|  | xt/lib/Test/SNMP/Info/CiscoVTP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/EDP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Entity.pm | ||||||
|  | xt/lib/Test/SNMP/Info/EtherLike.pm | ||||||
|  | xt/lib/Test/SNMP/Info/FDP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/IEEE802dot11.pm | ||||||
|  | xt/lib/Test/SNMP/Info/IEEE802dot3ad.pm | ||||||
|  | xt/lib/Test/SNMP/Info/IPv6.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer1.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer1/Allied.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer1/Asante.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer1/Bayhub.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer1/Cyclades.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer1/S3000.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/3Com.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Aerohive.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Airespace.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Aironet.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Allied.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Atmedia.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Baystack.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/C1900.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/C2900.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Catalyst.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Centillion.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Cisco.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/CiscoSB.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/HP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/HP4000.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/HPVC.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Kentrox.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/N2270.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/NAP222x.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Netgear.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Nexans.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Aironet.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/AlcatelLucent.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/AlteonAD.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Altiga.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Arista.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Aruba.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/BayRS.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/BlueCoatSG.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/C3550.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/C4000.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/C6500.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/CheckPoint.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Cisco.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/CiscoASA.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/CiscoFWSM.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/CiscoSwitch.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Contivity.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Cumulus.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Dell.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/DLink.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Enterasys.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/ERX.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Extreme.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/F5.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Force10.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Fortinet.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Foundry.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Genua.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/H3C.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/HP9300.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Huawei.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/IBMGbTor.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Juniper.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Lantronix.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Microsoft.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Mikrotik.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/N1600.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Netscreen.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/NetSNMP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Nexus.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/OneAccess.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/PacketFront.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/PaloAlto.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Passport.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Pf.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Pica8.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Sun.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Tasman.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/Timetra.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/VMware.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer3/VyOS.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/APC.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/Arbor.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/CiscoIPS.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/Gigamon.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/Liebert.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/Neoteris.pm | ||||||
|  | xt/lib/Test/SNMP/Info/Layer7/Netscaler.pm | ||||||
|  | xt/lib/Test/SNMP/Info/LLDP.pm | ||||||
|  | xt/lib/Test/SNMP/Info/MAU.pm | ||||||
|  | xt/lib/Test/SNMP/Info/NortelStack.pm | ||||||
|  | xt/lib/Test/SNMP/Info/PowerEthernet.pm | ||||||
|  | xt/lib/Test/SNMP/Info/RapidCity.pm | ||||||
|  | xt/lib/Test/SNMP/Info/SONMP.pm | ||||||
|   | |||||||
| @@ -1,28 +1,70 @@ | |||||||
| # Version control files and dirs. | \.bak$ | ||||||
|  | \.pid$ | ||||||
|  | \.swp$ | ||||||
|  |  | ||||||
|  | ^SNMP-Info- | ||||||
|  |  | ||||||
|  | ^MANIFEST\. | ||||||
|  |  | ||||||
|  | # Avoid version control files. | ||||||
| \bRCS\b | \bRCS\b | ||||||
| \bCVS\b | \bCVS\b | ||||||
|  | \bSCCS\b | ||||||
| ,v$ | ,v$ | ||||||
| \B\.svn\b | \B\.svn\b | ||||||
| \B\.git\b | \B\.git\b | ||||||
| .gitignore | \B\.gitignore\b | ||||||
|  | \b_darcs\b | ||||||
|  | \B\.cvsignore$ | ||||||
|  |  | ||||||
| # Makemaker generated files and dirs. | # Avoid VMS specific MakeMaker generated files | ||||||
| ^MANIFEST\. | \bDescrip.MMS$ | ||||||
| ^Makefile$ | \bDESCRIP.MMS$ | ||||||
| ^blib/ | \bdescrip.mms$ | ||||||
| ^MakeMaker-\d |  | ||||||
| pm_to_blib |  | ||||||
| MYMETA.* |  | ||||||
|  |  | ||||||
| # Temp, old and emacs backup files. | # Avoid Makemaker generated and utility files. | ||||||
|  | \bMANIFEST\.bak | ||||||
|  | \bMakefile$ | ||||||
|  | \bblib/ | ||||||
|  | \bMakeMaker-\d | ||||||
|  | \bpm_to_blib\.ts$ | ||||||
|  | \bpm_to_blib$ | ||||||
|  | \bblibdirs\.ts$         # 6.18 through 6.25 generated this | ||||||
|  |  | ||||||
|  | # Avoid Module::Build generated and utility files. | ||||||
|  | \bBuild$ | ||||||
|  | \b_build/ | ||||||
|  | \bBuild.bat$ | ||||||
|  | \bBuild.COM$ | ||||||
|  | \bBUILD.COM$ | ||||||
|  | \bbuild.com$ | ||||||
|  |  | ||||||
|  | # Avoid temp and backup files. | ||||||
| ~$ | ~$ | ||||||
| \.old$ | \.old$ | ||||||
| ^#.*#$ | \#$ | ||||||
| ^\.# | \b\.# | ||||||
|  | \.bak$ | ||||||
|  | \.tmp$ | ||||||
|  | \.# | ||||||
|  | \.rej$ | ||||||
|  |  | ||||||
| # Private Regression Tests | # Avoid OS-specific files/dirs | ||||||
| \d+_local_ | # Mac OSX metadata | ||||||
| \.?perl\w+\.?rc$ | \B\.DS_Store | ||||||
|  | # Mac OSX SMB mount metadata files | ||||||
|  | \B\._ | ||||||
|  |  | ||||||
| # Komodo project file | # Avoid Devel::Cover and Devel::CoverX::Covered files. | ||||||
| \.kpf$ | \bcover_db\b | ||||||
|  | \bcovered\b | ||||||
|  |   | ||||||
|  | # Avoid MYMETA files | ||||||
|  | ^MYMETA\. | ||||||
|  |  | ||||||
|  | .github | ||||||
|  | .travis | ||||||
|  | README.md | ||||||
|  |  | ||||||
|  | # Avoid Komodo project file | ||||||
|  | \.komodoproject$ | ||||||
|   | |||||||
							
								
								
									
										581
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										581
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,581 @@ | |||||||
|  | { | ||||||
|  |    "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", | ||||||
|  |             "NetAddr::IP" : "4.068", | ||||||
|  |             "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.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::AMAP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/AMAP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::AdslLine" : { | ||||||
|  |          "file" : "lib/SNMP/Info/AdslLine.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Aggregate" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Aggregate.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Airespace" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Airespace.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Bridge" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Bridge.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CDP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CDP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoAgg" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoAgg.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoConfig" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoConfig.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoPortSecurity" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoPortSecurity.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoPower" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoPower.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoQOS" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoQOS.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoRTT" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoRTT.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoStack" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoStack.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoStats" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoStats.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoStpExtensions" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoStpExtensions.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::CiscoVTP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/CiscoVTP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::EDP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/EDP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Entity" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Entity.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::EtherLike" : { | ||||||
|  |          "file" : "lib/SNMP/Info/EtherLike.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::FDP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/FDP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::IEEE802dot11" : { | ||||||
|  |          "file" : "lib/SNMP/Info/IEEE802dot11.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::IEEE802dot3ad" : { | ||||||
|  |          "file" : "lib/SNMP/Info/IEEE802dot3ad.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::IPv6" : { | ||||||
|  |          "file" : "lib/SNMP/Info/IPv6.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::LLDP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/LLDP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer1" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer1.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer1::Allied" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer1/Allied.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer1::Asante" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer1/Asante.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer1::Bayhub" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer1/Bayhub.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer1::Cyclades" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer1/Cyclades.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer1::S3000" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer1/S3000.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::3Com" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/3Com.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Adtran" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Adtran.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Aerohive" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Aerohive.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Airespace" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Airespace.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Aironet" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Aironet.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Allied" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Allied.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Atmedia" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Atmedia.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Baystack" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Baystack.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::C1900" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/C1900.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::C2900" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/C2900.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Catalyst" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Catalyst.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Centillion" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Centillion.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Cisco" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Cisco.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::CiscoSB" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/CiscoSB.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::HP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/HP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::HP4000" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/HP4000.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::HPVC" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/HPVC.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Kentrox" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Kentrox.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::N2270" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/N2270.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::NAP222x" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/NAP222x.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::NWSS2300" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/NWSS2300.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Netgear" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Netgear.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Nexans" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Nexans.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Orinoco" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Orinoco.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Sixnet" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Sixnet.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Trapeze" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Trapeze.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::Ubiquiti" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer2::ZyXEL_DSLAM" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Aironet" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Aironet.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::AlcatelLucent" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::AlteonAD" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/AlteonAD.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Altiga" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Altiga.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Arista" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Arista.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Aruba" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Aruba.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::BayRS" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/BayRS.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::BlueCoatSG" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::C3550" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/C3550.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::C4000" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/C4000.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::C6500" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/C6500.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::CheckPoint" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/CheckPoint.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Cisco" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Cisco.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::CiscoASA" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/CiscoASA.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::CiscoFWSM" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::CiscoSwitch" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Contivity" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Contivity.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Cumulus" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Cumulus.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::DLink" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/DLink.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Dell" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Dell.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::ERX" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/ERX.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Enterasys" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Enterasys.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Extreme" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Extreme.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::F5" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/F5.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Force10" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Force10.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Fortinet" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Fortinet.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Foundry" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Foundry.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Genua" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Genua.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::H3C" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/H3C.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::HP9300" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/HP9300.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Huawei" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Huawei.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::IBMGbTor" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Juniper" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Juniper.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Lantronix" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Lantronix.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Microsoft" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Microsoft.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Mikrotik" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Mikrotik.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::N1600" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/N1600.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::NetSNMP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/NetSNMP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Netscreen" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Netscreen.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Nexus" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Nexus.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::OneAccess" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/OneAccess.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::PacketFront" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/PacketFront.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::PaloAlto" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/PaloAlto.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Passport" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Passport.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Pf" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Pf.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Pica8" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Pica8.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::SonicWALL" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/SonicWALL.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Steelhead" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Steelhead.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Sun" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Sun.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Tasman" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Tasman.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::Timetra" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/Timetra.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::VMware" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/VMware.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer3::VyOS" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer3/VyOS.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::APC" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/APC.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::Arbor" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/Arbor.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::CiscoIPS" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::Gigamon" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/Gigamon.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::Liebert" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/Liebert.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::Neoteris" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/Neoteris.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::Layer7::Netscaler" : { | ||||||
|  |          "file" : "lib/SNMP/Info/Layer7/Netscaler.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::MAU" : { | ||||||
|  |          "file" : "lib/SNMP/Info/MAU.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::MRO" : { | ||||||
|  |          "file" : "lib/SNMP/Info/MRO.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::NortelStack" : { | ||||||
|  |          "file" : "lib/SNMP/Info/NortelStack.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::PowerEthernet" : { | ||||||
|  |          "file" : "lib/SNMP/Info/PowerEthernet.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::RapidCity" : { | ||||||
|  |          "file" : "lib/SNMP/Info/RapidCity.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       }, | ||||||
|  |       "SNMP::Info::SONMP" : { | ||||||
|  |          "file" : "lib/SNMP/Info/SONMP.pm", | ||||||
|  |          "version" : "3.61" | ||||||
|  |       } | ||||||
|  |    }, | ||||||
|  |    "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.61", | ||||||
|  |    "x_serialization_backend" : "JSON::PP version 2.97001" | ||||||
|  | } | ||||||
							
								
								
									
										427
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										427
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,427 @@ | |||||||
|  | --- | ||||||
|  | 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.61' | ||||||
|  |   SNMP::Info::AMAP: | ||||||
|  |     file: lib/SNMP/Info/AMAP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::AdslLine: | ||||||
|  |     file: lib/SNMP/Info/AdslLine.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Aggregate: | ||||||
|  |     file: lib/SNMP/Info/Aggregate.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Airespace: | ||||||
|  |     file: lib/SNMP/Info/Airespace.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Bridge: | ||||||
|  |     file: lib/SNMP/Info/Bridge.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CDP: | ||||||
|  |     file: lib/SNMP/Info/CDP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoAgg: | ||||||
|  |     file: lib/SNMP/Info/CiscoAgg.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoConfig: | ||||||
|  |     file: lib/SNMP/Info/CiscoConfig.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoPortSecurity: | ||||||
|  |     file: lib/SNMP/Info/CiscoPortSecurity.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoPower: | ||||||
|  |     file: lib/SNMP/Info/CiscoPower.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoQOS: | ||||||
|  |     file: lib/SNMP/Info/CiscoQOS.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoRTT: | ||||||
|  |     file: lib/SNMP/Info/CiscoRTT.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoStack: | ||||||
|  |     file: lib/SNMP/Info/CiscoStack.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoStats: | ||||||
|  |     file: lib/SNMP/Info/CiscoStats.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoStpExtensions: | ||||||
|  |     file: lib/SNMP/Info/CiscoStpExtensions.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::CiscoVTP: | ||||||
|  |     file: lib/SNMP/Info/CiscoVTP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::EDP: | ||||||
|  |     file: lib/SNMP/Info/EDP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Entity: | ||||||
|  |     file: lib/SNMP/Info/Entity.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::EtherLike: | ||||||
|  |     file: lib/SNMP/Info/EtherLike.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::FDP: | ||||||
|  |     file: lib/SNMP/Info/FDP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::IEEE802dot11: | ||||||
|  |     file: lib/SNMP/Info/IEEE802dot11.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::IEEE802dot3ad: | ||||||
|  |     file: lib/SNMP/Info/IEEE802dot3ad.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::IPv6: | ||||||
|  |     file: lib/SNMP/Info/IPv6.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::LLDP: | ||||||
|  |     file: lib/SNMP/Info/LLDP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer1: | ||||||
|  |     file: lib/SNMP/Info/Layer1.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer1::Allied: | ||||||
|  |     file: lib/SNMP/Info/Layer1/Allied.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer1::Asante: | ||||||
|  |     file: lib/SNMP/Info/Layer1/Asante.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer1::Bayhub: | ||||||
|  |     file: lib/SNMP/Info/Layer1/Bayhub.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer1::Cyclades: | ||||||
|  |     file: lib/SNMP/Info/Layer1/Cyclades.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer1::S3000: | ||||||
|  |     file: lib/SNMP/Info/Layer1/S3000.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2: | ||||||
|  |     file: lib/SNMP/Info/Layer2.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::3Com: | ||||||
|  |     file: lib/SNMP/Info/Layer2/3Com.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Adtran: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Adtran.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Aerohive: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Aerohive.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Airespace: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Airespace.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Aironet: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Aironet.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Allied: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Allied.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Atmedia: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Atmedia.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Baystack: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Baystack.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::C1900: | ||||||
|  |     file: lib/SNMP/Info/Layer2/C1900.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::C2900: | ||||||
|  |     file: lib/SNMP/Info/Layer2/C2900.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Catalyst: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Catalyst.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Centillion: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Centillion.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Cisco: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Cisco.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::CiscoSB: | ||||||
|  |     file: lib/SNMP/Info/Layer2/CiscoSB.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::HP: | ||||||
|  |     file: lib/SNMP/Info/Layer2/HP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::HP4000: | ||||||
|  |     file: lib/SNMP/Info/Layer2/HP4000.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::HPVC: | ||||||
|  |     file: lib/SNMP/Info/Layer2/HPVC.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Kentrox: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Kentrox.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::N2270: | ||||||
|  |     file: lib/SNMP/Info/Layer2/N2270.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::NAP222x: | ||||||
|  |     file: lib/SNMP/Info/Layer2/NAP222x.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::NWSS2300: | ||||||
|  |     file: lib/SNMP/Info/Layer2/NWSS2300.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Netgear: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Netgear.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Nexans: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Nexans.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Orinoco: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Orinoco.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Sixnet: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Sixnet.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Trapeze: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Trapeze.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::Ubiquiti: | ||||||
|  |     file: lib/SNMP/Info/Layer2/Ubiquiti.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer2::ZyXEL_DSLAM: | ||||||
|  |     file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3: | ||||||
|  |     file: lib/SNMP/Info/Layer3.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Aironet: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Aironet.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::AlcatelLucent: | ||||||
|  |     file: lib/SNMP/Info/Layer3/AlcatelLucent.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::AlteonAD: | ||||||
|  |     file: lib/SNMP/Info/Layer3/AlteonAD.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Altiga: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Altiga.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Arista: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Arista.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Aruba: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Aruba.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::BayRS: | ||||||
|  |     file: lib/SNMP/Info/Layer3/BayRS.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::BlueCoatSG: | ||||||
|  |     file: lib/SNMP/Info/Layer3/BlueCoatSG.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::C3550: | ||||||
|  |     file: lib/SNMP/Info/Layer3/C3550.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::C4000: | ||||||
|  |     file: lib/SNMP/Info/Layer3/C4000.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::C6500: | ||||||
|  |     file: lib/SNMP/Info/Layer3/C6500.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::CheckPoint: | ||||||
|  |     file: lib/SNMP/Info/Layer3/CheckPoint.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Cisco: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Cisco.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::CiscoASA: | ||||||
|  |     file: lib/SNMP/Info/Layer3/CiscoASA.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::CiscoFWSM: | ||||||
|  |     file: lib/SNMP/Info/Layer3/CiscoFWSM.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::CiscoSwitch: | ||||||
|  |     file: lib/SNMP/Info/Layer3/CiscoSwitch.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Contivity: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Contivity.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Cumulus: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Cumulus.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::DLink: | ||||||
|  |     file: lib/SNMP/Info/Layer3/DLink.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Dell: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Dell.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::ERX: | ||||||
|  |     file: lib/SNMP/Info/Layer3/ERX.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Enterasys: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Enterasys.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Extreme: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Extreme.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::F5: | ||||||
|  |     file: lib/SNMP/Info/Layer3/F5.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Force10: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Force10.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Fortinet: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Fortinet.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Foundry: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Foundry.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Genua: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Genua.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::H3C: | ||||||
|  |     file: lib/SNMP/Info/Layer3/H3C.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::HP9300: | ||||||
|  |     file: lib/SNMP/Info/Layer3/HP9300.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Huawei: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Huawei.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::IBMGbTor: | ||||||
|  |     file: lib/SNMP/Info/Layer3/IBMGbTor.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Juniper: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Juniper.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Lantronix: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Lantronix.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Microsoft: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Microsoft.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Mikrotik: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Mikrotik.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::N1600: | ||||||
|  |     file: lib/SNMP/Info/Layer3/N1600.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::NetSNMP: | ||||||
|  |     file: lib/SNMP/Info/Layer3/NetSNMP.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Netscreen: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Netscreen.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Nexus: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Nexus.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::OneAccess: | ||||||
|  |     file: lib/SNMP/Info/Layer3/OneAccess.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::PacketFront: | ||||||
|  |     file: lib/SNMP/Info/Layer3/PacketFront.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::PaloAlto: | ||||||
|  |     file: lib/SNMP/Info/Layer3/PaloAlto.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Passport: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Passport.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Pf: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Pf.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Pica8: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Pica8.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::SonicWALL: | ||||||
|  |     file: lib/SNMP/Info/Layer3/SonicWALL.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Steelhead: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Steelhead.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Sun: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Sun.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Tasman: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Tasman.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::Timetra: | ||||||
|  |     file: lib/SNMP/Info/Layer3/Timetra.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::VMware: | ||||||
|  |     file: lib/SNMP/Info/Layer3/VMware.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer3::VyOS: | ||||||
|  |     file: lib/SNMP/Info/Layer3/VyOS.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7: | ||||||
|  |     file: lib/SNMP/Info/Layer7.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::APC: | ||||||
|  |     file: lib/SNMP/Info/Layer7/APC.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::Arbor: | ||||||
|  |     file: lib/SNMP/Info/Layer7/Arbor.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::CiscoIPS: | ||||||
|  |     file: lib/SNMP/Info/Layer7/CiscoIPS.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::Gigamon: | ||||||
|  |     file: lib/SNMP/Info/Layer7/Gigamon.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::Liebert: | ||||||
|  |     file: lib/SNMP/Info/Layer7/Liebert.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::Neoteris: | ||||||
|  |     file: lib/SNMP/Info/Layer7/Neoteris.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::Layer7::Netscaler: | ||||||
|  |     file: lib/SNMP/Info/Layer7/Netscaler.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::MAU: | ||||||
|  |     file: lib/SNMP/Info/MAU.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::MRO: | ||||||
|  |     file: lib/SNMP/Info/MRO.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::NortelStack: | ||||||
|  |     file: lib/SNMP/Info/NortelStack.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::PowerEthernet: | ||||||
|  |     file: lib/SNMP/Info/PowerEthernet.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::RapidCity: | ||||||
|  |     file: lib/SNMP/Info/RapidCity.pm | ||||||
|  |     version: '3.61' | ||||||
|  |   SNMP::Info::SONMP: | ||||||
|  |     file: lib/SNMP/Info/SONMP.pm | ||||||
|  |     version: '3.61' | ||||||
|  | recommends: | ||||||
|  |   Class::ISA: '0' | ||||||
|  |   File::Slurp: '0' | ||||||
|  |   Module::Info: '0' | ||||||
|  |   Module::Load: '0' | ||||||
|  |   PPI: '0' | ||||||
|  | requires: | ||||||
|  |   Math::BigInt: '0' | ||||||
|  |   NetAddr::IP: '4.068' | ||||||
|  |   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.61' | ||||||
|  | x_serialization_backend: 'CPAN::Meta::YAML version 0.018' | ||||||
							
								
								
									
										39
									
								
								Makefile.PL
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								Makefile.PL
									
									
									
									
									
								
							| @@ -1,39 +0,0 @@ | |||||||
| # Module makefile for SNMP::Info (using ExtUtils::MakeMaker) |  | ||||||
| # $Id$ |  | ||||||
|  |  | ||||||
| require 5.006; |  | ||||||
|  |  | ||||||
| use strict; |  | ||||||
| use warnings; |  | ||||||
| use ExtUtils::MakeMaker; |  | ||||||
|  |  | ||||||
| WriteMakefile( |  | ||||||
|     NAME          => 'SNMP::Info', |  | ||||||
|     AUTHOR        => 'Eric A. Miller <emiller@cpan.org>', |  | ||||||
|     VERSION_FROM  => 'Info.pm', |  | ||||||
|     ABSTRACT_FROM => 'Info.pm', |  | ||||||
|     PREREQ_PM     => { |  | ||||||
|         'Test::More'   => 0, |  | ||||||
|         'Math::BigInt' => 0, |  | ||||||
|         'SNMP'         => 0, |  | ||||||
|     }, |  | ||||||
|     PMLIBDIRS => [ 'Info', '$(BASEEXT)' ], |  | ||||||
|     dist      => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, |  | ||||||
|     clean     => { FILES    => 'SNMP-Info-*' }, |  | ||||||
|     realclean => { FILES    => 'Makefile.old' }, |  | ||||||
|     (     ( ExtUtils::MakeMaker->VERSION() lt '6.25' ) ? ( 'PL_FILES' => {} ) |  | ||||||
|         : () |  | ||||||
|     ), |  | ||||||
|     (   ( ExtUtils::MakeMaker->VERSION() gt '6.30' ) ? ( 'LICENSE' => 'bsd' ) |  | ||||||
|         : () |  | ||||||
|     ), |  | ||||||
|  |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| sub MY::postamble { |  | ||||||
|     " |  | ||||||
| .PHONY: readme |  | ||||||
| readme: README |  | ||||||
| README: Info.pm |  | ||||||
| 	pod2text -l Info.pm > README"; |  | ||||||
| } |  | ||||||
							
								
								
									
										223
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										223
									
								
								README
									
									
									
									
									
								
							| @@ -1,13 +1,10 @@ | |||||||
| NAME | NAME | ||||||
|  |  | ||||||
|     SNMP::Info - OO Interface to Network devices and MIBs through SNMP |     SNMP::Info - OO Interface to Network devices and MIBs through SNMP | ||||||
|  |  | ||||||
| VERSION | VERSION | ||||||
|  |     SNMP::Info - Version 3.61 | ||||||
|     SNMP::Info - Version 3.20 |  | ||||||
|  |  | ||||||
| AUTHOR | AUTHOR | ||||||
|  |  | ||||||
|     SNMP::Info is maintained by team of Open Source authors headed by Eric |     SNMP::Info is maintained by team of Open Source authors headed by Eric | ||||||
|     Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits. |     Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits. | ||||||
|  |  | ||||||
| @@ -18,12 +15,12 @@ AUTHOR | |||||||
|     <http://netdisco.org> by Max Baker. |     <http://netdisco.org> by Max Baker. | ||||||
|  |  | ||||||
| DEVICES SUPPORTED | DEVICES SUPPORTED | ||||||
|  |     There are now generic classes for most types of device and so the | ||||||
|     See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt for |     authors recommend loading SNMP::Info with AutoSpecify, and then | ||||||
|     more details. |     reporting to the mail list any missing functionality (such as neighbor | ||||||
|  |     discovery tables). | ||||||
|  |  | ||||||
| SYNOPSIS | SYNOPSIS | ||||||
|  |  | ||||||
|      use SNMP::Info; |      use SNMP::Info; | ||||||
|  |  | ||||||
|      my $info = new SNMP::Info( |      my $info = new SNMP::Info( | ||||||
| @@ -79,13 +76,11 @@ SYNOPSIS | |||||||
|      } |      } | ||||||
|  |  | ||||||
| SUPPORT | SUPPORT | ||||||
|  |  | ||||||
|     Please direct all support, help, and bug requests to the snmp-info-users |     Please direct all support, help, and bug requests to the snmp-info-users | ||||||
|     Mailing List at |     Mailing List at | ||||||
|     <http://lists.sourceforge.net/lists/listinfo/snmp-info-users>. |     <http://lists.sourceforge.net/lists/listinfo/snmp-info-users>. | ||||||
|  |  | ||||||
| DESCRIPTION | DESCRIPTION | ||||||
|  |  | ||||||
|     SNMP::Info gives an object oriented interface to information obtained |     SNMP::Info gives an object oriented interface to information obtained | ||||||
|     through SNMP. |     through SNMP. | ||||||
|  |  | ||||||
| @@ -112,7 +107,6 @@ DESCRIPTION | |||||||
|     a couple hashes. See EXTENDING SNMP::INFO. |     a couple hashes. See EXTENDING SNMP::INFO. | ||||||
|  |  | ||||||
| REQUIREMENTS | REQUIREMENTS | ||||||
|  |  | ||||||
|     1. Net-SNMP |     1. Net-SNMP | ||||||
|         To use this module, you must have Net-SNMP installed on your system. |         To use this module, you must have Net-SNMP installed on your system. | ||||||
|         More specifically you need the Perl modules that come with it. |         More specifically you need the Perl modules that come with it. | ||||||
| @@ -143,14 +137,13 @@ REQUIREMENTS | |||||||
|  |  | ||||||
|         If you are using SNMP::Info separate from Netdisco, download the |         If you are using SNMP::Info separate from Netdisco, download the | ||||||
|         Netdisco MIB package at |         Netdisco MIB package at | ||||||
|         <http://sourceforge.net/project/showfiles.php?group_id=80033&package |         <http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest | ||||||
|         _id=135517> |         -snapshot/> | ||||||
|  |  | ||||||
|         Make sure that your snmp.conf is updated to point to your MIB |         Make sure that your snmp.conf is updated to point to your MIB | ||||||
|         directory and that the MIBs are world-readable. |         directory and that the MIBs are world-readable. | ||||||
|  |  | ||||||
| DESIGN GOALS | DESIGN GOALS | ||||||
|  |  | ||||||
|     1. Use of textual MIB leaf identifier and enumerated values |     1. Use of textual MIB leaf identifier and enumerated values | ||||||
|  |  | ||||||
|         *   All values are retrieved via MIB Leaf node names |         *   All values are retrieved via MIB Leaf node names | ||||||
| @@ -180,14 +173,12 @@ DESIGN GOALS | |||||||
|         inclusion in the next version. |         inclusion in the next version. | ||||||
|  |  | ||||||
| SUBCLASSES | SUBCLASSES | ||||||
|  |  | ||||||
|     These are the subclasses that implement MIBs and support devices: |     These are the subclasses that implement MIBs and support devices: | ||||||
|  |  | ||||||
|     Required MIBs not included in the install instructions above are noted |     Required MIBs not included in the install instructions above are noted | ||||||
|     here. |     here. | ||||||
|  |  | ||||||
|   MIB Subclasses |   MIB Subclasses | ||||||
|  |  | ||||||
|     These subclasses implement method to access one or more MIBs. These are |     These subclasses implement method to access one or more MIBs. These are | ||||||
|     not used directly, but rather inherited from device subclasses. |     not used directly, but rather inherited from device subclasses. | ||||||
|  |  | ||||||
| @@ -336,6 +327,11 @@ SUBCLASSES | |||||||
|  |  | ||||||
|         See documentation in SNMP::Info::MAU for details. |         See documentation in SNMP::Info::MAU for details. | ||||||
|  |  | ||||||
|  |     SNMP::Info::MRO | ||||||
|  |         Method resolution introspection for SNMP::Info | ||||||
|  |  | ||||||
|  |         See documentation in SNMP::Info::MRO for details. | ||||||
|  |  | ||||||
|     SNMP::Info::NortelStack |     SNMP::Info::NortelStack | ||||||
|         S5-AGENT-MIB, S5-CHASSIS-MIB. |         S5-AGENT-MIB, S5-CHASSIS-MIB. | ||||||
|  |  | ||||||
| @@ -360,7 +356,6 @@ SUBCLASSES | |||||||
|         See documentation in SNMP::Info::SONMP for details. |         See documentation in SNMP::Info::SONMP for details. | ||||||
|  |  | ||||||
|   Device Subclasses |   Device Subclasses | ||||||
|  |  | ||||||
|     These subclasses inherit from one or more classes to provide a common |     These subclasses inherit from one or more classes to provide a common | ||||||
|     interface to data obtainable from network devices. |     interface to data obtainable from network devices. | ||||||
|  |  | ||||||
| @@ -393,7 +388,7 @@ SUBCLASSES | |||||||
|             See documentation in SNMP::Info::Layer1::Bayhub for details. |             See documentation in SNMP::Info::Layer1::Bayhub for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer1::Cyclades |         SNMP::Info::Layer1::Cyclades | ||||||
|             Subclass for Cyclades terminal servers. |             Subclass for Cyclades/Avocent terminal servers. | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer1::Cyclades for details. |             See documentation in SNMP::Info::Layer1::Cyclades for details. | ||||||
|  |  | ||||||
| @@ -413,6 +408,16 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer2::3Com for details. |             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::Aerohive | ||||||
|  |             Subclass for Aerohive Access Points. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer2::Aerohive for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer2::Airespace |         SNMP::Info::Layer2::Airespace | ||||||
|             Subclass for Cisco (Airespace) wireless controllers. |             Subclass for Cisco (Airespace) wireless controllers. | ||||||
|  |  | ||||||
| @@ -429,6 +434,11 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer2::Allied for details. |             See documentation in SNMP::Info::Layer2::Allied for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer2::Atmedia | ||||||
|  |             Subclass for atmedia encryptors. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer2::Atmedia for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer2::Baystack |         SNMP::Info::Layer2::Baystack | ||||||
|             Subclass for Avaya/Nortel/Bay Ethernet Switch/Baystack switches. |             Subclass for Avaya/Nortel/Bay Ethernet Switch/Baystack switches. | ||||||
|             This includes 303, 304, 350, 380, 410, 420, 425, 450, 460, 470 |             This includes 303, 304, 350, 380, 410, 420, 425, 450, 460, 470 | ||||||
| @@ -515,6 +525,11 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer2::Netgear for details. |             See documentation in SNMP::Info::Layer2::Netgear for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer2::Nexans | ||||||
|  |             Subclass for Nexans switches | ||||||
|  |  | ||||||
|  |             See documetion in SNMP::Info::Layer2::Nexans for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer2::NWSS2300 |         SNMP::Info::Layer2::NWSS2300 | ||||||
|             SNMP Interface to Avaya (Trapeze) Wireless Controllers |             SNMP Interface to Avaya (Trapeze) Wireless Controllers | ||||||
|  |  | ||||||
| @@ -530,8 +545,13 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer2::Trapeze for details. |             See documentation in SNMP::Info::Layer2::Trapeze for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer2::Sixnet | ||||||
|  |             SNMP Interface to Sixnet industrial switches | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer2::Sixnet for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer2::Ubiquiti |         SNMP::Info::Layer2::Ubiquiti | ||||||
|             SNMP Interface to Ubiquiti Access Points |             SNMP Interface to Ubiquiti Access Points and other devices | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer2::Ubiquiti for details. |             See documentation in SNMP::Info::Layer2::Ubiquiti for details. | ||||||
|  |  | ||||||
| @@ -608,6 +628,11 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::C6500 for details. |             See documentation in SNMP::Info::Layer3::C6500 for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::CheckPoint | ||||||
|  |             Subclass for CheckPoint devices | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::CheckPoint for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::Cisco |         SNMP::Info::Layer3::Cisco | ||||||
|             This is a simple wrapper around layer 3 for IOS devices and the |             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 |             base layer 3 Cisco class for other device specific layer 3 Cisco | ||||||
| @@ -634,10 +659,20 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Contivity for details. |             See documentation in SNMP::Info::Layer3::Contivity for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::Cumulus | ||||||
|  |             Subclass for Cumulus Networks Routers. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::Cumulus for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::DLink | ||||||
|  |             Subclass for DLink devices. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::DLink for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::Dell |         SNMP::Info::Layer3::Dell | ||||||
|             Subclass for Dell PowerConnect switches. D-Link, the IBM |             Subclass for Dell PowerConnect switches. The IBM BladeCenter | ||||||
|             BladeCenter Gigabit Ethernet Switch Module and some Linksys |             Gigabit Ethernet Switch Module and some Linksys switches also | ||||||
|             switches also use this module based upon MIB support. |             use this module based upon MIB support. | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Dell for details. |             See documentation in SNMP::Info::Layer3::Dell for details. | ||||||
|  |  | ||||||
| @@ -646,6 +681,11 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Enterasys for details. |             See documentation in SNMP::Info::Layer3::Enterasys for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::ERX | ||||||
|  |             Subclass for Juniper ERX switches. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::ERX for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::Extreme |         SNMP::Info::Layer3::Extreme | ||||||
|             Subclass for Extreme Networks switches. |             Subclass for Extreme Networks switches. | ||||||
|  |  | ||||||
| @@ -661,11 +701,21 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Force10 for details. |             See documentation in SNMP::Info::Layer3::Force10 for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::Fortinet | ||||||
|  |             Subclass for Fortinet devices. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::Fortinet for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::Foundry |         SNMP::Info::Layer3::Foundry | ||||||
|             Subclass for Brocade (Foundry) Network devices. |             Subclass for Brocade (Foundry) Network devices. | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Foundry for details. |             See documentation in SNMP::Info::Layer3::Foundry for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::Genua | ||||||
|  |             Subclass for Genua security devices. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::Genua for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::H3C |         SNMP::Info::Layer3::H3C | ||||||
|             SNMP Interface to Layer 3 Devices, H3C & HP A-series. |             SNMP Interface to Layer 3 Devices, H3C & HP A-series. | ||||||
|  |  | ||||||
| @@ -678,6 +728,11 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::HP9300 for details. |             See documentation in SNMP::Info::Layer3::HP9300 for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::Huawei | ||||||
|  |             SNMP Interface to Huawei Layer 3 switches and routers. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::Huawei for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::IBMGbTor |         SNMP::Info::Layer3::IBMGbTor | ||||||
|             SNMP Interface to IBM Rackswitch (formerly Blade Network |             SNMP Interface to IBM Rackswitch (formerly Blade Network | ||||||
|             Technologies) network devices. |             Technologies) network devices. | ||||||
| @@ -725,12 +780,22 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Nexus for details. |             See documentation in SNMP::Info::Layer3::Nexus for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::OneAccess | ||||||
|  |             Subclass for OneAccess Quidway switches | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::OneAccess for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::PacketFront |         SNMP::Info::Layer3::PacketFront | ||||||
|             Subclass for PacketFront DRG series CPE. |             Subclass for PacketFront DRG series CPE. | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::PacketFront for |             See documentation in SNMP::Info::Layer3::PacketFront for | ||||||
|             details. |             details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::PaloAlto | ||||||
|  |             Subclass for Palo Alto firewalls. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::PaloAlto for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer3::Passport |         SNMP::Info::Layer3::Passport | ||||||
|             Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000 |             Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000 | ||||||
|             series, Accelar, and VSP 9000 series switches. |             series, Accelar, and VSP 9000 series switches. | ||||||
| @@ -770,28 +835,58 @@ SUBCLASSES | |||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer3::Timetra for details. |             See documentation in SNMP::Info::Layer3::Timetra for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::VyOS | ||||||
|  |             Subclass for VyOS routers. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::VyOS for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer3::VMware | ||||||
|  |             Subclass for VMware ESXi hosts. | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer3::VMware for details. | ||||||
|  |  | ||||||
|     SNMP::Info::Layer7 |     SNMP::Info::Layer7 | ||||||
|         Generic Layer7 Devices. |         Generic Layer7 Devices. | ||||||
|  |  | ||||||
|         See documentation in SNMP::Info::Layer7 for details. |         See documentation in SNMP::Info::Layer7 for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer7::APC |         SNMP::Info::Layer7::APC | ||||||
|             SNMP Interface to APC UPS devices |             Subclass for APC UPS devices | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer7::APC for details. |             See documentation in SNMP::Info::Layer7::APC for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer7::Arbor | ||||||
|  |             Subclass for Arbor appliances | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer7::Arbor for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer7::CiscoIPS | ||||||
|  |             Subclass for Cisco IPS devices | ||||||
|  |  | ||||||
|  |             See documentation in "SNMP::Info::Layer7::Cisco IPS" for | ||||||
|  |             details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer7::Gigamon | ||||||
|  |             Subclass for Gigamon devices | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer7::Gigamon for details. | ||||||
|  |  | ||||||
|  |         SNMP::Info::Layer7::Liebert | ||||||
|  |             Subclass for Liebert devices | ||||||
|  |  | ||||||
|  |             See documentation in SNMP::Info::Layer7::Liebert for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer7::Netscaler |         SNMP::Info::Layer7::Netscaler | ||||||
|             SNMP Interface to Citrix Netscaler appliances |             Subclass for Citrix Netscaler appliances | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer7::Netscaler for details. |             See documentation in SNMP::Info::Layer7::Netscaler for details. | ||||||
|  |  | ||||||
|         SNMP::Info::Layer7::Neoteris |         SNMP::Info::Layer7::Neoteris | ||||||
|             SNMP Interface to Juniper SSL VPN appliances |             Subclass for Juniper SSL VPN appliances | ||||||
|  |  | ||||||
|             See documentation in SNMP::Info::Layer7::Neoteris for details. |             See documentation in SNMP::Info::Layer7::Neoteris for details. | ||||||
|  |  | ||||||
| Thanks | Thanks | ||||||
|  |  | ||||||
|     Thanks for testing and coding help (in no particular order) to : |     Thanks for testing and coding help (in no particular order) to : | ||||||
|     Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex |     Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex | ||||||
|     Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson, |     Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson, | ||||||
| @@ -802,9 +897,7 @@ Thanks | |||||||
|     Netdisco README! |     Netdisco README! | ||||||
|  |  | ||||||
| USAGE | USAGE | ||||||
|  |  | ||||||
|   Constructor |   Constructor | ||||||
|  |  | ||||||
|     new() |     new() | ||||||
|         Creates a new object and connects via SNMP::Session. |         Creates a new object and connects via SNMP::Session. | ||||||
|  |  | ||||||
| @@ -954,7 +1047,6 @@ USAGE | |||||||
|         identify the device. |         identify the device. | ||||||
|  |  | ||||||
|   Data is Cached |   Data is Cached | ||||||
|  |  | ||||||
|     Methods and subroutines requesting data from a device will only load the |     Methods and subroutines requesting data from a device will only load the | ||||||
|     data once, and then return cached versions of that data. |     data once, and then return cached versions of that data. | ||||||
|  |  | ||||||
| @@ -964,11 +1056,10 @@ USAGE | |||||||
|     Run $info->clear_cache() to clear the cache to allow reload of both |     Run $info->clear_cache() to clear the cache to allow reload of both | ||||||
|     globals and table methods. |     globals and table methods. | ||||||
|  |  | ||||||
|     The cache can be retreved or set using the $info->cache() method. This |     The cache can be retrieved or set using the $info->cache() method. This | ||||||
|     works together with the "Offline" option. |     works together with the "Offline" option. | ||||||
|  |  | ||||||
|   Object Scalar Methods |   Object Scalar Methods | ||||||
|  |  | ||||||
|     These are for package related data, not directly supplied from SNMP. |     These are for package related data, not directly supplied from SNMP. | ||||||
|  |  | ||||||
|     $info->clear_cache() |     $info->clear_cache() | ||||||
| @@ -1013,10 +1104,6 @@ USAGE | |||||||
|         If the device still can be connected to via SNMP::Info, then |         If the device still can be connected to via SNMP::Info, then | ||||||
|         SNMP::Info is returned. |         SNMP::Info is returned. | ||||||
|  |  | ||||||
|         See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt |  | ||||||
|         for more details about device support, or view "device_type()" in |  | ||||||
|         Info.pm. |  | ||||||
|  |  | ||||||
|     $info->error(no_clear) |     $info->error(no_clear) | ||||||
|         Returns Error message if there is an error, or undef if there is |         Returns Error message if there is an error, or undef if there is | ||||||
|         not. |         not. | ||||||
| @@ -1056,7 +1143,6 @@ USAGE | |||||||
|         Indexing.html> |         Indexing.html> | ||||||
|  |  | ||||||
|   Globals (Scalar Methods) |   Globals (Scalar Methods) | ||||||
|  |  | ||||||
|     These are methods to return scalar data from RFC1213. |     These are methods to return scalar data from RFC1213. | ||||||
|  |  | ||||||
|     Some subset of these is probably available for any network device that |     Some subset of these is probably available for any network device that | ||||||
| @@ -1105,7 +1191,6 @@ USAGE | |||||||
|         ("ipForwarding") |         ("ipForwarding") | ||||||
|  |  | ||||||
|   Table Methods |   Table Methods | ||||||
|  |  | ||||||
|     Each of these methods returns a hash_reference to a hash keyed on the |     Each of these methods returns a hash_reference to a hash keyed on the | ||||||
|     interface index in SNMP. |     interface index in SNMP. | ||||||
|  |  | ||||||
| @@ -1120,7 +1205,6 @@ USAGE | |||||||
|     cases changes between reboots of the network device. |     cases changes between reboots of the network device. | ||||||
|  |  | ||||||
|   Partial Table Fetches |   Partial Table Fetches | ||||||
|  |  | ||||||
|     If you want to get only a part of an SNMP table or a single instance |     If you want to get only a part of an SNMP table or a single instance | ||||||
|     from the table and you know the IID for the part of the table that you |     from the table and you know the IID for the part of the table that you | ||||||
|     want, you can specify it in the call: |     want, you can specify it in the call: | ||||||
| @@ -1135,7 +1219,6 @@ USAGE | |||||||
|     Partial table results are not cached. |     Partial table results are not cached. | ||||||
|  |  | ||||||
|   Interface Information |   Interface Information | ||||||
|  |  | ||||||
|     $info->interfaces() |     $info->interfaces() | ||||||
|         This methods is overridden in each subclass to provide a mapping |         This methods is overridden in each subclass to provide a mapping | ||||||
|         between the Interface Table Index (iid) and the physical port name. |         between the Interface Table Index (iid) and the physical port name. | ||||||
| @@ -1230,7 +1313,6 @@ USAGE | |||||||
|         ("ifAlias") |         ("ifAlias") | ||||||
|  |  | ||||||
|   Interface Statistics |   Interface Statistics | ||||||
|  |  | ||||||
|     $info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(), |     $info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(), | ||||||
|     $info->i_octets_out64() |     $info->i_octets_out64() | ||||||
|         Bandwidth. |         Bandwidth. | ||||||
| @@ -1320,33 +1402,41 @@ USAGE | |||||||
|  |  | ||||||
|         ("ifSpecific") |         ("ifSpecific") | ||||||
|  |  | ||||||
|   IP Address Table |   IPv4 Address Table | ||||||
|  |     Each entry in this table is an IPv4 address in use on this device. | ||||||
|  |     Usually this is implemented in Layer3 Devices. These methods try the | ||||||
|  |     deprecated IPv4 address table "IP-MIB::ipAddrTable" first due to its | ||||||
|  |     prevalence and will try the current "IP-MIB::ipAddressTable" if it | ||||||
|  |     doesn't return any results. "IP-MIB::ipAddressTable" results are | ||||||
|  |     filtered to only return IPv4 unicast addresses and modified to match the | ||||||
|  |     return format of the older table for backwards compatibility. | ||||||
|  |  | ||||||
|     Each entry in this table is an IP address in use on this device. Usually |     See documentation in SNMP::Info::IPv6 for IPv6 Address Table. | ||||||
|     this is implemented in Layer3 Devices. |  | ||||||
|  |  | ||||||
|     $info->ip_index() |     $info->ip_index() | ||||||
|         Maps the IP Table to the IID |         Maps the IPv4 addresses to the interface index | ||||||
|  |  | ||||||
|         ("ipAdEntIfIndex") |         ("ipAdEntIfIndex") or filtered and index modified | ||||||
|  |         ("ipAddressIfIndex") | ||||||
|  |  | ||||||
|     $info->ip_table() |     $info->ip_table() | ||||||
|         Maps the Table to the IP address |         Maps the Table to the IPv4 address | ||||||
|  |  | ||||||
|         ("ipAdEntAddr") |         ("ipAdEntAddr") or address extracted from ("ipAddressIfIndex") | ||||||
|  |  | ||||||
|     $info->ip_netmask() |     $info->ip_netmask() | ||||||
|         Gives netmask setting for IP table entry. |         Gives netmask setting for IPv4 table entry. | ||||||
|  |  | ||||||
|         ("ipAdEntNetMask") |         ("ipAdEntNetMask") or netmask calculated from ("ipAddressPrefix") | ||||||
|  |  | ||||||
|     $info->ip_broadcast() |     $info->ip_broadcast() | ||||||
|         Gives broadcast address for IP table entry. |         Gives the value of the least-significant bit in the IPv4 broadcast | ||||||
|  |         address either 1 or 0. | ||||||
|  |  | ||||||
|         ("ipAdEntBcastAddr") |         ("ipAdEntBcastAddr"), there is no equivalent from the | ||||||
|  |         "IP-MIB::ipAddressTable" | ||||||
|  |  | ||||||
|   IP Routing Table |   IP Routing Table | ||||||
|  |  | ||||||
|     $info->ipr_route() |     $info->ipr_route() | ||||||
|         The route in question. A value of 0.0.0.0 is the default gateway |         The route in question. A value of 0.0.0.0 is the default gateway | ||||||
|         route. |         route. | ||||||
| @@ -1463,7 +1553,6 @@ USAGE | |||||||
|         ("ipRouteInfo") |         ("ipRouteInfo") | ||||||
|  |  | ||||||
|   Topology Information |   Topology Information | ||||||
|  |  | ||||||
|     Based upon the manufacturer and software version devices may support |     Based upon the manufacturer and software version devices may support | ||||||
|     some combination of Layer 2 topology protocol information. SNMP::Info |     some combination of Layer 2 topology protocol information. SNMP::Info | ||||||
|     supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery |     supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery | ||||||
| @@ -1481,7 +1570,6 @@ USAGE | |||||||
|     AMAP: See SNMP::Info::AMAP for details. |     AMAP: See SNMP::Info::AMAP for details. | ||||||
|  |  | ||||||
|    Topology Capabilities |    Topology Capabilities | ||||||
|  |  | ||||||
|     $info->has_topo() |     $info->has_topo() | ||||||
|         Reports Layer 2 topology protocols which are supported and running |         Reports Layer 2 topology protocols which are supported and running | ||||||
|         on a device. |         on a device. | ||||||
| @@ -1491,7 +1579,6 @@ USAGE | |||||||
|         protocols are supported or running. |         protocols are supported or running. | ||||||
|  |  | ||||||
|    Common Topology Table Information |    Common Topology Table Information | ||||||
|  |  | ||||||
|     The common topology table methods below will query the device for |     The common topology table methods below will query the device for | ||||||
|     information from the specified topology protocols and return a single |     information from the specified topology protocols and return a single | ||||||
|     hash combining all information. As a result, there may be identical |     hash combining all information. As a result, there may be identical | ||||||
| @@ -1552,7 +1639,6 @@ USAGE | |||||||
|         Note: Only CDP and LLDP support this method. |         Note: Only CDP and LLDP support this method. | ||||||
|  |  | ||||||
| SETTING DATA VIA SNMP | SETTING DATA VIA SNMP | ||||||
|  |  | ||||||
|     This section explains how to use SNMP::Info to do SNMP Set operations. |     This section explains how to use SNMP::Info to do SNMP Set operations. | ||||||
|  |  | ||||||
|     $info->set_METHOD($value) |     $info->set_METHOD($value) | ||||||
| @@ -1582,7 +1668,6 @@ SETTING DATA VIA SNMP | |||||||
|     subroutines will need to be added if they haven't been already. |     subroutines will need to be added if they haven't been already. | ||||||
|  |  | ||||||
| Quiet Mode | Quiet Mode | ||||||
|  |  | ||||||
|     SNMP::Info will not chirp anything to STDOUT unless there is a serious |     SNMP::Info will not chirp anything to STDOUT unless there is a serious | ||||||
|     error (in which case it will probably die). |     error (in which case it will probably die). | ||||||
|  |  | ||||||
| @@ -1597,7 +1682,6 @@ Quiet Mode | |||||||
|      my $name = $info->name() or die "Couldn't get sysName!" . $name->error(); |      my $name = $info->name() or die "Couldn't get sysName!" . $name->error(); | ||||||
|  |  | ||||||
| EXTENDING SNMP::INFO | EXTENDING SNMP::INFO | ||||||
|  |  | ||||||
|     To support a new class (vendor or platform) of device, add a Perl |     To support a new class (vendor or platform) of device, add a Perl | ||||||
|     package with the data structures and methods listed below. |     package with the data structures and methods listed below. | ||||||
|  |  | ||||||
| @@ -1607,14 +1691,13 @@ EXTENDING SNMP::INFO | |||||||
|     to verify the implementation. |     to verify the implementation. | ||||||
|  |  | ||||||
|   Gathering MIB data for SNMP::Info Developers |   Gathering MIB data for SNMP::Info Developers | ||||||
|  |  | ||||||
|     The preference is to open a feature request in the SourceForge project. |     The preference is to open a feature request in the SourceForge project. | ||||||
|     This allows all developers to have visibility into the request. Please |     This allows all developers to have visibility into the request. Please | ||||||
|     include pointers to the applicable platform MIBs. For development we |     include pointers to the applicable platform MIBs. For development we | ||||||
|     will need an "snmpwalk" of the device. There is a tool now included in |     will need an "snmpwalk" of the device. There is a tool now included in | ||||||
|     the SNMP::Info distribution to help with this task, although you'll most |     the SNMP::Info distribution to help with this task, although you'll most | ||||||
|     likely need to download the distribution from CPAN as it's included in |     likely need to download the distribution from CPAN as it's included in | ||||||
|     the ""t/util"" directory. |     the ""contrib/util"" directory. | ||||||
|  |  | ||||||
|     The utility is named "make_snmpdata.pl". Run it with a command line |     The utility is named "make_snmpdata.pl". Run it with a command line | ||||||
|     like: |     like: | ||||||
| @@ -1633,7 +1716,6 @@ EXTENDING SNMP::INFO | |||||||
|     ticket. |     ticket. | ||||||
|  |  | ||||||
|   Data Structures required in new Subclass |   Data Structures required in new Subclass | ||||||
|  |  | ||||||
|     A class inheriting this class must implement these data structures : |     A class inheriting this class must implement these data structures : | ||||||
|  |  | ||||||
|     $INIT |     $INIT | ||||||
| @@ -1690,7 +1772,6 @@ EXTENDING SNMP::INFO | |||||||
|          ) |          ) | ||||||
|  |  | ||||||
|   Sample Subclass |   Sample Subclass | ||||||
|  |  | ||||||
|     Let's make a sample Layer 2 Device subclass. This class will inherit the |     Let's make a sample Layer 2 Device subclass. This class will inherit the | ||||||
|     Cisco Vlan module as an example. |     Cisco Vlan module as an example. | ||||||
|  |  | ||||||
| @@ -1783,9 +1864,7 @@ EXTENDING SNMP::INFO | |||||||
|     of SNMP::Info. |     of SNMP::Info. | ||||||
|  |  | ||||||
| SNMP::INFO INTERNALS | SNMP::INFO INTERNALS | ||||||
|  |  | ||||||
|   Object Namespace |   Object Namespace | ||||||
|  |  | ||||||
|     Internal data is stored with bareword keys. For example $info->{debug} |     Internal data is stored with bareword keys. For example $info->{debug} | ||||||
|  |  | ||||||
|     SNMP Data is stored or marked cached with keys starting with an |     SNMP Data is stored or marked cached with keys starting with an | ||||||
| @@ -1795,7 +1874,6 @@ SNMP::INFO INTERNALS | |||||||
|     above. |     above. | ||||||
|  |  | ||||||
|   Package Globals |   Package Globals | ||||||
|  |  | ||||||
|     These set the default value for an object upon creation. |     These set the default value for an object upon creation. | ||||||
|  |  | ||||||
|     $DEBUG |     $DEBUG | ||||||
| @@ -1817,7 +1895,6 @@ SNMP::INFO INTERNALS | |||||||
|         for more info. Can change by passing BulkRepeaters option in new() |         for more info. Can change by passing BulkRepeaters option in new() | ||||||
|  |  | ||||||
|   Data Munging Callback Subroutines |   Data Munging Callback Subroutines | ||||||
|  |  | ||||||
|     munge_speed() |     munge_speed() | ||||||
|         Makes human friendly speed ratings using %SPEED_MAP |         Makes human friendly speed ratings using %SPEED_MAP | ||||||
|  |  | ||||||
| @@ -1847,6 +1924,7 @@ SNMP::INFO INTERNALS | |||||||
|                         '54000000'   => '54 Mbps', |                         '54000000'   => '54 Mbps', | ||||||
|                         '64000000'   => '64 Mbps', |                         '64000000'   => '64 Mbps', | ||||||
|                         '100000000'  => '100 Mbps', |                         '100000000'  => '100 Mbps', | ||||||
|  |                         '200000000'  => '200 Mbps', | ||||||
|                         '149760000'  => 'ATM on OC-3', |                         '149760000'  => 'ATM on OC-3', | ||||||
|                         '155000000'  => 'OC-3', |                         '155000000'  => 'OC-3', | ||||||
|                         '155519000'  => 'OC-3', |                         '155519000'  => 'OC-3', | ||||||
| @@ -1856,6 +1934,7 @@ SNMP::INFO INTERNALS | |||||||
|                         '622000000'  => 'OC-12', |                         '622000000'  => 'OC-12', | ||||||
|                         '622080000'  => 'OC-12', |                         '622080000'  => 'OC-12', | ||||||
|                         '1000000000' => '1.0 Gbps', |                         '1000000000' => '1.0 Gbps', | ||||||
|  |                         '2000000000' => '2.0 Gbps', | ||||||
|                         '2488000000' => 'OC-48', |                         '2488000000' => 'OC-48', | ||||||
|                      ) |                      ) | ||||||
|  |  | ||||||
| @@ -1876,6 +1955,10 @@ SNMP::INFO INTERNALS | |||||||
|         ASCII hex string. |         ASCII hex string. | ||||||
|  |  | ||||||
|     munge_prio_mac() |     munge_prio_mac() | ||||||
|  |         Takes an 2-byte octet stream (HEX-STRING) and returns a colon | ||||||
|  |         separated ASCII hex string. | ||||||
|  |  | ||||||
|  |     munge_prio_port() | ||||||
|         Takes an 8-byte octet stream (HEX-STRING) and returns a colon |         Takes an 8-byte octet stream (HEX-STRING) and returns a colon | ||||||
|         separated ASCII hex string. |         separated ASCII hex string. | ||||||
|  |  | ||||||
| @@ -1915,6 +1998,12 @@ SNMP::INFO INTERNALS | |||||||
|         Takes an OID and return the object name if the right MIB is loaded. |         Takes an OID and return the object name if the right MIB is loaded. | ||||||
|  |  | ||||||
|   Internally Used Functions |   Internally Used Functions | ||||||
|  |     resolve_desthost() | ||||||
|  |         Takes the SNMP::Session "DestHost" argument and determines if it is | ||||||
|  |         an 'IPv4' or 'IPv6' host. 'IPv6' hosts are prefixed with the "udp6:" | ||||||
|  |         "transport-specifier" as required by the undelying "Net-SNMP" | ||||||
|  |         library. If unable to determine the type of address or resolve a DNS | ||||||
|  |         name, dies with "croak". | ||||||
|  |  | ||||||
|     $info->init() |     $info->init() | ||||||
|         Used internally. Loads all entries in %MIBS. |         Used internally. Loads all entries in %MIBS. | ||||||
| @@ -2093,7 +2182,6 @@ SNMP::INFO INTERNALS | |||||||
|         Returns undef if the method does not exist and can not be created. |         Returns undef if the method does not exist and can not be created. | ||||||
|  |  | ||||||
|   AUTOLOAD |   AUTOLOAD | ||||||
|  |  | ||||||
|     Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in |     Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in | ||||||
|     loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated |     loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated | ||||||
|     methods are inserted into the symbol table so that subsequent calls can |     methods are inserted into the symbol table so that subsequent calls can | ||||||
| @@ -2116,7 +2204,6 @@ SNMP::INFO INTERNALS | |||||||
|     subclass. |     subclass. | ||||||
|  |  | ||||||
| COPYRIGHT AND LICENSE | COPYRIGHT AND LICENSE | ||||||
|  |  | ||||||
|     Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010 |     Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010 | ||||||
|     Max Baker and SNMP::Info Developers All rights reserved. |     Max Baker and SNMP::Info Developers All rights reserved. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,6 @@ Coding Guidelines: | |||||||
|     - tab-width of 4, no tab characters |     - tab-width of 4, no tab characters | ||||||
|     - keep POD documentation up-to-date |     - keep POD documentation up-to-date | ||||||
|     - always update ChangeLog before committing |     - always update ChangeLog before committing | ||||||
|     - always update DeviceMatrix.txt before committing |  | ||||||
|     - check-in required mibs to netdisco-mibs and release new package if needed |     - check-in required mibs to netdisco-mibs and release new package if needed | ||||||
| 
 | 
 | ||||||
| Release and Testing Instructions:  | Release and Testing Instructions:  | ||||||
| @@ -3,9 +3,9 @@ | |||||||
| 
 | 
 | ||||||
| use File::Glob qw/bsd_glob/; | use File::Glob qw/bsd_glob/; | ||||||
| 
 | 
 | ||||||
| my @pms = glob_rec("../Info"); | my @pms = glob_rec("./lib"); | ||||||
| 
 | 
 | ||||||
| $new_version = shift @ARGV || '3.01'; | $new_version = shift @ARGV || die "missing new version\n"; | ||||||
| 
 | 
 | ||||||
| foreach my $p (@pms) { | foreach my $p (@pms) { | ||||||
|     print "$p\n"; |     print "$p\n"; | ||||||
| @@ -16,6 +16,7 @@ foreach my $p (@pms) { | |||||||
| 
 | 
 | ||||||
|     while (<O>) { |     while (<O>) { | ||||||
|         s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/; |         s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/; | ||||||
|  |         s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/; | ||||||
|         print P; |         print P; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/perl | #!/usr/bin/env perl | ||||||
| # | # | ||||||
| # test_class_mocked.pl | # test_class_mocked.pl | ||||||
| # | # | ||||||
| @@ -33,7 +33,7 @@ use strict; | |||||||
| use warnings; | use warnings; | ||||||
| use Carp; | use Carp; | ||||||
| use FindBin; | use FindBin; | ||||||
| use lib "$FindBin::Bin/../../.."; | use lib "$FindBin::Bin/../../lib"; | ||||||
| use File::Slurp qw(slurp); | use File::Slurp qw(slurp); | ||||||
| use Getopt::Long; | use Getopt::Long; | ||||||
| use Pod::Usage; | use Pod::Usage; | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -33,12 +33,12 @@ use strict; | |||||||
| use Exporter; | use Exporter; | ||||||
| use SNMP::Info; | use SNMP::Info; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/; | @SNMP::Info::AMAP::ISA       = qw/SNMP::Info Exporter/; | ||||||
| @SNMP::Info::LLDP::EXPORT_OK = qw//; | @SNMP::Info::AMAP::EXPORT_OK = qw//; | ||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS | %MIBS | ||||||
|     = ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', ); |     = ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', ); | ||||||
| @@ -38,7 +38,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' ); | %MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' ); | ||||||
| 
 | 
 | ||||||
| @@ -38,9 +38,10 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = (); # IF-MIB | # Load MIB for leafs referenced within class | ||||||
|  | %MIBS = ('IF-MIB' => 'ifIndex',); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = (); | %GLOBALS = (); | ||||||
| 
 | 
 | ||||||
| @@ -61,7 +62,7 @@ sub agg_ports_ifstack { | |||||||
|   foreach my $idx ( keys %$ifStack ) { |   foreach my $idx ( keys %$ifStack ) { | ||||||
|       my ( $higher, $lower ) = split /\./, $idx; |       my ( $higher, $lower ) = split /\./, $idx; | ||||||
|       next if ( $higher == 0 or $lower == 0 ); |       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; |           $ret->{ $lower } = $higher; | ||||||
|       } |       } | ||||||
|   } |   } | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS, |     %SNMP::Info::MIBS, | ||||||
| @@ -508,8 +508,8 @@ sub ip_index { | |||||||
|     my $airespace = shift; |     my $airespace = shift; | ||||||
|     my $partial   = shift; |     my $partial   = shift; | ||||||
| 
 | 
 | ||||||
|     my $ip_index = $airespace->orig_ip_index($partial) || {}; |     my $ip_index = $airespace->SUPER::ip_index($partial) || {}; | ||||||
|     my $if_ip    = $airespace->airespace_if_ip()       || {}; |     my $if_ip    = $airespace->airespace_if_ip()         || {}; | ||||||
| 
 | 
 | ||||||
|     my %ip_index; |     my %ip_index; | ||||||
|     foreach my $ip ( keys %$ip_index ) { |     foreach my $ip ( keys %$ip_index ) { | ||||||
| @@ -534,9 +534,9 @@ sub ip_netmask { | |||||||
|     my $airespace = shift; |     my $airespace = shift; | ||||||
|     my $partial   = shift; |     my $partial   = shift; | ||||||
| 
 | 
 | ||||||
|     my $ip_mask = $airespace->orig_ip_netmask($partial) || {}; |     my $ip_mask = $airespace->SUPER::ip_netmask($partial) || {}; | ||||||
|     my $if_ip   = $airespace->airespace_if_ip()         || {}; |     my $if_ip   = $airespace->airespace_if_ip()           || {}; | ||||||
|     my $if_mask = $airespace->airespace_if_mask()       || {}; |     my $if_mask = $airespace->airespace_if_mask()         || {}; | ||||||
| 
 | 
 | ||||||
|     my %ip_netmask; |     my %ip_netmask; | ||||||
|     foreach my $ip ( keys %$ip_mask ) { |     foreach my $ip ( keys %$ip_mask ) { | ||||||
| @@ -42,11 +42,12 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/; | use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress', |     'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress', | ||||||
|     'Q-BRIDGE-MIB' => 'dot1qPvid', |     'Q-BRIDGE-MIB' => 'dot1qPvid', | ||||||
|  |     'RSTP-MIB'     => 'dot1dStpPortOperEdgePort', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
| @@ -104,6 +105,10 @@ $VERSION = '3.22'; | |||||||
|     'stp_p_bridge'   => 'dot1dStpPortDesignatedBridge', |     'stp_p_bridge'   => 'dot1dStpPortDesignatedBridge', | ||||||
|     'stp_p_port'     => 'dot1dStpPortDesignatedPort', |     'stp_p_port'     => 'dot1dStpPortDesignatedPort', | ||||||
| 
 | 
 | ||||||
|  |     # Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry | ||||||
|  |     'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort', | ||||||
|  |     'is_edgeport_oper'  => 'dot1dStpPortOperEdgePort', | ||||||
|  | 
 | ||||||
|     # Q-BRIDGE-MIB : dot1qPortVlanTable |     # Q-BRIDGE-MIB : dot1qPortVlanTable | ||||||
|     'qb_i_vlan'        => 'dot1qPvid', |     'qb_i_vlan'        => 'dot1qPvid', | ||||||
|     'qb_i_vlan_type'   => 'dot1qPortAcceptableFrameTypes', |     'qb_i_vlan_type'   => 'dot1qPortAcceptableFrameTypes', | ||||||
| @@ -224,9 +229,9 @@ sub qb_fdb_index { | |||||||
| 
 | 
 | ||||||
|     # Strip the TimeFilter |     # Strip the TimeFilter | ||||||
|     my $vl_fdb_index = {}; |     my $vl_fdb_index = {}; | ||||||
|     for my $orig (keys(%$qb_fdb_ids)) { |     for my $fdb_entry (keys(%$qb_fdb_ids)) { | ||||||
|         (my $new = $orig) =~ s/^\d+\.//; |         (my $vlan = $fdb_entry) =~ s/^\d+\.//; | ||||||
|         $vl_fdb_index->{$new} = $qb_fdb_ids->{$orig}; |         $vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return $vl_fdb_index; |     return $vl_fdb_index; | ||||||
| @@ -716,7 +721,7 @@ tagged ports or the VLAN ID. | |||||||
| 
 | 
 | ||||||
| =item $bridge->qb_fdb_index() | =item $bridge->qb_fdb_index() | ||||||
| 
 | 
 | ||||||
| Returns reference to hash: key = VLAN ID, value = FDB ID. | Returns reference to hash: key = FDB ID, value = VLAN ID. | ||||||
| 
 | 
 | ||||||
| =item $bridge->v_index() | =item $bridge->v_index() | ||||||
| 
 | 
 | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info; | |||||||
| use vars | use vars | ||||||
|     qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/; |     qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # Five data structures required by SNMP::Info | # Five data structures required by SNMP::Info | ||||||
| %MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' ); | %MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' ); | ||||||
| @@ -54,16 +54,15 @@ $VERSION = '3.22'; | |||||||
|     'cdp_run'      => 'cdpGlobalRun', |     'cdp_run'      => 'cdpGlobalRun', | ||||||
|     'cdp_interval' => 'cdpGlobalMessageInterval', |     'cdp_interval' => 'cdpGlobalMessageInterval', | ||||||
|     'cdp_holdtime' => 'cdpGlobalHoldTime', |     'cdp_holdtime' => 'cdpGlobalHoldTime', | ||||||
|     'cdp_gid'       => 'cdpGlobalDeviceId', |     'cdp_gid'      => 'cdpGlobalDeviceId', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
|     'cdp_index'        => 'cdpCacheIfIndex', |  | ||||||
|     'cdp_proto'        => 'cdpCacheAddressType', |     'cdp_proto'        => 'cdpCacheAddressType', | ||||||
|     'cdp_addr'         => 'cdpCacheAddress', |     'cdp_addr'         => 'cdpCacheAddress', | ||||||
|     'cdp_ver'          => 'cdpCacheVersion', |     'cdp_ver'          => 'cdpCacheVersion', | ||||||
|     'cdp_dev_id'       => 'cdpCacheDeviceId', |     'cdp_dev_id'       => 'cdpCacheDeviceId', | ||||||
|     'cdp_port'         => 'cdpCacheDevicePort', |     'cdp_dev_port'     => 'cdpCacheDevicePort', | ||||||
|     'cdp_platform'     => 'cdpCachePlatform', |     'cdp_platform'     => 'cdpCachePlatform', | ||||||
|     'cdp_capabilities' => 'cdpCacheCapabilities', |     'cdp_capabilities' => 'cdpCacheCapabilities', | ||||||
|     'cdp_domain'       => 'cdpCacheVTPMgmtDomain', |     'cdp_domain'       => 'cdpCacheVTPMgmtDomain', | ||||||
| @@ -80,7 +79,6 @@ $VERSION = '3.22'; | |||||||
|     'cdp_capabilities' => \&SNMP::Info::munge_bits, |     'cdp_capabilities' => \&SNMP::Info::munge_bits, | ||||||
|     'cdp_platform'     => \&SNMP::Info::munge_null, |     'cdp_platform'     => \&SNMP::Info::munge_null, | ||||||
|     'cdp_domain'       => \&SNMP::Info::munge_null, |     'cdp_domain'       => \&SNMP::Info::munge_null, | ||||||
|     'cdp_port'         => \&SNMP::Info::munge_null, |  | ||||||
|     'cdp_ver'          => \&SNMP::Info::munge_null, |     'cdp_ver'          => \&SNMP::Info::munge_null, | ||||||
|     'cdp_ip'           => \&SNMP::Info::munge_ip, |     'cdp_ip'           => \&SNMP::Info::munge_ip, | ||||||
|     'cdp_power'        => \&munge_power, |     'cdp_power'        => \&munge_power, | ||||||
| @@ -111,28 +109,21 @@ sub munge_power { | |||||||
| sub hasCDP { | sub hasCDP { | ||||||
|     my $cdp = shift; |     my $cdp = shift; | ||||||
| 
 | 
 | ||||||
|     my $ver = $cdp->{_version}; |     # Check the global that is supposed to indicate CDP is running | ||||||
|  |     my $cdp_run = $cdp->cdp_run(); | ||||||
|  |     return 1 if $cdp_run; | ||||||
| 
 | 
 | ||||||
|     # SNMP v1 clients dont have the globals |     # SNMP v1 clients don't have the globals, fallback | ||||||
|     if ( defined $ver and $ver == 1 ) { |     # by checking if it would report neighbors | ||||||
|         my $cdp_ip = $cdp->cdp_ip(); |     my $cdp_ip = $cdp->cdp_ip() || {}; | ||||||
|  |     return 1 if scalar keys %$cdp_ip; | ||||||
| 
 | 
 | ||||||
|         # See if anything in cdp cache, if so we have cdp |     return; | ||||||
|         return 1 if ( defined $cdp_ip and scalar( keys %$cdp_ip ) ); |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return $cdp->cdp_run(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub cdp_if { | sub cdp_if { | ||||||
|     my $cdp = shift; |     my $cdp = shift; | ||||||
| 
 | 
 | ||||||
|     # See if by some miracle Cisco implemented the cdpCacheIfIndex entry |  | ||||||
|     my $cdp_index = $cdp->cdp_index(); |  | ||||||
|     return $cdp_index if defined $cdp_index; |  | ||||||
| 
 |  | ||||||
|     # Nope, didn't think so. Now we fake it. |  | ||||||
|     my $cdp_ip = $cdp->cdp_ip(); |     my $cdp_ip = $cdp->cdp_ip(); | ||||||
|     unless ( defined $cdp_ip ) { |     unless ( defined $cdp_ip ) { | ||||||
|         $cdp->error_throw( |         $cdp->error_throw( | ||||||
| @@ -225,6 +216,22 @@ sub cdp_id { | |||||||
|     return \%cdp_id; |     return \%cdp_id; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub cdp_port { | ||||||
|  |     my $cdp    = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  | 
 | ||||||
|  |     my $ch = $cdp->cdp_dev_port($partial) || {}; | ||||||
|  | 
 | ||||||
|  |     my %cdp_port; | ||||||
|  |     foreach my $key ( sort keys %$ch ) { | ||||||
|  |         my $port = $ch->{$key}; | ||||||
|  |         next unless $port; | ||||||
|  |         $port = SNMP::Info::munge_mac($port) || SNMP::Info::munge_null($port); | ||||||
|  |         $cdp_port{$key} = $port; | ||||||
|  |     } | ||||||
|  |     return \%cdp_port; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
| __END__ | __END__ | ||||||
| 
 | 
 | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| # SNMP::Info::CiscoAgg | # SNMP::Info::CiscoAgg | ||||||
| # | # | ||||||
| # Copyright (c) 2014 SNMP::Info Developers | # Copyright (c) 2018 SNMP::Info Developers | ||||||
| # All rights reserved. | # All rights reserved. | ||||||
| # | # | ||||||
| # Redistribution and use in source and binary forms, with or without | # Redistribution and use in source and binary forms, with or without | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag'; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|   %SNMP::Info::IEEE802dot3ad::MIBS, |   %SNMP::Info::IEEE802dot3ad::MIBS, | ||||||
| @@ -52,9 +52,13 @@ $VERSION = '3.22'; | |||||||
| 
 | 
 | ||||||
| %GLOBALS = (); | %GLOBALS = (); | ||||||
| 
 | 
 | ||||||
| %FUNCS = (); | %FUNCS = ( | ||||||
|  |   %SNMP::Info::IEEE802dot3ad::FUNCS, | ||||||
|  | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = (); | %MUNGE = ( | ||||||
|  |   %SNMP::Info::IEEE802dot3ad::MUNGE, | ||||||
|  | ); | ||||||
| 
 | 
 | ||||||
| sub agg_ports_pagp { | sub agg_ports_pagp { | ||||||
|   my $dev = shift; |   my $dev = shift; | ||||||
| @@ -147,4 +151,8 @@ automatically. | |||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
|  | =head2 Table Methods imported from SNMP::Info::IEEE802dot3ad | ||||||
|  | 
 | ||||||
|  | See documentation in L<SNMP::Info::IEEE802dot3ad> for details. | ||||||
|  | 
 | ||||||
| =cut | =cut | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable', |     'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable', | ||||||
| @@ -97,6 +97,10 @@ sub copy_run_tftp { | |||||||
|         print "Using new method, row iid: $rand\n" if $ciscoconfig->debug(); |         print "Using new method, row iid: $rand\n" if $ciscoconfig->debug(); | ||||||
| 
 | 
 | ||||||
|         #Check each set, delete created row if any fail |         #Check each set, delete created row if any fail | ||||||
|  |         unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) { | ||||||
|  |             $ciscoconfig->error_throw("Initializing config copy instruction failed"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|         unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) { |         unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) { | ||||||
|             $ciscoconfig->error_throw("Setting source type failed"); |             $ciscoconfig->error_throw("Setting source type failed"); | ||||||
|             unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) { |             unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) { | ||||||
| @@ -32,18 +32,20 @@ package SNMP::Info::CiscoPortSecurity; | |||||||
| 
 | 
 | ||||||
| use strict; | use strict; | ||||||
| use Exporter; | use Exporter; | ||||||
|  | use SNMP::Info; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::CiscoPortSecurity::ISA       = qw/Exporter/; | @SNMP::Info::CiscoPortSecurity::ISA       = qw/SNMP::Info Exporter/; | ||||||
| @SNMP::Info::CiscoPortSecurity::EXPORT_OK = qw//; | @SNMP::Info::CiscoPortSecurity::EXPORT_OK = qw//; | ||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB', |     'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB', | ||||||
|     'CISCO-PAE-MIB'           => 'ciscoPaeMIB', |     'CISCO-PAE-MIB'           => 'ciscoPaeMIB', | ||||||
|     'IEEE8021-PAE-MIB'        => 'dot1xAuthLastEapolFrameSource', |     'IEEE8021-PAE-MIB'        => 'dot1xAuthLastEapolFrameSource', | ||||||
|  |     'CISCO-ERR-DISABLE-MIB'   => 'ciscoErrDisableMIB', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
| @@ -81,30 +83,27 @@ $VERSION = '3.22'; | |||||||
|     # CISCO-PORT-SECURITY-MIB::cpsIfVlanTable |     # CISCO-PORT-SECURITY-MIB::cpsIfVlanTable | ||||||
|     'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount', |     'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount', | ||||||
|     'cps_i_v_mac_max'   => 'cpsIfVlanMaxSecureMacAddr', |     'cps_i_v_mac_max'   => 'cpsIfVlanMaxSecureMacAddr', | ||||||
|     'cps_i_v'           => 'cpsIfVlanIndex', |  | ||||||
| 
 | 
 | ||||||
|     # CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable |     # CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable | ||||||
|     'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus', |     'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus', | ||||||
|     'cps_i_v_mac_age'    => 'cpsIfVlanSecureMacAddrRemainAge', |     'cps_i_v_mac_age'    => 'cpsIfVlanSecureMacAddrRemainAge', | ||||||
|     'cps_i_v_mac_type'   => 'cpsIfVlanSecureMacAddrType', |     'cps_i_v_mac_type'   => 'cpsIfVlanSecureMacAddrType', | ||||||
|     'cps_i_v_vlan'       => 'cpsIfVlanSecureVlanIndex', |  | ||||||
|     'cps_i_v_mac'        => 'cpsIfVlanSecureMacAddress', |  | ||||||
| 
 | 
 | ||||||
|     # CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable |     # CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable | ||||||
|     'cps_m_status' => 'cpsSecureMacAddrRowStatus', |     'cps_m_status' => 'cpsSecureMacAddrRowStatus', | ||||||
|     'cps_m_age'    => 'cpsSecureMacAddrRemainingAge', |     'cps_m_age'    => 'cpsSecureMacAddrRemainingAge', | ||||||
|     'cps_m_type'   => 'cpsSecureMacAddrType', |     'cps_m_type'   => 'cpsSecureMacAddrType', | ||||||
|     'cps_m_mac'    => 'cpsSecureMacAddress', |  | ||||||
| 
 | 
 | ||||||
|     # IEEE8021-PAE-MIB::dot1xPaePortEntry |     # IEEE8021-PAE-MIB::dot1xPaePortEntry | ||||||
|     'pae_i_capabilities'            => 'dot1xPaePortCapabilities', |     'pae_i_capabilities'            => 'dot1xPaePortCapabilities', | ||||||
|     'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource', |     'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource', | ||||||
|  | 
 | ||||||
|  |     # CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry | ||||||
|  |     'cerr_i_cause' => 'cErrDisableIfStatusCause', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( | %MUNGE = ( | ||||||
|     'cps_i_mac'                     => \&SNMP::Info::munge_mac, |     'cps_i_mac'                     => \&SNMP::Info::munge_mac, | ||||||
|     'cps_m_mac'                     => \&SNMP::Info::munge_mac, |  | ||||||
|     'cps_i_v_mac'                   => \&SNMP::Info::munge_mac, |  | ||||||
|     'pae_i_last_eapol_frame_source' => \&SNMP::Info::munge_mac, |     'pae_i_last_eapol_frame_source' => \&SNMP::Info::munge_mac, | ||||||
|     'pae_i_capabilities'            => \&munge_pae_capabilities, |     'pae_i_capabilities'            => \&munge_pae_capabilities, | ||||||
| ); | ); | ||||||
| @@ -123,13 +122,29 @@ sub munge_pae_capabilities { | |||||||
|     return join( ' ', @vals ); |     return join( ' ', @vals ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Define a generic method to show the cause for a port to be err-disabled. | ||||||
|  | # Cisco indexes cErrDisableIfStatusCause by {ifindex,vlan}, but for a more | ||||||
|  | # generic method, using ifIndex only makes it easier to implement across | ||||||
|  | # device classes. Besides, several (most?) err-disable features will disable | ||||||
|  | # the whole interface anyway, and not just a vlan on the interface. | ||||||
|  | sub i_err_disable_cause { | ||||||
|  |     my $cps = shift; | ||||||
|  |     my $ret; | ||||||
|  |     my $causes = $cps->cerr_i_cause() || {}; | ||||||
|  |     foreach my $interfacevlan (keys %$causes) { | ||||||
|  |         my ($iid, $vid) = split(/\./, $interfacevlan); | ||||||
|  |         $ret->{$iid} = $causes->{$interfacevlan}; | ||||||
|  |     } | ||||||
|  |     return $ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
| __END__ | __END__ | ||||||
| 
 | 
 | ||||||
| =head1 NAME | =head1 NAME | ||||||
| 
 | 
 | ||||||
| SNMP::Info::CiscoPortSecurity - SNMP Interface to data from | SNMP::Info::CiscoPortSecurity - SNMP Interface to data from | ||||||
| F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB> | F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and F<CISCO-ERR-DISABLE-MIB>. | ||||||
| 
 | 
 | ||||||
| =head1 AUTHOR | =head1 AUTHOR | ||||||
| 
 | 
 | ||||||
| @@ -153,8 +168,9 @@ Eric Miller | |||||||
| =head1 DESCRIPTION | =head1 DESCRIPTION | ||||||
| 
 | 
 | ||||||
| SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides | SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides | ||||||
| an interface to the F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>.  These | an interface to the F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and | ||||||
| MIBs are used across the Catalyst family under CatOS and IOS. | F<CISCO-ERR-DISABLE-MIB>. These MIBs are used across the Catalyst | ||||||
|  | family under CatOS and IOS. | ||||||
| 
 | 
 | ||||||
| Use or create in a subclass of SNMP::Info.  Do not use directly. | Use or create in a subclass of SNMP::Info.  Do not use directly. | ||||||
| 
 | 
 | ||||||
| @@ -172,6 +188,8 @@ None. | |||||||
| 
 | 
 | ||||||
| =item F<IEEE8021-PAE-MIB> | =item F<IEEE8021-PAE-MIB> | ||||||
| 
 | 
 | ||||||
|  | =item F<CISCO-ERR-DISABLE-MIB> | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head1 GLOBALS | =head1 GLOBALS | ||||||
| @@ -300,10 +318,6 @@ These are methods that return scalar values from SNMP | |||||||
| 
 | 
 | ||||||
| (C<cpsIfVlanMaxSecureMacAddr>) | (C<cpsIfVlanMaxSecureMacAddr>) | ||||||
| 
 | 
 | ||||||
| =item $cps->cps_i_v() |  | ||||||
| 
 |  | ||||||
| (C<cpsIfVlanIndex>) |  | ||||||
| 
 |  | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable> | =head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable> | ||||||
| @@ -322,14 +336,6 @@ These are methods that return scalar values from SNMP | |||||||
| 
 | 
 | ||||||
| (C<cpsIfVlanSecureMacAddrType>) | (C<cpsIfVlanSecureMacAddrType>) | ||||||
| 
 | 
 | ||||||
| =item $cps->cps_i_v_vlan() |  | ||||||
| 
 |  | ||||||
| (C<cpsIfVlanSecureVlanIndex>) |  | ||||||
| 
 |  | ||||||
| =item $cps->cps_i_v_mac() |  | ||||||
| 
 |  | ||||||
| (C<cpsIfVlanSecureMacAddress>) |  | ||||||
| 
 |  | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable> | =head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable> | ||||||
| @@ -348,10 +354,6 @@ These are methods that return scalar values from SNMP | |||||||
| 
 | 
 | ||||||
| (C<cpsSecureMacAddrType>) | (C<cpsSecureMacAddrType>) | ||||||
| 
 | 
 | ||||||
| =item $cps->cps_m_mac() |  | ||||||
| 
 |  | ||||||
| (C<cpsSecureMacAddress>) |  | ||||||
| 
 |  | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry> | =head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry> | ||||||
| @@ -374,6 +376,31 @@ The source MAC address carried in the most recently received EAPOL frame. | |||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
|  | =head2 C<CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry> | ||||||
|  | 
 | ||||||
|  | =over | ||||||
|  | 
 | ||||||
|  | =item $cps->cerr_i_cause() | ||||||
|  | 
 | ||||||
|  | C<cErrDisableIfStatusCause> | ||||||
|  | 
 | ||||||
|  | Indicates the feature/event that caused the {interface, vlan} (or the entire | ||||||
|  | interface) to be error-disabled. | ||||||
|  | 
 | ||||||
|  | =back | ||||||
|  | 
 | ||||||
|  | =head1 METHODS | ||||||
|  | 
 | ||||||
|  | =over | ||||||
|  | 
 | ||||||
|  | =item C<i_err_disable_cause> | ||||||
|  | 
 | ||||||
|  | Returns a HASH reference mapping ifIndex to err-disabled cause. The returned | ||||||
|  | data is sparse, so if the ifIndex is not present in the return value, the port | ||||||
|  | is not err-disabled. | ||||||
|  | 
 | ||||||
|  | =back | ||||||
|  | 
 | ||||||
| =head1 Data Munging Callback Subroutines | =head1 Data Munging Callback Subroutines | ||||||
| 
 | 
 | ||||||
| =over | =over | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex', | %MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex', | ||||||
|           'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' ); |           'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' ); | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', ); | %MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', ); | ||||||
| 
 | 
 | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', ); | %MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', ); | ||||||
| 
 | 
 | ||||||
| @@ -38,7 +38,7 @@ use Exporter; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', ); | %MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', ); | ||||||
| 
 | 
 | ||||||
| @@ -194,7 +194,7 @@ sub i_duplex_admin { | |||||||
|         next if ( defined $partial and $iid !~ /^$partial$/ ); |         next if ( defined $partial and $iid !~ /^$partial$/ ); | ||||||
| 
 | 
 | ||||||
|         # Test for gigabit |         # Test for gigabit | ||||||
|         if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 1 ) { |         if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 0 ) { | ||||||
|             $i_duplex_admin->{$iid} = 'full'; |             $i_duplex_admin->{$iid} = 'full'; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @@ -42,14 +42,14 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'SNMPv2-MIB'            => 'sysDescr', |     'SNMPv2-MIB'            => 'sysDescr', | ||||||
|     'CISCO-PROCESS-MIB'     => 'cpmCPUTotal5sec', |     'CISCO-PROCESS-MIB'     => 'cpmCPUTotal5sec', | ||||||
|     'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed', |     'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed', | ||||||
|     'OLD-CISCO-SYSTEM-MIB'  => 'writeMem', |     'OLD-CISCO-SYSTEM-MIB'  => 'writeMem', | ||||||
|     'CISCO-PRODUCTS-MIB'    => 'sysName', |     'CISCO-PRODUCTS-MIB'    => 'ciscoIGS', | ||||||
|     'ENTITY-MIB'            => 'entPhysicalSoftwareRev', |     'ENTITY-MIB'            => 'entPhysicalSoftwareRev', | ||||||
|     'CISCO-IMAGE-MIB'       => 'ciscoImageString', |     'CISCO-IMAGE-MIB'       => 'ciscoImageString', | ||||||
| 
 | 
 | ||||||
| @@ -36,7 +36,7 @@ use SNMP::Info::Bridge; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/; | use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/; | @SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/; | ||||||
| @SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//; | @SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//; | ||||||
| @@ -54,12 +54,15 @@ $VERSION = '3.22'; | |||||||
|             'stpx_stp_type'          => 'stpxSpanningTreeType', |             'stpx_stp_type'          => 'stpxSpanningTreeType', | ||||||
|             'stpx_bpduguard_enable'  => 'stpxFastStartBpduGuardEnable', |             'stpx_bpduguard_enable'  => 'stpxFastStartBpduGuardEnable', | ||||||
|             'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable', |             'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable', | ||||||
|  |             'stpx_faststart_default' => 'stpxFastStartGlobalDefaultMode', | ||||||
|            ); |            ); | ||||||
| 
 | 
 | ||||||
| %FUNCS   = ( | %FUNCS   = ( | ||||||
|             %SNMP::Info::Bridge::FUNCS, |             %SNMP::Info::Bridge::FUNCS, | ||||||
|             'stpx_rootguard_enabled'      => 'stpxRootGuardConfigEnabled', |             'stpx_rootguard_enabled'      => 'stpxRootGuardConfigEnabled', | ||||||
|             'stpx_loopguard_enabled'      => 'stpxLoopGuardConfigEnabled', |             'stpx_loopguard_enabled'      => 'stpxLoopGuardConfigEnabled', | ||||||
|  |             'stpx_faststart_enabled'      => 'stpxFastStartPortEnable', | ||||||
|  |             'stpx_faststart_operational'  => 'stpxFastStartPortMode', | ||||||
|             'stpx_port_bpduguard_mode'    => 'stpxFastStartPortBpduGuardMode', |             'stpx_port_bpduguard_mode'    => 'stpxFastStartPortBpduGuardMode', | ||||||
|             'stpx_port_bpdufilter_mode'   => 'stpxFastStartPortBpduFilterMode', |             'stpx_port_bpdufilter_mode'   => 'stpxFastStartPortBpduFilterMode', | ||||||
|             'stpx_smst_root'              => 'stpxSMSTInstanceCISTRegionalRoot', |             'stpx_smst_root'              => 'stpxSMSTInstanceCISTRegionalRoot', | ||||||
| @@ -69,7 +72,7 @@ $VERSION = '3.22'; | |||||||
| 
 | 
 | ||||||
| %MUNGE   = ( | %MUNGE   = ( | ||||||
|             %SNMP::Info::Bridge::MUNGE, |             %SNMP::Info::Bridge::MUNGE, | ||||||
|            'stpx_mst_config_digest'     => \&SNMP::Info::CiscoStpExtensions::oct2str, |            'stpx_mst_config_digest'      => \&SNMP::Info::CiscoStpExtensions::oct2str, | ||||||
|            ); |            ); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -225,6 +228,36 @@ sub i_bpdufilter_enabled { | |||||||
|     return \%res; |     return \%res; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub i_faststart_enabled { | ||||||
|  |     my $self    = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  | 
 | ||||||
|  |     my $faststart_default = $self->stpx_faststart_default(); | ||||||
|  |     my $bp_index          = $self->bp_index($partial); | ||||||
|  |     my $faststart         = $self->stpx_faststart_enabled(); | ||||||
|  |     my $faststart_oper    = $self->stpx_faststart_operational(); | ||||||
|  | 
 | ||||||
|  |     my %res; | ||||||
|  |     # stpxFastStartPortEnable is deprecated in favour of stpxFastStartPortMode | ||||||
|  |     # see https://github.com/netdisco/netdisco/issues/12 | ||||||
|  |     foreach my $index ( keys %$faststart, keys %$faststart_oper ){ | ||||||
|  |         my $mode = $faststart_oper->{$index} || $faststart->{$index}; | ||||||
|  |         my $iid  = $bp_index->{$index}; | ||||||
|  |         next unless defined $iid; | ||||||
|  |         next unless defined $mode; | ||||||
|  |         if ( $mode eq 'default' ){ | ||||||
|  |             $res{$iid} =  $faststart_default; | ||||||
|  |         }else{ | ||||||
|  |             $res{$iid} = $mode; | ||||||
|  |         } | ||||||
|  |         $res{$iid} = 'enable'  if $res{$iid} eq 'true'; | ||||||
|  |         $res{$iid} = 'disable' if $res{$iid} eq 'false'; | ||||||
|  |         $res{$iid} = 1 if $res{$iid} =~ m/enable/i; # enableForTrunk | ||||||
|  |         $res{$iid} = 0 if $res{$iid} eq 'disable'; | ||||||
|  |     } | ||||||
|  |     return \%res; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| sub oct2str { | sub oct2str { | ||||||
|     my ($v) = @_; |     my ($v) = @_; | ||||||
| @@ -340,6 +373,13 @@ Format is a hash reference with key = C<ifIndex>, value = [1|0] | |||||||
| 
 | 
 | ||||||
| (C<stpxFastStartBpduFilterEnable>) | (C<stpxFastStartBpduFilterEnable>) | ||||||
| 
 | 
 | ||||||
|  | =item $stpx->i_faststart_enabled() | ||||||
|  | 
 | ||||||
|  | Returns 1 or 0 depending on whether FastStart (aka PortFast) is enabled on a | ||||||
|  | given port.  Format is a hash reference with key = C<ifIndex>, value = [1|0] | ||||||
|  | 
 | ||||||
|  | (C<stpxFastStartPortEnable> and C<stpxFastStartPortMode>) | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head1 MUNGES | =head1 MUNGES | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'CISCO-VTP-MIB'                       => 'vtpVlanName', |     'CISCO-VTP-MIB'                       => 'vtpVlanName', | ||||||
| @@ -61,7 +61,6 @@ $VERSION = '3.22'; | |||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
| 
 | 
 | ||||||
|     # CISCO-VTP-MIB::managementDomainTable |     # CISCO-VTP-MIB::managementDomainTable | ||||||
|     'vtp_d_index'     => 'managementDomainIndex', |  | ||||||
|     'vtp_d_name'      => 'managementDomainName', |     'vtp_d_name'      => 'managementDomainName', | ||||||
|     'vtp_d_mode'      => 'managementDomainLocalMode', |     'vtp_d_mode'      => 'managementDomainLocalMode', | ||||||
|     'vtp_d_rev'       => 'managementDomainConfigRevNumber', |     'vtp_d_rev'       => 'managementDomainConfigRevNumber', | ||||||
| @@ -228,6 +227,7 @@ sub i_vlan_membership { | |||||||
|     my $i_vlan         = $vtp->i_vlan2($partial)            || {}; |     my $i_vlan         = $vtp->i_vlan2($partial)            || {}; | ||||||
|     my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {}; |     my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {}; | ||||||
|     my $trunk_dyn      = $vtp->vtp_trunk_dyn($partial)      || {}; |     my $trunk_dyn      = $vtp->vtp_trunk_dyn($partial)      || {}; | ||||||
|  |     my $i_voice_vlan   = $vtp->i_voice_vlan($partial)       || {}; | ||||||
| 
 | 
 | ||||||
|     my $i_vlan_membership = {}; |     my $i_vlan_membership = {}; | ||||||
| 
 | 
 | ||||||
| @@ -235,14 +235,24 @@ sub i_vlan_membership { | |||||||
|     foreach my $port ( keys %$i_vlan ) { |     foreach my $port ( keys %$i_vlan ) { | ||||||
|         my $vlan = $i_vlan->{$port}; |         my $vlan = $i_vlan->{$port}; | ||||||
|         next unless defined $vlan; |         next unless defined $vlan; | ||||||
|         my $stat = $trunk_dyn_stat->{$port}; |         my $dyn = $trunk_dyn->{$port}; | ||||||
|         if ( defined $stat and $stat =~ /notTrunking/ ) { |         unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) { | ||||||
|  |             push( @{ $i_vlan_membership->{$port} }, $vlan ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     # Get voice VLANs | ||||||
|  |     foreach my $port ( keys %$i_voice_vlan ) { | ||||||
|  |         my $vlan = $i_voice_vlan->{$port}; | ||||||
|  |         next unless defined $vlan; | ||||||
|  |         next unless ($vlan =~ m/[[:digit:]]+/ and $vlan < 4095); | ||||||
|  |         my $dyn = $trunk_dyn->{$port}; | ||||||
|  |         unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) { | ||||||
|             push( @{ $i_vlan_membership->{$port} }, $vlan ); |             push( @{ $i_vlan_membership->{$port} }, $vlan ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     # Get trunk ports |     # Get trunk ports | ||||||
| 
 |  | ||||||
|     my %oper_vlans; |     my %oper_vlans; | ||||||
|     foreach my $iid ( keys %$vtp_vlans ) { |     foreach my $iid ( keys %$vtp_vlans ) { | ||||||
|         my $vlan    = 0; |         my $vlan    = 0; | ||||||
| @@ -769,10 +779,6 @@ Each bit represents a VLAN.  This is 3072 through 4095 | |||||||
| 
 | 
 | ||||||
| =over | =over | ||||||
| 
 | 
 | ||||||
| =item $vtp->vtp_d_index() |  | ||||||
| 
 |  | ||||||
| (C<managementDomainIndex>) |  | ||||||
| 
 |  | ||||||
| =item $vtp->vtp_d_name() | =item $vtp->vtp_d_name() | ||||||
| 
 | 
 | ||||||
| (C<managementDomainName>) | (C<managementDomainName>) | ||||||
| @@ -34,12 +34,12 @@ use strict; | |||||||
| use Exporter; | use Exporter; | ||||||
| use SNMP::Info; | use SNMP::Info; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/; | @SNMP::Info::EDP::ISA       = qw/SNMP::Info Exporter/; | ||||||
| @SNMP::Info::LLDP::EXPORT_OK = qw//; | @SNMP::Info::EDP::EXPORT_OK = qw//; | ||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex', |     'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex', | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' ); | %MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' ); | ||||||
| 
 | 
 | ||||||
| @@ -109,6 +109,57 @@ sub e_port { | |||||||
|     return \%e_port; |     return \%e_port; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub entity_derived_serial { | ||||||
|  |     my $entity  = shift; | ||||||
|  | 
 | ||||||
|  |     my $e_parent = $entity->e_parent() || {}; | ||||||
|  |     my $e_class  = $entity->e_class() || {}; | ||||||
|  | 
 | ||||||
|  |     # Sort keys to return a consistent result between runs | ||||||
|  |     foreach my $iid ( sort keys %$e_parent ) { | ||||||
|  |         my $parent = $e_parent->{$iid}; | ||||||
|  |         my $class = $e_class->{$iid} || ''; | ||||||
|  |         # Only consider serial numbers for entries without a parent, or | ||||||
|  |         # if they are of type "chassis" | ||||||
|  |         if ( $parent eq '0' or $class eq 'chassis') { | ||||||
|  |             my $serial = $entity->e_serial($iid); | ||||||
|  |             if ( $serial && $serial->{$iid} ) { | ||||||
|  |                 return $serial->{$iid}; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 my $descr = $entity->e_descr($iid); | ||||||
|  |                 if ( $descr and $descr->{$iid} =~ /serial#?:\s*([a-z0-9]+)/i ) | ||||||
|  |                 { | ||||||
|  |                     return $1; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub entity_derived_os_ver { | ||||||
|  |     my $entity  = shift; | ||||||
|  | 
 | ||||||
|  |     my $e_parent = $entity->e_parent() || {}; | ||||||
|  |     my $e_class  = $entity->e_class() || {}; | ||||||
|  | 
 | ||||||
|  |     # Sort keys to return a consistent result between runs | ||||||
|  |     foreach my $iid ( sort keys %$e_parent ) { | ||||||
|  |         my $parent = $e_parent->{$iid}; | ||||||
|  |         my $class = $e_class->{$iid} || ''; | ||||||
|  |         # Only consider serial numbers for entries without a parent, or | ||||||
|  |         # if they are of type "chassis" | ||||||
|  |         if ( $parent eq '0' or $class eq 'chassis') { | ||||||
|  |             my $os_ver = $entity->e_swver($iid); | ||||||
|  |             if ( $os_ver && $os_ver->{$iid} ) { | ||||||
|  |                 return $os_ver->{$iid}; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
| 
 | 
 | ||||||
| __END__ | __END__ | ||||||
| @@ -173,6 +224,23 @@ none. | |||||||
| These are methods that return tables of information in the form of a reference | These are methods that return tables of information in the form of a reference | ||||||
| to a hash. | to a hash. | ||||||
| 
 | 
 | ||||||
|  | =over | ||||||
|  | 
 | ||||||
|  | =item $entity->entity_derived_serial() | ||||||
|  | 
 | ||||||
|  | Tries to determine the device serial number from the F<ENTITY-MIB>. Only | ||||||
|  | considers serial numbers for entries without a parent, or if they are of type | ||||||
|  | chassis. Looks at C<entPhysicalSerialNum> and then C<entPhysicalDescr> for | ||||||
|  | serial number. | ||||||
|  | 
 | ||||||
|  | =item $entity->entity_derived_os_ver() | ||||||
|  | 
 | ||||||
|  | Tries to determine the device OS version from the F<ENTITY-MIB>. Only | ||||||
|  | considers serial numbers for entries without a parent, or if they are of type | ||||||
|  | chassis. Looks at C<entPhysicalSoftwareRev> for the version. | ||||||
|  | 
 | ||||||
|  | =back | ||||||
|  | 
 | ||||||
| =head2 Entity Table | =head2 Entity Table | ||||||
| 
 | 
 | ||||||
| =over | =over | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'EtherLike-MIB' => 'etherMIB' ); | %MIBS = ( 'EtherLike-MIB' => 'etherMIB' ); | ||||||
| 
 | 
 | ||||||
| @@ -68,7 +68,6 @@ $VERSION = '3.22'; | |||||||
|     'el_xmit_defer'      => 'dot3StatsDeferredTransmissions', |     'el_xmit_defer'      => 'dot3StatsDeferredTransmissions', | ||||||
| 
 | 
 | ||||||
|     # Ethernet-like Collision Statistics Group |     # Ethernet-like Collision Statistics Group | ||||||
|     'el_coll_count' => 'dot3CollCount', |  | ||||||
|     'el_coll_freq'  => 'dot3CollFrequencies' |     'el_coll_freq'  => 'dot3CollFrequencies' | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| @@ -42,7 +42,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' ); | %MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' ); | ||||||
| 
 | 
 | ||||||
| @@ -50,11 +50,9 @@ $VERSION = '3.22'; | |||||||
|     'fdp_run'      => 'snFdpGlobalRun', |     'fdp_run'      => 'snFdpGlobalRun', | ||||||
|     'fdp_interval' => 'snFdpGlobalMessageInterval', |     'fdp_interval' => 'snFdpGlobalMessageInterval', | ||||||
|     'fdp_holdtime' => 'snFdpGlobalHoldTime', |     'fdp_holdtime' => 'snFdpGlobalHoldTime', | ||||||
|     'fdp_id'       => 'snFdpGlobalDeviceId', |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
|     'fdp_index'        => 'snFdpCacheIfIndex', |  | ||||||
|     'fdp_proto'        => 'snFdpCacheAddressType', |     'fdp_proto'        => 'snFdpCacheAddressType', | ||||||
|     'fdp_ip'           => 'snFdpCacheAddress', |     'fdp_ip'           => 'snFdpCacheAddress', | ||||||
|     'fdp_ver'          => 'snFdpCacheVersion', |     'fdp_ver'          => 'snFdpCacheVersion', | ||||||
| @@ -62,9 +60,7 @@ $VERSION = '3.22'; | |||||||
|     'fdp_port'         => 'snFdpCacheDevicePort', |     'fdp_port'         => 'snFdpCacheDevicePort', | ||||||
|     'fdp_platform'     => 'snFdpCachePlatform', |     'fdp_platform'     => 'snFdpCachePlatform', | ||||||
|     'fdp_capabilities' => 'snFdpCacheCapabilities', |     'fdp_capabilities' => 'snFdpCacheCapabilities', | ||||||
|     'fdp_domain'       => 'snFdpCacheVTPMgmtDomain', |     'fdp_cache_type'   => 'snFdpCacheVendorId', | ||||||
|     'fdp_vlan'         => 'snFdpCacheNativeVLAN', |  | ||||||
|     'fdp_duplex'       => 'snFdpCacheDuplex', |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( | %MUNGE = ( | ||||||
| @@ -84,9 +80,7 @@ sub fdp_run { | |||||||
| sub hasFDP { | sub hasFDP { | ||||||
|     my $fdp = shift; |     my $fdp = shift; | ||||||
| 
 | 
 | ||||||
|     my $ver = $fdp->{_version}; |     my $ver = $fdp->snmp_ver(); | ||||||
| 
 |  | ||||||
|     #my $ver = $fdp->fdp_ver; |  | ||||||
| 
 | 
 | ||||||
|     # SNMP v1 clients dont have the globals |     # SNMP v1 clients dont have the globals | ||||||
|     if ( defined $ver and $ver == 1 ) { |     if ( defined $ver and $ver == 1 ) { | ||||||
| @@ -103,11 +97,6 @@ sub hasFDP { | |||||||
| sub fdp_if { | sub fdp_if { | ||||||
|     my $fdp = shift; |     my $fdp = shift; | ||||||
| 
 | 
 | ||||||
|     # See if by some miracle Cisco implemented the fdpCacheIfIndex entry |  | ||||||
|     my $fdp_index = $fdp->fdp_index(); |  | ||||||
|     return $fdp_index if defined $fdp_index; |  | ||||||
| 
 |  | ||||||
|     # Nope, didn't think so. Now we fake it. |  | ||||||
|     my $fdp_ip = $fdp->fdp_ip(); |     my $fdp_ip = $fdp->fdp_ip(); | ||||||
|     unless ( defined $fdp_ip ) { |     unless ( defined $fdp_ip ) { | ||||||
|         $fdp->error_throw( |         $fdp->error_throw( | ||||||
| @@ -231,15 +220,6 @@ Time in seconds that FDP messages are kept. | |||||||
| 
 | 
 | ||||||
| (C<fdpGlobalHoldTime>) | (C<fdpGlobalHoldTime>) | ||||||
| 
 | 
 | ||||||
| =item  $fdp->fdp_id()  |  | ||||||
| 
 |  | ||||||
| Returns FDP device ID.   |  | ||||||
| 
 |  | ||||||
| This is the device id broadcast via FDP to other devices, and is what is |  | ||||||
| retrieved from remote devices with $fdp->id(). |  | ||||||
| 
 |  | ||||||
| (C<fdpGlobalDeviceId>) |  | ||||||
| 
 |  | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 Overrides | =head2 Overrides | ||||||
| @@ -323,19 +303,6 @@ Thanks to Martin Lorensen for a pointer to this information. | |||||||
| 
 | 
 | ||||||
| (C<fdpCacheCapabilities>) | (C<fdpCacheCapabilities>) | ||||||
| 
 | 
 | ||||||
| =item $fdp->fdp_domain() |  | ||||||
| 
 |  | ||||||
| The CDP version of this returns remote VTP Management Domain as defined |  | ||||||
| in C<CISCO-VTP-MIB::managementDomainName> |  | ||||||
| 
 |  | ||||||
| (C<fdpCacheVTPMgmtDomain>) |  | ||||||
| 
 |  | ||||||
| =item $fdp->fdp_duplex()  |  | ||||||
| 
 |  | ||||||
| Returns the port duplex status from remote devices. |  | ||||||
| 
 |  | ||||||
| (C<fdpCacheDuplex>) |  | ||||||
| 
 |  | ||||||
| =item $fdp->fdp_id() | =item $fdp->fdp_id() | ||||||
| 
 | 
 | ||||||
| Returns remote device id string | Returns remote device id string | ||||||
| @@ -346,17 +313,9 @@ Returns remote device id string | |||||||
| 
 | 
 | ||||||
| Returns the mapping to the SNMP Interface Table. | Returns the mapping to the SNMP Interface Table. | ||||||
| 
 | 
 | ||||||
| Note that a lot devices don't implement $fdp->fdp_index(),  So if it isn't |  | ||||||
| around, we fake it.  |  | ||||||
| 
 |  | ||||||
| In order to map the fdp table entry back to the interfaces() entry, we | In order to map the fdp table entry back to the interfaces() entry, we | ||||||
| truncate the last number off of it : | truncate the last number off of it : | ||||||
| 
 | 
 | ||||||
|   # it exists, yay. |  | ||||||
|   my $fdp_index     = $device->fdp_index(); |  | ||||||
|   return $fdp_index if defined $fdp_index; |  | ||||||
| 
 |  | ||||||
|   # if not, let's fake it |  | ||||||
|   my $fdp_ip       = $device->fdp_ip(); |   my $fdp_ip       = $device->fdp_ip(); | ||||||
| 
 | 
 | ||||||
|   my %fdp_if |   my %fdp_if | ||||||
| @@ -369,18 +328,6 @@ truncate the last number off of it : | |||||||
| 
 | 
 | ||||||
|   return \%fdp_if; |   return \%fdp_if; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| =item $fdp->fdp_index() |  | ||||||
| 
 |  | ||||||
| Returns the mapping to the SNMP2 Interface table for FDP Cache Entries.  |  | ||||||
| 
 |  | ||||||
| Most devices don't implement this, so you probably want to use $fdp->fdp_if() |  | ||||||
| instead. |  | ||||||
| 
 |  | ||||||
| See fdp_if() entry. |  | ||||||
| 
 |  | ||||||
| (C<fdpCacheIfIndex>) |  | ||||||
| 
 |  | ||||||
| =item  $fdp->fdp_ip() | =item  $fdp->fdp_ip() | ||||||
| 
 | 
 | ||||||
| Returns remote IP address | Returns remote IP address | ||||||
| @@ -411,11 +358,11 @@ Returns remote hardware version | |||||||
| 
 | 
 | ||||||
| (C<fdpCacheVersion>) | (C<fdpCacheVersion>) | ||||||
| 
 | 
 | ||||||
| =item $fdp->fdp_vlan() | =item $fdp->fdp_cache_type()  | ||||||
| 
 | 
 | ||||||
| Returns the remote interface native VLAN. | Returns type of entry received, either FDP or CDP. | ||||||
| 
 | 
 | ||||||
| (C<fdpCacheNativeVLAN>) | (C<snFdpCacheVendorId>) | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -32,13 +32,14 @@ package SNMP::Info::IEEE802dot11; | |||||||
| 
 | 
 | ||||||
| use strict; | use strict; | ||||||
| use Exporter; | use Exporter; | ||||||
|  | use SNMP::Info; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::IEEE802dot11::ISA       = qw/Exporter/; | @SNMP::Info::IEEE802dot11::ISA       = qw/SNMP::Info Exporter/; | ||||||
| @SNMP::Info::IEEE802dot11::EXPORT_OK = qw//; | @SNMP::Info::IEEE802dot11::EXPORT_OK = qw//; | ||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', ); | %MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', ); | ||||||
| 
 | 
 | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| # SNMP::Info::IEEE802dot3ad | # SNMP::Info::IEEE802dot3ad | ||||||
| # | # | ||||||
| # Copyright (c) 2014 SNMP::Info Developers | # Copyright (c) 2018 SNMP::Info Developers | ||||||
| # All rights reserved. | # All rights reserved. | ||||||
| # | # | ||||||
| # Redistribution and use in source and binary forms, with or without | # Redistribution and use in source and binary forms, with or without | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info::Aggregate; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|   %SNMP::Info::Aggregate::MIBS, |   %SNMP::Info::Aggregate::MIBS, | ||||||
| @@ -52,29 +52,40 @@ $VERSION = '3.22'; | |||||||
| 
 | 
 | ||||||
| %GLOBALS = (); | %GLOBALS = (); | ||||||
| 
 | 
 | ||||||
| %FUNCS = (); | %FUNCS = ( | ||||||
|  |   'ad_lag_ports'    => 'dot3adAggPortListPorts', | ||||||
|  |  ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = (); | %MUNGE = ( | ||||||
|  |   'ad_lag_ports' => \&SNMP::Info::munge_port_list, | ||||||
|  |  ); | ||||||
| 
 | 
 | ||||||
| sub agg_ports_lag { | sub agg_ports_lag { | ||||||
|   my $dev = shift; |   my $dev = shift; | ||||||
| 
 | 
 | ||||||
|   # TODO: implement partial |   # TODO: implement partial | ||||||
|   my $masters = $dev->dot3adAggActorOperKey; |   my $ports  = $dev->ad_lag_ports(); | ||||||
|   my $slaves  = $dev->dot3adAggPortActorOperKey; |   my $index  = $dev->bp_index() || {}; | ||||||
| 
 | 
 | ||||||
|   return {} unless |   return {} unless ref {} eq ref $ports and scalar keys %$ports; | ||||||
|     ref {} eq ref $masters and scalar keys %$masters |  | ||||||
|     and ref {} eq ref $slaves and scalar keys %$slaves; |  | ||||||
| 
 | 
 | ||||||
|   my $ret = {}; |   my $ret = {}; | ||||||
|   foreach my $s (keys %$slaves) { |   foreach my $m ( keys %$ports ) { | ||||||
|       next if $slaves->{$s} == 0; |     my $idx = $m; | ||||||
|       foreach my $m (keys %$masters) { |     my $portlist = $ports->{$m}; | ||||||
|           next unless $masters->{$m} == $slaves->{$s}; |     next unless $portlist; | ||||||
|           $ret->{$s} = $m; | 
 | ||||||
|           last; |     # While dot3adAggTable is indexed by ifIndex, the portlist is indexed | ||||||
|  |     # with a dot1dBasePort, so we need to use dot1dBasePortIfIndex to map to | ||||||
|  |     # the ifIndex. If we don't have dot1dBasePortIfIndex assume | ||||||
|  |     # dot1dBasePort = ifIndex | ||||||
|  |     for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) { | ||||||
|  |       my $ifindex = $i+1; | ||||||
|  |       if ( exists($index->{$i+1}) and defined($index->{$i+1}) ) { | ||||||
|  |         $ifindex = $index->{$i+1};        | ||||||
|       } |       } | ||||||
|  |       $ret->{$ifindex} = $idx if ( @$portlist[$i] ); | ||||||
|  |     }    | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return $ret; |   return $ret; | ||||||
| @@ -44,7 +44,7 @@ use constant { | |||||||
|     IPV6MIB => 3, |     IPV6MIB => 3, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -67,20 +67,24 @@ $VERSION = '3.22'; | |||||||
| 
 | 
 | ||||||
|     'ip_n2p_phys_state' => 'ipNetToPhysicalState',          # IP-MIB |     'ip_n2p_phys_state' => 'ipNetToPhysicalState',          # IP-MIB | ||||||
|     'c_inet_phys_state' => 'cInetNetToMediaState',          # CISCO-IETF-IP-MIB |     'c_inet_phys_state' => 'cInetNetToMediaState',          # CISCO-IETF-IP-MIB | ||||||
|     'i6_n2p_phys_state' => 'ipv6NetToMediaState',           # IPV6-MIB |     'i6_n2p_phys_state' => 'ipv6IfNetToMediaState',         # IPV6-MIB | ||||||
| 
 | 
 | ||||||
|     'ip_pfx_origin'     => 'ipAddressPrefixOrigin',         # IP-MIB |     'ip_pfx_origin'     => 'ipAddressPrefixOrigin',         # IP-MIB | ||||||
|     'c_pfx_origin'      => 'cIpAddressPfxOrigin',           # CISCO-IETF-IP-MIB  |     'c_pfx_origin'      => 'cIpAddressPfxOrigin',           # CISCO-IETF-IP-MIB  | ||||||
| 
 | 
 | ||||||
|     'ip_addr6_pfx'      => 'ipAddressPrefix',              # IP-MIB  |     'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB | ||||||
|     'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB  |     'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB  | ||||||
| 
 | 
 | ||||||
|     'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIBw |     # Commented out are not-accessible according to MIB | ||||||
|  |     #'ip_addr6_pfxlen'   => 'ipAddressPrefixLength',        # IP-MIB | ||||||
|  |     #'c_addr6_pfxlen'    => 'cIpAddressPfxLength',          # CISCO-IETF-IP-MIB | ||||||
|  |     'i6_addr_pfxlen'    => 'ipv6AddrPfxLength',             # IPV6-MIB | ||||||
|  | 
 | ||||||
|  |     'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIB | ||||||
|     'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB  |     'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB  | ||||||
| 
 | 
 | ||||||
|     'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB |     'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB | ||||||
|     'c_addr6_type'      => 'cIpAddressType',                # CISCO-IETF-IP-MIB |     'c_addr6_type'      => 'cIpAddressType',                # CISCO-IETF-IP-MIB | ||||||
|      |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( | %MUNGE = ( | ||||||
| @@ -142,6 +146,12 @@ sub ipv6_n2p_addr { | |||||||
|                     # so what we've collected in that variable is actually the first byte of the address. |                     # so what we've collected in that variable is actually the first byte of the address. | ||||||
|                     $v6_packed = pack('C', $addrsize) . $v6_packed; |                     $v6_packed = pack('C', $addrsize) . $v6_packed; | ||||||
|                 } |                 } | ||||||
|  |                 if (length($v6_packed) == 17) { | ||||||
|  |                     # Workaround for IPV6-MIB on Windows 2012: if the address is one byte too long, the SNMP agent probably has an incorrect | ||||||
|  |                     # implementation where a length field precedes the actual IPv6 address. | ||||||
|  |                     # In that case, the first character should be chr(16), ie 0x10; strip it if that's the case. | ||||||
|  |                     $v6_packed =~ s/^\x10//; | ||||||
|  |                 } | ||||||
|                 if (length($v6_packed) == 16) { |                 if (length($v6_packed) == 16) { | ||||||
|                     $v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) ); |                     $v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) ); | ||||||
|                     $return->{$row} = $v6addr; |                     $return->{$row} = $v6addr; | ||||||
| @@ -307,7 +317,9 @@ sub ipv6_addr_prefix { | |||||||
|     foreach my $row (keys %$ipv6_addr_prefix){ |     foreach my $row (keys %$ipv6_addr_prefix){ | ||||||
|         if ($row =~ /^(\d+)\.[\d\.]+$/) { |         if ($row =~ /^(\d+)\.[\d\.]+$/) { | ||||||
|             my $type = $1; |             my $type = $1; | ||||||
|             if ($type == 2) { # IPv6 | 	    if (($type == 2) or ($type == 4)) { # IPv6 | ||||||
|  | 		# Remove interface specific part from vrf interfaces | ||||||
|  | 		if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 } | ||||||
| 		# Remove the OID part from the value | 		# Remove the OID part from the value | ||||||
| 		my $val = $ipv6_addr_prefix->{$row}; | 		my $val = $ipv6_addr_prefix->{$row}; | ||||||
| 		if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){ | 		if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){ | ||||||
| @@ -321,9 +333,60 @@ sub ipv6_addr_prefix { | |||||||
|     return $return; |     return $return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub ipv6_addr_prefixlength { | ||||||
|  |     my $info = shift; | ||||||
|  |     my $return; | ||||||
|  |     my $ipv6_addr_prefix = &_test_methods( $info, { | ||||||
|  |         ip_addr6_pfx  => IPMIB, | ||||||
|  |         c_addr6_pfx   => CISCO, | ||||||
|  |     }); | ||||||
|  |     return unless defined $ipv6_addr_prefix; | ||||||
|  |     foreach my $row (keys %$ipv6_addr_prefix) { | ||||||
|  |         if ($row =~ /^(\d+)\.[\d\.]+$/) { | ||||||
|  |             my $type = $1; | ||||||
|  |             if (($type == 2) or ($type == 4)) { # IPv6 | ||||||
|  |                 # Remove interface specific part from vrf interfaces | ||||||
|  |                 if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 } | ||||||
|  |                 # Remove the OID part from the value | ||||||
|  |                 my $val = $ipv6_addr_prefix->{$row}; | ||||||
|  |                 if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) { | ||||||
|  |                     $val = $2; | ||||||
|  |                     $return->{$row} = $val; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug(); | ||||||
|  |     return $return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub ipv6_addr { | ||||||
|  |     my $info = shift; | ||||||
|  |     my $return; | ||||||
|  |     my $indexes = $info->ipv6_index(); | ||||||
|  |     foreach my $row (keys %$indexes) { | ||||||
|  |         my @parts = split(/\./, $row); | ||||||
|  |         my $is_valid = 0; | ||||||
|  |         if (scalar @parts == 18) { | ||||||
|  |             my $addrtype = shift @parts; | ||||||
|  |             $is_valid = 1; | ||||||
|  |         } elsif (scalar @parts == 17) { | ||||||
|  |             $is_valid = 1; | ||||||
|  |         } | ||||||
|  |         my $addrsize = shift @parts; # First element now is addrsize, should be 16 | ||||||
|  |         if ($is_valid && $addrsize == 16) { | ||||||
|  |             $return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts))); | ||||||
|  |         } else { | ||||||
|  |             warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return $return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| sub _method_used { | sub _method_used { | ||||||
|     my $info = shift; |     my $info = shift; | ||||||
|     my $return = 'none of the MIBs'; |     my $return = 'none of the MIBs'; | ||||||
|  |     # FIXME ugh! a global. makes order of calls important for debug. | ||||||
|     if (defined $info::METHOD) { |     if (defined $info::METHOD) { | ||||||
|         if ($info::METHOD eq IPMIB) { |         if ($info::METHOD eq IPMIB) { | ||||||
|             $return = 'IP-MIB'; |             $return = 'IP-MIB'; | ||||||
| @@ -343,6 +406,7 @@ sub _test_methods { | |||||||
|     foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) { |     foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) { | ||||||
|         $return = $info->$method || {}; |         $return = $info->$method || {}; | ||||||
|         if (scalar keys %$return) { |         if (scalar keys %$return) { | ||||||
|  |             # FIXME ugh! a global. makes order of calls important for debug. | ||||||
|             $info::METHOD = $test->{$method}; |             $info::METHOD = $test->{$method}; | ||||||
|             last; |             last; | ||||||
|         } |         } | ||||||
| @@ -459,6 +523,14 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.) | |||||||
| 
 | 
 | ||||||
| Maps IPv6 addresses with their prefixes | Maps IPv6 addresses with their prefixes | ||||||
| 
 | 
 | ||||||
|  | =item $info->ipv6_addr_prefixlength() | ||||||
|  | 
 | ||||||
|  | Maps IPv6 addresses with their prefix length | ||||||
|  | 
 | ||||||
|  | =item $info->ipv6_addr() | ||||||
|  | 
 | ||||||
|  | Maps a table instance to an IPv6 address | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2  Internet Address Translation Table | =head2  Internet Address Translation Table | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| # SNMP::Info::LLDP | # SNMP::Info::LLDP | ||||||
| # $Id$ | # $Id$ | ||||||
| # | # | ||||||
| # Copyright (c) 2008 Eric Miller | # Copyright (c) 2018 Eric Miller | ||||||
| # All rights reserved. | # All rights reserved. | ||||||
| # | # | ||||||
| # Redistribution and use in source and binary forms, with or without | # Redistribution and use in source and binary forms, with or without | ||||||
| @@ -39,10 +39,11 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     'LLDP-MIB'          => 'lldpLocSysCapEnabled', |     'LLDP-MIB'          => 'lldpLocSysCapEnabled', | ||||||
|  |     'LLDP-EXT-MED-MIB'  => 'lldpXMedMIB', | ||||||
|     'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB', |     'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB', | ||||||
|     'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB', |     'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB', | ||||||
| ); | ); | ||||||
| @@ -69,6 +70,18 @@ $VERSION = '3.22'; | |||||||
|     'lldp_rem_sys_cap'  => 'lldpRemSysCapEnabled', |     'lldp_rem_sys_cap'  => 'lldpRemSysCapEnabled', | ||||||
|     'lldp_rem_cap_spt'  => 'lldpRemSysCapSupported', |     'lldp_rem_cap_spt'  => 'lldpRemSysCapSupported', | ||||||
| 
 | 
 | ||||||
|  |     # LLDP-MIB::lldpXMedRemInventoryTable | ||||||
|  |     'lldp_rem_hw_rev' => 'lldpXMedRemHardwareRev', | ||||||
|  |     'lldp_rem_fw_rev' => 'lldpXMedRemFirmwareRev', | ||||||
|  |     'lldp_rem_sw_rev' => 'lldpXMedRemSoftwareRev', | ||||||
|  |     'lldp_rem_serial' => 'lldpXMedRemSerialNum', | ||||||
|  |     'lldp_rem_vendor' => 'lldpXMedRemMfgName', | ||||||
|  |     'lldp_rem_model'  => 'lldpXMedRemModelName', | ||||||
|  |     'lldp_rem_asset'  => 'lldpXMedRemAssetID', | ||||||
|  | 
 | ||||||
|  |     'lldp_rem_media_cap'     => 'lldpXMedRemCapCurrent', | ||||||
|  |     'lldp_rem_media_cap_spt' => 'lldpXMedRemCapSupported', | ||||||
|  | 
 | ||||||
|     # LLDP-MIB::lldpRemManAddrTable |     # LLDP-MIB::lldpRemManAddrTable | ||||||
|     'lldp_rman_addr' => 'lldpRemManAddrIfSubtype', |     'lldp_rman_addr' => 'lldpRemManAddrIfSubtype', | ||||||
| ); | ); | ||||||
| @@ -82,6 +95,17 @@ $VERSION = '3.22'; | |||||||
|     'lldp_sys_cap'       => \&SNMP::Info::munge_bits, |     'lldp_sys_cap'       => \&SNMP::Info::munge_bits, | ||||||
|     'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits, |     'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits, | ||||||
|     'lldp_rem_cap_spt'   => \&SNMP::Info::munge_bits, |     'lldp_rem_cap_spt'   => \&SNMP::Info::munge_bits, | ||||||
|  | 
 | ||||||
|  |     'lldp_rem_hw_rev' => \&SNMP::Info::munge_null, | ||||||
|  |     'lldp_rem_fw_rev' => \&SNMP::Info::munge_null, | ||||||
|  |     'lldp_rem_sw_rev' => \&SNMP::Info::munge_null, | ||||||
|  |     'lldp_rem_serial' => \&SNMP::Info::munge_null, | ||||||
|  |     'lldp_rem_vendor' => \&SNMP::Info::munge_null, | ||||||
|  |     'lldp_rem_model'  => \&SNMP::Info::munge_null, | ||||||
|  |     'lldp_rem_asset'  => \&SNMP::Info::munge_null, | ||||||
|  | 
 | ||||||
|  |     'lldp_rem_media_cap'     => \&SNMP::Info::munge_bits, | ||||||
|  |     'lldp_rem_media_cap_spt' => \&SNMP::Info::munge_bits, | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| sub hasLLDP { | sub hasLLDP { | ||||||
| @@ -92,7 +116,8 @@ sub hasLLDP { | |||||||
|     my $lldp_cap = $lldp->lldp_sys_cap(); |     my $lldp_cap = $lldp->lldp_sys_cap(); | ||||||
|     return 1 if defined $lldp_cap; |     return 1 if defined $lldp_cap; | ||||||
| 
 | 
 | ||||||
|     # If the device doesn't return local system capabilities, fallback by checking if it would report neighbors |     # If the device doesn't return local system capabilities, fallback | ||||||
|  |     # by checking if it would report neighbors | ||||||
|     my $lldp_rem = $lldp->lldp_rem_id() || {}; |     my $lldp_rem = $lldp->lldp_rem_id() || {}; | ||||||
|     return 1 if scalar keys %$lldp_rem; |     return 1 if scalar keys %$lldp_rem; | ||||||
| 
 | 
 | ||||||
| @@ -114,13 +139,18 @@ sub lldp_if { | |||||||
|         my @aOID = split( '\.', $key ); |         my @aOID = split( '\.', $key ); | ||||||
|         my $port = $aOID[1]; |         my $port = $aOID[1]; | ||||||
|         next unless $port; |         next unless $port; | ||||||
|         # Local LLDP port may not equate to ifIndex, see LldpPortNumber TEXTUAL-CONVENTION in LLDP-MIB. | 
 | ||||||
|         # Cross reference lldpLocPortDesc with ifDescr and ifAlias to get ifIndex, |         # Local LLDP port may not equate to ifIndex, see LldpPortNumber | ||||||
|         # prefer ifDescr over ifAlias because using cross ref with description is correct behavior  |         # TEXTUAL-CONVENTION in LLDP-MIB. Cross reference lldpLocPortDesc  | ||||||
|         # according to the LLDP-MIB. Some devices (eg H3C gear) seem to use ifAlias though. |         # with ifDescr and ifAlias to get ifIndex, prefer ifDescr over | ||||||
|  |         # ifAlias because using cross ref with description is correct | ||||||
|  |         # behavior according to the LLDP-MIB. Some devices (eg H3C gear) | ||||||
|  |         # seem to use ifAlias though. | ||||||
|         my $lldp_desc = $lldp->lldpLocPortDesc($port); |         my $lldp_desc = $lldp->lldpLocPortDesc($port); | ||||||
|         my $desc      = $lldp_desc->{$port}; |         my $desc      = $lldp_desc->{$port}; | ||||||
|         # If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum | 
 | ||||||
|  |         # If cross reference is successful use it, otherwise stick with | ||||||
|  |         # lldpRemLocalPortNum | ||||||
|         if ( $desc && exists $r_i_descr{$desc} ) { |         if ( $desc && exists $r_i_descr{$desc} ) { | ||||||
|             $port = $r_i_descr{$desc}; |             $port = $r_i_descr{$desc}; | ||||||
|         } |         } | ||||||
| @@ -141,7 +171,7 @@ sub lldp_ip { | |||||||
| 
 | 
 | ||||||
|     my %lldp_ip; |     my %lldp_ip; | ||||||
|     foreach my $key ( keys %$rman_addr ) { |     foreach my $key ( keys %$rman_addr ) { | ||||||
|         my ( $index, $proto, $addr ) = _lldp_addr_index($key); |         my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key); | ||||||
|         next unless defined $index; |         next unless defined $index; | ||||||
|         next unless $proto == 1; |         next unless $proto == 1; | ||||||
|         $lldp_ip{$index} = $addr; |         $lldp_ip{$index} = $addr; | ||||||
| @@ -149,6 +179,38 @@ sub lldp_ip { | |||||||
|     return \%lldp_ip; |     return \%lldp_ip; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub lldp_ipv6 { | ||||||
|  |     my $lldp    = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  | 
 | ||||||
|  |     my $rman_addr = $lldp->lldp_rman_addr($partial) || {}; | ||||||
|  | 
 | ||||||
|  |     my %lldp_ipv6; | ||||||
|  |     foreach my $key ( keys %$rman_addr ) { | ||||||
|  |         my ( $index, $proto, $addr ) = $lldp->_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->_lldp_addr_index($key); | ||||||
|  |         next unless defined $index; | ||||||
|  |         next unless $proto == 6; | ||||||
|  |         $lldp_ipv6{$index} = $addr; | ||||||
|  |     } | ||||||
|  |     return \%lldp_ipv6; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| sub lldp_addr { | sub lldp_addr { | ||||||
|     my $lldp    = shift; |     my $lldp    = shift; | ||||||
|     my $partial = shift; |     my $partial = shift; | ||||||
| @@ -157,7 +219,7 @@ sub lldp_addr { | |||||||
| 
 | 
 | ||||||
|     my %lldp_ip; |     my %lldp_ip; | ||||||
|     foreach my $key ( keys %$rman_addr ) { |     foreach my $key ( keys %$rman_addr ) { | ||||||
|         my ( $index, $proto, $addr ) = _lldp_addr_index($key); |         my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key); | ||||||
|         next unless defined $index; |         next unless defined $index; | ||||||
|         $lldp_ip{$index} = $addr; |         $lldp_ip{$index} = $addr; | ||||||
|     } |     } | ||||||
| @@ -177,7 +239,10 @@ sub lldp_port { | |||||||
|     foreach my $key ( sort keys %$pid ) { |     foreach my $key ( sort keys %$pid ) { | ||||||
|         my $port = $pdesc->{$key}; |         my $port = $pdesc->{$key}; | ||||||
|         my $type = $ptype->{$key}; |         my $type = $ptype->{$key}; | ||||||
|         if ( $type and $type eq 'interfaceName' ) { |         if (    $type | ||||||
|  |             and ( $type eq 'interfaceName' or $type eq 'local' ) | ||||||
|  |             and ( defined $pid->{$key} and $pid->{$key} !~ /^\d+$/ ) ) | ||||||
|  |         { | ||||||
| 
 | 
 | ||||||
|             # If the pid claims to be an interface name, |             # If the pid claims to be an interface name, | ||||||
|             # believe it. |             # believe it. | ||||||
| @@ -190,8 +255,7 @@ sub lldp_port { | |||||||
| 
 | 
 | ||||||
|           # May need to format other types in the future, i.e. Network address |           # May need to format other types in the future, i.e. Network address | ||||||
|             if ( $type =~ /mac/ ) { |             if ( $type =~ /mac/ ) { | ||||||
|                 $port = join( ':', |                 $port = SNMP::Info::munge_mac($port) | ||||||
|                     map { sprintf "%02x", $_ } unpack( 'C*', $port ) ); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @@ -226,12 +290,13 @@ sub lldp_id { | |||||||
| 
 | 
 | ||||||
|         # May need to format other types in the future |         # May need to format other types in the future | ||||||
|         if ( $type =~ /mac/ ) { |         if ( $type =~ /mac/ ) { | ||||||
|             $id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) ); |             $id = SNMP::Info::munge_mac($id) | ||||||
|         } |         } | ||||||
|         elsif ( $type eq 'networkAddress' ) { |         elsif ( $type eq 'networkAddress' ) { | ||||||
|             if ( length( unpack( 'H*', $id ) ) == 10 ) { |             if ( length( unpack( 'H*', $id ) ) == 10 ) { | ||||||
| 
 | 
 | ||||||
|                 # IP address (first octet is sign, I guess) |                 # IP address - first octet is IANA Address Family Number, need | ||||||
|  |                 # walk with IPv6 | ||||||
|                 my @octets |                 my @octets | ||||||
|                     = ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) ) |                     = ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) ) | ||||||
|                     [ 1 .. 4 ]; |                     [ 1 .. 4 ]; | ||||||
| @@ -267,7 +332,41 @@ sub lldp_cap { | |||||||
|     # Encoded as BITS which Perl Net-SNMP implementation doesn't seem to |     # Encoded as BITS which Perl Net-SNMP implementation doesn't seem to | ||||||
|     # be able to enumerate for us, so we have to get it from the MIB |     # be able to enumerate for us, so we have to get it from the MIB | ||||||
|     # and enumerate ourselves |     # and enumerate ourselves | ||||||
|     my $oid = SNMP::translateObj( 'lldpRemSysCapEnabled', 0, 1 ) || ''; |     my $oid | ||||||
|  |         = SNMP::translateObj( 'LLDP-MIB::lldpRemSysCapEnabled', 0, 1 ) || ''; | ||||||
|  |     my $enums = ( | ||||||
|  |         ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} ) | ||||||
|  |         ? $SNMP::MIB{$oid}{'enums'} | ||||||
|  |         : {} | ||||||
|  |     ); | ||||||
|  |     my %r_enums = reverse %$enums; | ||||||
|  | 
 | ||||||
|  |     my %lldp_cap; | ||||||
|  |     foreach my $key ( keys %$lldp_caps ) { | ||||||
|  |         my $cap_bits = $lldp_caps->{$key}; | ||||||
|  |         next unless $cap_bits; | ||||||
|  | 
 | ||||||
|  |         my $count = 0; | ||||||
|  |         foreach my $bit ( split //, $cap_bits ) { | ||||||
|  |             if ($bit) { | ||||||
|  |                 push( @{ $lldp_cap{$key} }, $r_enums{$count} ); | ||||||
|  |             } | ||||||
|  |             $count++; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return \%lldp_cap; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub lldp_media_cap { | ||||||
|  |     my $lldp    = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  | 
 | ||||||
|  |     my $lldp_caps = $lldp->lldp_rem_media_cap_spt($partial) || {}; | ||||||
|  | 
 | ||||||
|  |     # Encoded as BITS which Perl Net-SNMP implementation doesn't seem to | ||||||
|  |     # be able to enumerate for us, so we have to get it from the MIB | ||||||
|  |     # and enumerate ourselves | ||||||
|  |     my $oid = SNMP::translateObj( 'lldpXMedRemCapCurrent', 0, 1 ) || ''; | ||||||
|     my $enums = ( |     my $enums = ( | ||||||
|         ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} ) |         ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} ) | ||||||
|         ? $SNMP::MIB{$oid}{'enums'} |         ? $SNMP::MIB{$oid}{'enums'} | ||||||
| @@ -312,24 +411,32 @@ sub lldp_cap { | |||||||
| # Break up the lldpRemManAddrTable INDEX into common index, protocol, | # Break up the lldpRemManAddrTable INDEX into common index, protocol, | ||||||
| # and address. | # and address. | ||||||
| sub _lldp_addr_index { | sub _lldp_addr_index { | ||||||
|     my $idx    = shift; |     my $lldp = shift; | ||||||
|     my @oids   = split( /\./, $idx ); |     my $idx  = shift; | ||||||
|     my $index  = join( '.', splice( @oids, 0, 3 ) ); | 
 | ||||||
|     my $proto  = shift(@oids); |     my @oids = split( /\./, $idx ); | ||||||
|     shift(@oids) if scalar @oids > 4; # $length |     my $index = join( '.', splice( @oids, 0, 3 ) ); | ||||||
|  |     my $proto = shift(@oids); | ||||||
|  |     shift(@oids) if scalar @oids > 4;    # $length | ||||||
| 
 | 
 | ||||||
|     # IPv4 |     # IPv4 | ||||||
|     if ( $proto == 1 ) { |     if ( $proto == 1 ) { | ||||||
|         return ( $index, $proto, join( '.', @oids ) ); |         return ( $index, $proto, join( '.', @oids ) ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     # IPv6 | ||||||
|  |     elsif ( $proto == 2 ) { | ||||||
|  |         return ( $index, $proto, | ||||||
|  |             join( ':', unpack( '(H4)*', pack( 'C*', @oids ) ) ) ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     # MAC |     # MAC | ||||||
|     elsif ( $proto == 6 ) { |     elsif ( $proto == 6 ) { | ||||||
|         return ( $index, $proto, |         return ( $index, $proto, | ||||||
|             join( ':', map { sprintf "%02x", $_ } @oids ) ); |             join( ':', map { sprintf "%02x", $_ } @oids ) ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     # TODO - Need to handle other protocols, i.e. IPv6 |     # TODO - Other protocols may be used as well; implement when needed? | ||||||
|     else { |     else { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @@ -397,6 +504,8 @@ None. | |||||||
| 
 | 
 | ||||||
| =item F<LLDP-MIB> | =item F<LLDP-MIB> | ||||||
| 
 | 
 | ||||||
|  | =item F<LLDP-EXT-MED-MIB> | ||||||
|  | 
 | ||||||
| =item F<LLDP-EXT-DOT1-MIB> | =item F<LLDP-EXT-DOT1-MIB> | ||||||
| 
 | 
 | ||||||
| =item F<LLDP-EXT-DOT3-MIB> | =item F<LLDP-EXT-DOT3-MIB> | ||||||
| @@ -495,10 +604,24 @@ if unable defaults to (C<lldpRemLocalPortNum>). | |||||||
| Returns remote IPv4 address.  Returns for all other address types, use | Returns remote IPv4 address.  Returns for all other address types, use | ||||||
| lldp_addr if you want any return address type. | lldp_addr if you want any return address type. | ||||||
| 
 | 
 | ||||||
|  | =item  $lldp->lldp_ipv6() | ||||||
|  | 
 | ||||||
|  | Returns remote IPv6 address, if known.  Returns for all other address types, | ||||||
|  | use lldp_addr if you don't care about return address type. | ||||||
|  | 
 | ||||||
|  | =item  $lldp->lldp_mac() | ||||||
|  | 
 | ||||||
|  | Returns remote (management) MAC address, if known.  Returns for all other  | ||||||
|  | address types, use lldp_addr if you don't care about return address type. | ||||||
|  | 
 | ||||||
| =item  $lldp->lldp_addr() | =item  $lldp->lldp_addr() | ||||||
| 
 | 
 | ||||||
| Returns remote address.  Type may be any IANA Address Family Number. | Returns remote address.  Type may be any IANA Address Family Number. | ||||||
| Currently only returns IPv4 or MAC addresses. | Currently only returns IPv4, IPv6 or MAC addresses. If the remote device | ||||||
|  | returns more than one address type, this method will give only one. Which one | ||||||
|  | is returned is decided by chance, phase of the moon and Perl hash ordering. | ||||||
|  | 
 | ||||||
|  | Use lldp_mac, lldp_ip or lldp_ipv6 if you want a specific address type. | ||||||
| 
 | 
 | ||||||
| =item $lldp->lldp_port() | =item $lldp->lldp_port() | ||||||
| 
 | 
 | ||||||
| @@ -515,6 +638,12 @@ Returns hash of arrays with each array containing the system capabilities | |||||||
| supported by the remote system.  Possible elements in the array are | supported by the remote system.  Possible elements in the array are | ||||||
| enumerated from C<LldpSystemCapabilitiesMap>. | enumerated from C<LldpSystemCapabilitiesMap>. | ||||||
| 
 | 
 | ||||||
|  | =item  $lldp->lldp_media_cap()  | ||||||
|  | 
 | ||||||
|  | Returns hash of arrays with each array containing the media capabilities | ||||||
|  | supported by the remote system.  Possible elements in the array are | ||||||
|  | enumerated from C<LldpXMedCapabilities>. | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 LLDP Remote Table (C<lldpRemTable>) | =head2 LLDP Remote Table (C<lldpRemTable>) | ||||||
| @@ -530,7 +659,7 @@ the remote system. | |||||||
| 
 | 
 | ||||||
| =item $lldp->lldp_rem_id() | =item $lldp->lldp_rem_id() | ||||||
| 
 | 
 | ||||||
| Returns the string value used to identify the chassis component    associated | Returns the string value used to identify the chassis component associated | ||||||
| with the remote system. | with the remote system. | ||||||
| 
 | 
 | ||||||
| (C<lldpRemChassisId>) | (C<lldpRemChassisId>) | ||||||
| @@ -576,6 +705,65 @@ Nulls are removed before the value is returned. | |||||||
| 
 | 
 | ||||||
| (C<lldpRemSysDesc>) | (C<lldpRemSysDesc>) | ||||||
| 
 | 
 | ||||||
|  | =item $lldp->lldp_rem_hw_rev() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the hardware revision of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemHardwareRev>) | ||||||
|  | 
 | ||||||
|  | =item $lldp->lldp_rem_fw_rev() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the firmware revision of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemHardwareRev>) | ||||||
|  | 
 | ||||||
|  | =item $lldp->lldp_rem_sw_rev() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the software revision of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemSoftwareRev>) | ||||||
|  | 
 | ||||||
|  | =item $lldp->lldp_rem_serial() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the serial number of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemSerialNum>) | ||||||
|  | 
 | ||||||
|  | =item $lldp->lldp_rem_vendor() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the manufacturer of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemMfgName>) | ||||||
|  | 
 | ||||||
|  | =item $lldp->lldp_rem_asset() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the asset number of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemAssetID>) | ||||||
|  | 
 | ||||||
|  | =item $lldp->lldp_rem_model() | ||||||
|  | 
 | ||||||
|  | Returns the string value used to identify the model of the | ||||||
|  | remote system. Nulls are removed before the value is returned.  | ||||||
|  | 
 | ||||||
|  | (C<lldpXMedRemModelName>) | ||||||
|  | 
 | ||||||
|  | =item  $lldp->lldp_rem_media_cap_spt()  | ||||||
|  | 
 | ||||||
|  | Returns which media capabilities are supported on the remote system. Results | ||||||
|  | are munged into an ascii binary string, LSB. | ||||||
|  | 
 | ||||||
|  | =item  $lldp->lldp_rem_media_cap()  | ||||||
|  | 
 | ||||||
|  | Returns which media capabilities are enabled on the remote system. Results | ||||||
|  | are munged into an ascii binary string, LSB. | ||||||
|  | 
 | ||||||
| =item  $lldp->lldp_rem_sys_cap()  | =item  $lldp->lldp_rem_sys_cap()  | ||||||
| 
 | 
 | ||||||
| Returns which system capabilities are enabled on the remote system.  Results | Returns which system capabilities are enabled on the remote system.  Results | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' ); | %MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' ); | ||||||
| 
 | 
 | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info::Layer1; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # Set for No CDP | # Set for No CDP | ||||||
| %GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', ); | %GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', ); | ||||||
| @@ -71,6 +71,7 @@ sub os_ver { | |||||||
|     if ( $descr =~ m/version (\d+\.\d+)/ ) { |     if ( $descr =~ m/version (\d+\.\d+)/ ) { | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub model { | sub model { | ||||||
| @@ -78,7 +79,7 @@ sub model { | |||||||
| 
 | 
 | ||||||
|     my $desc = $allied->description(); |     my $desc = $allied->description(); | ||||||
| 
 | 
 | ||||||
|     if ( $desc =~ /(AT-\d{4}\S{1}?)/ ) { |     if ( $desc =~ /(AT-\d{4}\S{1})/ ) { | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
|     return; |     return; | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info::Layer1; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # Set for No CDP | # Set for No CDP | ||||||
| %GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, ); | %GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, ); | ||||||
| @@ -50,11 +50,11 @@ $VERSION = '3.22'; | |||||||
|     %SNMP::Info::Layer1::FUNCS, |     %SNMP::Info::Layer1::FUNCS, | ||||||
|     'asante_port'  => 'ePortIndex', |     'asante_port'  => 'ePortIndex', | ||||||
|     'asante_group' => 'ePortGrpIndex', |     'asante_group' => 'ePortGrpIndex', | ||||||
|     'i_type'       => 'ePortStateType', |     'i_type'       => 'ePortGrpIndex', | ||||||
|     'asante_up'    => 'ePortStateLinkStatus', |     'asante_up'    => 'ePortStateLinkStatus', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-HUB1012-MIB' => 'asante' ); | %MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-AH1012-MIB' => 'asante' ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( %SNMP::Info::Layer1::MUNGE, ); | %MUNGE = ( %SNMP::Info::Layer1::MUNGE, ); | ||||||
| 
 | 
 | ||||||
| @@ -84,6 +84,7 @@ sub os_ver { | |||||||
|     if ( $descr =~ /software v(\d+\.\d+)/ ) { |     if ( $descr =~ /software v(\d+\.\d+)/ ) { | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub vendor { | sub vendor { | ||||||
| @@ -94,7 +95,7 @@ sub model { | |||||||
|     my $asante = shift; |     my $asante = shift; | ||||||
| 
 | 
 | ||||||
|     my $id    = $asante->id(); |     my $id    = $asante->id(); | ||||||
|     my $model = &SNMP::translateObj($id); |     my $model = SNMP::translateObj($id); | ||||||
| 
 | 
 | ||||||
|     return $model; |     return $model; | ||||||
| } | } | ||||||
| @@ -108,8 +109,8 @@ sub i_up { | |||||||
|     my $i_up = {}; |     my $i_up = {}; | ||||||
|     foreach my $port ( keys %$asante_up ) { |     foreach my $port ( keys %$asante_up ) { | ||||||
|         my $up = $asante_up->{$port}; |         my $up = $asante_up->{$port}; | ||||||
|         $i_up->{$port} = 'down' if $up =~ /on/; |         $i_up->{$port} = 'down' if $up =~ /off/; | ||||||
|         $i_up->{$port} = 'up'   if $up =~ /off/; |         $i_up->{$port} = 'up'   if $up =~ /on/; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return $i_up; |     return $i_up; | ||||||
| @@ -149,7 +150,7 @@ sub i_name { | |||||||
|     my $asante  = shift; |     my $asante  = shift; | ||||||
|     my $partial = shift; |     my $partial = shift; | ||||||
| 
 | 
 | ||||||
|     my $i_name = $asante->orig_i_descr($partial) || {}; |     my $i_name = $asante->orig_i_description($partial) || {}; | ||||||
| 
 | 
 | ||||||
|     my %i_name; |     my %i_name; | ||||||
| 
 | 
 | ||||||
| @@ -202,7 +203,7 @@ Asante device through SNMP. | |||||||
| 
 | 
 | ||||||
| =over | =over | ||||||
| 
 | 
 | ||||||
| =item F<ASANTE-HUB1012-MIB> | =item F<ASANTE-AH1012-MIB> | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -230,7 +231,7 @@ Returns 'asante' :) | |||||||
| 
 | 
 | ||||||
| =item $asante->model() | =item $asante->model() | ||||||
| 
 | 
 | ||||||
| Cross references $asante->id() to the F<ASANTE-HUB1012-MIB> and returns | Cross references $asante->id() to the F<ASANTE-AH1012-MIB> and returns | ||||||
| the results. | the results. | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| @@ -42,7 +42,7 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, |     %SNMP::Info::Layer2::MIBS, | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| # SNMP::Info::Layer1::Cyclades | # SNMP::Info::Layer1::Cyclades | ||||||
| # $Id$ | # $Id$ | ||||||
| # | # | ||||||
| # Copyright (c) 2008 Eric Miller | # Copyright (c) 2018 Eric Miller | ||||||
| # All rights reserved. | # All rights reserved. | ||||||
| # | # | ||||||
| # Redistribution and use in source and binary forms, with or without | # Redistribution and use in source and binary forms, with or without | ||||||
| @@ -39,38 +39,105 @@ use SNMP::Info::Layer1; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer1::MIBS, |     %SNMP::Info::Layer1::MIBS, | ||||||
|     'CYCLADES-ACS-SYS-MIB'  => 'cyACSversion', |     'CYCLADES-ACS-SYS-MIB'    => 'cyACSversion', | ||||||
|     'CYCLADES-ACS-CONF-MIB' => 'cyEthIPaddr', |     'CYCLADES-ACS5K-SYS-MIB'  => 'cyACS5Kversion', | ||||||
|     'CYCLADES-ACS-INFO-MIB' => 'cyISPortTty', |     'CYCLADES-ACS-CONF-MIB'   => 'cyACSConf', | ||||||
|  |     'CYCLADES-ACS5K-CONF-MIB' => 'cyACS5KConf', | ||||||
|  |     'CYCLADES-ACS-INFO-MIB'   => 'cyACSInfo', | ||||||
|  |     'CYCLADES-ACS5K-INFO-MIB' => 'cyACS5KInfo', | ||||||
|  |     'ACS-MIB'                 => 'acs6016', | ||||||
|  |     'ACS8000-MIB'             => 'acs8048', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
| 
 | 
 | ||||||
|     # CYCLADES-ACS-SYS-MIB |  | ||||||
|     %SNMP::Info::Layer1::GLOBALS, |     %SNMP::Info::Layer1::GLOBALS, | ||||||
|     'os_ver'     => 'cyACSversion', | 
 | ||||||
|     'cy_model'   => 'cyACSpname', |     # CYCLADES-ACS-SYS-MIB | ||||||
|     'serial'     => 'cyACSDevId', |     'cy_os_ver'     => 'cyACSversion', | ||||||
|     'root_ip'    => 'cyEthIPaddr', |     'cy_model'      => 'cyACSpname', | ||||||
|     'ps1_status' => 'cyACSPw1', |     'cy_serial'     => 'cyACSDevId', | ||||||
|     'ps2_status' => 'cyACSPw2', |     'cy_ps1_status' => 'cyACSPw1', | ||||||
|  |     'cy_ps2_status' => 'cyACSPw2', | ||||||
|  | 
 | ||||||
|  |     # CYCLADES-ACS-CONF-MIB | ||||||
|  |     'cy_root_ip' => 'CYCLADES_ACS_CONF_MIB__cyEthIPaddr', | ||||||
|  | 
 | ||||||
|  |     # CYCLADES-ACS5K-SYS-MIB | ||||||
|  |     'cy5k_os_ver'     => 'cyACS5Kversion', | ||||||
|  |     'cy5k_model'      => 'cyACS5Kpname', | ||||||
|  |     'cy5k_serial'     => 'cyACS5KDevId', | ||||||
|  |     'cy5k_ps1_status' => 'cyACS5KPw1', | ||||||
|  |     'cy5k_ps2_status' => 'cyACS5KPw2', | ||||||
|  | 
 | ||||||
|  |     # CYCLADES-ACS5K-CONF-MIB | ||||||
|  |     'cy5k_root_ip'   => 'CYCLADES_ACS5K_CONF_MIB__cyEthIPaddr', | ||||||
|  | 
 | ||||||
|  |     # ACS-MIB | ||||||
|  |     'acs_os_ver'     => 'ACS_MIB__acsFirmwareVersion', | ||||||
|  |     'acs_model'      => 'ACS_MIB__acsProductModel', | ||||||
|  |     'acs_serial'     => 'ACS_MIB__acsSerialNumber', | ||||||
|  |     'acs_ps1_status' => 'ACS_MIB__acsPowerSupplyStatePw1', | ||||||
|  |     'acs_ps2_status' => 'ACS_MIB__acsPowerSupplyStatePw2', | ||||||
|  | 
 | ||||||
|  |     # ACS8000-MIB | ||||||
|  |     'acs8k_os_ver'     => 'ACS8000_MIB__acsFirmwareVersion', | ||||||
|  |     'acs8k_model'      => 'ACS8000_MIB__acsProductModel', | ||||||
|  |     'acs8k_serial'     => 'ACS8000_MIB__acsSerialNumber', | ||||||
|  |     'acs8k_ps1_status' => 'ACS8000_MIB__acsPowerSupplyStatePw1', | ||||||
|  |     'acs8k_ps2_status' => 'ACS8000_MIB__acsPowerSupplyStatePw2', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
|     %SNMP::Info::Layer1::FUNCS, |     %SNMP::Info::Layer1::FUNCS, | ||||||
| 
 | 
 | ||||||
|     # CYCLADES-ACS-INFO-MIB::cyInfoSerialTable |     # CYCLADES-ACS-INFO-MIB::cyInfoSerialTable | ||||||
|     'cy_port_tty'   => 'cyISPortTty', |     'cy_port_tty'   => 'CYCLADES_ACS_INFO_MIB__cyISPortTty', | ||||||
|     'cy_port_name'  => 'cyISPortName', |     'cy_port_name'  => 'CYCLADES_ACS_INFO_MIB__cyISPortName', | ||||||
|     'cy_port_speed' => 'cyISPortSpeed', |     'cy_port_speed' => 'CYCLADES_ACS_INFO_MIB__cyISPortSpeed', | ||||||
|     'cy_port_cd'    => 'cyISPortSigCD', |     'cy_port_cd'    => 'CYCLADES_ACS_INFO_MIB__cyISPortSigCD', | ||||||
| 
 | 
 | ||||||
|     # CYCLADES-ACS-CONF-MIB::cySerialPortTable |     # CYCLADES-ACS-CONF-MIB::cySerialPortTable | ||||||
|     'cy_port_socket' => 'cySPortSocketPort', |     'cy_port_socket' => 'CYCLADES_ACS_CONF_MIB__cySPortSocketPort', | ||||||
|  | 
 | ||||||
|  |     # CYCLADES-ACS5K-INFO-MIB::cyInfoSerialTable | ||||||
|  |     'cy5k_port_tty'   => 'CYCLADES_ACS5K_INFO_MIB__cyISPortTty', | ||||||
|  |     'cy5k_port_name'  => 'CYCLADES_ACS5K_INFO_MIB__cyISPortName', | ||||||
|  |     'cy5k_port_speed' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSpeed', | ||||||
|  |     'cy5k_port_cd'    => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSigCD', | ||||||
|  | 
 | ||||||
|  |     # CYCLADES-ACS5K-CONF-MIB::cySerialPortTable | ||||||
|  |     'cy5k_port_socket' => 'CYCLADES_ACS5K_CONF_MIB__cySPortSocketPort', | ||||||
|  | 
 | ||||||
|  |     # ACS-MIB::acsSerialPortTable | ||||||
|  |     'acs_port_tty'   => 'ACS_MIB__acsSerialPortTableDeviceName', | ||||||
|  |     'acs_port_name'  => 'ACS_MIB__acsSerialPortTableName', | ||||||
|  |     'acs_port_speed' => 'ACS_MIB__acsSerialPortTableComSpeed', | ||||||
|  |     'acs_port_cd'    => 'ACS_MIB__acsSerialPortTableSignalStateDCD', | ||||||
|  | 
 | ||||||
|  |     # Equivalent to cySPortSocketPort doesn't exist in ACS-MIB | ||||||
|  |     # Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs | ||||||
|  |     # to be unique so that we can differentiate between the index in the | ||||||
|  |     # acsSerialPortTable from ifIndex which are both integers | ||||||
|  |     # ACS-MIB::acsSerialPortTableEntry | ||||||
|  |     'acs_port_socket' => 'ACS_MIB__acsSerialPortTableDeviceName', | ||||||
|  | 
 | ||||||
|  |     # ACS8000-MIB::acsSerialPortTable | ||||||
|  |     'acs8k_port_tty'   => 'ACS8000_MIB__acsSerialPortTableDeviceName', | ||||||
|  |     'acs8k_port_name'  => 'ACS8000_MIB__acsSerialPortTableName', | ||||||
|  |     'acs8k_port_speed' => 'ACS8000_MIB__acsSerialPortTableComSpeed', | ||||||
|  |     'acs8k_port_cd'    => 'ACS8000_MIB__acsSerialPortTableSignalStateDCD', | ||||||
|  | 
 | ||||||
|  |     # Equivalent to cySPortSocketPort doesn't exist in ACS-MIB | ||||||
|  |     # Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs | ||||||
|  |     # to be unique so that we can differentiate between the index in the | ||||||
|  |     # acsSerialPortTable from ifIndex which are both integers | ||||||
|  |     # ACS8000-MIB::acsSerialPortTableEntry | ||||||
|  |     'acs8k_port_socket' => 'ACS8000_MIB__acsSerialPortTableDeviceName', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( %SNMP::Info::Layer1::MUNGE, ); | %MUNGE = ( %SNMP::Info::Layer1::MUNGE, ); | ||||||
| @@ -82,21 +149,85 @@ sub layers { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub os { | sub os { | ||||||
|     return 'cyclades'; |     return 'avocent'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Use "short circuit" to return the first MIB instance that returns data to | ||||||
|  | # reduce network communications | ||||||
|  | # We'll try newest (acs*) first assuming those are most likely deployed | ||||||
|  | sub os_ver { | ||||||
|  |     my $cyclades = shift; | ||||||
|  | 
 | ||||||
|  |     return | ||||||
|  |            $cyclades->acs_os_ver() | ||||||
|  |         || $cyclades->acs8k_os_ver() | ||||||
|  |         || $cyclades->cy5k_os_ver() | ||||||
|  |         || $cyclades->cy_os_ver() | ||||||
|  |         || undef; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub vendor { | sub vendor { | ||||||
|     return 'cyclades'; |     return 'vertiv'; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub model { | sub model { | ||||||
|     my $cyclades = shift; |     my $cyclades = shift; | ||||||
| 
 | 
 | ||||||
|     my $model = $cyclades->cy_model(); |     my $model | ||||||
|  |         = $cyclades->acs_model() | ||||||
|  |         || $cyclades->acs8k_model() | ||||||
|  |         || $cyclades->cy5k_model() | ||||||
|  |         || $cyclades->cy_model() | ||||||
|  |         || undef; | ||||||
| 
 | 
 | ||||||
|     return unless defined $model; |     return lc($model) if ( defined $model ); | ||||||
| 
 | 
 | ||||||
|     return lc($model); |     my $id   = $cyclades->id(); | ||||||
|  |     my $prod = SNMP::translateObj($id); | ||||||
|  | 
 | ||||||
|  |     return $prod || $id; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub serial { | ||||||
|  |     my $cyclades = shift; | ||||||
|  | 
 | ||||||
|  |     return | ||||||
|  |            $cyclades->acs_serial() | ||||||
|  |         || $cyclades->acs8k_serial() | ||||||
|  |         || $cyclades->cy5k_serial() | ||||||
|  |         || $cyclades->cy_serial() | ||||||
|  |         || undef; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub root_ip { | ||||||
|  |     my $cyclades = shift; | ||||||
|  | 
 | ||||||
|  |     return | ||||||
|  |            $cyclades->cy5k_root_ip() | ||||||
|  |         || $cyclades->cy_root_ip() | ||||||
|  |         || undef; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub ps1_status { | ||||||
|  |     my $cyclades = shift; | ||||||
|  | 
 | ||||||
|  |     return | ||||||
|  |            $cyclades->acs_ps1_status() | ||||||
|  |         || $cyclades->acs8k_ps1_status() | ||||||
|  |         || $cyclades->cy5k_ps1_status() | ||||||
|  |         || $cyclades->cy_ps1_status() | ||||||
|  |         || undef; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub ps2_status { | ||||||
|  |     my $cyclades = shift; | ||||||
|  | 
 | ||||||
|  |     return | ||||||
|  |            $cyclades->acs_ps2_status() | ||||||
|  |         || $cyclades->acs8k_ps2_status() | ||||||
|  |         || $cyclades->cy5k_ps2_status() | ||||||
|  |         || $cyclades->cy_ps2_status() | ||||||
|  |         || undef; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Extend interface methods to include serial ports | # Extend interface methods to include serial ports | ||||||
| @@ -109,7 +240,12 @@ sub i_index { | |||||||
|     my $partial  = shift; |     my $partial  = shift; | ||||||
| 
 | 
 | ||||||
|     my $orig_index = $cyclades->orig_i_index($partial) || {}; |     my $orig_index = $cyclades->orig_i_index($partial) || {}; | ||||||
|     my $cy_index   = $cyclades->cy_port_socket()       || {}; |     my $cy_index | ||||||
|  |         = $cyclades->acs_port_socket() | ||||||
|  |         || $cyclades->acs8k_port_socket() | ||||||
|  |         || $cyclades->cy5k_port_socket() | ||||||
|  |         || $cyclades->cy_port_socket() | ||||||
|  |         || {}; | ||||||
| 
 | 
 | ||||||
|     my %i_index; |     my %i_index; | ||||||
|     foreach my $iid ( keys %$orig_index ) { |     foreach my $iid ( keys %$orig_index ) { | ||||||
| @@ -136,9 +272,19 @@ sub interfaces { | |||||||
|     my $cyclades = shift; |     my $cyclades = shift; | ||||||
|     my $partial  = shift; |     my $partial  = shift; | ||||||
| 
 | 
 | ||||||
|     my $i_descr  = $cyclades->orig_i_description($partial) || {}; |     my $i_descr = $cyclades->orig_i_description($partial) || {}; | ||||||
|     my $cy_index = $cyclades->cy_port_socket()             || {}; |     my $cy_index | ||||||
|     my $cy_p_tty = $cyclades->cy_port_tty()                || {}; |         = $cyclades->acs_port_socket() | ||||||
|  |         || $cyclades->acs8k_port_socket() | ||||||
|  |         || $cyclades->cy5k_port_socket() | ||||||
|  |         || $cyclades->cy_port_socket() | ||||||
|  |         || {}; | ||||||
|  |     my $cy_p_tty | ||||||
|  |         = $cyclades->acs_port_tty() | ||||||
|  |         || $cyclades->acs8k_port_tty() | ||||||
|  |         || $cyclades->cy5k_port_tty() | ||||||
|  |         || $cyclades->cy_port_tty() | ||||||
|  |         || {}; | ||||||
| 
 | 
 | ||||||
|     my %if; |     my %if; | ||||||
|     foreach my $iid ( keys %$i_descr ) { |     foreach my $iid ( keys %$i_descr ) { | ||||||
| @@ -166,8 +312,18 @@ sub i_speed { | |||||||
|     my $partial  = shift; |     my $partial  = shift; | ||||||
| 
 | 
 | ||||||
|     my $i_speed    = $cyclades->orig_i_speed($partial) || {}; |     my $i_speed    = $cyclades->orig_i_speed($partial) || {}; | ||||||
|     my $cy_index   = $cyclades->cy_port_socket()       || {}; |     my $cy_index | ||||||
|     my $cy_p_speed = $cyclades->cy_port_speed()        || {}; |         = $cyclades->acs_port_socket() | ||||||
|  |         || $cyclades->acs8k_port_socket() | ||||||
|  |         || $cyclades->cy5k_port_socket() | ||||||
|  |         || $cyclades->cy_port_socket() | ||||||
|  |         || {}; | ||||||
|  |     my $cy_p_speed | ||||||
|  |         = $cyclades->acs_port_speed() | ||||||
|  |         || $cyclades->acs8k_port_speed() | ||||||
|  |         || $cyclades->cy5k_port_speed() | ||||||
|  |         || $cyclades->cy_port_speed() | ||||||
|  |         || {}; | ||||||
| 
 | 
 | ||||||
|     my %i_speed; |     my %i_speed; | ||||||
|     foreach my $iid ( keys %$i_speed ) { |     foreach my $iid ( keys %$i_speed ) { | ||||||
| @@ -195,8 +351,18 @@ sub i_up { | |||||||
|     my $partial  = shift; |     my $partial  = shift; | ||||||
| 
 | 
 | ||||||
|     my $i_up     = $cyclades->orig_i_up($partial) || {}; |     my $i_up     = $cyclades->orig_i_up($partial) || {}; | ||||||
|     my $cy_index = $cyclades->cy_port_socket()    || {}; |     my $cy_index | ||||||
|     my $cy_p_up  = $cyclades->cy_port_cd()        || {}; |         = $cyclades->acs_port_socket() | ||||||
|  |         || $cyclades->acs8k_port_socket() | ||||||
|  |         || $cyclades->cy5k_port_socket() | ||||||
|  |         || $cyclades->cy_port_socket() | ||||||
|  |         || {}; | ||||||
|  |     my $cy_p_up | ||||||
|  |         = $cyclades->acs_port_cd() | ||||||
|  |         || $cyclades->acs8k_port_cd() | ||||||
|  |         || $cyclades->cy5k_port_cd() | ||||||
|  |         || $cyclades->cy_port_cd() | ||||||
|  |         || {}; | ||||||
| 
 | 
 | ||||||
|     my %i_up; |     my %i_up; | ||||||
|     foreach my $iid ( keys %$i_up ) { |     foreach my $iid ( keys %$i_up ) { | ||||||
| @@ -224,8 +390,18 @@ sub i_description { | |||||||
|     my $partial  = shift; |     my $partial  = shift; | ||||||
| 
 | 
 | ||||||
|     my $i_desc    = $cyclades->orig_i_description($partial) || {}; |     my $i_desc    = $cyclades->orig_i_description($partial) || {}; | ||||||
|     my $cy_index  = $cyclades->cy_port_socket()             || {}; |     my $cy_index | ||||||
|     my $cy_p_desc = $cyclades->cy_port_name()               || {}; |         = $cyclades->acs_port_socket() | ||||||
|  |         || $cyclades->acs8k_port_socket() | ||||||
|  |         || $cyclades->cy5k_port_socket() | ||||||
|  |         || $cyclades->cy_port_socket() | ||||||
|  |         || {}; | ||||||
|  |     my $cy_p_desc | ||||||
|  |         = $cyclades->acs_port_name() | ||||||
|  |         || $cyclades->acs8k_port_name() | ||||||
|  |         || $cyclades->cy5k_port_name() | ||||||
|  |         || $cyclades->cy_port_name() | ||||||
|  |         || {}; | ||||||
| 
 | 
 | ||||||
|     my %descr; |     my %descr; | ||||||
|     foreach my $iid ( keys %$i_desc ) { |     foreach my $iid ( keys %$i_desc ) { | ||||||
| @@ -253,8 +429,18 @@ sub i_name { | |||||||
|     my $partial  = shift; |     my $partial  = shift; | ||||||
| 
 | 
 | ||||||
|     my $i_name    = $cyclades->orig_i_name($partial) || {}; |     my $i_name    = $cyclades->orig_i_name($partial) || {}; | ||||||
|     my $cy_index  = $cyclades->cy_port_socket()      || {}; |     my $cy_index | ||||||
|     my $cy_p_desc = $cyclades->cy_port_name()        || {}; |         = $cyclades->acs_port_socket() | ||||||
|  |         || $cyclades->acs8k_port_socket() | ||||||
|  |         || $cyclades->cy5k_port_socket() | ||||||
|  |         || $cyclades->cy_port_socket() | ||||||
|  |         || {}; | ||||||
|  |     my $cy_p_desc | ||||||
|  |         = $cyclades->acs_port_name() | ||||||
|  |         || $cyclades->acs8k_port_name() | ||||||
|  |         || $cyclades->cy5k_port_name() | ||||||
|  |         || $cyclades->cy_port_name() | ||||||
|  |         || {}; | ||||||
| 
 | 
 | ||||||
|     my %i_name; |     my %i_name; | ||||||
|     foreach my $iid ( keys %$i_name ) { |     foreach my $iid ( keys %$i_name ) { | ||||||
| @@ -282,7 +468,8 @@ __END__ | |||||||
| 
 | 
 | ||||||
| =head1 NAME | =head1 NAME | ||||||
| 
 | 
 | ||||||
| SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades terminal servers | SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades/Avocent terminal | ||||||
|  | servers | ||||||
| 
 | 
 | ||||||
| =head1 AUTHOR | =head1 AUTHOR | ||||||
| 
 | 
 | ||||||
| @@ -309,7 +496,7 @@ Eric Miller | |||||||
| =head1 DESCRIPTION | =head1 DESCRIPTION | ||||||
| 
 | 
 | ||||||
| Provides abstraction to the configuration information obtainable from a  | Provides abstraction to the configuration information obtainable from a  | ||||||
| Cyclades device through SNMP. | Cyclades/Avocent device through SNMP. | ||||||
| 
 | 
 | ||||||
| For speed or debugging purposes you can call the subclass directly, but not | For speed or debugging purposes you can call the subclass directly, but not | ||||||
| after determining a more specific class using the method above.  | after determining a more specific class using the method above.  | ||||||
| @@ -334,6 +521,14 @@ my $cyclades = new SNMP::Info::Layer1::Cyclades(...); | |||||||
| 
 | 
 | ||||||
| =item F<CYCLADES-ACS-INFO-MIB> | =item F<CYCLADES-ACS-INFO-MIB> | ||||||
| 
 | 
 | ||||||
|  | =item F<CYCLADES-ACS5K-SYS-MIB> | ||||||
|  | 
 | ||||||
|  | =item F<CYCLADES-ACS5K-CONF-MIB> | ||||||
|  | 
 | ||||||
|  | =item F<CYCLADES-ACS5K-INFO-MIB> | ||||||
|  | 
 | ||||||
|  | =item F<ACS6000-MIB> | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 Inherited MIBs | =head2 Inherited MIBs | ||||||
| @@ -348,11 +543,11 @@ These are methods that return scalar value from SNMP | |||||||
| 
 | 
 | ||||||
| =item $cyclades->os_ver() | =item $cyclades->os_ver() | ||||||
| 
 | 
 | ||||||
| (C<cyACSversion>) | (C<acsFirmwareVersion>), (C<cyACS5Kversion>), or (C<cyACSversion>) | ||||||
| 
 | 
 | ||||||
| =item $cyclades->serial() | =item $cyclades->serial() | ||||||
| 
 | 
 | ||||||
| (C<cyACSDevId>) | (C<acsSerialNumber>), (C<cyACS5KDevId>), or (C<cyACSDevId>) | ||||||
| 
 | 
 | ||||||
| =item $cyclades->root_ip() | =item $cyclades->root_ip() | ||||||
| 
 | 
 | ||||||
| @@ -360,11 +555,11 @@ These are methods that return scalar value from SNMP | |||||||
| 
 | 
 | ||||||
| =item $cyclades->ps1_status() | =item $cyclades->ps1_status() | ||||||
| 
 | 
 | ||||||
| (C<cyACSPw1>) | (C<acsPowerSupplyStatePw1>), (C<cyACS5KPw1>), or (C<cyACSPw1>) | ||||||
| 
 | 
 | ||||||
| =item $cyclades->ps2_status() | =item $cyclades->ps2_status() | ||||||
| 
 | 
 | ||||||
| (C<cyACSPw2>) | (C<acsPowerSupplyStatePw2>), (C<cyACS5KPw2>), or (C<cyACSPw2>) | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -379,15 +574,16 @@ to poll for an ARP cache so turn off reported Layer 2 and Layer 3. | |||||||
| 
 | 
 | ||||||
| =item $cyclades->vendor() | =item $cyclades->vendor() | ||||||
| 
 | 
 | ||||||
| Returns 'cyclades' | Returns 'vertiv' | ||||||
| 
 | 
 | ||||||
| =item $cyclades->os() | =item $cyclades->os() | ||||||
| 
 | 
 | ||||||
| Returns 'cyclades' | Returns 'avocent' | ||||||
| 
 | 
 | ||||||
| =item $cyclades->model() | =item $cyclades->model() | ||||||
| 
 | 
 | ||||||
| Returns lower case (C<cyACSpname>) | Returns lower case (C<cyACSpname>) or (C<acsProductModel>) if it exists | ||||||
|  | otherwise tries to reference $cyclades->id() to one of the MIBs listed above | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -409,31 +605,34 @@ to a hash. | |||||||
| Returns reference to map of IIDs to Interface index.  | Returns reference to map of IIDs to Interface index.  | ||||||
| 
 | 
 | ||||||
| Extended to include serial ports.  Serial ports are indexed with the | Extended to include serial ports.  Serial ports are indexed with the | ||||||
| alternative labeling system for the serial port, the listening socket port | alternative labeling system for the serial port, either the listening socket | ||||||
| C<cySPortSocketPort> to avoid conflicts with C<ifIndex>.   | port C<cySPortSocketPort> or C<acsSerialPortTableDeviceName> name to avoid | ||||||
|  | conflicts with C<ifIndex>.   | ||||||
| 
 | 
 | ||||||
| =item $cyclades->interfaces() | =item $cyclades->interfaces() | ||||||
| 
 | 
 | ||||||
| Returns reference to map of IIDs to physical ports.  Extended to include | Returns reference to map of IIDs to physical ports.  Extended to include | ||||||
| serial ports, C<cyISPortTty>. | serial ports, C<acsSerialPortTableDeviceName> or C<cyISPortTty>. | ||||||
| 
 | 
 | ||||||
| =item $cyclades->i_speed() | =item $cyclades->i_speed() | ||||||
| 
 | 
 | ||||||
| Returns interface speed.  Extended to include serial ports, C<cyISPortSpeed>.  | Returns interface speed.  Extended to include serial ports, | ||||||
|  | C<acsSerialPortTableComSpeed> or C<cyISPortSpeed>.  | ||||||
| 
 | 
 | ||||||
| =item $cyclades->i_up() | =item $cyclades->i_up() | ||||||
| 
 | 
 | ||||||
| Returns link status for each port.  Extended to include serial ports, | Returns link status for each port.  Extended to include serial ports, | ||||||
| C<cyISPortSigCD>. | C<acsSerialPortTableSignalStateDCD> or C<cyISPortSigCD>. | ||||||
| 
 | 
 | ||||||
| =item $cyclades->i_description() | =item $cyclades->i_description() | ||||||
| 
 | 
 | ||||||
| Returns description of each port.  Extended to include serial ports, | Returns description of each port.  Extended to include serial ports, | ||||||
| C<cyISPortName>. | C<acsSerialPortTableName> or C<cyISPortName>. | ||||||
| 
 | 
 | ||||||
| =item $cyclades->i_name() | =item $cyclades->i_name() | ||||||
| 
 | 
 | ||||||
| Returns name of each port.  Extended to include serial ports, C<cyISPortName>. | Returns name of each port.  Extended to include serial ports, | ||||||
|  | C<acsSerialPortTableName> or C<cyISPortName>. | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, |     %SNMP::Info::Layer2::MIBS, | ||||||
| @@ -46,7 +46,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS, |     %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS, | ||||||
| @@ -118,24 +118,18 @@ sub vendor { | |||||||
| sub serial { | sub serial { | ||||||
|     my $l2 = shift; |     my $l2 = shift; | ||||||
| 
 | 
 | ||||||
|     my $serial1  = $l2->serial1(); |     my $entity_serial = $l2->entity_derived_serial(); | ||||||
|     my $e_descr  = $l2->e_descr() || {}; |     if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){ | ||||||
|     my $e_serial = $l2->e_serial() || {}; |         return $entity_serial; | ||||||
| 
 |  | ||||||
|     my $serial2 = $e_serial->{1} || undef; |  | ||||||
|     my $chassis = $e_descr->{1}  || undef; |  | ||||||
| 
 |  | ||||||
|     # precedence |  | ||||||
|     #   serial2,chassis parse,serial1 |  | ||||||
|     return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ ); |  | ||||||
| 
 |  | ||||||
|     if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) { |  | ||||||
|         return $1; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ ); |     my $serial1  = $l2->serial1(); | ||||||
|  |     if ( defined $serial1 and $serial1 !~ /^\s*$/ ) { | ||||||
|  |         return $serial1; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     return; |     return; | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub interfaces { | sub interfaces { | ||||||
| @@ -262,7 +256,7 @@ Tries to discover the vendor from $l2->model() and $l2->description() | |||||||
| 
 | 
 | ||||||
| =item $l2->serial() | =item $l2->serial() | ||||||
| 
 | 
 | ||||||
| Returns serial number if available through SNMP | Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB. | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -11,7 +11,7 @@ use SNMP::Info::CDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::LLDP::MIBS, |     %SNMP::Info::LLDP::MIBS, | ||||||
| @@ -49,6 +49,7 @@ sub serial { | |||||||
|             return $e_serial->{$e}; |             return $e_serial->{$e}; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub os_ver { | sub os_ver { | ||||||
| @@ -61,6 +62,7 @@ sub os_ver { | |||||||
|             return $e_swver->{$e}; |             return $e_swver->{$e}; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub vendor { | sub vendor { | ||||||
| @@ -73,7 +75,10 @@ sub model { | |||||||
|     my $descr = $dsmodel->description(); |     my $descr = $dsmodel->description(); | ||||||
|     if ( $descr =~ /^([\S ]+) Software.*/){ |     if ( $descr =~ /^([\S ]+) Software.*/){ | ||||||
|         return $1; |         return $1; | ||||||
|  |     } else { | ||||||
|  |         return $descr; | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 1; | 1; | ||||||
							
								
								
									
										286
									
								
								lib/SNMP/Info/Layer2/Adtran.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										286
									
								
								lib/SNMP/Info/Layer2/Adtran.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,286 @@ | |||||||
|  | package SNMP::Info::Layer2::Adtran; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::LLDP; | ||||||
|  | use SNMP::Info::Layer2; | ||||||
|  | use SNMP::Info::Layer3; | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer2::Adtran::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/; | ||||||
|  | @SNMP::Info::Layer2::Adtran::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | # 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 | ||||||
							
								
								
									
										472
									
								
								lib/SNMP/Info/Layer2/Aerohive.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										472
									
								
								lib/SNMP/Info/Layer2/Aerohive.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,472 @@ | |||||||
|  | # SNMP::Info::Layer2::Aerohive | ||||||
|  | # | ||||||
|  | # Copyright (c) 2018 Eric Miller | ||||||
|  | # All rights reserved. | ||||||
|  | # | ||||||
|  | # Redistribution and use in source and binary forms, with or without | ||||||
|  | # modification, are permitted provided that the following conditions are met: | ||||||
|  | # | ||||||
|  | #     * Redistributions of source code must retain the above copyright notice, | ||||||
|  | #       this list of conditions and the following disclaimer. | ||||||
|  | #     * Redistributions in binary form must reproduce the above copyright | ||||||
|  | #       notice, this list of conditions and the following disclaimer in the | ||||||
|  | #       documentation and/or other materials provided with the distribution. | ||||||
|  | #     * Neither the name of the University of California, Santa Cruz nor the | ||||||
|  | #       names of its contributors may be used to endorse or promote products | ||||||
|  | #       derived from this software without specific prior written permission. | ||||||
|  | # | ||||||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||||
|  | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||||||
|  | # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||||||
|  | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||||||
|  | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||||
|  | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||||
|  | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||||
|  | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||||
|  | # POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
|  | package SNMP::Info::Layer2::Aerohive; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::Layer2; | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer2::Aerohive::ISA       = qw/SNMP::Info::Layer2 Exporter/; | ||||||
|  | @SNMP::Info::Layer2::Aerohive::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | %MIBS = ( | ||||||
|  |     %SNMP::Info::Layer2::MIBS, | ||||||
|  |     'AH-SYSTEM-MIB'    => 'ahSystemSerial', | ||||||
|  |     'AH-INTERFACE-MIB' => 'ahSSIDName', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %GLOBALS = ( | ||||||
|  |     %SNMP::Info::Layer2::GLOBALS, | ||||||
|  |  | ||||||
|  |     # AH-SYSTEM-MIB | ||||||
|  |     'serial' => 'ahSystemSerial', | ||||||
|  |     'os_bin' => 'ahFirmwareVersion', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %FUNCS = ( | ||||||
|  |     %SNMP::Info::Layer2::FUNCS, | ||||||
|  |  | ||||||
|  |     # AH-INTERFACE-MIB::ahRadioAttributeTable | ||||||
|  |     'i_80211channel'      => 'ahRadioChannel', | ||||||
|  |     'dot11_cur_tx_pwr_mw' => 'ahRadioTxPower', | ||||||
|  |  | ||||||
|  |     # AH-INTERFACE-MIB::ahXIfTable | ||||||
|  |     'ah_i_ssidlist' => 'ahSSIDName', | ||||||
|  |  | ||||||
|  |     # AH-INTERFACE-MIB::ahAssociationTable | ||||||
|  |     'cd11_txrate'      => 'ahClientLastTxRate', | ||||||
|  |     'cd11_uptime'      => 'ahClientLinkUptime', | ||||||
|  |     'cd11_sigstrength' => 'ahClientRSSI', | ||||||
|  |     'cd11_rxpkt'       => 'ahClientRxDataFrames', | ||||||
|  |     'cd11_txpkt'       => 'ahClientTxDataFrames', | ||||||
|  |     'cd11_rxbyte'      => 'ahClientRxDataOctets', | ||||||
|  |     'cd11_txbyte'      => 'ahClientTxDataOctets', | ||||||
|  |     'cd11_ssid'        => 'ahClientSSID', | ||||||
|  |     'ah_c_vlan'        => 'ahClientVLAN', | ||||||
|  |     'ah_c_ip'          => 'ahClientIP', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %MUNGE | ||||||
|  |     = ( %SNMP::Info::Layer2::MUNGE, 'at_paddr' => \&SNMP::Info::munge_mac, ); | ||||||
|  |  | ||||||
|  | sub layers { | ||||||
|  |     return '00000111'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub vendor { | ||||||
|  |     return 'aerohive'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os { | ||||||
|  |     return 'hiveos'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os_ver { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $descr    = $aerohive->description(); | ||||||
|  |  | ||||||
|  |     if ( $descr =~ m/\bHiveOS\s(\d\.\w+)\b/ix ) { | ||||||
|  |         return $1; | ||||||
|  |     } | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub model { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $descr    = $aerohive->description(); | ||||||
|  |  | ||||||
|  |     if ( $descr =~ m/\b(?:Hive|)(AP\d+)\b/ix ) { | ||||||
|  |         return $1; | ||||||
|  |     } | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub i_ssidlist { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $partial  = shift; | ||||||
|  |  | ||||||
|  |     my $ssids = $aerohive->ah_i_ssidlist($partial) || {}; | ||||||
|  |  | ||||||
|  |     my %i_ssidlist; | ||||||
|  |     foreach my $iid ( keys %$ssids ) { | ||||||
|  |         my $ssid = $ssids->{$iid}; | ||||||
|  |         next if $ssid =~ /N\/A/i; | ||||||
|  |  | ||||||
|  |         $i_ssidlist{$iid} = $ssid; | ||||||
|  |     } | ||||||
|  |     return \%i_ssidlist; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub i_ssidmac { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $partial  = shift; | ||||||
|  |  | ||||||
|  |     my $ssids = $aerohive->i_ssidlist($partial) || {}; | ||||||
|  |     my $macs  = $aerohive->i_mac($partial)      || {}; | ||||||
|  |  | ||||||
|  |     my %i_ssidmac; | ||||||
|  |     foreach my $iid ( keys %$ssids ) { | ||||||
|  |         my $mac = $macs->{$iid}; | ||||||
|  |         next unless $mac; | ||||||
|  |  | ||||||
|  |         $i_ssidmac{$iid} = $mac; | ||||||
|  |     } | ||||||
|  |     return \%i_ssidmac; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Break up the ahAssociationEntry INDEX into ifIndex and MAC Address. | ||||||
|  | sub _ah_association_index { | ||||||
|  |     my $idx     = shift; | ||||||
|  |     my @values  = split( /\./, $idx ); | ||||||
|  |     my $ifindex = shift(@values); | ||||||
|  |     my $length  = shift(@values); | ||||||
|  |     return ( $ifindex, join( ':', map { sprintf "%02x", $_ } @values ) ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub cd11_port { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |  | ||||||
|  |     my $cd11_txrate = $aerohive->cd11_txrate(); | ||||||
|  |     my $interfaces  = $aerohive->interfaces(); | ||||||
|  |  | ||||||
|  |     my %ret; | ||||||
|  |     foreach ( keys %$cd11_txrate ) { | ||||||
|  |         my ( $ifindex, $mac ) = _ah_association_index($_); | ||||||
|  |         $ret{$_} = $interfaces->{$ifindex}; | ||||||
|  |     } | ||||||
|  |     return \%ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub cd11_mac { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |  | ||||||
|  |     my $cd11_txrate = $aerohive->cd11_txrate(); | ||||||
|  |  | ||||||
|  |     my %ret; | ||||||
|  |     foreach ( keys %$cd11_txrate ) { | ||||||
|  |         my ( $ifindex, $mac ) = _ah_association_index($_); | ||||||
|  |         $ret{$_} = $mac; | ||||||
|  |     } | ||||||
|  |     return \%ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Does not support the standard Bridge MIB | ||||||
|  | sub bp_index { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $partial  = shift; | ||||||
|  |  | ||||||
|  |     my $i_index = $aerohive->i_index($partial) || {}; | ||||||
|  |  | ||||||
|  |     my %bp_index; | ||||||
|  |     foreach my $iid ( keys %$i_index ) { | ||||||
|  |         my $index = $i_index->{$iid}; | ||||||
|  |         next unless defined $index; | ||||||
|  |  | ||||||
|  |         $bp_index{$index} = $iid; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return \%bp_index; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub qb_fw_port { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $partial  = shift; | ||||||
|  |  | ||||||
|  |     my $txrate = $aerohive->cd11_txrate($partial) || {}; | ||||||
|  |  | ||||||
|  |     my $qb_fw_port = {}; | ||||||
|  |     foreach my $idx ( keys %$txrate ) { | ||||||
|  |         my ( $fdb_id, $mac ) = _ah_association_index($idx); | ||||||
|  |         $qb_fw_port->{$idx} = $fdb_id; | ||||||
|  |     } | ||||||
|  |     return $qb_fw_port; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub qb_fw_mac { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $partial  = shift; | ||||||
|  |  | ||||||
|  |     my $txrate = $aerohive->cd11_txrate($partial) || {}; | ||||||
|  |  | ||||||
|  |     my $qb_fw_mac = {}; | ||||||
|  |     foreach my $idx ( keys %$txrate ) { | ||||||
|  |         my ( $fdb_id, $mac ) = _ah_association_index($idx); | ||||||
|  |         $qb_fw_mac->{$idx} = $mac; | ||||||
|  |     } | ||||||
|  |     return $qb_fw_mac; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub qb_fw_vlan { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |     my $partial  = shift; | ||||||
|  |  | ||||||
|  |     my $vlans = $aerohive->ah_c_vlan($partial) || {}; | ||||||
|  |  | ||||||
|  |     my $qb_fw_vlan = {}; | ||||||
|  |     foreach my $idx ( keys %$vlans ) { | ||||||
|  |         my $vlan = $vlans->{$idx}; | ||||||
|  |         next unless defined $vlan; | ||||||
|  |         $qb_fw_vlan->{$idx} = $vlan; | ||||||
|  |     } | ||||||
|  |     return $qb_fw_vlan; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # arpnip: | ||||||
|  | # | ||||||
|  | # This is the AP snooping on the MAC->IP mappings. | ||||||
|  | # Pretending this is arpnip data allows us to get MAC->IP | ||||||
|  | # mappings even for stations that only communicate locally. | ||||||
|  |  | ||||||
|  | sub at_paddr { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |  | ||||||
|  |     my $txrate = $aerohive->cd11_txrate() || {}; | ||||||
|  |  | ||||||
|  |     my $at_paddr = {}; | ||||||
|  |     foreach my $idx ( keys %$txrate ) { | ||||||
|  |         my ( $fdb_id, $mac ) = _ah_association_index($idx); | ||||||
|  |         $at_paddr->{$idx} = $mac; | ||||||
|  |     } | ||||||
|  |     return $at_paddr; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub at_netaddr { | ||||||
|  |     my $aerohive = shift; | ||||||
|  |  | ||||||
|  |     my $ips = $aerohive->ah_c_ip() || {}; | ||||||
|  |  | ||||||
|  |     my $ret = {}; | ||||||
|  |     foreach my $idx ( keys %$ips ) { | ||||||
|  |         next if ( $ips->{$idx} eq '0.0.0.0' ); | ||||||
|  |         $ret->{$idx} = $ips->{$idx}; | ||||||
|  |     } | ||||||
|  |     return $ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 1; | ||||||
|  |  | ||||||
|  | __END__ | ||||||
|  |  | ||||||
|  | =head1 NAME | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer2::Aerohive - SNMP Interface to Aerohive Access Points | ||||||
|  |  | ||||||
|  | =head1 AUTHOR | ||||||
|  |  | ||||||
|  | Eric Miller | ||||||
|  |  | ||||||
|  | =head1 SYNOPSIS | ||||||
|  |  | ||||||
|  |  # Let SNMP::Info determine the correct subclass for you.  | ||||||
|  |  my $aerohive = new SNMP::Info( | ||||||
|  |                           AutoSpecify => 1, | ||||||
|  |                           Debug       => 1, | ||||||
|  |                           DestHost    => 'myswitch', | ||||||
|  |                           Community   => 'public', | ||||||
|  |                           Version     => 2 | ||||||
|  |                         )  | ||||||
|  |     or die "Can't connect to DestHost.\n"; | ||||||
|  |  | ||||||
|  |  my $class = $aerohive->class(); | ||||||
|  |  print "SNMP::Info determined this device to fall under subclass : $class\n"; | ||||||
|  |  | ||||||
|  | =head1 DESCRIPTION | ||||||
|  |  | ||||||
|  | Provides abstraction to the configuration information obtainable from an | ||||||
|  | Aerohive wireless Access Point through SNMP.  | ||||||
|  |  | ||||||
|  | For speed or debugging purposes you can call the subclass directly, but not | ||||||
|  | after determining a more specific class using the method above.  | ||||||
|  |  | ||||||
|  |  my $aerohive = new SNMP::Info::Layer2::Aerohive(...); | ||||||
|  |  | ||||||
|  | =head2 Inherited Classes | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Required MIBs | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item F<AH-SYSTEM-MIB> | ||||||
|  |  | ||||||
|  | =item F<AH-INTERFACE-MIB> | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Inherited MIBs | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements. | ||||||
|  |  | ||||||
|  | =head1 GLOBALS | ||||||
|  |  | ||||||
|  | These are methods that return scalar value from SNMP | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $aerohive->vendor() | ||||||
|  |  | ||||||
|  | Returns 'aerohive'. | ||||||
|  |  | ||||||
|  | =item $aerohive->os() | ||||||
|  |  | ||||||
|  | Returns 'hive_os'. | ||||||
|  |  | ||||||
|  | =item $aerohive->os_ver() | ||||||
|  |  | ||||||
|  | Returns the OS versionl extracted from C<sysDescr>. | ||||||
|  |  | ||||||
|  | =item $aerohive->os_bin() | ||||||
|  |  | ||||||
|  | Returns the firmware version extracted from C<ahFirmwareVersion>. | ||||||
|  |  | ||||||
|  | =item $aerohive->model() | ||||||
|  |  | ||||||
|  | Returns the model extracted from C<sysDescr>. | ||||||
|  |  | ||||||
|  | =item $aerohive->serial() | ||||||
|  |  | ||||||
|  | Returns the serial number extracted from C<ahSystemSerial>. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Overrides | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $aerohive->layers() | ||||||
|  |  | ||||||
|  | Returns 00000111. Layer 2 and Layer 3 functionality through proprietary MIBs. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Global Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"GLOBALS"> for details. | ||||||
|  |  | ||||||
|  | =head1 TABLE METHODS | ||||||
|  |  | ||||||
|  | These are methods that return tables of information in the form of a reference | ||||||
|  | to a hash. | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $aerohive->i_ssidlist() | ||||||
|  |  | ||||||
|  | Returns reference to hash.  SSID's recognized by the radio interface. | ||||||
|  |  | ||||||
|  | =item $aerohive->i_ssidmac() | ||||||
|  |  | ||||||
|  | With the same keys as i_ssidlist, returns the Basic service set | ||||||
|  | identification (BSSID), MAC address, the AP is using for the SSID. | ||||||
|  |  | ||||||
|  | =item $aerohive->i_80211channel() | ||||||
|  |  | ||||||
|  | Returns reference to hash.  Current operating frequency channel of the radio | ||||||
|  | interface. | ||||||
|  |  | ||||||
|  | C<ahRadioChannel> | ||||||
|  |  | ||||||
|  | =item $aerohive->dot11_cur_tx_pwr_mw() | ||||||
|  |  | ||||||
|  | Returns reference to hash.  Current transmit power, in milliwatts, of the | ||||||
|  | radio interface. | ||||||
|  |  | ||||||
|  | C<ahRadioTxPower> | ||||||
|  |  | ||||||
|  | =item $aironet->cd11_port() | ||||||
|  |  | ||||||
|  | Returns radio interfaces. | ||||||
|  |  | ||||||
|  | =item $aironet->cd11_mac() | ||||||
|  |  | ||||||
|  | Returns client radio interface MAC addresses. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Overrides | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $aerohive->bp_index() | ||||||
|  |  | ||||||
|  | Simulates bridge MIB by returning reference to a hash mapping i_index() to | ||||||
|  | the interface iid. | ||||||
|  |  | ||||||
|  | =item $aerohive->qb_fw_port() | ||||||
|  |  | ||||||
|  | Returns reference to hash of forwarding table entries port interface | ||||||
|  | identifier (iid) | ||||||
|  |  | ||||||
|  | =item $aerohive->qb_fw_mac() | ||||||
|  |  | ||||||
|  | Returns reference to hash of forwarding table MAC Addresses | ||||||
|  |  | ||||||
|  | C<ahClientMac> | ||||||
|  |  | ||||||
|  | =item $aerohive->qb_fw_vlan() | ||||||
|  |  | ||||||
|  | Returns reference to hash of forwarding table entries VLAN ID | ||||||
|  |  | ||||||
|  | C<ahClientVLAN> | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Arp Cache Table Augmentation | ||||||
|  |  | ||||||
|  | The AP has knowledge of MAC->IP mappings for wireless clients. | ||||||
|  | Augmenting the arp cache data with these MAC->IP mappings enables visibility | ||||||
|  | for stations that only communicate locally. | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $aerohive->at_paddr() | ||||||
|  |  | ||||||
|  | C<ahClientMac> | ||||||
|  |  | ||||||
|  | =item $aerohive->at_netaddr() | ||||||
|  |  | ||||||
|  | C<ahClientIP> | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"TABLE METHODS"> for details. | ||||||
|  |  | ||||||
|  | =cut | ||||||
| @@ -40,7 +40,7 @@ use SNMP::Info::Airespace; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS, |     %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS, | ||||||
| @@ -97,6 +97,14 @@ my $mcs_index = { | |||||||
| 	m13 => '104', | 	m13 => '104', | ||||||
| 	m14 => '117', | 	m14 => '117', | ||||||
| 	m15 => '130', | 	m15 => '130', | ||||||
|  | 	m16 => '19.5', | ||||||
|  | 	m17 => '39', | ||||||
|  | 	m18 => '58.5', | ||||||
|  | 	m19 => '78', | ||||||
|  | 	m20 => '117', | ||||||
|  | 	m21 => '156', | ||||||
|  | 	m22 => '175.5', | ||||||
|  | 	m23 => '195', | ||||||
| 	# This is a cheat for 802.11a bonded | 	# This is a cheat for 802.11a bonded | ||||||
| 	m108 => '108', | 	m108 => '108', | ||||||
|     }, |     }, | ||||||
| @@ -117,6 +125,14 @@ my $mcs_index = { | |||||||
| 	m13 => '240', | 	m13 => '240', | ||||||
| 	m14 => '270', | 	m14 => '270', | ||||||
| 	m15 => '300', | 	m15 => '300', | ||||||
|  | 	m16 => '45', | ||||||
|  | 	m17 => '90', | ||||||
|  | 	m18 => '135', | ||||||
|  | 	m19 => '180', | ||||||
|  | 	m20 => '270', | ||||||
|  | 	m21 => '360', | ||||||
|  | 	m22 => '405', | ||||||
|  | 	m23 => '450', | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @@ -165,6 +181,7 @@ sub cd11_txrate { | |||||||
| 	elsif ( $rate =~ /^m/ ) { | 	elsif ( $rate =~ /^m/ ) { | ||||||
| 	    my $band = $protos->{$idx}; | 	    my $band = $protos->{$idx}; | ||||||
| 	    my $bw   = $bws->{$band}; | 	    my $bw   = $bws->{$band}; | ||||||
|  | 	    # FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"... | ||||||
| 	    $cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ]; | 	    $cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ]; | ||||||
| 	} | 	} | ||||||
| 	else { | 	else { | ||||||
| @@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
|     %SNMP::Info::IEEE802dot11::GLOBALS, |     %SNMP::Info::IEEE802dot11::GLOBALS, | ||||||
| @@ -60,7 +60,7 @@ $VERSION = '3.22'; | |||||||
|     %SNMP::Info::CiscoConfig::GLOBALS, |     %SNMP::Info::CiscoConfig::GLOBALS, | ||||||
|     %SNMP::Info::CDP::GLOBALS, |     %SNMP::Info::CDP::GLOBALS, | ||||||
|     'serial' => 'entPhysicalSerialNum.1', |     'serial' => 'entPhysicalSerialNum.1', | ||||||
|     'descr'  => 'sysDescr' |     'ps1_type' => 'cpoePdCurrentPowerSource' | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
| @@ -97,6 +97,7 @@ $VERSION = '3.22'; | |||||||
|     'CISCO-DOT11-ASSOCIATION-MIB'         => 'cDot11ClientSubIfIndex', |     'CISCO-DOT11-ASSOCIATION-MIB'         => 'cDot11ClientSubIfIndex', | ||||||
|     'CISCO-DOT11-SSID-SECURITY-MIB'       => 'cdot11SecVlanNameId', |     'CISCO-DOT11-SSID-SECURITY-MIB'       => 'cdot11SecVlanNameId', | ||||||
|     'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex', |     'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex', | ||||||
|  |     'CISCO-POE-PD-MIB'                    => 'cpoePdCurrentPowerSource', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( | %MUNGE = ( | ||||||
| @@ -134,7 +135,7 @@ sub interfaces { | |||||||
| # Tag on e_descr.1 | # Tag on e_descr.1 | ||||||
| sub description { | sub description { | ||||||
|     my $aironet = shift; |     my $aironet = shift; | ||||||
|     my $descr   = $aironet->descr(); |     my $descr   = $aironet->SUPER::description(); | ||||||
|     my $e_descr = $aironet->e_descr(); |     my $e_descr = $aironet->e_descr(); | ||||||
| 
 | 
 | ||||||
|     $descr = "$e_descr->{1}  $descr" if defined $e_descr->{1}; |     $descr = "$e_descr->{1}  $descr" if defined $e_descr->{1}; | ||||||
| @@ -457,6 +458,18 @@ sub i_ssidmac { | |||||||
|     return $i_ssidmac; |     return $i_ssidmac; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | ### | ||||||
|  | # PoE status.  The ps1_type is the PoE injector type, which is just | ||||||
|  | # a scalar; the status is a little more complex. | ||||||
|  | sub ps1_status { | ||||||
|  |     my $aironet = shift; | ||||||
|  |     my $idx = $aironet->cpoePdCurrentPowerLevel(); | ||||||
|  |     my $mw = $aironet->cpoePdSupportedPower( $idx ); | ||||||
|  |     my $descr = $aironet->cpoePdSupportedPowerMode( $idx ); | ||||||
|  | 
 | ||||||
|  |     return sprintf( "%.2fW (%s)", $mw->{$idx} * 0.001, $descr->{$idx} ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
| __END__ | __END__ | ||||||
| 
 | 
 | ||||||
| @@ -540,17 +553,13 @@ These are methods that return scalar value from SNMP | |||||||
| 
 | 
 | ||||||
| =over | =over | ||||||
| 
 | 
 | ||||||
| =item $aironet->discription() |  | ||||||
| 
 |  | ||||||
| Adds info from method e_descr() from SNMP::Info::Entity |  | ||||||
| 
 |  | ||||||
| =item $aironet->vendor() | =item $aironet->vendor() | ||||||
| 
 | 
 | ||||||
| Returns 'cisco' | Returns 'cisco' | ||||||
| 
 | 
 | ||||||
| =item $aironet->description() | =item $aironet->description() | ||||||
| 
 | 
 | ||||||
| System description | System description. Adds info from method e_descr() from SNMP::Info::Entity | ||||||
| 
 | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| @@ -648,6 +657,11 @@ being broadcast. | |||||||
| With the same keys as i_ssidlist, returns the Basic service set | With the same keys as i_ssidlist, returns the Basic service set | ||||||
| identification (BSSID), MAC address, the AP is using for the SSID.  | identification (BSSID), MAC address, the AP is using for the SSID.  | ||||||
| 
 | 
 | ||||||
|  | =item $aironet ps1_status() | ||||||
|  | 
 | ||||||
|  | Returns the PoE injector status based on C<cpoePdSupportedPower> and  | ||||||
|  | C<cpoePdSupportedPowerMode>. | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 Table Methods imported from SNMP::Info::Layer2 | =head2 Table Methods imported from SNMP::Info::Layer2 | ||||||
| @@ -40,7 +40,7 @@ use SNMP::Info::Layer1; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( %SNMP::Info::Layer2::GLOBALS ); | %GLOBALS = ( %SNMP::Info::Layer2::GLOBALS ); | ||||||
| 
 | 
 | ||||||
| @@ -73,6 +73,7 @@ sub os_ver { | |||||||
|     if ( $descr =~ m/version (\d+\.\d+)/ ) { |     if ( $descr =~ m/version (\d+\.\d+)/ ) { | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub model { | sub model { | ||||||
							
								
								
									
										165
									
								
								lib/SNMP/Info/Layer2/Atmedia.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								lib/SNMP/Info/Layer2/Atmedia.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | |||||||
|  | # SNMP::Info::Layer2::Atmedia | ||||||
|  | # | ||||||
|  | # Copyright (c) 2018 Netdisco Developers | ||||||
|  | # All rights reserved. | ||||||
|  | # | ||||||
|  | # Redistribution and use in source and binary forms, with or without | ||||||
|  | # modification, are permitted provided that the following conditions are met: | ||||||
|  | # | ||||||
|  | #     * Redistributions of source code must retain the above copyright notice, | ||||||
|  | #       this list of conditions and the following disclaimer. | ||||||
|  | #     * Redistributions in binary form must reproduce the above copyright | ||||||
|  | #       notice, this list of conditions and the following disclaimer in the | ||||||
|  | #       documentation and/or other materials provided with the distribution. | ||||||
|  | #     * Neither the name of the University of California, Santa Cruz nor the | ||||||
|  | #       names of its contributors may be used to endorse or promote products | ||||||
|  | #       derived from this software without specific prior written permission. | ||||||
|  | # | ||||||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||||
|  | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||||||
|  | # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||||||
|  | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||||||
|  | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||||
|  | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||||
|  | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||||
|  | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||||
|  | # POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
|  | package SNMP::Info::Layer2::Atmedia; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::Layer2; | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer2::Atmedia::ISA       = qw/SNMP::Info::Layer2/; | ||||||
|  | @SNMP::Info::Layer2::Atmedia::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | %MIBS = ( %SNMP::Info::Layer2::MIBS ); | ||||||
|  |  | ||||||
|  | %GLOBALS = ( | ||||||
|  |     %SNMP::Info::Layer2::GLOBALS, | ||||||
|  |     'os_ver'          => '.1.3.6.1.4.1.13458.1.2.1.0', | ||||||
|  |     'atm_serial'      => '.1.3.6.1.4.1.13458.1.1.2.0', | ||||||
|  |     'atm_hardversion' => '.1.3.6.1.4.1.13458.1.3.1.0', | ||||||
|  |     'atm_model'       => '.1.3.6.1.4.1.13458.1.1.6.0', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %FUNCS = (%SNMP::Info::Layer2::FUNCS); | ||||||
|  |  | ||||||
|  | %MUNGE = (%SNMP::Info::Layer2::MUNGE); | ||||||
|  |  | ||||||
|  | sub serial { | ||||||
|  |     my $atmedia = shift; | ||||||
|  |  | ||||||
|  |     return $atmedia->atm_serial(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os { | ||||||
|  |     return 'Atmedia-OS'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub model { | ||||||
|  |     my $atmedia = shift; | ||||||
|  |  | ||||||
|  |     my $atmedia_model = $atmedia->atm_model(); | ||||||
|  |     $atmedia_model =~ s/\<|\>//g; | ||||||
|  |     $atmedia_model =~ s/\//_/g; | ||||||
|  |  | ||||||
|  |     return $atmedia_model; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub vendor { | ||||||
|  |     return 'atmedia'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 1; | ||||||
|  |  | ||||||
|  | __END__ | ||||||
|  |  | ||||||
|  | =head1 NAME | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer2::Atmedia - SNMP Interface to atmedia encryptors | ||||||
|  |  | ||||||
|  | =head1 AUTHOR | ||||||
|  |  | ||||||
|  | Netdisco Developers | ||||||
|  |  | ||||||
|  | =head1 SYNOPSIS | ||||||
|  |  | ||||||
|  |  # Let SNMP::Info determine the correct subclass for you.  | ||||||
|  |  my $atmedia = new SNMP::Info( | ||||||
|  |                           AutoSpecify => 1, | ||||||
|  |                           Debug       => 1, | ||||||
|  |                           DestHost    => 'myhub', | ||||||
|  |                           Community   => 'public', | ||||||
|  |                           Version     => 1 | ||||||
|  |                         )  | ||||||
|  |     or die "Can't connect to DestHost.\n"; | ||||||
|  |  | ||||||
|  |  my $class = $atmedia->class(); | ||||||
|  |  print "SNMP::Info determined this device to fall under subclass : $class\n"; | ||||||
|  |  | ||||||
|  | =head1 DESCRIPTION | ||||||
|  |  | ||||||
|  | Provides abstraction to information obtainable from a atmedia encryptor | ||||||
|  | through SNMP. See inherited classes' documentation for inherited methods. | ||||||
|  |  | ||||||
|  | =head2 Inherited Classes | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Inherited MIBs | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements. | ||||||
|  |  | ||||||
|  | =head1 GLOBALS | ||||||
|  |  | ||||||
|  | These are methods that return scalar value from SNMP | ||||||
|  |  | ||||||
|  | =head2 Overrides | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $atmedia->vendor() | ||||||
|  |  | ||||||
|  | Returns 'atmedia' | ||||||
|  |  | ||||||
|  | =item $atmedia->os() | ||||||
|  |  | ||||||
|  | Returns 'Atmedia-OS' | ||||||
|  |  | ||||||
|  | =item $atmedia->os_ver() | ||||||
|  |  | ||||||
|  | (C<acSoftVersion>) | ||||||
|  |  | ||||||
|  | =item $atmedia->model() | ||||||
|  |  | ||||||
|  | (C<acDescr>) | ||||||
|  |  | ||||||
|  | =item $atmedia->serial() | ||||||
|  |  | ||||||
|  | (C<acSerialNumber>) | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Globals imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"GLOBALS"> for details. | ||||||
|  |  | ||||||
|  | =head1 TABLE METHODS | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"TABLE METHODS"> for details. | ||||||
|  |  | ||||||
|  | =cut | ||||||
| @@ -46,7 +46,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS,    %SNMP::Info::LLDP::MIBS, |     %SNMP::Info::Layer3::MIBS,    %SNMP::Info::LLDP::MIBS, | ||||||
| @@ -229,7 +229,7 @@ sub index_factor { | |||||||
|         if ( ( $model =~ /(470)/ ) |         if ( ( $model =~ /(470)/ ) | ||||||
|         or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) ); |         or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) ); | ||||||
|     $index_factor = 128 |     $index_factor = 128 | ||||||
|         if ( ( $model =~ /(5[56]\d\d)|VSP/ ) |         if ( ( $model =~ /(5[56]\d\d)|VSP|4950|59100/ ) | ||||||
|         and ( $os_ver >= 6 ) ); |         and ( $os_ver >= 6 ) ); | ||||||
| 
 | 
 | ||||||
|     return $index_factor; |     return $index_factor; | ||||||
| @@ -48,7 +48,7 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
|     %SNMP::Info::Layer2::GLOBALS, |     %SNMP::Info::Layer2::GLOBALS, | ||||||
| @@ -200,6 +200,8 @@ sub set_i_duplex_admin { | |||||||
| 
 | 
 | ||||||
|     my $iid = $c1900->c1900_p_ifindex($port); |     my $iid = $c1900->c1900_p_ifindex($port); | ||||||
| 
 | 
 | ||||||
|  |     return 0 unless $iid->{$port}; | ||||||
|  | 
 | ||||||
|     $duplex = lc($duplex); |     $duplex = lc($duplex); | ||||||
| 
 | 
 | ||||||
|     return 0 unless defined $duplexes{$duplex}; |     return 0 unless defined $duplexes{$duplex}; | ||||||
| @@ -218,11 +220,11 @@ sub i_vlan { | |||||||
|         || 'disabled'; |         || 'disabled'; | ||||||
| 
 | 
 | ||||||
|     if ( $overlap eq 'enabled' ) { |     if ( $overlap eq 'enabled' ) { | ||||||
|         return; |         return {}; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup() |     my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup() | ||||||
|         || $c1900->vlanMemberPortOfVlan(); |         || $c1900->vlanMemberPortOfVlan() || {}; | ||||||
| 
 | 
 | ||||||
|     my $i_pvid = {}; |     my $i_pvid = {}; | ||||||
|     foreach my $idx ( keys %$member_of ) { |     foreach my $idx ( keys %$member_of ) { | ||||||
| @@ -244,7 +246,7 @@ sub i_vlan_membership { | |||||||
|     my $partial = shift; |     my $partial = shift; | ||||||
| 
 | 
 | ||||||
|     my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup() |     my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup() | ||||||
|         || $c1900->vlanMemberPortOfVlan(); |         || $c1900->vlanMemberPortOfVlan() || {}; | ||||||
| 
 | 
 | ||||||
|     my $i_vlan_membership = {}; |     my $i_vlan_membership = {}; | ||||||
|     foreach my $idx ( keys %$member_of ) { |     foreach my $idx ( keys %$member_of ) { | ||||||
| @@ -261,7 +263,7 @@ sub i_vlan_membership { | |||||||
|     return $i_vlan_membership; |     return $i_vlan_membership; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub i_vlan_membership_untagged { return; } | sub i_vlan_membership_untagged { return {}; } | ||||||
| 
 | 
 | ||||||
| sub bp_index { | sub bp_index { | ||||||
|     my $c1900   = shift; |     my $c1900   = shift; | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info::Layer2::Cisco; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
|     %SNMP::Info::Layer2::Cisco::GLOBALS, |     %SNMP::Info::Layer2::Cisco::GLOBALS, | ||||||
| @@ -128,25 +128,24 @@ sub i_speed_admin { | |||||||
|     my $c2900   = shift; |     my $c2900   = shift; | ||||||
|     my $partial = shift; |     my $partial = shift; | ||||||
| 
 | 
 | ||||||
|     my %i_speed_admin; |  | ||||||
|     my $p_port        = $c2900->p_port() || {}; |  | ||||||
|     my $interfaces    = $c2900->interfaces($partial); |     my $interfaces    = $c2900->interfaces($partial); | ||||||
|     my $c2900_p_index = $c2900->c2900_p_index() || {}; |     my $c2900_p_index = $c2900->c2900_p_index() || {}; | ||||||
|  |     my $c2900_p_admin = $c2900->c2900_p_speed_admin(); | ||||||
| 
 | 
 | ||||||
|     my %reverse_2900 = reverse %$c2900_p_index; |     my %reverse_2900 = reverse %$c2900_p_index; | ||||||
|     my $c2900_p_speed |  | ||||||
|         = $c2900->c2900_p_speed_admin( $reverse_2900{$partial} ); |  | ||||||
| 
 | 
 | ||||||
|     my %speeds = ( |     my %i_speed_admin; | ||||||
|         'autoDetect' => 'auto', |     foreach my $if ( keys %$interfaces ) { | ||||||
|         's10000000'  => '10 Mbps', |         my $port_2900 = $reverse_2900{$if}; | ||||||
|         's100000000' => '100 Mbps', |         next unless defined $port_2900; | ||||||
|     ); |         my $speed = $c2900_p_admin->{$port_2900}; | ||||||
| 
 |         next unless defined $speed; | ||||||
|     %i_speed_admin |  | ||||||
|         = map { $c2900_p_index->{$_} => $speeds{ $c2900_p_speed->{$_} } } |  | ||||||
|         keys %$c2900_p_index; |  | ||||||
| 
 | 
 | ||||||
|  |         $speed = 'auto' if $speed eq 'autoDetect'; | ||||||
|  |         $speed = '10 Mbps' if $speed eq 's10000000'; | ||||||
|  |         $speed = '100 Mbps' if $speed eq 's100000000'; | ||||||
|  |         $i_speed_admin{$if} = $speed; | ||||||
|  |     } | ||||||
|     return \%i_speed_admin; |     return \%i_speed_admin; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -190,7 +189,7 @@ sub set_i_duplex_admin { | |||||||
|     return $c2900->set_c2900_p_duplex_admin( $duplexes{$duplex}, $iid ); |     return $c2900->set_c2900_p_duplex_admin( $duplexes{$duplex}, $iid ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Use i_descritption for port key, cuz i_name can be manually entered. | # Use i_description for port key, cuz i_name can be manually entered. | ||||||
| sub interfaces { | sub interfaces { | ||||||
|     my $c2900   = shift; |     my $c2900   = shift; | ||||||
|     my $partial = shift; |     my $partial = shift; | ||||||
| @@ -42,7 +42,7 @@ use SNMP::Info::Layer2::Cisco; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::Cisco::MIBS, |     %SNMP::Info::Layer2::Cisco::MIBS, | ||||||
| @@ -70,7 +70,7 @@ $VERSION = '3.22'; | |||||||
| sub i_physical { | sub i_physical { | ||||||
|     my $cat = shift; |     my $cat = shift; | ||||||
| 
 | 
 | ||||||
|     my $p_port = $cat->p_port(); |     my $p_port = $cat->p_port() || {}; | ||||||
| 
 | 
 | ||||||
|     my %i_physical; |     my %i_physical; | ||||||
|     foreach my $port ( keys %$p_port ) { |     foreach my $port ( keys %$p_port ) { | ||||||
| @@ -104,8 +104,8 @@ sub os_ver { | |||||||
| # Workaround for incomplete bp_index | # Workaround for incomplete bp_index | ||||||
| sub bp_index { | sub bp_index { | ||||||
|     my $cat     = shift; |     my $cat     = shift; | ||||||
|     my $p_index = $cat->p_port(); |     my $p_index = $cat->p_port() || {}; | ||||||
|     my $b_index = $cat->p_oidx(); |     my $b_index = $cat->p_oidx() || {}; | ||||||
| 
 | 
 | ||||||
|     my %bp_index; |     my %bp_index; | ||||||
|     foreach my $iid ( keys %$p_index ) { |     foreach my $iid ( keys %$p_index ) { | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info::SONMP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS, |     %SNMP::Info::MIBS, | ||||||
| @@ -52,7 +52,7 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, |     %SNMP::Info::Layer2::MIBS, | ||||||
| @@ -50,11 +50,7 @@ use SNMP::Info::CDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 |  | ||||||
| # This will be filled in with the device's index into the EntPhysicalEntry |  | ||||||
| # table by the serial() function. |  | ||||||
| our $index = undef; |  | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
|     %SNMP::Info::Layer2::GLOBALS, |     %SNMP::Info::Layer2::GLOBALS, | ||||||
| @@ -98,6 +94,10 @@ sub vendor { | |||||||
|     return 'cisco'; |     return 'cisco'; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub os { | ||||||
|  |     return 'ros'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # Walk the entPhysicalSerialNum table and return the first serial found | # Walk the entPhysicalSerialNum table and return the first serial found | ||||||
| sub serial { | sub serial { | ||||||
|     my $ciscosb  = shift; |     my $ciscosb  = shift; | ||||||
| @@ -113,20 +113,27 @@ sub serial { | |||||||
| 
 | 
 | ||||||
| sub os_ver { | sub os_ver { | ||||||
|     my $ciscosb = shift; |     my $ciscosb = shift; | ||||||
|     my $os_ver  = $ciscosb->e_swver(); |     my $e_swver  = $ciscosb->e_swver(); | ||||||
| 
 | 
 | ||||||
|     return $os_ver->{$index} if defined $index; |     foreach my $e ( sort keys %$e_swver ) { | ||||||
|  |         if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) { | ||||||
|  |             return $e_swver->{$e}; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Grab e_model from Entity and tag on e_hwver | # Grab e_model from Entity and tag on e_hwver | ||||||
| sub model { | sub model { | ||||||
|     my $ciscosb = shift; |     my $ciscosb = shift; | ||||||
|     my $e_model   = $ciscosb->e_model(); |     my $e_model = $ciscosb->e_model(); | ||||||
|     my $e_hwver = $ciscosb->e_hwver(); |     my $e_hwver = $ciscosb->e_hwver(); | ||||||
| 
 | 
 | ||||||
|     if (defined ($index)) { |     foreach my $e ( sort keys %$e_model ) { | ||||||
|         my $model = "$e_model->{$index} $e_hwver->{$index}"; |         if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) { | ||||||
|         return $model; |             return $e_model->{$e}; | ||||||
|  |             #my $model = "$e_model->{$e} $e_hwver->{$e}"; | ||||||
|  |             #return $model; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     return $ciscosb->description(); |     return $ciscosb->description(); | ||||||
| } | } | ||||||
| @@ -210,6 +217,10 @@ These are methods that return scalar value from SNMP | |||||||
| 
 | 
 | ||||||
| Returns 'cisco' | Returns 'cisco' | ||||||
| 
 | 
 | ||||||
|  | =item $ciscosb->os() | ||||||
|  | 
 | ||||||
|  | Returns 'ros' | ||||||
|  | 
 | ||||||
| =item $ciscosb->os_ver() | =item $ciscosb->os_ver() | ||||||
| 
 | 
 | ||||||
| Returns software version (C<entPhysicalSoftwareRev>) | Returns software version (C<entPhysicalSoftwareRev>) | ||||||
| @@ -37,7 +37,7 @@ use Exporter; | |||||||
| use SNMP::Info::Layer3; | use SNMP::Info::Layer3; | ||||||
| use SNMP::Info::MAU; | use SNMP::Info::MAU; | ||||||
| use SNMP::Info::CDP; | use SNMP::Info::CDP; | ||||||
| use SNMP::Info::Aggregate; | use SNMP::Info::Aggregate 'agg_ports_ifstack'; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::Layer2::HP::ISA = qw/ | @SNMP::Info::Layer2::HP::ISA = qw/ | ||||||
|     SNMP::Info::Aggregate |     SNMP::Info::Aggregate | ||||||
| @@ -50,22 +50,24 @@ use SNMP::Info::Aggregate; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
|     %SNMP::Info::MAU::MIBS, |     %SNMP::Info::MAU::MIBS, | ||||||
|     %SNMP::Info::CDP::MIBS, |     %SNMP::Info::CDP::MIBS, | ||||||
|     %SNMP::Info::Aggregate::MIBS, |     %SNMP::Info::Aggregate::MIBS, | ||||||
|     'RFC1271-MIB'    => 'logDescription', |     'RFC1271-MIB'            => 'logDescription', | ||||||
|     'HP-ICF-OID'     => 'hpSwitch4000', |     'HP-ICF-OID'             => 'hpSwitch4000', | ||||||
|     'STATISTICS-MIB' => 'hpSwitchCpuStat', |     'STATISTICS-MIB'         => 'hpSwitchCpuStat', | ||||||
|     'NETSWITCH-MIB'  => 'hpMsgBufFree', |     'NETSWITCH-MIB'          => 'hpMsgBufFree', | ||||||
|     'CONFIG-MIB'     => 'hpSwitchConfig', |     'CONFIG-MIB'             => 'hpSwitchConfig', | ||||||
|     'HP-ICF-CHASSIS' => 'hpicfSensorObjectId', |     'HP-ICF-CHASSIS'         => 'hpicfSensorObjectId', | ||||||
|     'HP-ICF-BRIDGE'  => 'hpicfBridgeRstpForceVersion', |     'HP-ICF-BRIDGE'          => 'hpicfBridgeRstpForceVersion', | ||||||
|     'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent', |     'HP-ICF-POE-MIB'         => 'hpicfPoePethPsePortCurrent', | ||||||
|     'SEMI-MIB'       => 'hpHttpMgSerialNumber', |     'SEMI-MIB'               => 'hpHttpMgSerialNumber', | ||||||
|  |     'HP-SWITCH-PL-MIB'       => 'hpSwitchProliant', | ||||||
|  |     'BLADETYPE4-NETWORK-MIB' => 'hpProLiant-GbE2c-InterconnectSwitch', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
| @@ -125,6 +127,8 @@ $VERSION = '3.22'; | |||||||
| %MODEL_MAP = ( | %MODEL_MAP = ( | ||||||
|     'J8131A' => 'WAP-420-WW', |     'J8131A' => 'WAP-420-WW', | ||||||
|     'J8130A' => 'WAP-420-NA', |     'J8130A' => 'WAP-420-NA', | ||||||
|  |     'J9833A' => 'PS1810-8G', | ||||||
|  |     'J9834A' => 'PS1810-24G', | ||||||
|     'J8133A' => 'AP520WL', |     'J8133A' => 'AP520WL', | ||||||
|     'J8680A' => '9408sl', |     'J8680A' => '9408sl', | ||||||
|     'J9091A' => '8212zl', |     'J9091A' => '8212zl', | ||||||
| @@ -139,8 +143,10 @@ $VERSION = '3.22'; | |||||||
|     'J8992A' => '6200yl-24G', |     'J8992A' => '6200yl-24G', | ||||||
|     'J4902A' => '6108', |     'J4902A' => '6108', | ||||||
|     'J8698A' => '5412zl', |     'J8698A' => '5412zl', | ||||||
|  |     'J9851A' => '5412R-zl2', | ||||||
|     'J8719A' => '5408yl', |     'J8719A' => '5408yl', | ||||||
|     'J8697A' => '5406zl', |     'J8697A' => '5406zl', | ||||||
|  |     'J9850A' => '5406R-zl2', | ||||||
|     'J8718A' => '5404yl', |     'J8718A' => '5404yl', | ||||||
|     'J4819A' => '5308XL', |     'J4819A' => '5308XL', | ||||||
|     'J4850A' => '5304XL', |     'J4850A' => '5304XL', | ||||||
| @@ -172,8 +178,12 @@ $VERSION = '3.22'; | |||||||
|     'J4815A' => '3324XL', |     'J4815A' => '3324XL', | ||||||
|     'J4851A' => '3124', |     'J4851A' => '3124', | ||||||
|     'J9729A' => '2920-48G-PoE+', |     'J9729A' => '2920-48G-PoE+', | ||||||
|  |     'J9729A' => '2920-48G-PoE+', | ||||||
|  |     'J9728A' => '2920-48G', | ||||||
|     'J9728A' => '2920-48G', |     'J9728A' => '2920-48G', | ||||||
|     'J9727A' => '2920-24G-PoE+', |     'J9727A' => '2920-24G-PoE+', | ||||||
|  |     'J9727A' => '2920-24G-PoE+', | ||||||
|  |     'J9726A' => '2920-24G', | ||||||
|     'J9726A' => '2920-24G', |     'J9726A' => '2920-24G', | ||||||
|     'J9562A' => '2915-8G-PoE', |     'J9562A' => '2915-8G-PoE', | ||||||
|     'J9148A' => '2910al-48G-PoE+', |     'J9148A' => '2910al-48G-PoE+', | ||||||
| @@ -186,30 +196,42 @@ $VERSION = '3.22'; | |||||||
|     'J4903A' => '2824', |     'J4903A' => '2824', | ||||||
|     'J9022A' => '2810-48G', |     'J9022A' => '2810-48G', | ||||||
|     'J9021A' => '2810-24G', |     'J9021A' => '2810-24G', | ||||||
|     'J4899C' => '2650C', |  | ||||||
|     'J8165A' => '2650-PWR', |     'J8165A' => '2650-PWR', | ||||||
|     'J4899B' => '2650-CR', |     'J4899B' => '2650-CR', | ||||||
|  |     'J4899C' => '2650C', | ||||||
|     'J4899A' => '2650', |     'J4899A' => '2650', | ||||||
|     'J4900C' => '2626C', |  | ||||||
|     'J8164A' => '2626-PWR', |     'J8164A' => '2626-PWR', | ||||||
|     'J4900B' => '2626-CR', |     'J4900B' => '2626-CR', | ||||||
|  |     'J4900C' => '2626C', | ||||||
|     'J4900A' => '2626', |     'J4900A' => '2626', | ||||||
|     'J9627A' => '2620-48-PoE+', |     'J9627A' => '2620-48-PoE+', | ||||||
|     'J9626A' => '2620-48', |     'J9626A' => '2620-48', | ||||||
|     'J9625A' => '2620-24-PoE+', |  | ||||||
|     'J9624A' => '2620-24-PPoE+', |     'J9624A' => '2620-24-PPoE+', | ||||||
|  |     'J9625A' => '2620-24-PoE+', | ||||||
|     'J9623A' => '2620-24', |     'J9623A' => '2620-24', | ||||||
|     'J9565A' => '2615-8-PoE', |     'J9565A' => '2615-8-PoE', | ||||||
|     'J9089A' => '2610-48-PWR', |     'J9089A' => '2610-48-PWR', | ||||||
|     'J9088A' => '2610-48', |     'J9088A' => '2610-48', | ||||||
|     'J9086A' => '2610-24/12PWR', |  | ||||||
|     'J9087A' => '2610-24-PWR', |     'J9087A' => '2610-24-PWR', | ||||||
|  |     'J9086A' => '2610-24/12PWR', | ||||||
|     'J9085A' => '2610-24', |     'J9085A' => '2610-24', | ||||||
|     'J8762A' => '2600-8-PWR', |     'J8762A' => '2600-8-PWR', | ||||||
|  |     'J9780A' => '2530-8-PoE+', | ||||||
|  |     'J9774A' => '2530-8G-PoEP', | ||||||
|  |     'J9777A' => '2530-8G', | ||||||
|  |     'J9783A' => '2530-8', | ||||||
|  |     'J9778A' => '2530-48-PoE+', | ||||||
|  |     'J9853A' => '2530-48G-PoE+-2SFP+', | ||||||
|     'J9772A' => '2530-48G-PoE+', |     'J9772A' => '2530-48G-PoE+', | ||||||
|  |     'J9855A' => '2530-48G-2SFP+', | ||||||
|     'J9775A' => '2530-48G', |     'J9775A' => '2530-48G', | ||||||
|  |     'J9781A' => '2530-48', | ||||||
|  |     'J9779A' => '2530-24-PoE+', | ||||||
|  |     'J9854A' => '2530-24G-PoE+-2SFP+', | ||||||
|     'J9773A' => '2530-24G-PoE+', |     'J9773A' => '2530-24G-PoE+', | ||||||
|  |     'J9856A' => '2530-24G-2SFP+', | ||||||
|     'J9776A' => '2530-24G', |     'J9776A' => '2530-24G', | ||||||
|  |     'J9782A' => '2530-24', | ||||||
|     'J4813A' => '2524', |     'J4813A' => '2524', | ||||||
|     'J9298A' => '2520G-8-PoE', |     'J9298A' => '2520G-8-PoE', | ||||||
|     'J9299A' => '2520G-24-PoE', |     'J9299A' => '2520G-24-PoE', | ||||||
| @@ -225,6 +247,8 @@ $VERSION = '3.22'; | |||||||
|     'J4817A' => '2312', |     'J4817A' => '2312', | ||||||
|     'J9449A' => '1810G-8', |     'J9449A' => '1810G-8', | ||||||
|     'J9450A' => '1810G-24', |     'J9450A' => '1810G-24', | ||||||
|  |     'J9802A' => '1810-8G', | ||||||
|  |     'J9803A' => '1810-24G', | ||||||
|     'J9029A' => '1800-8G', |     'J9029A' => '1800-8G', | ||||||
|     'J9028A' => '1800-24G', |     'J9028A' => '1800-24G', | ||||||
| ); | ); | ||||||
| @@ -602,6 +626,14 @@ Included in V2 mibs from Cisco | |||||||
| 
 | 
 | ||||||
| =item F<HP-ICF-POE-MIB> | =item F<HP-ICF-POE-MIB> | ||||||
| 
 | 
 | ||||||
|  | =item F<HP-ICF-CHASSIS> | ||||||
|  | 
 | ||||||
|  | =item F<SEMI-MIB> | ||||||
|  | 
 | ||||||
|  | =item F<HP-SWITCH-PL-MIB> | ||||||
|  | 
 | ||||||
|  | =item F<BLADETYPE4-NETWORK-MIB> | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| The last four MIBs listed are from HP and can be found at | The last four MIBs listed are from HP and can be found at | ||||||
| @@ -44,7 +44,7 @@ use SNMP::Info::CDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, |     %SNMP::Info::Layer2::MIBS, | ||||||
| @@ -36,7 +36,7 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, |     %SNMP::Info::Layer2::MIBS, | ||||||
| @@ -66,6 +66,7 @@ sub os_ver { | |||||||
|     if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){ |     if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){ | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub serial { | sub serial { | ||||||
| @@ -75,7 +76,7 @@ sub serial { | |||||||
|         my $str = substr($1,8,10); |         my $str = substr($1,8,10); | ||||||
|         return $str; |         return $str; | ||||||
|     } |     } | ||||||
| 
 |     return; | ||||||
| } | } | ||||||
| sub vendor { | sub vendor { | ||||||
|     return 'Kentrox'; |     return 'Kentrox'; | ||||||
| @@ -87,6 +88,7 @@ sub model { | |||||||
|     if ( $descr =~ /^(\S+\s\S+)/){ |     if ( $descr =~ /^(\S+\s\S+)/){ | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
|  |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 1; | 1; | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info::Airespace; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS,        %SNMP::Info::Bridge::MIBS, |     %SNMP::Info::MIBS,        %SNMP::Info::Bridge::MIBS, | ||||||
| @@ -42,7 +42,7 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS, |     %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS, | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info::Bridge; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS, |     %SNMP::Info::MIBS, | ||||||
| @@ -49,6 +49,7 @@ $VERSION = '3.22'; | |||||||
|     'NTWS-CLIENT-SESSION-MIB'       => 'ntwsClSessTotalSessions', |     'NTWS-CLIENT-SESSION-MIB'       => 'ntwsClSessTotalSessions', | ||||||
|     'NTWS-SYSTEM-MIB'               => 'ntwsSysCpuAverageLoad', |     'NTWS-SYSTEM-MIB'               => 'ntwsSysCpuAverageLoad', | ||||||
|     'NTWS-BASIC-MIB'                => 'ntwsVersionString', |     'NTWS-BASIC-MIB'                => 'ntwsVersionString', | ||||||
|  |     'NTWS-AP-CONFIG-MIB'            => 'ntwsApConfServProfBeaconEnabled', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
| @@ -40,7 +40,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # This will be filled in with the device's index into the EntPhysicalEntry | # This will be filled in with the device's index into the EntPhysicalEntry | ||||||
| # table by the serial() function. | # table by the serial() function. | ||||||
| @@ -89,7 +89,7 @@ sub serial { | |||||||
| 
 | 
 | ||||||
|     # Without Enitity-MIB, we've got to work our way through a bunch of |     # Without Enitity-MIB, we've got to work our way through a bunch of | ||||||
|     # different locales... |     # different locales... | ||||||
|     return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;; |     return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;; | ||||||
|     return 'none'; |     return 'none'; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -139,7 +139,7 @@ sub interfaces { | |||||||
|     return $interfaces; |     return $interfaces; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # these seem to work for GSM models but not GS | # these seem to work for GSM/FSM models but not GS | ||||||
| # https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529 | # https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529 | ||||||
| sub os_ver { | sub os_ver { | ||||||
|     my $netgear = shift; |     my $netgear = shift; | ||||||
| @@ -148,7 +148,7 @@ sub os_ver { | |||||||
|         my $os_ver  = $netgear->e_swver(); |         my $os_ver  = $netgear->e_swver(); | ||||||
|         return $os_ver->{$index} if defined $os_ver; |         return $os_ver->{$index} if defined $os_ver; | ||||||
|     } |     } | ||||||
|     return $netgear->ng_gsmosver() if defined  $netgear->model and $netgear->model =~ m/GSM\d/i; |     return $netgear->ng_gsmosver() if defined  $netgear->model and $netgear->model =~ m/[FG]SM\d/i; | ||||||
|     return $netgear->ng_fsosver() if defined  $netgear->model and $netgear->model =~ m/FS\d/i; |     return $netgear->ng_fsosver() if defined  $netgear->model and $netgear->model =~ m/FS\d/i; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
							
								
								
									
										253
									
								
								lib/SNMP/Info/Layer2/Nexans.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								lib/SNMP/Info/Layer2/Nexans.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,253 @@ | |||||||
|  | # SNMP::Info::Layer2::Nexans | ||||||
|  | # | ||||||
|  | # Copyright (c) 2018 Christoph Neuhaus | ||||||
|  | # All rights reserved. | ||||||
|  | # | ||||||
|  | # Redistribution and use in source and binary forms, with or without | ||||||
|  | # modification, are permitted provided that the following conditions are met: | ||||||
|  | # | ||||||
|  | #     * Redistributions of source code must retain the above copyright notice, | ||||||
|  | #       this list of conditions and the following disclaimer. | ||||||
|  | #     * Redistributions in binary form must reproduce the above copyright | ||||||
|  | #       notice, this list of conditions and the following disclaimer in the | ||||||
|  | #       documentation and/or other materials provided with the distribution. | ||||||
|  | #     * Neither the name of the University of California, Santa Cruz nor the | ||||||
|  | #       names of its contributors may be used to endorse or promote products | ||||||
|  | #       derived from this software without specific prior written permission. | ||||||
|  | # | ||||||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||||
|  | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||||||
|  | # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||||||
|  | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||||||
|  | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||||
|  | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||||
|  | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||||
|  | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||||
|  | # POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
|  | package SNMP::Info::Layer2::Nexans; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::Layer2; | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer2::Nexans::ISA = qw/SNMP::Info::Layer2 Exporter/; | ||||||
|  | @SNMP::Info::Layer2::Nexans::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | %MIBS = ( | ||||||
|  |     %SNMP::Info::Layer2::MIBS, | ||||||
|  |     'NEXANS-MIB'    => 'nexansANS', | ||||||
|  |     'NEXANS-BM-MIB' => 'infoDescr', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %GLOBALS = ( | ||||||
|  |     %SNMP::Info::Layer2::GLOBALS, | ||||||
|  |     'mac'   => 'adminAgentPhysAddress.0', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %FUNCS = ( | ||||||
|  |     %SNMP::Info::Layer2::FUNCS, | ||||||
|  |     'i_duplex'          => 'portLinkState', #NEXANS-BM-MIB | ||||||
|  |     'i_duplex_admin'    => 'portSpeedDuplexSetup', #NEXANS-BM-MIB | ||||||
|  |     'nexans_i_name'     => 'ifAlias', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %MUNGE = ( | ||||||
|  |     %SNMP::Info::Layer2::MUNGE, | ||||||
|  |     'i_duplex'          => \&munge_i_duplex, | ||||||
|  |     'i_duplex_admin'    => \&munge_i_duplex_admin, | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | sub munge_i_duplex { | ||||||
|  |     my $duplex   = shift; | ||||||
|  |     return unless defined $duplex; | ||||||
|  |     $duplex = 'half' if $duplex =~/Hdx/; | ||||||
|  |     $duplex = 'full' if $duplex =~/Fdx/; | ||||||
|  |     return $duplex; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub munge_i_duplex_admin { | ||||||
|  |     my $duplex_admin    = shift; | ||||||
|  |     return unless defined $duplex_admin; | ||||||
|  |     $duplex_admin = 'full' if $duplex_admin =~/Fdx/; | ||||||
|  |     $duplex_admin = 'half' if $duplex_admin =~/Hdx/; | ||||||
|  |     $duplex_admin = 'auto' if $duplex_admin =~/autoneg/; | ||||||
|  |     return $duplex_admin; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub vendor { | ||||||
|  |     return 'nexans'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub model { | ||||||
|  |     my $nexans  = shift; | ||||||
|  |     my $id      = $nexans->id() || ''; | ||||||
|  |     my $model   = &SNMP::translateObj($id); | ||||||
|  |     return $id unless defined $model; | ||||||
|  |     return $model; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os { | ||||||
|  |     return 'nexanos'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os_ver { | ||||||
|  |     my $nexans  = shift; | ||||||
|  |     my $ver     = $nexans->infoMgmtFirmwareVersion() || ''; | ||||||
|  |     return $ver; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub serial { | ||||||
|  |     my $nexans = shift; | ||||||
|  |     return $nexans->infoSeriesNo(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub i_name { | ||||||
|  |     my $nexans  = shift; | ||||||
|  |     my $return  = $nexans->nexans_i_name(); | ||||||
|  |     # replace i_name where possible | ||||||
|  |     foreach my $iid ( keys %$return ) { | ||||||
|  |         next unless $return->{$iid} eq ""; | ||||||
|  |         $return->{$iid} = $iid;  | ||||||
|  |     } | ||||||
|  |     return \%$return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 1; | ||||||
|  |  | ||||||
|  | __END__ | ||||||
|  |  | ||||||
|  | =head1 NAME | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer2::Nexans - SNMP Interface to Nexans network devices. | ||||||
|  |  | ||||||
|  | =head1 AUTHOR | ||||||
|  |  | ||||||
|  | Christoph Neuhaus | ||||||
|  |  | ||||||
|  | =head1 SYNOPSIS | ||||||
|  |  | ||||||
|  | # Let SNMP::Info determine the correct subclass for you.  | ||||||
|  |  | ||||||
|  |     my $nexans = new SNMP::Info( | ||||||
|  |                             AutoSpecify => 1, | ||||||
|  |                             Debug       => 1, | ||||||
|  |                             DestHost    => 'myswitch', | ||||||
|  |                             Community   => 'public', | ||||||
|  |                             Version     => 2 | ||||||
|  |                             )  | ||||||
|  |     or die "Can't connect to DestHost.\n"; | ||||||
|  |  | ||||||
|  |     my $class = $nexans->class(); | ||||||
|  |     print "SNMP::Info determined this device to fall under subclass : $class\n"; | ||||||
|  |  | ||||||
|  | =head1 DESCRIPTION | ||||||
|  |  | ||||||
|  | Abstraction subclass for Nexans network devices. | ||||||
|  |  | ||||||
|  | tested devices: | ||||||
|  |  | ||||||
|  |     fiberSwitch100BmPlus version 3.61 | ||||||
|  |     gigaSwitch641DeskSfpTp version 3.68, 4.14W | ||||||
|  |     gigaSwitchV3d2SfpSfp version 3.68, 4.02, 4.02B, 4.10C, 4,14W | ||||||
|  |  | ||||||
|  | For speed or debugging purposes you can call the subclass directly, but not | ||||||
|  | after determining a more specific class using the method above.  | ||||||
|  |  | ||||||
|  |     my $nexans = new SNMP::Info::Layer2::Nexans(...); | ||||||
|  |  | ||||||
|  | =head2 Inherited Classes | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Required MIBs | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item F<NEXANS> | ||||||
|  |  | ||||||
|  | =item F<NEXANS-BM> | ||||||
|  |  | ||||||
|  | =item Inherited Classes' MIBs | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head1 GLOBALS | ||||||
|  |  | ||||||
|  | These are methods that return scalar value from SNMP | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $nexans->vendor() | ||||||
|  |  | ||||||
|  | Returns 'nexans' | ||||||
|  |  | ||||||
|  | =item $nexans->model() | ||||||
|  |  | ||||||
|  | Returns the chassis model. | ||||||
|  |  | ||||||
|  | =item $nexans->os() | ||||||
|  |  | ||||||
|  | Returns 'nexanos' | ||||||
|  |  | ||||||
|  | =item $nexans->os_ver() | ||||||
|  |  | ||||||
|  | Returns the software version. | ||||||
|  |  | ||||||
|  | =item $nexans->serial() | ||||||
|  |  | ||||||
|  | Returns the chassis serial number. | ||||||
|  |  | ||||||
|  | (C<infoSeriesNo>) | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Globals imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details. | ||||||
|  |  | ||||||
|  | =head1 TABLE METHODS | ||||||
|  |  | ||||||
|  | These are methods that return tables of information in the form of a reference | ||||||
|  | to a hash. | ||||||
|  |  | ||||||
|  | =over  | ||||||
|  |  | ||||||
|  | =item $nexans->i_name() | ||||||
|  |  | ||||||
|  | Returns reference to map of IIDs to human-set port name. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details. | ||||||
|  |  | ||||||
|  | =head1 Data Munging Callback Subroutines | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item munge_i_duplex() | ||||||
|  |  | ||||||
|  | Converts duplex returned by C<portLinkState> to either 'full' or 'half'. | ||||||
|  |  | ||||||
|  | =item munge_i_duplex_admin() | ||||||
|  |  | ||||||
|  | Converts duplex returned by C<portSpeedDuplexSetup> to either 'full', 'half', | ||||||
|  | or 'auto'. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =cut | ||||||
| @@ -41,13 +41,11 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, |     %SNMP::Info::Layer2::MIBS, | ||||||
|     %SNMP::Info::IEEE802dot11::MIBS, |     %SNMP::Info::IEEE802dot11::MIBS, | ||||||
| 
 |  | ||||||
|     #'ORiNOCO-MIB' => 'orinoco', |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS | %GLOBALS | ||||||
| @@ -56,12 +54,6 @@ $VERSION = '3.22'; | |||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
|     %SNMP::Info::Layer2::FUNCS, |     %SNMP::Info::Layer2::FUNCS, | ||||||
|     %SNMP::Info::IEEE802dot11::FUNCS, |     %SNMP::Info::IEEE802dot11::FUNCS, | ||||||
| 
 |  | ||||||
|     # ORiNOCO-MIB:oriWirelessIfPropertiesTable |  | ||||||
|     #'ori_ssid'       => 'oriWirelessIfNetworkName', |  | ||||||
|     #'ori_channel'    => 'oriWirelessIfChannel', |  | ||||||
|     #'ori_closed_sys' => 'oriWirelessIfClosedSystem', |  | ||||||
|     # ORiNOCO-MIB:oriSystemInvMgmtComponentTable |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, ); | %MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, ); | ||||||
| @@ -165,22 +157,6 @@ sub interfaces { | |||||||
|     return \%interfaces; |     return \%interfaces; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #sub i_ssidbcast { |  | ||||||
| #    my $orinoco = shift; |  | ||||||
| #    my $partial = shift; |  | ||||||
| # |  | ||||||
| #    my $bcast = $orinoco->ori_closed_sys($partial) || {}; |  | ||||||
| # |  | ||||||
| #    my %i_ssidbcast; |  | ||||||
| #    foreach my $iid (keys %$bcast){ |  | ||||||
| #        my $bc   = $bcast->{$iid}; |  | ||||||
| #        next unless defined $bc; |  | ||||||
| # |  | ||||||
| #        $i_ssidbcast{$iid} = $bc; |  | ||||||
| #    } |  | ||||||
| #    return \%i_ssidbcast; |  | ||||||
| #} |  | ||||||
| 
 |  | ||||||
| 1; | 1; | ||||||
| __END__ | __END__ | ||||||
| 
 | 
 | ||||||
							
								
								
									
										182
									
								
								lib/SNMP/Info/Layer2/Sixnet.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								lib/SNMP/Info/Layer2/Sixnet.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,182 @@ | |||||||
|  | # SNMP::Info::Layer2::Sixnet | ||||||
|  | # | ||||||
|  | # Copyright (c) 2018 Eric Miller | ||||||
|  | # All rights reserved. | ||||||
|  | # | ||||||
|  | # Redistribution and use in source and binary forms, with or without | ||||||
|  | # modification, are permitted provided that the following conditions are met: | ||||||
|  | # | ||||||
|  | #     * Redistributions of source code must retain the above copyright notice, | ||||||
|  | #       this list of conditions and the following disclaimer. | ||||||
|  | #     * Redistributions in binary form must reproduce the above copyright | ||||||
|  | #       notice, this list of conditions and the following disclaimer in the | ||||||
|  | #       documentation and/or other materials provided with the distribution. | ||||||
|  | #     * Neither the name of the University of California, Santa Cruz nor the | ||||||
|  | #       names of its contributors may be used to endorse or promote products | ||||||
|  | #       derived from this software without specific prior written permission. | ||||||
|  | # | ||||||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||||
|  | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||||||
|  | # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||||||
|  | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||||||
|  | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||||
|  | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||||
|  | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||||
|  | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||||
|  | # POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
|  | package SNMP::Info::Layer2::Sixnet; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::Layer2; | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer2::Sixnet::ISA       = qw/SNMP::Info::Layer2 Exporter/; | ||||||
|  | @SNMP::Info::Layer2::Sixnet::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | %MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',); | ||||||
|  |  | ||||||
|  | %GLOBALS = ( | ||||||
|  |   %SNMP::Info::Layer2::GLOBALS, | ||||||
|  |   'os_ver'     => 'firmwareRevision', | ||||||
|  |   's_model'    => 'sxid', | ||||||
|  |   'ps1_status' => 'p1status', | ||||||
|  |   'ps2_status' => 'p2status', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %FUNCS = (%SNMP::Info::Layer2::FUNCS,); | ||||||
|  |  | ||||||
|  | %MUNGE = (%SNMP::Info::Layer2::MUNGE,); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | sub vendor { | ||||||
|  |   return 'sixnet'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os { | ||||||
|  |   return 'sixnet'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub model { | ||||||
|  |   my $sixnet = shift; | ||||||
|  |  | ||||||
|  |   my $s_model = $sixnet->s_model(); | ||||||
|  |   return $s_model if defined $s_model; | ||||||
|  |  | ||||||
|  |   my $id = $sixnet->id(); | ||||||
|  |   return unless defined $id; | ||||||
|  |  | ||||||
|  |   my $model = SNMP::translateObj($id); | ||||||
|  |   return $model ? $model : $id; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 1; | ||||||
|  |  | ||||||
|  | __END__ | ||||||
|  |  | ||||||
|  | =head1 NAME | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer2::Sixnet - SNMP Interface to Sixnet industrial switches | ||||||
|  |  | ||||||
|  | =head1 AUTHOR | ||||||
|  |  | ||||||
|  | Eric Miller | ||||||
|  |  | ||||||
|  | =head1 SYNOPSIS | ||||||
|  |  | ||||||
|  |     my $sixnet = new SNMP::Info( | ||||||
|  |               AutoSpecify => 1, | ||||||
|  |               Debug       => 1, | ||||||
|  |               DestHost    => 'myswitch', | ||||||
|  |               Community   => 'public', | ||||||
|  |               Version     => 2 | ||||||
|  |             )  | ||||||
|  |  | ||||||
|  |     or die "Can't connect to DestHost.\n"; | ||||||
|  |  | ||||||
|  |     my $class = $sixnet->class(); | ||||||
|  |     print " Using device sub class : $class\n"; | ||||||
|  |  | ||||||
|  | =head1 DESCRIPTION | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer2::Sixnet is a subclass of SNMP::Info that provides an | ||||||
|  | interface to Sixnet industrial switches. | ||||||
|  |  | ||||||
|  | For speed or debugging purposes you can call the subclass directly, but not | ||||||
|  | after determining a more specific class using the method above.  | ||||||
|  |  | ||||||
|  |  my $sixnet = new SNMP::Info::Layer2::Sixnet(...); | ||||||
|  |  | ||||||
|  | =head2 Inherited Classes | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Required MIBs | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item F<SIXNET-MIB> | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Inherited MIBs | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements. | ||||||
|  |  | ||||||
|  | =head1 GLOBALS | ||||||
|  |  | ||||||
|  | These are methods that return scalar value from SNMP | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $sixnet->vendor() | ||||||
|  |  | ||||||
|  | Returns 'sixnet' | ||||||
|  |  | ||||||
|  | =item $sixnet->os() | ||||||
|  |  | ||||||
|  | Returns 'sixnet' | ||||||
|  |  | ||||||
|  | =item $sixnet->os_ver() | ||||||
|  |  | ||||||
|  | Returns the software version returned by C<firmwareRevision> | ||||||
|  |  | ||||||
|  | =item $sixnet->model() | ||||||
|  |  | ||||||
|  | Returns model type. Returns C<sxid> if it exists, otherwise cross references | ||||||
|  | $sixnet->id() with the F<SIXNET-MIB>. | ||||||
|  |  | ||||||
|  | =item $sixnet->ps1_status() | ||||||
|  |  | ||||||
|  | (C<p1status>) | ||||||
|  |  | ||||||
|  | =item $sixnet->ps2_status() | ||||||
|  |  | ||||||
|  | (C<p2status>) | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Globals imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"GLOBALS"> for details. | ||||||
|  |  | ||||||
|  | =head1 TABLE METHODS | ||||||
|  |  | ||||||
|  | These are methods that return tables of information in the form of a reference | ||||||
|  | to a hash. | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"TABLE METHODS"> for details. | ||||||
|  |  | ||||||
|  | =cut | ||||||
| @@ -40,7 +40,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS, |     %SNMP::Info::MIBS, | ||||||
| @@ -51,6 +51,7 @@ $VERSION = '3.22'; | |||||||
|     'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB'       => 'trpzClSessTotalSessions', |     'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB'       => 'trpzClSessTotalSessions', | ||||||
|     'TRAPEZE-NETWORKS-SYSTEM-MIB'               => 'trpzSysCpuAverageLoad', |     'TRAPEZE-NETWORKS-SYSTEM-MIB'               => 'trpzSysCpuAverageLoad', | ||||||
|     'TRAPEZE-NETWORKS-BASIC-MIB'                => 'trpzVersionString', |     'TRAPEZE-NETWORKS-BASIC-MIB'                => 'trpzVersionString', | ||||||
|  |     'TRAPEZE-NETWORKS-AP-CONFIG-MIB'  => 'trpzApConfServProfBeaconEnabled', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
							
								
								
									
										377
									
								
								lib/SNMP/Info/Layer2/Ubiquiti.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										377
									
								
								lib/SNMP/Info/Layer2/Ubiquiti.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,377 @@ | |||||||
|  | # SNMP::Info::Layer2::Ubiquiti | ||||||
|  | # $Id$ | ||||||
|  | # | ||||||
|  |  | ||||||
|  | package SNMP::Info::Layer2::Ubiquiti; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::IEEE802dot11; | ||||||
|  | use SNMP::Info::Layer2; | ||||||
|  | use SNMP::Info::Layer3;  # only used in sub mac() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer2::Ubiquiti::ISA | ||||||
|  |     = qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/; | ||||||
|  | @SNMP::Info::Layer2::Ubiquiti::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | %MIBS = ( | ||||||
|  |     %SNMP::Info::Layer2::MIBS, | ||||||
|  |     %SNMP::Info::IEEE802dot11::MIBS, | ||||||
|  |  | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %GLOBALS | ||||||
|  |     = ( %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::IEEE802dot11::GLOBALS, ); | ||||||
|  |  | ||||||
|  | %FUNCS = ( | ||||||
|  |     %SNMP::Info::Layer2::FUNCS, | ||||||
|  |     %SNMP::Info::IEEE802dot11::FUNCS, | ||||||
|  |  | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, ); | ||||||
|  |  | ||||||
|  | sub os { | ||||||
|  |     my $ubnt = shift; | ||||||
|  |  | ||||||
|  |     my $names = $ubnt->dot11_prod_name(); | ||||||
|  |  | ||||||
|  |     foreach my $iid ( keys %$names ) { | ||||||
|  |         my $prod = $names->{$iid}; | ||||||
|  |         next unless defined $prod; | ||||||
|  |         # Product names that match AirOS products | ||||||
|  |                 if((lc $prod) =~ /station/ or (lc $prod) =~ /beam/ or (lc $prod) =~ /grid/){ | ||||||
|  |                         return 'AirOS'; | ||||||
|  |                 # Product names that match UAP | ||||||
|  |                 }elsif((lc $prod) =~ /uap/){ | ||||||
|  |                         return 'UniFi'; | ||||||
|  |                 }else{ | ||||||
|  |                     # Continue below to find OS name | ||||||
|  |                 } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ## EdgeMAX OS (EdgeSwitch and EdgeRouter) name is first field split by space | ||||||
|  |     my $ver = $ubnt->description() || ''; | ||||||
|  |  | ||||||
|  |     my @myver = split(/ /, $ver); | ||||||
|  |  | ||||||
|  |     return $myver[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os_ver { | ||||||
|  |     my $dot11 = shift; | ||||||
|  |  | ||||||
|  |     my $versions = $dot11->dot11_prod_ver(); | ||||||
|  |  | ||||||
|  |     foreach my $iid ( keys %$versions ) { | ||||||
|  |         my $ver = $versions->{$iid}; | ||||||
|  |         next unless defined $ver; | ||||||
|  |         return $ver; | ||||||
|  |         ## Not sure what this function does, it seems to be extraneous being in the same code block after a return statement? | ||||||
|  |         if ( $ver =~ /([\d\.]+)/ ) { | ||||||
|  |             return $1; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     my $ver = $dot11->description() || ''; | ||||||
|  |     if($ver =~ /^edgeswitch/){ | ||||||
|  |         ## EdgeSwitch OS version is second field split by comma | ||||||
|  |         my @myver = split(/, /, $ver); | ||||||
|  |  | ||||||
|  |         return $myver[1]; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ## EdgeRouter OS version is second field split by space | ||||||
|  |     my @myver = split(/ /, $ver); | ||||||
|  |  | ||||||
|  |     return $myver[1]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub vendor { | ||||||
|  |     return 'Ubiquiti Networks, Inc.'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub model { | ||||||
|  |     my $ubnt = shift; | ||||||
|  |  | ||||||
|  |     my $names = $ubnt->dot11_prod_name(); | ||||||
|  |  | ||||||
|  |     foreach my $iid ( keys %$names ) { | ||||||
|  |         my $prod = $names->{$iid}; | ||||||
|  |         next unless defined $prod; | ||||||
|  |         return $prod; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     my $desc = $ubnt->description() || ''; | ||||||
|  |      | ||||||
|  |     ## Pull Model from beginning of description, separated by comma (EdgeSwitch) | ||||||
|  |     if((lc $desc) =~ /^edgeswitch/){     | ||||||
|  |         my @mydesc = split(/, /, $desc); | ||||||
|  |         return $mydesc[0]; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if(!((lc $desc) =~ /edgeos/)){ | ||||||
|  |         # Not sure what type of device this is to get Model | ||||||
|  |         # Wireless devices report dot11_prod_name | ||||||
|  |         # EdgeSwitch includes mode directly and edgeos logic is in else statement | ||||||
|  |         return ; | ||||||
|  |     }else{ | ||||||
|  |         ## do some logic to determine ER model based on tech specs from ubnt: | ||||||
|  |         ## https://help.ubnt.com/hc/en-us/articles/219652227--EdgeRouter-Which-EdgeRouter-Should-I-Use-#tech%20specs | ||||||
|  |         ## Would be nice if UBNT simply adds the model string to their SNMP daemon directly | ||||||
|  |         my $ethCount = 0; | ||||||
|  |         my $switchCount = 0; | ||||||
|  |         #my $sfpCount = 0; | ||||||
|  |         #my $poeCount = 0;   | ||||||
|  |         my $memTotalReal = $ubnt->memTotalReal;    | ||||||
|  |         my $cpuLoad = $ubnt->hrProcessorLoad; | ||||||
|  |         my $cpuCount = 0; | ||||||
|  |         ## My perl is lacking. Not sure if there's a more efficient way to find the cpu count | ||||||
|  |         foreach my $iid ( keys %$cpuLoad ) { | ||||||
|  |             $cpuCount++; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         my $ifDescs = $ubnt->ifDescr; | ||||||
|  |         foreach my $iid ( keys %$ifDescs ) { | ||||||
|  |             my $ifDesc = $ifDescs->{$iid}; | ||||||
|  |             next unless defined $ifDesc; | ||||||
|  |  | ||||||
|  |             if((lc $ifDesc) =~ /^eth\d+$/){ # exclude vlan interfaces. Ex: eth1.5 | ||||||
|  |                 $ethCount++; | ||||||
|  |             }elsif((lc $ifDesc) =~ /^switch/){ | ||||||
|  |                 $switchCount++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         ## If people have other models to further fine-tune this logic that would be great.  | ||||||
|  |         if($ethCount eq 9){ | ||||||
|  |             ## Should be ER Infinity | ||||||
|  |             return "EdgeRouter Infinity" | ||||||
|  |         }if($ethCount eq 8){ | ||||||
|  |             ## Could be ER-8 Pro, ER-8, or EP-R8 | ||||||
|  |             return "EdgeRouter 8-Port" | ||||||
|  |         }elsif($ethCount eq 5 and $cpuCount eq 4){ | ||||||
|  |             ## Could be ER-X or ER-X-SFP | ||||||
|  |             return "EdgeRouter X 5-Port" | ||||||
|  |         }elsif($ethCount eq 5){ | ||||||
|  |             return "EdgeRouter PoE 5-Port" | ||||||
|  |         }elsif($ethCount eq 3 and $cpuCount eq 2){ | ||||||
|  |             return "EdgeRouter LITE 3-Port" | ||||||
|  |         }else{ | ||||||
|  |             ## failback string | ||||||
|  |             return "EdgeRouter eth-$ethCount switch-$switchCount mem-$memTotalReal cpuNum-$cpuCount"; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ## simply take the MAC and clean it up | ||||||
|  | sub serial { | ||||||
|  |     my $ubnt = shift; | ||||||
|  |  | ||||||
|  |     my $serial = $ubnt->mac(); | ||||||
|  |     if($serial){ | ||||||
|  |         $serial =~ s/://g; | ||||||
|  |         return uc $serial; | ||||||
|  |     } | ||||||
|  |     return ; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ## UBNT doesn't put the primary-mac interface at index 1 | ||||||
|  | sub mac { | ||||||
|  |     my $ubnt = shift; | ||||||
|  |     my $ifDescs = $ubnt->ifDescr; | ||||||
|  |  | ||||||
|  |     foreach my $iid ( keys %$ifDescs ) { | ||||||
|  |         my $ifDesc = $ifDescs->{$iid}; | ||||||
|  |         next unless defined $ifDesc; | ||||||
|  |         ## CPU Interface will have the primary MAC for EdgeSwitch | ||||||
|  |         ## eth0 will have primary MAC for linux-based UBNT devices | ||||||
|  |         if($ifDesc =~ /CPU/ or $ifDesc eq 'eth0'){ | ||||||
|  |             my $mac = $ubnt->ifPhysAddress->{$iid}; | ||||||
|  |  | ||||||
|  |             # syntax stolen from sub munge_mac in SNMP::Info | ||||||
|  |             $mac = lc join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) ); | ||||||
|  |             return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]$/i;   | ||||||
|  |              | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     # MAC malformed or missing | ||||||
|  |     return; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub interfaces { | ||||||
|  |     my $netgear = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  |  | ||||||
|  |     my $interfaces = $netgear->i_index($partial)       || {}; | ||||||
|  |     my $i_descr    = $netgear->i_description($partial) || {}; | ||||||
|  |     my $return = {}; | ||||||
|  |  | ||||||
|  |     foreach my $iid ( keys %$i_descr ) { | ||||||
|  |         # Slot: 0 Port: 4 Gigabit - Level | ||||||
|  |         if ($i_descr->{$iid} =~ m/([0-9]+)[^0-9]+([0-9]+)/) { | ||||||
|  |             $return->{$iid} = $1 .'/'. $2; | ||||||
|  |             next; | ||||||
|  |         } | ||||||
|  |         # Link Aggregate 4 | ||||||
|  |         if ($i_descr->{$iid} =~ m/Link Aggregate (\d+)/) { | ||||||
|  |             $return->{$iid} = '3/'. $1; | ||||||
|  |             next; | ||||||
|  |         } | ||||||
|  |         # else | ||||||
|  |         $return->{$iid} = $i_descr->{$iid}; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return $return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub i_ignore { | ||||||
|  |     my $l2      = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  |  | ||||||
|  |     my $interfaces = $l2->interfaces($partial) || {}; | ||||||
|  |     my $i_descr    = $l2->i_description($partial) || {}; | ||||||
|  |  | ||||||
|  |     my %i_ignore; | ||||||
|  |     foreach my $if ( keys %$interfaces ) { | ||||||
|  |  | ||||||
|  |         # CPU Interface | ||||||
|  |         if ( $i_descr->{$if} =~ /CPU Interface/i ) { | ||||||
|  |             $i_ignore{$if}++; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return \%i_ignore; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 1; | ||||||
|  | __END__ | ||||||
|  |  | ||||||
|  | =head1 NAME | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points | ||||||
|  |  | ||||||
|  | =head1 AUTHOR | ||||||
|  |  | ||||||
|  | Max Kosmach | ||||||
|  |  | ||||||
|  | =head1 SYNOPSIS | ||||||
|  |  | ||||||
|  |  # Let SNMP::Info determine the correct subclass for you.  | ||||||
|  |  my $ubnt = new SNMP::Info( | ||||||
|  |                           AutoSpecify => 1, | ||||||
|  |                           Debug       => 1, | ||||||
|  |                           DestHost    => 'myswitch', | ||||||
|  |                           Community   => 'public', | ||||||
|  |                           Version     => 2 | ||||||
|  |                         )  | ||||||
|  |     or die "Can't connect to DestHost.\n"; | ||||||
|  |  | ||||||
|  |  my $class = $ubnt->class(); | ||||||
|  |  print "SNMP::Info determined this device to fall under subclass : $class\n"; | ||||||
|  |  | ||||||
|  | =head1 DESCRIPTION | ||||||
|  |  | ||||||
|  | Provides abstraction to the configuration information obtainable from | ||||||
|  | Ubiquiti Access Point through SNMP. | ||||||
|  |  | ||||||
|  | For speed or debugging purposes you can call the subclass directly, but not | ||||||
|  | after determining a more specific class using the method above.  | ||||||
|  |  | ||||||
|  |  my $ubnt = new SNMP::Info::Layer2::Ubiquiti(...); | ||||||
|  |  | ||||||
|  | =head2 Inherited Classes | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | =item SNMP::Info::IEEE802dot11 | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Required MIBs | ||||||
|  |  | ||||||
|  | None. | ||||||
|  |  | ||||||
|  | =head2 Inherited MIBs | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements. | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::IEEE802dot11/"Required MIBs"> for its MIB requirements. | ||||||
|  |  | ||||||
|  | =head1 GLOBALS | ||||||
|  |  | ||||||
|  | These are methods that return scalar value from SNMP | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $ubnt->vendor() | ||||||
|  |  | ||||||
|  | Returns 'Ubiquiti Networks, Inc.' | ||||||
|  |  | ||||||
|  | =item $ubnt->model() | ||||||
|  |  | ||||||
|  | Returns the model extracted from C<dot11manufacturerProductName>, with failback to some complex logic for EdgeMax devices | ||||||
|  |  | ||||||
|  | =item $ubnt->serial() | ||||||
|  |  | ||||||
|  | Serial Number. | ||||||
|  |  | ||||||
|  | =item $ubnt->mac() | ||||||
|  |  | ||||||
|  | Bridge MAC address. | ||||||
|  |  | ||||||
|  | =item $ubnt->os() | ||||||
|  |  | ||||||
|  | Returns 'Ubiquiti Networks, Inc.' | ||||||
|  |  | ||||||
|  | =item $ubnt->os_ver() | ||||||
|  |  | ||||||
|  | Returns the software version extracted from C<dot11manufacturerProductVersion>, with failback to description splitting for EdgeMax devices | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Global Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"GLOBALS"> for details. | ||||||
|  |  | ||||||
|  | =head2 Global Methods imported from SNMP::Info::IEEE802dot11 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::IEEE802dot11/"GLOBALS"> for details. | ||||||
|  |  | ||||||
|  | =head1 TABLE METHODS | ||||||
|  |  | ||||||
|  | These are methods that return tables of information in the form of a reference | ||||||
|  | to a hash. | ||||||
|  |  | ||||||
|  | =head2 Overrides | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $ubiquiti->interfaces() | ||||||
|  |  | ||||||
|  | Uses the i_name() field. | ||||||
|  |  | ||||||
|  | =item $ubiquiti->i_ignore() | ||||||
|  |  | ||||||
|  | Ignores interfaces with "CPU Interface" in them. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::Layer2 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer2/"TABLE METHODS"> for details. | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::IEEE802dot11 | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::IEEE802dot11/"TABLE METHODS"> for details. | ||||||
|  |  | ||||||
|  | =cut | ||||||
| @@ -39,14 +39,14 @@ use SNMP::Info::Layer2; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # Set for No CDP | # Set for No CDP | ||||||
| %GLOBALS = ( %SNMP::Info::Layer2::GLOBALS ); | %GLOBALS = ( %SNMP::Info::Layer2::GLOBALS ); | ||||||
| 
 | 
 | ||||||
| %FUNCS = ( | %FUNCS = ( | ||||||
|     %SNMP::Info::Layer2::FUNCS, |     %SNMP::Info::Layer2::FUNCS, | ||||||
|     'ip_adresses'   => 'ipAdEntAddr', |     'ip_addresses'  => 'ipAdEntAddr', | ||||||
|     'i_name'        => 'ifDescr', |     'i_name'        => 'ifDescr', | ||||||
|     'i_description' => 'adslLineConfProfile', |     'i_description' => 'adslLineConfProfile', | ||||||
| ); | ); | ||||||
| @@ -58,7 +58,7 @@ $VERSION = '3.22'; | |||||||
| 
 | 
 | ||||||
| sub layers { | sub layers { | ||||||
|     my $zyxel  = shift; |     my $zyxel  = shift; | ||||||
|     my $layers = $zyxel->layers(); |     my $layers = $zyxel->SUPER::layers(); | ||||||
|     return $layers if defined $layers; |     return $layers if defined $layers; | ||||||
| 
 | 
 | ||||||
|     # If these don't claim to have any layers, so we'll give them 1+2 |     # If these don't claim to have any layers, so we'll give them 1+2 | ||||||
| @@ -102,7 +102,9 @@ sub ip { | |||||||
|     my $ip_hash = $zyxel->ip_addresses(); |     my $ip_hash = $zyxel->ip_addresses(); | ||||||
|     my $found_ip; |     my $found_ip; | ||||||
| 
 | 
 | ||||||
|     foreach my $ip ( keys %{$ip_hash} ) { |     # Since hashes are random add sort so we get the same address each time | ||||||
|  |     # if there happens to be more than one. Will return highest numbered address  | ||||||
|  |     foreach my $ip ( sort keys %{$ip_hash} ) { | ||||||
|         $found_ip = $ip |         $found_ip = $ip | ||||||
|             if ( defined $ip |             if ( defined $ip | ||||||
|             and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ ); |             and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ ); | ||||||
| @@ -53,7 +53,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/; | use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS, |     %SNMP::Info::MIBS, | ||||||
| @@ -194,29 +194,18 @@ sub root_ip { | |||||||
| sub serial { | sub serial { | ||||||
|     my $l3 = shift; |     my $l3 = shift; | ||||||
| 
 | 
 | ||||||
|     my $serial1 = $l3->serial1(); |     my $entity_serial = $l3->entity_derived_serial(); | ||||||
|     my $e_parent = $l3->e_parent() || {}; |     if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){ | ||||||
| 
 |         return $entity_serial; | ||||||
|     foreach my $iid ( keys %$e_parent ) { |  | ||||||
|         my $parent = $e_parent->{$iid}; |  | ||||||
|         if ( $parent eq '0' ) { |  | ||||||
|             my $serial = $l3->e_serial($iid); |  | ||||||
|             if ( $serial ) { |  | ||||||
|                 return $serial->{$iid}; |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 my $descr = $l3->e_descr($iid); |  | ||||||
|                 if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i ) |  | ||||||
|                 { |  | ||||||
|                     return $1; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ ); |     my $serial1 = $l3->serial1(); | ||||||
|  |     if ( defined $serial1 and $serial1 !~ /^\s*$/ ) { | ||||||
|  |         return $serial1; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     return; |     return; | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # $l3->model() - the sysObjectID returns an IID to an entry in | # $l3->model() - the sysObjectID returns an IID to an entry in | ||||||
| @@ -490,8 +479,7 @@ Removes 'cisco'  from cisco devices for readability. | |||||||
| 
 | 
 | ||||||
| =item $l3->serial() | =item $l3->serial() | ||||||
| 
 | 
 | ||||||
| Tries to cull a serial number from F<ENTITY-MIB>, description, and | Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB. | ||||||
| F<OLD-CISCO->... MIB. |  | ||||||
| 
 | 
 | ||||||
| =item $l3->vendor() | =item $l3->vendor() | ||||||
| 
 | 
 | ||||||
| @@ -41,7 +41,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -69,8 +69,8 @@ $VERSION = '3.22'; | |||||||
|     'bp_index2' => 'dot1dBasePortIfIndex', |     'bp_index2' => 'dot1dBasePortIfIndex', | ||||||
| 
 | 
 | ||||||
|     # AWC Interface Table (awcIfTable) |     # AWC Interface Table (awcIfTable) | ||||||
|     'awc_default_mac' => 'awcIfDefaultPhyAddress', |     'awc_default_mac' => 'awcIfDefaultPhysAddress', | ||||||
|     'awc_mac'         => 'awcIfPhyAddress', |     'awc_mac'         => 'awcIfPhysAddress', | ||||||
|     'awc_ip'          => 'awcIfIpAddress', |     'awc_ip'          => 'awcIfIpAddress', | ||||||
|     'awc_netmask'     => 'awcIfIpNetMask', |     'awc_netmask'     => 'awcIfIpNetMask', | ||||||
|     'awc_msdu'        => 'awcIfMSDUMaxLength', |     'awc_msdu'        => 'awcIfMSDUMaxLength', | ||||||
| @@ -364,13 +364,13 @@ Ignores ports that are of type ``rptr'' and ``lo''. | |||||||
| 
 | 
 | ||||||
| Gives the default MAC address of each interface. | Gives the default MAC address of each interface. | ||||||
| 
 | 
 | ||||||
| C<awcIfDefaultPhyAddress> | C<awcIfDefaultPhysAddress> | ||||||
| 
 | 
 | ||||||
| =item $aironet->awc_mac() | =item $aironet->awc_mac() | ||||||
| 
 | 
 | ||||||
| Gives the actual MAC address of each interface. | Gives the actual MAC address of each interface. | ||||||
| 
 | 
 | ||||||
| C<awcIfPhyAddress> | C<awcIfPhysAddress> | ||||||
| 
 | 
 | ||||||
| =item $aironet->awc_ip() | =item $aironet->awc_ip() | ||||||
| 
 | 
 | ||||||
| @@ -49,7 +49,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -39,7 +39,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/; | use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -40,7 +40,7 @@ use SNMP::Info::Layer3; | |||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE  | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE  | ||||||
|             $int_include_vpn $fake_idx $type_class/; |             $int_include_vpn $fake_idx $type_class/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|             %SNMP::Info::Layer3::MIBS, |             %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -36,7 +36,7 @@ use Exporter; | |||||||
| use SNMP::Info::Layer3; | use SNMP::Info::Layer3; | ||||||
| use SNMP::Info::MAU; | use SNMP::Info::MAU; | ||||||
| use SNMP::Info::LLDP; | use SNMP::Info::LLDP; | ||||||
| use SNMP::Info::Aggregate; | use SNMP::Info::Aggregate 'agg_ports_ifstack'; | ||||||
| 
 | 
 | ||||||
| @SNMP::Info::Layer3::Arista::ISA = qw/ | @SNMP::Info::Layer3::Arista::ISA = qw/ | ||||||
|     SNMP::Info::Aggregate |     SNMP::Info::Aggregate | ||||||
| @@ -48,14 +48,14 @@ use SNMP::Info::Aggregate; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
|     %SNMP::Info::MAU::MIBS, |     %SNMP::Info::MAU::MIBS, | ||||||
|     %SNMP::Info::LLDP::MIBS, |     %SNMP::Info::LLDP::MIBS, | ||||||
|     %SNMP::Info::Aggregate::MIBS, |     %SNMP::Info::Aggregate::MIBS, | ||||||
|     'ARISTA-PRODUCTS-MIB' => 'aristaProducts', |     'ARISTA-PRODUCTS-MIB' => 'aristaDCS7124S', | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %GLOBALS = ( | %GLOBALS = ( | ||||||
| @@ -40,7 +40,7 @@ use SNMP::Info::LLDP; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info::Bridge; | |||||||
| use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP | use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP | ||||||
|     %MODID_MAP %PROCID_MAP/; |     %MODID_MAP %PROCID_MAP/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MIBS, |     %SNMP::Info::MIBS, | ||||||
| @@ -36,7 +36,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -47,7 +47,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | |||||||
| 
 | 
 | ||||||
| @SNMP::Info::Layer3::C3550::EXPORT_OK = qw//; | @SNMP::Info::Layer3::C3550::EXPORT_OK = qw//; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # NOTE: Order creates precedence | # NOTE: Order creates precedence | ||||||
| #       Example: v_name exists in Bridge.pm and CiscoVTP.pm | #       Example: v_name exists in Bridge.pm and CiscoVTP.pm | ||||||
| @@ -96,8 +96,8 @@ sub ports { | |||||||
|     my $c3550 = shift; |     my $c3550 = shift; | ||||||
| 
 | 
 | ||||||
|     my $id    = $c3550->id(); |     my $id    = $c3550->id(); | ||||||
|     my $model = &SNMP::translateObj($id); |     my $model = SNMP::translateObj($id); | ||||||
|     if ( $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) { |     if ( defined $model && $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) { | ||||||
|         return $1; |         return $1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @@ -44,7 +44,7 @@ use SNMP::Info::MAU; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::MAU::MIBS, |     %SNMP::Info::MAU::MIBS, | ||||||
| @@ -51,7 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| # NOTE: Order creates precedence | # NOTE: Order creates precedence | ||||||
| #       Example: v_name exists in Bridge.pm and CiscoVTP.pm | #       Example: v_name exists in Bridge.pm and CiscoVTP.pm | ||||||
							
								
								
									
										330
									
								
								lib/SNMP/Info/Layer3/CheckPoint.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								lib/SNMP/Info/Layer3/CheckPoint.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,330 @@ | |||||||
|  | # SNMP::Info::Layer3::CheckPoint | ||||||
|  | # $Id$ | ||||||
|  | # | ||||||
|  | # Copyright (c) 2008 Bill Fenner | ||||||
|  | # All rights reserved. | ||||||
|  | # | ||||||
|  | # Redistribution and use in source and binary forms, with or without | ||||||
|  | # modification, are permitted provided that the following conditions are met: | ||||||
|  | # | ||||||
|  | #     * Redistributions of source code must retain the above copyright notice, | ||||||
|  | #       this list of conditions and the following disclaimer. | ||||||
|  | #     * Redistributions in binary form must reproduce the above copyright | ||||||
|  | #       notice, this list of conditions and the following disclaimer in the | ||||||
|  | #       documentation and/or other materials provided with the distribution. | ||||||
|  | #     * Neither the name of the University of California, Santa Cruz nor the | ||||||
|  | #       names of its contributors may be used to endorse or promote products | ||||||
|  | #       derived from this software without specific prior written permission. | ||||||
|  | # | ||||||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||||
|  | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||||||
|  | # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||||||
|  | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||||||
|  | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||||
|  | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||||
|  | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||||
|  | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||||
|  | # POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
|  | package SNMP::Info::Layer3::CheckPoint; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use Exporter; | ||||||
|  | use SNMP::Info::Layer3; | ||||||
|  | use SNMP::Info::LLDP; | ||||||
|  |  | ||||||
|  | @SNMP::Info::Layer3::CheckPoint::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/; | ||||||
|  | @SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//; | ||||||
|  |  | ||||||
|  | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
|  |  | ||||||
|  | $VERSION = '3.61'; | ||||||
|  |  | ||||||
|  | %MIBS = ( | ||||||
|  |     %SNMP::Info::Layer3::MIBS, | ||||||
|  |     %SNMP::Info::LLDP::MIBS, | ||||||
|  |     'CHECKPOINT-MIB'      => 'fwProduct', | ||||||
|  |     'UCD-SNMP-MIB'        => 'versionTag', | ||||||
|  |     'NET-SNMP-TC'         => 'netSnmpAliasDomain', | ||||||
|  |     'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries', | ||||||
|  |     'HOST-RESOURCES-MIB'  => 'hrSystem', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %GLOBALS = ( | ||||||
|  |     %SNMP::Info::Layer3::GLOBALS, | ||||||
|  |     %SNMP::Info::LLDP::GLOBALS, | ||||||
|  |     'netsnmp_vers'   => 'versionTag', | ||||||
|  |     'hrSystemUptime' => 'hrSystemUptime', | ||||||
|  |      | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %FUNCS = ( | ||||||
|  |     %SNMP::Info::Layer3::FUNCS, | ||||||
|  |     %SNMP::Info::LLDP::FUNCS, | ||||||
|  |  | ||||||
|  |     # Net-SNMP Extend table that could but customize to add a the CheckPoint version | ||||||
|  |     'extend_output_table' => 'nsExtendOutputFull', | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | %MUNGE = ( | ||||||
|  |     %SNMP::Info::Layer3::MUNGE, | ||||||
|  |     %SNMP::Info::LLDP::MUNGE, | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | sub vendor { | ||||||
|  |     return 'checkpoint'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub model { | ||||||
|  |     my $ckp = shift; | ||||||
|  |     my $id = $ckp->id; | ||||||
|  |  | ||||||
|  |     my $model = &SNMP::translateObj($id); | ||||||
|  |  | ||||||
|  |     if (defined $model) { | ||||||
|  |         $model =~ s/^checkPoint//; | ||||||
|  |         return $model; | ||||||
|  |     } else { | ||||||
|  |         return $id; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os { | ||||||
|  |     return 'checkpoint'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub os_ver { | ||||||
|  |     my $ckp = shift; | ||||||
|  |     my $extend_table = $ckp->extend_output_table() || {}; | ||||||
|  |  | ||||||
|  |     my $descr   = $ckp->description(); | ||||||
|  |     my $vers    = $ckp->netsnmp_vers(); | ||||||
|  |     my $os_ver  = undef; | ||||||
|  |  | ||||||
|  |     foreach my $ex (keys %$extend_table) { | ||||||
|  |         (my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g; | ||||||
|  |         if ($name eq 'ckpVersion') { | ||||||
|  |             return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/); | ||||||
|  |             last; | ||||||
|  |         } | ||||||
|  |     }  | ||||||
|  |  | ||||||
|  |     $os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ ); | ||||||
|  |     if ($vers) { | ||||||
|  |         $os_ver = "???" unless defined($os_ver); | ||||||
|  |         $os_ver .= " / Net-SNMP " . $vers; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return $os_ver; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub serial { | ||||||
|  |     my $ckp = shift; | ||||||
|  |     my $extend_table = $ckp->extend_output_table() || {}; | ||||||
|  |  | ||||||
|  |     foreach my $ex (keys %$extend_table) { | ||||||
|  |         (my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g; | ||||||
|  |         if ($name eq 'ckpAsset') { | ||||||
|  |             return $1 if ($extend_table->{$ex} =~ /Serial Number: (\S+)/); | ||||||
|  |             last; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return ''; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub layers { | ||||||
|  |     return '01001100'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # sysUptime gives us the time since the SNMP daemon has restarted, | ||||||
|  | # so return the system uptime since that's probably what the user | ||||||
|  | # wants.  (Caution: this could cause trouble if using | ||||||
|  | # sysUptime-based discontinuity timers or other TimeStamp | ||||||
|  | # objects. | ||||||
|  | sub uptime { | ||||||
|  |     my $ckp = shift; | ||||||
|  |     my $uptime; | ||||||
|  |  | ||||||
|  |     $uptime = $ckp->hrSystemUptime(); | ||||||
|  |     return $uptime if defined $uptime; | ||||||
|  |  | ||||||
|  |     return $ckp->SUPER::uptime(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub i_ignore { | ||||||
|  |     my $l3      = shift; | ||||||
|  |     my $partial = shift; | ||||||
|  |  | ||||||
|  |     my $interfaces = $l3->interfaces($partial) || {}; | ||||||
|  |  | ||||||
|  |     my %i_ignore; | ||||||
|  |     foreach my $if ( keys %$interfaces ) { | ||||||
|  |  | ||||||
|  |         # lo0 etc | ||||||
|  |         if ( $interfaces->{$if} =~ /\blo\d*\b/i ) { | ||||||
|  |             $i_ignore{$if}++; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return \%i_ignore; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 1; | ||||||
|  | __END__ | ||||||
|  |  | ||||||
|  | =head1 NAME | ||||||
|  |  | ||||||
|  | SNMP::Info::Layer3::CheckPoint - SNMP Interface to CheckPoint Devices | ||||||
|  |  | ||||||
|  | =head1 AUTHORS | ||||||
|  |  | ||||||
|  | Ambroise Rosset | ||||||
|  |  | ||||||
|  | =head1 SYNOPSIS | ||||||
|  |  | ||||||
|  |  # Let SNMP::Info determine the correct subclass for you.  | ||||||
|  |  my $ckp = new SNMP::Info( | ||||||
|  |                           AutoSpecify => 1, | ||||||
|  |                           Debug       => 1, | ||||||
|  |                           DestHost    => 'myrouter', | ||||||
|  |                           Community   => 'public', | ||||||
|  |                           Version     => 2 | ||||||
|  |                         )  | ||||||
|  |     or die "Can't connect to DestHost.\n"; | ||||||
|  |  | ||||||
|  |  my $class      = $ckp->class(); | ||||||
|  |  print "SNMP::Info determined this device to fall under subclass : $class\n"; | ||||||
|  |  | ||||||
|  | =head1 DESCRIPTION | ||||||
|  |  | ||||||
|  | Subclass for Generic Net-SNMP devices | ||||||
|  |  | ||||||
|  | =head2 WARNING | ||||||
|  |  | ||||||
|  | To correctly and completelly work, you should add the following line in the file C</etc/snmp/snmpd.local.conf> on each of your CheckPoint devices: | ||||||
|  |  | ||||||
|  |  # Netdisco SNMP configuration | ||||||
|  |  extend  ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver | ||||||
|  |  extend  ckpAsset /bin/clish -c 'show asset all' | ||||||
|  |  | ||||||
|  | =head2 Inherited Classes | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item SNMP::Info::Layer3 | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Required MIBs | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item F<UCD-SNMP-MIB> | ||||||
|  |  | ||||||
|  | =item F<NET-SNMP-TC> | ||||||
|  |  | ||||||
|  | =item F<HOST-RESOURCES-MIB> | ||||||
|  |  | ||||||
|  | =item Inherited Classes' MIBs | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::Layer3> for its own MIB requirements. | ||||||
|  |  | ||||||
|  | See L<SNMP::Info::LLDP> for its own MIB requirements. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head1 GLOBALS | ||||||
|  |  | ||||||
|  | These are methods that return scalar value from SNMP | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $ckp->vendor() | ||||||
|  |  | ||||||
|  | Returns 'checkpoint'. | ||||||
|  |  | ||||||
|  | =item $ckp->model() | ||||||
|  |  | ||||||
|  | Return the model type of the CheckPoint device (Based on the sysObjectOID translation). | ||||||
|  |  | ||||||
|  | =item $ckp->os() | ||||||
|  |  | ||||||
|  | Returns the OS extracted from C<sysDescr>. | ||||||
|  |  | ||||||
|  | =item $ckp->os_ver() | ||||||
|  |  | ||||||
|  | Returns the software version extracted from C<sysDescr>, along | ||||||
|  | with the Net-SNMP version. | ||||||
|  |  | ||||||
|  | =item $ckp->uptime() | ||||||
|  |  | ||||||
|  | Returns the system uptime instead of the agent uptime. | ||||||
|  | NOTE: discontinuity timers and other Time Stamp based objects | ||||||
|  | are based on agent uptime, so use orig_uptime(). | ||||||
|  |  | ||||||
|  | =item $ckp->serial() | ||||||
|  |  | ||||||
|  | Return the serial number of the device if the SNMP server is configured as indicated previously. | ||||||
|  | Return '' in other case. | ||||||
|  |  | ||||||
|  | =item $ckp->layers() | ||||||
|  |  | ||||||
|  | Return '01001100'. | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Globals imported from SNMP::Info::Layer3 | ||||||
|  |  | ||||||
|  | See documentation in L<SNMP::Info::Layer3> for details. | ||||||
|  |  | ||||||
|  | =head2 Globals imported from SNMP::Info::LLDP | ||||||
|  |  | ||||||
|  | See documentation in L<SNMP::Info::LLDP> for details. | ||||||
|  |  | ||||||
|  | =head1 TABLE ENTRIES | ||||||
|  |  | ||||||
|  | These are methods that return tables of information in the form of a reference | ||||||
|  | to a hash. | ||||||
|  |  | ||||||
|  | =head2 Overrides | ||||||
|  |  | ||||||
|  | =over | ||||||
|  |  | ||||||
|  | =item $ckp->i_ignore() | ||||||
|  |  | ||||||
|  | Returns reference to hash.  Increments value of IID if port is to be ignored. | ||||||
|  |  | ||||||
|  | Ignores loopback | ||||||
|  |  | ||||||
|  | =back | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::Layer3 | ||||||
|  |  | ||||||
|  | See documentation in L<SNMP::Info::Layer3> for details. | ||||||
|  |  | ||||||
|  | =head2 Table Methods imported from SNMP::Info::LLDP | ||||||
|  |  | ||||||
|  | See documentation in L<SNMP::Info::LLDP> for details. | ||||||
|  |  | ||||||
|  | =head1 NOTES | ||||||
|  |  | ||||||
|  | In order to cause SNMP::Info to classify your device into this class, it | ||||||
|  | may be necessary to put a configuration line into your F<snmpd.conf> | ||||||
|  | similar to | ||||||
|  |  | ||||||
|  |   sysobjectid .1.3.6.1.4.1.8072.3.2.N | ||||||
|  |  | ||||||
|  | where N is the object ID for your OS from the C<NET-SNMP-TC> MIB (or | ||||||
|  | 255 if not listed).  Some Net-SNMP installations default to an | ||||||
|  | incorrect return value for C<system.sysObjectId>. | ||||||
|  |  | ||||||
|  | In order to recognize a Net-SNMP device as Layer3, it may be necessary | ||||||
|  | to put a configuration line similar to | ||||||
|  |  | ||||||
|  |   sysservices 76 | ||||||
|  |  | ||||||
|  | in your F<snmpd.conf>. | ||||||
|  |  | ||||||
|  | =cut | ||||||
| @@ -55,7 +55,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( | %MIBS = ( | ||||||
|     %SNMP::Info::Layer3::MIBS, |     %SNMP::Info::Layer3::MIBS, | ||||||
| @@ -97,22 +97,18 @@ $VERSION = '3.22'; | |||||||
|     %SNMP::Info::LLDP::FUNCS, |     %SNMP::Info::LLDP::FUNCS, | ||||||
|     %SNMP::Info::CiscoVTP::FUNCS, |     %SNMP::Info::CiscoVTP::FUNCS, | ||||||
| 
 | 
 | ||||||
|     # EIGRP |     # CISCO-EIGRP-MIB::cEigrpPeerTable | ||||||
|     'eigrp_peers' => 'cEigrpPeerAddr', |     'c_eigrp_peer_types' => 'cEigrpPeerAddrType', | ||||||
|  |     'c_eigrp_peers'      => 'cEigrpPeerAddr', | ||||||
|  | 
 | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| %MUNGE = ( | %MUNGE = ( | ||||||
|     %SNMP::Info::Layer3::MUNGE, |     %SNMP::Info::Layer3::MUNGE,     %SNMP::Info::CiscoStpExtensions::MUNGE, | ||||||
|     %SNMP::Info::CiscoStpExtensions::MUNGE, |     %SNMP::Info::CiscoPower::MUNGE, %SNMP::Info::CiscoConfig::MUNGE, | ||||||
|     %SNMP::Info::CiscoPower::MUNGE, |     %SNMP::Info::CiscoQOS::MUNGE,   %SNMP::Info::CiscoRTT::MUNGE, | ||||||
|     %SNMP::Info::CiscoConfig::MUNGE, |     %SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE, | ||||||
|     %SNMP::Info::CiscoQOS::MUNGE, |     %SNMP::Info::LLDP::MUNGE,       %SNMP::Info::CiscoVTP::MUNGE, | ||||||
|     %SNMP::Info::CiscoRTT::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 { | sub i_vlan { | ||||||
| @@ -128,14 +124,55 @@ sub i_vlan { | |||||||
|         if (   $i_type->{$idx} eq 'l2vlan' |         if (   $i_type->{$idx} eq 'l2vlan' | ||||||
|             || $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} ) |             || $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} ) | ||||||
|         { |         { | ||||||
|  |             # Not sure where this regex came from, anchored at end? | ||||||
|             if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) { |             if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) { | ||||||
|                 $i_vlan->{$idx} = $1; |                 $i_vlan->{$idx} = $1; | ||||||
|             } |             } | ||||||
|  | 
 | ||||||
|  |             # This matches 101 in 'Ethernet0.101-802.1Q vLAN subif' | ||||||
|  |             elsif ( $i_descr->{$idx} =~ /\.(\d+)-/ ) { | ||||||
|  |                 $i_vlan->{$idx} = $1; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return $i_vlan; |     return $i_vlan; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub cisco_comm_indexing { | ||||||
|  |     my $cisco = shift; | ||||||
|  | 
 | ||||||
|  |     # If we get a VTP version, it's *extremely* likely that the device needs | ||||||
|  |     # community based indexing | ||||||
|  |     my $vtp = $cisco->vtp_version() || '0'; | ||||||
|  |     return $vtp ? 1 : 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub eigrp_peers { | ||||||
|  |     my $cisco = shift; | ||||||
|  | 
 | ||||||
|  |     my $peers = $cisco->c_eigrp_peers()      || {}; | ||||||
|  |     my $types = $cisco->c_eigrp_peer_types() || {}; | ||||||
|  | 
 | ||||||
|  |     my %eigrp_peers; | ||||||
|  |     foreach my $idx ( keys %$peers ) { | ||||||
|  |         my $type = $types->{$idx}; | ||||||
|  |         next unless $type; | ||||||
|  |         my $peer = $peers->{$idx}; | ||||||
|  |         next unless $peer; | ||||||
|  | 
 | ||||||
|  |         my $ip = NetAddr::IP::Lite->new($peer); | ||||||
|  | 
 | ||||||
|  |         if ($ip) { | ||||||
|  |             $eigrp_peers{$idx} = $ip->addr; | ||||||
|  |         } | ||||||
|  |         elsif ( $type eq 'ipv4' ) { | ||||||
|  |             $eigrp_peers{$idx} = SNMP::Info::munge_ip($peer); | ||||||
|  |         } | ||||||
|  |         next; | ||||||
|  |     } | ||||||
|  |     return \%eigrp_peers; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
| __END__ | __END__ | ||||||
| 
 | 
 | ||||||
| @@ -237,6 +274,11 @@ These are methods that return scalar value from SNMP | |||||||
| 
 | 
 | ||||||
| (C<cEigrpAsRouterId>) | (C<cEigrpAsRouterId>) | ||||||
| 
 | 
 | ||||||
|  | =item $switch->cisco_comm_indexing() | ||||||
|  | 
 | ||||||
|  | Returns 1 when the device is likely to need vlan indexing. | ||||||
|  | Determined by checking C<vtpVersion>. | ||||||
|  | 
 | ||||||
| =back | =back | ||||||
| 
 | 
 | ||||||
| =head2 Global Methods imported from SNMP::Info::CiscoVTP | =head2 Global Methods imported from SNMP::Info::CiscoVTP | ||||||
| @@ -45,7 +45,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, ); | %MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, ); | ||||||
| 
 | 
 | ||||||
| @@ -73,8 +73,8 @@ sub b_mac { | |||||||
|     foreach my $i ( keys %$macs ) { |     foreach my $i ( keys %$macs ) { | ||||||
|         my $mac = $macs->{$i}; |         my $mac = $macs->{$i}; | ||||||
| 
 | 
 | ||||||
|         # don't catch the bad macs with zeroed OUI |         # don't catch the bad macs with bogus OUI | ||||||
|         if ( $mac !~ m/(0{1,2}:){3}/ ) { |         if ( $mac !~ m/(0{1,2}:){2}(00|01)/ ) { | ||||||
|             push( @macs, $mac ); |             push( @macs, $mac ); | ||||||
|         } |         } | ||||||
|         @macs = sort(@macs); |         @macs = sort(@macs); | ||||||
| @@ -43,7 +43,7 @@ use SNMP::Info::Layer3; | |||||||
| 
 | 
 | ||||||
| use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; | ||||||
| 
 | 
 | ||||||
| $VERSION = '3.22'; | $VERSION = '3.61'; | ||||||
| 
 | 
 | ||||||
| %MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, ); | %MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, ); | ||||||
| 
 | 
 | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user