Compare commits
	
		
			285 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					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 | 
							
								
								
									
										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
 | 
			
		||||
SNMP
 | 
			
		||||
*.komodo*
 | 
			
		||||
blib/
 | 
			
		||||
META.*
 | 
			
		||||
*.swp
 | 
			
		||||
*.pid
 | 
			
		||||
test.pl
 | 
			
		||||
MYMETA.*
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.old
 | 
			
		||||
pm_to_blib
 | 
			
		||||
*.tar.gz
 | 
			
		||||
MANIFEST.*
 | 
			
		||||
*.komodo*
 | 
			
		||||
Makefile*
 | 
			
		||||
Build
 | 
			
		||||
_build
 | 
			
		||||
blib
 | 
			
		||||
cover_db
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
language: perl
 | 
			
		||||
addons:
 | 
			
		||||
  apt:
 | 
			
		||||
    packages:
 | 
			
		||||
      - jq
 | 
			
		||||
      - libsnmp-dev
 | 
			
		||||
branches:
 | 
			
		||||
  only:
 | 
			
		||||
    - /^3\.\d{2}$/
 | 
			
		||||
    - 'master'
 | 
			
		||||
before_install:
 | 
			
		||||
  - mkdir ~/netdisco-mibs
 | 
			
		||||
  - cd ~/netdisco-mibs
 | 
			
		||||
install:
 | 
			
		||||
  - curl -sL https://github.com/netdisco/netdisco-mibs/releases/download/4.008/netdisco-mibs.tar.gz | tar --strip-components=1 -zxf -
 | 
			
		||||
  - cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP::MAXTC
 | 
			
		||||
before_script:
 | 
			
		||||
  - 'cd ${TRAVIS_BUILD_DIR}'
 | 
			
		||||
script:
 | 
			
		||||
  - >
 | 
			
		||||
    perl Build.PL &&
 | 
			
		||||
    PERL_MM_USE_DEFAULT=1 ./Build installdeps --cpan_client 'cpanm --quiet --notest' &&
 | 
			
		||||
    ./Build test --test_files t/ --test_files xt/
 | 
			
		||||
notifications:
 | 
			
		||||
  irc:
 | 
			
		||||
    on_success: change
 | 
			
		||||
    on_failure: always
 | 
			
		||||
    channels:
 | 
			
		||||
      - 'chat.freenode.net#netdisco'
 | 
			
		||||
							
								
								
									
										50
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Module::Build;
 | 
			
		||||
 | 
			
		||||
Module::Build->new(
 | 
			
		||||
  module_name => 'SNMP::Info',
 | 
			
		||||
  license     => 'bsd',
 | 
			
		||||
  dist_author => 'Eric A. Miller <emiller@cpan.org>',
 | 
			
		||||
  # dynamic_config => 1,
 | 
			
		||||
  create_readme => 1,
 | 
			
		||||
  configure_requires => {
 | 
			
		||||
    'Module::Build' => '0.42',
 | 
			
		||||
  },
 | 
			
		||||
  # build_requires => {
 | 
			
		||||
  # },
 | 
			
		||||
  requires => {
 | 
			
		||||
    'SNMP' => '0',
 | 
			
		||||
    'Math::BigInt' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  recommends => {
 | 
			
		||||
    'PPI' => '0',
 | 
			
		||||
    'Class::ISA' => '0',
 | 
			
		||||
    'Module::Info' => '0',
 | 
			
		||||
    'Module::Load' => '0',
 | 
			
		||||
    'File::Slurp' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  test_requires => {
 | 
			
		||||
    'Test::More' => '0.88',
 | 
			
		||||
    'Test::Distribution' => '0',
 | 
			
		||||
    'Test::Class::Most'  => '0',
 | 
			
		||||
    'Test::MockObject::Extends' => '0',
 | 
			
		||||
    'File::Find' => '0',
 | 
			
		||||
    'Path::Class' => '0',
 | 
			
		||||
    'File::Slurper' => '0',
 | 
			
		||||
    'Test::Exception' => '0.43',
 | 
			
		||||
    'Class::Inspector' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  # script_files => [
 | 
			
		||||
  # ],
 | 
			
		||||
  # share_dir => 'share',
 | 
			
		||||
  meta_merge => {
 | 
			
		||||
    resources => {
 | 
			
		||||
      homepage => 'http://netdisco.org/',
 | 
			
		||||
      bugtracker => 'https://github.com/netdisco/snmp-info/issues',
 | 
			
		||||
      repository => 'https://github.com/netdisco/snmp-info',
 | 
			
		||||
      MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users',
 | 
			
		||||
      IRC => 'irc://irc.freenode.org/#netdisco',
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
)->create_build_script;
 | 
			
		||||
@@ -1,4 +1,318 @@
 | 
			
		||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
 | 
			
		||||
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)
 | 
			
		||||
 | 
			
		||||
@@ -630,7 +944,7 @@ version 1.05 (11/25/07) - CVS only. No official release
 | 
			
		||||
    + Added support for Cisco (Airespace) wireless controllers as new class
 | 
			
		||||
      L2::Airespace
 | 
			
		||||
    + Added support for Nortel Ethernet Routing Switch 2500 series and
 | 
			
		||||
      Business Ethernet Switches (David Siebörger)
 | 
			
		||||
      Business Ethernet Switches (David Siebörger)
 | 
			
		||||
    + Update of L3::Foundry to support all Foundry devices including newer
 | 
			
		||||
      switches.  Depreciate L2::Foundry.
 | 
			
		||||
    + Added generic device type detection using IANA assigned enterpise
 | 
			
		||||
							
								
								
									
										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.27';
 | 
			
		||||
 | 
			
		||||
%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,5 +1,5 @@
 | 
			
		||||
All code from version 0.7 on
 | 
			
		||||
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
 | 
			
		||||
Copyright (c) 2003-2016 Max Baker and SNMP::Info Developers
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Original Code
 | 
			
		||||
							
								
								
									
										395
									
								
								MANIFEST
									
									
									
									
									
								
							
							
						
						
									
										395
									
								
								MANIFEST
									
									
									
									
									
								
							@@ -1,125 +1,274 @@
 | 
			
		||||
ChangeLog
 | 
			
		||||
COPYRIGHT
 | 
			
		||||
DEVELOP
 | 
			
		||||
DeviceMatrix.txt
 | 
			
		||||
Info.pm
 | 
			
		||||
Info/AdslLine.pm
 | 
			
		||||
Info/Aggregate.pm
 | 
			
		||||
Info/Airespace.pm
 | 
			
		||||
Info/AMAP.pm
 | 
			
		||||
Info/Bridge.pm
 | 
			
		||||
Info/CDP.pm
 | 
			
		||||
Info/CiscoAgg.pm
 | 
			
		||||
Info/CiscoConfig.pm
 | 
			
		||||
Info/CiscoPortSecurity.pm
 | 
			
		||||
Info/CiscoPower.pm
 | 
			
		||||
Info/CiscoQOS.pm
 | 
			
		||||
Info/CiscoRTT.pm
 | 
			
		||||
Info/CiscoStack.pm
 | 
			
		||||
Info/CiscoStats.pm
 | 
			
		||||
Info/CiscoStpExtensions.pm
 | 
			
		||||
Info/CiscoVTP.pm
 | 
			
		||||
Info/EDP.pm
 | 
			
		||||
Info/Entity.pm
 | 
			
		||||
Info/EtherLike.pm
 | 
			
		||||
Info/FDP.pm
 | 
			
		||||
Info/IEEE802dot11.pm
 | 
			
		||||
Info/IEEE802dot3ad.pm
 | 
			
		||||
Info/IPv6.pm
 | 
			
		||||
Info/Layer1.pm
 | 
			
		||||
Info/Layer1/Allied.pm
 | 
			
		||||
Info/Layer1/Asante.pm
 | 
			
		||||
Info/Layer1/Bayhub.pm
 | 
			
		||||
Info/Layer1/Cyclades.pm
 | 
			
		||||
Info/Layer1/S3000.pm
 | 
			
		||||
Info/Layer2.pm
 | 
			
		||||
Info/Layer2/3Com.pm
 | 
			
		||||
Info/Layer2/Airespace.pm
 | 
			
		||||
Info/Layer2/Aironet.pm
 | 
			
		||||
Info/Layer2/Allied.pm
 | 
			
		||||
Info/Layer2/Baystack.pm
 | 
			
		||||
Info/Layer2/C1900.pm
 | 
			
		||||
Info/Layer2/C2900.pm
 | 
			
		||||
Info/Layer2/Catalyst.pm
 | 
			
		||||
Info/Layer2/Centillion.pm
 | 
			
		||||
Info/Layer2/Cisco.pm
 | 
			
		||||
Info/Layer2/CiscoSB.pm
 | 
			
		||||
Info/Layer2/HP.pm
 | 
			
		||||
Info/Layer2/HP4000.pm
 | 
			
		||||
Info/Layer2/HPVC.pm
 | 
			
		||||
Info/Layer2/Kentrox.pm
 | 
			
		||||
Info/Layer2/N2270.pm
 | 
			
		||||
Info/Layer2/NAP222x.pm
 | 
			
		||||
Info/Layer2/Netgear.pm
 | 
			
		||||
Info/Layer2/NWSS2300.pm
 | 
			
		||||
Info/Layer2/Orinoco.pm
 | 
			
		||||
Info/Layer2/Trapeze.pm
 | 
			
		||||
Info/Layer2/Ubiquiti.pm
 | 
			
		||||
Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
Info/Layer3.pm
 | 
			
		||||
Info/Layer3/Aironet.pm
 | 
			
		||||
Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
Info/Layer3/AlteonAD.pm
 | 
			
		||||
Info/Layer3/Altiga.pm
 | 
			
		||||
Info/Layer3/Arista.pm
 | 
			
		||||
Info/Layer3/Aruba.pm
 | 
			
		||||
Info/Layer3/BayRS.pm
 | 
			
		||||
Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
Info/Layer3/C3550.pm
 | 
			
		||||
Info/Layer3/C4000.pm
 | 
			
		||||
Info/Layer3/C6500.pm
 | 
			
		||||
Info/Layer3/Cisco.pm
 | 
			
		||||
Info/Layer3/CiscoASA.pm
 | 
			
		||||
Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
Info/Layer3/Contivity.pm
 | 
			
		||||
Info/Layer3/Dell.pm
 | 
			
		||||
Info/Layer3/Enterasys.pm
 | 
			
		||||
Info/Layer3/Extreme.pm
 | 
			
		||||
Info/Layer3/F5.pm
 | 
			
		||||
Info/Layer3/Force10.pm
 | 
			
		||||
Info/Layer3/Fortinet.pm
 | 
			
		||||
Info/Layer3/Foundry.pm
 | 
			
		||||
Info/Layer3/H3C.pm
 | 
			
		||||
Info/Layer3/HP9300.pm
 | 
			
		||||
Info/Layer3/IBMGbTor.pm
 | 
			
		||||
Info/Layer3/Juniper.pm
 | 
			
		||||
Info/Layer3/Lantronix.pm
 | 
			
		||||
Info/Layer3/Microsoft.pm
 | 
			
		||||
Info/Layer3/Mikrotik.pm
 | 
			
		||||
Info/Layer3/N1600.pm
 | 
			
		||||
Info/Layer3/Netscreen.pm
 | 
			
		||||
Info/Layer3/NetSNMP.pm
 | 
			
		||||
Info/Layer3/Nexus.pm
 | 
			
		||||
Info/Layer3/PacketFront.pm
 | 
			
		||||
Info/Layer3/Passport.pm
 | 
			
		||||
Info/Layer3/Pf.pm
 | 
			
		||||
Info/Layer3/Pica8.pm
 | 
			
		||||
Info/Layer3/SonicWALL.pm
 | 
			
		||||
Info/Layer3/Steelhead.pm
 | 
			
		||||
Info/Layer3/Sun.pm
 | 
			
		||||
Info/Layer3/Tasman.pm
 | 
			
		||||
Info/Layer3/Timetra.pm
 | 
			
		||||
Info/Layer7.pm
 | 
			
		||||
Info/Layer7/APC.pm
 | 
			
		||||
Info/Layer7/Neoteris.pm
 | 
			
		||||
Info/Layer7/Netscaler.pm
 | 
			
		||||
Info/LLDP.pm
 | 
			
		||||
Info/MAU.pm
 | 
			
		||||
Info/MRO.pm
 | 
			
		||||
Info/NortelStack.pm
 | 
			
		||||
Info/PowerEthernet.pm
 | 
			
		||||
Info/RapidCity.pm
 | 
			
		||||
Info/SONMP.pm
 | 
			
		||||
Makefile.PL
 | 
			
		||||
Build.PL
 | 
			
		||||
Changes
 | 
			
		||||
contrib/DEVELOP
 | 
			
		||||
contrib/util/docmunge
 | 
			
		||||
contrib/util/make_dev_matrix.pl
 | 
			
		||||
contrib/util/make_snmpdata.pl
 | 
			
		||||
contrib/util/push_ver
 | 
			
		||||
contrib/util/run_test
 | 
			
		||||
contrib/util/test_class.pl
 | 
			
		||||
contrib/util/test_class_mocked.pl
 | 
			
		||||
lib/SNMP/Info.pm
 | 
			
		||||
lib/SNMP/Info/AdslLine.pm
 | 
			
		||||
lib/SNMP/Info/Aggregate.pm
 | 
			
		||||
lib/SNMP/Info/Airespace.pm
 | 
			
		||||
lib/SNMP/Info/AMAP.pm
 | 
			
		||||
lib/SNMP/Info/Bridge.pm
 | 
			
		||||
lib/SNMP/Info/CDP.pm
 | 
			
		||||
lib/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
lib/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
lib/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
lib/SNMP/Info/CiscoPower.pm
 | 
			
		||||
lib/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
lib/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
lib/SNMP/Info/CiscoStack.pm
 | 
			
		||||
lib/SNMP/Info/CiscoStats.pm
 | 
			
		||||
lib/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
lib/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
lib/SNMP/Info/EDP.pm
 | 
			
		||||
lib/SNMP/Info/Entity.pm
 | 
			
		||||
lib/SNMP/Info/EtherLike.pm
 | 
			
		||||
lib/SNMP/Info/FDP.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
lib/SNMP/Info/IPv6.pm
 | 
			
		||||
lib/SNMP/Info/Layer1.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
lib/SNMP/Info/Layer2.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Adtran.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
lib/SNMP/Info/Layer3.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
lib/SNMP/Info/Layer7.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
lib/SNMP/Info/LLDP.pm
 | 
			
		||||
lib/SNMP/Info/MAU.pm
 | 
			
		||||
lib/SNMP/Info/MRO.pm
 | 
			
		||||
lib/SNMP/Info/NortelStack.pm
 | 
			
		||||
lib/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
lib/SNMP/Info/RapidCity.pm
 | 
			
		||||
lib/SNMP/Info/SONMP.pm
 | 
			
		||||
LICENSE
 | 
			
		||||
MANIFEST			This list of files
 | 
			
		||||
META.json
 | 
			
		||||
META.yml
 | 
			
		||||
README
 | 
			
		||||
t/00-load.t
 | 
			
		||||
t/docmunge
 | 
			
		||||
t/make_dev_matrix.pl
 | 
			
		||||
t/prereq.t
 | 
			
		||||
t/push_ver
 | 
			
		||||
t/run_test
 | 
			
		||||
t/test_class.pl
 | 
			
		||||
t/util/make_snmpdata.pl
 | 
			
		||||
t/util/test_class_mocked.pl
 | 
			
		||||
t/00_load.t
 | 
			
		||||
xt/.perltidyrc
 | 
			
		||||
xt/00_local_distribution.t
 | 
			
		||||
xt/00_local_docininfo.t
 | 
			
		||||
xt/00_local_perlcritic.t
 | 
			
		||||
xt/00_local_pod-coverage.t
 | 
			
		||||
xt/00_local_pod.t
 | 
			
		||||
xt/00_local_prereq.t
 | 
			
		||||
xt/00_local_spelling.t
 | 
			
		||||
xt/00_local_versionsync.t
 | 
			
		||||
xt/10_remote_snmplabs.t
 | 
			
		||||
xt/20_run.t
 | 
			
		||||
xt/lib/My/Test/Class.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/AdslLine.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Aggregate.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Airespace.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/AMAP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Bridge.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoPower.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoStack.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoStats.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/EDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Entity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/EtherLike.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/FDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/IPv6.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/LLDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/MAU.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/NortelStack.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/RapidCity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/SONMP.pm
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +1,70 @@
 | 
			
		||||
# Version control files and dirs.
 | 
			
		||||
\.bak$
 | 
			
		||||
\.pid$
 | 
			
		||||
\.swp$
 | 
			
		||||
 | 
			
		||||
^SNMP-Info-
 | 
			
		||||
 | 
			
		||||
^MANIFEST\.
 | 
			
		||||
 | 
			
		||||
# Avoid version control files.
 | 
			
		||||
\bRCS\b
 | 
			
		||||
\bCVS\b
 | 
			
		||||
\bSCCS\b
 | 
			
		||||
,v$
 | 
			
		||||
\B\.svn\b
 | 
			
		||||
\B\.git\b
 | 
			
		||||
.gitignore
 | 
			
		||||
\B\.gitignore\b
 | 
			
		||||
\b_darcs\b
 | 
			
		||||
\B\.cvsignore$
 | 
			
		||||
 | 
			
		||||
# Makemaker generated files and dirs.
 | 
			
		||||
^MANIFEST\.
 | 
			
		||||
^Makefile$
 | 
			
		||||
^blib/
 | 
			
		||||
^MakeMaker-\d
 | 
			
		||||
pm_to_blib
 | 
			
		||||
MYMETA.*
 | 
			
		||||
# Avoid VMS specific MakeMaker generated files
 | 
			
		||||
\bDescrip.MMS$
 | 
			
		||||
\bDESCRIP.MMS$
 | 
			
		||||
\bdescrip.mms$
 | 
			
		||||
 | 
			
		||||
# Temp, old and emacs backup files.
 | 
			
		||||
# Avoid Makemaker generated and utility files.
 | 
			
		||||
\bMANIFEST\.bak
 | 
			
		||||
\bMakefile$
 | 
			
		||||
\bblib/
 | 
			
		||||
\bMakeMaker-\d
 | 
			
		||||
\bpm_to_blib\.ts$
 | 
			
		||||
\bpm_to_blib$
 | 
			
		||||
\bblibdirs\.ts$         # 6.18 through 6.25 generated this
 | 
			
		||||
 | 
			
		||||
# Avoid Module::Build generated and utility files.
 | 
			
		||||
\bBuild$
 | 
			
		||||
\b_build/
 | 
			
		||||
\bBuild.bat$
 | 
			
		||||
\bBuild.COM$
 | 
			
		||||
\bBUILD.COM$
 | 
			
		||||
\bbuild.com$
 | 
			
		||||
 | 
			
		||||
# Avoid temp and backup files.
 | 
			
		||||
~$
 | 
			
		||||
\.old$
 | 
			
		||||
^#.*#$
 | 
			
		||||
^\.#
 | 
			
		||||
\#$
 | 
			
		||||
\b\.#
 | 
			
		||||
\.bak$
 | 
			
		||||
\.tmp$
 | 
			
		||||
\.#
 | 
			
		||||
\.rej$
 | 
			
		||||
 | 
			
		||||
# Private Regression Tests
 | 
			
		||||
\d+_local_
 | 
			
		||||
\.?perl\w+\.?rc$
 | 
			
		||||
# Avoid OS-specific files/dirs
 | 
			
		||||
# Mac OSX metadata
 | 
			
		||||
\B\.DS_Store
 | 
			
		||||
# Mac OSX SMB mount metadata files
 | 
			
		||||
\B\._
 | 
			
		||||
 | 
			
		||||
# Komodo project file
 | 
			
		||||
\.kpf$
 | 
			
		||||
# Avoid Devel::Cover and Devel::CoverX::Covered files.
 | 
			
		||||
\bcover_db\b
 | 
			
		||||
\bcovered\b
 | 
			
		||||
 
 | 
			
		||||
# Avoid MYMETA files
 | 
			
		||||
^MYMETA\.
 | 
			
		||||
 | 
			
		||||
.github
 | 
			
		||||
.travis
 | 
			
		||||
README.md
 | 
			
		||||
 | 
			
		||||
# Avoid Komodo project file
 | 
			
		||||
\.komodoproject$
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										564
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										564
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,564 @@
 | 
			
		||||
{
 | 
			
		||||
   "abstract" : "OO Interface to Network devices and MIBs through SNMP",
 | 
			
		||||
   "author" : [
 | 
			
		||||
      "Eric A. Miller <emiller@cpan.org>"
 | 
			
		||||
   ],
 | 
			
		||||
   "dynamic_config" : 1,
 | 
			
		||||
   "generated_by" : "Module::Build version 0.4224",
 | 
			
		||||
   "license" : [
 | 
			
		||||
      "bsd"
 | 
			
		||||
   ],
 | 
			
		||||
   "meta-spec" : {
 | 
			
		||||
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
 | 
			
		||||
      "version" : 2
 | 
			
		||||
   },
 | 
			
		||||
   "name" : "SNMP-Info",
 | 
			
		||||
   "prereqs" : {
 | 
			
		||||
      "configure" : {
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Module::Build" : "0.42"
 | 
			
		||||
         }
 | 
			
		||||
      },
 | 
			
		||||
      "runtime" : {
 | 
			
		||||
         "recommends" : {
 | 
			
		||||
            "Class::ISA" : "0",
 | 
			
		||||
            "File::Slurp" : "0",
 | 
			
		||||
            "Module::Info" : "0",
 | 
			
		||||
            "Module::Load" : "0",
 | 
			
		||||
            "PPI" : "0"
 | 
			
		||||
         },
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Math::BigInt" : "0",
 | 
			
		||||
            "SNMP" : "0"
 | 
			
		||||
         }
 | 
			
		||||
      },
 | 
			
		||||
      "test" : {
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Class::Inspector" : "0",
 | 
			
		||||
            "File::Find" : "0",
 | 
			
		||||
            "File::Slurper" : "0",
 | 
			
		||||
            "Path::Class" : "0",
 | 
			
		||||
            "Test::Class::Most" : "0",
 | 
			
		||||
            "Test::Distribution" : "0",
 | 
			
		||||
            "Test::Exception" : "0.43",
 | 
			
		||||
            "Test::MockObject::Extends" : "0",
 | 
			
		||||
            "Test::More" : "0.88"
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   },
 | 
			
		||||
   "provides" : {
 | 
			
		||||
      "SNMP::Info" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::AMAP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/AMAP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::AdslLine" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/AdslLine.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Aggregate" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Aggregate.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Airespace" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Airespace.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Bridge" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Bridge.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CDP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoAgg" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoAgg.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoConfig" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoConfig.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoPortSecurity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoPower" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoPower.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoQOS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoQOS.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoRTT" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoRTT.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStack.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStats" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStats.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStpExtensions" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoVTP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoVTP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::EDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/EDP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Entity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Entity.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::EtherLike" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/EtherLike.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::FDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/FDP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802dot11" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802dot11.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802dot3ad" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IPv6" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IPv6.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::LLDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/LLDP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Allied" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Allied.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Asante" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Asante.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Bayhub" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Cyclades" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::S3000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/S3000.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::3Com" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/3Com.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Adtran" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Adtran.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Airespace" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Airespace.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Aironet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Aironet.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Allied" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Allied.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Baystack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Baystack.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::C1900" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/C1900.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::C2900" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/C2900.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Catalyst" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Centillion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Centillion.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Cisco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Cisco.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::CiscoSB" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HP4000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HP4000.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HPVC" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HPVC.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Kentrox" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::N2270" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/N2270.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::NAP222x" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::NWSS2300" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Netgear" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Netgear.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Nexans" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Nexans.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Orinoco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Sixnet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Sixnet.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Trapeze" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Ubiquiti" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::ZyXEL_DSLAM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Aironet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Aironet.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::AlcatelLucent" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::AlteonAD" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Altiga" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Altiga.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Arista" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Arista.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Aruba" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Aruba.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::BayRS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/BayRS.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::BlueCoatSG" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C3550" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C3550.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C4000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C4000.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C6500" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C6500.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CheckPoint" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Cisco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Cisco.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoASA" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoFWSM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoSwitch" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Contivity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Contivity.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Cumulus" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::DLink" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/DLink.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Dell" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Dell.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::ERX" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/ERX.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Enterasys" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Extreme" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Extreme.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::F5" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/F5.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Force10" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Force10.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Fortinet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Foundry" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Foundry.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::H3C" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/H3C.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::HP9300" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/HP9300.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Huawei" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Huawei.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::IBMGbTor" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Juniper" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Juniper.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Lantronix" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Microsoft" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Mikrotik" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::N1600" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/N1600.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::NetSNMP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Netscreen" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Nexus" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Nexus.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::OneAccess" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/OneAccess.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::PacketFront" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::PaloAlto" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Passport" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Passport.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Pf" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Pf.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Pica8" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Pica8.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::SonicWALL" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Steelhead" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Sun" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Sun.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Tasman" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Tasman.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Timetra" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Timetra.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::VMware" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/VMware.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::VyOS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/VyOS.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::APC" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/APC.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Arbor" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Arbor.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::CiscoIPS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Gigamon" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Neoteris" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Netscaler" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::MAU" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/MAU.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::MRO" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/MRO.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::NortelStack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/NortelStack.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::PowerEthernet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/PowerEthernet.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::RapidCity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/RapidCity.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::SONMP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/SONMP.pm",
 | 
			
		||||
         "version" : "3.55"
 | 
			
		||||
      }
 | 
			
		||||
   },
 | 
			
		||||
   "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.55",
 | 
			
		||||
   "x_serialization_backend" : "JSON::PP version 2.97001"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										414
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										414
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,414 @@
 | 
			
		||||
---
 | 
			
		||||
abstract: 'OO Interface to Network devices and MIBs through SNMP'
 | 
			
		||||
author:
 | 
			
		||||
  - 'Eric A. Miller <emiller@cpan.org>'
 | 
			
		||||
build_requires:
 | 
			
		||||
  Class::Inspector: '0'
 | 
			
		||||
  File::Find: '0'
 | 
			
		||||
  File::Slurper: '0'
 | 
			
		||||
  Path::Class: '0'
 | 
			
		||||
  Test::Class::Most: '0'
 | 
			
		||||
  Test::Distribution: '0'
 | 
			
		||||
  Test::Exception: '0.43'
 | 
			
		||||
  Test::MockObject::Extends: '0'
 | 
			
		||||
  Test::More: '0.88'
 | 
			
		||||
configure_requires:
 | 
			
		||||
  Module::Build: '0.42'
 | 
			
		||||
dynamic_config: 1
 | 
			
		||||
generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 2.150010'
 | 
			
		||||
license: bsd
 | 
			
		||||
meta-spec:
 | 
			
		||||
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
 | 
			
		||||
  version: '1.4'
 | 
			
		||||
name: SNMP-Info
 | 
			
		||||
provides:
 | 
			
		||||
  SNMP::Info:
 | 
			
		||||
    file: lib/SNMP/Info.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::AMAP:
 | 
			
		||||
    file: lib/SNMP/Info/AMAP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::AdslLine:
 | 
			
		||||
    file: lib/SNMP/Info/AdslLine.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Aggregate:
 | 
			
		||||
    file: lib/SNMP/Info/Aggregate.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Airespace:
 | 
			
		||||
    file: lib/SNMP/Info/Airespace.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Bridge:
 | 
			
		||||
    file: lib/SNMP/Info/Bridge.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CDP:
 | 
			
		||||
    file: lib/SNMP/Info/CDP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoAgg:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoConfig:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoPortSecurity:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoPower:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoPower.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoQOS:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoRTT:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoStack:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStack.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoStats:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStats.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoStpExtensions:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::CiscoVTP:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::EDP:
 | 
			
		||||
    file: lib/SNMP/Info/EDP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Entity:
 | 
			
		||||
    file: lib/SNMP/Info/Entity.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::EtherLike:
 | 
			
		||||
    file: lib/SNMP/Info/EtherLike.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::FDP:
 | 
			
		||||
    file: lib/SNMP/Info/FDP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::IEEE802dot11:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::IPv6:
 | 
			
		||||
    file: lib/SNMP/Info/IPv6.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::LLDP:
 | 
			
		||||
    file: lib/SNMP/Info/LLDP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer1:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer1::Allied:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer1::Asante:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer1::Bayhub:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer1::Cyclades:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer1::S3000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::3Com:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Adtran:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Adtran.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Airespace:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Aironet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Allied:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Baystack:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::C1900:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::C2900:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Catalyst:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Centillion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Cisco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::CiscoSB:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::HP:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::HP4000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::HPVC:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Kentrox:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::N2270:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::NAP222x:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::NWSS2300:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Netgear:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Nexans:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Orinoco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Sixnet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Trapeze:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::Ubiquiti:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer2::ZyXEL_DSLAM:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Aironet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::AlcatelLucent:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::AlteonAD:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Altiga:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Arista:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Aruba:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::BayRS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::BlueCoatSG:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::C3550:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::C4000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::C6500:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::CheckPoint:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Cisco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoASA:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoFWSM:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoSwitch:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Contivity:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Cumulus:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::DLink:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Dell:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::ERX:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Enterasys:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Extreme:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::F5:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Force10:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Fortinet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Foundry:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::H3C:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::HP9300:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Huawei:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::IBMGbTor:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Juniper:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Lantronix:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Microsoft:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Mikrotik:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::N1600:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::NetSNMP:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Netscreen:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Nexus:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::OneAccess:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::PacketFront:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::PaloAlto:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Passport:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Pf:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Pica8:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::SonicWALL:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Steelhead:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Sun:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Tasman:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::Timetra:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::VMware:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer3::VyOS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7::APC:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7::Arbor:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7::CiscoIPS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7::Gigamon:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7::Neoteris:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::Layer7::Netscaler:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::MAU:
 | 
			
		||||
    file: lib/SNMP/Info/MAU.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::MRO:
 | 
			
		||||
    file: lib/SNMP/Info/MRO.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::NortelStack:
 | 
			
		||||
    file: lib/SNMP/Info/NortelStack.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::PowerEthernet:
 | 
			
		||||
    file: lib/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::RapidCity:
 | 
			
		||||
    file: lib/SNMP/Info/RapidCity.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
  SNMP::Info::SONMP:
 | 
			
		||||
    file: lib/SNMP/Info/SONMP.pm
 | 
			
		||||
    version: '3.55'
 | 
			
		||||
recommends:
 | 
			
		||||
  Class::ISA: '0'
 | 
			
		||||
  File::Slurp: '0'
 | 
			
		||||
  Module::Info: '0'
 | 
			
		||||
  Module::Load: '0'
 | 
			
		||||
  PPI: '0'
 | 
			
		||||
requires:
 | 
			
		||||
  Math::BigInt: '0'
 | 
			
		||||
  SNMP: '0'
 | 
			
		||||
resources:
 | 
			
		||||
  IRC: irc://irc.freenode.org/#netdisco
 | 
			
		||||
  MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
 | 
			
		||||
  bugtracker: https://github.com/netdisco/snmp-info/issues
 | 
			
		||||
  homepage: http://netdisco.org/
 | 
			
		||||
  license: http://opensource.org/licenses/bsd-license.php
 | 
			
		||||
  repository: https://github.com/netdisco/snmp-info
 | 
			
		||||
version: '3.55'
 | 
			
		||||
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";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										154
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								README
									
									
									
									
									
								
							@@ -1,13 +1,10 @@
 | 
			
		||||
NAME
 | 
			
		||||
 | 
			
		||||
    SNMP::Info - OO Interface to Network devices and MIBs through SNMP
 | 
			
		||||
 | 
			
		||||
VERSION
 | 
			
		||||
 | 
			
		||||
    SNMP::Info - Version 3.27
 | 
			
		||||
    SNMP::Info - Version 3.55
 | 
			
		||||
 | 
			
		||||
AUTHOR
 | 
			
		||||
 | 
			
		||||
    SNMP::Info is maintained by team of Open Source authors headed by Eric
 | 
			
		||||
    Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits.
 | 
			
		||||
 | 
			
		||||
@@ -18,12 +15,12 @@ AUTHOR
 | 
			
		||||
    <http://netdisco.org> by Max Baker.
 | 
			
		||||
 | 
			
		||||
DEVICES SUPPORTED
 | 
			
		||||
 | 
			
		||||
    See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt for
 | 
			
		||||
    more details.
 | 
			
		||||
    There are now generic classes for most types of device and so the
 | 
			
		||||
    authors recommend loading SNMP::Info with AutoSpecify, and then
 | 
			
		||||
    reporting to the mail list any missing functionality (such as neighbor
 | 
			
		||||
    discovery tables).
 | 
			
		||||
 | 
			
		||||
SYNOPSIS
 | 
			
		||||
 | 
			
		||||
     use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
     my $info = new SNMP::Info(
 | 
			
		||||
@@ -79,13 +76,11 @@ SYNOPSIS
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
SUPPORT
 | 
			
		||||
 | 
			
		||||
    Please direct all support, help, and bug requests to the snmp-info-users
 | 
			
		||||
    Mailing List at
 | 
			
		||||
    <http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
 | 
			
		||||
 | 
			
		||||
DESCRIPTION
 | 
			
		||||
 | 
			
		||||
    SNMP::Info gives an object oriented interface to information obtained
 | 
			
		||||
    through SNMP.
 | 
			
		||||
 | 
			
		||||
@@ -112,7 +107,6 @@ DESCRIPTION
 | 
			
		||||
    a couple hashes. See EXTENDING SNMP::INFO.
 | 
			
		||||
 | 
			
		||||
REQUIREMENTS
 | 
			
		||||
 | 
			
		||||
    1. Net-SNMP
 | 
			
		||||
        To use this module, you must have Net-SNMP installed on your system.
 | 
			
		||||
        More specifically you need the Perl modules that come with it.
 | 
			
		||||
@@ -143,14 +137,13 @@ REQUIREMENTS
 | 
			
		||||
 | 
			
		||||
        If you are using SNMP::Info separate from Netdisco, download the
 | 
			
		||||
        Netdisco MIB package at
 | 
			
		||||
        <http://sourceforge.net/project/showfiles.php?group_id=80033&package
 | 
			
		||||
        _id=135517>
 | 
			
		||||
        <http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest
 | 
			
		||||
        -snapshot/>
 | 
			
		||||
 | 
			
		||||
        Make sure that your snmp.conf is updated to point to your MIB
 | 
			
		||||
        directory and that the MIBs are world-readable.
 | 
			
		||||
 | 
			
		||||
DESIGN GOALS
 | 
			
		||||
 | 
			
		||||
    1. Use of textual MIB leaf identifier and enumerated values
 | 
			
		||||
 | 
			
		||||
        *   All values are retrieved via MIB Leaf node names
 | 
			
		||||
@@ -180,14 +173,12 @@ DESIGN GOALS
 | 
			
		||||
        inclusion in the next version.
 | 
			
		||||
 | 
			
		||||
SUBCLASSES
 | 
			
		||||
 | 
			
		||||
    These are the subclasses that implement MIBs and support devices:
 | 
			
		||||
 | 
			
		||||
    Required MIBs not included in the install instructions above are noted
 | 
			
		||||
    here.
 | 
			
		||||
 | 
			
		||||
  MIB Subclasses
 | 
			
		||||
 | 
			
		||||
    These subclasses implement method to access one or more MIBs. These are
 | 
			
		||||
    not used directly, but rather inherited from device subclasses.
 | 
			
		||||
 | 
			
		||||
@@ -365,7 +356,6 @@ SUBCLASSES
 | 
			
		||||
        See documentation in SNMP::Info::SONMP for details.
 | 
			
		||||
 | 
			
		||||
  Device Subclasses
 | 
			
		||||
 | 
			
		||||
    These subclasses inherit from one or more classes to provide a common
 | 
			
		||||
    interface to data obtainable from network devices.
 | 
			
		||||
 | 
			
		||||
@@ -398,7 +388,7 @@ SUBCLASSES
 | 
			
		||||
            See documentation in SNMP::Info::Layer1::Bayhub for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer1::Cyclades
 | 
			
		||||
            Subclass for Cyclades terminal servers.
 | 
			
		||||
            Subclass for Cyclades/Avocent terminal servers.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer1::Cyclades for details.
 | 
			
		||||
 | 
			
		||||
@@ -418,6 +408,11 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer2::3Com for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer2::Adtran
 | 
			
		||||
            Subclass for Adtran devices.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer2::Adtran for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer2::Airespace
 | 
			
		||||
            Subclass for Cisco (Airespace) wireless controllers.
 | 
			
		||||
 | 
			
		||||
@@ -520,6 +515,11 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            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 Interface to Avaya (Trapeze) Wireless Controllers
 | 
			
		||||
 | 
			
		||||
@@ -535,8 +535,13 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer2::Trapeze for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer2::Sixnet
 | 
			
		||||
            SNMP Interface to Sixnet industrial switches
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer2::Sixnet for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer2::Ubiquiti
 | 
			
		||||
            SNMP Interface to Ubiquiti Access Points
 | 
			
		||||
            SNMP Interface to Ubiquiti Access Points and other devices
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer2::Ubiquiti for details.
 | 
			
		||||
 | 
			
		||||
@@ -613,6 +618,11 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::C6500 for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::CheckPoint
 | 
			
		||||
            Subclass for CheckPoint devices
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::CheckPoint for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::Cisco
 | 
			
		||||
            This is a simple wrapper around layer 3 for IOS devices and the
 | 
			
		||||
            base layer 3 Cisco class for other device specific layer 3 Cisco
 | 
			
		||||
@@ -639,10 +649,20 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::Contivity for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::Cumulus
 | 
			
		||||
            Subclass for Cumulus Networks Routers.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::Cumulus for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::DLink
 | 
			
		||||
            Subclass for DLink devices.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::DLink for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::Dell
 | 
			
		||||
            Subclass for Dell PowerConnect switches. D-Link, the IBM
 | 
			
		||||
            BladeCenter Gigabit Ethernet Switch Module and some Linksys
 | 
			
		||||
            switches also use this module based upon MIB support.
 | 
			
		||||
            Subclass for Dell PowerConnect switches. The IBM BladeCenter
 | 
			
		||||
            Gigabit Ethernet Switch Module and some Linksys switches also
 | 
			
		||||
            use this module based upon MIB support.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::Dell for details.
 | 
			
		||||
 | 
			
		||||
@@ -651,6 +671,11 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            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
 | 
			
		||||
            Subclass for Extreme Networks switches.
 | 
			
		||||
 | 
			
		||||
@@ -688,6 +713,11 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::HP9300 for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::Huawei
 | 
			
		||||
            SNMP Interface to Huawei Layer 3 switches and routers.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::Huawei for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::IBMGbTor
 | 
			
		||||
            SNMP Interface to IBM Rackswitch (formerly Blade Network
 | 
			
		||||
            Technologies) network devices.
 | 
			
		||||
@@ -735,12 +765,22 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            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
 | 
			
		||||
            Subclass for PacketFront DRG series CPE.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::PacketFront for
 | 
			
		||||
            details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::PaloAlto
 | 
			
		||||
            Subclass for Palo Alto firewalls.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::PaloAlto for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::Passport
 | 
			
		||||
            Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000
 | 
			
		||||
            series, Accelar, and VSP 9000 series switches.
 | 
			
		||||
@@ -780,28 +820,53 @@ SUBCLASSES
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::Timetra for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::VyOS
 | 
			
		||||
            Subclass for VyOS routers.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::VyOS for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer3::VMware
 | 
			
		||||
            Subclass for VMware ESXi hosts.
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer3::VMware for details.
 | 
			
		||||
 | 
			
		||||
    SNMP::Info::Layer7
 | 
			
		||||
        Generic Layer7 Devices.
 | 
			
		||||
 | 
			
		||||
        See documentation in SNMP::Info::Layer7 for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer7::APC
 | 
			
		||||
            SNMP Interface to APC UPS devices
 | 
			
		||||
            Subclass for APC UPS devices
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer7::APC for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer7::Arbor
 | 
			
		||||
            Subclass for Arbor appliances
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer7::Arbor for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer7::CiscoIPS
 | 
			
		||||
            Subclass for Cisco IPS devices
 | 
			
		||||
 | 
			
		||||
            See documentation in "SNMP::Info::Layer7::Cisco IPS" for
 | 
			
		||||
            details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer7::Gigamon
 | 
			
		||||
            Subclass for Gigamon devices
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer7::Gigamon for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer7::Netscaler
 | 
			
		||||
            SNMP Interface to Citrix Netscaler appliances
 | 
			
		||||
            Subclass for Citrix Netscaler appliances
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer7::Netscaler for details.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info::Layer7::Neoteris
 | 
			
		||||
            SNMP Interface to Juniper SSL VPN appliances
 | 
			
		||||
            Subclass for Juniper SSL VPN appliances
 | 
			
		||||
 | 
			
		||||
            See documentation in SNMP::Info::Layer7::Neoteris for details.
 | 
			
		||||
 | 
			
		||||
Thanks
 | 
			
		||||
 | 
			
		||||
    Thanks for testing and coding help (in no particular order) to :
 | 
			
		||||
    Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex
 | 
			
		||||
    Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson,
 | 
			
		||||
@@ -812,9 +877,7 @@ Thanks
 | 
			
		||||
    Netdisco README!
 | 
			
		||||
 | 
			
		||||
USAGE
 | 
			
		||||
 | 
			
		||||
  Constructor
 | 
			
		||||
 | 
			
		||||
    new()
 | 
			
		||||
        Creates a new object and connects via SNMP::Session.
 | 
			
		||||
 | 
			
		||||
@@ -964,7 +1027,6 @@ USAGE
 | 
			
		||||
        identify the device.
 | 
			
		||||
 | 
			
		||||
  Data is Cached
 | 
			
		||||
 | 
			
		||||
    Methods and subroutines requesting data from a device will only load the
 | 
			
		||||
    data once, and then return cached versions of that data.
 | 
			
		||||
 | 
			
		||||
@@ -974,11 +1036,10 @@ USAGE
 | 
			
		||||
    Run $info->clear_cache() to clear the cache to allow reload of both
 | 
			
		||||
    globals and table methods.
 | 
			
		||||
 | 
			
		||||
    The cache can be retreved or set using the $info->cache() method. This
 | 
			
		||||
    The cache can be retrieved or set using the $info->cache() method. This
 | 
			
		||||
    works together with the "Offline" option.
 | 
			
		||||
 | 
			
		||||
  Object Scalar Methods
 | 
			
		||||
 | 
			
		||||
    These are for package related data, not directly supplied from SNMP.
 | 
			
		||||
 | 
			
		||||
    $info->clear_cache()
 | 
			
		||||
@@ -1023,10 +1084,6 @@ USAGE
 | 
			
		||||
        If the device still can be connected to via SNMP::Info, then
 | 
			
		||||
        SNMP::Info is returned.
 | 
			
		||||
 | 
			
		||||
        See <http://netdisco.org/doc/DeviceMatrix.html> or DeviceMatrix.txt
 | 
			
		||||
        for more details about device support, or view "device_type()" in
 | 
			
		||||
        Info.pm.
 | 
			
		||||
 | 
			
		||||
    $info->error(no_clear)
 | 
			
		||||
        Returns Error message if there is an error, or undef if there is
 | 
			
		||||
        not.
 | 
			
		||||
@@ -1066,7 +1123,6 @@ USAGE
 | 
			
		||||
        Indexing.html>
 | 
			
		||||
 | 
			
		||||
  Globals (Scalar Methods)
 | 
			
		||||
 | 
			
		||||
    These are methods to return scalar data from RFC1213.
 | 
			
		||||
 | 
			
		||||
    Some subset of these is probably available for any network device that
 | 
			
		||||
@@ -1115,7 +1171,6 @@ USAGE
 | 
			
		||||
        ("ipForwarding")
 | 
			
		||||
 | 
			
		||||
  Table Methods
 | 
			
		||||
 | 
			
		||||
    Each of these methods returns a hash_reference to a hash keyed on the
 | 
			
		||||
    interface index in SNMP.
 | 
			
		||||
 | 
			
		||||
@@ -1130,7 +1185,6 @@ USAGE
 | 
			
		||||
    cases changes between reboots of the network device.
 | 
			
		||||
 | 
			
		||||
  Partial Table Fetches
 | 
			
		||||
 | 
			
		||||
    If you want to get only a part of an SNMP table or a single instance
 | 
			
		||||
    from the table and you know the IID for the part of the table that you
 | 
			
		||||
    want, you can specify it in the call:
 | 
			
		||||
@@ -1145,7 +1199,6 @@ USAGE
 | 
			
		||||
    Partial table results are not cached.
 | 
			
		||||
 | 
			
		||||
  Interface Information
 | 
			
		||||
 | 
			
		||||
    $info->interfaces()
 | 
			
		||||
        This methods is overridden in each subclass to provide a mapping
 | 
			
		||||
        between the Interface Table Index (iid) and the physical port name.
 | 
			
		||||
@@ -1240,7 +1293,6 @@ USAGE
 | 
			
		||||
        ("ifAlias")
 | 
			
		||||
 | 
			
		||||
  Interface Statistics
 | 
			
		||||
 | 
			
		||||
    $info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(),
 | 
			
		||||
    $info->i_octets_out64()
 | 
			
		||||
        Bandwidth.
 | 
			
		||||
@@ -1331,7 +1383,6 @@ USAGE
 | 
			
		||||
        ("ifSpecific")
 | 
			
		||||
 | 
			
		||||
  IP Address Table
 | 
			
		||||
 | 
			
		||||
    Each entry in this table is an IP address in use on this device. Usually
 | 
			
		||||
    this is implemented in Layer3 Devices.
 | 
			
		||||
 | 
			
		||||
@@ -1356,7 +1407,6 @@ USAGE
 | 
			
		||||
        ("ipAdEntBcastAddr")
 | 
			
		||||
 | 
			
		||||
  IP Routing Table
 | 
			
		||||
 | 
			
		||||
    $info->ipr_route()
 | 
			
		||||
        The route in question. A value of 0.0.0.0 is the default gateway
 | 
			
		||||
        route.
 | 
			
		||||
@@ -1473,7 +1523,6 @@ USAGE
 | 
			
		||||
        ("ipRouteInfo")
 | 
			
		||||
 | 
			
		||||
  Topology Information
 | 
			
		||||
 | 
			
		||||
    Based upon the manufacturer and software version devices may support
 | 
			
		||||
    some combination of Layer 2 topology protocol information. SNMP::Info
 | 
			
		||||
    supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery
 | 
			
		||||
@@ -1491,7 +1540,6 @@ USAGE
 | 
			
		||||
    AMAP: See SNMP::Info::AMAP for details.
 | 
			
		||||
 | 
			
		||||
   Topology Capabilities
 | 
			
		||||
 | 
			
		||||
    $info->has_topo()
 | 
			
		||||
        Reports Layer 2 topology protocols which are supported and running
 | 
			
		||||
        on a device.
 | 
			
		||||
@@ -1501,7 +1549,6 @@ USAGE
 | 
			
		||||
        protocols are supported or running.
 | 
			
		||||
 | 
			
		||||
   Common Topology Table Information
 | 
			
		||||
 | 
			
		||||
    The common topology table methods below will query the device for
 | 
			
		||||
    information from the specified topology protocols and return a single
 | 
			
		||||
    hash combining all information. As a result, there may be identical
 | 
			
		||||
@@ -1562,7 +1609,6 @@ USAGE
 | 
			
		||||
        Note: Only CDP and LLDP support this method.
 | 
			
		||||
 | 
			
		||||
SETTING DATA VIA SNMP
 | 
			
		||||
 | 
			
		||||
    This section explains how to use SNMP::Info to do SNMP Set operations.
 | 
			
		||||
 | 
			
		||||
    $info->set_METHOD($value)
 | 
			
		||||
@@ -1592,7 +1638,6 @@ SETTING DATA VIA SNMP
 | 
			
		||||
    subroutines will need to be added if they haven't been already.
 | 
			
		||||
 | 
			
		||||
Quiet Mode
 | 
			
		||||
 | 
			
		||||
    SNMP::Info will not chirp anything to STDOUT unless there is a serious
 | 
			
		||||
    error (in which case it will probably die).
 | 
			
		||||
 | 
			
		||||
@@ -1607,7 +1652,6 @@ Quiet Mode
 | 
			
		||||
     my $name = $info->name() or die "Couldn't get sysName!" . $name->error();
 | 
			
		||||
 | 
			
		||||
EXTENDING SNMP::INFO
 | 
			
		||||
 | 
			
		||||
    To support a new class (vendor or platform) of device, add a Perl
 | 
			
		||||
    package with the data structures and methods listed below.
 | 
			
		||||
 | 
			
		||||
@@ -1617,14 +1661,13 @@ EXTENDING SNMP::INFO
 | 
			
		||||
    to verify the implementation.
 | 
			
		||||
 | 
			
		||||
  Gathering MIB data for SNMP::Info Developers
 | 
			
		||||
 | 
			
		||||
    The preference is to open a feature request in the SourceForge project.
 | 
			
		||||
    This allows all developers to have visibility into the request. Please
 | 
			
		||||
    include pointers to the applicable platform MIBs. For development we
 | 
			
		||||
    will need an "snmpwalk" of the device. There is a tool now included in
 | 
			
		||||
    the SNMP::Info distribution to help with this task, although you'll most
 | 
			
		||||
    likely need to download the distribution from CPAN as it's included in
 | 
			
		||||
    the ""t/util"" directory.
 | 
			
		||||
    the ""contrib/util"" directory.
 | 
			
		||||
 | 
			
		||||
    The utility is named "make_snmpdata.pl". Run it with a command line
 | 
			
		||||
    like:
 | 
			
		||||
@@ -1643,7 +1686,6 @@ EXTENDING SNMP::INFO
 | 
			
		||||
    ticket.
 | 
			
		||||
 | 
			
		||||
  Data Structures required in new Subclass
 | 
			
		||||
 | 
			
		||||
    A class inheriting this class must implement these data structures :
 | 
			
		||||
 | 
			
		||||
    $INIT
 | 
			
		||||
@@ -1700,7 +1742,6 @@ EXTENDING SNMP::INFO
 | 
			
		||||
         )
 | 
			
		||||
 | 
			
		||||
  Sample Subclass
 | 
			
		||||
 | 
			
		||||
    Let's make a sample Layer 2 Device subclass. This class will inherit the
 | 
			
		||||
    Cisco Vlan module as an example.
 | 
			
		||||
 | 
			
		||||
@@ -1793,9 +1834,7 @@ EXTENDING SNMP::INFO
 | 
			
		||||
    of SNMP::Info.
 | 
			
		||||
 | 
			
		||||
SNMP::INFO INTERNALS
 | 
			
		||||
 | 
			
		||||
  Object Namespace
 | 
			
		||||
 | 
			
		||||
    Internal data is stored with bareword keys. For example $info->{debug}
 | 
			
		||||
 | 
			
		||||
    SNMP Data is stored or marked cached with keys starting with an
 | 
			
		||||
@@ -1805,7 +1844,6 @@ SNMP::INFO INTERNALS
 | 
			
		||||
    above.
 | 
			
		||||
 | 
			
		||||
  Package Globals
 | 
			
		||||
 | 
			
		||||
    These set the default value for an object upon creation.
 | 
			
		||||
 | 
			
		||||
    $DEBUG
 | 
			
		||||
@@ -1827,7 +1865,6 @@ SNMP::INFO INTERNALS
 | 
			
		||||
        for more info. Can change by passing BulkRepeaters option in new()
 | 
			
		||||
 | 
			
		||||
  Data Munging Callback Subroutines
 | 
			
		||||
 | 
			
		||||
    munge_speed()
 | 
			
		||||
        Makes human friendly speed ratings using %SPEED_MAP
 | 
			
		||||
 | 
			
		||||
@@ -1857,6 +1894,7 @@ SNMP::INFO INTERNALS
 | 
			
		||||
                        '54000000'   => '54 Mbps',
 | 
			
		||||
                        '64000000'   => '64 Mbps',
 | 
			
		||||
                        '100000000'  => '100 Mbps',
 | 
			
		||||
                        '200000000'  => '200 Mbps',
 | 
			
		||||
                        '149760000'  => 'ATM on OC-3',
 | 
			
		||||
                        '155000000'  => 'OC-3',
 | 
			
		||||
                        '155519000'  => 'OC-3',
 | 
			
		||||
@@ -1866,6 +1904,7 @@ SNMP::INFO INTERNALS
 | 
			
		||||
                        '622000000'  => 'OC-12',
 | 
			
		||||
                        '622080000'  => 'OC-12',
 | 
			
		||||
                        '1000000000' => '1.0 Gbps',
 | 
			
		||||
                        '2000000000' => '2.0 Gbps',
 | 
			
		||||
                        '2488000000' => 'OC-48',
 | 
			
		||||
                     )
 | 
			
		||||
 | 
			
		||||
@@ -1929,7 +1968,6 @@ SNMP::INFO INTERNALS
 | 
			
		||||
        Takes an OID and return the object name if the right MIB is loaded.
 | 
			
		||||
 | 
			
		||||
  Internally Used Functions
 | 
			
		||||
 | 
			
		||||
    $info->init()
 | 
			
		||||
        Used internally. Loads all entries in %MIBS.
 | 
			
		||||
 | 
			
		||||
@@ -2107,7 +2145,6 @@ SNMP::INFO INTERNALS
 | 
			
		||||
        Returns undef if the method does not exist and can not be created.
 | 
			
		||||
 | 
			
		||||
  AUTOLOAD
 | 
			
		||||
 | 
			
		||||
    Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in
 | 
			
		||||
    loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated
 | 
			
		||||
    methods are inserted into the symbol table so that subsequent calls can
 | 
			
		||||
@@ -2130,7 +2167,6 @@ SNMP::INFO INTERNALS
 | 
			
		||||
    subclass.
 | 
			
		||||
 | 
			
		||||
COPYRIGHT AND LICENSE
 | 
			
		||||
 | 
			
		||||
    Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010
 | 
			
		||||
    Max Baker and SNMP::Info Developers All rights reserved.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ Coding Guidelines:
 | 
			
		||||
    - tab-width of 4, no tab characters
 | 
			
		||||
    - keep POD documentation up-to-date
 | 
			
		||||
    - always update ChangeLog before committing
 | 
			
		||||
    - always update DeviceMatrix.txt before committing
 | 
			
		||||
    - check-in required mibs to netdisco-mibs and release new package if needed
 | 
			
		||||
 | 
			
		||||
Release and Testing Instructions: 
 | 
			
		||||
@@ -3,9 +3,9 @@
 | 
			
		||||
 | 
			
		||||
use File::Glob qw/bsd_glob/;
 | 
			
		||||
 | 
			
		||||
my @pms = glob_rec("../Info");
 | 
			
		||||
my @pms = glob_rec("./lib");
 | 
			
		||||
 | 
			
		||||
$new_version = shift @ARGV || '3.01';
 | 
			
		||||
$new_version = shift @ARGV || die "missing new version\n";
 | 
			
		||||
 | 
			
		||||
foreach my $p (@pms) {
 | 
			
		||||
    print "$p\n";
 | 
			
		||||
@@ -16,6 +16,7 @@ foreach my $p (@pms) {
 | 
			
		||||
 | 
			
		||||
    while (<O>) {
 | 
			
		||||
        s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
 | 
			
		||||
        s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/;
 | 
			
		||||
        print P;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
#
 | 
			
		||||
# test_class_mocked.pl
 | 
			
		||||
#
 | 
			
		||||
@@ -33,7 +33,7 @@ use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Carp;
 | 
			
		||||
use FindBin;
 | 
			
		||||
use lib "$FindBin::Bin/../../..";
 | 
			
		||||
use lib "$FindBin::Bin/../../lib";
 | 
			
		||||
use File::Slurp qw(slurp);
 | 
			
		||||
use Getopt::Long;
 | 
			
		||||
use Pod::Usage;
 | 
			
		||||
@@ -24,7 +24,7 @@ use vars
 | 
			
		||||
    qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
 | 
			
		||||
    $NOSUCH $BIGINT $REPEATERS/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
@@ -32,7 +32,7 @@ SNMP::Info - OO Interface to Network devices and MIBs through SNMP
 | 
			
		||||
 | 
			
		||||
=head1 VERSION
 | 
			
		||||
 | 
			
		||||
SNMP::Info - Version 3.27
 | 
			
		||||
SNMP::Info - Version 3.55
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +47,9 @@ by Max Baker.
 | 
			
		||||
 | 
			
		||||
=head1 DEVICES SUPPORTED
 | 
			
		||||
 | 
			
		||||
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details.
 | 
			
		||||
There are now generic classes for most types of device and so the authors
 | 
			
		||||
recommend loading SNMP::Info with AutoSpecify, and then reporting to the mail
 | 
			
		||||
list any missing functionality (such as neighbor discovery tables).
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
@@ -168,7 +170,7 @@ install by hand.
 | 
			
		||||
SNMP::Info operates on textual descriptors found in MIBs.
 | 
			
		||||
 | 
			
		||||
If you are using SNMP::Info separate from Netdisco,
 | 
			
		||||
download the Netdisco MIB package at L<http://sourceforge.net/project/showfiles.php?group_id=80033&package_id=135517>
 | 
			
		||||
download the Netdisco MIB package at L<http://sourceforge.net/projects/netdisco/files/netdisco-mibs/latest-snapshot/>
 | 
			
		||||
 | 
			
		||||
Make sure that your snmp.conf is updated to point to your MIB directory
 | 
			
		||||
and that the MIBs are world-readable.
 | 
			
		||||
@@ -437,7 +439,7 @@ interface to data obtainable from network devices.
 | 
			
		||||
All the required MIB files are included in the netdisco-mib package.
 | 
			
		||||
(See Above).
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
=over 4
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
@@ -445,7 +447,7 @@ Generic Layer1 Device subclass.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer1> for details.
 | 
			
		||||
 | 
			
		||||
=over 
 | 
			
		||||
=over 4
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer1::Allied
 | 
			
		||||
 | 
			
		||||
@@ -472,7 +474,7 @@ See documentation in L<SNMP::Info::Layer1::Bayhub> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer1::Cyclades
 | 
			
		||||
 | 
			
		||||
Subclass for Cyclades terminal servers.
 | 
			
		||||
Subclass for Cyclades/Avocent terminal servers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer1::Cyclades> for details.
 | 
			
		||||
 | 
			
		||||
@@ -499,6 +501,12 @@ SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::3Com> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Adtran
 | 
			
		||||
 | 
			
		||||
Subclass for Adtran devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Adtran> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Airespace
 | 
			
		||||
 | 
			
		||||
Subclass for Cisco (Airespace) wireless controllers.
 | 
			
		||||
@@ -612,6 +620,12 @@ Subclass for Netgear switches
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Netgear> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Nexans
 | 
			
		||||
 | 
			
		||||
Subclass for Nexans switches
 | 
			
		||||
 | 
			
		||||
See documetion in L<SNMP::Info::Layer2::Nexans> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::NWSS2300
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Avaya (Trapeze) Wireless Controllers
 | 
			
		||||
@@ -630,9 +644,15 @@ SNMP Interface to Juniper (Trapeze) Wireless Controllers
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Trapeze> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Sixnet
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Sixnet industrial switches
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Sixnet> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Ubiquiti
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Ubiquiti Access Points
 | 
			
		||||
SNMP Interface to Ubiquiti Access Points and other devices
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Ubiquiti> for details.
 | 
			
		||||
 | 
			
		||||
@@ -722,6 +742,12 @@ This class covers Catalyst 6500s in native mode, hybrid mode.  Catalyst
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::C6500> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::CheckPoint
 | 
			
		||||
 | 
			
		||||
Subclass for CheckPoint devices
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::CheckPoint> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Cisco
 | 
			
		||||
 | 
			
		||||
This is a simple wrapper around layer 3 for IOS devices and the base layer 3
 | 
			
		||||
@@ -752,9 +778,21 @@ Subclass for Avaya/Nortel Contivity/VPN Routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Contivity> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Cumulus
 | 
			
		||||
 | 
			
		||||
Subclass for Cumulus Networks Routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Cumulus> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::DLink
 | 
			
		||||
 | 
			
		||||
Subclass for DLink devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::DLink> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Dell
 | 
			
		||||
 | 
			
		||||
Subclass for Dell PowerConnect switches. D-Link, the IBM BladeCenter
 | 
			
		||||
Subclass for Dell PowerConnect switches. The IBM BladeCenter
 | 
			
		||||
Gigabit Ethernet Switch Module and some Linksys switches
 | 
			
		||||
also use this module based upon MIB support.
 | 
			
		||||
 | 
			
		||||
@@ -766,6 +804,12 @@ Subclass for Enterasys devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Enterasys> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::ERX
 | 
			
		||||
 | 
			
		||||
Subclass for Juniper ERX switches.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::ERX> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Extreme
 | 
			
		||||
 | 
			
		||||
Subclass for Extreme Networks switches.
 | 
			
		||||
@@ -809,6 +853,12 @@ Original Equipment Manufacturer (OEM) such as the HP ProCurve 9300 and 6300 seri
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::HP9300> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Huawei
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Huawei Layer 3 switches and routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Huawei> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::IBMGbTor
 | 
			
		||||
 | 
			
		||||
SNMP Interface to IBM Rackswitch (formerly Blade Network Technologies)
 | 
			
		||||
@@ -864,12 +914,24 @@ Subclass for Cisco Nexus devices running NX-OS
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Nexus> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::OneAccess
 | 
			
		||||
 | 
			
		||||
Subclass for OneAccess Quidway switches
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::OneAccess> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::PacketFront
 | 
			
		||||
 | 
			
		||||
Subclass for PacketFront DRG series CPE.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::PacketFront> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::PaloAlto
 | 
			
		||||
 | 
			
		||||
Subclass for Palo Alto firewalls.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::PaloAlto> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Passport
 | 
			
		||||
 | 
			
		||||
Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000 series,
 | 
			
		||||
@@ -917,6 +979,18 @@ Alcatel-Lucent SR Class.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Timetra> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::VyOS
 | 
			
		||||
 | 
			
		||||
Subclass for VyOS routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::VyOS> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::VMware
 | 
			
		||||
 | 
			
		||||
Subclass for VMware ESXi hosts.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::VMware> for details.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
@@ -933,19 +1007,37 @@ See documentation in L<SNMP::Info::Layer7> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::APC
 | 
			
		||||
 | 
			
		||||
SNMP Interface to APC UPS devices
 | 
			
		||||
Subclass for APC UPS devices
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::APC> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::Arbor
 | 
			
		||||
 | 
			
		||||
Subclass for Arbor appliances
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::Arbor> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::CiscoIPS
 | 
			
		||||
 | 
			
		||||
Subclass for Cisco IPS devices
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::Cisco IPS> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::Gigamon
 | 
			
		||||
 | 
			
		||||
Subclass for Gigamon devices
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::Gigamon> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::Netscaler
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Citrix Netscaler appliances
 | 
			
		||||
Subclass for Citrix Netscaler appliances
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::Netscaler> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::Neoteris
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Juniper SSL VPN appliances
 | 
			
		||||
Subclass for Juniper SSL VPN appliances
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::Neoteris> for details.
 | 
			
		||||
 | 
			
		||||
@@ -1215,7 +1307,7 @@ sub new {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Connects to device unless open session is provided.
 | 
			
		||||
    $sess = new SNMP::Session(
 | 
			
		||||
    $sess = SNMP::Session->new(
 | 
			
		||||
        'UseEnums' => 1,
 | 
			
		||||
        %sess_args, 'RetryNoSuch' => $new_obj->{nosuch}
 | 
			
		||||
    ) unless defined $sess;
 | 
			
		||||
@@ -1234,16 +1326,13 @@ sub new {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Table function store
 | 
			
		||||
    my $store = {};
 | 
			
		||||
 | 
			
		||||
    # Save Args for later
 | 
			
		||||
    $new_obj->{store}     = $store;
 | 
			
		||||
    $new_obj->{store}     ||= {};
 | 
			
		||||
    $new_obj->{sess}      = $sess;
 | 
			
		||||
    $new_obj->{args}      = \%args;
 | 
			
		||||
    $new_obj->{snmp_ver}  = $args{Version} || 2;
 | 
			
		||||
    $new_obj->{snmp_comm} = $args{Community} || 'public';
 | 
			
		||||
    $new_obj->{snmp_user} = $args{SecName} || 'initial';
 | 
			
		||||
    $new_obj->{snmp_ver}  = $sess->{Version}   || $args{Version}   || 2;
 | 
			
		||||
    $new_obj->{snmp_comm} = $sess->{Community} || $args{Community} || 'public';
 | 
			
		||||
    $new_obj->{snmp_user} = $sess->{SecName}   || $args{SecName}   || 'initial';
 | 
			
		||||
 | 
			
		||||
    return $auto_specific ? $new_obj->specify() : $new_obj;
 | 
			
		||||
}
 | 
			
		||||
@@ -1280,7 +1369,7 @@ sub update {
 | 
			
		||||
    delete $sess_args{BigInt};
 | 
			
		||||
    delete $sess_args{MibDirs};
 | 
			
		||||
 | 
			
		||||
    my $sess = new SNMP::Session(
 | 
			
		||||
    my $sess = SNMP::Session->new(
 | 
			
		||||
        'UseEnums' => 1,
 | 
			
		||||
        %sess_args, 'RetryNoSuch' => $obj->{nosuch}
 | 
			
		||||
    );
 | 
			
		||||
@@ -1315,7 +1404,7 @@ data from a method.
 | 
			
		||||
Run $info->clear_cache() to clear the cache to allow reload of both globals
 | 
			
		||||
and table methods.
 | 
			
		||||
 | 
			
		||||
The cache can be retreved or set using the $info->cache() method. This works
 | 
			
		||||
The cache can be retrieved or set using the $info->cache() method. This works
 | 
			
		||||
together with the C<Offline> option.
 | 
			
		||||
 | 
			
		||||
=head2 Object Scalar Methods
 | 
			
		||||
@@ -1460,9 +1549,6 @@ SNMP::Info::Layer3 subclasses.
 | 
			
		||||
If the device still can be connected to via SNMP::Info, then
 | 
			
		||||
SNMP::Info is returned.
 | 
			
		||||
 | 
			
		||||
See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more details
 | 
			
		||||
about device support, or view C<device_type()> in F<Info.pm>.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
sub device_type {
 | 
			
		||||
@@ -1498,15 +1584,19 @@ sub device_type {
 | 
			
		||||
        42   => 'SNMP::Info::Layer3::Sun',
 | 
			
		||||
        43   => 'SNMP::Info::Layer2::3Com',
 | 
			
		||||
        45   => 'SNMP::Info::Layer2::Baystack',
 | 
			
		||||
        171  => 'SNMP::Info::Layer3::Dell',
 | 
			
		||||
        171  => 'SNMP::Info::Layer3::DLink',
 | 
			
		||||
        244  => 'SNMP::Info::Layer3::Lantronix',
 | 
			
		||||
        311  => 'SNMP::Info::Layer3::Microsoft',
 | 
			
		||||
        664   => 'SNMP::Info::Layer2::Adtran',
 | 
			
		||||
        674  => 'SNMP::Info::Layer3::Dell',
 | 
			
		||||
        1588 => 'SNMP::Info::Layer3::Foundry',
 | 
			
		||||
        1872 => 'SNMP::Info::Layer3::AlteonAD',
 | 
			
		||||
        1916 => 'SNMP::Info::Layer3::Extreme',
 | 
			
		||||
        1991 => 'SNMP::Info::Layer3::Foundry',
 | 
			
		||||
        2011 => 'SNMP::Info::Layer3::Huawei',
 | 
			
		||||
        2021 => 'SNMP::Info::Layer3::NetSNMP',
 | 
			
		||||
        2272 => 'SNMP::Info::Layer3::Passport',
 | 
			
		||||
        2620 => 'SNMP::Info::Layer3::CheckPoint',
 | 
			
		||||
        2636 => 'SNMP::Info::Layer3::Juniper',
 | 
			
		||||
        2925 => 'SNMP::Info::Layer1::Cyclades',
 | 
			
		||||
        3076 => 'SNMP::Info::Layer3::Altiga',
 | 
			
		||||
@@ -1514,24 +1604,33 @@ sub device_type {
 | 
			
		||||
        3375 => 'SNMP::Info::Layer3::F5',
 | 
			
		||||
        3417 => 'SNMP::Info::Layer3::BlueCoatSG',
 | 
			
		||||
        4526 => 'SNMP::Info::Layer2::Netgear',
 | 
			
		||||
        4874 => 'SNMP::Info::Layer3::ERX',
 | 
			
		||||
        5624 => 'SNMP::Info::Layer3::Enterasys',
 | 
			
		||||
        6027 => 'SNMP::Info::Layer3::Force10',
 | 
			
		||||
        6486 => 'SNMP::Info::Layer3::AlcatelLucent',
 | 
			
		||||
        6527 => 'SNMP::Info::Layer3::Timetra',
 | 
			
		||||
        6876 => 'SNMP::Info::Layer3::VMware',
 | 
			
		||||
        8072 => 'SNMP::Info::Layer3::NetSNMP',
 | 
			
		||||
        9303 => 'SNMP::Info::Layer3::PacketFront',
 | 
			
		||||
        10002 => 'SNMP::Info::Layer2::Ubiquiti',
 | 
			
		||||
        10418 => 'SNMP::Info::Layer1::Cyclades',
 | 
			
		||||
        12325 => 'SNMP::Info::Layer3::Pf',
 | 
			
		||||
        12356 => 'SNMP::Info::Layer3::Fortinet',
 | 
			
		||||
        13191 => 'SNMP::Info::Layer3::OneAccess',
 | 
			
		||||
        14179 => 'SNMP::Info::Layer2::Airespace',
 | 
			
		||||
        14525 => 'SNMP::Info::Layer2::Trapeze',
 | 
			
		||||
        14823 => 'SNMP::Info::Layer3::Aruba',
 | 
			
		||||
        14988 => 'SNMP::Info::Layer3::Mikrotik',
 | 
			
		||||
        17163 => 'SNMP::Info::Layer3::Steelhead',
 | 
			
		||||
        25506 => 'SNMP::Info::Layer3::H3C',
 | 
			
		||||
        25461 => 'SNMP::Info::Layer3::PaloAlto',
 | 
			
		||||
        26543 => 'SNMP::Info::Layer3::IBMGbTor',
 | 
			
		||||
        30065 => 'SNMP::Info::Layer3::Arista',
 | 
			
		||||
        35098 => 'SNMP::Info::Layer3::Pica8',
 | 
			
		||||
        41112 => 'SNMP::Info::Layer2::Ubiquiti',
 | 
			
		||||
        4413 => 'SNMP::Info::Layer2::Ubiquiti',
 | 
			
		||||
        30803 => 'SNMP::Info::Layer3::VyOS',
 | 
			
		||||
        40310 => 'SNMP::Info::Layer3::Cumulus',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    my %l2sysoidmap = (
 | 
			
		||||
@@ -1539,12 +1638,15 @@ sub device_type {
 | 
			
		||||
        11    => 'SNMP::Info::Layer2::HP',
 | 
			
		||||
        43    => 'SNMP::Info::Layer2::3Com',
 | 
			
		||||
        45    => 'SNMP::Info::Layer2::Baystack',
 | 
			
		||||
        171   => 'SNMP::Info::Layer3::Dell',
 | 
			
		||||
        171   => 'SNMP::Info::Layer3::DLink',
 | 
			
		||||
        207   => 'SNMP::Info::Layer2::Allied',
 | 
			
		||||
        266   => 'SNMP::Info::Layer2::Nexans',
 | 
			
		||||
        664   => 'SNMP::Info::Layer2::Adtran',
 | 
			
		||||
        674   => 'SNMP::Info::Layer3::Dell',
 | 
			
		||||
        1872  => 'SNMP::Info::Layer3::AlteonAD',
 | 
			
		||||
        1916  => 'SNMP::Info::Layer3::Extreme',
 | 
			
		||||
        1991  => 'SNMP::Info::Layer3::Foundry',
 | 
			
		||||
        2011  => 'SNMP::Info::Layer3::Huawei',
 | 
			
		||||
        2272  => 'SNMP::Info::Layer3::Passport',
 | 
			
		||||
        2925  => 'SNMP::Info::Layer1::Cyclades',
 | 
			
		||||
        3224  => 'SNMP::Info::Layer3::Netscreen',
 | 
			
		||||
@@ -1552,23 +1654,29 @@ sub device_type {
 | 
			
		||||
        4526  => 'SNMP::Info::Layer2::Netgear',
 | 
			
		||||
        5624  => 'SNMP::Info::Layer3::Enterasys',
 | 
			
		||||
        6486  => 'SNMP::Info::Layer3::AlcatelLucent',
 | 
			
		||||
        9303  => 'SNMP::Info::Layer3::PacketFront',
 | 
			
		||||
        10418 => 'SNMP::Info::Layer1::Cyclades',
 | 
			
		||||
        11898 => 'SNMP::Info::Layer2::Orinoco',
 | 
			
		||||
        14179 => 'SNMP::Info::Layer2::Airespace',
 | 
			
		||||
        14525 => 'SNMP::Info::Layer2::Trapeze',
 | 
			
		||||
        14823 => 'SNMP::Info::Layer3::Aruba',
 | 
			
		||||
        17163 => 'SNMP::Info::Layer3::Steelhead',
 | 
			
		||||
        20540 => 'SNMP::Info::Layer2::Sixnet',
 | 
			
		||||
        26543 => 'SNMP::Info::Layer3::IBMGbTor',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    my %l1sysoidmap = (
 | 
			
		||||
        2925  => 'SNMP::Info::Layer1::Cyclades',
 | 
			
		||||
        10418 => 'SNMP::Info::Layer1::Cyclades',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    my %l7sysoidmap = (
 | 
			
		||||
        318   => 'SNMP::Info::Layer7::APC',
 | 
			
		||||
        5951  => 'SNMP::Info::Layer7::Netscaler',
 | 
			
		||||
        9694  => 'SNMP::Info::Layer7::Arbor',
 | 
			
		||||
        14525 => 'SNMP::Info::Layer2::Trapeze',
 | 
			
		||||
        12532 => 'SNMP::Info::Layer7::Neoteris',
 | 
			
		||||
        26866 => 'SNMP::Info::Layer7::Gigamon',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    # Get just the enterprise number for generic mapping
 | 
			
		||||
@@ -1591,6 +1699,7 @@ sub device_type {
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::C3550' if $desc =~ /(C3550|C3560)/;
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::C4000' if $desc =~ /Catalyst 4[05]00/;
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Foundry' if $desc =~ /foundry/i;
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::ERX' if $desc =~ /erx/i;
 | 
			
		||||
 | 
			
		||||
        # Aironet - older non-IOS
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Aironet'
 | 
			
		||||
@@ -1599,6 +1708,9 @@ sub device_type {
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Aironet'
 | 
			
		||||
            if ( $desc =~ /Aironet/ and $desc =~ /\D(AP4800)\D/ );
 | 
			
		||||
 | 
			
		||||
	# Override voice gateway device (VG350) showing up as Aironet
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Cisco' if $desc =~ /VG350/;
 | 
			
		||||
 | 
			
		||||
        # Cat6k with older SUPs (hybrid CatOS/IOS?)
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /(c6sup2|c6sup1)/;
 | 
			
		||||
 | 
			
		||||
@@ -1648,7 +1760,9 @@ sub device_type {
 | 
			
		||||
            =~ /^(BayStack|Ethernet\s+Routing\s+Switch)\s[2345](\d){2,3}/i );
 | 
			
		||||
 | 
			
		||||
        # Nortel Contivity
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Contivity' if $desc =~ /(\bCES\b|\bNVR\sV\d)/;
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Contivity'
 | 
			
		||||
          if $desc =~ /(\bCES\b|\bNVR\sV\d)/
 | 
			
		||||
              and (!defined $id or !defined $l3sysoidmap{$id});
 | 
			
		||||
 | 
			
		||||
        # SonicWALL
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::SonicWALL' if $desc =~ /SonicWALL/i;
 | 
			
		||||
@@ -1666,6 +1780,11 @@ sub device_type {
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::CiscoFWSM'
 | 
			
		||||
            if ( $desc =~ /Cisco Firewall Services Module/i );
 | 
			
		||||
 | 
			
		||||
        #   Cisco Small Business (300 500) series override
 | 
			
		||||
        #   This is for enterprises(1).cisco(9).otherEnterprises(6).ciscosb(1)
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer2::CiscoSB'
 | 
			
		||||
            if ( $soid =~ /^\.?1\.3\.6\.1\.4\.1\.9\.6\.1/ );
 | 
			
		||||
 | 
			
		||||
        # Avaya Secure Router
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Tasman'
 | 
			
		||||
            if ( $desc =~ /^(avaya|nortel)\s+(SR|secure\srouter)\s+\d{4}/i );
 | 
			
		||||
@@ -1890,6 +2009,10 @@ sub device_type {
 | 
			
		||||
            if (
 | 
			
		||||
            $desc =~ /^(Nortel\s)??Wireless\sSecurity\sSwitch\s23[568][012]\b/);
 | 
			
		||||
 | 
			
		||||
        # Cisco IPS, older version which doesn't report layer 3 functionality
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer7::CiscoIPS'
 | 
			
		||||
            if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.9\.1\.1545/i );
 | 
			
		||||
 | 
			
		||||
        # Generic device classification based upon sysObjectID
 | 
			
		||||
        if ( defined($id) and $objtype eq 'SNMP::Info') {
 | 
			
		||||
            if ( defined $l3sysoidmap{$id} ) {
 | 
			
		||||
@@ -2637,7 +2760,7 @@ sub _get_topo_data {
 | 
			
		||||
    my $self     = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
    my $topo_cap = shift;
 | 
			
		||||
    my $method   = shift;
 | 
			
		||||
    my $method   = shift || '';
 | 
			
		||||
 | 
			
		||||
    return unless $method =~ /(ip|if|port|id|platform|cap)/;
 | 
			
		||||
 | 
			
		||||
@@ -2913,7 +3036,7 @@ allows all developers to have visibility into the request.  Please include
 | 
			
		||||
pointers to the applicable platform MIBs.  For development we will need an
 | 
			
		||||
C<snmpwalk> of the device.  There is a tool now included in the SNMP::Info
 | 
			
		||||
distribution to help with this task, although you'll most likely need to
 | 
			
		||||
download the distribution from CPAN as it's included in the "C<t/util>"
 | 
			
		||||
download the distribution from CPAN as it's included in the "C<contrib/util>"
 | 
			
		||||
directory.
 | 
			
		||||
 | 
			
		||||
The utility is named C<make_snmpdata.pl>. Run it with a command line like:
 | 
			
		||||
@@ -2972,7 +3095,9 @@ the SNMP::Info methods.
 | 
			
		||||
    'name'         => 'sysName',
 | 
			
		||||
    'location'     => 'sysLocation',
 | 
			
		||||
    'layers'       => 'sysServices',
 | 
			
		||||
    # IF-MIB
 | 
			
		||||
    'ports'        => 'ifNumber',
 | 
			
		||||
    # IP-MIB
 | 
			
		||||
    'ipforwarding' => 'ipForwarding',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -2990,7 +3115,9 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    # IF-MIB::IfEntry
 | 
			
		||||
    'interfaces' => 'ifIndex',
 | 
			
		||||
    # IF-MIB::IfXEntry
 | 
			
		||||
    'i_name'     => 'ifName',
 | 
			
		||||
 | 
			
		||||
    # IF-MIB::IfEntry
 | 
			
		||||
@@ -3020,13 +3147,13 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
 | 
			
		||||
    # IF-MIB::IfStackTable
 | 
			
		||||
    'i_stack_status'    => 'ifStackStatus',
 | 
			
		||||
 | 
			
		||||
    # IP Address Table
 | 
			
		||||
    # IP::MIB::ipAddrTable (deprecated IPv4 address table)
 | 
			
		||||
    'ip_index'     => 'ipAdEntIfIndex',
 | 
			
		||||
    'ip_table'     => 'ipAdEntAddr',
 | 
			
		||||
    'ip_netmask'   => 'ipAdEntNetMask',
 | 
			
		||||
    'ip_broadcast' => 'ipAdEntBcastAddr',
 | 
			
		||||
 | 
			
		||||
    # ifXTable - Extension Table
 | 
			
		||||
    # IF-MIB::ifXTable - Extension Table
 | 
			
		||||
    'i_speed_high'       => 'ifHighSpeed',
 | 
			
		||||
    'i_pkts_multi_in'    => 'ifInMulticastPkts',
 | 
			
		||||
    'i_pkts_multi_out'   => 'ifOutMulticastPkts',
 | 
			
		||||
@@ -3042,7 +3169,7 @@ ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName.
 | 
			
		||||
    'i_pkts_bcast_out64' => 'ifHCOutBroadcastPkts',
 | 
			
		||||
    'i_alias'            => 'ifAlias',
 | 
			
		||||
 | 
			
		||||
    # IP Routing Table
 | 
			
		||||
    # RFC-1213::ipRoute (deprecated Table IP Routing Table)
 | 
			
		||||
    'ipr_route' => 'ipRouteDest',
 | 
			
		||||
    'ipr_if'    => 'ipRouteIfIndex',
 | 
			
		||||
    'ipr_1'     => 'ipRouteMetric1',
 | 
			
		||||
@@ -3073,7 +3200,13 @@ $info->init() will throw an exception if a MIB does not load.
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
 | 
			
		||||
    # The "main" MIBs are automagically loaded in Net-SNMP now.
 | 
			
		||||
    # Include these here for cases where the Net-SNMP default MIB list has
 | 
			
		||||
    # been overridden during the compliation of the local Net-SNMP library.
 | 
			
		||||
    # These cover the globals and funcs defined in this file.
 | 
			
		||||
    'SNMPv2-MIB'  => 'sysObjectID',
 | 
			
		||||
    'RFC1213-MIB' => 'ipRouteIfIndex',
 | 
			
		||||
    'IP-MIB'      => 'ipAdEntAddr',
 | 
			
		||||
    'IF-MIB'      => 'ifIndex',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
=item %MUNGE
 | 
			
		||||
@@ -3294,6 +3427,7 @@ Makes human friendly speed ratings using %SPEED_MAP
 | 
			
		||||
                '54000000'   => '54 Mbps',
 | 
			
		||||
                '64000000'   => '64 Mbps',
 | 
			
		||||
                '100000000'  => '100 Mbps',
 | 
			
		||||
                '200000000'  => '200 Mbps',
 | 
			
		||||
                '149760000'  => 'ATM on OC-3',
 | 
			
		||||
                '155000000'  => 'OC-3',
 | 
			
		||||
                '155519000'  => 'OC-3',
 | 
			
		||||
@@ -3303,6 +3437,7 @@ Makes human friendly speed ratings using %SPEED_MAP
 | 
			
		||||
                '622000000'  => 'OC-12',
 | 
			
		||||
                '622080000'  => 'OC-12',
 | 
			
		||||
                '1000000000' => '1.0 Gbps',
 | 
			
		||||
                '2000000000' => '2.0 Gbps',
 | 
			
		||||
                '2488000000' => 'OC-48',
 | 
			
		||||
             )
 | 
			
		||||
 | 
			
		||||
@@ -3339,6 +3474,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
 | 
			
		||||
    '54000000'   => '54 Mbps',
 | 
			
		||||
    '64000000'   => '64 Mbps',
 | 
			
		||||
    '100000000'  => '100 Mbps',
 | 
			
		||||
    '200000000'  => '200 Mbps',
 | 
			
		||||
    '149760000'  => 'ATM on OC-3',
 | 
			
		||||
    '155000000'  => 'OC-3',
 | 
			
		||||
    '155519000'  => 'OC-3',
 | 
			
		||||
@@ -3348,6 +3484,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
 | 
			
		||||
    '622000000'  => 'OC-12',
 | 
			
		||||
    '622080000'  => 'OC-12',
 | 
			
		||||
    '1000000000' => '1.0 Gbps',
 | 
			
		||||
    '2000000000' => '2.0 Gbps',
 | 
			
		||||
    '2488000000' => 'OC-48',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -3800,7 +3937,7 @@ sub _global {
 | 
			
		||||
        # Return cached data unless loading
 | 
			
		||||
        # We now store in raw format so munge before returning
 | 
			
		||||
        # unless expecting raw data
 | 
			
		||||
        if ( defined $self->{"_$attr"} && !$load ) {
 | 
			
		||||
        if ( exists $self->{"_$attr"} && !$load ) {
 | 
			
		||||
            my $val = $self->{"_$attr"};
 | 
			
		||||
 | 
			
		||||
            if ( !$raw ) {
 | 
			
		||||
@@ -3880,8 +4017,9 @@ sub _set {
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        $self->error_throw(
 | 
			
		||||
            "SNMP::Info::_set($attr,$val) - Failed. Invalid argument for attr."
 | 
			
		||||
            "SNMP::Info::_set - Failed. Invalid arguments"
 | 
			
		||||
        );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $sess = $self->session();
 | 
			
		||||
@@ -3901,16 +4039,6 @@ sub _set {
 | 
			
		||||
        # Instance is 0 for scalars without a supplied instance
 | 
			
		||||
        $var_list->[1] = $list_iid = defined $list_iid ? $list_iid : '0';
 | 
			
		||||
 | 
			
		||||
        # Check if this method is from a sub or from the tables.
 | 
			
		||||
        if ( $self->can($list_attr) ) {
 | 
			
		||||
            $self->error_throw(
 | 
			
		||||
                "SNMP::Info::_set($list_attr,$list_val) - Failed. $list_attr is generated in a sub(). set_$list_attr sub required."
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            # if sub set_attr() existed, we wouldn't have gotten this far.
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # Lookup oid
 | 
			
		||||
        my $oid = undef;
 | 
			
		||||
        $oid = $list_attr             if SNMP::translateObj($list_attr);
 | 
			
		||||
@@ -4122,8 +4250,6 @@ sub _load_attr {
 | 
			
		||||
        return unless defined $sess;
 | 
			
		||||
 | 
			
		||||
        my $ver    = $self->snmp_ver();
 | 
			
		||||
        my $nosuch = $self->nosuch();
 | 
			
		||||
        my $store  = $self->store();
 | 
			
		||||
 | 
			
		||||
        my $load = $method =~ /^load/;
 | 
			
		||||
        my $raw  = $method =~ /raw$/;
 | 
			
		||||
@@ -4166,7 +4292,7 @@ sub _load_attr {
 | 
			
		||||
            defined $partial ? "($partial)" : '', " : $oid" ,
 | 
			
		||||
            defined $partial ? ".$partial" : '', "\n";
 | 
			
		||||
 | 
			
		||||
        my $var = new SNMP::Varbind( [$qual_leaf, $partial] );
 | 
			
		||||
        my $var = SNMP::Varbind->new( [$qual_leaf, $partial] );
 | 
			
		||||
 | 
			
		||||
        # So devices speaking SNMP v.1 are not supposed to give out
 | 
			
		||||
        # data from SNMP2, but most do.  Net-SNMP, being very precise
 | 
			
		||||
@@ -4359,7 +4485,7 @@ sub snmp_connect_ip {
 | 
			
		||||
    return if ( $ip eq '0.0.0.0' ) or ( $ip =~ /^127\./ );
 | 
			
		||||
 | 
			
		||||
    # Create session object
 | 
			
		||||
    my $snmp_test = new SNMP::Session(
 | 
			
		||||
    my $snmp_test = SNMP::Session->new(
 | 
			
		||||
        'DestHost'  => $ip,
 | 
			
		||||
        'Community' => $comm,
 | 
			
		||||
        'Version'   => $ver
 | 
			
		||||
@@ -4510,6 +4636,11 @@ sub _validate_autoload_method {
 | 
			
		||||
        $leaf_name =~ s/_/-/g;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # skip if offline
 | 
			
		||||
    if ( $self->{Offline} ) {
 | 
			
		||||
        return [1,(exists $self->{store}->{$method} ? 1: 0)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Translate MIB leaf node name to OID
 | 
			
		||||
    my $oid = SNMP::translateObj($leaf_name);
 | 
			
		||||
 | 
			
		||||
@@ -4530,15 +4661,14 @@ sub _validate_autoload_method {
 | 
			
		||||
    # If we were given a fully qualified OID because we don't have the MIB
 | 
			
		||||
    # file, it will translate above but we won't be able to check access so
 | 
			
		||||
    # skip the check and return
 | 
			
		||||
    if ($access) {
 | 
			
		||||
        unless ( ( $method =~ /^set/ && $access =~ /Write|Create/ )
 | 
			
		||||
            || $access =~ /Read|Create/ )
 | 
			
		||||
        {
 | 
			
		||||
    if ($access && ($method =~ /^set/ && $access !~ /Write|Create/)
 | 
			
		||||
        || ($method !~ /^set/ && $access eq 'NoAccess')) {
 | 
			
		||||
 | 
			
		||||
            print
 | 
			
		||||
                "SNMP::Info::_validate_autoload_method($attr : $oid) Not accessable for requested operation.\n"
 | 
			
		||||
                if $self->debug();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # If the parent of the leaf has indexes it is contained within a table
 | 
			
		||||
@@ -4586,6 +4716,8 @@ sub can {
 | 
			
		||||
    # use results of parent can()
 | 
			
		||||
    return $self->SUPER::can($method) if $self->SUPER::can($method);
 | 
			
		||||
 | 
			
		||||
    return if $method eq 'CARP_TRACE';
 | 
			
		||||
 | 
			
		||||
    my $validated = $self->_validate_autoload_method($method);
 | 
			
		||||
    return unless $validated;
 | 
			
		||||
 | 
			
		||||
@@ -4596,21 +4728,27 @@ sub can {
 | 
			
		||||
    my $funcs = $self->funcs();
 | 
			
		||||
 | 
			
		||||
    # We need to resolve funcs with a prefix or suffix
 | 
			
		||||
    my $f_method = $method;
 | 
			
		||||
    $f_method =~ s/^(load|orig)_//;
 | 
			
		||||
    $f_method =~ s/_raw$//;
 | 
			
		||||
    my $base_method = $method;
 | 
			
		||||
    $base_method =~ s/^(load|orig)_//;
 | 
			
		||||
    $base_method =~ s/_raw$//;
 | 
			
		||||
 | 
			
		||||
    no strict 'refs';    ## no critic (ProhibitNoStrict )
 | 
			
		||||
 | 
			
		||||
    # We could add load_/orig_/_raw alternatives to symbol table here on
 | 
			
		||||
    # first call of any type for a global or func since they all use the same
 | 
			
		||||
    # destination code, but they aren't used heavily in main code base so
 | 
			
		||||
    # we’ll just create if/when they are called rather than pollute the
 | 
			
		||||
    # symbol table with entries that never get called.
 | 
			
		||||
 | 
			
		||||
    # Check for set_ ing.
 | 
			
		||||
    if ( $method =~ /^set_/ ) {
 | 
			
		||||
        return *{$AUTOLOAD} = _make_setter( $method, $oid, @_ );
 | 
			
		||||
        return *{$method} = _make_setter( $method, $oid, @_ );
 | 
			
		||||
    }
 | 
			
		||||
    elsif ( defined $funcs->{$f_method} || $table ) {
 | 
			
		||||
        return *{$AUTOLOAD} = _load_attr( $method, $oid, @_ );
 | 
			
		||||
    elsif ( defined $funcs->{$base_method} || $table ) {
 | 
			
		||||
        return *{$method} = _load_attr( $method, $oid, @_ );
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return *{$AUTOLOAD} = _global( $method, $oid );
 | 
			
		||||
        return *{$method} = _global( $method, $oid );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -4650,16 +4788,18 @@ subclass.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
our $AUTOLOAD;
 | 
			
		||||
 | 
			
		||||
sub AUTOLOAD {
 | 
			
		||||
    my $self = shift;
 | 
			
		||||
    my ($sub_name) = $AUTOLOAD =~ /::(\w+)$/;
 | 
			
		||||
 | 
			
		||||
    return if $sub_name =~ /DESTROY$/;
 | 
			
		||||
   return if $sub_name eq 'CARP_TRACE';
 | 
			
		||||
 | 
			
		||||
    # Typos in function calls in SNMP::Info subclasses turn into
 | 
			
		||||
    # AUTOLOAD requests for non-methods.  While this is deprecated,
 | 
			
		||||
    # we'll still get called, so report a less confusing error.
 | 
			
		||||
    if ( ref($self) !~ /^SNMP::Info/ ) {
 | 
			
		||||
    if ( ref($self) !~ /SNMP::Info/ ) {
 | 
			
		||||
 | 
			
		||||
        # croak reports one level too high.  die reports here.
 | 
			
		||||
        # I would really like to get the place that's likely to
 | 
			
		||||
@@ -4682,6 +4822,9 @@ sub AUTOLOAD {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Skip AUTOLOAD()
 | 
			
		||||
sub DESTROY {}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
=head1 COPYRIGHT AND LICENSE
 | 
			
		||||
@@ -33,12 +33,12 @@ use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
 | 
			
		||||
@SNMP::Info::AMAP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::AMAP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS
 | 
			
		||||
    = ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
 | 
			
		||||
@@ -38,7 +38,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
 | 
			
		||||
 | 
			
		||||
@@ -38,9 +38,10 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (); # IF-MIB
 | 
			
		||||
# Load MIB for leafs referenced within class
 | 
			
		||||
%MIBS = ('IF-MIB' => 'ifIndex',);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
@@ -61,7 +62,7 @@ sub agg_ports_ifstack {
 | 
			
		||||
  foreach my $idx ( keys %$ifStack ) {
 | 
			
		||||
      my ( $higher, $lower ) = split /\./, $idx;
 | 
			
		||||
      next if ( $higher == 0 or $lower == 0 );
 | 
			
		||||
      if ( $ifType->{ $higher } eq 'ieee8023adLag' ) {
 | 
			
		||||
      if ( $ifType->{ $higher } eq 'ieee8023adLag'  or $ifType->{ $higher } eq 'propMultiplexor') {
 | 
			
		||||
          $ret->{ $lower } = $higher;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -42,11 +42,12 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress',
 | 
			
		||||
    'Q-BRIDGE-MIB' => 'dot1qPvid',
 | 
			
		||||
    'RSTP-MIB'     => 'dot1dStpPortOperEdgePort',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -104,6 +105,10 @@ $VERSION = '3.27';
 | 
			
		||||
    'stp_p_bridge'   => 'dot1dStpPortDesignatedBridge',
 | 
			
		||||
    'stp_p_port'     => 'dot1dStpPortDesignatedPort',
 | 
			
		||||
 | 
			
		||||
    # Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
 | 
			
		||||
    'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort',
 | 
			
		||||
    'is_edgeport_oper'  => 'dot1dStpPortOperEdgePort',
 | 
			
		||||
 | 
			
		||||
    # Q-BRIDGE-MIB : dot1qPortVlanTable
 | 
			
		||||
    'qb_i_vlan'        => 'dot1qPvid',
 | 
			
		||||
    'qb_i_vlan_type'   => 'dot1qPortAcceptableFrameTypes',
 | 
			
		||||
@@ -716,7 +721,7 @@ tagged ports or the VLAN ID.
 | 
			
		||||
 | 
			
		||||
=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()
 | 
			
		||||
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info;
 | 
			
		||||
use vars
 | 
			
		||||
    qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# Five data structures required by SNMP::Info
 | 
			
		||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
 | 
			
		||||
@@ -58,7 +58,6 @@ $VERSION = '3.27';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    'cdp_index'        => 'cdpCacheIfIndex',
 | 
			
		||||
    'cdp_proto'        => 'cdpCacheAddressType',
 | 
			
		||||
    'cdp_addr'         => 'cdpCacheAddress',
 | 
			
		||||
    'cdp_ver'          => 'cdpCacheVersion',
 | 
			
		||||
@@ -128,11 +127,6 @@ sub hasCDP {
 | 
			
		||||
sub cdp_if {
 | 
			
		||||
    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();
 | 
			
		||||
    unless ( defined $cdp_ip ) {
 | 
			
		||||
        $cdp->error_throw(
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# SNMP::Info::CiscoAgg
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2014 SNMP::Info Developers
 | 
			
		||||
# Copyright (c) 2018 SNMP::Info Developers
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
			
		||||
@@ -52,9 +52,13 @@ $VERSION = '3.27';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS = ();
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ();
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub agg_ports_pagp {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
@@ -147,4 +151,8 @@ automatically.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
 | 
			
		||||
@@ -97,6 +97,10 @@ sub copy_run_tftp {
 | 
			
		||||
        print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
 | 
			
		||||
 | 
			
		||||
        #Check each set, delete created row if any fail
 | 
			
		||||
        unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) {
 | 
			
		||||
            $ciscoconfig->error_throw("Initializing config copy instruction failed");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
 | 
			
		||||
            $ciscoconfig->error_throw("Setting source type failed");
 | 
			
		||||
            unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
 | 
			
		||||
@@ -32,18 +32,20 @@ package SNMP::Info::CiscoPortSecurity;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
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//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
 | 
			
		||||
    'CISCO-PAE-MIB'           => 'ciscoPaeMIB',
 | 
			
		||||
    'IEEE8021-PAE-MIB'        => 'dot1xAuthLastEapolFrameSource',
 | 
			
		||||
    'CISCO-ERR-DISABLE-MIB'   => 'ciscoErrDisableMIB',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -81,30 +83,27 @@ $VERSION = '3.27';
 | 
			
		||||
    # CISCO-PORT-SECURITY-MIB::cpsIfVlanTable
 | 
			
		||||
    'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount',
 | 
			
		||||
    'cps_i_v_mac_max'   => 'cpsIfVlanMaxSecureMacAddr',
 | 
			
		||||
    'cps_i_v'           => 'cpsIfVlanIndex',
 | 
			
		||||
 | 
			
		||||
    # CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable
 | 
			
		||||
    'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus',
 | 
			
		||||
    'cps_i_v_mac_age'    => 'cpsIfVlanSecureMacAddrRemainAge',
 | 
			
		||||
    'cps_i_v_mac_type'   => 'cpsIfVlanSecureMacAddrType',
 | 
			
		||||
    'cps_i_v_vlan'       => 'cpsIfVlanSecureVlanIndex',
 | 
			
		||||
    'cps_i_v_mac'        => 'cpsIfVlanSecureMacAddress',
 | 
			
		||||
 | 
			
		||||
    # CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable
 | 
			
		||||
    'cps_m_status' => 'cpsSecureMacAddrRowStatus',
 | 
			
		||||
    'cps_m_age'    => 'cpsSecureMacAddrRemainingAge',
 | 
			
		||||
    'cps_m_type'   => 'cpsSecureMacAddrType',
 | 
			
		||||
    'cps_m_mac'    => 'cpsSecureMacAddress',
 | 
			
		||||
 | 
			
		||||
    # IEEE8021-PAE-MIB::dot1xPaePortEntry
 | 
			
		||||
    'pae_i_capabilities'            => 'dot1xPaePortCapabilities',
 | 
			
		||||
    'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource',
 | 
			
		||||
 | 
			
		||||
    # CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry
 | 
			
		||||
    'cerr_i_cause' => 'cErrDisableIfStatusCause',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    '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_capabilities'            => \&munge_pae_capabilities,
 | 
			
		||||
);
 | 
			
		||||
@@ -123,13 +122,29 @@ sub munge_pae_capabilities {
 | 
			
		||||
    return join( ' ', @vals );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Define a generic method to show the cause for a port to be err-disabled.
 | 
			
		||||
# Cisco indexes cErrDisableIfStatusCause by {ifindex,vlan}, but for a more
 | 
			
		||||
# generic method, using ifIndex only makes it easier to implement across
 | 
			
		||||
# device classes. Besides, several (most?) err-disable features will disable
 | 
			
		||||
# the whole interface anyway, and not just a vlan on the interface.
 | 
			
		||||
sub i_err_disable_cause {
 | 
			
		||||
    my $cps = shift;
 | 
			
		||||
    my $ret;
 | 
			
		||||
    my $causes = $cps->cerr_i_cause() || {};
 | 
			
		||||
    foreach my $interfacevlan (keys %$causes) {
 | 
			
		||||
        my ($iid, $vid) = split(/\./, $interfacevlan);
 | 
			
		||||
        $ret->{$iid} = $causes->{$interfacevlan};
 | 
			
		||||
    }
 | 
			
		||||
    return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoPortSecurity - SNMP Interface to data from
 | 
			
		||||
F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>
 | 
			
		||||
F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and F<CISCO-ERR-DISABLE-MIB>.
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -153,8 +168,9 @@ Eric Miller
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides
 | 
			
		||||
an interface to the F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>.  These
 | 
			
		||||
MIBs are used across the Catalyst family under CatOS and IOS.
 | 
			
		||||
an interface to the F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and
 | 
			
		||||
F<CISCO-ERR-DISABLE-MIB>. These MIBs are used across the Catalyst
 | 
			
		||||
family under CatOS and IOS.
 | 
			
		||||
 | 
			
		||||
Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
			
		||||
 | 
			
		||||
@@ -172,6 +188,8 @@ None.
 | 
			
		||||
 | 
			
		||||
=item F<IEEE8021-PAE-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-ERR-DISABLE-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
@@ -300,10 +318,6 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanMaxSecureMacAddr>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_i_v()
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanIndex>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable>
 | 
			
		||||
@@ -322,14 +336,6 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanSecureMacAddrType>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_i_v_vlan()
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanSecureVlanIndex>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_i_v_mac()
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanSecureMacAddress>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable>
 | 
			
		||||
@@ -348,10 +354,6 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cpsSecureMacAddrType>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_m_mac()
 | 
			
		||||
 | 
			
		||||
(C<cpsSecureMacAddress>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry>
 | 
			
		||||
@@ -374,6 +376,31 @@ The source MAC address carried in the most recently received EAPOL frame.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry>
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cps->cerr_i_cause()
 | 
			
		||||
 | 
			
		||||
C<cErrDisableIfStatusCause>
 | 
			
		||||
 | 
			
		||||
Indicates the feature/event that caused the {interface, vlan} (or the entire
 | 
			
		||||
interface) to be error-disabled.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 METHODS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item C<i_err_disable_cause>
 | 
			
		||||
 | 
			
		||||
Returns a HASH reference mapping ifIndex to err-disabled cause. The returned
 | 
			
		||||
data is sparse, so if the ifIndex is not present in the return value, the port
 | 
			
		||||
is not err-disabled.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 Data Munging Callback Subroutines
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
 | 
			
		||||
          'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
 | 
			
		||||
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
 | 
			
		||||
 | 
			
		||||
@@ -32,13 +32,14 @@ package SNMP::Info::CiscoStack;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoStack::ISA       = qw/Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStack::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
 | 
			
		||||
 | 
			
		||||
@@ -194,7 +195,7 @@ sub i_duplex_admin {
 | 
			
		||||
        next if ( defined $partial and $iid !~ /^$partial$/ );
 | 
			
		||||
 | 
			
		||||
        # 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';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -42,14 +42,14 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'SNMPv2-MIB'            => 'sysDescr',
 | 
			
		||||
    'CISCO-PROCESS-MIB'     => 'cpmCPUTotal5sec',
 | 
			
		||||
    'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed',
 | 
			
		||||
    'OLD-CISCO-SYSTEM-MIB'  => 'writeMem',
 | 
			
		||||
    'CISCO-PRODUCTS-MIB'    => 'sysName',
 | 
			
		||||
    'CISCO-PRODUCTS-MIB'    => 'ciscoIGS',
 | 
			
		||||
    'ENTITY-MIB'            => 'entPhysicalSoftwareRev',
 | 
			
		||||
    'CISCO-IMAGE-MIB'       => 'ciscoImageString',
 | 
			
		||||
 | 
			
		||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
 | 
			
		||||
@@ -54,12 +54,15 @@ $VERSION = '3.27';
 | 
			
		||||
            'stpx_stp_type'          => 'stpxSpanningTreeType',
 | 
			
		||||
            'stpx_bpduguard_enable'  => 'stpxFastStartBpduGuardEnable',
 | 
			
		||||
            'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
 | 
			
		||||
            'stpx_faststart_default' => 'stpxFastStartGlobalDefaultMode',
 | 
			
		||||
           );
 | 
			
		||||
 | 
			
		||||
%FUNCS   = (
 | 
			
		||||
            %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
            'stpx_rootguard_enabled'      => 'stpxRootGuardConfigEnabled',
 | 
			
		||||
            'stpx_loopguard_enabled'      => 'stpxLoopGuardConfigEnabled',
 | 
			
		||||
            'stpx_faststart_enabled'      => 'stpxFastStartPortEnable',
 | 
			
		||||
            'stpx_faststart_operational'  => 'stpxFastStartPortMode',
 | 
			
		||||
            'stpx_port_bpduguard_mode'    => 'stpxFastStartPortBpduGuardMode',
 | 
			
		||||
            'stpx_port_bpdufilter_mode'   => 'stpxFastStartPortBpduFilterMode',
 | 
			
		||||
            'stpx_smst_root'              => 'stpxSMSTInstanceCISTRegionalRoot',
 | 
			
		||||
@@ -225,6 +228,36 @@ sub i_bpdufilter_enabled {
 | 
			
		||||
    return \%res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_faststart_enabled {
 | 
			
		||||
    my $self    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $faststart_default = $self->stpx_faststart_default();
 | 
			
		||||
    my $bp_index          = $self->bp_index($partial);
 | 
			
		||||
    my $faststart         = $self->stpx_faststart_enabled();
 | 
			
		||||
    my $faststart_oper    = $self->stpx_faststart_operational();
 | 
			
		||||
 | 
			
		||||
    my %res;
 | 
			
		||||
    # stpxFastStartPortEnable is deprecated in favour of stpxFastStartPortMode
 | 
			
		||||
    # see https://github.com/netdisco/netdisco/issues/12
 | 
			
		||||
    foreach my $index ( keys %$faststart, keys %$faststart_oper ){
 | 
			
		||||
        my $mode = $faststart_oper->{$index} || $faststart->{$index};
 | 
			
		||||
        my $iid  = $bp_index->{$index};
 | 
			
		||||
        next unless defined $iid;
 | 
			
		||||
        next unless defined $mode;
 | 
			
		||||
        if ( $mode eq 'default' ){
 | 
			
		||||
            $res{$iid} =  $faststart_default;
 | 
			
		||||
        }else{
 | 
			
		||||
            $res{$iid} = $mode;
 | 
			
		||||
        }
 | 
			
		||||
        $res{$iid} = 'enable'  if $res{$iid} eq 'true';
 | 
			
		||||
        $res{$iid} = 'disable' if $res{$iid} eq 'false';
 | 
			
		||||
        $res{$iid} = 1 if $res{$iid} =~ m/enable/i; # enableForTrunk
 | 
			
		||||
        $res{$iid} = 0 if $res{$iid} eq 'disable';
 | 
			
		||||
    }
 | 
			
		||||
    return \%res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub oct2str {
 | 
			
		||||
    my ($v) = @_;
 | 
			
		||||
@@ -340,6 +373,13 @@ Format is a hash reference with key = C<ifIndex>, value = [1|0]
 | 
			
		||||
 | 
			
		||||
(C<stpxFastStartBpduFilterEnable>)
 | 
			
		||||
 | 
			
		||||
=item $stpx->i_faststart_enabled()
 | 
			
		||||
 | 
			
		||||
Returns 1 or 0 depending on whether FastStart (aka PortFast) is enabled on a
 | 
			
		||||
given port.  Format is a hash reference with key = C<ifIndex>, value = [1|0]
 | 
			
		||||
 | 
			
		||||
(C<stpxFastStartPortEnable> and C<stpxFastStartPortMode>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 MUNGES
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-VTP-MIB'                       => 'vtpVlanName',
 | 
			
		||||
@@ -61,7 +61,6 @@ $VERSION = '3.27';
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
 | 
			
		||||
    # CISCO-VTP-MIB::managementDomainTable
 | 
			
		||||
    'vtp_d_index'     => 'managementDomainIndex',
 | 
			
		||||
    'vtp_d_name'      => 'managementDomainName',
 | 
			
		||||
    'vtp_d_mode'      => 'managementDomainLocalMode',
 | 
			
		||||
    'vtp_d_rev'       => 'managementDomainConfigRevNumber',
 | 
			
		||||
@@ -780,10 +779,6 @@ Each bit represents a VLAN.  This is 3072 through 4095
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $vtp->vtp_d_index()
 | 
			
		||||
 | 
			
		||||
(C<managementDomainIndex>)
 | 
			
		||||
 | 
			
		||||
=item $vtp->vtp_d_name()
 | 
			
		||||
 | 
			
		||||
(C<managementDomainName>)
 | 
			
		||||
@@ -34,12 +34,12 @@ use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
 | 
			
		||||
@SNMP::Info::EDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::EDP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex',
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
 | 
			
		||||
 | 
			
		||||
@@ -109,6 +109,57 @@ sub 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;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
@@ -173,6 +224,23 @@ none.
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
 | 
			
		||||
 | 
			
		||||
@@ -68,7 +68,6 @@ $VERSION = '3.27';
 | 
			
		||||
    'el_xmit_defer'      => 'dot3StatsDeferredTransmissions',
 | 
			
		||||
 | 
			
		||||
    # Ethernet-like Collision Statistics Group
 | 
			
		||||
    'el_coll_count' => 'dot3CollCount',
 | 
			
		||||
    'el_coll_freq'  => 'dot3CollFrequencies'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
 | 
			
		||||
 | 
			
		||||
@@ -50,11 +50,9 @@ $VERSION = '3.27';
 | 
			
		||||
    'fdp_run'      => 'snFdpGlobalRun',
 | 
			
		||||
    'fdp_interval' => 'snFdpGlobalMessageInterval',
 | 
			
		||||
    'fdp_holdtime' => 'snFdpGlobalHoldTime',
 | 
			
		||||
    'fdp_id'       => 'snFdpGlobalDeviceId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    'fdp_index'        => 'snFdpCacheIfIndex',
 | 
			
		||||
    'fdp_proto'        => 'snFdpCacheAddressType',
 | 
			
		||||
    'fdp_ip'           => 'snFdpCacheAddress',
 | 
			
		||||
    'fdp_ver'          => 'snFdpCacheVersion',
 | 
			
		||||
@@ -62,9 +60,7 @@ $VERSION = '3.27';
 | 
			
		||||
    'fdp_port'         => 'snFdpCacheDevicePort',
 | 
			
		||||
    'fdp_platform'     => 'snFdpCachePlatform',
 | 
			
		||||
    'fdp_capabilities' => 'snFdpCacheCapabilities',
 | 
			
		||||
    'fdp_domain'       => 'snFdpCacheVTPMgmtDomain',
 | 
			
		||||
    'fdp_vlan'         => 'snFdpCacheNativeVLAN',
 | 
			
		||||
    'fdp_duplex'       => 'snFdpCacheDuplex',
 | 
			
		||||
    'fdp_cache_type'   => 'snFdpCacheVendorId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
@@ -84,9 +80,7 @@ sub fdp_run {
 | 
			
		||||
sub hasFDP {
 | 
			
		||||
    my $fdp = shift;
 | 
			
		||||
 | 
			
		||||
    my $ver = $fdp->{_version};
 | 
			
		||||
 | 
			
		||||
    #my $ver = $fdp->fdp_ver;
 | 
			
		||||
    my $ver = $fdp->snmp_ver();
 | 
			
		||||
 | 
			
		||||
    # SNMP v1 clients dont have the globals
 | 
			
		||||
    if ( defined $ver and $ver == 1 ) {
 | 
			
		||||
@@ -103,11 +97,6 @@ sub hasFDP {
 | 
			
		||||
sub fdp_if {
 | 
			
		||||
    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();
 | 
			
		||||
    unless ( defined $fdp_ip ) {
 | 
			
		||||
        $fdp->error_throw(
 | 
			
		||||
@@ -231,15 +220,6 @@ Time in seconds that FDP messages are kept.
 | 
			
		||||
 | 
			
		||||
(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
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
@@ -323,19 +303,6 @@ Thanks to Martin Lorensen for a pointer to this information.
 | 
			
		||||
 | 
			
		||||
(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()
 | 
			
		||||
 | 
			
		||||
Returns remote device id string
 | 
			
		||||
@@ -346,17 +313,9 @@ Returns remote device id string
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
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_if
 | 
			
		||||
@@ -369,18 +328,6 @@ truncate the last number off of it :
 | 
			
		||||
 | 
			
		||||
  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()
 | 
			
		||||
 | 
			
		||||
Returns remote IP address
 | 
			
		||||
@@ -411,11 +358,11 @@ Returns remote hardware version
 | 
			
		||||
 | 
			
		||||
(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
 | 
			
		||||
 | 
			
		||||
@@ -32,13 +32,14 @@ package SNMP::Info::IEEE802dot11;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
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//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
 | 
			
		||||
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# SNMP::Info::IEEE802dot3ad
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2014 SNMP::Info Developers
 | 
			
		||||
# Copyright (c) 2018 SNMP::Info Developers
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::Aggregate;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  %SNMP::Info::Aggregate::MIBS,
 | 
			
		||||
@@ -52,28 +52,29 @@ $VERSION = '3.27';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS = ();
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
  'ad_lag_ports'    => 'dot3adAggPortListPorts',
 | 
			
		||||
 );
 | 
			
		||||
 | 
			
		||||
%MUNGE = ();
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
  'ad_lag_ports' => \&SNMP::Info::munge_port_list,
 | 
			
		||||
 );
 | 
			
		||||
 | 
			
		||||
sub agg_ports_lag {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
 | 
			
		||||
  # TODO: implement partial
 | 
			
		||||
  my $masters = $dev->dot3adAggActorOperKey;
 | 
			
		||||
  my $slaves  = $dev->dot3adAggPortActorOperKey;
 | 
			
		||||
  my $ports  = $dev->ad_lag_ports;
 | 
			
		||||
 | 
			
		||||
  return {} unless
 | 
			
		||||
    ref {} eq ref $masters and scalar keys %$masters
 | 
			
		||||
    and ref {} eq ref $slaves and scalar keys %$slaves;
 | 
			
		||||
  return {} unless ref {} eq ref $ports and scalar keys %$ports;
 | 
			
		||||
 | 
			
		||||
  my $ret = {};
 | 
			
		||||
  foreach my $s (keys %$slaves) {
 | 
			
		||||
      next if $slaves->{$s} == 0;
 | 
			
		||||
      foreach my $m (keys %$masters) {
 | 
			
		||||
          next unless $masters->{$m} == $slaves->{$s};
 | 
			
		||||
          $ret->{$s} = $m;
 | 
			
		||||
          last;
 | 
			
		||||
  foreach my $m ( keys %$ports ) {
 | 
			
		||||
    my $idx = $m;
 | 
			
		||||
    my $portlist = $ports->{$m};
 | 
			
		||||
    next unless $portlist;
 | 
			
		||||
    for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
 | 
			
		||||
      $ret->{$i+1} = $idx if ( @$portlist[$i] );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -44,7 +44,7 @@ use constant {
 | 
			
		||||
    IPV6MIB => 3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -67,7 +67,7 @@ $VERSION = '3.27';
 | 
			
		||||
 | 
			
		||||
    'ip_n2p_phys_state' => 'ipNetToPhysicalState',          # IP-MIB
 | 
			
		||||
    'c_inet_phys_state' => 'cInetNetToMediaState',          # CISCO-IETF-IP-MIB
 | 
			
		||||
    'i6_n2p_phys_state' => 'ipv6NetToMediaState',           # IPV6-MIB
 | 
			
		||||
    'i6_n2p_phys_state' => 'ipv6IfNetToMediaState',         # IPV6-MIB
 | 
			
		||||
 | 
			
		||||
    'ip_pfx_origin'     => 'ipAddressPrefixOrigin',         # IP-MIB
 | 
			
		||||
    'c_pfx_origin'      => 'cIpAddressPfxOrigin',           # CISCO-IETF-IP-MIB 
 | 
			
		||||
@@ -75,12 +75,16 @@ $VERSION = '3.27';
 | 
			
		||||
    'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB
 | 
			
		||||
    'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB 
 | 
			
		||||
 | 
			
		||||
    'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIBw
 | 
			
		||||
    # Commented out are not-accessible according to MIB
 | 
			
		||||
    #'ip_addr6_pfxlen'   => 'ipAddressPrefixLength',        # IP-MIB
 | 
			
		||||
    #'c_addr6_pfxlen'    => 'cIpAddressPfxLength',          # CISCO-IETF-IP-MIB
 | 
			
		||||
    'i6_addr_pfxlen'    => 'ipv6AddrPfxLength',             # IPV6-MIB
 | 
			
		||||
 | 
			
		||||
    'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIB
 | 
			
		||||
    'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB 
 | 
			
		||||
 | 
			
		||||
    'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB
 | 
			
		||||
    'c_addr6_type'      => 'cIpAddressType',                # CISCO-IETF-IP-MIB
 | 
			
		||||
    
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
@@ -142,6 +146,12 @@ sub ipv6_n2p_addr {
 | 
			
		||||
                    # so what we've collected in that variable is actually the first byte of the address.
 | 
			
		||||
                    $v6_packed = pack('C', $addrsize) . $v6_packed;
 | 
			
		||||
                }
 | 
			
		||||
                if (length($v6_packed) == 17) {
 | 
			
		||||
                    # Workaround for IPV6-MIB on Windows 2012: if the address is one byte too long, the SNMP agent probably has an incorrect
 | 
			
		||||
                    # implementation where a length field precedes the actual IPv6 address.
 | 
			
		||||
                    # In that case, the first character should be chr(16), ie 0x10; strip it if that's the case.
 | 
			
		||||
                    $v6_packed =~ s/^\x10//;
 | 
			
		||||
                }
 | 
			
		||||
                if (length($v6_packed) == 16) {
 | 
			
		||||
                    $v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
 | 
			
		||||
                    $return->{$row} = $v6addr;
 | 
			
		||||
@@ -307,7 +317,9 @@ sub ipv6_addr_prefix {
 | 
			
		||||
    foreach my $row (keys %$ipv6_addr_prefix){
 | 
			
		||||
        if ($row =~ /^(\d+)\.[\d\.]+$/) {
 | 
			
		||||
            my $type = $1;
 | 
			
		||||
            if ($type == 2) { # IPv6
 | 
			
		||||
	    if (($type == 2) or ($type == 4)) { # IPv6
 | 
			
		||||
		# Remove interface specific part from vrf interfaces
 | 
			
		||||
		if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
 | 
			
		||||
		# Remove the OID part from the value
 | 
			
		||||
		my $val = $ipv6_addr_prefix->{$row};
 | 
			
		||||
		if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
 | 
			
		||||
@@ -321,9 +333,60 @@ sub ipv6_addr_prefix {
 | 
			
		||||
    return $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ipv6_addr_prefixlength {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return;
 | 
			
		||||
    my $ipv6_addr_prefix = &_test_methods( $info, {
 | 
			
		||||
        ip_addr6_pfx  => IPMIB,
 | 
			
		||||
        c_addr6_pfx   => CISCO,
 | 
			
		||||
    });
 | 
			
		||||
    return unless defined $ipv6_addr_prefix;
 | 
			
		||||
    foreach my $row (keys %$ipv6_addr_prefix) {
 | 
			
		||||
        if ($row =~ /^(\d+)\.[\d\.]+$/) {
 | 
			
		||||
            my $type = $1;
 | 
			
		||||
            if (($type == 2) or ($type == 4)) { # IPv6
 | 
			
		||||
                # Remove interface specific part from vrf interfaces
 | 
			
		||||
                if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
 | 
			
		||||
                # Remove the OID part from the value
 | 
			
		||||
                my $val = $ipv6_addr_prefix->{$row};
 | 
			
		||||
                if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) {
 | 
			
		||||
                    $val = $2;
 | 
			
		||||
                    $return->{$row} = $val;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
 | 
			
		||||
    return $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ipv6_addr {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return;
 | 
			
		||||
    my $indexes = $info->ipv6_index();
 | 
			
		||||
    foreach my $row (keys %$indexes) {
 | 
			
		||||
        my @parts = split(/\./, $row);
 | 
			
		||||
        my $is_valid = 0;
 | 
			
		||||
        if (scalar @parts == 18) {
 | 
			
		||||
            my $addrtype = shift @parts;
 | 
			
		||||
            $is_valid = 1;
 | 
			
		||||
        } elsif (scalar @parts == 17) {
 | 
			
		||||
            $is_valid = 1;
 | 
			
		||||
        }
 | 
			
		||||
        my $addrsize = shift @parts; # First element now is addrsize, should be 16
 | 
			
		||||
        if ($is_valid && $addrsize == 16) {
 | 
			
		||||
            $return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts)));
 | 
			
		||||
        } else {
 | 
			
		||||
            warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub _method_used {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return = 'none of the MIBs';
 | 
			
		||||
    # FIXME ugh! a global. makes order of calls important for debug.
 | 
			
		||||
    if (defined $info::METHOD) {
 | 
			
		||||
        if ($info::METHOD eq IPMIB) {
 | 
			
		||||
            $return = 'IP-MIB';
 | 
			
		||||
@@ -343,6 +406,7 @@ sub _test_methods {
 | 
			
		||||
    foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
 | 
			
		||||
        $return = $info->$method || {};
 | 
			
		||||
        if (scalar keys %$return) {
 | 
			
		||||
            # FIXME ugh! a global. makes order of calls important for debug.
 | 
			
		||||
            $info::METHOD = $test->{$method};
 | 
			
		||||
            last;
 | 
			
		||||
        }
 | 
			
		||||
@@ -459,6 +523,14 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
 | 
			
		||||
 | 
			
		||||
Maps IPv6 addresses with their prefixes
 | 
			
		||||
 | 
			
		||||
=item $info->ipv6_addr_prefixlength()
 | 
			
		||||
 | 
			
		||||
Maps IPv6 addresses with their prefix length
 | 
			
		||||
 | 
			
		||||
=item $info->ipv6_addr()
 | 
			
		||||
 | 
			
		||||
Maps a table instance to an IPv6 address
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2  Internet Address Translation Table
 | 
			
		||||
@@ -39,10 +39,11 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'LLDP-MIB'          => 'lldpLocSysCapEnabled',
 | 
			
		||||
    'LLDP-EXT-MED-MIB'  => 'lldpXMedMIB',
 | 
			
		||||
    'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
 | 
			
		||||
    'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
 | 
			
		||||
);
 | 
			
		||||
@@ -69,6 +70,18 @@ $VERSION = '3.27';
 | 
			
		||||
    'lldp_rem_sys_cap'  => 'lldpRemSysCapEnabled',
 | 
			
		||||
    'lldp_rem_cap_spt'  => 'lldpRemSysCapSupported',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpXMedRemInventoryTable
 | 
			
		||||
    'lldp_rem_hw_rev' => 'lldpXMedRemHardwareRev',
 | 
			
		||||
    'lldp_rem_fw_rev' => 'lldpXMedRemFirmwareRev',
 | 
			
		||||
    'lldp_rem_sw_rev' => 'lldpXMedRemSoftwareRev',
 | 
			
		||||
    'lldp_rem_serial' => 'lldpXMedRemSerialNum',
 | 
			
		||||
    'lldp_rem_vendor' => 'lldpXMedRemMfgName',
 | 
			
		||||
    'lldp_rem_model'  => 'lldpXMedRemModelName',
 | 
			
		||||
    'lldp_rem_asset'  => 'lldpXMedRemAssetID',
 | 
			
		||||
 | 
			
		||||
    'lldp_rem_media_cap'     => 'lldpXMedRemCapCurrent',
 | 
			
		||||
    'lldp_rem_media_cap_spt' => 'lldpXMedRemCapSupported',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpRemManAddrTable
 | 
			
		||||
    'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
 | 
			
		||||
);
 | 
			
		||||
@@ -82,6 +95,17 @@ $VERSION = '3.27';
 | 
			
		||||
    'lldp_sys_cap'       => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_cap_spt'   => \&SNMP::Info::munge_bits,
 | 
			
		||||
 | 
			
		||||
    'lldp_rem_hw_rev' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_fw_rev' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_sw_rev' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_serial' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_vendor' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_model'  => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_asset'  => \&SNMP::Info::munge_null,
 | 
			
		||||
 | 
			
		||||
    'lldp_rem_media_cap'     => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_media_cap_spt' => \&SNMP::Info::munge_bits,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub hasLLDP {
 | 
			
		||||
@@ -149,6 +173,38 @@ sub lldp_ip {
 | 
			
		||||
    return \%lldp_ip;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_ipv6 {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %lldp_ipv6;
 | 
			
		||||
    foreach my $key ( keys %$rman_addr ) {
 | 
			
		||||
        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next unless $proto == 2;
 | 
			
		||||
        $lldp_ipv6{$index} = $addr;
 | 
			
		||||
    }
 | 
			
		||||
    return \%lldp_ipv6;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_mac {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %lldp_ipv6;
 | 
			
		||||
    foreach my $key ( keys %$rman_addr ) {
 | 
			
		||||
        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next unless $proto == 6;
 | 
			
		||||
        $lldp_ipv6{$index} = $addr;
 | 
			
		||||
    }
 | 
			
		||||
    return \%lldp_ipv6;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_addr {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -291,6 +347,39 @@ sub lldp_cap {
 | 
			
		||||
    return \%lldp_cap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_media_cap {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $lldp_caps = $lldp->lldp_rem_media_cap_spt($partial) || {};
 | 
			
		||||
 | 
			
		||||
    # Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
 | 
			
		||||
    # be able to enumerate for us, so we have to get it from the MIB
 | 
			
		||||
    # and enumerate ourselves
 | 
			
		||||
    my $oid = SNMP::translateObj( 'lldpXMedRemCapCurrent', 0, 1 ) || '';
 | 
			
		||||
    my $enums = (
 | 
			
		||||
        ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
 | 
			
		||||
        ? $SNMP::MIB{$oid}{'enums'}
 | 
			
		||||
        : {}
 | 
			
		||||
    );
 | 
			
		||||
    my %r_enums = reverse %$enums;
 | 
			
		||||
 | 
			
		||||
    my %lldp_cap;
 | 
			
		||||
    foreach my $key ( keys %$lldp_caps ) {
 | 
			
		||||
        my $cap_bits = $lldp_caps->{$key};
 | 
			
		||||
        next unless $cap_bits;
 | 
			
		||||
 | 
			
		||||
        my $count = 0;
 | 
			
		||||
        foreach my $bit ( split //, $cap_bits ) {
 | 
			
		||||
            if ($bit) {
 | 
			
		||||
                push( @{ $lldp_cap{$key} }, $r_enums{$count} );
 | 
			
		||||
            }
 | 
			
		||||
            $count++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return \%lldp_cap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sub root_ip {
 | 
			
		||||
#    my $lldp = shift;
 | 
			
		||||
#
 | 
			
		||||
@@ -323,13 +412,19 @@ sub _lldp_addr_index {
 | 
			
		||||
        return ( $index, $proto, join( '.', @oids ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # IPv6
 | 
			
		||||
    elsif ( $proto == 2 ) {
 | 
			
		||||
        return ( $index, $proto,
 | 
			
		||||
            join(':', unpack('(H4)*', pack('C*', @oids)) ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # MAC
 | 
			
		||||
    elsif ( $proto == 6 ) {
 | 
			
		||||
        return ( $index, $proto,
 | 
			
		||||
            join( ':', map { sprintf "%02x", $_ } @oids ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # TODO - Need to handle other protocols, i.e. IPv6
 | 
			
		||||
    # TODO - Other protocols may be used as well; implement when needed?
 | 
			
		||||
    else {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -397,6 +492,8 @@ None.
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-EXT-MED-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-EXT-DOT1-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-EXT-DOT3-MIB>
 | 
			
		||||
@@ -495,10 +592,24 @@ if unable defaults to (C<lldpRemLocalPortNum>).
 | 
			
		||||
Returns remote IPv4 address.  Returns for all other address types, use
 | 
			
		||||
lldp_addr if you want any return address type.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_ipv6()
 | 
			
		||||
 | 
			
		||||
Returns remote IPv6 address, if known.  Returns for all other address types,
 | 
			
		||||
use lldp_addr if you don't care about return address type.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_mac()
 | 
			
		||||
 | 
			
		||||
Returns remote (management) MAC address, if known.  Returns for all other 
 | 
			
		||||
address types, use lldp_addr if you don't care about return address type.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_addr()
 | 
			
		||||
 | 
			
		||||
Returns remote address.  Type may be any IANA Address Family Number.
 | 
			
		||||
Currently only returns IPv4 or MAC addresses.
 | 
			
		||||
Currently only returns IPv4, IPv6 or MAC addresses. If the remote device
 | 
			
		||||
returns more than one address type, this method will give only one. Which one
 | 
			
		||||
is returned is decided by chance, phase of the moon and Perl hash ordering.
 | 
			
		||||
 | 
			
		||||
Use lldp_mac, lldp_ip or lldp_ipv6 if you want a specific address type.
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_port()
 | 
			
		||||
 | 
			
		||||
@@ -515,6 +626,12 @@ Returns hash of arrays with each array containing the system capabilities
 | 
			
		||||
supported by the remote system.  Possible elements in the array are
 | 
			
		||||
enumerated from C<LldpSystemCapabilitiesMap>.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_media_cap() 
 | 
			
		||||
 | 
			
		||||
Returns hash of arrays with each array containing the media capabilities
 | 
			
		||||
supported by the remote system.  Possible elements in the array are
 | 
			
		||||
enumerated from C<LldpXMedCapabilities>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 LLDP Remote Table (C<lldpRemTable>)
 | 
			
		||||
@@ -576,6 +693,65 @@ Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpRemSysDesc>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_hw_rev()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the hardware revision of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemHardwareRev>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_fw_rev()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the firmware revision of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemHardwareRev>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_sw_rev()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the software revision of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemSoftwareRev>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_serial()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the serial number of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemSerialNum>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_vendor()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the manufacturer of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemMfgName>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_asset()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the asset number of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemAssetID>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_model()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the model of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned. 
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemModelName>)
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_rem_media_cap_spt() 
 | 
			
		||||
 | 
			
		||||
Returns which media capabilities are supported on the remote system. Results
 | 
			
		||||
are munged into an ascii binary string, LSB.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_rem_media_cap() 
 | 
			
		||||
 | 
			
		||||
Returns which media capabilities are enabled on the remote system. Results
 | 
			
		||||
are munged into an ascii binary string, LSB.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_rem_sys_cap() 
 | 
			
		||||
 | 
			
		||||
Returns which system capabilities are enabled on the remote system.  Results
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
 | 
			
		||||
@@ -71,6 +71,7 @@ sub os_ver {
 | 
			
		||||
    if ( $descr =~ m/version (\d+\.\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
@@ -78,7 +79,7 @@ sub model {
 | 
			
		||||
 | 
			
		||||
    my $desc = $allied->description();
 | 
			
		||||
 | 
			
		||||
    if ( $desc =~ /(AT-\d{4}\S{1}?)/ ) {
 | 
			
		||||
    if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
 | 
			
		||||
@@ -84,6 +84,7 @@ sub os_ver {
 | 
			
		||||
    if ( $descr =~ /software v(\d+\.\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
@@ -94,7 +95,7 @@ sub model {
 | 
			
		||||
    my $asante = shift;
 | 
			
		||||
 | 
			
		||||
    my $id    = $asante->id();
 | 
			
		||||
    my $model = &SNMP::translateObj($id);
 | 
			
		||||
    my $model = SNMP::translateObj($id);
 | 
			
		||||
 | 
			
		||||
    return $model;
 | 
			
		||||
}
 | 
			
		||||
@@ -108,8 +109,8 @@ sub i_up {
 | 
			
		||||
    my $i_up = {};
 | 
			
		||||
    foreach my $port ( keys %$asante_up ) {
 | 
			
		||||
        my $up = $asante_up->{$port};
 | 
			
		||||
        $i_up->{$port} = 'down' if $up =~ /on/;
 | 
			
		||||
        $i_up->{$port} = 'up'   if $up =~ /off/;
 | 
			
		||||
        $i_up->{$port} = 'down' if $up =~ /off/;
 | 
			
		||||
        $i_up->{$port} = 'up'   if $up =~ /on/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $i_up;
 | 
			
		||||
@@ -149,7 +150,7 @@ sub i_name {
 | 
			
		||||
    my $asante  = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_name = $asante->orig_i_descr($partial) || {};
 | 
			
		||||
    my $i_name = $asante->orig_i_description($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %i_name;
 | 
			
		||||
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
# SNMP::Info::Layer1::Cyclades
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# Copyright (c) 2018 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -39,38 +39,105 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer1::MIBS,
 | 
			
		||||
    'CYCLADES-ACS-SYS-MIB'    => 'cyACSversion',
 | 
			
		||||
    'CYCLADES-ACS-CONF-MIB' => 'cyEthIPaddr',
 | 
			
		||||
    'CYCLADES-ACS-INFO-MIB' => 'cyISPortTty',
 | 
			
		||||
    'CYCLADES-ACS5K-SYS-MIB'  => 'cyACS5Kversion',
 | 
			
		||||
    'CYCLADES-ACS-CONF-MIB'   => 'cyACSConf',
 | 
			
		||||
    'CYCLADES-ACS5K-CONF-MIB' => 'cyACS5KConf',
 | 
			
		||||
    'CYCLADES-ACS-INFO-MIB'   => 'cyACSInfo',
 | 
			
		||||
    'CYCLADES-ACS5K-INFO-MIB' => 'cyACS5KInfo',
 | 
			
		||||
    'ACS-MIB'                 => 'acs6016',
 | 
			
		||||
    'ACS8000-MIB'             => 'acs8048',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-SYS-MIB
 | 
			
		||||
    %SNMP::Info::Layer1::GLOBALS,
 | 
			
		||||
    'os_ver'     => 'cyACSversion',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-SYS-MIB
 | 
			
		||||
    'cy_os_ver'     => 'cyACSversion',
 | 
			
		||||
    'cy_model'      => 'cyACSpname',
 | 
			
		||||
    'serial'     => 'cyACSDevId',
 | 
			
		||||
    'root_ip'    => 'cyEthIPaddr',
 | 
			
		||||
    'ps1_status' => 'cyACSPw1',
 | 
			
		||||
    'ps2_status' => 'cyACSPw2',
 | 
			
		||||
    'cy_serial'     => 'cyACSDevId',
 | 
			
		||||
    'cy_ps1_status' => 'cyACSPw1',
 | 
			
		||||
    'cy_ps2_status' => 'cyACSPw2',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-CONF-MIB
 | 
			
		||||
    'cy_root_ip' => 'CYCLADES_ACS_CONF_MIB__cyEthIPaddr',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-SYS-MIB
 | 
			
		||||
    'cy5k_os_ver'     => 'cyACS5Kversion',
 | 
			
		||||
    'cy5k_model'      => 'cyACS5Kpname',
 | 
			
		||||
    'cy5k_serial'     => 'cyACS5KDevId',
 | 
			
		||||
    'cy5k_ps1_status' => 'cyACS5KPw1',
 | 
			
		||||
    'cy5k_ps2_status' => 'cyACS5KPw2',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-CONF-MIB
 | 
			
		||||
    'cy5k_root_ip'   => 'CYCLADES_ACS5K_CONF_MIB__cyEthIPaddr',
 | 
			
		||||
 | 
			
		||||
    # ACS-MIB
 | 
			
		||||
    'acs_os_ver'     => 'ACS_MIB__acsFirmwareVersion',
 | 
			
		||||
    'acs_model'      => 'ACS_MIB__acsProductModel',
 | 
			
		||||
    'acs_serial'     => 'ACS_MIB__acsSerialNumber',
 | 
			
		||||
    'acs_ps1_status' => 'ACS_MIB__acsPowerSupplyStatePw1',
 | 
			
		||||
    'acs_ps2_status' => 'ACS_MIB__acsPowerSupplyStatePw2',
 | 
			
		||||
 | 
			
		||||
    # ACS8000-MIB
 | 
			
		||||
    'acs8k_os_ver'     => 'ACS8000_MIB__acsFirmwareVersion',
 | 
			
		||||
    'acs8k_model'      => 'ACS8000_MIB__acsProductModel',
 | 
			
		||||
    'acs8k_serial'     => 'ACS8000_MIB__acsSerialNumber',
 | 
			
		||||
    'acs8k_ps1_status' => 'ACS8000_MIB__acsPowerSupplyStatePw1',
 | 
			
		||||
    'acs8k_ps2_status' => 'ACS8000_MIB__acsPowerSupplyStatePw2',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer1::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
 | 
			
		||||
    'cy_port_tty'   => 'cyISPortTty',
 | 
			
		||||
    'cy_port_name'  => 'cyISPortName',
 | 
			
		||||
    'cy_port_speed' => 'cyISPortSpeed',
 | 
			
		||||
    'cy_port_cd'    => 'cyISPortSigCD',
 | 
			
		||||
    'cy_port_tty'   => 'CYCLADES_ACS_INFO_MIB__cyISPortTty',
 | 
			
		||||
    'cy_port_name'  => 'CYCLADES_ACS_INFO_MIB__cyISPortName',
 | 
			
		||||
    'cy_port_speed' => 'CYCLADES_ACS_INFO_MIB__cyISPortSpeed',
 | 
			
		||||
    'cy_port_cd'    => 'CYCLADES_ACS_INFO_MIB__cyISPortSigCD',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-CONF-MIB::cySerialPortTable
 | 
			
		||||
    'cy_port_socket' => 'cySPortSocketPort',
 | 
			
		||||
    'cy_port_socket' => 'CYCLADES_ACS_CONF_MIB__cySPortSocketPort',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-INFO-MIB::cyInfoSerialTable
 | 
			
		||||
    'cy5k_port_tty'   => 'CYCLADES_ACS5K_INFO_MIB__cyISPortTty',
 | 
			
		||||
    'cy5k_port_name'  => 'CYCLADES_ACS5K_INFO_MIB__cyISPortName',
 | 
			
		||||
    'cy5k_port_speed' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSpeed',
 | 
			
		||||
    'cy5k_port_cd'    => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSigCD',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-CONF-MIB::cySerialPortTable
 | 
			
		||||
    'cy5k_port_socket' => 'CYCLADES_ACS5K_CONF_MIB__cySPortSocketPort',
 | 
			
		||||
 | 
			
		||||
    # ACS-MIB::acsSerialPortTable
 | 
			
		||||
    'acs_port_tty'   => 'ACS_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
    'acs_port_name'  => 'ACS_MIB__acsSerialPortTableName',
 | 
			
		||||
    'acs_port_speed' => 'ACS_MIB__acsSerialPortTableComSpeed',
 | 
			
		||||
    'acs_port_cd'    => 'ACS_MIB__acsSerialPortTableSignalStateDCD',
 | 
			
		||||
 | 
			
		||||
    # Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
 | 
			
		||||
    # Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
 | 
			
		||||
    # to be unique so that we can differentiate between the index in the
 | 
			
		||||
    # acsSerialPortTable from ifIndex which are both integers
 | 
			
		||||
    # ACS-MIB::acsSerialPortTableEntry
 | 
			
		||||
    'acs_port_socket' => 'ACS_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
 | 
			
		||||
    # ACS8000-MIB::acsSerialPortTable
 | 
			
		||||
    'acs8k_port_tty'   => 'ACS8000_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
    'acs8k_port_name'  => 'ACS8000_MIB__acsSerialPortTableName',
 | 
			
		||||
    'acs8k_port_speed' => 'ACS8000_MIB__acsSerialPortTableComSpeed',
 | 
			
		||||
    'acs8k_port_cd'    => 'ACS8000_MIB__acsSerialPortTableSignalStateDCD',
 | 
			
		||||
 | 
			
		||||
    # Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
 | 
			
		||||
    # Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
 | 
			
		||||
    # to be unique so that we can differentiate between the index in the
 | 
			
		||||
    # acsSerialPortTable from ifIndex which are both integers
 | 
			
		||||
    # ACS8000-MIB::acsSerialPortTableEntry
 | 
			
		||||
    'acs8k_port_socket' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
 | 
			
		||||
@@ -82,21 +149,85 @@ sub layers {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'cyclades';
 | 
			
		||||
    return 'avocent';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Use "short circuit" to return the first MIB instance that returns data to
 | 
			
		||||
# reduce network communications
 | 
			
		||||
# We'll try newest (acs*) first assuming those are most likely deployed
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_os_ver()
 | 
			
		||||
        || $cyclades->acs8k_os_ver()
 | 
			
		||||
        || $cyclades->cy5k_os_ver()
 | 
			
		||||
        || $cyclades->cy_os_ver()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'cyclades';
 | 
			
		||||
    return 'vertiv';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    my $model = $cyclades->cy_model();
 | 
			
		||||
    my $model
 | 
			
		||||
        = $cyclades->acs_model()
 | 
			
		||||
        || $cyclades->acs8k_model()
 | 
			
		||||
        || $cyclades->cy5k_model()
 | 
			
		||||
        || $cyclades->cy_model()
 | 
			
		||||
        || undef;
 | 
			
		||||
 | 
			
		||||
    return unless defined $model;
 | 
			
		||||
    return lc($model) if ( defined $model );
 | 
			
		||||
 | 
			
		||||
    return lc($model);
 | 
			
		||||
    my $id   = $cyclades->id();
 | 
			
		||||
    my $prod = SNMP::translateObj($id);
 | 
			
		||||
 | 
			
		||||
    return $prod || $id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_serial()
 | 
			
		||||
        || $cyclades->acs8k_serial()
 | 
			
		||||
        || $cyclades->cy5k_serial()
 | 
			
		||||
        || $cyclades->cy_serial()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub root_ip {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->cy5k_root_ip()
 | 
			
		||||
        || $cyclades->cy_root_ip()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ps1_status {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_ps1_status()
 | 
			
		||||
        || $cyclades->acs8k_ps1_status()
 | 
			
		||||
        || $cyclades->cy5k_ps1_status()
 | 
			
		||||
        || $cyclades->cy_ps1_status()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ps2_status {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_ps2_status()
 | 
			
		||||
        || $cyclades->acs8k_ps2_status()
 | 
			
		||||
        || $cyclades->cy5k_ps2_status()
 | 
			
		||||
        || $cyclades->cy_ps2_status()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Extend interface methods to include serial ports
 | 
			
		||||
@@ -109,7 +240,12 @@ sub i_index {
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $orig_index = $cyclades->orig_i_index($partial) || {};
 | 
			
		||||
    my $cy_index   = $cyclades->cy_port_socket()       || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_index;
 | 
			
		||||
    foreach my $iid ( keys %$orig_index ) {
 | 
			
		||||
@@ -137,8 +273,18 @@ sub interfaces {
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_descr = $cyclades->orig_i_description($partial) || {};
 | 
			
		||||
    my $cy_index = $cyclades->cy_port_socket()             || {};
 | 
			
		||||
    my $cy_p_tty = $cyclades->cy_port_tty()                || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_tty
 | 
			
		||||
        = $cyclades->acs_port_tty()
 | 
			
		||||
        || $cyclades->acs8k_port_tty()
 | 
			
		||||
        || $cyclades->cy5k_port_tty()
 | 
			
		||||
        || $cyclades->cy_port_tty()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %if;
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
@@ -166,8 +312,18 @@ sub i_speed {
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_speed    = $cyclades->orig_i_speed($partial) || {};
 | 
			
		||||
    my $cy_index   = $cyclades->cy_port_socket()       || {};
 | 
			
		||||
    my $cy_p_speed = $cyclades->cy_port_speed()        || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_speed
 | 
			
		||||
        = $cyclades->acs_port_speed()
 | 
			
		||||
        || $cyclades->acs8k_port_speed()
 | 
			
		||||
        || $cyclades->cy5k_port_speed()
 | 
			
		||||
        || $cyclades->cy_port_speed()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_speed;
 | 
			
		||||
    foreach my $iid ( keys %$i_speed ) {
 | 
			
		||||
@@ -195,8 +351,18 @@ sub i_up {
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_up     = $cyclades->orig_i_up($partial) || {};
 | 
			
		||||
    my $cy_index = $cyclades->cy_port_socket()    || {};
 | 
			
		||||
    my $cy_p_up  = $cyclades->cy_port_cd()        || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_up
 | 
			
		||||
        = $cyclades->acs_port_cd()
 | 
			
		||||
        || $cyclades->acs8k_port_cd()
 | 
			
		||||
        || $cyclades->cy5k_port_cd()
 | 
			
		||||
        || $cyclades->cy_port_cd()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_up;
 | 
			
		||||
    foreach my $iid ( keys %$i_up ) {
 | 
			
		||||
@@ -224,8 +390,18 @@ sub i_description {
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_desc    = $cyclades->orig_i_description($partial) || {};
 | 
			
		||||
    my $cy_index  = $cyclades->cy_port_socket()             || {};
 | 
			
		||||
    my $cy_p_desc = $cyclades->cy_port_name()               || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_desc
 | 
			
		||||
        = $cyclades->acs_port_name()
 | 
			
		||||
        || $cyclades->acs8k_port_name()
 | 
			
		||||
        || $cyclades->cy5k_port_name()
 | 
			
		||||
        || $cyclades->cy_port_name()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %descr;
 | 
			
		||||
    foreach my $iid ( keys %$i_desc ) {
 | 
			
		||||
@@ -253,8 +429,18 @@ sub i_name {
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_name    = $cyclades->orig_i_name($partial) || {};
 | 
			
		||||
    my $cy_index  = $cyclades->cy_port_socket()      || {};
 | 
			
		||||
    my $cy_p_desc = $cyclades->cy_port_name()        || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_desc
 | 
			
		||||
        = $cyclades->acs_port_name()
 | 
			
		||||
        || $cyclades->acs8k_port_name()
 | 
			
		||||
        || $cyclades->cy5k_port_name()
 | 
			
		||||
        || $cyclades->cy_port_name()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_name;
 | 
			
		||||
    foreach my $iid ( keys %$i_name ) {
 | 
			
		||||
@@ -282,7 +468,8 @@ __END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades terminal servers
 | 
			
		||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades/Avocent terminal
 | 
			
		||||
servers
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -309,7 +496,7 @@ Eric Miller
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a 
 | 
			
		||||
Cyclades device through SNMP.
 | 
			
		||||
Cyclades/Avocent device through SNMP.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
@@ -334,6 +521,14 @@ my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-INFO-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS5K-SYS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS5K-CONF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS5K-INFO-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ACS6000-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
@@ -348,11 +543,11 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $cyclades->os_ver()
 | 
			
		||||
 | 
			
		||||
(C<cyACSversion>)
 | 
			
		||||
(C<acsFirmwareVersion>), (C<cyACS5Kversion>), or (C<cyACSversion>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->serial()
 | 
			
		||||
 | 
			
		||||
(C<cyACSDevId>)
 | 
			
		||||
(C<acsSerialNumber>), (C<cyACS5KDevId>), or (C<cyACSDevId>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->root_ip()
 | 
			
		||||
 | 
			
		||||
@@ -360,11 +555,11 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $cyclades->ps1_status()
 | 
			
		||||
 | 
			
		||||
(C<cyACSPw1>)
 | 
			
		||||
(C<acsPowerSupplyStatePw1>), (C<cyACS5KPw1>), or (C<cyACSPw1>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->ps2_status()
 | 
			
		||||
 | 
			
		||||
(C<cyACSPw2>)
 | 
			
		||||
(C<acsPowerSupplyStatePw2>), (C<cyACS5KPw2>), or (C<cyACSPw2>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -379,15 +574,16 @@ to poll for an ARP cache so turn off reported Layer 2 and Layer 3.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'cyclades'
 | 
			
		||||
Returns 'vertiv'
 | 
			
		||||
 | 
			
		||||
=item $cyclades->os()
 | 
			
		||||
 | 
			
		||||
Returns 'cyclades'
 | 
			
		||||
Returns 'avocent'
 | 
			
		||||
 | 
			
		||||
=item $cyclades->model()
 | 
			
		||||
 | 
			
		||||
Returns lower case (C<cyACSpname>)
 | 
			
		||||
Returns lower case (C<cyACSpname>) or (C<acsProductModel>) if it exists
 | 
			
		||||
otherwise tries to reference $cyclades->id() to one of the MIBs listed above
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -409,31 +605,34 @@ to a hash.
 | 
			
		||||
Returns reference to map of IIDs to Interface index. 
 | 
			
		||||
 | 
			
		||||
Extended to include serial ports.  Serial ports are indexed with the
 | 
			
		||||
alternative labeling system for the serial port, the listening socket port
 | 
			
		||||
C<cySPortSocketPort> to avoid conflicts with C<ifIndex>.  
 | 
			
		||||
alternative labeling system for the serial port, either the listening socket
 | 
			
		||||
port C<cySPortSocketPort> or C<acsSerialPortTableDeviceName> name to avoid
 | 
			
		||||
conflicts with C<ifIndex>.  
 | 
			
		||||
 | 
			
		||||
=item $cyclades->interfaces()
 | 
			
		||||
 | 
			
		||||
Returns reference to map of IIDs to physical ports.  Extended to include
 | 
			
		||||
serial ports, C<cyISPortTty>.
 | 
			
		||||
serial ports, C<acsSerialPortTableDeviceName> or C<cyISPortTty>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_speed()
 | 
			
		||||
 | 
			
		||||
Returns interface speed.  Extended to include serial ports, C<cyISPortSpeed>. 
 | 
			
		||||
Returns interface speed.  Extended to include serial ports,
 | 
			
		||||
C<acsSerialPortTableComSpeed> or C<cyISPortSpeed>. 
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_up()
 | 
			
		||||
 | 
			
		||||
Returns link status for each port.  Extended to include serial ports,
 | 
			
		||||
C<cyISPortSigCD>.
 | 
			
		||||
C<acsSerialPortTableSignalStateDCD> or C<cyISPortSigCD>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_description()
 | 
			
		||||
 | 
			
		||||
Returns description of each port.  Extended to include serial ports,
 | 
			
		||||
C<cyISPortName>.
 | 
			
		||||
C<acsSerialPortTableName> or C<cyISPortName>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_name()
 | 
			
		||||
 | 
			
		||||
Returns name of each port.  Extended to include serial ports, C<cyISPortName>.
 | 
			
		||||
Returns name of each port.  Extended to include serial ports,
 | 
			
		||||
C<acsSerialPortTableName> or C<cyISPortName>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -46,7 +46,7 @@ use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
@@ -118,24 +118,18 @@ sub vendor {
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $l2 = shift;
 | 
			
		||||
 | 
			
		||||
    my $serial1  = $l2->serial1();
 | 
			
		||||
    my $e_descr  = $l2->e_descr() || {};
 | 
			
		||||
    my $e_serial = $l2->e_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;
 | 
			
		||||
    my $entity_serial = $l2->entity_derived_serial();
 | 
			
		||||
    if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
 | 
			
		||||
        return $entity_serial;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
			
		||||
    my $serial1  = $l2->serial1();
 | 
			
		||||
    if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
 | 
			
		||||
        return $serial1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub interfaces {
 | 
			
		||||
@@ -262,7 +256,7 @@ Tries to discover the vendor from $l2->model() and $l2->description()
 | 
			
		||||
 | 
			
		||||
=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
 | 
			
		||||
 | 
			
		||||
@@ -11,7 +11,7 @@ use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
@@ -49,6 +49,7 @@ sub serial {
 | 
			
		||||
            return $e_serial->{$e};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
@@ -61,6 +62,7 @@ sub os_ver {
 | 
			
		||||
            return $e_swver->{$e};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
@@ -73,7 +75,10 @@ sub model {
 | 
			
		||||
    my $descr = $dsmodel->description();
 | 
			
		||||
    if ( $descr =~ /^([\S ]+) Software.*/){
 | 
			
		||||
        return $1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return $descr;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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.55';
 | 
			
		||||
 | 
			
		||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
			
		||||
# table by the serial() function.
 | 
			
		||||
our $index = undef;
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    'ADTRAN-GENEVC-MIB'     => 'adGenEVCMIB',
 | 
			
		||||
    'ADTRAN-GENMEF-MIB'     => 'adGenMEFMIB',
 | 
			
		||||
    'ADTRAN-GENPORT-MIB'    => 'adGenPort',
 | 
			
		||||
    'ADTRAN-MIB'            => 'adtran',
 | 
			
		||||
    'ADTRAN-AOSUNIT'     => 'adGenAOSUnitMib',
 | 
			
		||||
 );
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS, 
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS, 
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    'serial'    => 'adProdSerialNumber',
 | 
			
		||||
    'ad_mgmtevcvid' => 'adGenEVCSysMgmtEVCSTagVID',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
           %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
           %SNMP::Info::LLDP::FUNCS, 
 | 
			
		||||
           'ad_evcstag' => 'adGenEVCLookupName',
 | 
			
		||||
           'ad_menport' => 'adGenMenPortRowStatus',
 | 
			
		||||
           'ad_evcnamevid' => 'adGenEVCSTagVID',
 | 
			
		||||
           'ad_mgmtevcports' => 'adGenSysMgmtEVCInterfaceConnectionType',
 | 
			
		||||
           'ad_evcmapuniport' => 'adGenMEFMapUNIPort',
 | 
			
		||||
           'ad_evcmapevc' => 'adGenMEFMapAssociatedEVCAlias',
 | 
			
		||||
           'ad_genportcustuse' => 'adGenPortCustomerUse',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, %SNMP::Info::Layer3::MUNGE );
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'adtran';
 | 
			
		||||
}
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'aos';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub layers {
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    
 | 
			
		||||
    my $layers = $adtran->SUPER::layers();
 | 
			
		||||
    # Some netvantas don't report L2 properly 
 | 
			
		||||
    my $macs   = $adtran->fw_mac();
 | 
			
		||||
    
 | 
			
		||||
    if (keys %$macs) {
 | 
			
		||||
        my $l = substr $layers, 6, 1, "1";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $layers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $ver = $adtran->adProdSwVersion() || undef;
 | 
			
		||||
    return $ver if (defined $ver);
 | 
			
		||||
    my $aos_ver = $adtran->adAOSDeviceVersion();
 | 
			
		||||
    return $aos_ver;
 | 
			
		||||
}
 | 
			
		||||
sub model { 
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $id = $adtran->id();
 | 
			
		||||
    my $mod = $adtran->adProdName() || undef;
 | 
			
		||||
    return $mod if (defined $mod);
 | 
			
		||||
    my $model = $adtran->adAOSDeviceProductName() || undef;
 | 
			
		||||
    return $model;
 | 
			
		||||
}
 | 
			
		||||
sub serial { 
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $e_serial = $adtran->e_serial() || {};
 | 
			
		||||
    my $serial2 = $e_serial->{1} || undef;
 | 
			
		||||
    return $serial2 if ( defined $serial2 );
 | 
			
		||||
    return $adtran->orig_serial();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_name {
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
    my $i_name = $adtran->SUPER::i_alias() || undef; 
 | 
			
		||||
    return $i_name if (defined $i_name);
 | 
			
		||||
    $i_name = {};
 | 
			
		||||
    my $adname = $adtran->ad_genportcustuse() || undef;
 | 
			
		||||
    if (defined $adname) {  
 | 
			
		||||
        foreach my $port (keys %$adname) { 
 | 
			
		||||
            my @split = split(/\./,$port);
 | 
			
		||||
            $i_name->{@split[1]} = $adname->{$port};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $i_name;
 | 
			
		||||
}
 | 
			
		||||
sub i_vlan { 
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
    my $uniports = $adtran->ad_evcmapuniport() || undef;
 | 
			
		||||
    my $evcmaps = $adtran->ad_evcmapevc() || undef;
 | 
			
		||||
    my $v_names = $adtran->ad_evcnamevid() || undef;
 | 
			
		||||
    if (defined $uniports) {
 | 
			
		||||
        my $vlans = {};
 | 
			
		||||
        foreach my $oid (keys %$v_names) {
 | 
			
		||||
            my $name = pack("C*", split(/\./,$oid));
 | 
			
		||||
            $vlans->{$name} = $v_names->{$oid};
 | 
			
		||||
        }
 | 
			
		||||
        my $i_vlan = {};
 | 
			
		||||
        foreach my $evcmap (keys %$evcmaps) {
 | 
			
		||||
            $i_vlan->{$uniports->{$evcmap}} = $vlans->{$evcmaps->{$evcmap}};
 | 
			
		||||
        }
 | 
			
		||||
        return $i_vlan;
 | 
			
		||||
    }
 | 
			
		||||
    return {};
 | 
			
		||||
        
 | 
			
		||||
}
 | 
			
		||||
        
 | 
			
		||||
sub i_vlan_membership {         
 | 
			
		||||
    my $adtran  = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
    my $i_vlan = $adtran->ad_menport();
 | 
			
		||||
    if (defined $i_vlan) { 
 | 
			
		||||
        my $vlans = {};
 | 
			
		||||
        my $v_name = $adtran->v_name();
 | 
			
		||||
        foreach my $vid (keys %$v_name) {
 | 
			
		||||
            $vlans->{$v_name->{$vid}} = $vid;
 | 
			
		||||
        }
 | 
			
		||||
        my $if_vlans = {};
 | 
			
		||||
        foreach my $entry (keys %$i_vlan) {
 | 
			
		||||
            my @split = split(/(\.0)+\./,$entry);
 | 
			
		||||
            my $name = pack("C*", split(/\./,@split[0]));
 | 
			
		||||
            push @{$if_vlans->{@split[2]}}, $vlans->{$name};
 | 
			
		||||
        }
 | 
			
		||||
        my $mgmtevcports = $adtran->ad_mgmtevcports();
 | 
			
		||||
        my $mgmtevcid = $adtran->ad_mgmtevcvid();
 | 
			
		||||
        foreach my $port (keys %$mgmtevcports) {
 | 
			
		||||
           push @{$if_vlans->{$port}}, $mgmtevcid;
 | 
			
		||||
        }
 | 
			
		||||
        return $if_vlans;
 | 
			
		||||
    }
 | 
			
		||||
    return {};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub v_name {
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
    my $v_index = $adtran->ad_evcstag();
 | 
			
		||||
    return {} unless defined $v_index;
 | 
			
		||||
    $v_index->{$adtran->ad_mgmtevcvid()} = 'system-management-evc';
 | 
			
		||||
    return $v_index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
			
		||||
 my $adtran = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        ) 
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $adtran->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for adtran Devices running JUNOS
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $adtran->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'adtran'
 | 
			
		||||
 | 
			
		||||
=item $adtran->os()
 | 
			
		||||
 | 
			
		||||
Returns 'aos'
 | 
			
		||||
 | 
			
		||||
=item $adtran->layers()
 | 
			
		||||
 | 
			
		||||
Ensures that layer two is reported, at least.
 | 
			
		||||
 | 
			
		||||
=item $adtran->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version extracted first from C<adProdSwVersion> or
 | 
			
		||||
C<adAOSDeviceVersion>.
 | 
			
		||||
 | 
			
		||||
=item $adtran->model()
 | 
			
		||||
 | 
			
		||||
Returns the model extracted first from C<adProdName> or
 | 
			
		||||
C<adAOSDeviceProductName>.
 | 
			
		||||
 | 
			
		||||
=item $adtran->serial()
 | 
			
		||||
 | 
			
		||||
Returns serial number.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $adtran->v_name()
 | 
			
		||||
 | 
			
		||||
VLAN names table.
 | 
			
		||||
 | 
			
		||||
=item $adtran->i_name()
 | 
			
		||||
 | 
			
		||||
Interface names table.
 | 
			
		||||
 | 
			
		||||
=item $adtran->i_vlan()
 | 
			
		||||
 | 
			
		||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
 | 
			
		||||
 | 
			
		||||
=item $adtran->i_vlan_membership()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
			
		||||
IDs.  These are the VLANs which are members of the egress list for the port.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
@@ -97,6 +97,14 @@ my $mcs_index = {
 | 
			
		||||
	m13 => '104',
 | 
			
		||||
	m14 => '117',
 | 
			
		||||
	m15 => '130',
 | 
			
		||||
	m16 => '19.5',
 | 
			
		||||
	m17 => '39',
 | 
			
		||||
	m18 => '58.5',
 | 
			
		||||
	m19 => '78',
 | 
			
		||||
	m20 => '117',
 | 
			
		||||
	m21 => '156',
 | 
			
		||||
	m22 => '175.5',
 | 
			
		||||
	m23 => '195',
 | 
			
		||||
	# This is a cheat for 802.11a bonded
 | 
			
		||||
	m108 => '108',
 | 
			
		||||
    },
 | 
			
		||||
@@ -117,6 +125,14 @@ my $mcs_index = {
 | 
			
		||||
	m13 => '240',
 | 
			
		||||
	m14 => '270',
 | 
			
		||||
	m15 => '300',
 | 
			
		||||
	m16 => '45',
 | 
			
		||||
	m17 => '90',
 | 
			
		||||
	m18 => '135',
 | 
			
		||||
	m19 => '180',
 | 
			
		||||
	m20 => '270',
 | 
			
		||||
	m21 => '360',
 | 
			
		||||
	m22 => '405',
 | 
			
		||||
	m23 => '450',
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -165,6 +181,7 @@ sub cd11_txrate {
 | 
			
		||||
	elsif ( $rate =~ /^m/ ) {
 | 
			
		||||
	    my $band = $protos->{$idx};
 | 
			
		||||
	    my $bw   = $bws->{$band};
 | 
			
		||||
	    # FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"...
 | 
			
		||||
	    $cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::GLOBALS,
 | 
			
		||||
@@ -60,7 +60,6 @@ $VERSION = '3.27';
 | 
			
		||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CDP::GLOBALS,
 | 
			
		||||
    'serial' => 'entPhysicalSerialNum.1',
 | 
			
		||||
    'descr'  => 'sysDescr',
 | 
			
		||||
    'ps1_type' => 'cpoePdCurrentPowerSource'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -136,7 +135,7 @@ sub interfaces {
 | 
			
		||||
# Tag on e_descr.1
 | 
			
		||||
sub description {
 | 
			
		||||
    my $aironet = shift;
 | 
			
		||||
    my $descr   = $aironet->descr();
 | 
			
		||||
    my $descr   = $aironet->SUPER::description();
 | 
			
		||||
    my $e_descr = $aironet->e_descr();
 | 
			
		||||
 | 
			
		||||
    $descr = "$e_descr->{1}  $descr" if defined $e_descr->{1};
 | 
			
		||||
@@ -554,17 +553,13 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $aironet->discription()
 | 
			
		||||
 | 
			
		||||
Adds info from method e_descr() from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
=item $aironet->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'cisco'
 | 
			
		||||
 | 
			
		||||
=item $aironet->description()
 | 
			
		||||
 | 
			
		||||
System description
 | 
			
		||||
System description. Adds info from method e_descr() from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -662,6 +657,11 @@ being broadcast.
 | 
			
		||||
With the same keys as i_ssidlist, returns the Basic service set
 | 
			
		||||
identification (BSSID), MAC address, the AP is using for the SSID. 
 | 
			
		||||
 | 
			
		||||
=item $aironet ps1_status()
 | 
			
		||||
 | 
			
		||||
Returns the PoE injector status based on C<cpoePdSupportedPower> and 
 | 
			
		||||
C<cpoePdSupportedPowerMode>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
			
		||||
 | 
			
		||||
@@ -73,6 +73,7 @@ sub os_ver {
 | 
			
		||||
    if ( $descr =~ m/version (\d+\.\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
@@ -229,7 +229,7 @@ sub index_factor {
 | 
			
		||||
        if ( ( $model =~ /(470)/ )
 | 
			
		||||
        or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
 | 
			
		||||
    $index_factor = 128
 | 
			
		||||
        if ( ( $model =~ /(5[56]\d\d)|VSP/ )
 | 
			
		||||
        if ( ( $model =~ /(5[56]\d\d)|VSP|4950|59100/ )
 | 
			
		||||
        and ( $os_ver >= 6 ) );
 | 
			
		||||
 | 
			
		||||
    return $index_factor;
 | 
			
		||||
@@ -48,7 +48,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
@@ -200,6 +200,8 @@ sub set_i_duplex_admin {
 | 
			
		||||
 | 
			
		||||
    my $iid = $c1900->c1900_p_ifindex($port);
 | 
			
		||||
 | 
			
		||||
    return 0 unless $iid->{$port};
 | 
			
		||||
 | 
			
		||||
    $duplex = lc($duplex);
 | 
			
		||||
 | 
			
		||||
    return 0 unless defined $duplexes{$duplex};
 | 
			
		||||
@@ -218,11 +220,11 @@ sub i_vlan {
 | 
			
		||||
        || 'disabled';
 | 
			
		||||
 | 
			
		||||
    if ( $overlap eq 'enabled' ) {
 | 
			
		||||
        return;
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan();
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan() || {};
 | 
			
		||||
 | 
			
		||||
    my $i_pvid = {};
 | 
			
		||||
    foreach my $idx ( keys %$member_of ) {
 | 
			
		||||
@@ -244,7 +246,7 @@ sub i_vlan_membership {
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan();
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan() || {};
 | 
			
		||||
 | 
			
		||||
    my $i_vlan_membership = {};
 | 
			
		||||
    foreach my $idx ( keys %$member_of ) {
 | 
			
		||||
@@ -261,7 +263,7 @@ sub i_vlan_membership {
 | 
			
		||||
    return $i_vlan_membership;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_vlan_membership_untagged { return; }
 | 
			
		||||
sub i_vlan_membership_untagged { return {}; }
 | 
			
		||||
 | 
			
		||||
sub bp_index {
 | 
			
		||||
    my $c1900   = shift;
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::Cisco::GLOBALS,
 | 
			
		||||
@@ -128,25 +128,24 @@ sub i_speed_admin {
 | 
			
		||||
    my $c2900   = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my %i_speed_admin;
 | 
			
		||||
    my $p_port        = $c2900->p_port() || {};
 | 
			
		||||
    my $interfaces    = $c2900->interfaces($partial);
 | 
			
		||||
    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 $c2900_p_speed
 | 
			
		||||
        = $c2900->c2900_p_speed_admin( $reverse_2900{$partial} );
 | 
			
		||||
 | 
			
		||||
    my %speeds = (
 | 
			
		||||
        'autoDetect' => 'auto',
 | 
			
		||||
        's10000000'  => '10 Mbps',
 | 
			
		||||
        's100000000' => '100 Mbps',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    %i_speed_admin
 | 
			
		||||
        = map { $c2900_p_index->{$_} => $speeds{ $c2900_p_speed->{$_} } }
 | 
			
		||||
        keys %$c2900_p_index;
 | 
			
		||||
    my %i_speed_admin;
 | 
			
		||||
    foreach my $if ( keys %$interfaces ) {
 | 
			
		||||
        my $port_2900 = $reverse_2900{$if};
 | 
			
		||||
        next unless defined $port_2900;
 | 
			
		||||
        my $speed = $c2900_p_admin->{$port_2900};
 | 
			
		||||
        next unless defined $speed;
 | 
			
		||||
 | 
			
		||||
        $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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -190,7 +189,7 @@ sub set_i_duplex_admin {
 | 
			
		||||
    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 {
 | 
			
		||||
    my $c2900   = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::Cisco::MIBS,
 | 
			
		||||
@@ -70,7 +70,7 @@ $VERSION = '3.27';
 | 
			
		||||
sub i_physical {
 | 
			
		||||
    my $cat = shift;
 | 
			
		||||
 | 
			
		||||
    my $p_port = $cat->p_port();
 | 
			
		||||
    my $p_port = $cat->p_port() || {};
 | 
			
		||||
 | 
			
		||||
    my %i_physical;
 | 
			
		||||
    foreach my $port ( keys %$p_port ) {
 | 
			
		||||
@@ -104,8 +104,8 @@ sub os_ver {
 | 
			
		||||
# Workaround for incomplete bp_index
 | 
			
		||||
sub bp_index {
 | 
			
		||||
    my $cat     = shift;
 | 
			
		||||
    my $p_index = $cat->p_port();
 | 
			
		||||
    my $b_index = $cat->p_oidx();
 | 
			
		||||
    my $p_index = $cat->p_port() || {};
 | 
			
		||||
    my $b_index = $cat->p_oidx() || {};
 | 
			
		||||
 | 
			
		||||
    my %bp_index;
 | 
			
		||||
    foreach my $iid ( keys %$p_index ) {
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -52,7 +52,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -50,11 +50,7 @@ use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
 | 
			
		||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
			
		||||
# table by the serial() function.
 | 
			
		||||
our $index = undef;
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
@@ -98,6 +94,10 @@ sub vendor {
 | 
			
		||||
    return 'cisco';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'ros';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Walk the entPhysicalSerialNum table and return the first serial found
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $ciscosb  = shift;
 | 
			
		||||
@@ -113,9 +113,13 @@ sub serial {
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $ciscosb = shift;
 | 
			
		||||
    my $os_ver  = $ciscosb->e_swver();
 | 
			
		||||
    my $e_swver  = $ciscosb->e_swver();
 | 
			
		||||
 | 
			
		||||
    return $os_ver->{$index} if defined $index;
 | 
			
		||||
    foreach my $e ( sort keys %$e_swver ) {
 | 
			
		||||
        if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
 | 
			
		||||
            return $e_swver->{$e};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Grab e_model from Entity and tag on e_hwver
 | 
			
		||||
@@ -124,9 +128,12 @@ sub model {
 | 
			
		||||
    my $e_model = $ciscosb->e_model();
 | 
			
		||||
    my $e_hwver = $ciscosb->e_hwver();
 | 
			
		||||
 | 
			
		||||
    if (defined ($index)) {
 | 
			
		||||
        my $model = "$e_model->{$index} $e_hwver->{$index}";
 | 
			
		||||
        return $model;
 | 
			
		||||
    foreach my $e ( sort keys %$e_model ) {
 | 
			
		||||
        if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) {
 | 
			
		||||
            return $e_model->{$e};
 | 
			
		||||
            #my $model = "$e_model->{$e} $e_hwver->{$e}";
 | 
			
		||||
            #return $model;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $ciscosb->description();
 | 
			
		||||
}
 | 
			
		||||
@@ -210,6 +217,10 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
Returns 'cisco'
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->os()
 | 
			
		||||
 | 
			
		||||
Returns 'ros'
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns software version (C<entPhysicalSoftwareRev>)
 | 
			
		||||
@@ -37,7 +37,7 @@ use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::MAU;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
use SNMP::Info::Aggregate;
 | 
			
		||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::HP::ISA = qw/
 | 
			
		||||
    SNMP::Info::Aggregate
 | 
			
		||||
@@ -50,7 +50,7 @@ use SNMP::Info::Aggregate;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -66,6 +66,8 @@ $VERSION = '3.27';
 | 
			
		||||
    'HP-ICF-BRIDGE'          => 'hpicfBridgeRstpForceVersion',
 | 
			
		||||
    'HP-ICF-POE-MIB'         => 'hpicfPoePethPsePortCurrent',
 | 
			
		||||
    'SEMI-MIB'               => 'hpHttpMgSerialNumber',
 | 
			
		||||
    'HP-SWITCH-PL-MIB'       => 'hpSwitchProliant',
 | 
			
		||||
    'BLADETYPE4-NETWORK-MIB' => 'hpProLiant-GbE2c-InterconnectSwitch',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -215,6 +217,7 @@ $VERSION = '3.27';
 | 
			
		||||
    'J9085A' => '2610-24',
 | 
			
		||||
    'J8762A' => '2600-8-PWR',
 | 
			
		||||
    'J9780A' => '2530-8-PoE+',
 | 
			
		||||
    'J9774A' => '2530-8G-PoEP',
 | 
			
		||||
    'J9777A' => '2530-8G',
 | 
			
		||||
    'J9783A' => '2530-8',
 | 
			
		||||
    'J9778A' => '2530-48-PoE+',
 | 
			
		||||
@@ -623,6 +626,14 @@ Included in V2 mibs from Cisco
 | 
			
		||||
 | 
			
		||||
=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
 | 
			
		||||
 | 
			
		||||
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/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -66,6 +66,7 @@ sub os_ver {
 | 
			
		||||
    if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
@@ -75,7 +76,7 @@ sub serial {
 | 
			
		||||
        my $str = substr($1,8,10);
 | 
			
		||||
        return $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'Kentrox';
 | 
			
		||||
@@ -87,6 +88,7 @@ sub model {
 | 
			
		||||
    if ( $descr =~ /^(\S+\s\S+)/){
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,        %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Bridge;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -49,6 +49,7 @@ $VERSION = '3.27';
 | 
			
		||||
    'NTWS-CLIENT-SESSION-MIB'       => 'ntwsClSessTotalSessions',
 | 
			
		||||
    'NTWS-SYSTEM-MIB'               => 'ntwsSysCpuAverageLoad',
 | 
			
		||||
    'NTWS-BASIC-MIB'                => 'ntwsVersionString',
 | 
			
		||||
    'NTWS-AP-CONFIG-MIB'            => 'ntwsApConfServProfBeaconEnabled',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
			
		||||
# 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
 | 
			
		||||
    # 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';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -139,7 +139,7 @@ sub interfaces {
 | 
			
		||||
    return $interfaces;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# these seem to work for GSM models but not GS
 | 
			
		||||
# these seem to work for GSM/FSM models but not GS
 | 
			
		||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $netgear = shift;
 | 
			
		||||
@@ -148,7 +148,7 @@ sub os_ver {
 | 
			
		||||
        my $os_ver  = $netgear->e_swver();
 | 
			
		||||
        return $os_ver->{$index} if defined $os_ver;
 | 
			
		||||
    }
 | 
			
		||||
    return $netgear->ng_gsmosver() if defined  $netgear->model and $netgear->model =~ m/GSM\d/i;
 | 
			
		||||
    return $netgear->ng_gsmosver() if defined  $netgear->model and $netgear->model =~ m/[FG]SM\d/i;
 | 
			
		||||
    return $netgear->ng_fsosver() if defined  $netgear->model and $netgear->model =~ m/FS\d/i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										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.55';
 | 
			
		||||
 | 
			
		||||
%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/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
 | 
			
		||||
    #'ORiNOCO-MIB' => 'orinoco',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS
 | 
			
		||||
@@ -56,12 +54,6 @@ $VERSION = '3.27';
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::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, );
 | 
			
		||||
@@ -165,22 +157,6 @@ sub 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;
 | 
			
		||||
__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.55';
 | 
			
		||||
 | 
			
		||||
%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/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -51,6 +51,7 @@ $VERSION = '3.27';
 | 
			
		||||
    'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB'       => 'trpzClSessTotalSessions',
 | 
			
		||||
    'TRAPEZE-NETWORKS-SYSTEM-MIB'               => 'trpzSysCpuAverageLoad',
 | 
			
		||||
    'TRAPEZE-NETWORKS-BASIC-MIB'                => 'trpzVersionString',
 | 
			
		||||
    'TRAPEZE-NETWORKS-AP-CONFIG-MIB'  => 'trpzApConfServProfBeaconEnabled',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%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.55';
 | 
			
		||||
 | 
			
		||||
%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/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    'ip_adresses'   => 'ipAdEntAddr',
 | 
			
		||||
    'ip_addresses'  => 'ipAdEntAddr',
 | 
			
		||||
    'i_name'        => 'ifDescr',
 | 
			
		||||
    'i_description' => 'adslLineConfProfile',
 | 
			
		||||
);
 | 
			
		||||
@@ -58,7 +58,7 @@ $VERSION = '3.27';
 | 
			
		||||
 | 
			
		||||
sub layers {
 | 
			
		||||
    my $zyxel  = shift;
 | 
			
		||||
    my $layers = $zyxel->layers();
 | 
			
		||||
    my $layers = $zyxel->SUPER::layers();
 | 
			
		||||
    return $layers if defined $layers;
 | 
			
		||||
 | 
			
		||||
    # 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 $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
 | 
			
		||||
            if ( defined $ip
 | 
			
		||||
            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/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -194,29 +194,18 @@ sub root_ip {
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $l3 = shift;
 | 
			
		||||
 | 
			
		||||
    my $entity_serial = $l3->entity_derived_serial();
 | 
			
		||||
    if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
 | 
			
		||||
        return $entity_serial;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $serial1 = $l3->serial1();
 | 
			
		||||
    my $e_parent = $l3->e_parent() || {};
 | 
			
		||||
 | 
			
		||||
    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};
 | 
			
		||||
    if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
 | 
			
		||||
        return $serial1;
 | 
			
		||||
    }
 | 
			
		||||
            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*$/ );
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# $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()
 | 
			
		||||
 | 
			
		||||
Tries to cull a serial number from F<ENTITY-MIB>, description, and
 | 
			
		||||
F<OLD-CISCO->... MIB.
 | 
			
		||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
 | 
			
		||||
 | 
			
		||||
=item $l3->vendor()
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -69,8 +69,8 @@ $VERSION = '3.27';
 | 
			
		||||
    'bp_index2' => 'dot1dBasePortIfIndex',
 | 
			
		||||
 | 
			
		||||
    # AWC Interface Table (awcIfTable)
 | 
			
		||||
    'awc_default_mac' => 'awcIfDefaultPhyAddress',
 | 
			
		||||
    'awc_mac'         => 'awcIfPhyAddress',
 | 
			
		||||
    'awc_default_mac' => 'awcIfDefaultPhysAddress',
 | 
			
		||||
    'awc_mac'         => 'awcIfPhysAddress',
 | 
			
		||||
    'awc_ip'          => 'awcIfIpAddress',
 | 
			
		||||
    'awc_netmask'     => 'awcIfIpNetMask',
 | 
			
		||||
    'awc_msdu'        => 'awcIfMSDUMaxLength',
 | 
			
		||||
@@ -364,13 +364,13 @@ Ignores ports that are of type ``rptr'' and ``lo''.
 | 
			
		||||
 | 
			
		||||
Gives the default MAC address of each interface.
 | 
			
		||||
 | 
			
		||||
C<awcIfDefaultPhyAddress>
 | 
			
		||||
C<awcIfDefaultPhysAddress>
 | 
			
		||||
 | 
			
		||||
=item $aironet->awc_mac()
 | 
			
		||||
 | 
			
		||||
Gives the actual MAC address of each interface.
 | 
			
		||||
 | 
			
		||||
C<awcIfPhyAddress>
 | 
			
		||||
C<awcIfPhysAddress>
 | 
			
		||||
 | 
			
		||||
=item $aironet->awc_ip()
 | 
			
		||||
 | 
			
		||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE 
 | 
			
		||||
            $int_include_vpn $fake_idx $type_class/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
            %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -36,7 +36,7 @@ use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::MAU;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::Aggregate;
 | 
			
		||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Arista::ISA = qw/
 | 
			
		||||
    SNMP::Info::Aggregate
 | 
			
		||||
@@ -48,14 +48,14 @@ use SNMP::Info::Aggregate;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::MAU::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::Aggregate::MIBS,
 | 
			
		||||
    'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
 | 
			
		||||
    'ARISTA-PRODUCTS-MIB' => 'aristaDCS7124S',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
 | 
			
		||||
    %MODID_MAP %PROCID_MAP/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -47,7 +47,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# NOTE: Order creates precedence
 | 
			
		||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
			
		||||
@@ -96,8 +96,8 @@ sub ports {
 | 
			
		||||
    my $c3550 = shift;
 | 
			
		||||
 | 
			
		||||
    my $id    = $c3550->id();
 | 
			
		||||
    my $model = &SNMP::translateObj($id);
 | 
			
		||||
    if ( $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
 | 
			
		||||
    my $model = SNMP::translateObj($id);
 | 
			
		||||
    if ( defined $model && $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -44,7 +44,7 @@ use SNMP::Info::MAU;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MAU::MIBS,
 | 
			
		||||
@@ -51,7 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
# NOTE: Order creates precedence
 | 
			
		||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
			
		||||
							
								
								
									
										330
									
								
								lib/SNMP/Info/Layer3/CheckPoint.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								lib/SNMP/Info/Layer3/CheckPoint.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,330 @@
 | 
			
		||||
# SNMP::Info::Layer3::CheckPoint
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Bill Fenner
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer3::CheckPoint;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::CheckPoint::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%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/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -128,14 +128,27 @@ sub i_vlan {
 | 
			
		||||
        if (   $i_type->{$idx} eq 'l2vlan'
 | 
			
		||||
            || $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} )
 | 
			
		||||
        {
 | 
			
		||||
            # Not sure where this regex came from, anchored at end?
 | 
			
		||||
            if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
 | 
			
		||||
                $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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cisco_comm_indexing { 
 | 
			
		||||
    my $cisco = shift;
 | 
			
		||||
    # If we get a VTP version, it's *extremely* likely that the device needs
 | 
			
		||||
    # community based indexing
 | 
			
		||||
    my $vtp = $cisco->vtp_version() || '0';
 | 
			
		||||
    return $vtp ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
@@ -237,6 +250,11 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cEigrpAsRouterId>)
 | 
			
		||||
 | 
			
		||||
=item $switch->cisco_comm_indexing()
 | 
			
		||||
 | 
			
		||||
Returns 1 when the device is likely to need vlan indexing.
 | 
			
		||||
Determined by checking C<vtpVersion>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
			
		||||
@@ -45,7 +45,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
 | 
			
		||||
 | 
			
		||||
@@ -73,8 +73,8 @@ sub b_mac {
 | 
			
		||||
    foreach my $i ( keys %$macs ) {
 | 
			
		||||
        my $mac = $macs->{$i};
 | 
			
		||||
 | 
			
		||||
        # don't catch the bad macs with zeroed OUI
 | 
			
		||||
        if ( $mac !~ m/(0{1,2}:){3}/ ) {
 | 
			
		||||
        # don't catch the bad macs with bogus OUI
 | 
			
		||||
        if ( $mac !~ m/(0{1,2}:){2}(00|01)/ ) {
 | 
			
		||||
            push( @macs, $mac );
 | 
			
		||||
        }
 | 
			
		||||
        @macs = sort(@macs);
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
 | 
			
		||||
 | 
			
		||||
@@ -50,7 +50,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::Cisco::MIBS,
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.27';
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
 | 
			
		||||
@@ -101,7 +101,7 @@ sub mac {
 | 
			
		||||
    my $i_mac     = $contivity->i_mac();
 | 
			
		||||
 | 
			
		||||
    # Return Interface MAC
 | 
			
		||||
    foreach my $entry ( keys %$i_mac ) {
 | 
			
		||||
    foreach my $entry ( sort keys %$i_mac ) {
 | 
			
		||||
        my $sn = $i_mac->{$entry};
 | 
			
		||||
        next unless $sn;
 | 
			
		||||
        return $sn;
 | 
			
		||||
							
								
								
									
										306
									
								
								lib/SNMP/Info/Layer3/Cumulus.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										306
									
								
								lib/SNMP/Info/Layer3/Cumulus.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,306 @@
 | 
			
		||||
# SNMP::Info::Layer3::Cumulus
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 Bill Fenner and Oliver Gorwits
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer3::Cumulus;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Cumulus::ISA = qw/
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad
 | 
			
		||||
  SNMP::Info::LLDP
 | 
			
		||||
  SNMP::Info::Layer3
 | 
			
		||||
  Exporter
 | 
			
		||||
/;
 | 
			
		||||
@SNMP::Info::Layer3::Cumulus::EXPORT_OK = qw/ agg_ports /;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
			
		||||
    'UCD-SNMP-MIB'       => 'versionTag',
 | 
			
		||||
    'NET-SNMP-TC'        => 'netSnmpAliasDomain',
 | 
			
		||||
    'HOST-RESOURCES-MIB' => 'hrSystem',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    'netsnmp_vers'   => 'versionTag',
 | 
			
		||||
    'hrSystemUptime' => 'hrSystemUptime',
 | 
			
		||||
    'chassis'    => 'entPhysicalDescr.1',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub vendor { return 'Cumulus Networks' }
 | 
			
		||||
 | 
			
		||||
sub os { return 'cumulus' }
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $netsnmp = shift;
 | 
			
		||||
    my $descr   = $netsnmp->description();
 | 
			
		||||
 | 
			
		||||
# STRING: "Cumulus Linux version 3.5.1 running on innotek GmbH VirtualBox"
 | 
			
		||||
    return $1 if ( $descr =~ /^Cumulus Linux.+(\d+\.\d+\.\d+)\s/ );
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $netsnmp = shift;
 | 
			
		||||
    my $chassis = $netsnmp->chassis();
 | 
			
		||||
 | 
			
		||||
# STRING: "Cumulus Networks  VX Chassis"
 | 
			
		||||
    return $1 if ( $chassis =~ /^Cumulus Networks\s+(.+)/ );
 | 
			
		||||
    return $netsnmp->SUPER::model();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# sysUptime gives us the time since the SNMP daemon has restarted,
 | 
			
		||||
# so return the system uptime since that's probably what the user
 | 
			
		||||
# wants.  (Caution: this could cause trouble if using
 | 
			
		||||
# sysUptime-based discontinuity timers or other TimeStamp
 | 
			
		||||
# objects.
 | 
			
		||||
sub uptime {
 | 
			
		||||
    my $netsnmp = shift;
 | 
			
		||||
    my $uptime;
 | 
			
		||||
 | 
			
		||||
    $uptime = $netsnmp->hrSystemUptime();
 | 
			
		||||
    return $uptime if defined $uptime;
 | 
			
		||||
 | 
			
		||||
    return $netsnmp->SUPER::uptime();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifDescr is the same for all interfaces in a class, but the ifName is
 | 
			
		||||
# unique, so let's use that for port name.  If all else fails, 
 | 
			
		||||
# concatentate ifDesc and ifIndex.
 | 
			
		||||
# (code from SNMP/Info/Layer2/Netgear.pm)
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $netsnmp = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $interfaces = $netsnmp->i_index($partial)       || {};
 | 
			
		||||
    my $i_descr    = $netsnmp->i_description($partial) || {};
 | 
			
		||||
    my $i_name     = $netsnmp->i_name($partial);
 | 
			
		||||
    my $i_isset    = ();
 | 
			
		||||
    # Replace the description with the ifName field, if set
 | 
			
		||||
    foreach my $iid ( keys %$i_name ) {
 | 
			
		||||
        my $name = $i_name->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
        if (defined $name and $name !~ /^\s*$/) {
 | 
			
		||||
            $interfaces->{$iid} = $name;
 | 
			
		||||
            $i_isset->{$iid} = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    # Replace the Index with the ifDescr field, appended with index
 | 
			
		||||
    # number, to deal with devices with non-unique ifDescr.
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
        my $port = $i_descr->{$iid} . '-' . $iid;
 | 
			
		||||
        next unless defined $port;
 | 
			
		||||
        next if (defined $i_isset->{$iid} and $i_isset->{$iid} == 1);
 | 
			
		||||
        $interfaces->{$iid} = $port;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $interfaces;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_ignore {
 | 
			
		||||
    my $l3      = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $interfaces = $l3->interfaces($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %i_ignore;
 | 
			
		||||
    foreach my $if ( keys %$interfaces ) {
 | 
			
		||||
 | 
			
		||||
        # vlan1@br0 or peerlink.4094@peerlink
 | 
			
		||||
        if ( $interfaces->{$if} =~ /@/i ) {
 | 
			
		||||
            $i_ignore{$if}++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_ignore;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub agg_ports { return agg_ports_lag(@_) }
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer3::Cumulus - SNMP Interface to Cumulus Networks Devices
 | 
			
		||||
 | 
			
		||||
=head1 AUTHORS
 | 
			
		||||
 | 
			
		||||
Oliver Gorwits - based on Layer3::NetSNMP implementation
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
			
		||||
 my $cumulus = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        ) 
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $cumulus->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for Cumulus Networks devices
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<UCD-SNMP-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<NET-SNMP-TC>
 | 
			
		||||
 | 
			
		||||
=item F<HOST-RESOURCES-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot3ad> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cumulus->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'Cumulus Networks'.
 | 
			
		||||
 | 
			
		||||
=item $cumulus->os()
 | 
			
		||||
 | 
			
		||||
Returns 'cumulus'.
 | 
			
		||||
 | 
			
		||||
=item $cumulus->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version extracted from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=item $cumulus->uptime()
 | 
			
		||||
 | 
			
		||||
Returns the system uptime instead of the agent uptime.
 | 
			
		||||
NOTE: discontinuity timers and other Time Stamp based objects
 | 
			
		||||
are based on agent uptime, so use orig_uptime().
 | 
			
		||||
 | 
			
		||||
=item $l3->model()
 | 
			
		||||
 | 
			
		||||
Returns the chassis type.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE ENTRIES
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cumulus->interfaces()
 | 
			
		||||
 | 
			
		||||
Uses the i_name() field.
 | 
			
		||||
 | 
			
		||||
=item $cumulus->i_ignore()
 | 
			
		||||
 | 
			
		||||
Ignores interfaces with an "@" in them.
 | 
			
		||||
 | 
			
		||||
=item C<agg_ports>
 | 
			
		||||
 | 
			
		||||
Returns a HASH reference mapping from slave to master port for each member of
 | 
			
		||||
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
			
		||||
ifIndex of the corresponding master ports.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
							
								
								
									
										218
									
								
								lib/SNMP/Info/Layer3/DLink.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								lib/SNMP/Info/Layer3/DLink.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,218 @@
 | 
			
		||||
package SNMP::Info::Layer3::DLink;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::DLink::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::DLink::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.55';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    'DLINK-ID-REC-MIB' => 'dlink',
 | 
			
		||||
    'SWPRIMGMT-DES3200-MIB' => 'dlink-des3200SeriesProd',
 | 
			
		||||
    'SWPRIMGMT-DES30XXP-MIB' => 'dlink-des30xxproductProd',
 | 
			
		||||
    'SWPRIMGMT-DES1228ME-MIB' => 'dlink-des1228MEproductProd',
 | 
			
		||||
    'SWDES3528-52PRIMGMT-MIB' => 'dlink-Des3500Series', 
 | 
			
		||||
    'DES-1210-28-AX' => 'des-1210-28ax',
 | 
			
		||||
    'DES-1210-10MEbx' => 'des-1210-10mebx',
 | 
			
		||||
    'DES-1210-26MEbx' => 'des-1210-26mebx',
 | 
			
		||||
    'DES-1210-52-BX' => 'des-1210-52bx',
 | 
			
		||||
    'DES-1210-52-CX' => 'des-1210-52-cx',
 | 
			
		||||
    'DGS-1210-24-AX' => 'dgs-1210-24ax',
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
    'dlink_fw' => 'probeSoftwareRev',
 | 
			
		||||
    'dlink_hw' => 'probeHardwareRev',
 | 
			
		||||
    # Replaced with OID since these MIBs are no longer in the netdisco-mibs
 | 
			
		||||
    # collection. Commit reference of MIB removal in netdisco-mibs:
 | 
			
		||||
    # d6ec3f15861e28d220a681e7fa3b222c21664fda
 | 
			
		||||
    'dlink_stp_i_root_port' => '.1.3.6.1.4.1.171.12.15.2.3.1.18',
 | 
			
		||||
    'dlink_serial_no' => '.1.3.6.1.4.1.171.12.1.1.12',
 | 
			
		||||
    # TODO: hardcoded OIDs using get() in method calls below should be
 | 
			
		||||
    # replaced similarly and use the library getter methods
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $dlink=shift;
 | 
			
		||||
    my $id = $dlink->id();
 | 
			
		||||
    my $model = &SNMP::translateObj($id);
 | 
			
		||||
    return $id unless defined $model;
 | 
			
		||||
    if (defined $model && $model !~ /dlink-products/) {
 | 
			
		||||
	return $model;
 | 
			
		||||
    } else {
 | 
			
		||||
    	#If don't have a device MIB
 | 
			
		||||
	return $dlink->description();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'dlink';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $dlink = shift;
 | 
			
		||||
    my $model = $dlink->model();
 | 
			
		||||
    my $id = $dlink->id();
 | 
			
		||||
    my $serial;
 | 
			
		||||
    if ($model =~ /1210/) {
 | 
			
		||||
	#Due to the zoo of MIB from DLink by 1210 series
 | 
			
		||||
	$serial->{0} = $dlink->session()->get($id.'.1.30.0');
 | 
			
		||||
    } else {
 | 
			
		||||
	$serial = $dlink->dlink_serial_no();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $serial->{0} if ( defined $serial->{0} and $serial->{0} !~ /^\s*$/ and $serial->{0} !~ 'NOSUCHOBJECT' );
 | 
			
		||||
    return $dlink->SUPER::serial();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub fwver {
 | 
			
		||||
    my $dlink=shift;
 | 
			
		||||
    my $model = $dlink->model();
 | 
			
		||||
    my $id = $dlink->id();
 | 
			
		||||
    my $fw;
 | 
			
		||||
    if ($model =~ /1210/) {
 | 
			
		||||
	#Due to the zoo of MIB from DLink by 1210 series
 | 
			
		||||
	$fw->{0} = $dlink->session()->get($id.'.1.3.0');
 | 
			
		||||
    } else {
 | 
			
		||||
	$fw = $dlink->dlink_fw();
 | 
			
		||||
    }
 | 
			
		||||
    return $fw->{0} if ( defined $fw->{0} and $fw->{0} !~ /^\s*$/ and $fw->{0} !~ 'NOSUCHOBJECT');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub hwver {
 | 
			
		||||
    my $dlink=shift;
 | 
			
		||||
    my $model = $dlink->model();
 | 
			
		||||
    my $id = $dlink->id();
 | 
			
		||||
    my $hw;
 | 
			
		||||
    if ($model =~ /1210/) {
 | 
			
		||||
	#Due to the zoo of MIB from DLink by 1210 series
 | 
			
		||||
	$hw->{0} = $dlink->session()->get($id.'.1.2.0');
 | 
			
		||||
    } else {
 | 
			
		||||
	$hw = $dlink->dlink_hw();
 | 
			
		||||
    }
 | 
			
		||||
    return $hw->{0} if ( defined $hw->{0} and $hw->{0} !~ /^\s*$/ and $hw->{0} !~ 'NOSUCHOBJECT');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub stp_i_root_port {
 | 
			
		||||
    my $dlink=shift;
 | 
			
		||||
    my $model = $dlink->model();
 | 
			
		||||
    my $id = $dlink->id();
 | 
			
		||||
    my $stp_i_root_port;
 | 
			
		||||
    if ($model =~ /1210-(?:10|26)/) {
 | 
			
		||||
	#Due to the zoo of MIB from DLink by 1210 series
 | 
			
		||||
	$stp_i_root_port->{0} = $dlink->session()->get($id.'.6.1.13.0');
 | 
			
		||||
    } else {
 | 
			
		||||
	$stp_i_root_port = $dlink->dlink_stp_i_root_port();
 | 
			
		||||
    }
 | 
			
		||||
    return $stp_i_root_port if ( defined $stp_i_root_port->{0} and $stp_i_root_port->{0} !~ /^\s*$/ and $stp_i_root_port->{0} !~ 'NOSUCHOBJECT');
 | 
			
		||||
    return $dlink->SUPER::stp_i_root_port();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer3::DLink - SNMP Interface to DLink Devices
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
			
		||||
 my $dlink = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        ) 
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $dlink->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for Vyatta Devices running dlink.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $dlink->model()
 | 
			
		||||
 | 
			
		||||
Returns the ID or else description.
 | 
			
		||||
 | 
			
		||||
=item $dlink->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'dlink'.
 | 
			
		||||
 | 
			
		||||
=item $dlink->serial()
 | 
			
		||||
 | 
			
		||||
Returns serial number.
 | 
			
		||||
 | 
			
		||||
=item $dlink->fwver()
 | 
			
		||||
 | 
			
		||||
Returns the firmware version.
 | 
			
		||||
 | 
			
		||||
=item $dlink->hwver()
 | 
			
		||||
 | 
			
		||||
Returns the hardware version.
 | 
			
		||||
 | 
			
		||||
=item $dlink->stp_i_root_port()
 | 
			
		||||
 | 
			
		||||
Returns the STP root port.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user