Compare commits
	
		
			313 Commits
		
	
	
		
			ver_3_0_4_
			...
			3.40
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e2713fb57a | ||
| 
						 | 
					c8eff78d34 | ||
| 
						 | 
					04ca5793fa | ||
| 
						 | 
					83d00ee9c7 | ||
| 
						 | 
					bf56ed2540 | ||
| 
						 | 
					e75aba14b4 | ||
| 
						 | 
					5d2d2d416f | ||
| 
						 | 
					62799bfc9d | ||
| 
						 | 
					df8fbc3c03 | ||
| 
						 | 
					604de81ab8 | ||
| 
						 | 
					ed14b09567 | ||
| 
						 | 
					800758815c | ||
| 
						 | 
					058b74bd63 | ||
| 
						 | 
					02a52a4e09 | ||
| 
						 | 
					74ddc93f7f | ||
| 
						 | 
					eb8af0c81b | ||
| 
						 | 
					bd49274808 | ||
| 
						 | 
					8b1547c589 | ||
| 
						 | 
					c093f83848 | ||
| 
						 | 
					c0b28c38c5 | ||
| 
						 | 
					4621a0898f | ||
| 
						 | 
					6f02e1035f | ||
| 
						 | 
					d4ae9237a6 | ||
| 
						 | 
					914eb05a60 | ||
| 
						 | 
					4da17227c1 | ||
| 
						 | 
					20014cab29 | ||
| 
						 | 
					9d62361c8a | ||
| 
						 | 
					260992b7bf | ||
| 
						 | 
					b9cd429551 | ||
| 
						 | 
					2d18a75ad7 | ||
| 
						 | 
					0cfc501f83 | ||
| 
						 | 
					44b19153f1 | ||
| 
						 | 
					433b87b9df | ||
| 
						 | 
					f9464bcd6c | ||
| 
						 | 
					f5c5ec202a | ||
| 
						 | 
					4b64a70830 | ||
| 
						 | 
					4c8f7e298e | ||
| 
						 | 
					2d539be214 | ||
| 
						 | 
					c35d5814b4 | ||
| 
						 | 
					7d19ad401b | ||
| 
						 | 
					985577ce79 | ||
| 
						 | 
					24e20101d5 | ||
| 
						 | 
					76c884eb9f | ||
| 
						 | 
					7041dbab27 | ||
| 
						 | 
					661051fde4 | ||
| 
						 | 
					36cba5ce18 | ||
| 
						 | 
					4753f30c53 | ||
| 
						 | 
					d719e240d2 | ||
| 
						 | 
					e35faee278 | ||
| 
						 | 
					fd3417a09a | ||
| 
						 | 
					1719709648 | ||
| 
						 | 
					d37aa3378e | ||
| 
						 | 
					f017d32860 | ||
| 
						 | 
					7b23edcb29 | ||
| 
						 | 
					e48c4b4e84 | ||
| 
						 | 
					aeca44c7aa | ||
| 
						 | 
					af6ae8e419 | ||
| 
						 | 
					5cf88ba3b7 | ||
| 
						 | 
					f901ba5591 | ||
| 
						 | 
					7deea96bc3 | ||
| 
						 | 
					48dfb9bd08 | ||
| 
						 | 
					85372559fa | ||
| 
						 | 
					98972b80ef | ||
| 
						 | 
					d950244232 | ||
| 
						 | 
					fd898829c3 | ||
| 
						 | 
					b0158628bb | ||
| 
						 | 
					0f69a7b391 | ||
| 
						 | 
					72773117e5 | ||
| 
						 | 
					06806f5a6e | ||
| 
						 | 
					a01c785ec8 | ||
| 
						 | 
					502e206371 | ||
| 
						 | 
					8fba1bc6a9 | ||
| 
						 | 
					f43803d6d4 | ||
| 
						 | 
					338cba6350 | ||
| 
						 | 
					2a15066062 | ||
| 
						 | 
					add86bc566 | ||
| 
						 | 
					e9b4eaaeb9 | ||
| 
						 | 
					07605051f5 | ||
| 
						 | 
					998356484b | ||
| 
						 | 
					e97617ad60 | ||
| 
						 | 
					9685c3afa8 | ||
| 
						 | 
					c209b9a72f | ||
| 
						 | 
					4999b769ba | ||
| 
						 | 
					d8b5ba2161 | ||
| 
						 | 
					6f4a4a91cf | ||
| 
						 | 
					0049f0d72e | ||
| 
						 | 
					4ea66fc0fd | ||
| 
						 | 
					8426620572 | ||
| 
						 | 
					76aece0a3f | ||
| 
						 | 
					508e7f77a0 | ||
| 
						 | 
					d250a829cb | ||
| 
						 | 
					2fada0c31c | ||
| 
						 | 
					e6ad08733d | ||
| 
						 | 
					a8d83b5e1c | ||
| 
						 | 
					9392b74cbc | ||
| 
						 | 
					e09624efd0 | ||
| 
						 | 
					d4d7429de4 | ||
| 
						 | 
					b97cef86a3 | ||
| 
						 | 
					70615a172b | ||
| 
						 | 
					d399ca90d3 | ||
| 
						 | 
					bbc9695075 | ||
| 
						 | 
					c8fceeb75b | ||
| 
						 | 
					036cb4556e | ||
| 
						 | 
					e7b06a0b06 | ||
| 
						 | 
					c0067113e9 | ||
| 
						 | 
					ce4349a188 | ||
| 
						 | 
					224085dfca | ||
| 
						 | 
					9b3262a5fe | ||
| 
						 | 
					86856b6d54 | ||
| 
						 | 
					d5bf08329e | ||
| 
						 | 
					60efce8404 | ||
| 
						 | 
					83164f456a | ||
| 
						 | 
					c0141bcfee | ||
| 
						 | 
					8dfe9ef1cf | ||
| 
						 | 
					73d713b670 | ||
| 
						 | 
					db6c3573c1 | ||
| 
						 | 
					c8cbdaef8a | ||
| 
						 | 
					2c7243b87d | ||
| 
						 | 
					46515dd5d3 | ||
| 
						 | 
					7eb799adc6 | ||
| 
						 | 
					c85b61bbd0 | ||
| 
						 | 
					045ff8b789 | ||
| 
						 | 
					7b7f197439 | ||
| 
						 | 
					9e1c462836 | ||
| 
						 | 
					e97e8309cb | ||
| 
						 | 
					8c5be1a47d | ||
| 
						 | 
					afef2e6732 | ||
| 
						 | 
					7b2051b55c | ||
| 
						 | 
					8e470a2d72 | ||
| 
						 | 
					35213d5cb2 | ||
| 
						 | 
					b24f1a8ac4 | ||
| 
						 | 
					5454ab577e | ||
| 
						 | 
					046c15a074 | ||
| 
						 | 
					ddb9dda894 | ||
| 
						 | 
					d7047bda13 | ||
| 
						 | 
					c7934f4d10 | ||
| 
						 | 
					c97dc06177 | ||
| 
						 | 
					76b1faa159 | ||
| 
						 | 
					1e0438857e | ||
| 
						 | 
					b6494effa6 | ||
| 
						 | 
					a359184b83 | ||
| 
						 | 
					ce50a3f627 | ||
| 
						 | 
					ee7d254329 | ||
| 
						 | 
					d674b22b39 | ||
| 
						 | 
					47954aba8e | ||
| 
						 | 
					09e18e9b64 | ||
| 
						 | 
					163ba86196 | ||
| 
						 | 
					e57e7d99d5 | ||
| 
						 | 
					7ad449303b | ||
| 
						 | 
					49b853de1a | ||
| 
						 | 
					03a81ad4be | ||
| 
						 | 
					eb046b6a61 | ||
| 
						 | 
					1bf62f9524 | ||
| 
						 | 
					9aca213a5f | ||
| 
						 | 
					ce8bb68200 | ||
| 
						 | 
					7ee562c5ac | ||
| 
						 | 
					bdb719004d | ||
| 
						 | 
					842ac96d48 | ||
| 
						 | 
					5bb9011fb4 | ||
| 
						 | 
					97564f50b8 | ||
| 
						 | 
					efcf6a0db3 | ||
| 
						 | 
					9e813784f7 | ||
| 
						 | 
					aaca03062b | ||
| 
						 | 
					c1242017e2 | ||
| 
						 | 
					5f1426a0a3 | ||
| 
						 | 
					e84225fb23 | ||
| 
						 | 
					32c0e64bfb | ||
| 
						 | 
					0793ff31f5 | ||
| 
						 | 
					d3c2c1b607 | ||
| 
						 | 
					893def7910 | ||
| 
						 | 
					f875639435 | ||
| 
						 | 
					70bb263d79 | ||
| 
						 | 
					536d7d6901 | ||
| 
						 | 
					6ea34316b0 | ||
| 
						 | 
					aeebe5c95c | ||
| 
						 | 
					eb62f95636 | ||
| 
						 | 
					c7ee746fe6 | ||
| 
						 | 
					9a062499b3 | ||
| 
						 | 
					0c876452d8 | ||
| 
						 | 
					3b6088f454 | ||
| 
						 | 
					719f14984b | ||
| 
						 | 
					2e480dbec5 | ||
| 
						 | 
					66910c7827 | ||
| 
						 | 
					0f5319bc52 | ||
| 
						 | 
					cd54b07e09 | ||
| 
						 | 
					b197e9739b | ||
| 
						 | 
					8dd32c0dd7 | ||
| 
						 | 
					08e049eb31 | ||
| 
						 | 
					d09e4a125c | ||
| 
						 | 
					8353db2bc4 | ||
| 
						 | 
					250d2a0c0a | ||
| 
						 | 
					46b3127bb5 | ||
| 
						 | 
					f1e9e3423d | ||
| 
						 | 
					158ee40f1b | ||
| 
						 | 
					713d052b64 | ||
| 
						 | 
					0e28436086 | ||
| 
						 | 
					3f7229f4e7 | ||
| 
						 | 
					1ae7f8c8a2 | ||
| 
						 | 
					8e63954c3f | ||
| 
						 | 
					0fbcd5f8b1 | ||
| 
						 | 
					71f84d48dc | ||
| 
						 | 
					867a635ab8 | ||
| 
						 | 
					3d2c9ceaf5 | ||
| 
						 | 
					47736b08ce | ||
| 
						 | 
					3f49e5f8ef | ||
| 
						 | 
					7c8575bfa5 | ||
| 
						 | 
					102a7e10cc | ||
| 
						 | 
					9148764d20 | ||
| 
						 | 
					ce619415de | ||
| 
						 | 
					745807007f | ||
| 
						 | 
					e85b3f70aa | ||
| 
						 | 
					edc0fe4fbe | ||
| 
						 | 
					3cceec9044 | ||
| 
						 | 
					18602855da | ||
| 
						 | 
					72c223f72e | ||
| 
						 | 
					c6b3c45412 | ||
| 
						 | 
					c60a04f530 | ||
| 
						 | 
					f7430ab1a6 | ||
| 
						 | 
					827398228c | ||
| 
						 | 
					a264bb36cb | ||
| 
						 | 
					c24e63ec4c | ||
| 
						 | 
					6519570839 | ||
| 
						 | 
					2c88544158 | ||
| 
						 | 
					d0722d3677 | ||
| 
						 | 
					d2b404763b | ||
| 
						 | 
					88fb9e4df3 | ||
| 
						 | 
					440ec276d3 | ||
| 
						 | 
					6e91b90c48 | ||
| 
						 | 
					0bfc8c5ed6 | ||
| 
						 | 
					63547c2ea1 | ||
| 
						 | 
					efecf1bbb7 | ||
| 
						 | 
					682b8c2a9c | ||
| 
						 | 
					88295e8c1e | ||
| 
						 | 
					6764f15fd0 | ||
| 
						 | 
					8b8ee8693e | ||
| 
						 | 
					fe89001166 | ||
| 
						 | 
					416a18377c | ||
| 
						 | 
					8fda38184c | ||
| 
						 | 
					280e9260f7 | ||
| 
						 | 
					22642c1095 | ||
| 
						 | 
					d68b2047b0 | ||
| 
						 | 
					7240f034e5 | ||
| 
						 | 
					97ce41e363 | ||
| 
						 | 
					31a8abc3b8 | ||
| 
						 | 
					6b49bfd4c4 | ||
| 
						 | 
					985b4aab3f | ||
| 
						 | 
					a4e7c3a61a | ||
| 
						 | 
					d82d8781c4 | ||
| 
						 | 
					b4c3f92ba3 | ||
| 
						 | 
					1c57d2eab8 | ||
| 
						 | 
					409de77b2c | ||
| 
						 | 
					3e22e24dc9 | ||
| 
						 | 
					17b1bdacfe | ||
| 
						 | 
					b570fdbc89 | ||
| 
						 | 
					cceb0f4e5e | ||
| 
						 | 
					04f8c7f7e2 | ||
| 
						 | 
					37aca89af7 | ||
| 
						 | 
					5445a496db | ||
| 
						 | 
					0ab93b142c | ||
| 
						 | 
					d39dc76949 | ||
| 
						 | 
					c6abd7b62b | ||
| 
						 | 
					0e572db832 | ||
| 
						 | 
					602bb15b47 | ||
| 
						 | 
					b4882285c4 | ||
| 
						 | 
					834b27bdad | ||
| 
						 | 
					7db148a5a1 | ||
| 
						 | 
					9e332095a2 | ||
| 
						 | 
					7bf950026b | ||
| 
						 | 
					f246444d89 | ||
| 
						 | 
					8e84aea1bf | ||
| 
						 | 
					d6a7a944cc | ||
| 
						 | 
					fb478d3c7b | ||
| 
						 | 
					24f8a8fdba | ||
| 
						 | 
					28bbe0ee19 | ||
| 
						 | 
					c21ca2062e | ||
| 
						 | 
					e3e289a27c | ||
| 
						 | 
					9540f6b9d3 | ||
| 
						 | 
					539943fb0f | ||
| 
						 | 
					7a8ebffd40 | ||
| 
						 | 
					3d48f4e210 | ||
| 
						 | 
					667cdbea13 | ||
| 
						 | 
					f5fb4dd3b0 | ||
| 
						 | 
					5a2722d049 | ||
| 
						 | 
					f3b6cfbd01 | ||
| 
						 | 
					e239a6057c | ||
| 
						 | 
					9b1c439e15 | ||
| 
						 | 
					074f2e7c8f | ||
| 
						 | 
					4b1533e925 | ||
| 
						 | 
					6812a60668 | ||
| 
						 | 
					6f0cb846f0 | ||
| 
						 | 
					c79307692b | ||
| 
						 | 
					08b2f50ac7 | ||
| 
						 | 
					3577fa1e42 | ||
| 
						 | 
					cb6630582a | ||
| 
						 | 
					ca5fff31a7 | ||
| 
						 | 
					69b1f1e29e | ||
| 
						 | 
					4e2b642ed1 | ||
| 
						 | 
					3c26ce2a55 | ||
| 
						 | 
					7d2cf97c06 | ||
| 
						 | 
					cfce6296fb | ||
| 
						 | 
					1601703ff2 | ||
| 
						 | 
					905ad3e2b7 | ||
| 
						 | 
					15b7e95545 | ||
| 
						 | 
					247f6f038d | ||
| 
						 | 
					7c6df7cce3 | ||
| 
						 | 
					1a92306d51 | ||
| 
						 | 
					59e9fae1d5 | ||
| 
						 | 
					998094241d | ||
| 
						 | 
					d6c3313138 | ||
| 
						 | 
					b7e252b91a | ||
| 
						 | 
					6071beb15d | ||
| 
						 | 
					cda830686d | ||
| 
						 | 
					a29b888620 | 
							
								
								
									
										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): 
 | 
				
			||||||
							
								
								
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					*.swp
 | 
				
			||||||
 | 
					*.pid
 | 
				
			||||||
 | 
					test.pl
 | 
				
			||||||
 | 
					MYMETA.*
 | 
				
			||||||
 | 
					*.tar.gz
 | 
				
			||||||
 | 
					MANIFEST.*
 | 
				
			||||||
 | 
					*.komodo*
 | 
				
			||||||
 | 
					Makefile*
 | 
				
			||||||
 | 
					Build
 | 
				
			||||||
 | 
					_build
 | 
				
			||||||
 | 
					blib
 | 
				
			||||||
							
								
								
									
										36
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					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,
 | 
				
			||||||
 | 
					  configure_requires => {
 | 
				
			||||||
 | 
					    'Module::Build' => '0.42',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  # build_requires => {
 | 
				
			||||||
 | 
					  # },
 | 
				
			||||||
 | 
					  requires => {
 | 
				
			||||||
 | 
					    'SNMP' => '0',
 | 
				
			||||||
 | 
					    'Math::BigInt' => '0',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  # recommends => {
 | 
				
			||||||
 | 
					  # },
 | 
				
			||||||
 | 
					  test_requires => {
 | 
				
			||||||
 | 
					    'Test::More' => '0.88',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  # 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,6 +1,478 @@
 | 
				
			|||||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
 | 
					version 3.40 (2018-01-28)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
version 3.04_001 (2013-08-16)
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * #240 Support for CheckPoint devies through SNMP
 | 
				
			||||||
 | 
					  * #240 Cisco SB switches fixup
 | 
				
			||||||
 | 
					  * #244 Add Adtran support
 | 
				
			||||||
 | 
					  * #241 Vyatta/VyOS support
 | 
				
			||||||
 | 
					  * #246 Nexus VRF support (works with Netdisco)
 | 
				
			||||||
 | 
					  * #244 Improve Juniper model reporting
 | 
				
			||||||
 | 
					  * #240 Improve H3C reporting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * #243 Nexus additional debug lines should be hidden
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.39 (2017-12-17)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * #236 Enhanced Ubiquiti device support (L. Begnaud)
 | 
				
			||||||
 | 
					  * add HP J9774A model (H. Teulahti)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * fix scripts (F. Mass)
 | 
				
			||||||
 | 
					  * fix CiscoASA typos (laelly)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.38 (2017-10-23)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Layer2::Airespace several newer 802.11 data rates added
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * #232 Improve generic Info::Layer3 serial number detection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.37 (2017-07-11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Layer3::Juniper fixed to return os_ver for JUNOS 14.x and higher
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.36 (2017-06-28)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Migrate to Module::Build for distribution maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.35 (2017-06-28)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Include loading of LLDP-EXT-MED-MIB in LLDP.pm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * #180 support CiscoConfig on Nexus (sf.net:scratchfury)
 | 
				
			||||||
 | 
					  * #50 remove interface specific part from vrf interfaces on IOS (W. Vandersmissen)
 | 
				
			||||||
 | 
					  * #211 f5 class should respect UseEnums when faking i_type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.34 (2016-11-20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Support Cisco IPS Modules homed on the Cisco ASA (M. Kraus)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Serial number on Nexus 9372 (genereic check for ID before using) (M. Caines)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.33 (2016-04-27)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Move author-only tests to xt directory so they aren't run on installation
 | 
				
			||||||
 | 
					    by users
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Correct device serial number reporting for Cisco Nexus 5k switches with
 | 
				
			||||||
 | 
					    software version >= 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.32 (2016-04-26)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Add 200 Mbps and 2.0 Gbps aliases to SPEED_MAP
 | 
				
			||||||
 | 
					  * Add Palo Alto support
 | 
				
			||||||
 | 
					  * Add VMware support
 | 
				
			||||||
 | 
					  * Support for propMultiplexor as ifType
 | 
				
			||||||
 | 
					  * Add device MAC to APC UPS
 | 
				
			||||||
 | 
					  * [#61] Report APC model for PDU products
 | 
				
			||||||
 | 
					  * Removed DeviceMatrix from the distribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Support undefined (noSuchInstance) values in Offline mode
 | 
				
			||||||
 | 
					  * Do not init table cache if Cache provided by user
 | 
				
			||||||
 | 
					  * Avoid deep recusion when AUTOLOAD and carp collide
 | 
				
			||||||
 | 
					  * Detect Cisco VG350s as L3 devices instead of APs
 | 
				
			||||||
 | 
					  * fix for 'Use of inherited AUTOLOAD for non-method SNMP::Info::Layer2::HP::agg_ports_ifstack() is deprecated'
 | 
				
			||||||
 | 
					  * Workaround in IPv6.pm to deal with possibly incorrect IPV6-MIB implementations
 | 
				
			||||||
 | 
					  * [#71] AUTOLOAD typo-catcher search for SNMP::Info no longer anchored
 | 
				
			||||||
 | 
					  * [#70] Respect version/comm/secname on passed Session obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.31 (2016-01-22)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Support for CiscoSB OS and Version (D. Tuecks)
 | 
				
			||||||
 | 
					  * SONMP support for Enhanced Topology Table
 | 
				
			||||||
 | 
					  * Add support for channelized interfaces in L3::Passport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Correct link to MIB tarball
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.30 (2015-11-16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * RT #106254: Add new sysObjectID mapping for Ubiquiti
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Correct link to MIB tarball
 | 
				
			||||||
 | 
					  * Correct port indexing of newer VSP 4K and 8K in L3::Passport
 | 
				
			||||||
 | 
					  * Statistics in the sysIfxStatTable are 64-bit counters, so they should
 | 
				
			||||||
 | 
					    override the 64-bit methods.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.29 (2015-10-13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Add IPv6::ipv6_addr() method to map IPv6 interface address indexes to actual addresses
 | 
				
			||||||
 | 
					  * Add support for (remote) IPv6 addresses to LLDP::lldp_addr()
 | 
				
			||||||
 | 
					  * Add LLDP::lldp_ipv6() and LLDP::lldp_mac() so that remote management
 | 
				
			||||||
 | 
					    addresses of specific types can be requested
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.28 (2015-06-18)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Add Layer3::Huawei class for Huawei Quidway switches
 | 
				
			||||||
 | 
					  * Modified generic Layer3::Cisco class: use community based indexing if
 | 
				
			||||||
 | 
					    the device returns a value for vtpVersion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Correct port indexing of VSP 4K in L3::Passport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.27 (2015-05-05)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Cisco Aironet PSU information
 | 
				
			||||||
 | 
					  * Only log adding mibdirs at debug level 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * [#221] Drop Cisco Voice VLAN 4096
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.26 (2015-03-07)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Add fan and psu reporting to Layer3::Dell
 | 
				
			||||||
 | 
					  * Include Voice VLANs in (tagged) VLAN Membership on Cisco devices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Fix typo in MRO::print_superclasses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.25 (2015-02-25)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Add new model name mappings for to Layer2::HP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.24 (2015-02-04)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Support RSTP and ieee8021d STP operating modes in RapidCity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Fix single instance leafs defined in %FUNCS to behave like table leafs
 | 
				
			||||||
 | 
					    * Fix incorrect FDB ID to VLAN ID mapping in Bridge and L3:Enterasys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.23 (2014-12-09)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Update MIB used in L1::Asante
 | 
				
			||||||
 | 
					    * Enhanced STP support for L3::Extreme
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Fix Cisco VLAN membership issue introduced in 3.22 related to capturing
 | 
				
			||||||
 | 
					      port VLANs on Cisco interfaces which are configured for trunking but
 | 
				
			||||||
 | 
					      are not in operational trunking mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.22 (2014-12-02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [NEW FEATURES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Support obtaining FDB in Avaya SPBM edge deployments in L2::Baystack
 | 
				
			||||||
 | 
					      NOTE: This requires a RAPID-CITY MIB with the rcBridgeSpbmMacTable
 | 
				
			||||||
 | 
					    * Support for Fortinet devices in new class L3::Fortinet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Include LLDP support in base Layer2 and Layer3 classes. Due to the
 | 
				
			||||||
 | 
					      widespread adoption of LLDP, this should improve mapping networks
 | 
				
			||||||
 | 
					      when devices aren't supported in a more specific class.
 | 
				
			||||||
 | 
					    * No longer ignore interfaces based on name, in base L2/L3/L7 device
 | 
				
			||||||
 | 
					      classes. For several device classes SNMP::Info will now return tunnel
 | 
				
			||||||
 | 
					      interfaces and/or loopbacks, if present.
 | 
				
			||||||
 | 
					    * Use dot1qVlanCurrentTable if available to capture dynamic and static
 | 
				
			||||||
 | 
					      VLANs, fall back to dot1qVlanStaticTable if not available.
 | 
				
			||||||
 | 
					    * New method i_vlan_membership_untagged() for VLANs transmitted as
 | 
				
			||||||
 | 
					      untagged frames.
 | 
				
			||||||
 | 
					    * Capture Aruba AP hardware and software version when available
 | 
				
			||||||
 | 
					    * New STP methods to support gathering information from devices running
 | 
				
			||||||
 | 
					      mutiple STP instances such as PVST and MST
 | 
				
			||||||
 | 
					    * Enhanced STP support for Avaya and Foundry classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * [#64] Misdetection: Wireless APs, add products MIB to L2::3Com
 | 
				
			||||||
 | 
					    * Use FDB ID to VID mapping if available to determine end station VLAN
 | 
				
			||||||
 | 
					      rather than assuming they are the same.
 | 
				
			||||||
 | 
					    * Capture port VLANs on Cisco interfaces which are configured for
 | 
				
			||||||
 | 
					      trunking but are not in operational trunking mode
 | 
				
			||||||
 | 
					    * Correct munging of stp_p_port(), i_stp_port(), and stp_root() methods
 | 
				
			||||||
 | 
					      in Bridge
 | 
				
			||||||
 | 
					    * In LLDP.pm don't create a variable in a conditional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.20 (2014-09-08)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [NEW FEATURES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Override layers in Juniper for routers with switch modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Update MANIFEST to include Ubiquiti files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.19 (2014-08-01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [NEW FEATURES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Support for Ubiquiti Access Points in new class L2::Ubiquiti (begemot)
 | 
				
			||||||
 | 
					    * Preliminary support for 3Com switches in new class L2::3Com (begemot)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Fix Avaya detection lldp_port()
 | 
				
			||||||
 | 
					    * Silence uninitialized value warning in L3::Cisco
 | 
				
			||||||
 | 
					    * H3C fixes (begemot)
 | 
				
			||||||
 | 
					    * Only use L2::ZyXEL_DSLAM for ZyXEL DSL modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.18 (2014-07-02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Pseudo ENTITY-MIB methods added to L3::Tasman for hardware information
 | 
				
			||||||
 | 
					    * Capture VPC Keepalive IP addresses in L3::Nexus (jeroenvi)
 | 
				
			||||||
 | 
					    * L2::Netgear inheritance clean up and removal of unnecessary c_* methods
 | 
				
			||||||
 | 
					      defined in Info base class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Correctly identify device type (class) for instantiated objects which
 | 
				
			||||||
 | 
					      have overridden layers.
 | 
				
			||||||
 | 
					    * [#58] Fix inheritance in L3::FWSM and L3::CiscoASA
 | 
				
			||||||
 | 
					    * [#71] Don't try to match on a false port description in lldp_if
 | 
				
			||||||
 | 
					    * [#54] Possible bad values returned for cdp_id and lldp_port with some HP
 | 
				
			||||||
 | 
					      gear (Joel Leonhardt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.17 (2014-06-23)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * POD tests are not required for distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.16 (2014-06-23)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Add method resolution discovery in SNMP::Info::MRO helper module
 | 
				
			||||||
 | 
					    * Consolidate CiscoImage class into CiscoStats class
 | 
				
			||||||
 | 
					    * Clean up inheritance for Cisco classes.  With this change
 | 
				
			||||||
 | 
					      all applicable classes now inherit CiscoAgg, CiscoStpExtensions,
 | 
				
			||||||
 | 
					      CiscoPortSecurity, CiscoPower, and LLDP classes.
 | 
				
			||||||
 | 
					    * Remove inheritance of classes the devices do not support in L3::FWSM
 | 
				
			||||||
 | 
					      and L3::CiscoASA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Use CiscoVTP methods to get interface VLAN in L3::Cisco rather than
 | 
				
			||||||
 | 
					      solely relying on the interface description.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.15 (2014-07-10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [NEW FEATURES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Offline mode and Cache export/priming.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Return serial number for Cisco 3850 from entPhysicalSerialNum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Cisco SB serial number probably did not work
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.14 (2014-06-07)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Improvements to Mikrotik module (Alex Z)
 | 
				
			||||||
 | 
					    * Don't unshift length from broken lldpRemManAddrTable implementations (G. Shtern)
 | 
				
			||||||
 | 
					    * 802.3ad LAG support in Layer3::H3C
 | 
				
			||||||
 | 
					    * Add LLDP capabilities to Layer2::HPVC class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Return correct VLAN info with qb_fw_table() on Layer2::HP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.13 (2014-03-27)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Cisco PAgP support added to LAG method
 | 
				
			||||||
 | 
					    * HP ProCurve LAG support by inheriting Info::Aggregate class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.12 (2014-02-10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Modify L3::Passport to obtain forwarding table information from
 | 
				
			||||||
 | 
					      RAPID-CITY if information is not available in either Q-BRIDGE-MIB or
 | 
				
			||||||
 | 
					      BRIDGE-MIB.  Needed for VSP 9000 prior to version 4.x (Tobias Gerlach)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * [#52] NETSCREEN-IP-ARP-MIB considered harmful
 | 
				
			||||||
 | 
					    * Foundry/Brocade aggreate port master ifIndex resolved properly
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.11 (2014-01-26)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [NEW FEATURES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * [#31] port-channel (aggregate) support.  Aggregate support added in new
 | 
				
			||||||
 | 
					      agg_ports() method.  Inital support added for Arista (ifStack),
 | 
				
			||||||
 | 
					      Avaya (MLT), Brocade (MST), and Cisco (802.3ad).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Use Q-BRIDGE-MIB as default with fallback to BRIDGE-MIB across all
 | 
				
			||||||
 | 
					      classes for the fw_mac, fw_port, and fw_status methods
 | 
				
			||||||
 | 
					    * Additional support for Avaya 8800 series in L3::Passport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Modify cdp_cap() to handle devices which return space delimited strings
 | 
				
			||||||
 | 
					      for cdpCacheCapabilities rather than hex strings
 | 
				
			||||||
 | 
					    * [#51] Netdisco shows broken topology for devices with no alias entry
 | 
				
			||||||
 | 
					      for primary IP - Collect nsIfMngIp when getting IP interfaces in
 | 
				
			||||||
 | 
					      L3::Netscreen
 | 
				
			||||||
 | 
					    * Fix Extreme XOS i_vlan_membership - Revert [28bbe0], fix bug with
 | 
				
			||||||
 | 
					      untagged being added to @ret twice (Robert Kerr)
 | 
				
			||||||
 | 
					    * Skip default CPU management addresses on VSP and 8800/8600 series in
 | 
				
			||||||
 | 
					      L3::Passport to prevent erroneous duplicate addresses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.10 (2013-12-16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Data values of zero are now sent to munge method instead of skipped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.09 (2013-12-15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [NEW FEATURES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * [#45] IBM (Blade Network Technologies) Rackswitch support in new class
 | 
				
			||||||
 | 
					      L3::IBMGbTor
 | 
				
			||||||
 | 
					    * [] set_i_untagged combines both set_i_vlan and set_i_pvid in one method
 | 
				
			||||||
 | 
					    * [#41] Riverbed Steelhead support added in new class L3::Steelhead
 | 
				
			||||||
 | 
					    * New c_cap(), cdp_cap(), and lldp_cap() methods which return a hash of
 | 
				
			||||||
 | 
					      arrays with each array containing the system capabilities reported as
 | 
				
			||||||
 | 
					      supported by the remote system via CDP or LLDP.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Remove "Switch" from model name in L3::Foundry
 | 
				
			||||||
 | 
					    * [#49] IOS-XR support, add identification of IOS XR and version in
 | 
				
			||||||
 | 
					      CiscoStats
 | 
				
			||||||
 | 
					    * Aruba POE Support
 | 
				
			||||||
 | 
					    * Aruba utilizes Q-BRIDGE-MIB when available for VLAN information to
 | 
				
			||||||
 | 
					      better support wired switches
 | 
				
			||||||
 | 
					    * Add lldp_platform() method which uses lldp_rem_sysdesc() or
 | 
				
			||||||
 | 
					      lldp_rem_sysname() to provide a clue to type of remote LLDP capable
 | 
				
			||||||
 | 
					      device.
 | 
				
			||||||
 | 
					    * [RT#78232] Extend cdpCacheCapabilities to show more CDP bits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Modify _xos_i_vlan_membership() in L3::Extreme to only include tagged
 | 
				
			||||||
 | 
					      ports
 | 
				
			||||||
 | 
					    * When determining the BSSID in Airespace there is only one hexadecimal
 | 
				
			||||||
 | 
					      digit available so skip if outside the range of 1-16, 17 is reserved
 | 
				
			||||||
 | 
					      for 3rd party AP's
 | 
				
			||||||
 | 
					    * Don't assume entity index 1 is the chassis and has serial in Layer3
 | 
				
			||||||
 | 
					    * Capture serial number on newer Aruba devices
 | 
				
			||||||
 | 
					    * munge_bits() correctly unpacks BITS
 | 
				
			||||||
 | 
					    * Fix for single instance table leafs in test_class_mocked.pl
 | 
				
			||||||
 | 
					    * Fix power module indexing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.08 (2013-10-22)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Rewrite of L3::Aruba, now supports pseudo ENTITY-MIB methods to gather
 | 
				
			||||||
 | 
					      module information, more interface information for APs, more
 | 
				
			||||||
 | 
					      wireless information to include client stats, and arpnip information
 | 
				
			||||||
 | 
					      from wireless clients.  WARNING: AP device interfaces are now based on
 | 
				
			||||||
 | 
					      AP MAC and radio versus BSSID to align with other wireless classes.
 | 
				
			||||||
 | 
					    * [#64] Add i_speed_admin() to L2::2900 (psychiatric)
 | 
				
			||||||
 | 
					    * [#66] Support for VSS via CISCO-VIRTUAL-SWITCH-MIB in L3::6500
 | 
				
			||||||
 | 
					    * [#67] Add the possibility to set speed for Layer3::C4000 (psychiatric)
 | 
				
			||||||
 | 
					    * [#69] set speed and duplex on Cisco VSS system (psychiatric)
 | 
				
			||||||
 | 
					    * munge_null() now removes all non-printable control characters
 | 
				
			||||||
 | 
					    * Support Aironet standalone access points (Layer2::Aironet) running IOS15
 | 
				
			||||||
 | 
					    * lldp_port() returns port ID instead of port description if the port ID
 | 
				
			||||||
 | 
					      subtype is "interface name".  This improves the ability to correlate
 | 
				
			||||||
 | 
					      ports by name when a port description is also set.
 | 
				
			||||||
 | 
					    * Add docs note about make_snmpdata.pl under EXTENDING SNMP::Info
 | 
				
			||||||
 | 
					    * [#46] Brocade (Foundry) Module Support
 | 
				
			||||||
 | 
					    * Brocade (Foundry) POE Support
 | 
				
			||||||
 | 
					    * Support peth_port_power() power supplied by PoE ports in L2::Baystack
 | 
				
			||||||
 | 
					    * Update test_class.pl utility to allow ignore of snmp.conf and test
 | 
				
			||||||
 | 
					      summarize more standard class methods
 | 
				
			||||||
 | 
					    * On EOS, the LLDP port ID is a dot1d port
 | 
				
			||||||
 | 
					    * Use LLDP in Layer3::Aruba, for switches
 | 
				
			||||||
 | 
					    * Clean up more model names in L2::Baystack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * [#68] Fix device_port entries for switches with non-unique
 | 
				
			||||||
 | 
					      ifDesc (Nic Bernstein)
 | 
				
			||||||
 | 
					    * Don't try to munge undef values
 | 
				
			||||||
 | 
					    * [#49] Perl 5.18 UNIVERSAL::can change could cause infinite loop
 | 
				
			||||||
 | 
					    * Silence warning from uninitialized variable in L3::Passport e_descr()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.07 (2013-10-01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Support for Pica8 switches in L3::Pica8
 | 
				
			||||||
 | 
					    * Factor out cache/munge code from global/attr methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   [BUG FIXES]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   * [#48] Switch duplicate J9624A for J9626A in Layer2/HP (R. Kerr)
 | 
				
			||||||
 | 
					   * Correct device serial number reporting for Nexus devices
 | 
				
			||||||
 | 
					   * Override ipAddrTable methods in L3::Nexus as some versions do not
 | 
				
			||||||
 | 
					     index the table with the IPv4 address in accordance with the MIB
 | 
				
			||||||
 | 
					     definition.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 3.05 (2013-08-16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   [ENHANCEMENTS]
 | 
					   [ENHANCEMENTS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,7 +487,6 @@ version 3.04_001 (2013-08-16)
 | 
				
			|||||||
    * Properly report hardware version, Serial No. and OS Version for
 | 
					    * Properly report hardware version, Serial No. and OS Version for
 | 
				
			||||||
      Netgear.
 | 
					      Netgear.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
version 3.03 (2013-07-11)
 | 
					version 3.03 (2013-07-11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [BUG FIXES]
 | 
					    [BUG FIXES]
 | 
				
			||||||
@@ -310,7 +781,7 @@ version 1.05 (11/25/07) - CVS only. No official release
 | 
				
			|||||||
    + Added support for Cisco (Airespace) wireless controllers as new class
 | 
					    + Added support for Cisco (Airespace) wireless controllers as new class
 | 
				
			||||||
      L2::Airespace
 | 
					      L2::Airespace
 | 
				
			||||||
    + Added support for Nortel Ethernet Routing Switch 2500 series and
 | 
					    + Added support for Nortel Ethernet Routing Switch 2500 series and
 | 
				
			||||||
      Business Ethernet Switches (David Siebörger)
 | 
					      Business Ethernet Switches (David Siebörger)
 | 
				
			||||||
    + Update of L3::Foundry to support all Foundry devices including newer
 | 
					    + Update of L3::Foundry to support all Foundry devices including newer
 | 
				
			||||||
      switches.  Depreciate L2::Foundry.
 | 
					      switches.  Depreciate L2::Foundry.
 | 
				
			||||||
    + Added generic device type detection using IANA assigned enterpise
 | 
					    + Added generic device type detection using IANA assigned enterpise
 | 
				
			||||||
							
								
								
									
										1045
									
								
								DeviceMatrix.txt
									
									
									
									
									
								
							
							
						
						
									
										1045
									
								
								DeviceMatrix.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,658 +0,0 @@
 | 
				
			|||||||
# SNMP::Info::Layer3::Aruba
 | 
					 | 
				
			||||||
# $Id$
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2008 Eric Miller
 | 
					 | 
				
			||||||
# All rights reserved.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Redistribution and use in source and binary forms, with or without
 | 
					 | 
				
			||||||
# modification, are permitted provided that the following conditions are met:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
					 | 
				
			||||||
#       this list of conditions and the following disclaimer.
 | 
					 | 
				
			||||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
					 | 
				
			||||||
#       notice, this list of conditions and the following disclaimer in the
 | 
					 | 
				
			||||||
#       documentation and/or other materials provided with the distribution.
 | 
					 | 
				
			||||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
					 | 
				
			||||||
#       names of its contributors may be used to endorse or promote products
 | 
					 | 
				
			||||||
#       derived from this software without specific prior written permission.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
					 | 
				
			||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
					 | 
				
			||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
					 | 
				
			||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
					 | 
				
			||||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
					 | 
				
			||||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
					 | 
				
			||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
					 | 
				
			||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
					 | 
				
			||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
					 | 
				
			||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
					 | 
				
			||||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package SNMP::Info::Layer3::Aruba;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					 | 
				
			||||||
use Exporter;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::Aruba::ISA       = qw/SNMP::Info::Layer3 Exporter/;
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::Aruba::EXPORT_OK = qw//;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MIBS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					 | 
				
			||||||
    'WLSX-SWITCH-MIB'         => 'wlsxHostname',
 | 
					 | 
				
			||||||
    'WLSX-WLAN-MIB'           => 'wlanAPFQLN',
 | 
					 | 
				
			||||||
    'WLSR-AP-MIB'             => 'wlsrHideSSID',
 | 
					 | 
				
			||||||
    #'ALCATEL-IND1-TP-DEVICES' => 'familyOmniAccessWireless',
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%FUNCS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # WLSX-SWITCH-MIB::wlsxSwitchAccessPointTable
 | 
					 | 
				
			||||||
    # Table index leafs do not return information
 | 
					 | 
				
			||||||
    # therefore unable to use apBSSID.  We extract
 | 
					 | 
				
			||||||
    # the information from the IID instead.
 | 
					 | 
				
			||||||
    'aruba_ap_name'      => 'apLocation',
 | 
					 | 
				
			||||||
    'aruba_ap_ip'        => 'apIpAddress',
 | 
					 | 
				
			||||||
    'aruba_ap_essid'     => 'apESSID',
 | 
					 | 
				
			||||||
    'aruba_ap_ssidbcast' => 'wlsrHideSSID',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # WLSX-WLAN-MIB::wlsxWlanAPTable
 | 
					 | 
				
			||||||
    'aruba_perap_fqln'   => 'wlanAPFQLN',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # WLSR-AP-MIB::wlsrConfigTable
 | 
					 | 
				
			||||||
    'aruba_ap_channel' => 'apCurrentChannel',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # WLSX-SWITCH-MIB::wlsxSwitchStationMgmtTable
 | 
					 | 
				
			||||||
    # Table index leafs do not return information
 | 
					 | 
				
			||||||
    # therefore unable to use staAccessPointBSSID
 | 
					 | 
				
			||||||
    # or staPhyAddress.  We extract the information from
 | 
					 | 
				
			||||||
    # the IID instead.
 | 
					 | 
				
			||||||
    #'fw_port'             => 'staAccessPointBSSID',
 | 
					 | 
				
			||||||
    #'fw_mac'              => 'staPhyAddress',
 | 
					 | 
				
			||||||
    'fw_user' => 'staUserName',
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub layers {
 | 
					 | 
				
			||||||
    return '00000111';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub os {
 | 
					 | 
				
			||||||
    my $aruba = shift;
 | 
					 | 
				
			||||||
    my %osmap = (
 | 
					 | 
				
			||||||
        'alcatel-lucent' => 'aos-w',
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
    return $osmap{$aruba->vendor()} || 'airos';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub vendor {
 | 
					 | 
				
			||||||
    my $aruba = shift;
 | 
					 | 
				
			||||||
    my $id     = $aruba->id() || 'undef';
 | 
					 | 
				
			||||||
    my %oidmap = (
 | 
					 | 
				
			||||||
                  6486 => 'alcatel-lucent',
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
    $id = $1 if (defined($id) && $id =~ /^\.1\.3\.6\.1\.4\.1\.(\d+)/);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (defined($id) and exists($oidmap{$id})) {
 | 
					 | 
				
			||||||
        return $oidmap{$id};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        return 'aruba';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub os_ver {
 | 
					 | 
				
			||||||
    my $aruba = shift;
 | 
					 | 
				
			||||||
    my $descr = $aruba->description();
 | 
					 | 
				
			||||||
    return unless defined $descr;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ( $descr =~ m/Version\s+(\d+\.\d+\.\d+\.\d+)/ ) {
 | 
					 | 
				
			||||||
        return $1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub model {
 | 
					 | 
				
			||||||
    my $aruba = shift;
 | 
					 | 
				
			||||||
    my $id    = $aruba->id();
 | 
					 | 
				
			||||||
    return unless defined $id;
 | 
					 | 
				
			||||||
    my $model = &SNMP::translateObj($id);
 | 
					 | 
				
			||||||
    return $id unless defined $model;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $model;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Thin APs do not support ifMIB requirement
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# We return all BSSIDs as pseudo-ports on the controller.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_index {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index  = $aruba->orig_i_index($partial)  || {};
 | 
					 | 
				
			||||||
    my $ap_index = $aruba->aruba_ap_name($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %if_index;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $if_index{$iid} = $index;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Get Attached APs as Interfaces
 | 
					 | 
				
			||||||
    foreach my $ap_id ( keys %$ap_index ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Convert the 0.254.123.456 index entry to a MAC address.
 | 
					 | 
				
			||||||
        my $mac = join( ':',
 | 
					 | 
				
			||||||
            map { sprintf( "%02x", $_ ) } split( /\./, $ap_id ) );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $if_index{$ap_id} = $mac;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%if_index;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub interfaces {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index = $aruba->i_index($partial)       || {};
 | 
					 | 
				
			||||||
    my $i_descr = $aruba->i_description($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %if;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( $index =~ /^\d+$/ ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Replace the Index with the ifDescr field.
 | 
					 | 
				
			||||||
            my $port = $i_descr->{$iid};
 | 
					 | 
				
			||||||
            next unless defined $port;
 | 
					 | 
				
			||||||
            $if{$iid} = $port;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        elsif ( $index =~ /(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/ ) {
 | 
					 | 
				
			||||||
            $if{$index} = $index;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%if;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Most items are indexed by BSSID.
 | 
					 | 
				
			||||||
# aruba_perap_fqln is indexed by AP, so we use the
 | 
					 | 
				
			||||||
# [haven't decided yet] index to figure out all of the
 | 
					 | 
				
			||||||
# BSSIDs served by a given radio.
 | 
					 | 
				
			||||||
sub aruba_ap_fqln {
 | 
					 | 
				
			||||||
    my $aruba  = shift;
 | 
					 | 
				
			||||||
    # I don't think $partial is meaningful in this context
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $perap_fqln = $aruba->aruba_perap_fqln();
 | 
					 | 
				
			||||||
    my $channel = $aruba->wlanAPBssidChannel();
 | 
					 | 
				
			||||||
    my $aruba_ap_fqln = {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Channel index is: AP, radio, BSSID
 | 
					 | 
				
			||||||
    foreach my $idx (keys %$channel) {
 | 
					 | 
				
			||||||
	my @oid = split(/\./, $idx );
 | 
					 | 
				
			||||||
	my $ap = join(".", @oid[0..5]);
 | 
					 | 
				
			||||||
        my $bssid = join(".", @oid[7..12]);
 | 
					 | 
				
			||||||
	$aruba_ap_fqln->{$bssid} = $perap_fqln->{$ap};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $aruba_ap_fqln;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_name {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index = $aruba->i_index($partial)       || {};
 | 
					 | 
				
			||||||
    my $i_name2 = $aruba->orig_i_name($partial)   || {};
 | 
					 | 
				
			||||||
    my $ap_name = $aruba->aruba_ap_name($partial) || {};
 | 
					 | 
				
			||||||
    my $ap_fqln = $aruba->aruba_ap_fqln($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_name;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( $index =~ /^\d+$/ ) {
 | 
					 | 
				
			||||||
            my $name = $i_name2->{$iid};
 | 
					 | 
				
			||||||
            next unless defined $name;
 | 
					 | 
				
			||||||
            $i_name{$index} = $name;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        elsif ( $index =~ /(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/ ) {
 | 
					 | 
				
			||||||
            my $name = $ap_fqln->{$iid} || $ap_name->{$iid};
 | 
					 | 
				
			||||||
            next unless defined $name;
 | 
					 | 
				
			||||||
            $i_name{$index} = $name;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_name;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_ssidlist {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index = $aruba->i_index($partial)        || {};
 | 
					 | 
				
			||||||
    my $ap_ssid = $aruba->aruba_ap_essid($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_ssid;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( $index =~ /(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/ ) {
 | 
					 | 
				
			||||||
            my $ssid = $ap_ssid->{$iid};
 | 
					 | 
				
			||||||
            next unless defined $ssid;
 | 
					 | 
				
			||||||
            $i_ssid{$index} = $ssid;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_ssid;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_80211channel {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index = $aruba->i_index($partial)          || {};
 | 
					 | 
				
			||||||
    my $ap_ch   = $aruba->aruba_ap_channel($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_ch;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( $index =~ /(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/ ) {
 | 
					 | 
				
			||||||
            my $ch = $ap_ch->{$iid};
 | 
					 | 
				
			||||||
            next unless defined $ch;
 | 
					 | 
				
			||||||
            $i_ch{$index} = $ch;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_ch;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_ssidbcast {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index = $aruba->i_index($partial)            || {};
 | 
					 | 
				
			||||||
    my $ap_bc   = $aruba->aruba_ap_ssidbcast($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_bc;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( $index =~ /(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/ ) {
 | 
					 | 
				
			||||||
            my $bc = $ap_bc->{$iid};
 | 
					 | 
				
			||||||
            next unless defined $bc;
 | 
					 | 
				
			||||||
            $bc = ( $bc ? 0 : 1 );
 | 
					 | 
				
			||||||
            $i_bc{$index} = $bc;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_bc;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Wireless switches do not support the standard Bridge MIB
 | 
					 | 
				
			||||||
# Wired switches currently (AOS 7.2.0.0) do, but it seems only for
 | 
					 | 
				
			||||||
# dot1q ports or access ports that are 'untrusted' ?
 | 
					 | 
				
			||||||
sub bp_index {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_index  = $aruba->orig_i_index($partial)  || {};
 | 
					 | 
				
			||||||
    my $ap_index = $aruba->aruba_ap_name($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Collect standard bp_index first
 | 
					 | 
				
			||||||
    my $wired_bp_index = $aruba->SUPER::bp_index($partial) || {};
 | 
					 | 
				
			||||||
    my %bp_index = %$wired_bp_index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_index ) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $index;
 | 
					 | 
				
			||||||
        next if exists $bp_index{$iid}; # Only augment bp_index, don't overwrite any existing mappings 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $bp_index{$iid} = $index;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Get Attached APs as Interfaces
 | 
					 | 
				
			||||||
    foreach my $ap_id ( keys %$ap_index ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Convert the 0.254.123.456 index entry to a MAC address.
 | 
					 | 
				
			||||||
        my $mac = join( ':',
 | 
					 | 
				
			||||||
            map { sprintf( "%02x", $_ ) } split( /\./, $ap_id ) );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $bp_index{$mac} = $mac;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%bp_index;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub fw_port {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $fw_idx = $aruba->fw_user($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $wired_fw_port = $aruba->SUPER::qb_fw_port($partial) || {};
 | 
					 | 
				
			||||||
    my %fw_port = %$wired_fw_port;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$fw_idx ) {
 | 
					 | 
				
			||||||
        if ( $iid
 | 
					 | 
				
			||||||
            =~ /(\d+\.\d+\.\d+\.\d+\.\d+\.\d+).(\d+\.\d+\.\d+\.\d+\.\d+\.\d+)/
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            my $port = join( ':',
 | 
					 | 
				
			||||||
                map { sprintf( "%02x", $_ ) } split( /\./, $2 ) );
 | 
					 | 
				
			||||||
            $fw_port{$iid} = $port;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%fw_port;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub fw_mac {
 | 
					 | 
				
			||||||
    my $aruba   = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $fw_idx = $aruba->fw_user($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $wired_fw_mac = $aruba->SUPER::qb_fw_mac($partial) || {};
 | 
					 | 
				
			||||||
    my %fw_mac = %$wired_fw_mac;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$fw_idx ) {
 | 
					 | 
				
			||||||
        if ( $iid
 | 
					 | 
				
			||||||
            =~ /(\d+\.\d+\.\d+\.\d+\.\d+\.\d+).(\d+\.\d+\.\d+\.\d+\.\d+\.\d+)/
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            my $mac = join( ':',
 | 
					 | 
				
			||||||
                map { sprintf( "%02x", $_ ) } split( /\./, $1 ) );
 | 
					 | 
				
			||||||
            $fw_mac{$iid} = $mac;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            next;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%fw_mac;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Return the BSSID in i_mac.
 | 
					 | 
				
			||||||
sub i_mac {
 | 
					 | 
				
			||||||
    my $aruba = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Start with the i_mac entries for the physical ports.
 | 
					 | 
				
			||||||
    my $i_mac = $aruba->orig_i_mac($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Add in all the BSSID entries.
 | 
					 | 
				
			||||||
    my $i_index  = $aruba->i_index($partial) || {};
 | 
					 | 
				
			||||||
    foreach my $iid (keys %$i_index) {
 | 
					 | 
				
			||||||
        my $index = $i_index->{$iid};
 | 
					 | 
				
			||||||
	if ($index =~ /:/) {
 | 
					 | 
				
			||||||
	    $i_mac->{$index} = $index;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $i_mac;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__END__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 NAME
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SNMP::Info::Layer3::Aruba - SNMP Interface to Aruba wireless switches
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 AUTHOR
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Eric Miller
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 SYNOPSIS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $aruba = new SNMP::Info(
 | 
					 | 
				
			||||||
                          AutoSpecify => 1,
 | 
					 | 
				
			||||||
                          Debug       => 1,
 | 
					 | 
				
			||||||
                          DestHost    => 'myswitch',
 | 
					 | 
				
			||||||
                          Community   => 'public',
 | 
					 | 
				
			||||||
                          Version     => 2
 | 
					 | 
				
			||||||
                        ) 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    or die "Can't connect to DestHost.\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $class = $aruba->class();
 | 
					 | 
				
			||||||
    print " Using device sub class : $class\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 DESCRIPTION
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SNMP::Info::Layer3::Aruba is a subclass of SNMP::Info that provides an
 | 
					 | 
				
			||||||
interface to Aruba wireless switches.  The Aruba platform utilizes
 | 
					 | 
				
			||||||
intelligent wireless switches which control thin access points.  The thin
 | 
					 | 
				
			||||||
access points themselves are unable to be polled for end station information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This class emulates bridge functionality for the wireless switch. This enables
 | 
					 | 
				
			||||||
end station MAC addresses collection and correlation to the thin access point
 | 
					 | 
				
			||||||
the end station is using for communication.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
					 | 
				
			||||||
after determining a more specific class using the method above. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 my $aruba = new SNMP::Info::Layer3::Aruba(...);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Inherited Classes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Required MIBs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item F<WLSX-SWITCH-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item F<WLSR-AP-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Inherited MIBs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 GLOBALS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These are methods that return scalar value from SNMP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->model()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns model type.  Cross references $aruba->id() with product IDs in the 
 | 
					 | 
				
			||||||
Aruba MIB.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->vendor()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 'aruba'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->os()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 'airos'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->os_ver()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the software version extracted from C<sysDescr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Overrides
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->layers()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 00000011.  Class emulates Layer 2 functionality for Thin APs through
 | 
					 | 
				
			||||||
proprietary MIBs.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 TABLE METHODS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These are methods that return tables of information in the form of a reference
 | 
					 | 
				
			||||||
to a hash.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Overrides
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->i_index()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to map of IIDs to Interface index. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Extends C<ifIndex> to support thin APs as device interfaces.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->interfaces()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to map of IIDs to ports.  Thin APs are implemented as device 
 | 
					 | 
				
			||||||
interfaces.  The thin AP BSSID is used as the port identifier.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->i_name()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Interface name.  Returns (C<ifName>) for Ethernet interfaces and
 | 
					 | 
				
			||||||
(C<wlanAPFQLN> or C<apLocation>) for thin AP interfaces.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->i_mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Interface MAC address.  Returns interface MAC address for Ethernet
 | 
					 | 
				
			||||||
interfaces and BSSID for thin AP interfaces.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->bp_index()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Simulates bridge MIB by returning reference to a hash containing the index for
 | 
					 | 
				
			||||||
both the keys and values.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->fw_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<staAccessPointBSSID>) as extracted from the IID.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->fw_mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<staPhyAddress>) as extracted from the IID.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->i_ssidlist()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  SSID's recognized by the radio interface.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<apESSID>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->i_ssidbcast()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Indicates whether the SSID is broadcast, true or
 | 
					 | 
				
			||||||
false.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<wlsrHideSSID>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->i_80211channel()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Current operating frequency channel of the radio
 | 
					 | 
				
			||||||
interface.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<apCurrentChannel>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_ap_fqln()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns F<aruba_perap_fqln> indexed by BSSID instead of by AP.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Aruba Switch AP Table  (C<wlsxSwitchAccessPointTable>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_ap_name()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<apLocation>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_ap_ip()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<apIpAddress>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_ap_essid()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<apESSID>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_ap_ssidbcast()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<wlsrHideSSID>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Aruba AP Table (C<wlsxWlanAPTable>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_perap_fqln()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<wlanAPFQLN>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Aruba Switch Station Management Table (C<wlsxSwitchStationMgmtTable>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->fw_user()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<staUserName>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Aruba Wireless AP Configuration Table (C<wlsrConfigTable>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aruba->aruba_ap_channel()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<apCurrentChannel>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=cut
 | 
					 | 
				
			||||||
@@ -1,509 +0,0 @@
 | 
				
			|||||||
# SNMP::Info::Layer3::Foundry - SNMP Interface to Foundry devices
 | 
					 | 
				
			||||||
# $Id$
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2002,2003 Regents of the University of California
 | 
					 | 
				
			||||||
# 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::Foundry;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					 | 
				
			||||||
use Exporter;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
use SNMP::Info::FDP;
 | 
					 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::Foundry::ISA = qw/SNMP::Info::FDP SNMP::Info::LLDP
 | 
					 | 
				
			||||||
    SNMP::Info::Layer3 Exporter/;
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::Foundry::EXPORT_OK = qw//;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MIBS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::FDP::MIBS,
 | 
					 | 
				
			||||||
    'FOUNDRY-SN-ROOT-MIB'         => 'foundry',
 | 
					 | 
				
			||||||
    'FOUNDRY-SN-AGENT-MIB'        => 'snChasPwrSupplyDescription',
 | 
					 | 
				
			||||||
    'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snSwGroupOperMode',
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%GLOBALS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::FDP::GLOBALS,
 | 
					 | 
				
			||||||
    'mac'        => 'ifPhysAddress.1',
 | 
					 | 
				
			||||||
    'chassis'    => 'entPhysicalDescr.1',
 | 
					 | 
				
			||||||
    'temp'       => 'snChasActualTemperature',
 | 
					 | 
				
			||||||
    'ps1_type'   => 'snChasPwrSupplyDescription.1',
 | 
					 | 
				
			||||||
    'ps1_status' => 'snChasPwrSupplyOperStatus.1',
 | 
					 | 
				
			||||||
    'fan'        => 'snChasFanOperStatus.1',
 | 
					 | 
				
			||||||
    'img_ver'    => 'snAgImgVer',
 | 
					 | 
				
			||||||
    'ch_serial'  => 'snChasSerNum',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%FUNCS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::FDP::FUNCS,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # FOUNDRY-SN-SWITCH-GROUP-MIB
 | 
					 | 
				
			||||||
    # snSwPortInfoTable - Switch Port Information Group
 | 
					 | 
				
			||||||
    'sw_index'  => 'snSwPortIfIndex',
 | 
					 | 
				
			||||||
    'sw_duplex' => 'snSwPortInfoChnMode',
 | 
					 | 
				
			||||||
    'sw_type'   => 'snSwPortInfoMediaType',
 | 
					 | 
				
			||||||
    'sw_speed'  => 'snSwPortInfoSpeed',
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MUNGE = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::FDP::MUNGE,
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_ignore {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $interfaces = $foundry->interfaces($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_ignore;
 | 
					 | 
				
			||||||
    foreach my $if ( keys %$interfaces ) {
 | 
					 | 
				
			||||||
        if ( $interfaces->{$if} =~ /(tunnel|loopback|\blo\b|lb|null)/i ) {
 | 
					 | 
				
			||||||
            $i_ignore{$if}++;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_ignore;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub i_duplex {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $sw_index  = $foundry->sw_index($partial);
 | 
					 | 
				
			||||||
    my $sw_duplex = $foundry->sw_duplex($partial);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    unless ( defined $sw_index and defined $sw_duplex ) {
 | 
					 | 
				
			||||||
        return $foundry->SUPER::i_duplex();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_duplex;
 | 
					 | 
				
			||||||
    foreach my $sw_port ( keys %$sw_duplex ) {
 | 
					 | 
				
			||||||
        my $iid    = $sw_index->{$sw_port};
 | 
					 | 
				
			||||||
        my $duplex = $sw_duplex->{$sw_port};
 | 
					 | 
				
			||||||
        next if $duplex =~ /none/i;
 | 
					 | 
				
			||||||
        $i_duplex{$iid} = 'half' if $duplex =~ /half/i;
 | 
					 | 
				
			||||||
        $i_duplex{$iid} = 'full' if $duplex =~ /full/i;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_duplex;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub model {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
    my $id      = $foundry->id();
 | 
					 | 
				
			||||||
    my $model   = &SNMP::translateObj($id);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # EdgeIron
 | 
					 | 
				
			||||||
    if ( $id =~ /\.1991\.1\.[45]\./ ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        my $e_name = $foundry->e_name();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Find entity table entry for "unit.1"
 | 
					 | 
				
			||||||
        my $unit_iid = undef;
 | 
					 | 
				
			||||||
        foreach my $e ( keys %$e_name ) {
 | 
					 | 
				
			||||||
            my $name = $e_name->{$e} || '';
 | 
					 | 
				
			||||||
            $unit_iid = $e if $name eq 'unit.1';
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Find Model Name
 | 
					 | 
				
			||||||
        my $e_model = $foundry->e_model();
 | 
					 | 
				
			||||||
        if ( defined $e_model->{$unit_iid} ) {
 | 
					 | 
				
			||||||
            return $e_model->{$unit_iid};
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $id unless defined $model;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $model =~ s/^sn//;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $model;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub os {
 | 
					 | 
				
			||||||
    return 'brocade';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub vendor {
 | 
					 | 
				
			||||||
    return 'brocade';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub os_ver {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $foundry->img_ver() if ( defined $foundry->img_ver() );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Some older ones don't have this value,so we cull it from the description
 | 
					 | 
				
			||||||
    my $descr = $foundry->description();
 | 
					 | 
				
			||||||
    if ( $descr =~ m/Version (\d\S*)/ ) {
 | 
					 | 
				
			||||||
        return $1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # EdgeIron
 | 
					 | 
				
			||||||
    my $e_name = $foundry->e_name();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # find entity table entry for "stackmanaget.1"
 | 
					 | 
				
			||||||
    my $unit_iid = undef;
 | 
					 | 
				
			||||||
    foreach my $e ( keys %$e_name ) {
 | 
					 | 
				
			||||||
        my $name = $e_name->{$e} || '';
 | 
					 | 
				
			||||||
        $unit_iid = $e if $name eq 'stackmanaget.1';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ( defined $unit_iid ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Find Model Name
 | 
					 | 
				
			||||||
        my $e_fwver = $foundry->e_fwver();
 | 
					 | 
				
			||||||
        if ( defined $e_fwver->{$unit_iid} ) {
 | 
					 | 
				
			||||||
            return $e_fwver->{$unit_iid};
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # See if we report from Flash if wouldn't report from running above
 | 
					 | 
				
			||||||
    return $foundry->snAgFlashImgVer() if ( defined $foundry->snAgFlashImgVer() );
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # Last resort
 | 
					 | 
				
			||||||
    return $foundry->SUPER::os_ver();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub serial {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Return chassis serial number if available
 | 
					 | 
				
			||||||
    return $foundry->ch_serial() if ( $foundry->ch_serial() );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # If no chassis serial use first module serial
 | 
					 | 
				
			||||||
    my $mod_serials = $foundry->snAgentConfigModuleSerialNumber() || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $mod ( sort keys %$mod_serials ) {
 | 
					 | 
				
			||||||
        my $serial = $mod_serials->{$mod} || '';
 | 
					 | 
				
			||||||
        next unless defined $serial;
 | 
					 | 
				
			||||||
        return $serial;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # EdgeIron
 | 
					 | 
				
			||||||
    my $e_name = $foundry->e_name();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # find entity table entry for "unit.1"
 | 
					 | 
				
			||||||
    my $unit_iid = undef;
 | 
					 | 
				
			||||||
    foreach my $e ( keys %$e_name ) {
 | 
					 | 
				
			||||||
        my $name = $e_name->{$e} || '';
 | 
					 | 
				
			||||||
        $unit_iid = $e if $name eq 'unit.1';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ( defined $unit_iid ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Look up serial of found entry.
 | 
					 | 
				
			||||||
        my $e_serial = $foundry->e_serial();
 | 
					 | 
				
			||||||
        return $e_serial->{$unit_iid} if defined $e_serial->{$unit_iid};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Last resort
 | 
					 | 
				
			||||||
    return $foundry->SUPER::serial();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub interfaces {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_descr = $foundry->i_description($partial) || {};
 | 
					 | 
				
			||||||
    my $i_name  = $foundry->i_name($partial)        || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Use ifName for EdgeIrons else use ifDescr
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$i_name ) {
 | 
					 | 
				
			||||||
        my $name = $i_name->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $name;
 | 
					 | 
				
			||||||
        $i_descr->{$iid} = $name
 | 
					 | 
				
			||||||
            if $name =~ /^port\d+/i;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $i_descr;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Reported hangs on a EdgeIron 24G
 | 
					 | 
				
			||||||
sub stp_p_state {
 | 
					 | 
				
			||||||
    my $foundry = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $descr = $foundry->description();
 | 
					 | 
				
			||||||
    if ( $descr =~ m/\bEdgeIron 24G\b/ ) {
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $foundry->SUPER::stp_p_state($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					 | 
				
			||||||
__END__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 NAME
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SNMP::Info::Layer3::Foundry - SNMP Interface to Brocade (Foundry) Network
 | 
					 | 
				
			||||||
Devices
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 AUTHOR
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Max Baker
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 SYNOPSIS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
					 | 
				
			||||||
 my $foundry = new SNMP::Info(
 | 
					 | 
				
			||||||
                          AutoSpecify => 1,
 | 
					 | 
				
			||||||
                          Debug       => 1,
 | 
					 | 
				
			||||||
                          DestHost    => 'myswitch',
 | 
					 | 
				
			||||||
                          Community   => 'public',
 | 
					 | 
				
			||||||
                          Version     => 1
 | 
					 | 
				
			||||||
                        ) 
 | 
					 | 
				
			||||||
    or die "Can't connect to DestHost.\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 my $class = $foundry->class();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 DESCRIPTION
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Abstraction subclass for Brocade (Foundry) Networks devices.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
					 | 
				
			||||||
after determining a more specific class using the method above.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 my $foundry = new SNMP::Info::Layer3::Foundry(...);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Inherited Classes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::FDP;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::LLDP;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Required MIBs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item F<FOUNDRY-SN-ROOT-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item F<FOUNDRY-SN-AGENT-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item F<FOUNDRY-SN-SWITCH-GROUP-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::FDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 GLOBALS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These are methods that return scalar value from SNMP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->model()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns model type.  Checks $foundry->id() against the F<FOUNDRY-SN-ROOT-MIB>
 | 
					 | 
				
			||||||
and removes 'C<sn>'.  EdgeIron models determined through F<ENTITY-MIB>.  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->vendor()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 'brocade'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->os()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 'brocade'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->os_ver()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the software version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns MAC Address of root port.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<ifPhysAddress.1>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->chassis()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns Chassis type.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<entPhysicalDescr.1>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->serial()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns serial number of device.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->temp()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the chassis temperature
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snChasActualTemperature>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->ps1_type()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the Description for the power supply
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snChasPwrSupplyDescription.1>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->ps1_status()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the status of the power supply.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snChasPwrSupplyOperStatus.1>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->fan()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the status of the chassis fan.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snChasFanOperStatus.1>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->img_ver()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns device image version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snAgImgVer.0>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->ch_serial()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns chassis serial number.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snChasSerNum.0>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::FDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::FDP/"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.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Overrides
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->interfaces()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of interface names to iids.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->i_ignore()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of interfaces to be ignored.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ignores interfaces with descriptions of  tunnel,loopback,null 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->i_duplex()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of interface link duplex status. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Crosses $foundry->sw_duplex() with $foundry->sw_index()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->stp_p_state()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"The port's current state as defined by application of the Spanning Tree
 | 
					 | 
				
			||||||
Protocol.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Skipped if device is an EdgeIron 24G due to reports of hangs.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<dot1dStpPortState>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Foundry Switch Port Information Table (C<snSwPortIfTable>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->sw_index()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Maps Table to Interface IID. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snSwPortIfIndex>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->sw_duplex()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.   Current duplex status for switch ports. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snSwPortInfoChnMode>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->sw_type()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Current Port Type .
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snSwPortInfoMediaType>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $foundry->sw_speed()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Current Port Speed. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<snSwPortInfoSpeed>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=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::FDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::FDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=cut
 | 
					 | 
				
			||||||
@@ -1,391 +0,0 @@
 | 
				
			|||||||
# SNMP::Info::Layer3::Nexus
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2012 Eric Miller
 | 
					 | 
				
			||||||
# All rights reserved.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Redistribution and use in source and binary forms, with or without
 | 
					 | 
				
			||||||
# modification, are permitted provided that the following conditions are met:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
					 | 
				
			||||||
#       this list of conditions and the following disclaimer.
 | 
					 | 
				
			||||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
					 | 
				
			||||||
#       notice, this list of conditions and the following disclaimer in the
 | 
					 | 
				
			||||||
#       documentation and/or other materials provided with the distribution.
 | 
					 | 
				
			||||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
					 | 
				
			||||||
#       names of its contributors may be used to endorse or promote products
 | 
					 | 
				
			||||||
#       derived from this software without specific prior written permission.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
					 | 
				
			||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
					 | 
				
			||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
					 | 
				
			||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
					 | 
				
			||||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
					 | 
				
			||||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
					 | 
				
			||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
					 | 
				
			||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
					 | 
				
			||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
					 | 
				
			||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
					 | 
				
			||||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package SNMP::Info::Layer3::Nexus;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					 | 
				
			||||||
use Exporter;
 | 
					 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPortSecurity;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPower;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStpExtensions;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# NOTE : Top-most items gets precedence for @ISA
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::Nexus::ISA = qw/
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoVTP 
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
    SNMP::Info::LLDP
 | 
					 | 
				
			||||||
    SNMP::Info::CDP 
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
    SNMP::Info::Layer3
 | 
					 | 
				
			||||||
    Exporter
 | 
					 | 
				
			||||||
/;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::Nexus::EXPORT_OK = qw//;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# NOTE: Order creates precedence
 | 
					 | 
				
			||||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
					 | 
				
			||||||
#       Bridge is called from Layer3 and CiscoStpExtensions
 | 
					 | 
				
			||||||
#       So we want CiscoVTP to come last to get the right one.
 | 
					 | 
				
			||||||
# The @ISA order should be reverse of these orders.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MIBS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPower::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStpExtensions::MIBS, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS,
 | 
					 | 
				
			||||||
    'CISCO-ENTITY-VENDORTYPE-OID-MIB' => 'cevMIBObjects',
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%GLOBALS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPower::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					 | 
				
			||||||
    'mac' => 'dot1dBaseBridgeAddress',
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%FUNCS = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPower::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStpExtensions::FUNCS, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,    
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MUNGE = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPower::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::MUNGE,         
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStpExtensions::MUNGE, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MUNGE,    
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub cisco_comm_indexing { return 1; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub vendor {
 | 
					 | 
				
			||||||
    return 'cisco';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub os {
 | 
					 | 
				
			||||||
    return 'nx-os';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub os_ver {
 | 
					 | 
				
			||||||
    my $nexus = shift; 
 | 
					 | 
				
			||||||
    my $descr = $nexus->description();
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    return $1 if ( $descr =~ /\),\s+Version\s+(.+?),/ );
 | 
					 | 
				
			||||||
    return $descr;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub serial {
 | 
					 | 
				
			||||||
    my $nexus = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $e_class = $nexus->e_class();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$e_class ) {
 | 
					 | 
				
			||||||
        my $class = $e_class->{$iid} || '';
 | 
					 | 
				
			||||||
        if ($class =~ /chassis/) {
 | 
					 | 
				
			||||||
	    my $serial = $nexus->e_serial($iid);
 | 
					 | 
				
			||||||
	    return $serial->{$iid};
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
    }    
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# sysObjectID returns an IID to an entry in the CISCO-ENTITY-VENDORTYPE-OID-MIB.
 | 
					 | 
				
			||||||
# Look it up and return it.
 | 
					 | 
				
			||||||
sub model {
 | 
					 | 
				
			||||||
    my $nexus = shift;
 | 
					 | 
				
			||||||
    my $id    = $nexus->id();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    unless ( defined $id ) {
 | 
					 | 
				
			||||||
        print
 | 
					 | 
				
			||||||
            " SNMP::Info::Layer3::Nexus::model() - Device does not support sysObjectID\n"
 | 
					 | 
				
			||||||
            if $nexus->debug();
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $model = &SNMP::translateObj($id);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $id unless defined $model;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $model =~ s/^cevChassis//i;
 | 
					 | 
				
			||||||
    return $model;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					 | 
				
			||||||
__END__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 NAME
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SNMP::Info::Layer3::Nexus - SNMP Interface to Cisco Nexus Switches running
 | 
					 | 
				
			||||||
NX-OS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 AUTHOR
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Eric Miller
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 SYNOPSIS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
					 | 
				
			||||||
 my $nexus = new SNMP::Info(
 | 
					 | 
				
			||||||
                        AutoSpecify => 1,
 | 
					 | 
				
			||||||
                        Debug       => 1,
 | 
					 | 
				
			||||||
                        # These arguments are passed directly to SNMP::Session
 | 
					 | 
				
			||||||
                        DestHost    => 'myswitch',
 | 
					 | 
				
			||||||
                        Community   => 'public',
 | 
					 | 
				
			||||||
                        Version     => 2
 | 
					 | 
				
			||||||
                        ) 
 | 
					 | 
				
			||||||
    or die "Can't connect to DestHost.\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 my $class      = $nexus->class();
 | 
					 | 
				
			||||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 DESCRIPTION
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Abstraction subclass for Cisco Nexus Switches running NX-OS.  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
					 | 
				
			||||||
after determining a more specific class using the method above. 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 my $nexus = new SNMP::Info::Layer3::Nexus(...);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Inherited Classes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Required MIBs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item F<CISCO-ENTITY-VENDORTYPE-OID-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
 | 
					 | 
				
			||||||
requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 GLOBALS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These are methods that return a scalar value from SNMP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->vendor()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 'cisco'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->os()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns C<'nx-os'>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->os_ver()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns operating system version extracted from C<sysDescr>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->serial()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the serial number of the chassis from F<ENTITY-MIB>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->model()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tries to reference $nexus->id() to F<CISCO-ENTITY-VENDORTYPE-OID-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Removes C<'cevChassis'> for readability.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
C<dot1dBaseBridgeAddress>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $nexus->cisco_comm_indexing()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 1.  Use vlan indexing.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 TABLE METHODS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These are methods that return tables of information in the form of a reference
 | 
					 | 
				
			||||||
to a hash.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
 | 
					 | 
				
			||||||
details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=cut
 | 
					 | 
				
			||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
All code from version 0.7 on
 | 
					All code from version 0.7 on
 | 
				
			||||||
Copyright (c) 2003-2009 Max Baker and SNMP::Info Developers
 | 
					Copyright (c) 2003-2016 Max Baker and SNMP::Info Developers
 | 
				
			||||||
All rights reserved.
 | 
					All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Original Code
 | 
					Original Code
 | 
				
			||||||
							
								
								
									
										256
									
								
								MANIFEST
									
									
									
									
									
								
							
							
						
						
									
										256
									
								
								MANIFEST
									
									
									
									
									
								
							@@ -1,117 +1,141 @@
 | 
				
			|||||||
ChangeLog
 | 
					Build.PL
 | 
				
			||||||
COPYRIGHT
 | 
					Changes
 | 
				
			||||||
DEVELOP
 | 
					contrib/DEVELOP
 | 
				
			||||||
DeviceMatrix.txt
 | 
					contrib/util/docmunge
 | 
				
			||||||
Info.pm
 | 
					contrib/util/make_dev_matrix.pl
 | 
				
			||||||
Info/AdslLine.pm
 | 
					contrib/util/make_snmpdata.pl
 | 
				
			||||||
Info/Airespace.pm
 | 
					contrib/util/push_ver
 | 
				
			||||||
Info/AMAP.pm
 | 
					contrib/util/run_test
 | 
				
			||||||
Info/Bridge.pm
 | 
					contrib/util/test_class.pl
 | 
				
			||||||
Info/CDP.pm
 | 
					contrib/util/test_class_mocked.pl
 | 
				
			||||||
Info/CiscoConfig.pm
 | 
					lib/SNMP/Info.pm
 | 
				
			||||||
Info/CiscoImage.pm
 | 
					lib/SNMP/Info/AdslLine.pm
 | 
				
			||||||
Info/CiscoPortSecurity.pm
 | 
					lib/SNMP/Info/Aggregate.pm
 | 
				
			||||||
Info/CiscoPower.pm
 | 
					lib/SNMP/Info/Airespace.pm
 | 
				
			||||||
Info/CiscoQOS.pm
 | 
					lib/SNMP/Info/AMAP.pm
 | 
				
			||||||
Info/CiscoRTT.pm
 | 
					lib/SNMP/Info/Bridge.pm
 | 
				
			||||||
Info/CiscoStack.pm
 | 
					lib/SNMP/Info/CDP.pm
 | 
				
			||||||
Info/CiscoStats.pm
 | 
					lib/SNMP/Info/CiscoAgg.pm
 | 
				
			||||||
Info/CiscoStpExtensions.pm
 | 
					lib/SNMP/Info/CiscoConfig.pm
 | 
				
			||||||
Info/CiscoVTP.pm
 | 
					lib/SNMP/Info/CiscoPortSecurity.pm
 | 
				
			||||||
Info/EDP.pm
 | 
					lib/SNMP/Info/CiscoPower.pm
 | 
				
			||||||
Info/Entity.pm
 | 
					lib/SNMP/Info/CiscoQOS.pm
 | 
				
			||||||
Info/EtherLike.pm
 | 
					lib/SNMP/Info/CiscoRTT.pm
 | 
				
			||||||
Info/FDP.pm
 | 
					lib/SNMP/Info/CiscoStack.pm
 | 
				
			||||||
Info/IEEE802dot11.pm
 | 
					lib/SNMP/Info/CiscoStats.pm
 | 
				
			||||||
Info/IPv6.pm
 | 
					lib/SNMP/Info/CiscoStpExtensions.pm
 | 
				
			||||||
Info/Layer1.pm
 | 
					lib/SNMP/Info/CiscoVTP.pm
 | 
				
			||||||
Info/Layer1/Allied.pm
 | 
					lib/SNMP/Info/EDP.pm
 | 
				
			||||||
Info/Layer1/Asante.pm
 | 
					lib/SNMP/Info/Entity.pm
 | 
				
			||||||
Info/Layer1/Bayhub.pm
 | 
					lib/SNMP/Info/EtherLike.pm
 | 
				
			||||||
Info/Layer1/Cyclades.pm
 | 
					lib/SNMP/Info/FDP.pm
 | 
				
			||||||
Info/Layer1/S3000.pm
 | 
					lib/SNMP/Info/IEEE802dot11.pm
 | 
				
			||||||
Info/Layer2.pm
 | 
					lib/SNMP/Info/IEEE802dot3ad.pm
 | 
				
			||||||
Info/Layer2/Airespace.pm
 | 
					lib/SNMP/Info/IPv6.pm
 | 
				
			||||||
Info/Layer2/Aironet.pm
 | 
					lib/SNMP/Info/Layer1.pm
 | 
				
			||||||
Info/Layer2/Allied.pm
 | 
					lib/SNMP/Info/Layer1/Allied.pm
 | 
				
			||||||
Info/Layer2/Baystack.pm
 | 
					lib/SNMP/Info/Layer1/Asante.pm
 | 
				
			||||||
Info/Layer2/C1900.pm
 | 
					lib/SNMP/Info/Layer1/Bayhub.pm
 | 
				
			||||||
Info/Layer2/C2900.pm
 | 
					lib/SNMP/Info/Layer1/Cyclades.pm
 | 
				
			||||||
Info/Layer2/Catalyst.pm
 | 
					lib/SNMP/Info/Layer1/S3000.pm
 | 
				
			||||||
Info/Layer2/Centillion.pm
 | 
					lib/SNMP/Info/Layer2.pm
 | 
				
			||||||
Info/Layer2/Cisco.pm
 | 
					lib/SNMP/Info/Layer2/3Com.pm
 | 
				
			||||||
Info/Layer2/CiscoSB.pm
 | 
					lib/SNMP/Info/Layer2/Adtran.pm
 | 
				
			||||||
Info/Layer2/HP.pm
 | 
					lib/SNMP/Info/Layer2/Airespace.pm
 | 
				
			||||||
Info/Layer2/HP4000.pm
 | 
					lib/SNMP/Info/Layer2/Aironet.pm
 | 
				
			||||||
Info/Layer2/HPVC.pm
 | 
					lib/SNMP/Info/Layer2/Allied.pm
 | 
				
			||||||
Info/Layer2/Kentrox.pm
 | 
					lib/SNMP/Info/Layer2/Baystack.pm
 | 
				
			||||||
Info/Layer2/N2270.pm
 | 
					lib/SNMP/Info/Layer2/C1900.pm
 | 
				
			||||||
Info/Layer2/NAP222x.pm
 | 
					lib/SNMP/Info/Layer2/C2900.pm
 | 
				
			||||||
Info/Layer2/Netgear.pm
 | 
					lib/SNMP/Info/Layer2/Catalyst.pm
 | 
				
			||||||
Info/Layer2/NWSS2300.pm
 | 
					lib/SNMP/Info/Layer2/Centillion.pm
 | 
				
			||||||
Info/Layer2/Orinoco.pm
 | 
					lib/SNMP/Info/Layer2/Cisco.pm
 | 
				
			||||||
Info/Layer2/Trapeze.pm
 | 
					lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
				
			||||||
Info/Layer2/ZyXEL_DSLAM.pm
 | 
					lib/SNMP/Info/Layer2/HP.pm
 | 
				
			||||||
Info/Layer3.pm
 | 
					lib/SNMP/Info/Layer2/HP4000.pm
 | 
				
			||||||
Info/Layer3/Aironet.pm
 | 
					lib/SNMP/Info/Layer2/HPVC.pm
 | 
				
			||||||
Info/Layer3/AlcatelLucent.pm
 | 
					lib/SNMP/Info/Layer2/Kentrox.pm
 | 
				
			||||||
Info/Layer3/AlteonAD.pm
 | 
					lib/SNMP/Info/Layer2/N2270.pm
 | 
				
			||||||
Info/Layer3/Altiga.pm
 | 
					lib/SNMP/Info/Layer2/NAP222x.pm
 | 
				
			||||||
Info/Layer3/Arista.pm
 | 
					lib/SNMP/Info/Layer2/Netgear.pm
 | 
				
			||||||
Info/Layer3/Aruba.pm
 | 
					lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
				
			||||||
Info/Layer3/BayRS.pm
 | 
					lib/SNMP/Info/Layer2/Orinoco.pm
 | 
				
			||||||
Info/Layer3/BlueCoatSG.pm
 | 
					lib/SNMP/Info/Layer2/Trapeze.pm
 | 
				
			||||||
Info/Layer3/C3550.pm
 | 
					lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
				
			||||||
Info/Layer3/C4000.pm
 | 
					lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
				
			||||||
Info/Layer3/C6500.pm
 | 
					lib/SNMP/Info/Layer3.pm
 | 
				
			||||||
Info/Layer3/Cisco.pm
 | 
					lib/SNMP/Info/Layer3/Aironet.pm
 | 
				
			||||||
Info/Layer3/CiscoASA.pm
 | 
					lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
				
			||||||
Info/Layer3/CiscoFWSM.pm
 | 
					lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
				
			||||||
Info/Layer3/Contivity.pm
 | 
					lib/SNMP/Info/Layer3/Altiga.pm
 | 
				
			||||||
Info/Layer3/Dell.pm
 | 
					lib/SNMP/Info/Layer3/Arista.pm
 | 
				
			||||||
Info/Layer3/Enterasys.pm
 | 
					lib/SNMP/Info/Layer3/Aruba.pm
 | 
				
			||||||
Info/Layer3/Extreme.pm
 | 
					lib/SNMP/Info/Layer3/BayRS.pm
 | 
				
			||||||
Info/Layer3/F5.pm
 | 
					lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
				
			||||||
Info/Layer3/Force10.pm
 | 
					lib/SNMP/Info/Layer3/C3550.pm
 | 
				
			||||||
Info/Layer3/Foundry.pm
 | 
					lib/SNMP/Info/Layer3/C4000.pm
 | 
				
			||||||
Info/Layer3/H3C.pm
 | 
					lib/SNMP/Info/Layer3/C6500.pm
 | 
				
			||||||
Info/Layer3/HP9300.pm
 | 
					lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
				
			||||||
Info/Layer3/Juniper.pm
 | 
					lib/SNMP/Info/Layer3/Cisco.pm
 | 
				
			||||||
Info/Layer3/Lantronix.pm
 | 
					lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
				
			||||||
Info/Layer3/Microsoft.pm
 | 
					lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
				
			||||||
Info/Layer3/Mikrotik.pm
 | 
					lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
				
			||||||
Info/Layer3/N1600.pm
 | 
					lib/SNMP/Info/Layer3/Contivity.pm
 | 
				
			||||||
Info/Layer3/Netscreen.pm
 | 
					lib/SNMP/Info/Layer3/Dell.pm
 | 
				
			||||||
Info/Layer3/NetSNMP.pm
 | 
					lib/SNMP/Info/Layer3/DLink.pm
 | 
				
			||||||
Info/Layer3/Nexus.pm
 | 
					lib/SNMP/Info/Layer3/Enterasys.pm
 | 
				
			||||||
Info/Layer3/PacketFront.pm
 | 
					lib/SNMP/Info/Layer3/Extreme.pm
 | 
				
			||||||
Info/Layer3/Passport.pm
 | 
					lib/SNMP/Info/Layer3/F5.pm
 | 
				
			||||||
Info/Layer3/Pf.pm
 | 
					lib/SNMP/Info/Layer3/Force10.pm
 | 
				
			||||||
Info/Layer3/SonicWALL.pm
 | 
					lib/SNMP/Info/Layer3/Fortinet.pm
 | 
				
			||||||
Info/Layer3/Sun.pm
 | 
					lib/SNMP/Info/Layer3/Foundry.pm
 | 
				
			||||||
Info/Layer3/Tasman.pm
 | 
					lib/SNMP/Info/Layer3/H3C.pm
 | 
				
			||||||
Info/Layer3/Timetra.pm
 | 
					lib/SNMP/Info/Layer3/HP9300.pm
 | 
				
			||||||
Info/Layer7.pm
 | 
					lib/SNMP/Info/Layer3/Huawei.pm
 | 
				
			||||||
Info/Layer7/APC.pm
 | 
					lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
				
			||||||
Info/Layer7/Neoteris.pm
 | 
					lib/SNMP/Info/Layer3/Juniper.pm
 | 
				
			||||||
Info/Layer7/Netscaler.pm
 | 
					lib/SNMP/Info/Layer3/Lantronix.pm
 | 
				
			||||||
Info/LLDP.pm
 | 
					lib/SNMP/Info/Layer3/Microsoft.pm
 | 
				
			||||||
Info/MAU.pm
 | 
					lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
				
			||||||
Info/NortelStack.pm
 | 
					lib/SNMP/Info/Layer3/N1600.pm
 | 
				
			||||||
Info/PowerEthernet.pm
 | 
					lib/SNMP/Info/Layer3/Netscreen.pm
 | 
				
			||||||
Info/RapidCity.pm
 | 
					lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
				
			||||||
Info/SONMP.pm
 | 
					lib/SNMP/Info/Layer3/Nexus.pm
 | 
				
			||||||
Makefile.PL
 | 
					lib/SNMP/Info/Layer3/PacketFront.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Passport.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Pf.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Pica8.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Steelhead.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Sun.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Tasman.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/Timetra.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/VMware.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer3/VyOS.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer7.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer7/APC.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer7/Neoteris.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/Layer7/Netscaler.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/LLDP.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/MAU.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/MRO.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/NortelStack.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/PowerEthernet.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/RapidCity.pm
 | 
				
			||||||
 | 
					lib/SNMP/Info/SONMP.pm
 | 
				
			||||||
 | 
					LICENSE
 | 
				
			||||||
MANIFEST			This list of files
 | 
					MANIFEST			This list of files
 | 
				
			||||||
README
 | 
					META.json
 | 
				
			||||||
t/00-load.t
 | 
					META.yml
 | 
				
			||||||
t/docmunge
 | 
					t/00_load.t
 | 
				
			||||||
t/make_dev_matrix.pl
 | 
					xt/.perltidyrc
 | 
				
			||||||
t/pod-coverage.t
 | 
					xt/00_local_distribution.t
 | 
				
			||||||
t/pod.t
 | 
					xt/00_local_docininfo.t
 | 
				
			||||||
t/prereq.t
 | 
					xt/00_local_perlcritic.t
 | 
				
			||||||
t/push_ver
 | 
					xt/00_local_pod-coverage.t
 | 
				
			||||||
t/run_test
 | 
					xt/00_local_pod.t
 | 
				
			||||||
t/test_class.pl
 | 
					xt/00_local_prereq.t
 | 
				
			||||||
t/util/make_snmpdata.pl
 | 
					xt/00_local_spelling.t
 | 
				
			||||||
t/util/test_class_mocked.pl
 | 
					xt/00_local_versionsync.t
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,26 +1,67 @@
 | 
				
			|||||||
# Version control files and dirs.
 | 
					\.bak$
 | 
				
			||||||
 | 
					\.pid$
 | 
				
			||||||
 | 
					\.swp$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					^SNMP-Info-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					^MANIFEST\.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Avoid version control files.
 | 
				
			||||||
\bRCS\b
 | 
					\bRCS\b
 | 
				
			||||||
\bCVS\b
 | 
					\bCVS\b
 | 
				
			||||||
 | 
					\bSCCS\b
 | 
				
			||||||
,v$
 | 
					,v$
 | 
				
			||||||
\B\.svn\b
 | 
					\B\.svn\b
 | 
				
			||||||
\B\.git\b
 | 
					\B\.git\b
 | 
				
			||||||
 | 
					\B\.gitignore\b
 | 
				
			||||||
 | 
					\b_darcs\b
 | 
				
			||||||
 | 
					\B\.cvsignore$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Makemaker generated files and dirs.
 | 
					# Avoid VMS specific MakeMaker generated files
 | 
				
			||||||
^MANIFEST\.
 | 
					\bDescrip.MMS$
 | 
				
			||||||
^Makefile$
 | 
					\bDESCRIP.MMS$
 | 
				
			||||||
^blib/
 | 
					\bdescrip.mms$
 | 
				
			||||||
^MakeMaker-\d
 | 
					 | 
				
			||||||
pm_to_blib
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Temp, old and emacs backup files.
 | 
					# Avoid Makemaker generated and utility files.
 | 
				
			||||||
 | 
					\bMANIFEST\.bak
 | 
				
			||||||
 | 
					\bMakefile$
 | 
				
			||||||
 | 
					\bblib/
 | 
				
			||||||
 | 
					\bMakeMaker-\d
 | 
				
			||||||
 | 
					\bpm_to_blib\.ts$
 | 
				
			||||||
 | 
					\bpm_to_blib$
 | 
				
			||||||
 | 
					\bblibdirs\.ts$         # 6.18 through 6.25 generated this
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Avoid Module::Build generated and utility files.
 | 
				
			||||||
 | 
					\bBuild$
 | 
				
			||||||
 | 
					\b_build/
 | 
				
			||||||
 | 
					\bBuild.bat$
 | 
				
			||||||
 | 
					\bBuild.COM$
 | 
				
			||||||
 | 
					\bBUILD.COM$
 | 
				
			||||||
 | 
					\bbuild.com$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Avoid temp and backup files.
 | 
				
			||||||
~$
 | 
					~$
 | 
				
			||||||
\.old$
 | 
					\.old$
 | 
				
			||||||
^#.*#$
 | 
					\#$
 | 
				
			||||||
^\.#
 | 
					\b\.#
 | 
				
			||||||
 | 
					\.bak$
 | 
				
			||||||
 | 
					\.tmp$
 | 
				
			||||||
 | 
					\.#
 | 
				
			||||||
 | 
					\.rej$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Private Regression Tests
 | 
					# Avoid OS-specific files/dirs
 | 
				
			||||||
\d+_local_
 | 
					# Mac OSX metadata
 | 
				
			||||||
\.?perl\w+\.?rc$
 | 
					\B\.DS_Store
 | 
				
			||||||
 | 
					# Mac OSX SMB mount metadata files
 | 
				
			||||||
 | 
					\B\._
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Komodo project file
 | 
					# Avoid Devel::Cover and Devel::CoverX::Covered files.
 | 
				
			||||||
\.kpf$
 | 
					\bcover_db\b
 | 
				
			||||||
 | 
					\bcovered\b
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					# Avoid MYMETA files
 | 
				
			||||||
 | 
					^MYMETA\.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.github
 | 
				
			||||||
 | 
					.travis
 | 
				
			||||||
 | 
					README.md
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										521
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										521
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,521 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					   "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" : {
 | 
				
			||||||
 | 
					         "requires" : {
 | 
				
			||||||
 | 
					            "Math::BigInt" : "0",
 | 
				
			||||||
 | 
					            "SNMP" : "0"
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "test" : {
 | 
				
			||||||
 | 
					         "requires" : {
 | 
				
			||||||
 | 
					            "Test::More" : "0.88"
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   },
 | 
				
			||||||
 | 
					   "provides" : {
 | 
				
			||||||
 | 
					      "SNMP::Info" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::AMAP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/AMAP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::AdslLine" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/AdslLine.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Aggregate" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Aggregate.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Airespace" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Airespace.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Bridge" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Bridge.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CDP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CDP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoAgg" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoAgg.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoConfig" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoConfig.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoPortSecurity" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoPower" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoPower.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoQOS" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoQOS.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoRTT" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoRTT.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoStack" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoStack.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoStats" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoStats.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoStpExtensions" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::CiscoVTP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/CiscoVTP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::EDP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/EDP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Entity" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Entity.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::EtherLike" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/EtherLike.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::FDP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/FDP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::IEEE802dot11" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/IEEE802dot11.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::IEEE802dot3ad" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::IPv6" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/IPv6.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::LLDP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/LLDP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer1" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer1.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer1::Allied" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer1/Allied.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer1::Asante" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer1/Asante.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer1::Bayhub" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer1::Cyclades" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer1::S3000" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer1/S3000.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::3Com" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/3Com.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Adtran" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Adtran.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Airespace" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Airespace.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Aironet" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Aironet.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Allied" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Allied.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Baystack" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Baystack.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::C1900" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/C1900.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::C2900" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/C2900.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Catalyst" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Centillion" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Centillion.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Cisco" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Cisco.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::CiscoSB" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::HP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/HP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::HP4000" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/HP4000.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::HPVC" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/HPVC.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Kentrox" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::N2270" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/N2270.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::NAP222x" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::NWSS2300" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Netgear" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Netgear.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Orinoco" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Trapeze" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::Ubiquiti" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer2::ZyXEL_DSLAM" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Aironet" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Aironet.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::AlcatelLucent" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::AlteonAD" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Altiga" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Altiga.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Arista" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Arista.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Aruba" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Aruba.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::BayRS" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/BayRS.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::BlueCoatSG" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::C3550" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/C3550.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::C4000" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/C4000.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::C6500" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/C6500.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::CheckPoint" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Cisco" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Cisco.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::CiscoASA" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::CiscoFWSM" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::CiscoSwitch" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Contivity" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Contivity.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::DLink" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/DLink.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Dell" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Dell.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Enterasys" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Extreme" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Extreme.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::F5" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/F5.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Force10" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Force10.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Fortinet" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Foundry" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Foundry.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::H3C" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/H3C.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::HP9300" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/HP9300.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Huawei" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Huawei.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::IBMGbTor" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Juniper" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Juniper.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Lantronix" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Microsoft" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Mikrotik" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::N1600" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/N1600.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::NetSNMP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Netscreen" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Nexus" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Nexus.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::PacketFront" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::PaloAlto" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Passport" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Passport.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Pf" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Pf.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Pica8" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Pica8.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::SonicWALL" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Steelhead" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Sun" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Sun.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Tasman" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Tasman.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::Timetra" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/Timetra.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::VMware" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/VMware.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer3::VyOS" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer3/VyOS.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer7" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer7.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer7::APC" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer7/APC.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer7::CiscoIPS" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer7::Neoteris" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::Layer7::Netscaler" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::MAU" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/MAU.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::MRO" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/MRO.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::NortelStack" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/NortelStack.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::PowerEthernet" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/PowerEthernet.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::RapidCity" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/RapidCity.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "SNMP::Info::SONMP" : {
 | 
				
			||||||
 | 
					         "file" : "lib/SNMP/Info/SONMP.pm",
 | 
				
			||||||
 | 
					         "version" : "3.40"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   },
 | 
				
			||||||
 | 
					   "release_status" : "stable",
 | 
				
			||||||
 | 
					   "resources" : {
 | 
				
			||||||
 | 
					      "bugtracker" : {
 | 
				
			||||||
 | 
					         "web" : "https://github.com/netdisco/snmp-info/issues"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "homepage" : "http://netdisco.org/",
 | 
				
			||||||
 | 
					      "license" : [
 | 
				
			||||||
 | 
					         "http://opensource.org/licenses/BSD-3-Clause"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "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.40",
 | 
				
			||||||
 | 
					   "x_serialization_backend" : "JSON::PP version 2.94"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										379
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										379
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,379 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					abstract: 'OO Interface to Network devices and MIBs through SNMP'
 | 
				
			||||||
 | 
					author:
 | 
				
			||||||
 | 
					  - 'Eric A. Miller <emiller@cpan.org>'
 | 
				
			||||||
 | 
					build_requires:
 | 
				
			||||||
 | 
					  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.40'
 | 
				
			||||||
 | 
					  SNMP::Info::AMAP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/AMAP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::AdslLine:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/AdslLine.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Aggregate:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Aggregate.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Airespace:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Airespace.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Bridge:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Bridge.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CDP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CDP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoAgg:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoAgg.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoConfig:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoConfig.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoPortSecurity:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoPortSecurity.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoPower:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoPower.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoQOS:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoQOS.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoRTT:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoRTT.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoStack:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoStack.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoStats:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoStats.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoStpExtensions:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoStpExtensions.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::CiscoVTP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/CiscoVTP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::EDP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/EDP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Entity:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Entity.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::EtherLike:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/EtherLike.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::FDP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/FDP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::IEEE802dot11:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/IEEE802dot11.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::IEEE802dot3ad:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/IEEE802dot3ad.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::IPv6:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/IPv6.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::LLDP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/LLDP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer1:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer1.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer1::Allied:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer1/Allied.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer1::Asante:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer1/Asante.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer1::Bayhub:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer1/Bayhub.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer1::Cyclades:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer1/Cyclades.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer1::S3000:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer1/S3000.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::3Com:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/3Com.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Adtran:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Adtran.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Airespace:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Airespace.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Aironet:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Aironet.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Allied:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Allied.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Baystack:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Baystack.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::C1900:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/C1900.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::C2900:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/C2900.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Catalyst:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Catalyst.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Centillion:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Centillion.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Cisco:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Cisco.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::CiscoSB:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::HP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/HP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::HP4000:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/HP4000.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::HPVC:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/HPVC.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Kentrox:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Kentrox.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::N2270:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/N2270.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::NAP222x:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/NAP222x.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::NWSS2300:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Netgear:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Netgear.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Orinoco:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Orinoco.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Trapeze:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Trapeze.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::Ubiquiti:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer2::ZyXEL_DSLAM:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Aironet:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Aironet.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::AlcatelLucent:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::AlteonAD:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Altiga:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Altiga.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Arista:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Arista.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Aruba:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Aruba.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::BayRS:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/BayRS.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::BlueCoatSG:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::C3550:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/C3550.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::C4000:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/C4000.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::C6500:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/C6500.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::CheckPoint:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Cisco:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Cisco.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::CiscoASA:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::CiscoFWSM:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::CiscoSwitch:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Contivity:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Contivity.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::DLink:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/DLink.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Dell:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Dell.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Enterasys:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Enterasys.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Extreme:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Extreme.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::F5:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/F5.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Force10:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Force10.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Fortinet:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Fortinet.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Foundry:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Foundry.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::H3C:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/H3C.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::HP9300:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/HP9300.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Huawei:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Huawei.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::IBMGbTor:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Juniper:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Juniper.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Lantronix:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Lantronix.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Microsoft:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Microsoft.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Mikrotik:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::N1600:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/N1600.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::NetSNMP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Netscreen:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Netscreen.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Nexus:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Nexus.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::PacketFront:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/PacketFront.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::PaloAlto:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Passport:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Passport.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Pf:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Pf.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Pica8:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Pica8.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::SonicWALL:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Steelhead:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Steelhead.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Sun:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Sun.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Tasman:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Tasman.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::Timetra:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/Timetra.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::VMware:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/VMware.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer3::VyOS:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer3/VyOS.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer7:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer7.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer7::APC:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer7/APC.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer7::CiscoIPS:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer7::Neoteris:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer7/Neoteris.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::Layer7::Netscaler:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/Layer7/Netscaler.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::MAU:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/MAU.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::MRO:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/MRO.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::NortelStack:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/NortelStack.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::PowerEthernet:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/PowerEthernet.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::RapidCity:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/RapidCity.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					  SNMP::Info::SONMP:
 | 
				
			||||||
 | 
					    file: lib/SNMP/Info/SONMP.pm
 | 
				
			||||||
 | 
					    version: '3.40'
 | 
				
			||||||
 | 
					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-3-Clause
 | 
				
			||||||
 | 
					  repository: https://github.com/netdisco/snmp-info
 | 
				
			||||||
 | 
					version: '3.40'
 | 
				
			||||||
 | 
					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";
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -4,7 +4,6 @@ Coding Guidelines:
 | 
				
			|||||||
    - tab-width of 4, no tab characters
 | 
					    - tab-width of 4, no tab characters
 | 
				
			||||||
    - keep POD documentation up-to-date
 | 
					    - keep POD documentation up-to-date
 | 
				
			||||||
    - always update ChangeLog before committing
 | 
					    - always update ChangeLog before committing
 | 
				
			||||||
    - always update DeviceMatrix.txt before committing
 | 
					 | 
				
			||||||
    - check-in required mibs to netdisco-mibs and release new package if needed
 | 
					    - check-in required mibs to netdisco-mibs and release new package if needed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Release and Testing Instructions: 
 | 
					Release and Testing Instructions: 
 | 
				
			||||||
@@ -3,9 +3,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use File::Glob qw/bsd_glob/;
 | 
					use File::Glob qw/bsd_glob/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my @pms = glob_rec("../Info");
 | 
					my @pms = glob_rec("../../lib");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$new_version = shift @ARGV || '3.01';
 | 
					$new_version = shift @ARGV || die "missing new version\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
foreach my $p (@pms) {
 | 
					foreach my $p (@pms) {
 | 
				
			||||||
    print "$p\n";
 | 
					    print "$p\n";
 | 
				
			||||||
@@ -16,6 +16,7 @@ foreach my $p (@pms) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    while (<O>) {
 | 
					    while (<O>) {
 | 
				
			||||||
        s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
 | 
					        s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
 | 
				
			||||||
 | 
					        s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/;
 | 
				
			||||||
        print P;
 | 
					        print P;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										346
									
								
								contrib/util/test_class.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										346
									
								
								contrib/util/test_class.pl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,346 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/perl
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# test_class.pl
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (c) 2013 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
 | 
					use Carp;
 | 
				
			||||||
 | 
					use Getopt::Long;
 | 
				
			||||||
 | 
					use Pod::Usage;
 | 
				
			||||||
 | 
					use SNMP::Info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my $EMPTY = q{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Default Values
 | 
				
			||||||
 | 
					my $class  = $EMPTY;
 | 
				
			||||||
 | 
					my @dump   = ();
 | 
				
			||||||
 | 
					my $debug  = 0;
 | 
				
			||||||
 | 
					my $cache  = 0;
 | 
				
			||||||
 | 
					my $device = '';
 | 
				
			||||||
 | 
					my $comm   = '';
 | 
				
			||||||
 | 
					my $ver    = 2;
 | 
				
			||||||
 | 
					my $ignore = 0;
 | 
				
			||||||
 | 
					my $help   = 0;
 | 
				
			||||||
 | 
					my $nobulk = 0;
 | 
				
			||||||
 | 
					my $mibdirs;
 | 
				
			||||||
 | 
					my %dumped;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GetOptions(
 | 
				
			||||||
 | 
					    'c|class=s'  => \$class,
 | 
				
			||||||
 | 
					    'd|dev=s'    => \$device,
 | 
				
			||||||
 | 
					    's|comm=s'   => \$comm,
 | 
				
			||||||
 | 
					    'v|ver=i'    => \$ver,
 | 
				
			||||||
 | 
					    'i|ignore'   => \$ignore,
 | 
				
			||||||
 | 
					    'p|print=s'  => \@dump,
 | 
				
			||||||
 | 
					    'm|mibdir=s' => \$mibdirs,
 | 
				
			||||||
 | 
					    'n|nobulk'   => \$nobulk,
 | 
				
			||||||
 | 
					    'x|debug+'   => \$debug,
 | 
				
			||||||
 | 
					    'k|cache'    => \$cache,
 | 
				
			||||||
 | 
					    'h|?|help'   => sub { pod2usage(1); },
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unless ( $device and $comm ) {
 | 
				
			||||||
 | 
					    pod2usage(2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( $ignore && !defined $mibdirs ) {
 | 
				
			||||||
 | 
					    print "mibdirs must be provided if ignoring snmp.conf \n\n";
 | 
				
			||||||
 | 
					    pod2usage(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local $ENV{'SNMPCONFPATH'} = $EMPTY     if $ignore;
 | 
				
			||||||
 | 
					local $ENV{'MIBDIRS'}      = "$mibdirs" if $ignore;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( defined $mibdirs ) {
 | 
				
			||||||
 | 
					    SNMP::addMibDirs($mibdirs);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$class = $class ? "SNMP::Info::$class" : 'SNMP::Info';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					( my $mod = "$class.pm" )
 | 
				
			||||||
 | 
					    =~ s{::}{/}xg;    # SNMP::Info::Layer3 => SNMP/Info/Layer3.pm
 | 
				
			||||||
 | 
					if ( !eval { require $mod; 1; } ) {
 | 
				
			||||||
 | 
					    croak "Could not load $class. Error Message: $@\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my $class_ver = $class->VERSION();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print
 | 
				
			||||||
 | 
					    "Class $class ($class_ver) loaded from SNMP::Info $SNMP::Info::VERSION.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( scalar @dump ) { print 'Dumping : ', join( q{,}, @dump ), "\n" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my %args = ();
 | 
				
			||||||
 | 
					if ($nobulk) {
 | 
				
			||||||
 | 
					    $args{BulkWalk} = 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my $dev = $class->new(
 | 
				
			||||||
 | 
					    'AutoSpecify' => 0,
 | 
				
			||||||
 | 
					    'AutoVerBack' => 0,
 | 
				
			||||||
 | 
					    'Debug'       => $debug,
 | 
				
			||||||
 | 
					    'Version'     => $ver,
 | 
				
			||||||
 | 
					    'DestHost'    => $device,
 | 
				
			||||||
 | 
					    'Community'   => $comm,
 | 
				
			||||||
 | 
					    %args
 | 
				
			||||||
 | 
					) or die "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print "Connected to $device.\n";
 | 
				
			||||||
 | 
					print 'Detected Class: ', $dev->device_type(), "\n";
 | 
				
			||||||
 | 
					print "Using    Class: $class (-c to change)\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my $layers = $dev->layers();
 | 
				
			||||||
 | 
					my $descr  = $dev->description();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( !defined $layers || !defined $descr ) {
 | 
				
			||||||
 | 
					    die
 | 
				
			||||||
 | 
						"Are you sure you got the right community string and version?\nCan't fetch layers or description.\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print "\nFetching base info...\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @base_fns = qw/vendor model os os_ver description contact location
 | 
				
			||||||
 | 
					    layers mac serial/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach my $fn (@base_fns) {
 | 
				
			||||||
 | 
					    test_global( $dev, $fn );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print "\nFetching interface info...\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @fns = qw/interfaces i_type i_ignore i_description i_mtu i_speed i_mac i_up
 | 
				
			||||||
 | 
					    i_up_admin i_name i_duplex i_duplex_admin i_stp_state
 | 
				
			||||||
 | 
					    i_vlan i_pvid i_lastchange/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach my $fn (@fns) {
 | 
				
			||||||
 | 
					    test_fn( $dev, $fn );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print "\nFetching VLAN info...\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @vlan = qw/v_index v_name/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach my $fn (@vlan) {
 | 
				
			||||||
 | 
					    test_fn( $dev, $fn );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print "\nFetching topology info...\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @topo = qw/c_if c_ip c_port c_id c_platform/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach my $fn (@topo) {
 | 
				
			||||||
 | 
					    test_fn( $dev, $fn );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print "\nFetching module info...\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @modules = qw/e_descr e_type e_parent e_name e_class e_pos e_hwver
 | 
				
			||||||
 | 
					    e_fwver e_swver e_model e_serial e_fru/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach my $fn (@modules) {
 | 
				
			||||||
 | 
					    test_fn( $dev, $fn );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach my $fn (@dump) {
 | 
				
			||||||
 | 
					    if ( !$dumped{$fn} ) { test_fn( $dev, $fn ) }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($cache) {
 | 
				
			||||||
 | 
					    eval {
 | 
				
			||||||
 | 
					        require Data::Printer;
 | 
				
			||||||
 | 
					    } && eval {
 | 
				
			||||||
 | 
					        print "\nDumping cache...\n\n";
 | 
				
			||||||
 | 
					        Data::Printer::p $dev;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub test_global {
 | 
				
			||||||
 | 
					    my $info   = shift;
 | 
				
			||||||
 | 
					    my $method = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $value = $info->$method();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( !defined $value ) {
 | 
				
			||||||
 | 
						printf "%-20s Does not exist.\n", $method;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    $value =~ s/[[:cntrl:]]+/ /gx;
 | 
				
			||||||
 | 
					    if ( length $value > 60 ) {
 | 
				
			||||||
 | 
						$value = substr $value, 0, 60;
 | 
				
			||||||
 | 
						$value .= '...';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    printf "%-20s %s \n", $method, $value;
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub test_fn {
 | 
				
			||||||
 | 
					    my $info   = shift;
 | 
				
			||||||
 | 
					    my $method = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $results = $info->$method();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # If accidentally called on a global, pass it along nicely.
 | 
				
			||||||
 | 
					    if ( defined $results && !ref $results ) {
 | 
				
			||||||
 | 
						return test_global( $dev, $method );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( !defined $results && !scalar keys %{$results} ) {
 | 
				
			||||||
 | 
						printf "%-20s Empty Results.\n", $method;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf "%-20s %d rows.\n", $method, scalar keys %{$results};
 | 
				
			||||||
 | 
					    if ( grep {/^$method$/x} @dump ) {
 | 
				
			||||||
 | 
						$dumped{$method} = 1;
 | 
				
			||||||
 | 
						foreach my $iid ( keys %{$results} ) {
 | 
				
			||||||
 | 
						    print "  $iid : ";
 | 
				
			||||||
 | 
						    if ( ref( $results->{$iid} ) eq 'ARRAY' ) {
 | 
				
			||||||
 | 
							print '[ ', join( ', ', @{ $results->{$iid} } ), ' ]';
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    else {
 | 
				
			||||||
 | 
							print $results->{$iid};
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    print "\n";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test_class.pl - Test a device against an SNMP::Info class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Eric Miller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test_class.pl [options]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Options:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -c|class    SNMP::Info class to use, Layer2::Catalyst    
 | 
				
			||||||
 | 
					    -d|dev      Device
 | 
				
			||||||
 | 
					    -s|comm     SNMP community
 | 
				
			||||||
 | 
					    -v|ver      SNMP version
 | 
				
			||||||
 | 
					    -p|print    Print values 
 | 
				
			||||||
 | 
					    -i|ignore   Ignore Net-SNMP configuration file
 | 
				
			||||||
 | 
					    -m|mibdir   Directory containing MIB Files
 | 
				
			||||||
 | 
					    -n|nobulk   Disable bulkwalk
 | 
				
			||||||
 | 
					    -x|debug    Debugging flag
 | 
				
			||||||
 | 
					    -k|cache    Dump cache (requires Data::Printer to be installed)
 | 
				
			||||||
 | 
					    -h|?|help   Brief help message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 OPTIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-class>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Specific SNMP::Info class to use.  Defaults to SNMP::Info if no specific
 | 
				
			||||||
 | 
					class provided.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-class Layer2::Catalyst
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-dev>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Device to test against.  No default and a mandatory option.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-dev 1.2.3.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-comm>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP community string.  No default and a mandatory option.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-comm public
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-ver>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP version. Default 2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-ver 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-print>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Print values of a class method rather than summarizing.  May be repeated
 | 
				
			||||||
 | 
					multiple times. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-print i_description -print i_type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-ignore >
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ignore Net-SNMP configuration file snmp.conf.  If this used mibdirs must be
 | 
				
			||||||
 | 
					provided.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-ignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-mibdir>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Directory containing MIB Files.  Multiple directories should be separated by a
 | 
				
			||||||
 | 
					colon ':'. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-mibdir /usr/local/share/snmp/mibs/rfc:/usr/local/share/snmp/mibs/net-snmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-nobulk >
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Disable SNMP bulkwalk. Default bulkwalk is on and utilized with version 2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-nobulk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-debug>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Turns on SNMP::Info debug.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-debug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-cache>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dumps the table and leaf cache at the end of running. Requires that the
 | 
				
			||||||
 | 
					L<Data::Printer> module be installed, otherwise does nothing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item B<-help>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Print help message and exits.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					B<test_class.pl> will test a device against a specfied SNMP::Info class.
 | 
				
			||||||
 | 
					This allows debugging and testing of live devices to include validating
 | 
				
			||||||
 | 
					device support with existing classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=cut
 | 
				
			||||||
@@ -71,8 +71,8 @@ if ( $ignore && !defined $mibdirs ) {
 | 
				
			|||||||
    pod2usage(1);
 | 
					    pod2usage(1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($ignore) { local $ENV{'SNMPCONFPATH'} = $EMPTY }
 | 
					local $ENV{'SNMPCONFPATH'} = $EMPTY     if $ignore;
 | 
				
			||||||
if ($ignore) { local $ENV{'MIBDIRS'}      = "$mibdirs" }
 | 
					local $ENV{'MIBDIRS'}      = "$mibdirs" if $ignore;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ( defined $mibdirs ) {
 | 
					if ( defined $mibdirs ) {
 | 
				
			||||||
    SNMP::addMibDirs($mibdirs);
 | 
					    SNMP::addMibDirs($mibdirs);
 | 
				
			||||||
@@ -99,7 +99,6 @@ my $dev = $class->new(
 | 
				
			|||||||
    'AutoSpecify' => 0,
 | 
					    'AutoSpecify' => 0,
 | 
				
			||||||
    'BulkWalk'    => 0,
 | 
					    'BulkWalk'    => 0,
 | 
				
			||||||
    'Debug'       => $debug,
 | 
					    'Debug'       => $debug,
 | 
				
			||||||
    'MibDirs'     => $mibdirs,
 | 
					 | 
				
			||||||
    'Session'     => $mocked,
 | 
					    'Session'     => $mocked,
 | 
				
			||||||
) or die "\n";
 | 
					) or die "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -287,7 +286,7 @@ sub mock_getnext {
 | 
				
			|||||||
	    my $val     = $EMPTY;
 | 
						    my $val     = $EMPTY;
 | 
				
			||||||
	    my $data    = $c_data->{$leaf};
 | 
						    my $data    = $c_data->{$leaf};
 | 
				
			||||||
	    my $count   = scalar keys %{$data} || 0;
 | 
						    my $count   = scalar keys %{$data} || 0;
 | 
				
			||||||
	    if ( $count > 1 ) {
 | 
						    if ( $count ) {
 | 
				
			||||||
		my $found = 0;
 | 
							my $found = 0;
 | 
				
			||||||
		foreach my $d_iid ( sort keys %{$data} ) {
 | 
							foreach my $d_iid ( sort keys %{$data} ) {
 | 
				
			||||||
		    if ( $d_iid gt $iid && !$found ) {
 | 
							    if ( $d_iid gt $iid && !$found ) {
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -38,7 +38,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS
 | 
					%MIBS
 | 
				
			||||||
    = ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
 | 
					    = ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
 | 
				
			||||||
@@ -38,7 +38,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
 | 
					%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# $Id$
 | 
					# SNMP::Info::Aggregate
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Copyright (c) 2005 Matt Tuttle
 | 
					# Copyright (c) 2014 SNMP::Info Developers
 | 
				
			||||||
# All rights reserved.
 | 
					# All rights reserved.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Redistribution and use in source and binary forms, with or without
 | 
					# Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
@@ -27,88 +27,103 @@
 | 
				
			|||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
					# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
				
			||||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
					# POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package SNMP::Info::CiscoImage;
 | 
					package SNMP::Info::Aggregate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info;
 | 
					use SNMP::Info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::CiscoImage::ISA       = qw/SNMP::Info Exporter/;
 | 
					@SNMP::Info::Aggregate::ISA       = qw/SNMP::Info Exporter/;
 | 
				
			||||||
@SNMP::Info::CiscoImage::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Aggregate::EXPORT_OK = qw/agg_ports_ifstack/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );
 | 
					%MIBS = (); # IF-MIB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = ();
 | 
					%GLOBALS = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = ( 'ci_images' => 'ciscoImageString', );
 | 
					%FUNCS = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = ();
 | 
					%MUNGE = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub agg_ports_ifstack {
 | 
				
			||||||
 | 
					  my $dev = shift;
 | 
				
			||||||
 | 
					  my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  my $ifStack = $dev->ifStackStatus();
 | 
				
			||||||
 | 
					  # TODO: if we want to do partial, we need to use inverse status
 | 
				
			||||||
 | 
					  my $ifType = $dev->ifType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  my $ret = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  foreach my $idx ( keys %$ifStack ) {
 | 
				
			||||||
 | 
					      my ( $higher, $lower ) = split /\./, $idx;
 | 
				
			||||||
 | 
					      next if ( $higher == 0 or $lower == 0 );
 | 
				
			||||||
 | 
					      if ( $ifType->{ $higher } eq 'ieee8023adLag'  or $ifType->{ $higher } eq 'propMultiplexor') {
 | 
				
			||||||
 | 
					          $ret->{ $lower } = $higher;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return $ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 NAME
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SNMP::Info::CiscoImage - SNMP Interface to image strings for Cisco Devices
 | 
					SNMP::Info::Aggregate - SNMP Interface to ifStackTable Aggregated Links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 AUTHOR
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Matt Tuttle (C<mtuttle@americanhebrewacademy.org>)
 | 
					SNMP::Info Developers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 SYNOPSIS
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
					 # Let SNMP::Info determine the correct subclass for you. 
 | 
				
			||||||
 my $ci = new SNMP::Info(
 | 
					 my $info = new SNMP::Info(
 | 
				
			||||||
                          AutoSpecify => 1,
 | 
					                          AutoSpecify => 1,
 | 
				
			||||||
                          Debug       => 1,
 | 
					                          Debug       => 1,
 | 
				
			||||||
                # These arguments are passed directly on to SNMP::Session
 | 
					                          DestHost    => 'myrouter',
 | 
				
			||||||
                DestHost    => 'myswitch',
 | 
					 | 
				
			||||||
                          Community   => 'public',
 | 
					                          Community   => 'public',
 | 
				
			||||||
                          Version     => 2
 | 
					                          Version     => 2
 | 
				
			||||||
                        ) 
 | 
					                        ) 
 | 
				
			||||||
    or die "Can't connect to DestHost.\n";
 | 
					    or die "Can't connect to DestHost.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 my $class = $ci->class();
 | 
					 my $class = $info->class();
 | 
				
			||||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
					 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 DESCRIPTION
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SNMP::Info::CiscoImage is a subclass of SNMP::Info that provides access to
 | 
					This class provides access to Aggregated Links configuration on devices
 | 
				
			||||||
image strings embedded in an image running on Cisco Devices.
 | 
					supporting C<ifStackTable>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
					Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Inherited Classes
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
None.
 | 
					L<SNMP::Info>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Required MIBs
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item F<CISCO-IMAGE-MIB>
 | 
					=item F<IF-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
					=head1 METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 GLOBALS
 | 
					=over 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
None.
 | 
					=item C<agg_ports_ifstack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					Returns a HASH reference mapping from slave to master port for each member of
 | 
				
			||||||
 | 
					a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
				
			||||||
=over
 | 
					ifIndex of the corresponding master ports.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $ci->ci_images()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns the table of image strings.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
C<ciscoImageString>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,
 | 
					    %SNMP::Info::MIBS,
 | 
				
			||||||
@@ -577,6 +577,13 @@ sub bp_index {
 | 
				
			|||||||
    return \%bp_index;
 | 
					    return \%bp_index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_mac {
 | 
				
			||||||
 | 
					    my $airespace = shift;
 | 
				
			||||||
 | 
					    my $partial   = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $airespace->SUPER::fw_mac($partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub fw_port {
 | 
					sub fw_port {
 | 
				
			||||||
    my $airespace = shift;
 | 
					    my $airespace = shift;
 | 
				
			||||||
    my $partial   = shift;
 | 
					    my $partial   = shift;
 | 
				
			||||||
@@ -693,30 +700,40 @@ sub i_ssidmac {
 | 
				
			|||||||
        my $last     = pop(@parts);
 | 
					        my $last     = pop(@parts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        my $iid = $oid;
 | 
					        my $iid = $oid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Get radio band
 | 
					        # Get radio band
 | 
				
			||||||
        $iid =~ s/\.\d+$//;
 | 
					        $iid =~ s/\.\d+$//;
 | 
				
			||||||
        my $ap_type = $apif_type->{$iid};
 | 
					        my $ap_type = $apif_type->{$iid};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Determine if IOS based
 | 
					        # Determine if IOS based
 | 
				
			||||||
        $iid =~ s/\.\d+$//;
 | 
					        $iid =~ s/\.\d+$//;
 | 
				
			||||||
        my $ios = $ap_ios->{$iid} || '';
 | 
					        my $ios = $ap_ios->{$iid} || '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # 17 can be used as index for 3rd Party AP's.  We only have one
 | 
				
			||||||
 | 
					        # hexadecimal digit to work with so skip if outside the range
 | 
				
			||||||
 | 
					        if ( $ssid_idx > 0 and $ssid_idx < 17 ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Four cases:
 | 
					            # Four cases:
 | 
				
			||||||
            # IOS and 2.4Ghz count up, starts at zero
 | 
					            # IOS and 2.4Ghz count up, starts at zero
 | 
				
			||||||
            if ( $ios and $ap_type =~ /b$/ ) {
 | 
					            if ( $ios and $ap_type =~ /b$/ ) {
 | 
				
			||||||
                $last = $last + ( $ssid_idx - 1 );
 | 
					                $last = $last + ( $ssid_idx - 1 );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # IOS and 5Ghz - count down from maximum of 16
 | 
					            # IOS and 5Ghz - count down from maximum of 16
 | 
				
			||||||
            elsif ( $ios and $ap_type =~ /a$/ ) {
 | 
					            elsif ( $ios and $ap_type =~ /a$/ ) {
 | 
				
			||||||
                $last = $last + ( 16 - $ssid_idx );
 | 
					                $last = $last + ( 16 - $ssid_idx );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # VxWorks and 5Ghz - count up, starts at zero
 | 
					            # VxWorks and 5Ghz - count up, starts at zero
 | 
				
			||||||
            elsif ( $ios and $ap_type =~ /a$/ ) {
 | 
					            elsif ( $ios and $ap_type =~ /a$/ ) {
 | 
				
			||||||
                $last = $last + ( $ssid_idx - 1 );
 | 
					                $last = $last + ( $ssid_idx - 1 );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # VxWorks and 2.4Ghz - count down from maximum of 16
 | 
					            # VxWorks and 2.4Ghz - count down from maximum of 16
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                $last = $last + ( 16 - $ssid_idx );
 | 
					                $last = $last + ( 16 - $ssid_idx );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        push( @parts, $last );
 | 
					        push( @parts, $last );
 | 
				
			||||||
        my $bssid = join( ':', map { sprintf( "%02x", $_ ) } @parts );
 | 
					        my $bssid = join( ':', map { sprintf( "%02x", $_ ) } @parts );
 | 
				
			||||||
@@ -1225,12 +1242,9 @@ switch.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item $airespace->layers()
 | 
					=item $airespace->layers()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns 00000011.  Class emulates Layer 2 functionality for Thin APs through
 | 
					Returns 00000111.  Class emulates Layer 2 functionality for Thin APs through
 | 
				
			||||||
proprietary MIBs.
 | 
					proprietary MIBs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $airespace->at_netaddr()
 | 
					 | 
				
			||||||
=item $airespace->at_paddr()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $airespace->serial()
 | 
					=item $airespace->serial()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(C<agentInventorySerialNumber>)
 | 
					(C<agentInventorySerialNumber>)
 | 
				
			||||||
@@ -1257,7 +1271,7 @@ Returns reference to hash.  Indicates whether the SSID is broadcast.
 | 
				
			|||||||
Returns reference to hash.  Current operating frequency channel of the radio
 | 
					Returns reference to hash.  Current operating frequency channel of the radio
 | 
				
			||||||
interface.
 | 
					interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $dot11->dot11_cur_tx_pwr_mw()
 | 
					=item $airespace->dot11_cur_tx_pwr_mw()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to hash.  Current transmit power, in milliwatts, of the
 | 
					Returns reference to hash.  Current transmit power, in milliwatts, of the
 | 
				
			||||||
radio interface.
 | 
					radio interface.
 | 
				
			||||||
@@ -1678,15 +1692,15 @@ airespace_if_name() for virtual interfaces.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item $airespace->i_description()
 | 
					=item $airespace->i_description()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to map of IIDs to interface types.  Returns C<ifDescr>
 | 
					Returns reference to map of IIDs to interface descriptions.  Returns
 | 
				
			||||||
for Ethernet interfaces, airespace_ap_loc() for thin AP interfaces, and
 | 
					C<ifDescr> for Ethernet interfaces, airespace_ap_loc() for thin AP
 | 
				
			||||||
airespace_if_name() for virtual interfaces.
 | 
					interfaces, and airespace_if_name() for virtual interfaces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $airespace->i_type()
 | 
					=item $airespace->i_type()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to map of IIDs to interface descriptions.  Returns
 | 
					Returns reference to map of IIDs to interface types.  Returns C<ifType>
 | 
				
			||||||
C<ifType> for Ethernet interfaces, airespace_apif_type() for thin AP
 | 
					for Ethernet interfaces, airespace_apif_type() for thin AP interfaces, and
 | 
				
			||||||
interfaces, and airespace_if_type() for virtual interfaces.
 | 
					airespace_if_type() for virtual interfaces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $airespace->i_up()
 | 
					=item $airespace->i_up()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1809,6 +1823,24 @@ entity which 'contains' this entity.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Arp Cache Table Augmentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The controller has knowledge of MAC->IP mappings for wireless clients.
 | 
				
			||||||
 | 
					Augmenting the arp cache data with these MAC->IP mappings enables visibility
 | 
				
			||||||
 | 
					for stations that only communicate locally.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $airespace->at_paddr()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Adds MAC addresses extracted from the index of C<bsnMobileStationIpAddress>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $airespace->at_netaddr()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Adds IP addresses from C<bsnMobileStationIpAddress>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 Data Munging Callback Subroutines
 | 
					=head1 Data Munging Callback Subroutines
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
 | 
					use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress',
 | 
					    'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress',
 | 
				
			||||||
@@ -84,6 +84,17 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'bs_to'     => 'dot1dStaticAllowedToGoTo',
 | 
					    'bs_to'     => 'dot1dStaticAllowedToGoTo',
 | 
				
			||||||
    'bs_status' => 'dot1dStaticStatus',
 | 
					    'bs_status' => 'dot1dStaticStatus',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # These leafs are not part of a table, but placed here
 | 
				
			||||||
 | 
					    # to return a hash reference to ease API compatibility with
 | 
				
			||||||
 | 
					    # MST and PVST implementations indexed by a spanning tree
 | 
				
			||||||
 | 
					    # instance id
 | 
				
			||||||
 | 
					    'stp_i_mac'       => 'dot1dBaseBridgeAddress',
 | 
				
			||||||
 | 
					    'stp_i_time'      => 'dot1dStpTimeSinceTopologyChange',
 | 
				
			||||||
 | 
					    'stp_i_ntop'      => 'dot1dStpTopChanges',
 | 
				
			||||||
 | 
					    'stp_i_root'      => 'dot1dStpDesignatedRoot',
 | 
				
			||||||
 | 
					    'stp_i_root_port' => 'dot1dStpRootPort',
 | 
				
			||||||
 | 
					    'stp_i_priority'  => 'dot1dStpPriority',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Spanning Tree Protocol Table : dot1dStpPortTable
 | 
					    # Spanning Tree Protocol Table : dot1dStpPortTable
 | 
				
			||||||
    'stp_p_id'       => 'dot1dStpPort',
 | 
					    'stp_p_id'       => 'dot1dStpPort',
 | 
				
			||||||
    'stp_p_priority' => 'dot1dStpPortPriority',
 | 
					    'stp_p_priority' => 'dot1dStpPortPriority',
 | 
				
			||||||
@@ -125,15 +136,18 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'b_mac'            => \&SNMP::Info::munge_mac,
 | 
					    'b_mac'            => \&SNMP::Info::munge_mac,
 | 
				
			||||||
    'fw_mac'           => \&SNMP::Info::munge_mac,
 | 
					    'fw_mac'           => \&SNMP::Info::munge_mac,
 | 
				
			||||||
    'bs_mac'           => \&SNMP::Info::munge_mac,
 | 
					    'bs_mac'           => \&SNMP::Info::munge_mac,
 | 
				
			||||||
    'stp_root'         => \&SNMP::Info::munge_mac,
 | 
					    'stp_root'         => \&SNMP::Info::munge_prio_mac,
 | 
				
			||||||
 | 
					    'stp_i_mac'        => \&SNMP::Info::munge_mac,
 | 
				
			||||||
 | 
					    'stp_i_root'       => \&SNMP::Info::munge_prio_mac,
 | 
				
			||||||
    'stp_p_root'       => \&SNMP::Info::munge_prio_mac,
 | 
					    'stp_p_root'       => \&SNMP::Info::munge_prio_mac,
 | 
				
			||||||
    'stp_p_bridge'     => \&SNMP::Info::munge_prio_mac,
 | 
					    'stp_p_bridge'     => \&SNMP::Info::munge_prio_mac,
 | 
				
			||||||
    'stp_p_port'       => \&SNMP::Info::munge_prio_mac,
 | 
					    'stp_p_port'       => \&SNMP::Info::munge_prio_port,
 | 
				
			||||||
    'qb_cv_egress'     => \&SNMP::Info::munge_port_list,
 | 
					    'qb_cv_egress'     => \&SNMP::Info::munge_port_list,
 | 
				
			||||||
    'qb_cv_untagged'   => \&SNMP::Info::munge_port_list,
 | 
					    'qb_cv_untagged'   => \&SNMP::Info::munge_port_list,
 | 
				
			||||||
    'qb_v_egress'      => \&SNMP::Info::munge_port_list,
 | 
					    'qb_v_egress'      => \&SNMP::Info::munge_port_list,
 | 
				
			||||||
    'qb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
 | 
					    'qb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
 | 
				
			||||||
    'qb_v_untagged'    => \&SNMP::Info::munge_port_list,
 | 
					    'qb_v_untagged'    => \&SNMP::Info::munge_port_list,
 | 
				
			||||||
 | 
					    'qb_cv_untagged'   => \&SNMP::Info::munge_port_list,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -163,10 +177,20 @@ sub qb_fw_vlan {
 | 
				
			|||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $qb_fw_port = $bridge->qb_fw_port($partial);
 | 
					    my $qb_fw_port = $bridge->qb_fw_port($partial);
 | 
				
			||||||
 | 
					    my $qb_fdb_ids = $bridge->qb_fdb_index() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $qb_fw_vlan = {};
 | 
					    my $qb_fw_vlan = {};
 | 
				
			||||||
    foreach my $idx ( keys %$qb_fw_port ) {
 | 
					    foreach my $idx ( keys %$qb_fw_port ) {
 | 
				
			||||||
        my ( $fdb_id, $mac ) = _qb_fdbtable_index($idx);
 | 
					        my ( $fdb_id, $mac ) = _qb_fdbtable_index($idx);
 | 
				
			||||||
        $qb_fw_vlan->{$idx} = $fdb_id;
 | 
					        # Many devices do not populate the dot1qVlanCurrentTable, so default
 | 
				
			||||||
 | 
					        # to FDB ID = VID, but if we have a mapping use it.  
 | 
				
			||||||
 | 
					        my $vlan = $fdb_id;
 | 
				
			||||||
 | 
					        # defined as test since some devices have a vlan 0
 | 
				
			||||||
 | 
					        if (defined $qb_fdb_ids->{$fdb_id}) {
 | 
				
			||||||
 | 
					            $vlan = $qb_fdb_ids->{$fdb_id};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        $qb_fw_vlan->{$idx} = $vlan;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return $qb_fw_vlan;
 | 
					    return $qb_fw_vlan;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -189,6 +213,54 @@ sub qb_i_vlan_t {
 | 
				
			|||||||
    return $i_vlan;
 | 
					    return $i_vlan;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub qb_fdb_index {
 | 
				
			||||||
 | 
					    my $bridge  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Some devices may not implement TimeFilter in a standard manner
 | 
				
			||||||
 | 
					    # appearing to loop on this request.  Override in the device class,
 | 
				
			||||||
 | 
					    # see Enterasys for example.
 | 
				
			||||||
 | 
					    my $qb_fdb_ids = $bridge->dot1qVlanFdbId() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Strip the TimeFilter
 | 
				
			||||||
 | 
					    my $vl_fdb_index = {};
 | 
				
			||||||
 | 
					    for my $fdb_entry (keys(%$qb_fdb_ids)) {
 | 
				
			||||||
 | 
					        (my $vlan = $fdb_entry) =~ s/^\d+\.//;
 | 
				
			||||||
 | 
					        $vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $vl_fdb_index;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Most devices now support Q-BRIDGE-MIB, fall back to 
 | 
				
			||||||
 | 
					# BRIDGE-MIB for those that don't.
 | 
				
			||||||
 | 
					sub fw_mac {
 | 
				
			||||||
 | 
					    my $bridge = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $bridge->qb_fw_mac();
 | 
				
			||||||
 | 
					    return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $bridge->SUPER::fw_mac();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_port {
 | 
				
			||||||
 | 
					    my $bridge = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $bridge->qb_fw_port();
 | 
				
			||||||
 | 
					    return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $bridge->SUPER::fw_port();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_status {
 | 
				
			||||||
 | 
					    my $bridge = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $bridge->qb_fw_status();
 | 
				
			||||||
 | 
					    return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $bridge->SUPER::fw_status();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub i_stp_state {
 | 
					sub i_stp_state {
 | 
				
			||||||
    my $bridge  = shift;
 | 
					    my $bridge  = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -308,24 +380,37 @@ sub i_vlan {
 | 
				
			|||||||
    return $i_vlan;
 | 
					    return $i_vlan;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_untagged { goto &i_vlan }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub i_vlan_membership {
 | 
					sub i_vlan_membership {
 | 
				
			||||||
    my $bridge  = shift;
 | 
					    my $bridge  = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $index = $bridge->bp_index();
 | 
					    # Use VlanCurrentTable if available since it will include dynamic
 | 
				
			||||||
 | 
					    # VLANs.  However, some devices do not populate the table.
 | 
				
			||||||
 | 
					    my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $bridge->_vlan_hoa($v_ports, $partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership_untagged {
 | 
				
			||||||
 | 
					    my $bridge  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Use VlanCurrentTable if available since it will include dynamic
 | 
					    # Use VlanCurrentTable if available since it will include dynamic
 | 
				
			||||||
    # VLANs.  However, some devices do not populate the table.
 | 
					    # VLANs.  However, some devices do not populate the table.
 | 
				
			||||||
 | 
					    my $v_ports = $bridge->qb_cv_untagged() || $bridge->qb_v_untagged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # 11/07 - Todo: Issue with some devices trying to query VlanCurrentTable
 | 
					    return $bridge->_vlan_hoa($v_ports, $partial);
 | 
				
			||||||
    # as table may grow very large with frequent VLAN changes.
 | 
					}
 | 
				
			||||||
    # 06/08 - VlanCurrentTable may be due to timefilter, should query with
 | 
					 | 
				
			||||||
    # zero partial for no time filter.
 | 
					 | 
				
			||||||
    # my $v_ports = $bridge->qb_cv_egress() || $bridge->qb_v_egress();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $v_ports = $bridge->qb_v_egress() || {};
 | 
					sub _vlan_hoa {
 | 
				
			||||||
 | 
					    my $bridge = shift;
 | 
				
			||||||
 | 
					    my ( $v_ports, $partial ) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $i_vlan_membership = {};
 | 
					    my $index = $bridge->bp_index();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $vlan_hoa = {};
 | 
				
			||||||
    foreach my $idx ( keys %$v_ports ) {
 | 
					    foreach my $idx ( keys %$v_ports ) {
 | 
				
			||||||
        next unless ( defined $v_ports->{$idx} );
 | 
					        next unless ( defined $v_ports->{$idx} );
 | 
				
			||||||
        my $portlist = $v_ports->{$idx};
 | 
					        my $portlist = $v_ports->{$idx};
 | 
				
			||||||
@@ -345,10 +430,10 @@ sub i_vlan_membership {
 | 
				
			|||||||
            my $ifindex = $index->{$port};
 | 
					            my $ifindex = $index->{$port};
 | 
				
			||||||
            next unless ( defined($ifindex) );    # shouldn't happen
 | 
					            next unless ( defined($ifindex) );    # shouldn't happen
 | 
				
			||||||
            next if ( defined $partial and $ifindex !~ /^$partial$/ );
 | 
					            next if ( defined $partial and $ifindex !~ /^$partial$/ );
 | 
				
			||||||
            push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
 | 
					            push( @{ $vlan_hoa->{$ifindex} }, $vlan );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return $i_vlan_membership;
 | 
					    return $vlan_hoa;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_i_pvid {
 | 
					sub set_i_pvid {
 | 
				
			||||||
@@ -365,6 +450,8 @@ sub set_i_vlan {
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub set_i_untagged { goto &set_i_vlan }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_add_i_vlan_tagged {
 | 
					sub set_add_i_vlan_tagged {
 | 
				
			||||||
    my $bridge = shift;
 | 
					    my $bridge = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -597,6 +684,10 @@ to a hash.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
 | 
					Returns a mapping between C<ifIndex> and the PVID or default VLAN.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $vtp->i_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An alias for C<i_vlan>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $bridge->i_vlan_membership()
 | 
					=item $bridge->i_vlan_membership()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
					Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
				
			||||||
@@ -612,11 +703,21 @@ IDs.  These are the VLANs which are members of the egress list for the port.
 | 
				
			|||||||
    print "Port: $port VLAN: $vlan\n";
 | 
					    print "Port: $port VLAN: $vlan\n";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->i_vlan_membership_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
				
			||||||
 | 
					IDs.  These are the VLANs which are members of the untagged egress list for
 | 
				
			||||||
 | 
					the port.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $bridge->qb_i_vlan_t()
 | 
					=item $bridge->qb_i_vlan_t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to hash: key = C<dot1dBasePort>, value = either 'trunk' for
 | 
					Returns reference to hash: key = C<dot1dBasePort>, value = either 'trunk' for
 | 
				
			||||||
tagged ports or the VLAN ID.
 | 
					tagged ports or the VLAN ID.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->qb_fdb_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash: key = VLAN ID, value = FDB ID.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $bridge->v_index()
 | 
					=item $bridge->v_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns VLAN IDs
 | 
					Returns VLAN IDs
 | 
				
			||||||
@@ -670,6 +771,48 @@ to this port.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Spanning Tree Instance Globals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are not part of a table, but return a hash reference to ease API
 | 
				
			||||||
 | 
					compatibility with MST and PVST implementations indexed by a spanning tree
 | 
				
			||||||
 | 
					instance id.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->stp_i_time()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns time since last topology change detected. (100ths/second)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<dot1dStpTimeSinceTopologyChange>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->stp_i_time()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the total number of topology changes detected.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<dot1dStpTopChanges>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->stp_i_root()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns root of STP.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<dot1dStpDesignatedRoot>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->stp_i_root_port()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the port number of the port that offers the lowest cost path
 | 
				
			||||||
 | 
					to the root bridge.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<dot1dStpRootPort>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->stp_i_priority()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the port number of the port that offers the lowest cost path
 | 
				
			||||||
 | 
					to the root bridge.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<dot1dStpPriority>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Spanning Tree Protocol Table (C<dot1dStpPortTable>)
 | 
					=head2 Spanning Tree Protocol Table (C<dot1dStpPortTable>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Descriptions are straight from F<BRIDGE-MIB.my>
 | 
					Descriptions are straight from F<BRIDGE-MIB.my>
 | 
				
			||||||
@@ -893,6 +1036,10 @@ operations.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Currently unsupported.  Throws an error and returns.
 | 
					Currently unsupported.  Throws an error and returns.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bridge->set_i_untagged(vlan, ifIndex)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An alias for C<set_i_vlan>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $bridge->set_i_pvid(pvid, ifIndex)
 | 
					=item $bridge->set_i_pvid(pvid, ifIndex)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Currently unsupported.  Throws an error and returns.
 | 
					Currently unsupported.  Throws an error and returns.
 | 
				
			||||||
@@ -40,9 +40,10 @@ use SNMP::Info;
 | 
				
			|||||||
@SNMP::Info::CDP::ISA       = qw/SNMP::Info Exporter/;
 | 
					@SNMP::Info::CDP::ISA       = qw/SNMP::Info Exporter/;
 | 
				
			||||||
@SNMP::Info::CDP::EXPORT_OK = qw//;
 | 
					@SNMP::Info::CDP::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
 | 
					use vars
 | 
				
			||||||
 | 
					    qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Five data structures required by SNMP::Info
 | 
					# Five data structures required by SNMP::Info
 | 
				
			||||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
 | 
					%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
 | 
				
			||||||
@@ -61,7 +62,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'cdp_proto'        => 'cdpCacheAddressType',
 | 
					    'cdp_proto'        => 'cdpCacheAddressType',
 | 
				
			||||||
    'cdp_addr'         => 'cdpCacheAddress',
 | 
					    'cdp_addr'         => 'cdpCacheAddress',
 | 
				
			||||||
    'cdp_ver'          => 'cdpCacheVersion',
 | 
					    'cdp_ver'          => 'cdpCacheVersion',
 | 
				
			||||||
    'cdp_id'           => 'cdpCacheDeviceId',
 | 
					    'cdp_dev_id'       => 'cdpCacheDeviceId',
 | 
				
			||||||
    'cdp_port'         => 'cdpCacheDevicePort',
 | 
					    'cdp_port'         => 'cdpCacheDevicePort',
 | 
				
			||||||
    'cdp_platform'     => 'cdpCachePlatform',
 | 
					    'cdp_platform'     => 'cdpCachePlatform',
 | 
				
			||||||
    'cdp_capabilities' => 'cdpCacheCapabilities',
 | 
					    'cdp_capabilities' => 'cdpCacheCapabilities',
 | 
				
			||||||
@@ -76,17 +77,30 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    'cdp_capabilities' => \&SNMP::Info::munge_caps,
 | 
					    'cdp_capabilities' => \&SNMP::Info::munge_bits,
 | 
				
			||||||
    'cdp_platform'     => \&SNMP::Info::munge_null,
 | 
					    'cdp_platform'     => \&SNMP::Info::munge_null,
 | 
				
			||||||
    'cdp_domain'       => \&SNMP::Info::munge_null,
 | 
					    'cdp_domain'       => \&SNMP::Info::munge_null,
 | 
				
			||||||
    'cdp_port'         => \&SNMP::Info::munge_null,
 | 
					    'cdp_port'         => \&SNMP::Info::munge_null,
 | 
				
			||||||
    'cdp_id'           => \&SNMP::Info::munge_null,
 | 
					 | 
				
			||||||
    'cdp_ver'          => \&SNMP::Info::munge_null,
 | 
					    'cdp_ver'          => \&SNMP::Info::munge_null,
 | 
				
			||||||
    'cdp_ip'           => \&SNMP::Info::munge_ip,
 | 
					    'cdp_ip'           => \&SNMP::Info::munge_ip,
 | 
				
			||||||
    'cdp_power'        => \&munge_power,
 | 
					    'cdp_power'        => \&munge_power,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%CDP_CAPABILITIES = (
 | 
				
			||||||
 | 
					    'Router'                  => 0x001,
 | 
				
			||||||
 | 
					    'Trans-Bridge'            => 0x002,
 | 
				
			||||||
 | 
					    'Source-Route-Bridge'     => 0x004,
 | 
				
			||||||
 | 
					    'Switch'                  => 0x008,
 | 
				
			||||||
 | 
					    'Host'                    => 0x010,
 | 
				
			||||||
 | 
					    'IGMP'                    => 0x020,
 | 
				
			||||||
 | 
					    'Repeater'                => 0x040,
 | 
				
			||||||
 | 
					    'VoIP-Phone'              => 0x080,
 | 
				
			||||||
 | 
					    'Remotely-Managed-Device' => 0x100,
 | 
				
			||||||
 | 
					    'Supports-STP-Dispute'    => 0x200,
 | 
				
			||||||
 | 
					    'Two-port Mac Relay'      => 0x400,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub munge_power {
 | 
					sub munge_power {
 | 
				
			||||||
    my $power = shift;
 | 
					    my $power = shift;
 | 
				
			||||||
    my $decimal = substr( $power, -3 );
 | 
					    my $decimal = substr( $power, -3 );
 | 
				
			||||||
@@ -160,6 +174,57 @@ sub cdp_ip {
 | 
				
			|||||||
    return \%cdp_ip;
 | 
					    return \%cdp_ip;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub cdp_cap {
 | 
				
			||||||
 | 
					    my $cdp     = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Some devices return a hex-string, others return a space separated
 | 
				
			||||||
 | 
					    # string, we need the raw data to determine return value and
 | 
				
			||||||
 | 
					    # take appropriate action
 | 
				
			||||||
 | 
					    my $cdp_caps = $cdp->cdp_capabilities_raw($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %cdp_cap;
 | 
				
			||||||
 | 
					    foreach my $key ( keys %$cdp_caps ) {
 | 
				
			||||||
 | 
					        my $cap_raw = $cdp_caps->{$key};
 | 
				
			||||||
 | 
					        next unless $cap_raw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Simple check, smallest single string is either Host or IGMP with a
 | 
				
			||||||
 | 
					        # space added on the end for a length of 5, hex string is normally
 | 
				
			||||||
 | 
					        # 4 bytes, but since only one byte was traditionally needed process
 | 
				
			||||||
 | 
					        # as hex for a length of 4 or less
 | 
				
			||||||
 | 
					        if ( length $cap_raw < 5 ) {
 | 
				
			||||||
 | 
					            my $cap_hex = join( '',
 | 
				
			||||||
 | 
					                map { sprintf "%x", $_ } unpack( 'C*', $cap_raw ) );
 | 
				
			||||||
 | 
					            foreach my $capability ( keys %CDP_CAPABILITIES ) {
 | 
				
			||||||
 | 
					                if ( ( hex $cap_hex ) & $CDP_CAPABILITIES{$capability} ) {
 | 
				
			||||||
 | 
					                    push( @{ $cdp_cap{$key} }, $capability );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					            my @caps = split /\s/, $cap_raw;
 | 
				
			||||||
 | 
					            push( @{ $cdp_cap{$key} }, @caps );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%cdp_cap;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub cdp_id {
 | 
				
			||||||
 | 
					    my $cdp    = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $ch = $cdp->cdp_dev_id($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %cdp_id;
 | 
				
			||||||
 | 
					    foreach my $key ( sort keys %$ch ) {
 | 
				
			||||||
 | 
					        my $id = $ch->{$key};
 | 
				
			||||||
 | 
					        next unless $id;
 | 
				
			||||||
 | 
					        $id = SNMP::Info::munge_mac($id) || SNMP::Info::munge_null($id);
 | 
				
			||||||
 | 
					        $cdp_id{$key} = $id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%cdp_id;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -283,15 +348,24 @@ to a hash.
 | 
				
			|||||||
=item $cdp->cdp_capabilities()
 | 
					=item $cdp->cdp_capabilities()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns Device Functional Capabilities.  Results are munged into an ascii
 | 
					Returns Device Functional Capabilities.  Results are munged into an ascii
 | 
				
			||||||
binary string, 7 digits long, MSB.  Each digit represents a bit from the
 | 
					binary string, MSB.  Each digit represents a bit from the table below from 
 | 
				
			||||||
table below.
 | 
					the CDP Capabilities Mapping to Smartport Type table within the
 | 
				
			||||||
 | 
					Cisco Small Business 200 Series Smart Switch Administration Guide, 
 | 
				
			||||||
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
 | 
					L<http://www.cisco.com/c/en/us/support/switches/small-business-200-series-smart-switches/products-maintenance-guides-list.html>:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(Bit) - Description
 | 
					(Bit) - Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item (0x400) - Two-Port MAC Relay.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item (0x200) - CAST Phone Port / CVTA / Supports-STP-Dispute depending
 | 
				
			||||||
 | 
					                upon platform.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item (0x100) - Remotely-Managed Device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item (0x80)  - VoIP Phone.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item (0x40)  - Provides level 1 functionality.
 | 
					=item (0x40)  - Provides level 1 functionality.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item (0x20)  - The bridge or switch does not forward IGMP Report packets on
 | 
					=item (0x20)  - The bridge or switch does not forward IGMP Report packets on
 | 
				
			||||||
@@ -314,8 +388,8 @@ protocol.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to this
 | 
					Thanks to Martin Lorensen for a pointer to the original information and
 | 
				
			||||||
information.
 | 
					CPAN user Alex for updates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(C<cdpCacheCapabilities>)
 | 
					(C<cdpCacheCapabilities>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -427,6 +501,14 @@ for decimal placement.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
(C<cdpCachePowerConsumption>)
 | 
					(C<cdpCachePowerConsumption>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item  $cdp->cdp_cap() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns hash of arrays with each array containing the system capabilities
 | 
				
			||||||
 | 
					supported by the remote system.  Possible elements in the array are
 | 
				
			||||||
 | 
					C<Router>, C<Trans-Bridge>, C<Source-Route-Bridge>, C<Switch>, C<Host>,
 | 
				
			||||||
 | 
					C<IGMP>, C<Repeater>, C<VoIP-Phone>, C<Remotely-Managed-Device>,
 | 
				
			||||||
 | 
					C<Supports-STP-Dispute>, and C<Two-port Mac Relay>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 Data Munging Callback Subroutines
 | 
					=head1 Data Munging Callback Subroutines
 | 
				
			||||||
							
								
								
									
										150
									
								
								lib/SNMP/Info/CiscoAgg.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								lib/SNMP/Info/CiscoAgg.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,150 @@
 | 
				
			|||||||
 | 
					# SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (c) 2014 SNMP::Info Developers
 | 
				
			||||||
 | 
					# All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					# modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     * Redistributions of source code must retain the above copyright notice,
 | 
				
			||||||
 | 
					#       this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					#     * Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					#       notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					#       documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					#     * Neither the name of the University of California, Santa Cruz nor the
 | 
				
			||||||
 | 
					#       names of its contributors may be used to endorse or promote products
 | 
				
			||||||
 | 
					#       derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
				
			||||||
 | 
					# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
				
			||||||
 | 
					# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
				
			||||||
 | 
					# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
				
			||||||
 | 
					# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
				
			||||||
 | 
					# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
				
			||||||
 | 
					# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
				
			||||||
 | 
					# POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package SNMP::Info::CiscoAgg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					use Exporter;
 | 
				
			||||||
 | 
					use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SNMP::Info::CiscoAgg::ISA = qw/
 | 
				
			||||||
 | 
					  SNMP::Info::IEEE802dot3ad
 | 
				
			||||||
 | 
					  Exporter
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
 | 
					@SNMP::Info::CiscoAgg::EXPORT_OK = qw/
 | 
				
			||||||
 | 
					  agg_ports
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MIBS = (
 | 
				
			||||||
 | 
					  %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
				
			||||||
 | 
					  'CISCO-PAGP-MIB'   => 'pagpGroupIfIndex',
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%GLOBALS = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%FUNCS = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub agg_ports_pagp {
 | 
				
			||||||
 | 
					  my $dev = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Note that this mapping will miss any interfaces that are down during
 | 
				
			||||||
 | 
					  # polling. If one of the members is up, we could use
 | 
				
			||||||
 | 
					  # pagpAdminGroupCapability to figure things out, but if they're all
 | 
				
			||||||
 | 
					  # down, we're hosed. Since we could be hosed anyway, we skip the fancy
 | 
				
			||||||
 | 
					  # stuff.
 | 
				
			||||||
 | 
					  my $mapping = {};
 | 
				
			||||||
 | 
					  my $group = $dev->pagpGroupIfIndex;
 | 
				
			||||||
 | 
					  for my $slave (keys %$group) {
 | 
				
			||||||
 | 
					    my $master = $group->{$slave};
 | 
				
			||||||
 | 
					    next if($master == 0 || $slave == $master);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $mapping->{$slave} = $master;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return $mapping;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# until we have PAgP data and need to combine with LAG data
 | 
				
			||||||
 | 
					sub agg_ports {
 | 
				
			||||||
 | 
					  my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}};
 | 
				
			||||||
 | 
					  return $ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info::CiscoAgg - SNMP Interface to Cisco Aggregated Links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info Developers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 # Let SNMP::Info determine the correct subclass for you. 
 | 
				
			||||||
 | 
					 my $info = new SNMP::Info(
 | 
				
			||||||
 | 
					                          AutoSpecify => 1,
 | 
				
			||||||
 | 
					                          Debug       => 1,
 | 
				
			||||||
 | 
					                          DestHost    => 'myrouter',
 | 
				
			||||||
 | 
					                          Community   => 'public',
 | 
				
			||||||
 | 
					                          Version     => 2
 | 
				
			||||||
 | 
					                        ) 
 | 
				
			||||||
 | 
					    or die "Can't connect to DestHost.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 my $class = $info->class();
 | 
				
			||||||
 | 
					 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This class provides access to Aggregated Links configuration on Cisco devices.
 | 
				
			||||||
 | 
					It combines Cisco PAgP and IEEE 802.3ad information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					L<SNMP::Info::IEEE802dot3ad>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<CISCO-PAGP-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item C<agg_ports>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a HASH reference mapping from slave to master port for each member of
 | 
				
			||||||
 | 
					a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
				
			||||||
 | 
					ifIndex of the corresponding master ports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item C<agg_ports_pagp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
 | 
				
			||||||
 | 
					automatically.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=cut
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
 | 
					    'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
 | 
				
			||||||
@@ -97,6 +97,10 @@ sub copy_run_tftp {
 | 
				
			|||||||
        print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
 | 
					        print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #Check each set, delete created row if any fail
 | 
					        #Check each set, delete created row if any fail
 | 
				
			||||||
 | 
					        unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) {
 | 
				
			||||||
 | 
					            $ciscoconfig->error_throw("Initializing config copy instruction failed");
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
 | 
					        unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
 | 
				
			||||||
            $ciscoconfig->error_throw("Setting source type failed");
 | 
					            $ciscoconfig->error_throw("Setting source type failed");
 | 
				
			||||||
            unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
 | 
					            unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
 | 
				
			||||||
@@ -38,7 +38,7 @@ use Exporter;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
 | 
					    'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
 | 
					%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
 | 
				
			||||||
          'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
 | 
					          'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
 | 
					%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
 | 
					%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,14 +32,13 @@ package SNMP::Info::CiscoStack;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::CiscoStack::ISA       = qw/SNMP::Info Exporter/;
 | 
					@SNMP::Info::CiscoStack::ISA       = qw/Exporter/;
 | 
				
			||||||
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
 | 
					@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
 | 
					%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'SNMPv2-MIB'            => 'sysDescr',
 | 
					    'SNMPv2-MIB'            => 'sysDescr',
 | 
				
			||||||
@@ -88,6 +88,9 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # CISCO-FLASH-MIB::ciscoFlashDeviceTable
 | 
					    # CISCO-FLASH-MIB::ciscoFlashDeviceTable
 | 
				
			||||||
    'cisco_flash_size' => 'ciscoFlashDeviceSize',
 | 
					    'cisco_flash_size' => 'ciscoFlashDeviceSize',
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # CISCO-IMAGE-MIB
 | 
				
			||||||
 | 
					    'ci_images' => 'ciscoImageString',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = ();
 | 
					%MUNGE = ();
 | 
				
			||||||
@@ -103,6 +106,7 @@ sub os {
 | 
				
			|||||||
    # order here matters - there are Catalysts that run IOS and have catalyst
 | 
					    # order here matters - there are Catalysts that run IOS and have catalyst
 | 
				
			||||||
    # in their description field, as well as Catalysts that run IOS-XE.
 | 
					    # in their description field, as well as Catalysts that run IOS-XE.
 | 
				
			||||||
    return 'ios-xe'   if ( $descr =~ /IOS-XE/ );
 | 
					    return 'ios-xe'   if ( $descr =~ /IOS-XE/ );
 | 
				
			||||||
 | 
					    return 'ios-xr'   if ( $descr =~ /IOS XR/ );
 | 
				
			||||||
    return 'ios'      if ( $descr =~ /IOS/ );
 | 
					    return 'ios'      if ( $descr =~ /IOS/ );
 | 
				
			||||||
    return 'catalyst' if ( $descr =~ /catalyst/i );
 | 
					    return 'catalyst' if ( $descr =~ /catalyst/i );
 | 
				
			||||||
    return 'css'      if ( $descr =~ /Content Switch SW/ );
 | 
					    return 'css'      if ( $descr =~ /Content Switch SW/ );
 | 
				
			||||||
@@ -198,6 +202,13 @@ sub os_ver {
 | 
				
			|||||||
        return $1;
 | 
					        return $1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( defined $os
 | 
				
			||||||
 | 
					        and $os eq 'ios-xr'
 | 
				
			||||||
 | 
					        and defined $descr
 | 
				
			||||||
 | 
					        and $descr =~ m/Version (\d+[\.\d]+)/ )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Newer Catalysts and IOS devices
 | 
					    # Newer Catalysts and IOS devices
 | 
				
			||||||
    if ( defined $descr
 | 
					    if ( defined $descr
 | 
				
			||||||
@@ -409,6 +420,7 @@ Available values:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 'ios'          for Cisco IOS
 | 
					 'ios'          for Cisco IOS
 | 
				
			||||||
 'ios-xe'       for Cisco IOS XE
 | 
					 'ios-xe'       for Cisco IOS XE
 | 
				
			||||||
 | 
					 'ios-xr'       for Cisco IOS XR
 | 
				
			||||||
 'pix'          for Cisco PIX
 | 
					 'pix'          for Cisco PIX
 | 
				
			||||||
 'asa'          for Cisco ASA
 | 
					 'asa'          for Cisco ASA
 | 
				
			||||||
 'fwsm'         for Single-mode FWSM
 | 
					 'fwsm'         for Single-mode FWSM
 | 
				
			||||||
@@ -530,4 +542,16 @@ zero if the device has been removed.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Cisco Image Table (C<ciscoImageTable>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ci->ci_images()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the table of image strings.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					C<ciscoImageString>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
 | 
					use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
 | 
					@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
 | 
				
			||||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
 | 
					@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'CISCO-VTP-MIB'                       => 'vtpVlanName',
 | 
					    'CISCO-VTP-MIB'                       => 'vtpVlanName',
 | 
				
			||||||
@@ -149,6 +149,7 @@ sub i_vlan {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $port_vlan      = $vtp->vtp_trunk_native($partial)   || {};
 | 
					    my $port_vlan      = $vtp->vtp_trunk_native($partial)   || {};
 | 
				
			||||||
    my $i_vlan         = $vtp->i_vlan2($partial)            || {};
 | 
					    my $i_vlan         = $vtp->i_vlan2($partial)            || {};
 | 
				
			||||||
 | 
					    my $trunk_dyn      = $vtp->vtp_trunk_dyn($partial)      || {};
 | 
				
			||||||
    my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
 | 
					    my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my %i_vlans;
 | 
					    my %i_vlans;
 | 
				
			||||||
@@ -165,15 +166,23 @@ sub i_vlan {
 | 
				
			|||||||
    foreach my $port ( keys %$port_vlan ) {
 | 
					    foreach my $port ( keys %$port_vlan ) {
 | 
				
			||||||
        my $vlan = $port_vlan->{$port};
 | 
					        my $vlan = $port_vlan->{$port};
 | 
				
			||||||
        next unless defined $vlan;
 | 
					        next unless defined $vlan;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # ports up and trunking should have a trunking status
 | 
				
			||||||
        my $stat = $trunk_dyn_stat->{$port};
 | 
					        my $stat = $trunk_dyn_stat->{$port};
 | 
				
			||||||
        if ( defined $stat and $stat =~ /^trunking/ ) {
 | 
					
 | 
				
			||||||
 | 
					        # vtp_trunk_dyn_stat is not useful for down ports
 | 
				
			||||||
 | 
					        # so we use vtp_trunk_dyn to see if trunking is set
 | 
				
			||||||
 | 
					        my $dyn = $trunk_dyn->{$port};
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if (($stat and $stat =~ /^trunking/ )
 | 
				
			||||||
 | 
					            or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
            $i_vlans{$port} = $vlan;
 | 
					            $i_vlans{$port} = $vlan;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Check in CISCO-VLAN-IFTABLE-RELATION-MIB
 | 
					    # Check in CISCO-VLAN-IFTABLE-RELATION-MIB
 | 
				
			||||||
    # Is this only for Aironet???  If so, it needs
 | 
					    # Used for traditional Cisco Routers and Aironet
 | 
				
			||||||
    # to be removed from this class
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $v_cvi_if = $vtp->v_cvi_if();
 | 
					    my $v_cvi_if = $vtp->v_cvi_if();
 | 
				
			||||||
    if ( defined $v_cvi_if ) {
 | 
					    if ( defined $v_cvi_if ) {
 | 
				
			||||||
@@ -191,6 +200,22 @@ sub i_vlan {
 | 
				
			|||||||
    return \%i_vlans;
 | 
					    return \%i_vlans;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_untagged {
 | 
				
			||||||
 | 
					    my $vtp = shift;
 | 
				
			||||||
 | 
					    my ( $ifindex ) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # cannot defer to i_vlan - vtp_trunk_dyn_stat is not useful for down ports
 | 
				
			||||||
 | 
					    # so we use vtp_trunk_dyn as a hint to use i_pvid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $trunking = eval { $vtp->vtp_trunk_dyn($ifindex)->{$ifindex} };
 | 
				
			||||||
 | 
					    if ($trunking and (($trunking eq 'on') or ($trunking eq 'onNoNegotiate'))) {
 | 
				
			||||||
 | 
					        return $vtp->i_pvid(@_);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        return $vtp->i_vlan(@_);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub i_vlan_membership {
 | 
					sub i_vlan_membership {
 | 
				
			||||||
    my $vtp     = shift;
 | 
					    my $vtp     = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -202,6 +227,8 @@ sub i_vlan_membership {
 | 
				
			|||||||
    my $vtp_vlans      = $vtp->v_state();
 | 
					    my $vtp_vlans      = $vtp->v_state();
 | 
				
			||||||
    my $i_vlan         = $vtp->i_vlan2($partial)            || {};
 | 
					    my $i_vlan         = $vtp->i_vlan2($partial)            || {};
 | 
				
			||||||
    my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
 | 
					    my $trunk_dyn_stat = $vtp->vtp_trunk_dyn_stat($partial) || {};
 | 
				
			||||||
 | 
					    my $trunk_dyn      = $vtp->vtp_trunk_dyn($partial)      || {};
 | 
				
			||||||
 | 
					    my $i_voice_vlan   = $vtp->i_voice_vlan($partial)       || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $i_vlan_membership = {};
 | 
					    my $i_vlan_membership = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -209,14 +236,24 @@ sub i_vlan_membership {
 | 
				
			|||||||
    foreach my $port ( keys %$i_vlan ) {
 | 
					    foreach my $port ( keys %$i_vlan ) {
 | 
				
			||||||
        my $vlan = $i_vlan->{$port};
 | 
					        my $vlan = $i_vlan->{$port};
 | 
				
			||||||
        next unless defined $vlan;
 | 
					        next unless defined $vlan;
 | 
				
			||||||
        my $stat = $trunk_dyn_stat->{$port};
 | 
					        my $dyn = $trunk_dyn->{$port};
 | 
				
			||||||
        if ( defined $stat and $stat =~ /notTrunking/ ) {
 | 
					        unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
 | 
				
			||||||
 | 
					            push( @{ $i_vlan_membership->{$port} }, $vlan );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Get voice VLANs
 | 
				
			||||||
 | 
					    foreach my $port ( keys %$i_voice_vlan ) {
 | 
				
			||||||
 | 
					        my $vlan = $i_voice_vlan->{$port};
 | 
				
			||||||
 | 
					        next unless defined $vlan;
 | 
				
			||||||
 | 
					        next unless ($vlan =~ m/[[:digit:]]+/ and $vlan < 4095);
 | 
				
			||||||
 | 
					        my $dyn = $trunk_dyn->{$port};
 | 
				
			||||||
 | 
					        unless ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate'))) {
 | 
				
			||||||
            push( @{ $i_vlan_membership->{$port} }, $vlan );
 | 
					            push( @{ $i_vlan_membership->{$port} }, $vlan );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Get trunk ports
 | 
					    # Get trunk ports
 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %oper_vlans;
 | 
					    my %oper_vlans;
 | 
				
			||||||
    foreach my $iid ( keys %$vtp_vlans ) {
 | 
					    foreach my $iid ( keys %$vtp_vlans ) {
 | 
				
			||||||
        my $vlan    = 0;
 | 
					        my $vlan    = 0;
 | 
				
			||||||
@@ -233,7 +270,9 @@ sub i_vlan_membership {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    foreach my $port ( keys %$ports_vlans ) {
 | 
					    foreach my $port ( keys %$ports_vlans ) {
 | 
				
			||||||
        my $stat = $trunk_dyn_stat->{$port};
 | 
					        my $stat = $trunk_dyn_stat->{$port};
 | 
				
			||||||
        if ( defined $stat and $stat =~ /^trunking/ ) {
 | 
					        my $dyn = $trunk_dyn->{$port};
 | 
				
			||||||
 | 
					        if (($stat and $stat =~ /^trunking/ )
 | 
				
			||||||
 | 
					            or ($dyn and (($dyn eq 'on') or ($dyn eq 'onNoNegotiate')))) {
 | 
				
			||||||
            my $k     = 0;
 | 
					            my $k     = 0;
 | 
				
			||||||
            my $list1 = $ports_vlans->{$port} || '0';
 | 
					            my $list1 = $ports_vlans->{$port} || '0';
 | 
				
			||||||
            my $list2 = $ports_vlans_2k->{$port} || '0';
 | 
					            my $list2 = $ports_vlans_2k->{$port} || '0';
 | 
				
			||||||
@@ -255,6 +294,20 @@ sub i_vlan_membership {
 | 
				
			|||||||
    return $i_vlan_membership;
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership_untagged {
 | 
				
			||||||
 | 
					    my $vtp  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $vlans = $vtp->i_vlan($partial);
 | 
				
			||||||
 | 
					    my $i_vlan_membership = {};
 | 
				
			||||||
 | 
					    foreach my $port (keys %$vlans) {
 | 
				
			||||||
 | 
					        my $vlan = $vlans->{$port};
 | 
				
			||||||
 | 
					        push( @{ $i_vlan_membership->{$port} }, $vlan );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_i_pvid {
 | 
					sub set_i_pvid {
 | 
				
			||||||
    my $vtp = shift;
 | 
					    my $vtp = shift;
 | 
				
			||||||
    my ( $vlan_id, $ifindex ) = @_;
 | 
					    my ( $vlan_id, $ifindex ) = @_;
 | 
				
			||||||
@@ -306,6 +359,22 @@ sub set_i_vlan {
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub set_i_untagged {
 | 
				
			||||||
 | 
					    my $vtp = shift;
 | 
				
			||||||
 | 
					    my ( $vlan_id, $ifindex ) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # cannot defer to i_vlan - vtp_trunk_dyn_stat is not useful for down ports
 | 
				
			||||||
 | 
					    # so we use vtp_trunk_dyn as a hint to use i_pvid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $trunking = eval { $vtp->vtp_trunk_dyn($ifindex)->{$ifindex} };
 | 
				
			||||||
 | 
					    if ($trunking and (($trunking eq 'on') or ($trunking eq 'onNoNegotiate'))) {
 | 
				
			||||||
 | 
					        return $vtp->set_i_pvid(@_);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        return $vtp->set_i_vlan(@_);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_add_i_vlan_tagged {
 | 
					sub set_add_i_vlan_tagged {
 | 
				
			||||||
    my $vtp = shift;
 | 
					    my $vtp = shift;
 | 
				
			||||||
    my ( $vlan_id, $ifindex ) = @_;
 | 
					    my ( $vlan_id, $ifindex ) = @_;
 | 
				
			||||||
@@ -540,6 +609,10 @@ Your device will only implement a subset of these methods.
 | 
				
			|||||||
Returns a mapping between C<ifIndex> and assigned VLAN ID for access ports
 | 
					Returns a mapping between C<ifIndex> and assigned VLAN ID for access ports
 | 
				
			||||||
and the default VLAN ID for trunk ports.
 | 
					and the default VLAN ID for trunk ports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $vtp->i_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An alias for C<i_vlan>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $vtp->i_vlan_membership()
 | 
					=item $vtp->i_vlan_membership()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
					Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
				
			||||||
@@ -555,6 +628,12 @@ IDs.  These are the VLANs which are members of enabled VLAN list for the port.
 | 
				
			|||||||
    print "Port: $port VLAN: $vlan\n";
 | 
					    print "Port: $port VLAN: $vlan\n";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $vtp->i_vlan_membership_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
				
			||||||
 | 
					IDs.  These are the VLANs which are members of the untagged egress list for
 | 
				
			||||||
 | 
					the port.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 VLAN Table (C<CISCO-VTP-MIB::vtpVlanTable>)
 | 
					=head2 VLAN Table (C<CISCO-VTP-MIB::vtpVlanTable>)
 | 
				
			||||||
@@ -835,6 +914,12 @@ port C<ifIndex>.  This method should only be used on trunk ports.
 | 
				
			|||||||
  $vtp->set_i_pvid('2', $if_map{'FastEthernet0/1'}) 
 | 
					  $vtp->set_i_pvid('2', $if_map{'FastEthernet0/1'}) 
 | 
				
			||||||
    or die "Couldn't change port default VLAN. ",$vtp->error(1);
 | 
					    or die "Couldn't change port default VLAN. ",$vtp->error(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $vtp->set_i_untagged ( vlan, ifIndex )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This method attempts to work out whether the port referenced by ifIndex is
 | 
				
			||||||
 | 
					trunking, and if so will return the value of C<set_i_pvid>. Otherwise, the
 | 
				
			||||||
 | 
					value of C<set_i_vlan> is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $vtp->set_add_i_vlan_tagged ( vlan, ifIndex )
 | 
					=item $vtp->set_add_i_vlan_tagged ( vlan, ifIndex )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Adds the VLAN to the enabled VLANs list of the port, must be supplied with the
 | 
					Adds the VLAN to the enabled VLANs list of the port, must be supplied with the
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex',
 | 
					    'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex',
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
 | 
					%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
 | 
					%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
 | 
					%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,7 +50,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'fdp_run'      => 'snFdpGlobalRun',
 | 
					    'fdp_run'      => 'snFdpGlobalRun',
 | 
				
			||||||
    'fdp_interval' => 'snFdpGlobalMessageInterval',
 | 
					    'fdp_interval' => 'snFdpGlobalMessageInterval',
 | 
				
			||||||
    'fdp_holdtime' => 'snFdpGlobalHoldTime',
 | 
					    'fdp_holdtime' => 'snFdpGlobalHoldTime',
 | 
				
			||||||
    'fdp_id'       => 'snFdpGlobalDeviceId',
 | 
					    'fdp_gid'      => 'snFdpGlobalDeviceId',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
@@ -68,7 +68,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    'fdp_capabilities' => \&SNMP::Info::munge_caps,
 | 
					    'fdp_capabilities' => \&SNMP::Info::munge_bits,
 | 
				
			||||||
    'fdp_ip'           => \&SNMP::Info::munge_ip
 | 
					    'fdp_ip'           => \&SNMP::Info::munge_ip
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -231,7 +231,7 @@ Time in seconds that FDP messages are kept.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
(C<fdpGlobalHoldTime>)
 | 
					(C<fdpGlobalHoldTime>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item  $fdp->fdp_id() 
 | 
					=item  $fdp->fdp_gid()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns FDP device ID.  
 | 
					Returns FDP device ID.  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -289,8 +289,7 @@ CDP compatibility
 | 
				
			|||||||
=item $fdp->fdp_capabilities()
 | 
					=item $fdp->fdp_capabilities()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns Device Functional Capabilities.  Results are munged into an ascii
 | 
					Returns Device Functional Capabilities.  Results are munged into an ascii
 | 
				
			||||||
binary string, 7 digits long, MSB.  Each digit represents a bit from the
 | 
					binary string, MSB.  Each digit represents a bit from the table below.
 | 
				
			||||||
table below.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
 | 
					From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -320,8 +319,7 @@ protocol.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to
 | 
					Thanks to Martin Lorensen for a pointer to this information.
 | 
				
			||||||
this information.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
(C<fdpCacheCapabilities>)
 | 
					(C<fdpCacheCapabilities>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,7 +38,7 @@ use Exporter;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
 | 
					%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										141
									
								
								lib/SNMP/Info/IEEE802dot3ad.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								lib/SNMP/Info/IEEE802dot3ad.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
				
			|||||||
 | 
					# SNMP::Info::IEEE802dot3ad
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (c) 2014 SNMP::Info Developers
 | 
				
			||||||
 | 
					# All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					# modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     * Redistributions of source code must retain the above copyright notice,
 | 
				
			||||||
 | 
					#       this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					#     * Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					#       notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					#       documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					#     * Neither the name of the University of California, Santa Cruz nor the
 | 
				
			||||||
 | 
					#       names of its contributors may be used to endorse or promote products
 | 
				
			||||||
 | 
					#       derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
				
			||||||
 | 
					# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
				
			||||||
 | 
					# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
				
			||||||
 | 
					# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
				
			||||||
 | 
					# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
				
			||||||
 | 
					# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
				
			||||||
 | 
					# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
				
			||||||
 | 
					# POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package SNMP::Info::IEEE802dot3ad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					use Exporter;
 | 
				
			||||||
 | 
					use SNMP::Info::Aggregate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SNMP::Info::IEEE802dot3ad::ISA = qw/
 | 
				
			||||||
 | 
					  SNMP::Info::Aggregate
 | 
				
			||||||
 | 
					  Exporter
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
 | 
					@SNMP::Info::IEEE802dot3ad::EXPORT_OK = qw/
 | 
				
			||||||
 | 
					  agg_ports_lag
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MIBS = (
 | 
				
			||||||
 | 
					  %SNMP::Info::Aggregate::MIBS,
 | 
				
			||||||
 | 
					  'IEEE8023-LAG-MIB' => 'dot3adAggPortSelectedAggID',
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%GLOBALS = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%FUNCS = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub agg_ports_lag {
 | 
				
			||||||
 | 
					  my $dev = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # TODO: implement partial
 | 
				
			||||||
 | 
					  my $masters = $dev->dot3adAggActorOperKey;
 | 
				
			||||||
 | 
					  my $slaves  = $dev->dot3adAggPortActorOperKey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return {} unless
 | 
				
			||||||
 | 
					    ref {} eq ref $masters and scalar keys %$masters
 | 
				
			||||||
 | 
					    and ref {} eq ref $slaves and scalar keys %$slaves;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return $ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info::IEEE802dot3ad - SNMP Interface to IEEE Aggregated Links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info Developers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 # Let SNMP::Info determine the correct subclass for you. 
 | 
				
			||||||
 | 
					 my $info = new SNMP::Info(
 | 
				
			||||||
 | 
					                          AutoSpecify => 1,
 | 
				
			||||||
 | 
					                          Debug       => 1,
 | 
				
			||||||
 | 
					                          DestHost    => 'myrouter',
 | 
				
			||||||
 | 
					                          Community   => 'public',
 | 
				
			||||||
 | 
					                          Version     => 2
 | 
				
			||||||
 | 
					                        ) 
 | 
				
			||||||
 | 
					    or die "Can't connect to DestHost.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 my $class = $info->class();
 | 
				
			||||||
 | 
					 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This class provides access to Aggregated Links configuration on devices
 | 
				
			||||||
 | 
					implementing C<IEEE8023-LAG-MIB>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					L<SNMP::Info::Aggregate>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<IEEE8023-LAG-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item C<agg_ports_lag>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a HASH reference mapping from slave to master port for each member of
 | 
				
			||||||
 | 
					a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
				
			||||||
 | 
					ifIndex of the corresponding master ports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=cut
 | 
				
			||||||
@@ -44,7 +44,7 @@ use constant {
 | 
				
			|||||||
    IPV6MIB => 3,
 | 
					    IPV6MIB => 3,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -75,7 +75,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB 
 | 
					    'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB 
 | 
				
			||||||
    'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB 
 | 
					    'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIBw
 | 
					    'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIB
 | 
				
			||||||
    'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB 
 | 
					    'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB
 | 
					    'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB
 | 
				
			||||||
@@ -142,6 +142,12 @@ sub ipv6_n2p_addr {
 | 
				
			|||||||
                    # so what we've collected in that variable is actually the first byte of the address.
 | 
					                    # so what we've collected in that variable is actually the first byte of the address.
 | 
				
			||||||
                    $v6_packed = pack('C', $addrsize) . $v6_packed;
 | 
					                    $v6_packed = pack('C', $addrsize) . $v6_packed;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                if (length($v6_packed) == 17) {
 | 
				
			||||||
 | 
					                    # Workaround for IPV6-MIB on Windows 2012: if the address is one byte too long, the SNMP agent probably has an incorrect
 | 
				
			||||||
 | 
					                    # implementation where a length field precedes the actual IPv6 address.
 | 
				
			||||||
 | 
					                    # In that case, the first character should be chr(16), ie 0x10; strip it if that's the case.
 | 
				
			||||||
 | 
					                    $v6_packed =~ s/^\x10//;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                if (length($v6_packed) == 16) {
 | 
					                if (length($v6_packed) == 16) {
 | 
				
			||||||
                    $v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
 | 
					                    $v6addr = join(':', map { sprintf("%04x", $_) } unpack("n*", $v6_packed) );
 | 
				
			||||||
                    $return->{$row} = $v6addr;
 | 
					                    $return->{$row} = $v6addr;
 | 
				
			||||||
@@ -307,7 +313,9 @@ sub ipv6_addr_prefix {
 | 
				
			|||||||
    foreach my $row (keys %$ipv6_addr_prefix){
 | 
					    foreach my $row (keys %$ipv6_addr_prefix){
 | 
				
			||||||
        if ($row =~ /^(\d+)\.[\d\.]+$/) {
 | 
					        if ($row =~ /^(\d+)\.[\d\.]+$/) {
 | 
				
			||||||
            my $type = $1;
 | 
					            my $type = $1;
 | 
				
			||||||
            if ($type == 2) { # IPv6
 | 
						    if (($type == 2) or ($type == 4)) { # IPv6
 | 
				
			||||||
 | 
							# Remove interface specific part from vrf interfaces
 | 
				
			||||||
 | 
							if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
 | 
				
			||||||
		# Remove the OID part from the value
 | 
							# Remove the OID part from the value
 | 
				
			||||||
		my $val = $ipv6_addr_prefix->{$row};
 | 
							my $val = $ipv6_addr_prefix->{$row};
 | 
				
			||||||
		if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
 | 
							if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
 | 
				
			||||||
@@ -321,6 +329,29 @@ sub ipv6_addr_prefix {
 | 
				
			|||||||
    return $return;
 | 
					    return $return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub ipv6_addr {
 | 
				
			||||||
 | 
					    my $info = shift;
 | 
				
			||||||
 | 
					    my $return;
 | 
				
			||||||
 | 
					    my $indexes = $info->ipv6_index();
 | 
				
			||||||
 | 
					    foreach my $row (keys %$indexes) {
 | 
				
			||||||
 | 
					        my @parts = split(/\./, $row);
 | 
				
			||||||
 | 
					        my $is_valid = 0;
 | 
				
			||||||
 | 
					        if (scalar @parts == 18) {
 | 
				
			||||||
 | 
					            my $addrtype = shift @parts;
 | 
				
			||||||
 | 
					            $is_valid = 1;
 | 
				
			||||||
 | 
					        } elsif (scalar @parts == 17) {
 | 
				
			||||||
 | 
					            $is_valid = 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        my $addrsize = shift @parts; # First element now is addrsize, should be 16
 | 
				
			||||||
 | 
					        if ($is_valid && $addrsize == 16) {
 | 
				
			||||||
 | 
					            $return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts)));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub _method_used {
 | 
					sub _method_used {
 | 
				
			||||||
    my $info = shift;
 | 
					    my $info = shift;
 | 
				
			||||||
    my $return = 'none of the MIBs';
 | 
					    my $return = 'none of the MIBs';
 | 
				
			||||||
@@ -459,6 +490,10 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Maps IPv6 addresses with their prefixes
 | 
					Maps IPv6 addresses with their prefixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $info->ipv6_addr()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Maps a table instance to an IPv6 address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2  Internet Address Translation Table
 | 
					=head2  Internet Address Translation Table
 | 
				
			||||||
@@ -39,10 +39,11 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    'LLDP-MIB'          => 'lldpLocSysCapEnabled',
 | 
					    'LLDP-MIB'          => 'lldpLocSysCapEnabled',
 | 
				
			||||||
 | 
					    'LLDP-EXT-MED-MIB'  => 'lldpXMedMIB',
 | 
				
			||||||
    'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
 | 
					    'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
 | 
				
			||||||
    'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
 | 
					    'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
@@ -67,6 +68,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'lldp_rem_sysname'  => 'lldpRemSysName',
 | 
					    'lldp_rem_sysname'  => 'lldpRemSysName',
 | 
				
			||||||
    'lldp_rem_sysdesc'  => 'lldpRemSysDesc',
 | 
					    'lldp_rem_sysdesc'  => 'lldpRemSysDesc',
 | 
				
			||||||
    'lldp_rem_sys_cap'  => 'lldpRemSysCapEnabled',
 | 
					    'lldp_rem_sys_cap'  => 'lldpRemSysCapEnabled',
 | 
				
			||||||
 | 
					    'lldp_rem_cap_spt'  => 'lldpRemSysCapSupported',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # LLDP-MIB::lldpRemManAddrTable
 | 
					    # LLDP-MIB::lldpRemManAddrTable
 | 
				
			||||||
    'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
 | 
					    'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
 | 
				
			||||||
@@ -80,6 +82,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
 | 
					    'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
 | 
				
			||||||
    'lldp_sys_cap'       => \&SNMP::Info::munge_bits,
 | 
					    'lldp_sys_cap'       => \&SNMP::Info::munge_bits,
 | 
				
			||||||
    'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits,
 | 
					    'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits,
 | 
				
			||||||
 | 
					    'lldp_rem_cap_spt'   => \&SNMP::Info::munge_bits,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub hasLLDP {
 | 
					sub hasLLDP {
 | 
				
			||||||
@@ -88,8 +91,12 @@ sub hasLLDP {
 | 
				
			|||||||
    # We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
 | 
					    # We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
 | 
				
			||||||
    # so we could be running LLDP but not return any useful information
 | 
					    # so we could be running LLDP but not return any useful information
 | 
				
			||||||
    my $lldp_cap = $lldp->lldp_sys_cap();
 | 
					    my $lldp_cap = $lldp->lldp_sys_cap();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 1 if defined $lldp_cap;
 | 
					    return 1 if defined $lldp_cap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # If the device doesn't return local system capabilities, fallback by checking if it would report neighbors
 | 
				
			||||||
 | 
					    my $lldp_rem = $lldp->lldp_rem_id() || {};
 | 
				
			||||||
 | 
					    return 1 if scalar keys %$lldp_rem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,9 +122,10 @@ sub lldp_if {
 | 
				
			|||||||
        my $lldp_desc = $lldp->lldpLocPortDesc($port);
 | 
					        my $lldp_desc = $lldp->lldpLocPortDesc($port);
 | 
				
			||||||
        my $desc      = $lldp_desc->{$port};
 | 
					        my $desc      = $lldp_desc->{$port};
 | 
				
			||||||
        # If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum
 | 
					        # If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum
 | 
				
			||||||
        if ( exists $r_i_descr{$desc} ) {
 | 
					        if ( $desc && exists $r_i_descr{$desc} ) {
 | 
				
			||||||
            $port = $r_i_descr{$desc};
 | 
					            $port = $r_i_descr{$desc};
 | 
				
			||||||
        } elsif ( exists $r_i_alias{$desc} ) {
 | 
					        }
 | 
				
			||||||
 | 
					        elsif ( $desc && exists $r_i_alias{$desc} ) {
 | 
				
			||||||
            $port = $r_i_alias{$desc};
 | 
					            $port = $r_i_alias{$desc};
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -142,6 +150,38 @@ sub lldp_ip {
 | 
				
			|||||||
    return \%lldp_ip;
 | 
					    return \%lldp_ip;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub lldp_ipv6 {
 | 
				
			||||||
 | 
					    my $lldp    = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %lldp_ipv6;
 | 
				
			||||||
 | 
					    foreach my $key ( keys %$rman_addr ) {
 | 
				
			||||||
 | 
					        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
				
			||||||
 | 
					        next unless defined $index;
 | 
				
			||||||
 | 
					        next unless $proto == 2;
 | 
				
			||||||
 | 
					        $lldp_ipv6{$index} = $addr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%lldp_ipv6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub lldp_mac {
 | 
				
			||||||
 | 
					    my $lldp    = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %lldp_ipv6;
 | 
				
			||||||
 | 
					    foreach my $key ( keys %$rman_addr ) {
 | 
				
			||||||
 | 
					        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
				
			||||||
 | 
					        next unless defined $index;
 | 
				
			||||||
 | 
					        next unless $proto == 6;
 | 
				
			||||||
 | 
					        $lldp_ipv6{$index} = $addr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%lldp_ipv6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub lldp_addr {
 | 
					sub lldp_addr {
 | 
				
			||||||
    my $lldp    = shift;
 | 
					    my $lldp    = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -164,14 +204,21 @@ sub lldp_port {
 | 
				
			|||||||
    my $pdesc = $lldp->lldp_rem_desc($partial)     || {};
 | 
					    my $pdesc = $lldp->lldp_rem_desc($partial)     || {};
 | 
				
			||||||
    my $pid   = $lldp->lldp_rem_pid($partial)      || {};
 | 
					    my $pid   = $lldp->lldp_rem_pid($partial)      || {};
 | 
				
			||||||
    my $ptype = $lldp->lldp_rem_pid_type($partial) || {};
 | 
					    my $ptype = $lldp->lldp_rem_pid_type($partial) || {};
 | 
				
			||||||
 | 
					    my $desc  = $lldp->lldp_rem_sysdesc($partial)  || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my %lldp_port;
 | 
					    my %lldp_port;
 | 
				
			||||||
    foreach my $key ( sort keys %$pid ) {
 | 
					    foreach my $key ( sort keys %$pid ) {
 | 
				
			||||||
        my $port = $pdesc->{$key};
 | 
					        my $port = $pdesc->{$key};
 | 
				
			||||||
 | 
					        my $type = $ptype->{$key};
 | 
				
			||||||
 | 
					        if ( $type and $type eq 'interfaceName' ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # If the pid claims to be an interface name,
 | 
				
			||||||
 | 
					            # believe it.
 | 
				
			||||||
 | 
					            $port = $pid->{$key};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        unless ($port) {
 | 
					        unless ($port) {
 | 
				
			||||||
            $port = $pid->{$key};
 | 
					            $port = $pid->{$key};
 | 
				
			||||||
            next unless $port;
 | 
					            next unless $port;
 | 
				
			||||||
            my $type = $ptype->{$key};
 | 
					 | 
				
			||||||
            next unless $type;
 | 
					            next unless $type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          # May need to format other types in the future, i.e. Network address
 | 
					          # May need to format other types in the future, i.e. Network address
 | 
				
			||||||
@@ -183,8 +230,12 @@ sub lldp_port {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        # Avaya/Nortel lldpRemPortDesc doesn't match ifDescr, but we can still
 | 
					        # Avaya/Nortel lldpRemPortDesc doesn't match ifDescr, but we can still
 | 
				
			||||||
        # figure out slot.port based upon lldpRemPortDesc
 | 
					        # figure out slot.port based upon lldpRemPortDesc
 | 
				
			||||||
        if ( $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ ) {
 | 
					        if ( defined $desc->{$key}
 | 
				
			||||||
            $port = defined $1 ? "$2.$3" : "$3";
 | 
					            && $desc->{$key}
 | 
				
			||||||
 | 
					            =~ /^Ethernet\s(?:Routing\s)?Switch\s\d|^Virtual\sServices\sPlatform\s\d/
 | 
				
			||||||
 | 
					            && $port =~ /^(Unit\s+(\d+)\s+)?Port\s+(\d+)$/ )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $port = defined $1 ? "$2.$3" : "1.$3";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $lldp_port{$key} = $port;
 | 
					        $lldp_port{$key} = $port;
 | 
				
			||||||
@@ -212,8 +263,11 @@ sub lldp_id {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif ( $type eq 'networkAddress' ) {
 | 
					        elsif ( $type eq 'networkAddress' ) {
 | 
				
			||||||
            if ( length( unpack( 'H*', $id ) ) == 10 ) {
 | 
					            if ( length( unpack( 'H*', $id ) ) == 10 ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # IP address (first octet is sign, I guess)
 | 
					                # IP address (first octet is sign, I guess)
 | 
				
			||||||
                my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
 | 
					                my @octets
 | 
				
			||||||
 | 
					                    = ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
 | 
				
			||||||
 | 
					                    [ 1 .. 4 ];
 | 
				
			||||||
                $id = join '.', map { hex($_) } @octets;
 | 
					                $id = join '.', map { hex($_) } @octets;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -222,6 +276,54 @@ sub lldp_id {
 | 
				
			|||||||
    return \%lldp_id;
 | 
					    return \%lldp_id;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub lldp_platform {
 | 
				
			||||||
 | 
					    my $lldp    = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $rid  = $lldp->lldp_rem_id($partial)      || {};
 | 
				
			||||||
 | 
					    my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
 | 
				
			||||||
 | 
					    my $name = $lldp->lldp_rem_sysname($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %lldp_platform;
 | 
				
			||||||
 | 
					    foreach my $key ( keys %$rid ) {
 | 
				
			||||||
 | 
					        $lldp_platform{$key} = $desc->{$key} || $name->{$key};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%lldp_platform;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub lldp_cap {
 | 
				
			||||||
 | 
					    my $lldp    = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $lldp_caps = $lldp->lldp_rem_cap_spt($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
 | 
				
			||||||
 | 
					    # be able to enumerate for us, so we have to get it from the MIB
 | 
				
			||||||
 | 
					    # and enumerate ourselves
 | 
				
			||||||
 | 
					    my $oid = SNMP::translateObj( 'lldpRemSysCapEnabled', 0, 1 ) || '';
 | 
				
			||||||
 | 
					    my $enums = (
 | 
				
			||||||
 | 
					        ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
 | 
				
			||||||
 | 
					        ? $SNMP::MIB{$oid}{'enums'}
 | 
				
			||||||
 | 
					        : {}
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    my %r_enums = reverse %$enums;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %lldp_cap;
 | 
				
			||||||
 | 
					    foreach my $key ( keys %$lldp_caps ) {
 | 
				
			||||||
 | 
					        my $cap_bits = $lldp_caps->{$key};
 | 
				
			||||||
 | 
					        next unless $cap_bits;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        my $count = 0;
 | 
				
			||||||
 | 
					        foreach my $bit ( split //, $cap_bits ) {
 | 
				
			||||||
 | 
					            if ($bit) {
 | 
				
			||||||
 | 
					                push( @{ $lldp_cap{$key} }, $r_enums{$count} );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $count++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%lldp_cap;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#sub root_ip {
 | 
					#sub root_ip {
 | 
				
			||||||
#    my $lldp = shift;
 | 
					#    my $lldp = shift;
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -247,20 +349,26 @@ sub _lldp_addr_index {
 | 
				
			|||||||
    my @oids   = split( /\./, $idx );
 | 
					    my @oids   = split( /\./, $idx );
 | 
				
			||||||
    my $index  = join( '.', splice( @oids, 0, 3 ) );
 | 
					    my $index  = join( '.', splice( @oids, 0, 3 ) );
 | 
				
			||||||
    my $proto  = shift(@oids);
 | 
					    my $proto  = shift(@oids);
 | 
				
			||||||
    my $length = shift(@oids);
 | 
					    shift(@oids) if scalar @oids > 4; # $length
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # IPv4
 | 
					    # IPv4
 | 
				
			||||||
    if ( $proto == 1 ) {
 | 
					    if ( $proto == 1 ) {
 | 
				
			||||||
        return ( $index, $proto, join( '.', @oids ) );
 | 
					        return ( $index, $proto, join( '.', @oids ) );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # IPv6
 | 
				
			||||||
 | 
					    elsif ( $proto == 2 ) {
 | 
				
			||||||
 | 
					        return ( $index, $proto,
 | 
				
			||||||
 | 
					            join(':', unpack('(H4)*', pack('C*', @oids)) ) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # MAC
 | 
					    # MAC
 | 
				
			||||||
    elsif ( $proto == 6 ) {
 | 
					    elsif ( $proto == 6 ) {
 | 
				
			||||||
        return ( $index, $proto,
 | 
					        return ( $index, $proto,
 | 
				
			||||||
            join( ':', map { sprintf "%02x", $_ } @oids ) );
 | 
					            join( ':', map { sprintf "%02x", $_ } @oids ) );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # TODO - Need to handle other protocols, i.e. IPv6
 | 
					    # TODO - Other protocols may be used as well; implement when needed?
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -328,6 +436,8 @@ None.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item F<LLDP-MIB>
 | 
					=item F<LLDP-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<LLDP-EXT-MED-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item F<LLDP-EXT-DOT1-MIB>
 | 
					=item F<LLDP-EXT-DOT1-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item F<LLDP-EXT-DOT3-MIB>
 | 
					=item F<LLDP-EXT-DOT3-MIB>
 | 
				
			||||||
@@ -426,15 +536,40 @@ if unable defaults to (C<lldpRemLocalPortNum>).
 | 
				
			|||||||
Returns remote IPv4 address.  Returns for all other address types, use
 | 
					Returns remote IPv4 address.  Returns for all other address types, use
 | 
				
			||||||
lldp_addr if you want any return address type.
 | 
					lldp_addr if you want any return address type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item  $lldp->lldp_ipv6()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns remote IPv6 address, if known.  Returns for all other address types,
 | 
				
			||||||
 | 
					use lldp_addr if you don't care about return address type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item  $lldp->lldp_mac()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns remote (management) MAC address, if known.  Returns for all other 
 | 
				
			||||||
 | 
					address types, use lldp_addr if you don't care about return address type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item  $lldp->lldp_addr()
 | 
					=item  $lldp->lldp_addr()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns remote address.  Type may be any IANA Address Family Number.
 | 
					Returns remote address.  Type may be any IANA Address Family Number.
 | 
				
			||||||
Currently only returns IPv4 or MAC addresses.
 | 
					Currently only returns IPv4, IPv6 or MAC addresses. If the remote device
 | 
				
			||||||
 | 
					returns more than one address type, this method will give only one. Which one
 | 
				
			||||||
 | 
					is returned is decided by chance, phase of the moon and Perl hash ordering.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use lldp_mac, lldp_ip or lldp_ipv6 if you want a specific address type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $lldp->lldp_port()
 | 
					=item $lldp->lldp_port()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns remote port ID
 | 
					Returns remote port ID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $lldp->lldp_platform()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tries to return something useful from C<lldp_rem_sysdesc()> or
 | 
				
			||||||
 | 
					C<lldp_rem_sysname()>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item  $lldp->lldp_cap() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns hash of arrays with each array containing the system capabilities
 | 
				
			||||||
 | 
					supported by the remote system.  Possible elements in the array are
 | 
				
			||||||
 | 
					enumerated from C<LldpSystemCapabilitiesMap>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 LLDP Remote Table (C<lldpRemTable>)
 | 
					=head2 LLDP Remote Table (C<lldpRemTable>)
 | 
				
			||||||
@@ -498,9 +633,9 @@ Nulls are removed before the value is returned.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item  $lldp->lldp_rem_sys_cap() 
 | 
					=item  $lldp->lldp_rem_sys_cap() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns which system capabilities are enabled on the local system.  Results
 | 
					Returns which system capabilities are enabled on the remote system.  Results
 | 
				
			||||||
are munged into an ascii binary string, LSB.  Each digit
 | 
					are munged into an ascii binary string, LSB.  Each digit represents a bit
 | 
				
			||||||
represents a bit from the table below:
 | 
					from the table below:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
 | 
					%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set for No CDP
 | 
					# Set for No CDP
 | 
				
			||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
 | 
					%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
 | 
				
			||||||
@@ -78,7 +78,7 @@ sub model {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $desc = $allied->description();
 | 
					    my $desc = $allied->description();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $desc =~ /(AT-\d{4}\S{1}?)/ ) {
 | 
					    if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
 | 
				
			||||||
        return $1;
 | 
					        return $1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set for No CDP
 | 
					# Set for No CDP
 | 
				
			||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
 | 
					%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
 | 
				
			||||||
@@ -50,11 +50,11 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Layer1::FUNCS,
 | 
					    %SNMP::Info::Layer1::FUNCS,
 | 
				
			||||||
    'asante_port'  => 'ePortIndex',
 | 
					    'asante_port'  => 'ePortIndex',
 | 
				
			||||||
    'asante_group' => 'ePortGrpIndex',
 | 
					    'asante_group' => 'ePortGrpIndex',
 | 
				
			||||||
    'i_type'       => 'ePortStateType',
 | 
					    'i_type'       => 'ePortGrpIndex',
 | 
				
			||||||
    'asante_up'    => 'ePortStateLinkStatus',
 | 
					    'asante_up'    => 'ePortStateLinkStatus',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-HUB1012-MIB' => 'asante' );
 | 
					%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-AH1012-MIB' => 'asante' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
 | 
					%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -202,7 +202,7 @@ Asante device through SNMP.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item F<ASANTE-HUB1012-MIB>
 | 
					=item F<ASANTE-AH1012-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -230,7 +230,7 @@ Returns 'asante' :)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item $asante->model()
 | 
					=item $asante->model()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Cross references $asante->id() to the F<ASANTE-HUB1012-MIB> and returns
 | 
					Cross references $asante->id() to the F<ASANTE-AH1012-MIB> and returns
 | 
				
			||||||
the results.
 | 
					the results.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
@@ -334,6 +334,13 @@ sub bp_index {
 | 
				
			|||||||
    return \%bp_index;
 | 
					    return \%bp_index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_mac {
 | 
				
			||||||
 | 
					    my $bayhub = shift;
 | 
				
			||||||
 | 
					    my $partial   = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $bayhub->SUPER::fw_mac($partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub fw_port {
 | 
					sub fw_port {
 | 
				
			||||||
    my $bayhub  = shift;
 | 
					    my $bayhub  = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer1::MIBS,
 | 
					    %SNMP::Info::Layer1::MIBS,
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
@@ -324,6 +324,13 @@ sub bp_index {
 | 
				
			|||||||
    return \%bp_index;
 | 
					    return \%bp_index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_mac {
 | 
				
			||||||
 | 
					    my $s3000 = shift;
 | 
				
			||||||
 | 
					    my $partial   = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $s3000->SUPER::fw_mac($partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub fw_port {
 | 
					sub fw_port {
 | 
				
			||||||
    my $s3000   = shift;
 | 
					    my $s3000   = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -38,18 +38,20 @@ use SNMP::Info;
 | 
				
			|||||||
use SNMP::Info::Bridge;
 | 
					use SNMP::Info::Bridge;
 | 
				
			||||||
use SNMP::Info::Entity;
 | 
					use SNMP::Info::Entity;
 | 
				
			||||||
use SNMP::Info::PowerEthernet;
 | 
					use SNMP::Info::PowerEthernet;
 | 
				
			||||||
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::ISA
 | 
					@SNMP::Info::Layer2::ISA
 | 
				
			||||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet Exporter/;
 | 
					    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer2::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS,
 | 
					    %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS,
 | 
				
			||||||
    %SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
 | 
					    %SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
@@ -57,6 +59,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Bridge::GLOBALS,
 | 
					    %SNMP::Info::Bridge::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::Entity::GLOBALS,
 | 
					    %SNMP::Info::Entity::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
					    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
    'serial1' =>
 | 
					    'serial1' =>
 | 
				
			||||||
        '.1.3.6.1.4.1.9.3.6.3.0',    # OLD-CISCO-CHASSIS-MIB::chassisId.0
 | 
					        '.1.3.6.1.4.1.9.3.6.3.0',    # OLD-CISCO-CHASSIS-MIB::chassisId.0
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
@@ -64,6 +67,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::FUNCS,         %SNMP::Info::Bridge::FUNCS,
 | 
					    %SNMP::Info::FUNCS,         %SNMP::Info::Bridge::FUNCS,
 | 
				
			||||||
    %SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
 | 
					    %SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
@@ -73,6 +77,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Bridge::MUNGE,
 | 
					    %SNMP::Info::Bridge::MUNGE,
 | 
				
			||||||
    %SNMP::Info::Entity::MUNGE,
 | 
					    %SNMP::Info::Entity::MUNGE,
 | 
				
			||||||
    %SNMP::Info::PowerEthernet::MUNGE,
 | 
					    %SNMP::Info::PowerEthernet::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MUNGE,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Method OverRides
 | 
					# Method OverRides
 | 
				
			||||||
@@ -123,30 +128,16 @@ sub serial {
 | 
				
			|||||||
    # precedence
 | 
					    # precedence
 | 
				
			||||||
    #   serial2,chassis parse,serial1
 | 
					    #   serial2,chassis parse,serial1
 | 
				
			||||||
    return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
 | 
					    return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
 | 
				
			||||||
    return $1
 | 
					
 | 
				
			||||||
        if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i );
 | 
					    if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
 | 
				
			||||||
 | 
					        return $1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
					    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub i_ignore {
 | 
					 | 
				
			||||||
    my $l2      = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $i_type = $l2->i_type($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_ignore = ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $if ( keys %$i_type ) {
 | 
					 | 
				
			||||||
        my $type = $i_type->{$if};
 | 
					 | 
				
			||||||
        $i_ignore{$if}++
 | 
					 | 
				
			||||||
            if $type =~ /(loopback|other|cpu)/i;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return \%i_ignore;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub interfaces {
 | 
					sub interfaces {
 | 
				
			||||||
    my $l2      = shift;
 | 
					    my $l2      = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -155,11 +146,19 @@ sub interfaces {
 | 
				
			|||||||
    my $i_descr    = $l2->i_description($partial) || {};
 | 
					    my $i_descr    = $l2->i_description($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Replace the Index with the ifDescr field.
 | 
					    # Replace the Index with the ifDescr field.
 | 
				
			||||||
 | 
					    # Check for duplicates in ifDescr, if so uniquely identify by adding
 | 
				
			||||||
 | 
					    # ifIndex to repeated values
 | 
				
			||||||
 | 
					    my %seen;
 | 
				
			||||||
    foreach my $iid ( keys %$i_descr ) {
 | 
					    foreach my $iid ( keys %$i_descr ) {
 | 
				
			||||||
        my $port = $i_descr->{$iid};
 | 
					        my $port = $i_descr->{$iid};
 | 
				
			||||||
        next unless defined $port;
 | 
					        next unless defined $port;
 | 
				
			||||||
 | 
					        if ( $seen{$port}++ ) {
 | 
				
			||||||
 | 
					            $interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
            $interfaces->{$iid} = $port;
 | 
					            $interfaces->{$iid} = $port;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    return $interfaces;
 | 
					    return $interfaces;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -224,6 +223,8 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Entity
 | 
					=item SNMP::Info::Entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Required MIBs
 | 
					=head2 Required MIBs
 | 
				
			||||||
@@ -277,6 +278,10 @@ See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are methods that return tables of information in the form of a reference
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
@@ -293,12 +298,6 @@ name.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Defaults to C<ifDescr> but checks and overrides with C<ifName>
 | 
					Defaults to C<ifDescr> but checks and overrides with C<ifName>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $l2->i_ignore()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Increments value of IID if port is to be ignored.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ignores ports with C<ifType> of loopback, propvirtual, other, and cpu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info
 | 
					=head2 Table Methods imported from SNMP::Info
 | 
				
			||||||
@@ -313,4 +312,8 @@ See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
							
								
								
									
										175
									
								
								lib/SNMP/Info/Layer2/3Com.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								lib/SNMP/Info/Layer2/3Com.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,175 @@
 | 
				
			|||||||
 | 
					package SNMP::Info::Layer2::3Com;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					use Exporter;
 | 
				
			||||||
 | 
					use SNMP::Info::Layer2;
 | 
				
			||||||
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					use SNMP::Info::CDP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SNMP::Info::Layer2::3Com::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
 | 
				
			||||||
 | 
					@SNMP::Info::Layer2::3Com::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MIBS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
 | 
					    'A3Com-products-MIB' => 'wlanAP7760',
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%GLOBALS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer2::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%FUNCS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer2::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer2::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MUNGE,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub os {
 | 
				
			||||||
 | 
					    return '3Com';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub serial {
 | 
				
			||||||
 | 
					    my $dev  = shift;
 | 
				
			||||||
 | 
					    my $e_serial = $dev->e_serial();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Find entity table entry for this unit
 | 
				
			||||||
 | 
					    foreach my $e ( sort keys %$e_serial ) {
 | 
				
			||||||
 | 
					        if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
 | 
				
			||||||
 | 
					            return $e_serial->{$e};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub os_ver {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $dev = shift;
 | 
				
			||||||
 | 
					    my $e_swver  = $dev->e_swver();
 | 
				
			||||||
 | 
					    # Find entity table entry for this unit
 | 
				
			||||||
 | 
					    foreach my $e ( sort keys %$e_swver ) {
 | 
				
			||||||
 | 
					        if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
 | 
				
			||||||
 | 
					            return $e_swver->{$e};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub vendor {
 | 
				
			||||||
 | 
					    return '3Com';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub model {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $dsmodel = shift;
 | 
				
			||||||
 | 
					    my $descr = $dsmodel->description();
 | 
				
			||||||
 | 
					    if ( $descr =~ /^([\S ]+) Software.*/){
 | 
				
			||||||
 | 
					        return $1;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return $descr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Max Kosmach
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 # Let SNMP::Info determine the correct subclass for you.
 | 
				
			||||||
 | 
					 my $router = new SNMP::Info(
 | 
				
			||||||
 | 
					                          AutoSpecify => 1,
 | 
				
			||||||
 | 
					                          Debug       => 1,
 | 
				
			||||||
 | 
					                          DestHost    => 'myrouter',
 | 
				
			||||||
 | 
					                          Community   => 'public',
 | 
				
			||||||
 | 
					                          Version     => 1
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					    or die "Can't connect to DestHost.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 my $class      = $router->class();
 | 
				
			||||||
 | 
					 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Subclass for 3Com L2 devices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<A3Com-products-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 GLOBALS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are methods that return scalar value from SNMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Overrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $device->vendor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns '3Com'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $device->os()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns '3Com'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $device->os_ver()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return os version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $device->model()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns device model extracted from description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $device->serial()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns serial number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
 | 
					to a hash.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=cut
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										166
									
								
								lib/SNMP/Info/Layer2/Adtran.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								lib/SNMP/Info/Layer2/Adtran.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,166 @@
 | 
				
			|||||||
 | 
					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.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS,
 | 
					    %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS,
 | 
				
			||||||
@@ -97,6 +97,14 @@ my $mcs_index = {
 | 
				
			|||||||
	m13 => '104',
 | 
						m13 => '104',
 | 
				
			||||||
	m14 => '117',
 | 
						m14 => '117',
 | 
				
			||||||
	m15 => '130',
 | 
						m15 => '130',
 | 
				
			||||||
 | 
						m16 => '19.5',
 | 
				
			||||||
 | 
						m17 => '39',
 | 
				
			||||||
 | 
						m18 => '58.5',
 | 
				
			||||||
 | 
						m19 => '78',
 | 
				
			||||||
 | 
						m20 => '117',
 | 
				
			||||||
 | 
						m21 => '156',
 | 
				
			||||||
 | 
						m22 => '175.5',
 | 
				
			||||||
 | 
						m23 => '195',
 | 
				
			||||||
	# This is a cheat for 802.11a bonded
 | 
						# This is a cheat for 802.11a bonded
 | 
				
			||||||
	m108 => '108',
 | 
						m108 => '108',
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@@ -117,6 +125,14 @@ my $mcs_index = {
 | 
				
			|||||||
	m13 => '240',
 | 
						m13 => '240',
 | 
				
			||||||
	m14 => '270',
 | 
						m14 => '270',
 | 
				
			||||||
	m15 => '300',
 | 
						m15 => '300',
 | 
				
			||||||
 | 
						m16 => '45',
 | 
				
			||||||
 | 
						m17 => '90',
 | 
				
			||||||
 | 
						m18 => '135',
 | 
				
			||||||
 | 
						m19 => '180',
 | 
				
			||||||
 | 
						m20 => '270',
 | 
				
			||||||
 | 
						m21 => '360',
 | 
				
			||||||
 | 
						m22 => '405',
 | 
				
			||||||
 | 
						m23 => '450',
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -165,6 +181,7 @@ sub cd11_txrate {
 | 
				
			|||||||
	elsif ( $rate =~ /^m/ ) {
 | 
						elsif ( $rate =~ /^m/ ) {
 | 
				
			||||||
	    my $band = $protos->{$idx};
 | 
						    my $band = $protos->{$idx};
 | 
				
			||||||
	    my $bw   = $bws->{$band};
 | 
						    my $bw   = $bws->{$band};
 | 
				
			||||||
 | 
						    # FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"...
 | 
				
			||||||
	    $cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
 | 
						    $cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::IEEE802dot11::GLOBALS,
 | 
					    %SNMP::Info::IEEE802dot11::GLOBALS,
 | 
				
			||||||
@@ -60,7 +60,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					    %SNMP::Info::CDP::GLOBALS,
 | 
				
			||||||
    'serial' => 'entPhysicalSerialNum.1',
 | 
					    'serial' => 'entPhysicalSerialNum.1',
 | 
				
			||||||
    'descr'  => 'sysDescr'
 | 
					    'descr'  => 'sysDescr',
 | 
				
			||||||
 | 
					    'ps1_type' => 'cpoePdCurrentPowerSource'
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
@@ -97,6 +98,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'CISCO-DOT11-ASSOCIATION-MIB'         => 'cDot11ClientSubIfIndex',
 | 
					    'CISCO-DOT11-ASSOCIATION-MIB'         => 'cDot11ClientSubIfIndex',
 | 
				
			||||||
    'CISCO-DOT11-SSID-SECURITY-MIB'       => 'cdot11SecVlanNameId',
 | 
					    'CISCO-DOT11-SSID-SECURITY-MIB'       => 'cdot11SecVlanNameId',
 | 
				
			||||||
    'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex',
 | 
					    'CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB' => 'cviRoutedVlanIfIndex',
 | 
				
			||||||
 | 
					    'CISCO-POE-PD-MIB'                    => 'cpoePdCurrentPowerSource',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
@@ -457,6 +459,18 @@ sub i_ssidmac {
 | 
				
			|||||||
    return $i_ssidmac;
 | 
					    return $i_ssidmac;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					###
 | 
				
			||||||
 | 
					# PoE status.  The ps1_type is the PoE injector type, which is just
 | 
				
			||||||
 | 
					# a scalar; the status is a little more complex.
 | 
				
			||||||
 | 
					sub ps1_status {
 | 
				
			||||||
 | 
					    my $aironet = shift;
 | 
				
			||||||
 | 
					    my $idx = $aironet->cpoePdCurrentPowerLevel();
 | 
				
			||||||
 | 
					    my $mw = $aironet->cpoePdSupportedPower( $idx );
 | 
				
			||||||
 | 
					    my $descr = $aironet->cpoePdSupportedPowerMode( $idx );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return sprintf( "%.2fW (%s)", $mw->{$idx} * 0.001, $descr->{$idx} );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -540,17 +554,13 @@ These are methods that return scalar value from SNMP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $aironet->discription()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Adds info from method e_descr() from SNMP::Info::Entity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $aironet->vendor()
 | 
					=item $aironet->vendor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns 'cisco'
 | 
					Returns 'cisco'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $aironet->description()
 | 
					=item $aironet->description()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
System description
 | 
					System description. Adds info from method e_descr() from SNMP::Info::Entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -648,6 +658,11 @@ being broadcast.
 | 
				
			|||||||
With the same keys as i_ssidlist, returns the Basic service set
 | 
					With the same keys as i_ssidlist, returns the Basic service set
 | 
				
			||||||
identification (BSSID), MAC address, the AP is using for the SSID. 
 | 
					identification (BSSID), MAC address, the AP is using for the SSID. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $aironet ps1_status()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the PoE injector status based on C<cpoePdSupportedPower> and 
 | 
				
			||||||
 | 
					C<cpoePdSupportedPowerMode>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2
 | 
				
			||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
					%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,12 +46,13 @@ use SNMP::Info::Layer3;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,    %SNMP::Info::LLDP::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
    %SNMP::Info::RapidCity::MIBS, %SNMP::Info::NortelStack::MIBS,
 | 
					    %SNMP::Info::RapidCity::MIBS, %SNMP::Info::NortelStack::MIBS,
 | 
				
			||||||
    %SNMP::Info::SONMP::MIBS,
 | 
					    %SNMP::Info::SONMP::MIBS,
 | 
				
			||||||
 | 
					    'BAY-STACK-PETH-EXT-MIB' => 'bspePethPsePortExtMeasuredPower',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
@@ -64,6 +65,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Layer3::FUNCS,    %SNMP::Info::LLDP::FUNCS,
 | 
					    %SNMP::Info::Layer3::FUNCS,    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
    %SNMP::Info::RapidCity::FUNCS, %SNMP::Info::NortelStack::FUNCS,
 | 
					    %SNMP::Info::RapidCity::FUNCS, %SNMP::Info::NortelStack::FUNCS,
 | 
				
			||||||
    %SNMP::Info::SONMP::FUNCS,
 | 
					    %SNMP::Info::SONMP::FUNCS,
 | 
				
			||||||
 | 
					    'peth_port_power' => 'bspePethPsePortExtMeasuredPower',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 450's report full duplex as speed = 20mbps?!
 | 
					# 450's report full duplex as speed = 20mbps?!
 | 
				
			||||||
@@ -139,6 +141,7 @@ sub model {
 | 
				
			|||||||
    $model =~ s/^sreg-//;
 | 
					    $model =~ s/^sreg-//;
 | 
				
			||||||
    # Strip ES/ERS/BayStack etc. from those families
 | 
					    # Strip ES/ERS/BayStack etc. from those families
 | 
				
			||||||
    $model =~ s/^(E(R)?S|BayStack|Ethernet(Routing)?Switch)-?//;
 | 
					    $model =~ s/^(E(R)?S|BayStack|Ethernet(Routing)?Switch)-?//;
 | 
				
			||||||
 | 
					    $model =~ s/-ethSwitchNMM//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $model;
 | 
					    return $model;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -338,6 +341,60 @@ sub peth_port_ifindex {
 | 
				
			|||||||
    return \%peth_port_ifindex;
 | 
					    return \%peth_port_ifindex;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Currently only ERS 4800 v5.8+ support the rcBridgeSpbmMacTable 
 | 
				
			||||||
 | 
					# which holds the FDB for a SPBM edge deployment.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Q-BRIDGE still holds some entries when the rcBridgeSpbmMacTable is in use
 | 
				
			||||||
 | 
					# so we merge hash entries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_mac {
 | 
				
			||||||
 | 
					    my $rapidcity = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $rapidcity->SUPER::fw_mac() || {};
 | 
				
			||||||
 | 
					    my $spbm = $rapidcity->rc_spbm_fw_mac() || {};
 | 
				
			||||||
 | 
					    my $fw_mac = { %$qb, %$spbm };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $fw_mac;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_port {
 | 
				
			||||||
 | 
					    my $rapidcity = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $rapidcity->SUPER::fw_port() || {};
 | 
				
			||||||
 | 
					    my $spbm = $rapidcity->rc_spbm_fw_port() || {};
 | 
				
			||||||
 | 
					    my $fw_port = { %$qb, %$spbm };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $fw_port;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_status {
 | 
				
			||||||
 | 
					    my $rapidcity = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $rapidcity->SUPER::fw_status() || {};    
 | 
				
			||||||
 | 
					    my $spbm = $rapidcity->rc_spbm_fw_status() || {};
 | 
				
			||||||
 | 
					    my $fw_status = { %$qb, %$spbm };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $fw_status;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub qb_fw_vlan {
 | 
				
			||||||
 | 
					    my $rapidcity = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb = $rapidcity->SUPER::qb_fw_vlan() || {};
 | 
				
			||||||
 | 
					    my $spbm = $rapidcity->rc_spbm_fw_vlan() || {};
 | 
				
			||||||
 | 
					    my $qb_fw_vlan = { %$qb, %$spbm };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $qb_fw_vlan;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Baystack uses S5-AGENT-MIB (loaded in NortelStack) versus RAPID-CITY
 | 
				
			||||||
 | 
					sub stp_ver {
 | 
				
			||||||
 | 
					    my $rapidcity = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $rapidcity->s5AgSysSpanningTreeOperMode()
 | 
				
			||||||
 | 
					      || $rapidcity->SUPER::stp_ver();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
@@ -393,6 +450,14 @@ my $baystack = new SNMP::Info::Layer2::Baystack(...);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<BAY-STACK-PETH-EXT-MIBB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Inherited MIBs
 | 
					=head2 Inherited MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::SONMP/"Required MIBs"> for its MIB requirements.
 | 
					See L<SNMP::Info::SONMP/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
@@ -433,6 +498,14 @@ Returns 'baystack' or 'boss' depending on software version.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Returns the firmware version extracted from C<sysDescr>.
 | 
					Returns the firmware version extracted from C<sysDescr>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $baystack->stp_ver()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the particular STP version running on this device.  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Values: C<nortelStpg>, C<pvst>, C<rstp>, C<mstp>, C<ieee8021d>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<s5AgSysSpanningTreeOperMode>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Overrides
 | 
					=head2 Overrides
 | 
				
			||||||
@@ -509,10 +582,16 @@ revisions of Baystack firmware report all zeros for each port mac.
 | 
				
			|||||||
Crosses C<ifName> with C<ifAlias> and returns the human set port name if
 | 
					Crosses C<ifName> with C<ifAlias> and returns the human set port name if
 | 
				
			||||||
exists.
 | 
					exists.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $poe->peth_port_ifindex()
 | 
					=item $baystack->peth_port_ifindex()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Maps the C<pethPsePortTable> to C<ifIndex> by way of the F<ENTITY-MIB>.
 | 
					Maps the C<pethPsePortTable> to C<ifIndex> by way of the F<ENTITY-MIB>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $baystack->peth_port_power()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Power supplied by PoE ports, in milliwatts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(C<bspePethPsePortExtMeasuredPower>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 F<ENTITY-MIB> Information
 | 
					=head2 F<ENTITY-MIB> Information
 | 
				
			||||||
@@ -583,6 +662,32 @@ ns_e_vendor().
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Layer 2 Forwarding Database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These methods try to obtain the layer 2 forwarding database entries via the
 | 
				
			||||||
 | 
					normal bridge methods as well as SPBM entries via rapid city methods.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $baystack->fw_mac()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of forwarding table MAC Addresses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $baystack->fw_port()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of forwarding table entries port interface
 | 
				
			||||||
 | 
					identifier (iid)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $baystack->qb_fw_vlan()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of forwarding table entries VLAN ID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $baystack->fw_status()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of forwarding table entries status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::SONMP
 | 
					=head2 Table Methods imported from SNMP::Info::SONMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::SONMP/"TABLE METHODS"> for details.
 | 
					See L<SNMP::Info::SONMP/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -37,19 +37,23 @@ use Exporter;
 | 
				
			|||||||
use SNMP::Info::CDP;
 | 
					use SNMP::Info::CDP;
 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					use SNMP::Info::CiscoStats;
 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					use SNMP::Info::CiscoConfig;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoStpExtensions;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoAgg;
 | 
				
			||||||
use SNMP::Info::Layer2;
 | 
					use SNMP::Info::Layer2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::C1900::ISA = qw/SNMP::Info::CDP SNMP::Info::CiscoStats
 | 
					@SNMP::Info::Layer2::C1900::ISA = qw/SNMP::Info::CDP SNMP::Info::CiscoStats
 | 
				
			||||||
    SNMP::Info::CiscoConfig SNMP::Info::Layer2
 | 
					    SNMP::Info::CiscoConfig SNMP::Info::CiscoStpExtensions SNMP::Info::CiscoAgg SNMP::Info::Layer2
 | 
				
			||||||
    Exporter/;
 | 
					    Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
					    %SNMP::Info::Layer2::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
					    %SNMP::Info::CiscoStats::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					    %SNMP::Info::CDP::GLOBALS,
 | 
				
			||||||
@@ -58,6 +62,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::FUNCS,
 | 
					    %SNMP::Info::Layer2::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
					    %SNMP::Info::CiscoConfig::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::FUNCS,
 | 
					    %SNMP::Info::CiscoStats::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,
 | 
					    %SNMP::Info::CDP::FUNCS,
 | 
				
			||||||
@@ -75,6 +81,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
					    %SNMP::Info::CiscoConfig::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::MIBS,
 | 
					    %SNMP::Info::CiscoStats::MIBS,
 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,
 | 
					    %SNMP::Info::CDP::MIBS,
 | 
				
			||||||
@@ -84,7 +92,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MUNGE,     %SNMP::Info::CiscoConfig::MUNGE,
 | 
					    %SNMP::Info::Layer2::MUNGE,             %SNMP::Info::CiscoAgg::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::MUNGE,         %SNMP::Info::CDP::MUNGE,
 | 
					    %SNMP::Info::CiscoStats::MUNGE,         %SNMP::Info::CDP::MUNGE,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -203,7 +212,8 @@ sub i_vlan {
 | 
				
			|||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Overlap allows more than one VLAN per port.  Unable to determine default
 | 
					    # Overlap allows more than one VLAN per port.  Unable to determine default
 | 
				
			||||||
    my $overlap = $c1900->bridgeGroupAllowMembershipOverlap()
 | 
					    my $overlap 
 | 
				
			||||||
 | 
					        = $c1900->bridgeGroupAllowMembershipOverlap()
 | 
				
			||||||
        || $c1900->vlanAllowMembershipOverlap()
 | 
					        || $c1900->vlanAllowMembershipOverlap()
 | 
				
			||||||
        || 'disabled';
 | 
					        || 'disabled';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -251,6 +261,8 @@ sub i_vlan_membership {
 | 
				
			|||||||
    return $i_vlan_membership;
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership_untagged { return; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub bp_index {
 | 
					sub bp_index {
 | 
				
			||||||
    my $c1900   = shift;
 | 
					    my $c1900   = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -312,6 +324,10 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoConfig
 | 
					=item SNMP::Info::CiscoConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer2
 | 
					=item SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -336,6 +352,10 @@ See L<SNMP::Info::CiscoStats/"Required MIBs"> for its MIB requirements.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its MIB requirements.
 | 
					See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
					See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 GLOBALS
 | 
					=head1 GLOBALS
 | 
				
			||||||
@@ -394,6 +414,14 @@ See L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
					=head2 Globals imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
					See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
				
			||||||
@@ -444,6 +472,9 @@ bridge group IDs.
 | 
				
			|||||||
    print "Port: $port VLAN: $vlan\n";
 | 
					    print "Port: $port VLAN: $vlan\n";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c1900->i_vlan_membership_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unsupported, returns nothing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $c1900->bp_index()
 | 
					=item $c1900->bp_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -513,6 +544,14 @@ See L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
					See L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoAgg/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
					See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -34,33 +34,21 @@ package SNMP::Info::Layer2::C2900;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					use SNMP::Info::Layer2::Cisco;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer2;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
 | 
					@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2::Cisco Exporter/;
 | 
				
			||||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
    SNMP::Info::Layer2 Exporter/;
 | 
					 | 
				
			||||||
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS,     %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					    %SNMP::Info::Layer2::Cisco::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::FUNCS,
 | 
					    %SNMP::Info::Layer2::Cisco::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,
 | 
					 | 
				
			||||||
    'i_name' => 'ifAlias',
 | 
					    'i_name' => 'ifAlias',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # C2900PortEntry
 | 
					    # C2900PortEntry
 | 
				
			||||||
@@ -71,15 +59,12 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,     %SNMP::Info::CiscoConfig::MIBS,
 | 
					    %SNMP::Info::Layer2::Cisco::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
 | 
					    'CISCO-C2900-MIB' => 'ciscoC2900MIB',
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS, 'CISCO-C2900-MIB' => 'ciscoC2900MIB',
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MUNGE,     %SNMP::Info::CiscoConfig::MUNGE,
 | 
					    %SNMP::Info::Layer2::Cisco::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MUNGE,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub vendor {
 | 
					sub vendor {
 | 
				
			||||||
@@ -139,6 +124,32 @@ sub i_duplex_admin {
 | 
				
			|||||||
    return \%i_duplex_admin;
 | 
					    return \%i_duplex_admin;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 %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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return \%i_speed_admin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_i_speed_admin {
 | 
					sub set_i_speed_admin {
 | 
				
			||||||
    my $c2900 = shift;
 | 
					    my $c2900 = shift;
 | 
				
			||||||
    my ( $speed, $iid ) = @_;
 | 
					    my ( $speed, $iid ) = @_;
 | 
				
			||||||
@@ -243,15 +254,7 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					=item SNMP::Info::Layer2::Cisco
 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::Layer2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -267,15 +270,7 @@ Part of the v2 MIBs from Cisco.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head2 Inherited MIBs
 | 
					=head2 Inherited MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its MIB requirements.
 | 
					See L<SNMP::Info::Layer2::Cisco/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 GLOBALS
 | 
					=head1 GLOBALS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -295,25 +290,9 @@ Returns 1.  Use vlan indexing.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoVTP
 | 
					=head2 Globals imported from SNMP::Info::Layer2::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					See L<SNMP::Info::Layer2::Cisco/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -349,6 +328,10 @@ Returns reference to hash of IIDs to admin duplex setting
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Crosses $c2900->c2900_p_index() with $c2900->c2900_p_duplex_admin()
 | 
					Crosses $c2900->c2900_p_index() with $c2900->c2900_p_duplex_admin()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c2900->i_speed_admin()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of IIDs to admin speed setting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 F<C2900-MIB> Port Entry Table 
 | 
					=head2 F<C2900-MIB> Port Entry Table 
 | 
				
			||||||
@@ -381,25 +364,9 @@ Gives Admin speed of port
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					See L<SNMP::Info::Layer2::Cisco/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 SET METHODS
 | 
					=head1 SET METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,48 +34,34 @@ package SNMP::Info::Layer2::Catalyst;
 | 
				
			|||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoStack;
 | 
					use SNMP::Info::CiscoStack;
 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					use SNMP::Info::Layer2::Cisco;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPortSecurity;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer2;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::Catalyst::ISA
 | 
					@SNMP::Info::Layer2::Catalyst::ISA
 | 
				
			||||||
    = qw/SNMP::Info::CiscoStack SNMP::Info::CiscoVTP
 | 
					    = qw/SNMP::Info::CiscoStack SNMP::Info::Layer2::Cisco Exporter/;
 | 
				
			||||||
    SNMP::Info::CDP SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
    SNMP::Info::Layer2 Exporter/;
 | 
					 | 
				
			||||||
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,     %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
					    %SNMP::Info::Layer2::Cisco::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS,
 | 
					    %SNMP::Info::CiscoStack::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS,   %SNMP::Info::CiscoStack::MIBS,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
					    %SNMP::Info::Layer2::Cisco::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::GLOBALS,
 | 
					    %SNMP::Info::CiscoStack::GLOBALS,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::FUNCS,     %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
					    %SNMP::Info::Layer2::Cisco::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::FUNCS, %SNMP::Info::CDP::FUNCS,
 | 
					    %SNMP::Info::CiscoStack::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,   %SNMP::Info::CiscoStack::FUNCS,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MUNGE,     %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
					    %SNMP::Info::Layer2::Cisco::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
 | 
					    %SNMP::Info::CiscoStack::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MUNGE,   %SNMP::Info::CiscoStack::MUNGE,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Overidden Methods
 | 
					# Overidden Methods
 | 
				
			||||||
@@ -228,18 +214,10 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Layer2::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoStack
 | 
					=item SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::Layer2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Required MIBs
 | 
					=head2 Required MIBs
 | 
				
			||||||
@@ -248,19 +226,10 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Layer2::Cisco/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
 | 
					 | 
				
			||||||
requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These MIBs are found in the standard v2 MIBs from Cisco.
 | 
					These MIBs are found in the standard v2 MIBs from Cisco.
 | 
				
			||||||
@@ -290,30 +259,14 @@ Returns 1.  Use vlan indexing.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Global Methods imported from SNMP::Info::Layer2::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer2::Cisco/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoStack
 | 
					=head2 Global Methods imported from SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are methods that return tables of information in the form of a reference
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
@@ -348,29 +301,12 @@ have problems with F<BRIDGE-MIB>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer2::Cisco/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStack
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
 | 
					 | 
				
			||||||
details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,
 | 
					    %SNMP::Info::MIBS,
 | 
				
			||||||
@@ -246,6 +246,20 @@ sub slot_offset {
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_mac {
 | 
				
			||||||
 | 
					    my $centillion = shift;
 | 
				
			||||||
 | 
					    my $partial   = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $centillion->SUPER::fw_mac($partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fw_port {
 | 
				
			||||||
 | 
					    my $centillion = shift;
 | 
				
			||||||
 | 
					    my $partial   = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $centillion->SUPER::fw_port($partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -371,11 +385,6 @@ Returns 'Centillion'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $centillion->layers()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 00000011.  Class emulates Layer 2 functionality through proprietary
 | 
					 | 
				
			||||||
MIBs.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item  $centillion->index_factor()
 | 
					=item  $centillion->index_factor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Required by SNMP::Info::SONMP.  Number representing the number of ports
 | 
					Required by SNMP::Info::SONMP.  Number representing the number of ports
 | 
				
			||||||
@@ -35,49 +35,71 @@ use Exporter;
 | 
				
			|||||||
use SNMP::Info::CiscoVTP;
 | 
					use SNMP::Info::CiscoVTP;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					use SNMP::Info::CDP;
 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					use SNMP::Info::CiscoStats;
 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoRTT;
 | 
					use SNMP::Info::CiscoRTT;
 | 
				
			||||||
use SNMP::Info::CiscoQOS;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					use SNMP::Info::CiscoConfig;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoPortSecurity;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoStpExtensions;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoAgg;
 | 
				
			||||||
use SNMP::Info::Layer2;
 | 
					use SNMP::Info::Layer2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
 | 
					@SNMP::Info::Layer2::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
 | 
				
			||||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoImage
 | 
					    SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
 | 
				
			||||||
    SNMP::Info::CiscoRTT SNMP::Info::CiscoQOS
 | 
					    SNMP::Info::CiscoConfig SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
    SNMP::Info::CiscoConfig SNMP::Info::Layer2
 | 
					    SNMP::Info::CiscoStpExtensions SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					    SNMP::Info::Layer2
 | 
				
			||||||
    Exporter/;
 | 
					    Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer2::Cisco::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::Cisco::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,     %SNMP::Info::CiscoConfig::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::MIBS,   %SNMP::Info::CiscoRTT::MIBS,
 | 
					    %SNMP::Info::CiscoAgg::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
 | 
					    %SNMP::Info::CiscoStpExtensions::MIBS,
 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,        %SNMP::Info::CiscoVTP::MIBS,
 | 
					    %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoConfig::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoRTT::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStats::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CDP::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoVTP::MIBS,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS,     %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					    %SNMP::Info::Layer2::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::GLOBALS,   %SNMP::Info::CiscoRTT::GLOBALS,
 | 
					    %SNMP::Info::CiscoAgg::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS,
 | 
					    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,        %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoRTT::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStats::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CDP::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::FUNCS,     %SNMP::Info::CiscoConfig::FUNCS,
 | 
					    %SNMP::Info::Layer2::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::FUNCS,   %SNMP::Info::CiscoRTT::FUNCS,
 | 
					    %SNMP::Info::CiscoAgg::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
 | 
					    %SNMP::Info::CiscoStpExtensions::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,        %SNMP::Info::CiscoVTP::FUNCS,
 | 
					    %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoConfig::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoRTT::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStats::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CDP::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoVTP::FUNCS,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MUNGE,     %SNMP::Info::CiscoConfig::MUNGE,
 | 
					    %SNMP::Info::Layer2::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::MUNGE,   %SNMP::Info::CiscoRTT::MUNGE,
 | 
					    %SNMP::Info::CiscoAgg::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
 | 
					    %SNMP::Info::CiscoStpExtensions::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CDP::MUNGE,        %SNMP::Info::CiscoVTP::MUNGE,
 | 
					    %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoConfig::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoRTT::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStats::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CDP::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoVTP::MUNGE,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
@@ -85,8 +107,9 @@ __END__
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head1 NAME
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SNMP::Info::Layer2::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
 | 
					SNMP::Info::Layer2::Cisco - SNMP Interface to L2 Cisco devices that are
 | 
				
			||||||
that are not covered in other classes.
 | 
					not covered in other classes and the base L2 Cisco class for other device
 | 
				
			||||||
 | 
					specific L2 Cisco classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 AUTHOR
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,7 +133,8 @@ Max Baker
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head1 DESCRIPTION
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Subclass for Generic Cisco Routers running IOS
 | 
					Subclass for Generic Layer 2 Cisco devices and the base L2 Cisco class for
 | 
				
			||||||
 | 
					other device specific L2 Cisco classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Inherited Classes
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -122,14 +146,16 @@ Subclass for Generic Cisco Routers running IOS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					=item SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoRTT
 | 
					=item SNMP::Info::CiscoRTT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoQOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoConfig
 | 
					=item SNMP::Info::CiscoConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer2
 | 
					=item SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -142,18 +168,20 @@ Subclass for Generic Cisco Routers running IOS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoQOS/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -182,22 +210,26 @@ See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoRTT
 | 
					=head2 Globals imported from SNMP::Info::CiscoRTT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoQOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoQOS/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
					=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
					=head2 Globals imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
				
			||||||
@@ -219,22 +251,26 @@ See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoRTT
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoRTT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoQOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoQOS/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoAgg/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -50,11 +50,7 @@ use SNMP::Info::CDP;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					 | 
				
			||||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
					 | 
				
			||||||
# table by the serial() function.
 | 
					 | 
				
			||||||
our $index = undef;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
					    %SNMP::Info::Layer2::GLOBALS,
 | 
				
			||||||
@@ -98,28 +94,32 @@ sub vendor {
 | 
				
			|||||||
    return 'cisco';
 | 
					    return 'cisco';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Walk the entPhysicalSerialNum table and return both the first serial
 | 
					sub os {
 | 
				
			||||||
# number found as well as the index of that entry.
 | 
					    return 'ros';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Walk the entPhysicalSerialNum table and return the first serial found
 | 
				
			||||||
sub serial {
 | 
					sub serial {
 | 
				
			||||||
    my $ciscosb  = shift;
 | 
					    my $ciscosb  = shift;
 | 
				
			||||||
    my $serial   = undef;  
 | 
					 | 
				
			||||||
    my $e_serial = $ciscosb->e_serial();
 | 
					    my $e_serial = $ciscosb->e_serial();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Find entity table entry for this unit
 | 
					    # Find entity table entry for this unit
 | 
				
			||||||
    foreach my $e ( keys %$e_serial ) {
 | 
					    foreach my $e ( sort keys %$e_serial ) {
 | 
				
			||||||
        if (defined ($e_serial->{$e}) and $e_serial->{$e} !~ /^\s*$/) {
 | 
					        if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
 | 
				
			||||||
            $index = $e;
 | 
					            return $e_serial->{$e};
 | 
				
			||||||
            last;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return $e_serial->{$index} if defined $index;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub os_ver {
 | 
					sub os_ver {
 | 
				
			||||||
    my $ciscosb = shift;
 | 
					    my $ciscosb = shift;
 | 
				
			||||||
    my $os_ver  = $ciscosb->e_swver();
 | 
					    my $e_swver  = $ciscosb->e_swver();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $os_ver->{$index} if defined $index;
 | 
					    foreach my $e ( sort keys %$e_swver ) {
 | 
				
			||||||
 | 
					        if (defined $e_swver->{$e} and $e_swver->{$e} !~ /^\s*$/) {
 | 
				
			||||||
 | 
					            return $e_swver->{$e};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Grab e_model from Entity and tag on e_hwver
 | 
					# Grab e_model from Entity and tag on e_hwver
 | 
				
			||||||
@@ -128,9 +128,12 @@ sub model {
 | 
				
			|||||||
    my $e_model = $ciscosb->e_model();
 | 
					    my $e_model = $ciscosb->e_model();
 | 
				
			||||||
    my $e_hwver = $ciscosb->e_hwver();
 | 
					    my $e_hwver = $ciscosb->e_hwver();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (defined ($index)) {
 | 
					    foreach my $e ( sort keys %$e_model ) {
 | 
				
			||||||
        my $model = "$e_model->{$index} $e_hwver->{$index}";
 | 
					        if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) {
 | 
				
			||||||
        return $model;
 | 
					            return $e_model->{$e};
 | 
				
			||||||
 | 
					            #my $model = "$e_model->{$e} $e_hwver->{$e}";
 | 
				
			||||||
 | 
					            #return $model;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return $ciscosb->description();
 | 
					    return $ciscosb->description();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -214,17 +217,22 @@ These are methods that return scalar value from SNMP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Returns 'cisco'
 | 
					Returns 'cisco'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ciscosb->os()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns 'ros'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $ciscosb->os_ver()
 | 
					=item $ciscosb->os_ver()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns software version (entPhysicalSoftwareRev)
 | 
					Returns software version (C<entPhysicalSoftwareRev>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $ciscosb->serial()
 | 
					=item $ciscosb->serial()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns serial number of unit (entPhysicalSerialNum)
 | 
					Returns serial number of unit (C<entPhysicalSerialNum>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $ciscosb->model()
 | 
					=item $ciscosb->model()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns model and hardware revision of unit (entPhysicalModelName+entPhysicalHardwareRev)
 | 
					Returns model and hardware revision of unit
 | 
				
			||||||
 | 
					(C<entPhysicalModelName+entPhysicalHardwareRev>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,23 +36,27 @@ use strict;
 | 
				
			|||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					use SNMP::Info::Layer3;
 | 
				
			||||||
use SNMP::Info::MAU;
 | 
					use SNMP::Info::MAU;
 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					use SNMP::Info::CDP;
 | 
				
			||||||
 | 
					use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::HP::ISA
 | 
					@SNMP::Info::Layer2::HP::ISA = qw/
 | 
				
			||||||
    = qw/SNMP::Info::Layer3 SNMP::Info::MAU SNMP::Info::LLDP
 | 
					    SNMP::Info::Aggregate
 | 
				
			||||||
    SNMP::Info::CDP Exporter/;
 | 
					    SNMP::Info::Layer3 
 | 
				
			||||||
 | 
					    SNMP::Info::MAU 
 | 
				
			||||||
 | 
					    SNMP::Info::CDP 
 | 
				
			||||||
 | 
					    Exporter
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
    %SNMP::Info::MAU::MIBS,
 | 
					    %SNMP::Info::MAU::MIBS,
 | 
				
			||||||
    %SNMP::Info::LLDP::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,
 | 
					    %SNMP::Info::CDP::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::Aggregate::MIBS,
 | 
				
			||||||
    'RFC1271-MIB'    => 'logDescription',
 | 
					    'RFC1271-MIB'    => 'logDescription',
 | 
				
			||||||
    'HP-ICF-OID'     => 'hpSwitch4000',
 | 
					    'HP-ICF-OID'     => 'hpSwitch4000',
 | 
				
			||||||
    'STATISTICS-MIB' => 'hpSwitchCpuStat',
 | 
					    'STATISTICS-MIB' => 'hpSwitchCpuStat',
 | 
				
			||||||
@@ -67,8 +71,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
					    %SNMP::Info::Layer3::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::MAU::GLOBALS,
 | 
					    %SNMP::Info::MAU::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					    %SNMP::Info::CDP::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::Aggregate::GLOBALS,
 | 
				
			||||||
    'serial1'      => 'entPhysicalSerialNum.1',
 | 
					    'serial1'      => 'entPhysicalSerialNum.1',
 | 
				
			||||||
    'serial2'      => 'hpHttpMgSerialNumber.0',
 | 
					    'serial2'      => 'hpHttpMgSerialNumber.0',
 | 
				
			||||||
    'hp_cpu'       => 'hpSwitchCpuStat.0',
 | 
					    'hp_cpu'       => 'hpSwitchCpuStat.0',
 | 
				
			||||||
@@ -85,8 +89,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,
 | 
					    %SNMP::Info::Layer3::FUNCS,
 | 
				
			||||||
    %SNMP::Info::MAU::FUNCS,
 | 
					    %SNMP::Info::MAU::FUNCS,
 | 
				
			||||||
    %SNMP::Info::LLDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,
 | 
					    %SNMP::Info::CDP::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::Aggregate::FUNCS,
 | 
				
			||||||
    'i_type2'   => 'ifType',
 | 
					    'i_type2'   => 'ifType',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # RFC1271
 | 
					    # RFC1271
 | 
				
			||||||
@@ -110,8 +114,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    # Inherit all the built in munging
 | 
					    # Inherit all the built in munging
 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE,
 | 
					    %SNMP::Info::Layer3::MUNGE,
 | 
				
			||||||
    %SNMP::Info::MAU::MUNGE,
 | 
					    %SNMP::Info::MAU::MUNGE,
 | 
				
			||||||
    %SNMP::Info::LLDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::MUNGE,
 | 
					    %SNMP::Info::CDP::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::Aggregate::MUNGE,
 | 
				
			||||||
    'c_id'   => \&munge_hp_c_id,
 | 
					    'c_id'   => \&munge_hp_c_id,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,6 +125,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
%MODEL_MAP = (
 | 
					%MODEL_MAP = (
 | 
				
			||||||
    'J8131A' => 'WAP-420-WW',
 | 
					    'J8131A' => 'WAP-420-WW',
 | 
				
			||||||
    'J8130A' => 'WAP-420-NA',
 | 
					    'J8130A' => 'WAP-420-NA',
 | 
				
			||||||
 | 
					    'J9833A' => 'PS1810-8G',
 | 
				
			||||||
 | 
					    'J9834A' => 'PS1810-24G',
 | 
				
			||||||
    'J8133A' => 'AP520WL',
 | 
					    'J8133A' => 'AP520WL',
 | 
				
			||||||
    'J8680A' => '9408sl',
 | 
					    'J8680A' => '9408sl',
 | 
				
			||||||
    'J9091A' => '8212zl',
 | 
					    'J9091A' => '8212zl',
 | 
				
			||||||
@@ -135,8 +141,10 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'J8992A' => '6200yl-24G',
 | 
					    'J8992A' => '6200yl-24G',
 | 
				
			||||||
    'J4902A' => '6108',
 | 
					    'J4902A' => '6108',
 | 
				
			||||||
    'J8698A' => '5412zl',
 | 
					    'J8698A' => '5412zl',
 | 
				
			||||||
 | 
					    'J9851A' => '5412R-zl2',
 | 
				
			||||||
    'J8719A' => '5408yl',
 | 
					    'J8719A' => '5408yl',
 | 
				
			||||||
    'J8697A' => '5406zl',
 | 
					    'J8697A' => '5406zl',
 | 
				
			||||||
 | 
					    'J9850A' => '5406R-zl2',
 | 
				
			||||||
    'J8718A' => '5404yl',
 | 
					    'J8718A' => '5404yl',
 | 
				
			||||||
    'J4819A' => '5308XL',
 | 
					    'J4819A' => '5308XL',
 | 
				
			||||||
    'J4850A' => '5304XL',
 | 
					    'J4850A' => '5304XL',
 | 
				
			||||||
@@ -168,8 +176,12 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'J4815A' => '3324XL',
 | 
					    'J4815A' => '3324XL',
 | 
				
			||||||
    'J4851A' => '3124',
 | 
					    'J4851A' => '3124',
 | 
				
			||||||
    'J9729A' => '2920-48G-PoE+',
 | 
					    'J9729A' => '2920-48G-PoE+',
 | 
				
			||||||
 | 
					    'J9729A' => '2920-48G-PoE+',
 | 
				
			||||||
 | 
					    'J9728A' => '2920-48G',
 | 
				
			||||||
    'J9728A' => '2920-48G',
 | 
					    'J9728A' => '2920-48G',
 | 
				
			||||||
    'J9727A' => '2920-24G-PoE+',
 | 
					    'J9727A' => '2920-24G-PoE+',
 | 
				
			||||||
 | 
					    'J9727A' => '2920-24G-PoE+',
 | 
				
			||||||
 | 
					    'J9726A' => '2920-24G',
 | 
				
			||||||
    'J9726A' => '2920-24G',
 | 
					    'J9726A' => '2920-24G',
 | 
				
			||||||
    'J9562A' => '2915-8G-PoE',
 | 
					    'J9562A' => '2915-8G-PoE',
 | 
				
			||||||
    'J9148A' => '2910al-48G-PoE+',
 | 
					    'J9148A' => '2910al-48G-PoE+',
 | 
				
			||||||
@@ -182,30 +194,42 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'J4903A' => '2824',
 | 
					    'J4903A' => '2824',
 | 
				
			||||||
    'J9022A' => '2810-48G',
 | 
					    'J9022A' => '2810-48G',
 | 
				
			||||||
    'J9021A' => '2810-24G',
 | 
					    'J9021A' => '2810-24G',
 | 
				
			||||||
    'J4899C' => '2650C',
 | 
					 | 
				
			||||||
    'J8165A' => '2650-PWR',
 | 
					    'J8165A' => '2650-PWR',
 | 
				
			||||||
    'J4899B' => '2650-CR',
 | 
					    'J4899B' => '2650-CR',
 | 
				
			||||||
 | 
					    'J4899C' => '2650C',
 | 
				
			||||||
    'J4899A' => '2650',
 | 
					    'J4899A' => '2650',
 | 
				
			||||||
    'J4900C' => '2626C',
 | 
					 | 
				
			||||||
    'J8164A' => '2626-PWR',
 | 
					    'J8164A' => '2626-PWR',
 | 
				
			||||||
    'J4900B' => '2626-CR',
 | 
					    'J4900B' => '2626-CR',
 | 
				
			||||||
 | 
					    'J4900C' => '2626C',
 | 
				
			||||||
    'J4900A' => '2626',
 | 
					    'J4900A' => '2626',
 | 
				
			||||||
    'J9627A' => '2620-48-PoE+',
 | 
					    'J9627A' => '2620-48-PoE+',
 | 
				
			||||||
    'J9624A' => '2620-48',
 | 
					    'J9626A' => '2620-48',
 | 
				
			||||||
    'J9625A' => '2620-24-PoE+',
 | 
					 | 
				
			||||||
    'J9624A' => '2620-24-PPoE+',
 | 
					    'J9624A' => '2620-24-PPoE+',
 | 
				
			||||||
 | 
					    'J9625A' => '2620-24-PoE+',
 | 
				
			||||||
    'J9623A' => '2620-24',
 | 
					    'J9623A' => '2620-24',
 | 
				
			||||||
    'J9565A' => '2615-8-PoE',
 | 
					    'J9565A' => '2615-8-PoE',
 | 
				
			||||||
    'J9089A' => '2610-48-PWR',
 | 
					    'J9089A' => '2610-48-PWR',
 | 
				
			||||||
    'J9088A' => '2610-48',
 | 
					    'J9088A' => '2610-48',
 | 
				
			||||||
    'J9086A' => '2610-24/12PWR',
 | 
					 | 
				
			||||||
    'J9087A' => '2610-24-PWR',
 | 
					    'J9087A' => '2610-24-PWR',
 | 
				
			||||||
 | 
					    'J9086A' => '2610-24/12PWR',
 | 
				
			||||||
    'J9085A' => '2610-24',
 | 
					    'J9085A' => '2610-24',
 | 
				
			||||||
    'J8762A' => '2600-8-PWR',
 | 
					    'J8762A' => '2600-8-PWR',
 | 
				
			||||||
 | 
					    'J9780A' => '2530-8-PoE+',
 | 
				
			||||||
 | 
					    'J9774A' => '2530-8G-PoEP',
 | 
				
			||||||
 | 
					    'J9777A' => '2530-8G',
 | 
				
			||||||
 | 
					    'J9783A' => '2530-8',
 | 
				
			||||||
 | 
					    'J9778A' => '2530-48-PoE+',
 | 
				
			||||||
 | 
					    'J9853A' => '2530-48G-PoE+-2SFP+',
 | 
				
			||||||
    'J9772A' => '2530-48G-PoE+',
 | 
					    'J9772A' => '2530-48G-PoE+',
 | 
				
			||||||
 | 
					    'J9855A' => '2530-48G-2SFP+',
 | 
				
			||||||
    'J9775A' => '2530-48G',
 | 
					    'J9775A' => '2530-48G',
 | 
				
			||||||
 | 
					    'J9781A' => '2530-48',
 | 
				
			||||||
 | 
					    'J9779A' => '2530-24-PoE+',
 | 
				
			||||||
 | 
					    'J9854A' => '2530-24G-PoE+-2SFP+',
 | 
				
			||||||
    'J9773A' => '2530-24G-PoE+',
 | 
					    'J9773A' => '2530-24G-PoE+',
 | 
				
			||||||
 | 
					    'J9856A' => '2530-24G-2SFP+',
 | 
				
			||||||
    'J9776A' => '2530-24G',
 | 
					    'J9776A' => '2530-24G',
 | 
				
			||||||
 | 
					    'J9782A' => '2530-24',
 | 
				
			||||||
    'J4813A' => '2524',
 | 
					    'J4813A' => '2524',
 | 
				
			||||||
    'J9298A' => '2520G-8-PoE',
 | 
					    'J9298A' => '2520G-8-PoE',
 | 
				
			||||||
    'J9299A' => '2520G-24-PoE',
 | 
					    'J9299A' => '2520G-24-PoE',
 | 
				
			||||||
@@ -221,6 +245,8 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    'J4817A' => '2312',
 | 
					    'J4817A' => '2312',
 | 
				
			||||||
    'J9449A' => '1810G-8',
 | 
					    'J9449A' => '1810G-8',
 | 
				
			||||||
    'J9450A' => '1810G-24',
 | 
					    'J9450A' => '1810G-24',
 | 
				
			||||||
 | 
					    'J9802A' => '1810-8G',
 | 
				
			||||||
 | 
					    'J9803A' => '1810-24G',
 | 
				
			||||||
    'J9029A' => '1800-8G',
 | 
					    'J9029A' => '1800-8G',
 | 
				
			||||||
    'J9028A' => '1800-24G',
 | 
					    'J9028A' => '1800-24G',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
@@ -524,6 +550,8 @@ sub set_i_vlan_tagged {
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub agg_ports { return agg_ports_ifstack(@_) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -570,8 +598,6 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer2
 | 
					=item SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::MAU
 | 
					=item SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -710,7 +736,7 @@ number and the common model number with this map :
 | 
				
			|||||||
    'J4900C' => '2626C',
 | 
					    'J4900C' => '2626C',
 | 
				
			||||||
    'J4900A' => '2626',
 | 
					    'J4900A' => '2626',
 | 
				
			||||||
    'J9627A' => '2620-48-PoE+',
 | 
					    'J9627A' => '2620-48-PoE+',
 | 
				
			||||||
    'J9624A' => '2620-48',
 | 
					    'J9626A' => '2620-48',
 | 
				
			||||||
    'J9624A' => '2620-24-PPoE+',
 | 
					    'J9624A' => '2620-24-PPoE+',
 | 
				
			||||||
    'J9625A' => '2620-24-PoE+',
 | 
					    'J9625A' => '2620-24-PoE+',
 | 
				
			||||||
    'J9623A' => '2620-24',
 | 
					    'J9623A' => '2620-24',
 | 
				
			||||||
@@ -797,10 +823,6 @@ Returns what version of STP the device is running.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::MAU
 | 
					=head2 Globals imported from SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
 | 
				
			||||||
@@ -812,7 +834,7 @@ to a hash.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head2 Overrides
 | 
					=head2 Overrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $hp->interfaces() 
 | 
					=item $hp->interfaces() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -840,16 +862,18 @@ Crosses i_name() with $hp->e_name() using $hp->e_port() and i_alias()
 | 
				
			|||||||
Returns reference to hash of power Ethernet port table entries map back to
 | 
					Returns reference to hash of power Ethernet port table entries map back to
 | 
				
			||||||
interface index (c<ifIndex>)
 | 
					interface index (c<ifIndex>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item C<agg_ports>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a HASH reference mapping from slave to master port for each member of
 | 
				
			||||||
 | 
					a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
				
			||||||
 | 
					ifIndex of the corresponding master ports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::MAU
 | 
					=head2 Table Methods imported from SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -376,6 +376,20 @@ sub i_vlan_membership {
 | 
				
			|||||||
    return $i_vlan_membership;
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership_untagged {
 | 
				
			||||||
 | 
					    my $hp  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $vlans = $hp->i_vlan($partial);
 | 
				
			||||||
 | 
					    my $i_vlan_membership = {};
 | 
				
			||||||
 | 
					    foreach my $port (keys %$vlans) {
 | 
				
			||||||
 | 
					        my $vlan = $vlans->{$port};
 | 
				
			||||||
 | 
					        push( @{ $i_vlan_membership->{$port} }, $vlan );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_i_vlan {
 | 
					sub set_i_vlan {
 | 
				
			||||||
    my $hp = shift;
 | 
					    my $hp = shift;
 | 
				
			||||||
    my $rv;
 | 
					    my $rv;
 | 
				
			||||||
@@ -680,6 +694,12 @@ It is the union of tagged, untagged, and auto ports.
 | 
				
			|||||||
    print "Port: $port VLAN: $vlan\n";
 | 
					    print "Port: $port VLAN: $vlan\n";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $hp->i_vlan_membership_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
				
			||||||
 | 
					IDs.  These are the VLANs which are members of the untagged egress list for
 | 
				
			||||||
 | 
					the port.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $hp->v_index()
 | 
					=item $hp->v_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns VLAN IDs
 | 
					Returns VLAN IDs
 | 
				
			||||||
@@ -33,17 +33,19 @@ package SNMP::Info::Layer2::HPVC;
 | 
				
			|||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::Layer2;
 | 
					use SNMP::Info::Layer2;
 | 
				
			||||||
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::HPVC::ISA
 | 
					@SNMP::Info::Layer2::HPVC::ISA
 | 
				
			||||||
    = qw/SNMP::Info::Layer2 Exporter/;
 | 
					    = qw/SNMP::Info::Layer2 SNMP::Info::LLDP Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
    'HPVC-MIB'       => 'vcDomainName',
 | 
					    'HPVC-MIB'       => 'vcDomainName',
 | 
				
			||||||
    'CPQSINFO-MIB'   => 'cpqSiSysSerialNum',
 | 
					    'CPQSINFO-MIB'   => 'cpqSiSysSerialNum',
 | 
				
			||||||
    'HPVCMODULE-MIB' => 'vcModuleDomainName',
 | 
					    'HPVCMODULE-MIB' => 'vcModuleDomainName',
 | 
				
			||||||
@@ -51,6 +53,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
					    %SNMP::Info::Layer2::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
    'serial1'      => 'cpqSiSysSerialNum.0',
 | 
					    'serial1'      => 'cpqSiSysSerialNum.0',
 | 
				
			||||||
    'os_ver'       => 'cpqHoSWRunningVersion.1',
 | 
					    'os_ver'       => 'cpqHoSWRunningVersion.1',
 | 
				
			||||||
    'os_bin'       => 'cpqHoFwVerVersion.1',
 | 
					    'os_bin'       => 'cpqHoFwVerVersion.1',
 | 
				
			||||||
@@ -59,12 +62,14 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::FUNCS,
 | 
					    %SNMP::Info::Layer2::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    # Inherit all the built in munging
 | 
					    # Inherit all the built in munging
 | 
				
			||||||
    %SNMP::Info::Layer2::MUNGE,
 | 
					    %SNMP::Info::Layer2::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MUNGE,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,        %SNMP::Info::Bridge::MIBS,
 | 
					    %SNMP::Info::MIBS,        %SNMP::Info::Bridge::MIBS,
 | 
				
			||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Bridge;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,
 | 
					    %SNMP::Info::MIBS,
 | 
				
			||||||
@@ -33,32 +33,31 @@ package SNMP::Info::Layer2::Netgear;
 | 
				
			|||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::Layer2;
 | 
					use SNMP::Info::Layer2;
 | 
				
			||||||
use SNMP::Info::Entity;
 | 
					 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer2::Netgear::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Entity SNMP::Info::Layer2 Exporter/;
 | 
					@SNMP::Info::Layer2::Netgear::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
					# This will be filled in with the device's index into the EntPhysicalEntry
 | 
				
			||||||
# table by the serial() function.
 | 
					# table by the serial() function.
 | 
				
			||||||
our $index = undef;
 | 
					our $index = undef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = ( %SNMP::Info::Layer2::MIBS, %SNMP::Info::Entity::MIBS, %SNMP::Info::LLDP::MIBS, );
 | 
					%MIBS = ( %SNMP::Info::Layer2::MIBS, %SNMP::Info::LLDP::MIBS, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::Entity::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
 | 
					    %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
    ng_fsosver   => '.1.3.6.1.4.1.4526.11.11.1.0',
 | 
					    ng_fsosver   => '.1.3.6.1.4.1.4526.11.11.1.0',
 | 
				
			||||||
    ng_gsmserial => '.1.3.6.1.4.1.4526.10.1.1.1.4.0',
 | 
					    ng_gsmserial => '.1.3.6.1.4.1.4526.10.1.1.1.4.0',
 | 
				
			||||||
    ng_gsmosver  => '.1.3.6.1.4.1.4526.10.1.1.1.13.0',
 | 
					    ng_gsmosver  => '.1.3.6.1.4.1.4526.10.1.1.1.13.0',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::Entity::FUNCS, %SNMP::Info::LLDP::FUNCS, );
 | 
					%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::LLDP::FUNCS, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Entity::MUNGE, %SNMP::Info::LLDP::MUNGE, );
 | 
					%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub vendor {
 | 
					sub vendor {
 | 
				
			||||||
    return 'netgear';
 | 
					    return 'netgear';
 | 
				
			||||||
@@ -140,25 +139,6 @@ sub interfaces {
 | 
				
			|||||||
    return $interfaces;
 | 
					    return $interfaces;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is model-dependent.  Some netgear brand devices don't implement
 | 
					 | 
				
			||||||
# the bridge MIB forwarding table, so we use the Q-BRIDGE-MIB forwarding
 | 
					 | 
				
			||||||
# table.  Fall back to the orig functions if the qb versions don't
 | 
					 | 
				
			||||||
# return anything.
 | 
					 | 
				
			||||||
sub fw_mac {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $ret     = $netgear->qb_fw_mac();
 | 
					 | 
				
			||||||
    $ret = $netgear->orig_fw_mac() if ( !defined($ret) );
 | 
					 | 
				
			||||||
    return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub fw_port {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $ret     = $netgear->qb_fw_port();
 | 
					 | 
				
			||||||
    $ret = $netgear->orig_fw_port() if ( !defined($ret) );
 | 
					 | 
				
			||||||
    return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# these seem to work for GSM models but not GS
 | 
					# these seem to work for GSM models but not GS
 | 
				
			||||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
 | 
					# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
 | 
				
			||||||
sub os_ver {
 | 
					sub os_ver {
 | 
				
			||||||
@@ -172,134 +152,6 @@ sub os_ver {
 | 
				
			|||||||
    return $netgear->ng_fsosver() if defined  $netgear->model and $netgear->model =~ m/FS\d/i;
 | 
					    return $netgear->ng_fsosver() if defined  $netgear->model and $netgear->model =~ m/FS\d/i;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#  Use LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub hasCDP {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    return $netgear->hasLLDP() || $netgear->SUPER::hasCDP();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub c_ip {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $cdp  = $netgear->SUPER::c_ip($partial) || {};
 | 
					 | 
				
			||||||
    my $lldp = $netgear->lldp_ip($partial)     || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %c_ip;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$cdp ) {
 | 
					 | 
				
			||||||
        my $ip = $cdp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $ip;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_ip{$iid} = $ip;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$lldp ) {
 | 
					 | 
				
			||||||
        my $ip = $lldp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $ip;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_ip{$iid} = $ip;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%c_ip;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub c_if {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $partial  = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $lldp = $netgear->lldp_if($partial)     || {};
 | 
					 | 
				
			||||||
    my $cdp  = $netgear->SUPER::c_if($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %c_if;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$cdp ) {
 | 
					 | 
				
			||||||
        my $if = $cdp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $if;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_if{$iid} = $if;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$lldp ) {
 | 
					 | 
				
			||||||
        my $if = $lldp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $if;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_if{$iid} = $if;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%c_if;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub c_port {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $partial  = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $lldp = $netgear->lldp_port($partial)     || {};
 | 
					 | 
				
			||||||
    my $cdp  = $netgear->SUPER::c_port($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %c_port;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$cdp ) {
 | 
					 | 
				
			||||||
        my $port = $cdp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $port;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_port{$iid} = $port;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$lldp ) {
 | 
					 | 
				
			||||||
        my $port = $lldp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $port;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_port{$iid} = $port;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%c_port;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub c_id {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $partial  = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $lldp = $netgear->lldp_id($partial)     || {};
 | 
					 | 
				
			||||||
    my $cdp  = $netgear->SUPER::c_id($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %c_id;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$cdp ) {
 | 
					 | 
				
			||||||
        my $id = $cdp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $id;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_id{$iid} = $id;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$lldp ) {
 | 
					 | 
				
			||||||
        my $id = $lldp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $id;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_id{$iid} = $id;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%c_id;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub c_platform {
 | 
					 | 
				
			||||||
    my $netgear = shift;
 | 
					 | 
				
			||||||
    my $partial  = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $lldp = $netgear->lldp_rem_sysdesc($partial)  || {};
 | 
					 | 
				
			||||||
    my $cdp  = $netgear->SUPER::c_platform($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %c_platform;
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$cdp ) {
 | 
					 | 
				
			||||||
        my $platform = $cdp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $platform;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_platform{$iid} = $platform;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreach my $iid ( keys %$lldp ) {
 | 
					 | 
				
			||||||
        my $platform = $lldp->{$iid};
 | 
					 | 
				
			||||||
        next unless defined $platform;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $c_platform{$iid} = $platform;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%c_platform;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
@@ -413,72 +265,12 @@ a reference to a hash.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $netgear->fw_mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of forwarding table MAC Addresses.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
 | 
					 | 
				
			||||||
the C<Q-BRIDGE-MIB> forwarding table.  Fall back to the C<BRIDGE-MIB> if
 | 
					 | 
				
			||||||
C<Q-BRIDGE-MIB> doesn't return anything.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->fw_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of forwarding table entries port interface
 | 
					 | 
				
			||||||
identifier (iid)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
 | 
					 | 
				
			||||||
the C<Q-BRIDGE-MIB> forwarding table.  Fall back to the C<BRIDGE-MIB> if
 | 
					 | 
				
			||||||
C<Q-BRIDGE-MIB> doesn't return anything.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->interfaces()
 | 
					=item $netgear->interfaces()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Uses the i_name() field.
 | 
					Uses the i_name() field.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Topology information
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Based upon the software version devices may support Link Layer Discovery 
 | 
					 | 
				
			||||||
Protocol (LLDP).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=over
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->hasCDP()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns true if the device is running LLDP.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->c_if()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Key: iid Value: local device port (interfaces)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->c_ip()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Key: iid Value: remote IPv4 address
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If multiple entries exist with the same local port, c_if(), with the same IPv4
 | 
					 | 
				
			||||||
address, c_ip(), it may be a duplicate entry.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If multiple entries exist with the same local port, c_if(), with different
 | 
					 | 
				
			||||||
IPv4 addresses, c_ip(), there is either a non-LLDP device in between two or
 | 
					 | 
				
			||||||
more devices or multiple devices which are not directly connected.  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the data from the Layer2 Topology Table below to dig deeper.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->c_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash. Key: iid Value: remote port (interfaces)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->c_id()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash. Key: iid Value: string value used to identify the
 | 
					 | 
				
			||||||
chassis component associated with the remote system.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $netgear->c_platform()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Key: iid Value: Remote Device Type
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
					=head2 Table Methods imported from SNMP::Info::Layer2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS,
 | 
				
			||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,
 | 
					    %SNMP::Info::MIBS,
 | 
				
			||||||
							
								
								
									
										311
									
								
								lib/SNMP/Info/Layer2/Ubiquiti.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										311
									
								
								lib/SNMP/Info/Layer2/Ubiquiti.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,311 @@
 | 
				
			|||||||
 | 
					# 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.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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->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 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,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set for No CDP
 | 
					# Set for No CDP
 | 
				
			||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
					%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
				
			||||||
@@ -41,17 +41,19 @@ use SNMP::Info::Entity;
 | 
				
			|||||||
use SNMP::Info::PowerEthernet;
 | 
					use SNMP::Info::PowerEthernet;
 | 
				
			||||||
use SNMP::Info::IPv6;
 | 
					use SNMP::Info::IPv6;
 | 
				
			||||||
use SNMP::Info::AdslLine;
 | 
					use SNMP::Info::AdslLine;
 | 
				
			||||||
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::ISA = qw/
 | 
					@SNMP::Info::Layer3::ISA = qw/
 | 
				
			||||||
    SNMP::Info::PowerEthernet SNMP::Info::IPv6
 | 
					    SNMP::Info::PowerEthernet SNMP::Info::IPv6
 | 
				
			||||||
    SNMP::Info::Entity SNMP::Info::EtherLike
 | 
					    SNMP::Info::Entity SNMP::Info::EtherLike
 | 
				
			||||||
    SNMP::Info::Bridge SNMP::Info::AdslLine
 | 
					    SNMP::Info::Bridge SNMP::Info::AdslLine
 | 
				
			||||||
 | 
					    SNMP::Info::LLDP
 | 
				
			||||||
    SNMP::Info Exporter/;
 | 
					    SNMP::Info Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer3::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,
 | 
					    %SNMP::Info::MIBS,
 | 
				
			||||||
@@ -61,6 +63,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Entity::MIBS,
 | 
					    %SNMP::Info::Entity::MIBS,
 | 
				
			||||||
    %SNMP::Info::PowerEthernet::MIBS,
 | 
					    %SNMP::Info::PowerEthernet::MIBS,
 | 
				
			||||||
    %SNMP::Info::IPv6::MIBS,
 | 
					    %SNMP::Info::IPv6::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
    'IP-MIB'   => 'ipNetToMediaIfIndex',
 | 
					    'IP-MIB'   => 'ipNetToMediaIfIndex',
 | 
				
			||||||
    'OSPF-MIB' => 'ospfRouterId',
 | 
					    'OSPF-MIB' => 'ospfRouterId',
 | 
				
			||||||
    'BGP4-MIB' => 'bgpIdentifier',
 | 
					    'BGP4-MIB' => 'bgpIdentifier',
 | 
				
			||||||
@@ -76,6 +79,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Entity::GLOBALS,
 | 
					    %SNMP::Info::Entity::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
					    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::IPv6::GLOBALS,
 | 
					    %SNMP::Info::IPv6::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
    'mac' => 'ifPhysAddress.1',
 | 
					    'mac' => 'ifPhysAddress.1',
 | 
				
			||||||
    'serial1' =>
 | 
					    'serial1' =>
 | 
				
			||||||
        '.1.3.6.1.4.1.9.3.6.3.0',    # OLD-CISCO-CHASSIS-MIB::chassisId.0
 | 
					        '.1.3.6.1.4.1.9.3.6.3.0',    # OLD-CISCO-CHASSIS-MIB::chassisId.0
 | 
				
			||||||
@@ -92,6 +96,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Entity::FUNCS,
 | 
					    %SNMP::Info::Entity::FUNCS,
 | 
				
			||||||
    %SNMP::Info::PowerEthernet::FUNCS,
 | 
					    %SNMP::Info::PowerEthernet::FUNCS,
 | 
				
			||||||
    %SNMP::Info::IPv6::FUNCS,
 | 
					    %SNMP::Info::IPv6::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Obsolete Address Translation Table (ARP Cache)
 | 
					    # Obsolete Address Translation Table (ARP Cache)
 | 
				
			||||||
    'old_at_index'   => 'atIfIndex',
 | 
					    'old_at_index'   => 'atIfIndex',
 | 
				
			||||||
@@ -150,6 +155,7 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
    %SNMP::Info::Entity::MUNGE,
 | 
					    %SNMP::Info::Entity::MUNGE,
 | 
				
			||||||
    %SNMP::Info::PowerEthernet::MUNGE,
 | 
					    %SNMP::Info::PowerEthernet::MUNGE,
 | 
				
			||||||
    %SNMP::Info::IPv6::MUNGE,
 | 
					    %SNMP::Info::IPv6::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MUNGE,
 | 
				
			||||||
    'old_at_paddr' => \&SNMP::Info::munge_mac,
 | 
					    'old_at_paddr' => \&SNMP::Info::munge_mac,
 | 
				
			||||||
    'at_paddr'     => \&SNMP::Info::munge_mac,
 | 
					    'at_paddr'     => \&SNMP::Info::munge_mac,
 | 
				
			||||||
    'n2p_paddr'    => \&SNMP::Info::munge_mac,
 | 
					    'n2p_paddr'    => \&SNMP::Info::munge_mac,
 | 
				
			||||||
@@ -185,38 +191,32 @@ sub root_ip {
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub i_ignore {
 | 
					 | 
				
			||||||
    my $l3      = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $interfaces = $l3->interfaces($partial) || {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my %i_ignore;
 | 
					 | 
				
			||||||
    foreach my $if ( keys %$interfaces ) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # lo -> cisco aironet 350 loopback
 | 
					 | 
				
			||||||
        if ( $interfaces->{$if} =~ /(tunnel|loopback|\blo\b|null)/i ) {
 | 
					 | 
				
			||||||
            $i_ignore{$if}++;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return \%i_ignore;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub serial {
 | 
					sub serial {
 | 
				
			||||||
    my $l3 = shift;
 | 
					    my $l3 = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $serial1 = $l3->serial1();
 | 
					    my $serial1 = $l3->serial1();
 | 
				
			||||||
    my $e_descr  = $l3->e_descr() || {};
 | 
					    my $e_parent = $l3->e_parent() || {};
 | 
				
			||||||
    my $e_serial = $l3->e_serial() || {};
 | 
					    my $e_class  = $l3->e_class() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $serial2 = $e_serial->{1} || undef;
 | 
					    foreach my $iid ( keys %$e_parent ) {
 | 
				
			||||||
    my $chassis = $e_descr->{1}  || undef;
 | 
					        my $parent = $e_parent->{$iid};
 | 
				
			||||||
 | 
					        my $class = $e_class->{$iid} || '';
 | 
				
			||||||
 | 
					        # Only consider serial numbers for entries without a parent, or if they are of type "chassis"
 | 
				
			||||||
 | 
					        if ( $parent eq '0' or $class eq 'chassis') {
 | 
				
			||||||
 | 
					            my $serial = $l3->e_serial($iid);
 | 
				
			||||||
 | 
					            if ( $serial && $serial->{$iid} ) {
 | 
				
			||||||
 | 
					                return $serial->{$iid};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                my $descr = $l3->e_descr($iid);
 | 
				
			||||||
 | 
					                if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i )
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return $1;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # precedence
 | 
					 | 
				
			||||||
    #   serial2,chassis parse,serial1
 | 
					 | 
				
			||||||
    return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
 | 
					 | 
				
			||||||
    return $1
 | 
					 | 
				
			||||||
        if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i );
 | 
					 | 
				
			||||||
    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
					    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
@@ -294,17 +294,22 @@ sub interfaces {
 | 
				
			|||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $interfaces = $l3->i_index($partial);
 | 
					    my $interfaces = $l3->i_index($partial);
 | 
				
			||||||
    my $descriptions = $l3->i_description($partial);
 | 
					    my $i_descr    = $l3->i_description($partial);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my %interfaces = ();
 | 
					    # Check for duplicates in ifDescr, if so uniquely identify by adding
 | 
				
			||||||
    foreach my $iid ( keys %$interfaces ) {
 | 
					    # ifIndex to repeated values
 | 
				
			||||||
        my $desc = $descriptions->{$iid};
 | 
					    my %seen;
 | 
				
			||||||
        next unless defined $desc;
 | 
					    foreach my $iid ( keys %$i_descr ) {
 | 
				
			||||||
 | 
					        my $port = $i_descr->{$iid};
 | 
				
			||||||
        $interfaces{$iid} = $desc;
 | 
					        next unless defined $port;
 | 
				
			||||||
 | 
					        if ( $seen{$port}++ ) {
 | 
				
			||||||
 | 
					            $interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
    return \%interfaces;
 | 
					            $interfaces->{$iid} = $port;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $interfaces;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub vendor {
 | 
					sub vendor {
 | 
				
			||||||
@@ -414,6 +419,8 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::IPv6
 | 
					=item SNMP::Info::IPv6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Required MIBs
 | 
					=head2 Required MIBs
 | 
				
			||||||
@@ -442,6 +449,8 @@ See L<SNMP::Info::PowerEthernet/"Required MIBs"> for its MIB requirements.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
 | 
					See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 GLOBALS
 | 
					=head1 GLOBALS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are methods that return scalar value from SNMP
 | 
					These are methods that return scalar value from SNMP
 | 
				
			||||||
@@ -515,6 +524,18 @@ See L<SNMP::Info::EtherLike/"GLOBALS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
					See L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Global Methods imported from SNMP::Info:PowerEthernet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::PowerEthernet/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Global Methods imported from SNMP::Info::IPv6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::IPv6/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Global Methods imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are methods that return tables of information in the form of a reference
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
@@ -531,12 +552,6 @@ name.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Only returns those iids that have a description listed in $l3->i_description()
 | 
					Only returns those iids that have a description listed in $l3->i_description()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $l3->i_ignore()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash.  Creates a key for each IID that should be ignored.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Currently looks for tunnel,loopback,lo,null from $l3->interfaces()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $l3->i_name()
 | 
					=item $l3->i_name()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to hash of iid to human set name. 
 | 
					Returns reference to hash of iid to human set name. 
 | 
				
			||||||
@@ -790,4 +805,8 @@ See L<SNMP::Info::PowerEthernet/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
 | 
					See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
					use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -198,21 +198,6 @@ sub interfaces {
 | 
				
			|||||||
    return $alu->orig_i_name($partial);
 | 
					    return $alu->orig_i_name($partial);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Use Q-BRIDGE-MIB
 | 
					 | 
				
			||||||
sub fw_mac {
 | 
					 | 
				
			||||||
    my $alu     = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $alu->qb_fw_mac($partial);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub fw_port {
 | 
					 | 
				
			||||||
    my $alu     = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $alu->qb_fw_port($partial);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
 | 
					# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
 | 
				
			||||||
sub bp_index {
 | 
					sub bp_index {
 | 
				
			||||||
    my $alu     = shift;
 | 
					    my $alu     = shift;
 | 
				
			||||||
@@ -445,14 +430,6 @@ to a hash.
 | 
				
			|||||||
Returns interface name from C<ifName>, since the default return value
 | 
					Returns interface name from C<ifName>, since the default return value
 | 
				
			||||||
of C<ifDescr> includes the OS version.
 | 
					of C<ifDescr> includes the OS version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $alu->fw_mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $alu->fw_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $alu->bp_index()
 | 
					=item $alu->bp_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Work around various bugs in the F<BRIDGE-MIB> and
 | 
					Work around various bugs in the F<BRIDGE-MIB> and
 | 
				
			||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -385,6 +385,20 @@ sub i_vlan_membership {
 | 
				
			|||||||
    return $i_vlan_membership;
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership_untagged {
 | 
				
			||||||
 | 
					    my $alteon  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $vlans = $alteon->i_vlan($partial);
 | 
				
			||||||
 | 
					    my $i_vlan_membership = {};
 | 
				
			||||||
 | 
					    foreach my $port (keys %$vlans) {
 | 
				
			||||||
 | 
					        my $vlan = $vlans->{$port};
 | 
				
			||||||
 | 
					        push( @{ $i_vlan_membership->{$port} }, $vlan );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $i_vlan_membership;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Bridge MIB does not map Bridge Port to ifIndex correctly on some code
 | 
					# Bridge MIB does not map Bridge Port to ifIndex correctly on some code
 | 
				
			||||||
# versions
 | 
					# versions
 | 
				
			||||||
sub bp_index {
 | 
					sub bp_index {
 | 
				
			||||||
@@ -574,6 +588,12 @@ IDs.  These are the VLANs which are members of the egress list for the port.
 | 
				
			|||||||
    print "Port: $port VLAN: $vlan\n";
 | 
					    print "Port: $port VLAN: $vlan\n";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $alteon->i_vlan_membership_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
				
			||||||
 | 
					IDs.  These are the VLANs which are members of the untagged egress list for
 | 
				
			||||||
 | 
					the port.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $alteon->v_index()
 | 
					=item $alteon->v_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns VLAN IDs
 | 
					Returns VLAN IDs
 | 
				
			||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
 | 
				
			|||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE 
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE 
 | 
				
			||||||
            $int_include_vpn $fake_idx $type_class/;
 | 
					            $int_include_vpn $fake_idx $type_class/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
            %SNMP::Info::Layer3::MIBS,
 | 
					            %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -36,19 +36,25 @@ use Exporter;
 | 
				
			|||||||
use SNMP::Info::Layer3;
 | 
					use SNMP::Info::Layer3;
 | 
				
			||||||
use SNMP::Info::MAU;
 | 
					use SNMP::Info::MAU;
 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::Arista::ISA = qw/SNMP::Info::LLDP SNMP::Info::MAU
 | 
					@SNMP::Info::Layer3::Arista::ISA = qw/
 | 
				
			||||||
    SNMP::Info::Layer3 Exporter/;
 | 
					    SNMP::Info::Aggregate
 | 
				
			||||||
 | 
					    SNMP::Info::LLDP
 | 
				
			||||||
 | 
					    SNMP::Info::MAU
 | 
				
			||||||
 | 
					    SNMP::Info::Layer3 Exporter
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
    %SNMP::Info::MAU::MIBS,
 | 
					    %SNMP::Info::MAU::MIBS,
 | 
				
			||||||
    %SNMP::Info::LLDP::MIBS,
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::Aggregate::MIBS,
 | 
				
			||||||
    'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
 | 
					    'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,21 +110,28 @@ sub model {
 | 
				
			|||||||
    return $model;
 | 
					    return $model;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Use Q-BRIDGE-MIB
 | 
					# The LLDP MIB leaves it up in the air what the index means.
 | 
				
			||||||
 | 
					# On EOS, it's a dot1d port.
 | 
				
			||||||
sub fw_mac {
 | 
					sub lldp_if {
 | 
				
			||||||
    my $arista  = shift;
 | 
					    my $arista  = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $arista->qb_fw_mac($partial);
 | 
					    # We pick a column that someone else is likely to want,
 | 
				
			||||||
 | 
					    # so that the cache means that hopefully this doesn't
 | 
				
			||||||
 | 
					    # cause any more SNMP transactions in total.
 | 
				
			||||||
 | 
					    my $desc     = $arista->lldp_rem_desc($partial) || {};
 | 
				
			||||||
 | 
					    my $bp_index = $arista->bp_index() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $lldp_if = {};
 | 
				
			||||||
 | 
					    foreach my $key ( keys %$desc ) {
 | 
				
			||||||
 | 
					        my @aOID = split( '\.', $key );
 | 
				
			||||||
 | 
					        my $port = $aOID[1];
 | 
				
			||||||
 | 
					        $lldp_if->{$key} = $bp_index->{$port};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $lldp_if;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub fw_port {
 | 
					sub agg_ports { return agg_ports_ifstack(@_) }
 | 
				
			||||||
    my $arista  = shift;
 | 
					 | 
				
			||||||
    my $partial = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $arista->qb_fw_port($partial);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
@@ -155,6 +168,8 @@ Subclass for Arista Networks EOS-based devices
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Aggregate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					=item SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::MAU
 | 
					=item SNMP::Info::MAU
 | 
				
			||||||
@@ -173,6 +188,8 @@ Subclass for Arista Networks EOS-based devices
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Aggregate/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
@@ -224,14 +241,6 @@ to a hash.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $arista->fw_mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $arista->fw_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $arista->i_duplex_admin()
 | 
					=item $arista->i_duplex_admin()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns info from F<MAU-MIB>
 | 
					Returns info from F<MAU-MIB>
 | 
				
			||||||
@@ -240,6 +249,16 @@ Returns info from F<MAU-MIB>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Returns info from F<MAU-MIB>
 | 
					Returns info from F<MAU-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $arista->lldp_if()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the mapping to the SNMP Interface Table.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item C<agg_ports>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a HASH reference mapping from slave to master port for each member of
 | 
				
			||||||
 | 
					a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
				
			||||||
 | 
					ifIndex of the corresponding master ports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
							
								
								
									
										1838
									
								
								lib/SNMP/Info/Layer3/Aruba.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1838
									
								
								lib/SNMP/Info/Layer3/Aruba.pm
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
 | 
				
			|||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
 | 
					use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
 | 
				
			||||||
    %MODID_MAP %PROCID_MAP/;
 | 
					    %MODID_MAP %PROCID_MAP/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS,
 | 
					    %SNMP::Info::MIBS,
 | 
				
			||||||
@@ -732,6 +732,8 @@ sub i_vlan {
 | 
				
			|||||||
    return \%i_vlan;
 | 
					    return \%i_vlan;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_pvid { goto &i_vlan }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub root_ip {
 | 
					sub root_ip {
 | 
				
			||||||
    my $bayrs = shift;
 | 
					    my $bayrs = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1549,6 +1551,10 @@ interfaces.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Returns reference to hash.  Maps port VLAN ID to IIDs.
 | 
					Returns reference to hash.  Maps port VLAN ID to IIDs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $bayrs->i_pvid()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash.  Maps port VLAN ID to IIDs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Pseudo F<ENTITY-MIB> information
 | 
					=head2 Pseudo F<ENTITY-MIB> information
 | 
				
			||||||
@@ -1635,11 +1641,11 @@ See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $extreme->munge_hw_rev()
 | 
					=item $bayrs->munge_hw_rev()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Converts octets to a decimal major.minor string.
 | 
					Converts octets to a decimal major.minor string.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $extreme->munge_wf_serial()
 | 
					=item $bayrs->munge_wf_serial()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Coverts octets to a decimal string.
 | 
					Coverts octets to a decimal string.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -32,39 +32,22 @@
 | 
				
			|||||||
package SNMP::Info::Layer3::C3550;
 | 
					package SNMP::Info::Layer3::C3550;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStack;
 | 
					use SNMP::Info::CiscoStack;
 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					use SNMP::Info::Layer3::CiscoSwitch;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPortSecurity;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPower;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStpExtensions;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# NOTE : Top-most items gets precedence for @ISA
 | 
					# NOTE : Top-most items gets precedence for @ISA
 | 
				
			||||||
@SNMP::Info::Layer3::C3550::ISA = qw/
 | 
					@SNMP::Info::Layer3::C3550::ISA = qw/
 | 
				
			||||||
    SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStack
 | 
					    SNMP::Info::CiscoStack
 | 
				
			||||||
    SNMP::Info::LLDP
 | 
					    SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
    SNMP::Info::CDP
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
    SNMP::Info::Layer3
 | 
					 | 
				
			||||||
    Exporter/;
 | 
					    Exporter/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# NOTE: Order creates precedence
 | 
					# NOTE: Order creates precedence
 | 
				
			||||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
					#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
				
			||||||
@@ -72,46 +55,23 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
#       So we want CiscoVTP to come last to get the right one.
 | 
					#       So we want CiscoVTP to come last to get the right one.
 | 
				
			||||||
# The @ISA order should match these orders.
 | 
					# The @ISA order should match these orders.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,             %SNMP::Info::CiscoPower::MIBS,
 | 
					    = ( %SNMP::Info::Layer3::CiscoSwitch::MIBS, %SNMP::Info::CiscoStack::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MIBS,        %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::MIBS,         %SNMP::Info::CiscoStats::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::MIBS,               %SNMP::Info::CDP::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::MIBS,         %SNMP::Info::CiscoStpExtensions::MIBS, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS,
 | 
					 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoPower::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::GLOBALS,
 | 
					    %SNMP::Info::CiscoStack::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,             %SNMP::Info::CiscoPower::FUNCS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,        %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
					    %SNMP::Info::CiscoStack::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::FUNCS,         %SNMP::Info::CiscoStats::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::FUNCS,               %SNMP::Info::CDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::FUNCS,         %SNMP::Info::CiscoStpExtensions::FUNCS, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,    
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE,             %SNMP::Info::CiscoPower::MUNGE,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MUNGE,        %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
					    %SNMP::Info::CiscoStack::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MUNGE,         %SNMP::Info::CiscoStats::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::MUNGE,               %SNMP::Info::CDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::MUNGE,         %SNMP::Info::CiscoStpExtensions::MUNGE, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MUNGE,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub vendor {
 | 
					sub vendor {
 | 
				
			||||||
@@ -232,10 +192,6 @@ sub set_i_duplex_admin {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub cisco_comm_indexing {
 | 
					 | 
				
			||||||
    return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -281,25 +237,9 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoSTPExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStack
 | 
					=item SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					=item SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -309,26 +249,10 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
 | 
					 | 
				
			||||||
requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
 | 
				
			||||||
 | 
					requirements.
 | 
				
			||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -353,51 +277,15 @@ Will take the translated model number and try to format it better.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Tries to cull the number of ports from the model number.
 | 
					Tries to cull the number of ports from the model number.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $c3550->cisco_comm_indexing()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 1.  Use vlan indexing.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					=head2 Globals imported from SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoStack
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					=head2 Globals imported from SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -444,45 +332,13 @@ Crosses $c3550->p_port() with $c3550->p_duplex() to utilize port C<ifIndex>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
 | 
					 | 
				
			||||||
details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStack
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
 | 
				
			||||||
 | 
					details.
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
@@ -31,48 +31,30 @@
 | 
				
			|||||||
package SNMP::Info::Layer3::C4000;
 | 
					package SNMP::Info::Layer3::C4000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					use SNMP::Info::Layer3::CiscoSwitch;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPortSecurity;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					 | 
				
			||||||
use SNMP::Info::MAU;
 | 
					use SNMP::Info::MAU;
 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::C4000::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
 | 
					@SNMP::Info::Layer3::C4000::ISA = qw/
 | 
				
			||||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoImage
 | 
					    SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
    SNMP::Info::CiscoPortSecurity
 | 
					    SNMP::Info::MAU
 | 
				
			||||||
    SNMP::Info::CiscoConfig SNMP::Info::MAU
 | 
					    Exporter/;
 | 
				
			||||||
    SNMP::Info::Layer3 Exporter/;
 | 
					 | 
				
			||||||
@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::C4000::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::MAU::MIBS,
 | 
					    %SNMP::Info::MAU::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS,
 | 
					 | 
				
			||||||
    'CISCO-ENVMON-MIB' => 'ciscoEnvMonMIB',
 | 
					    'CISCO-ENVMON-MIB' => 'ciscoEnvMonMIB',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::MAU::GLOBALS,
 | 
					    %SNMP::Info::MAU::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					 | 
				
			||||||
    'ps1_type'   => 'ciscoEnvMonSupplyStatusDescr.1',
 | 
					    'ps1_type'   => 'ciscoEnvMonSupplyStatusDescr.1',
 | 
				
			||||||
    'ps1_status' => 'ciscoEnvMonSupplyState.1',
 | 
					    'ps1_status' => 'ciscoEnvMonSupplyState.1',
 | 
				
			||||||
    'ps2_type'   => 'ciscoEnvMonSupplyStatusDescr.2',
 | 
					    'ps2_type'   => 'ciscoEnvMonSupplyStatusDescr.2',
 | 
				
			||||||
@@ -80,24 +62,14 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::MAU::FUNCS,
 | 
					    %SNMP::Info::MAU::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,
 | 
					 | 
				
			||||||
    'fan_state' => 'ciscoEnvMonFanState',
 | 
					    'fan_state' => 'ciscoEnvMonFanState',
 | 
				
			||||||
    'fan_descr' => 'ciscoEnvMonFanStatusDescr',
 | 
					    'fan_descr' => 'ciscoEnvMonFanStatusDescr',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE
 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE,      %SNMP::Info::MAU::MUNGE,
 | 
					    = ( %SNMP::Info::MAU::MUNGE, %SNMP::Info::Layer3::CiscoSwitch::MUNGE, );
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::MUNGE,  %SNMP::Info::CiscoStats::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::MUNGE,         %SNMP::Info::CiscoVTP::MUNGE,
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Override Inheritance for these specific methods
 | 
					# Override Inheritance for these specific methods
 | 
				
			||||||
# use MAU-MIB for admin. duplex and admin. speed
 | 
					# use MAU-MIB for admin. duplex and admin. speed
 | 
				
			||||||
@@ -106,6 +78,11 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
*SNMP::Info::Layer3::C4000::i_speed_admin
 | 
					*SNMP::Info::Layer3::C4000::i_speed_admin
 | 
				
			||||||
    = \&SNMP::Info::MAU::mau_i_speed_admin;
 | 
					    = \&SNMP::Info::MAU::mau_i_speed_admin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*SNMP::Info::Layer3::C4000::set_i_duplex_admin
 | 
				
			||||||
 | 
					    = \&SNMP::Info::MAU::mau_set_i_duplex_admin;
 | 
				
			||||||
 | 
					*SNMP::Info::Layer3::C4000::set_i_speed_admin
 | 
				
			||||||
 | 
					    = \&SNMP::Info::MAU::mau_set_i_speed_admin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub fan {
 | 
					sub fan {
 | 
				
			||||||
    my $c4000     = shift;
 | 
					    my $c4000     = shift;
 | 
				
			||||||
    my $fan_state = $c4000->fan_state();
 | 
					    my $fan_state = $c4000->fan_state();
 | 
				
			||||||
@@ -120,8 +97,6 @@ sub fan {
 | 
				
			|||||||
    return $ret;
 | 
					    return $ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub cisco_comm_indexing { return 1; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -163,22 +138,10 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					=item SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::MAU
 | 
					=item SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Required MIBs
 | 
					=head2 Required MIBs
 | 
				
			||||||
@@ -187,23 +150,11 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
 | 
					 | 
				
			||||||
requirements.
 | 
					requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 GLOBALS
 | 
					=head1 GLOBALS
 | 
				
			||||||
@@ -214,48 +165,20 @@ These are methods that return scalar value from SNMP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $c4000->cisco_comm_indexing()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns 1.  Use vlan indexing.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $c4000->fan()
 | 
					=item $c4000->fan()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns fan status
 | 
					Returns fan status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
					=head2 Globals imported from SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::MAU
 | 
					=head2 Globals imported from SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are methods that return tables of information in the form of a reference
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
@@ -281,39 +204,27 @@ Returns either (auto,full,half).
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Returns administrative speed for interfaces.
 | 
					Returns administrative speed for interfaces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c4000->set_i_speed_admin(speed, ifIndex)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sets port speed, must be supplied with speed and port C<ifIndex>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Speed choices are '10', '100', '1000', 'auto'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c4000->set_i_duplex_admin(duplex, ifIndex)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sets port duplex, must be supplied with duplex and port C<ifIndex>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Duplex choices are 'auto', 'half', 'full'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
 | 
					 | 
				
			||||||
details.
 | 
					details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::MAU
 | 
					=head2 Table Methods imported from SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
@@ -31,34 +31,19 @@
 | 
				
			|||||||
package SNMP::Info::Layer3::C6500;
 | 
					package SNMP::Info::Layer3::C6500;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoStack;
 | 
					use SNMP::Info::CiscoStack;
 | 
				
			||||||
use SNMP::Info::LLDP;
 | 
					use SNMP::Info::Layer3::CiscoSwitch;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					use SNMP::Info::MAU;
 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPortSecurity;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPower;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStpExtensions;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# NOTE : Top-most items gets precedence for @ISA
 | 
					# NOTE : Top-most items gets precedence for @ISA
 | 
				
			||||||
@SNMP::Info::Layer3::C6500::ISA = qw/
 | 
					@SNMP::Info::Layer3::C6500::ISA = qw/
 | 
				
			||||||
    SNMP::Info::CiscoVTP 
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStack
 | 
					    SNMP::Info::CiscoStack
 | 
				
			||||||
    SNMP::Info::LLDP
 | 
					    SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
    SNMP::Info::CDP 
 | 
					    SNMP::Info::MAU
 | 
				
			||||||
    SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoStats
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
    SNMP::Info::Layer3
 | 
					 | 
				
			||||||
    Exporter
 | 
					    Exporter
 | 
				
			||||||
/;
 | 
					/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,7 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# NOTE: Order creates precedence
 | 
					# NOTE: Order creates precedence
 | 
				
			||||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
					#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
				
			||||||
@@ -75,52 +60,50 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
# The @ISA order should match these orders.
 | 
					# The @ISA order should match these orders.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,             %SNMP::Info::CiscoPower::MIBS,
 | 
					    %SNMP::Info::MAU::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MIBS,        %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MIBS,         %SNMP::Info::CiscoStats::MIBS,
 | 
					    %SNMP::Info::CiscoStack::MIBS,
 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,                %SNMP::Info::LLDP::MIBS,
 | 
					    'CISCO-VIRTUAL-SWITCH-MIB' => 'cvsSwitchMode',
 | 
				
			||||||
    %SNMP::Info::CiscoStack::MIBS,         %SNMP::Info::CiscoStpExtensions::MIBS, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS,    
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
					    %SNMP::Info::MAU::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoPower::GLOBALS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoImage::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::GLOBALS,
 | 
					    %SNMP::Info::CiscoStack::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,             %SNMP::Info::CiscoPower::FUNCS,
 | 
					    %SNMP::Info::MAU::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,        %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::FUNCS,         %SNMP::Info::CiscoStats::FUNCS,
 | 
					    %SNMP::Info::CiscoStack::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,                %SNMP::Info::LLDP::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::FUNCS,         %SNMP::Info::CiscoStpExtensions::FUNCS, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,    
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE,             %SNMP::Info::CiscoPower::MUNGE,
 | 
					    %SNMP::Info::MAU::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MUNGE,        %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
					    %SNMP::Info::Layer3::CiscoSwitch::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MUNGE,         %SNMP::Info::CiscoStats::MUNGE,
 | 
					    %SNMP::Info::CiscoStack::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CDP::MUNGE,                %SNMP::Info::LLDP::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStack::MUNGE,         %SNMP::Info::CiscoStpExtensions::MUNGE, 
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MUNGE,    
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub vendor {
 | 
					sub vendor {
 | 
				
			||||||
    return 'cisco';
 | 
					    return 'cisco';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub cisco_comm_indexing { return 1; }
 | 
					sub serial {
 | 
				
			||||||
 | 
					    my $c6500 = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $serial = $c6500->SUPER::serial();
 | 
				
			||||||
 | 
					    return $serial if defined $serial and $serial;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # now grab the table only if SUPER cannot find it
 | 
				
			||||||
 | 
					    my $e_serial = $c6500->e_serial();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Find entity table entry for this unit
 | 
				
			||||||
 | 
					    foreach my $e ( sort keys %$e_serial ) {
 | 
				
			||||||
 | 
					        if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
 | 
				
			||||||
 | 
					            return $e_serial->{$e};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#  Newer versions use the ETHERLIKE-MIB to report operational duplex.
 | 
					#  Newer versions use the ETHERLIKE-MIB to report operational duplex.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -179,6 +162,16 @@ sub i_duplex_admin {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub is_virtual_switch {
 | 
				
			||||||
 | 
					    my $cvs = shift;
 | 
				
			||||||
 | 
					    my $cvsSwM = $cvs->cvsSwitchMode() || '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( $cvsSwM eq 'multiNode' ) {
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub set_i_duplex_admin {
 | 
					sub set_i_duplex_admin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # map a textual duplex to an integer one the switch understands
 | 
					    # map a textual duplex to an integer one the switch understands
 | 
				
			||||||
@@ -187,6 +180,20 @@ sub set_i_duplex_admin {
 | 
				
			|||||||
    my $c6500 = shift;
 | 
					    my $c6500 = shift;
 | 
				
			||||||
    my ( $duplex, $iid ) = @_;
 | 
					    my ( $duplex, $iid ) = @_;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
					    if ( $c6500->is_virtual_switch() ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # VSS -> MAU
 | 
				
			||||||
 | 
					        # Due to VSS bug
 | 
				
			||||||
 | 
					        # 1. Set the ifMauDefaultType
 | 
				
			||||||
 | 
					        # 2. Disable ifMauAutoNegAdminStatus
 | 
				
			||||||
 | 
					        # If the second set is not done, this is not going to be
 | 
				
			||||||
 | 
					        # working... Cisco Bug id CSCty97033.
 | 
				
			||||||
 | 
					        # SXI is not working (up to at least relase SXI9).
 | 
				
			||||||
 | 
					        # SXJ is working at SXJ3 (not before).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $c6500->mau_set_i_duplex_admin( $duplex, $iid );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $el_duplex = $c6500->el_duplex($iid);
 | 
					    my $el_duplex = $c6500->el_duplex($iid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Auto duplex only supported on newer software
 | 
					    # Auto duplex only supported on newer software
 | 
				
			||||||
@@ -203,7 +210,31 @@ sub set_i_duplex_admin {
 | 
				
			|||||||
        return $c6500->set_p_duplex( $duplexes{$duplex}, $iid );
 | 
					        return $c6500->set_p_duplex( $duplexes{$duplex}, $iid );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        return $c6500->SUPER::set_i_duplex_admin;
 | 
					        return $c6500->SUPER::set_i_duplex_admin( $duplex, $iid );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub set_i_speed_admin {
 | 
				
			||||||
 | 
					    my $c6500   = shift;
 | 
				
			||||||
 | 
					    my ( $speed, $iid ) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( $c6500->is_virtual_switch() ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # VSS -> MAU
 | 
				
			||||||
 | 
					        # Due to VSS bug
 | 
				
			||||||
 | 
					        # 1. Set the ifMauDefaultType
 | 
				
			||||||
 | 
					        # 2. Disable ifMauAutoNegAdminStatus
 | 
				
			||||||
 | 
					        # If the second set is not done, this is not going to be working...
 | 
				
			||||||
 | 
					        # Cisco Bug id CSCty97033.
 | 
				
			||||||
 | 
					        # SXI is not working (at least up to relase SXI9).
 | 
				
			||||||
 | 
					        # SXJ is working at SXJ3 (not before).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $c6500->mau_set_i_speed_admin( $speed, $iid );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # normal behavior using the CiscoStack method
 | 
				
			||||||
 | 
					        return $c6500->SUPER::set_i_speed_admin( $speed, $iid );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -252,25 +283,11 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStack
 | 
					=item SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					=item SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					=item SNMP::Info::MAU
 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -280,26 +297,12 @@ after determining a more specific class using the method above.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::Layer3::CiscoSwitch/"Required MIBs"> for its own MIB
 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
 | 
					 | 
				
			||||||
requirements.
 | 
					requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -313,51 +316,31 @@ These are methods that return scalar value from SNMP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Returns 'cisco'
 | 
					    Returns 'cisco'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $c6500->cisco_comm_indexing()
 | 
					=item $c6500->cvsSwitchMode()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns 1.  Use vlan indexing.
 | 
					Returns the Switch status: multiNode or standalone.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c6500->is_virtual_switch()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return 1 if the switch (C<cvsSwitchMode>) is in multimode (VSS).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c6500->serial()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns serial number of unit (falls back to C<entPhysicalSerialNum>).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
					=head2 Globals imported from SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoStack
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStack/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					=head2 Globals imported from SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStats
 | 
					=head2 Globals imported from SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -402,48 +385,29 @@ Crosses $c6500->p_port() with $c6500->p_duplex() to utilize port C<ifIndex>.
 | 
				
			|||||||
    $c6500->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'}) 
 | 
					    $c6500->set_i_duplex_admin('auto', $if_map{'FastEthernet0/1'}) 
 | 
				
			||||||
        or die "Couldn't change port duplex. ",$c6500->error(1);
 | 
					        or die "Couldn't change port duplex. ",$c6500->error(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $c6500->set_i_speed_admin(speed, ifIndex)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sets port speed, must be supplied with speed and port C<ifIndex>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Speed choices are '10', '100', '1000'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Crosses $c6500->p_port() with $c6500->p_speed() to utilize port C<ifIndex>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStack
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStack/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					See documentation in L<SNMP::Info::Layer3::CiscoSwitch/"TABLE METHODS"> for
 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
 | 
					 | 
				
			||||||
details.
 | 
					details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
					=head2 Table Methods imported from SNMP::Info::MAU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoPower
 | 
					See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=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::CiscoStpExtensions/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										330
									
								
								lib/SNMP/Info/Layer3/CheckPoint.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								lib/SNMP/Info/Layer3/CheckPoint.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,330 @@
 | 
				
			|||||||
 | 
					# SNMP::Info::Layer3::CheckPoint
 | 
				
			||||||
 | 
					# $Id$
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (c) 2008 Bill Fenner
 | 
				
			||||||
 | 
					# All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					# modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     * Redistributions of source code must retain the above copyright notice,
 | 
				
			||||||
 | 
					#       this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					#     * Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					#       notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					#       documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					#     * Neither the name of the University of California, Santa Cruz nor the
 | 
				
			||||||
 | 
					#       names of its contributors may be used to endorse or promote products
 | 
				
			||||||
 | 
					#       derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
				
			||||||
 | 
					# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
				
			||||||
 | 
					# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
				
			||||||
 | 
					# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
				
			||||||
 | 
					# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
				
			||||||
 | 
					# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
				
			||||||
 | 
					# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
				
			||||||
 | 
					# POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package SNMP::Info::Layer3::CheckPoint;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					use Exporter;
 | 
				
			||||||
 | 
					use SNMP::Info::Layer3;
 | 
				
			||||||
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SNMP::Info::Layer3::CheckPoint::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
 | 
				
			||||||
 | 
					@SNMP::Info::Layer3::CheckPoint::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MIBS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
 | 
					    'CHECKPOINT-MIB'      => 'fwProduct',
 | 
				
			||||||
 | 
					    'UCD-SNMP-MIB'        => 'versionTag',
 | 
				
			||||||
 | 
					    'NET-SNMP-TC'         => 'netSnmpAgentOIDs',
 | 
				
			||||||
 | 
					    'NET-SNMP-EXTEND-MIB' => 'nsExtendNumEntries',
 | 
				
			||||||
 | 
					    'HOST-RESOURCES-MIB'  => 'hrSystem',
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%GLOBALS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
 | 
					    'netsnmp_vers'   => 'versionTag',
 | 
				
			||||||
 | 
					    'hrSystemUptime' => 'hrSystemUptime',
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%FUNCS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Net-SNMP Extend table that could but customize to add a the CheckPoint version
 | 
				
			||||||
 | 
					    'extend_output_table' => 'nsExtendOutputFull',
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MUNGE,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub vendor {
 | 
				
			||||||
 | 
					    return 'checkpoint';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub model {
 | 
				
			||||||
 | 
					    my $ckp = shift;
 | 
				
			||||||
 | 
					    my $id = $ckp->id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $model = &SNMP::translateObj($id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (defined $model) {
 | 
				
			||||||
 | 
					        $model =~ s/^checkPoint//;
 | 
				
			||||||
 | 
					        return $model;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return $id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub os {
 | 
				
			||||||
 | 
					    return 'checkpoint';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub os_ver {
 | 
				
			||||||
 | 
					    my $ckp = shift;
 | 
				
			||||||
 | 
					    my $extend_table = $ckp->extend_output_table() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $descr   = $ckp->description();
 | 
				
			||||||
 | 
					    my $vers    = $ckp->netsnmp_vers();
 | 
				
			||||||
 | 
					    my $os_ver  = undef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach my $ex (keys %$extend_table) {
 | 
				
			||||||
 | 
					        (my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
 | 
				
			||||||
 | 
					        if ($name eq 'ckpVersion') {
 | 
				
			||||||
 | 
					            return $1 if ($extend_table->{$ex} =~ /^This is Check Point's software version (.*)$/);
 | 
				
			||||||
 | 
					            last;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $os_ver = $1 if ( $descr =~ /^\S+\s+\S+\s+(\S+)\s+/ );
 | 
				
			||||||
 | 
					    if ($vers) {
 | 
				
			||||||
 | 
					        $os_ver = "???" unless defined($os_ver);
 | 
				
			||||||
 | 
					        $os_ver .= " / Net-SNMP " . $vers;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $os_ver;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub serial {
 | 
				
			||||||
 | 
					    my $ckp = shift;
 | 
				
			||||||
 | 
					    my $extend_table = $ckp->extend_output_table() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach my $ex (keys %$extend_table) {
 | 
				
			||||||
 | 
					        (my $name = pack('C*',split(/\./,$ex))) =~ s/[^[:print:]]//g;
 | 
				
			||||||
 | 
					        if ($name eq 'ckpAsset') {
 | 
				
			||||||
 | 
					            return $1 if ($extend_table->{$ex} =~ /Serial Number: (\S+)/);
 | 
				
			||||||
 | 
					            last;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return '';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub layers {
 | 
				
			||||||
 | 
					    return '01001100';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# sysUptime gives us the time since the SNMP daemon has restarted,
 | 
				
			||||||
 | 
					# so return the system uptime since that's probably what the user
 | 
				
			||||||
 | 
					# wants.  (Caution: this could cause trouble if using
 | 
				
			||||||
 | 
					# sysUptime-based discontinuity timers or other TimeStamp
 | 
				
			||||||
 | 
					# objects.
 | 
				
			||||||
 | 
					sub uptime {
 | 
				
			||||||
 | 
					    my $ckp = shift;
 | 
				
			||||||
 | 
					    my $uptime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $uptime = $ckp->hrSystemUptime();
 | 
				
			||||||
 | 
					    return $uptime if defined $uptime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $ckp->SUPER::uptime();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_ignore {
 | 
				
			||||||
 | 
					    my $l3      = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $interfaces = $l3->interfaces($partial) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my %i_ignore;
 | 
				
			||||||
 | 
					    foreach my $if ( keys %$interfaces ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # lo0 etc
 | 
				
			||||||
 | 
					        if ( $interfaces->{$if} =~ /\blo\d*\b/i ) {
 | 
				
			||||||
 | 
					            $i_ignore{$if}++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return \%i_ignore;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info::Layer3::CheckPoint - SNMP Interface to CheckPoint Devices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 AUTHORS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ambroise Rosset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 # Let SNMP::Info determine the correct subclass for you. 
 | 
				
			||||||
 | 
					 my $ckp = new SNMP::Info(
 | 
				
			||||||
 | 
					                          AutoSpecify => 1,
 | 
				
			||||||
 | 
					                          Debug       => 1,
 | 
				
			||||||
 | 
					                          DestHost    => 'myrouter',
 | 
				
			||||||
 | 
					                          Community   => 'public',
 | 
				
			||||||
 | 
					                          Version     => 2
 | 
				
			||||||
 | 
					                        ) 
 | 
				
			||||||
 | 
					    or die "Can't connect to DestHost.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 my $class      = $ckp->class();
 | 
				
			||||||
 | 
					 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Subclass for Generic Net-SNMP devices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 WARNING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To correctly and completelly work, you should add the following line in the file C</etc/snmp/snmpd.local.conf> on each of your CheckPoint devices:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 # Netdisco SNMP configuration
 | 
				
			||||||
 | 
					 extend  ckpVersion /opt/CPsuite-R77/fw1/bin/fw ver
 | 
				
			||||||
 | 
					 extend  ckpAsset /bin/clish -c 'show asset all'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<UCD-SNMP-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<NET-SNMP-TC>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item F<HOST-RESOURCES-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Layer3> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::LLDP> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 GLOBALS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are methods that return scalar value from SNMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->vendor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns 'checkpoint'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp>model()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the model type of the CheckPoint device (Based on the sysObjectOID translation).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->os()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the OS extracted from C<sysDescr>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->os_ver()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the software version extracted from C<sysDescr>, along
 | 
				
			||||||
 | 
					with the Net-SNMP version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->uptime()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the system uptime instead of the agent uptime.
 | 
				
			||||||
 | 
					NOTE: discontinuity timers and other Time Stamp based objects
 | 
				
			||||||
 | 
					are based on agent uptime, so use orig_uptime().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->serial()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the serial number of the device if the SNMP server is configured as indicated previously.
 | 
				
			||||||
 | 
					Return '' in other case.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->layers()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return '01001100'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer3> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::LLDP> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 TABLE ENTRIES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
 | 
					to a hash.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Overrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $ckp->i_ignore()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns reference to hash.  Increments value of IID if port is to be ignored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ignores loopback
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer3> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::LLDP> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NOTES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In order to cause SNMP::Info to classify your device into this class, it
 | 
				
			||||||
 | 
					may be necessary to put a configuration line into your F<snmpd.conf>
 | 
				
			||||||
 | 
					similar to
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  sysobjectid .1.3.6.1.4.1.8072.3.2.N
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					where N is the object ID for your OS from the C<NET-SNMP-TC> MIB (or
 | 
				
			||||||
 | 
					255 if not listed).  Some Net-SNMP installations default to an
 | 
				
			||||||
 | 
					incorrect return value for C<system.sysObjectId>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In order to recognize a Net-SNMP device as Layer3, it may be necessary
 | 
				
			||||||
 | 
					to put a configuration line similar to
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  sysservices 76
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in your F<snmpd.conf>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=cut
 | 
				
			||||||
@@ -31,59 +31,70 @@
 | 
				
			|||||||
package SNMP::Info::Layer3::Cisco;
 | 
					package SNMP::Info::Layer3::Cisco;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					use SNMP::Info::CiscoVTP;
 | 
				
			||||||
 | 
					use SNMP::Info::LLDP;
 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					use SNMP::Info::CDP;
 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					use SNMP::Info::CiscoStats;
 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoRTT;
 | 
					use SNMP::Info::CiscoRTT;
 | 
				
			||||||
use SNMP::Info::CiscoQOS;
 | 
					use SNMP::Info::CiscoQOS;
 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					use SNMP::Info::CiscoConfig;
 | 
				
			||||||
use SNMP::Info::CiscoPower;
 | 
					use SNMP::Info::CiscoPower;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoStpExtensions;
 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					use SNMP::Info::Layer3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
 | 
					@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP
 | 
				
			||||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoImage
 | 
					    SNMP::Info::LLDP SNMP::Info::CDP
 | 
				
			||||||
    SNMP::Info::CiscoRTT  SNMP::Info::CiscoQOS
 | 
					    SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
 | 
				
			||||||
    SNMP::Info::CiscoConfig SNMP::Info::CiscoPower
 | 
					    SNMP::Info::CiscoQOS SNMP::Info::CiscoConfig
 | 
				
			||||||
 | 
					    SNMP::Info::CiscoPower SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
    SNMP::Info::Layer3
 | 
					    SNMP::Info::Layer3
 | 
				
			||||||
    Exporter/;
 | 
					    Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer3::Cisco::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::Cisco::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoPower::MIBS,
 | 
					    %SNMP::Info::CiscoPower::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
					    %SNMP::Info::CiscoConfig::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::MIBS,
 | 
					    %SNMP::Info::CiscoQOS::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoRTT::MIBS,
 | 
					    %SNMP::Info::CiscoRTT::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MIBS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::MIBS,
 | 
					    %SNMP::Info::CiscoStats::MIBS,
 | 
				
			||||||
    %SNMP::Info::CDP::MIBS,
 | 
					    %SNMP::Info::CDP::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MIBS,
 | 
					    %SNMP::Info::CiscoVTP::MIBS,
 | 
				
			||||||
    'CISCO-EIGRP-MIB' => 'cEigrpAsRouterId',
 | 
					    'CISCO-EIGRP-MIB' => 'cEigrpAsRouterId',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::GLOBALS,      %SNMP::Info::CiscoPower::GLOBALS,
 | 
					    %SNMP::Info::Layer3::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::GLOBALS, %SNMP::Info::CiscoQOS::GLOBALS,
 | 
					    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoRTT::GLOBALS,    %SNMP::Info::CiscoImage::GLOBALS,
 | 
					    %SNMP::Info::CiscoPower::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoStats::GLOBALS,  %SNMP::Info::CDP::GLOBALS,
 | 
					    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::GLOBALS, 'eigrp_id' => 'cEigrpAsRouterId',
 | 
					    %SNMP::Info::CiscoQOS::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoRTT::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStats::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CDP::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoVTP::GLOBALS,
 | 
				
			||||||
 | 
					    'eigrp_id' => 'cEigrpAsRouterId',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::FUNCS,
 | 
					    %SNMP::Info::Layer3::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoPower::FUNCS,
 | 
					    %SNMP::Info::CiscoPower::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
					    %SNMP::Info::CiscoConfig::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::FUNCS,
 | 
					    %SNMP::Info::CiscoQOS::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoRTT::FUNCS,
 | 
					    %SNMP::Info::CiscoRTT::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::FUNCS,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::FUNCS,
 | 
					    %SNMP::Info::CiscoStats::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CDP::FUNCS,
 | 
					    %SNMP::Info::CDP::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::FUNCS,
 | 
					    %SNMP::Info::CiscoVTP::FUNCS,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # EIGRP
 | 
					    # EIGRP
 | 
				
			||||||
@@ -92,33 +103,44 @@ $VERSION = '3.04_001';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MUNGE,
 | 
					    %SNMP::Info::Layer3::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStpExtensions::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoPower::MUNGE,
 | 
					    %SNMP::Info::CiscoPower::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoConfig::MUNGE,
 | 
					    %SNMP::Info::CiscoConfig::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoQOS::MUNGE,
 | 
					    %SNMP::Info::CiscoQOS::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoRTT::MUNGE,
 | 
					    %SNMP::Info::CiscoRTT::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoImage::MUNGE,
 | 
					 | 
				
			||||||
    %SNMP::Info::CiscoStats::MUNGE,
 | 
					    %SNMP::Info::CiscoStats::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CDP::MUNGE,
 | 
					    %SNMP::Info::CDP::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MUNGE,
 | 
				
			||||||
    %SNMP::Info::CiscoVTP::MUNGE,
 | 
					    %SNMP::Info::CiscoVTP::MUNGE,
 | 
				
			||||||
    'eigrp_peers' => \&SNMP::Info::munge_ip,
 | 
					    'eigrp_peers' => \&SNMP::Info::munge_ip,
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub i_vlan {
 | 
					sub i_vlan {
 | 
				
			||||||
    my ($cisco)   = shift;
 | 
					    my $cisco   = shift;
 | 
				
			||||||
    my ($partial) = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my ($i_type)  = $cisco->i_type($partial);
 | 
					    my $i_type  = $cisco->i_type($partial);
 | 
				
			||||||
    my ($i_descr) = $cisco->i_description($partial);
 | 
					    my $i_descr = $cisco->i_description($partial);
 | 
				
			||||||
    my %i_vlan;
 | 
					    my $i_vlan  = $cisco->SUPER::i_vlan($partial);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foreach my $idx ( keys %$i_descr ) {
 | 
					    foreach my $idx ( keys %$i_descr ) {
 | 
				
			||||||
        if ( $i_type->{$idx} eq 'l2vlan' || $i_type->{$idx} eq 135 ) {
 | 
					        next unless $i_type->{$idx};
 | 
				
			||||||
 | 
					        if (   $i_type->{$idx} eq 'l2vlan'
 | 
				
			||||||
 | 
					            || $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
            if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
 | 
					            if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
 | 
				
			||||||
                $i_vlan{$idx} = $1;
 | 
					                $i_vlan->{$idx} = $1;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return \%i_vlan;
 | 
					    return $i_vlan;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub cisco_comm_indexing { 
 | 
				
			||||||
 | 
					    my $cisco = shift;
 | 
				
			||||||
 | 
					    # If we get a VTP version, it's *extremely* likely that the device needs community based indexing
 | 
				
			||||||
 | 
					    my $vtp = $cisco->vtp_version() || '0';
 | 
				
			||||||
 | 
					    return ($vtp ne '0');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
@@ -127,7 +149,9 @@ __END__
 | 
				
			|||||||
=head1 NAME
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SNMP::Info::Layer3::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
 | 
					SNMP::Info::Layer3::Cisco - SNMP Interface to L3 and L2+L3 IOS Cisco Device
 | 
				
			||||||
that are not covered in other classes.
 | 
					that are not covered in other classes and the base L3 Cisco class for other
 | 
				
			||||||
 | 
					device specific L3 Cisco classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 AUTHOR
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -151,7 +175,8 @@ Max Baker
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head1 DESCRIPTION
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Subclass for Generic Cisco Routers running IOS
 | 
					Subclass for Generic Cisco Routers running IOS and the base L3 Cisco class
 | 
				
			||||||
 | 
					for other device specific L3 Cisco classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Inherited Classes
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,12 +184,12 @@ Subclass for Generic Cisco Routers running IOS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoVTP
 | 
					=item SNMP::Info::CiscoVTP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CDP
 | 
					=item SNMP::Info::CDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoStats
 | 
					=item SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item SNMP::Info::CiscoRTT
 | 
					=item SNMP::Info::CiscoRTT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::CiscoQOS
 | 
					=item SNMP::Info::CiscoQOS
 | 
				
			||||||
@@ -173,6 +198,8 @@ Subclass for Generic Cisco Routers running IOS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Power
 | 
					=item SNMP::Info::Power
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer3
 | 
					=item SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -187,12 +214,12 @@ Subclass for Generic Cisco Routers running IOS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CDP/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoImage/"Required MIBs"> for its own MIB requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoRTT/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoQOS/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoQOS/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
@@ -201,6 +228,8 @@ See L<SNMP::Info::CiscoConfig/"Required MIBs"> for its own MIB requirements.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoPower/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoStpExtensions/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
@@ -211,20 +240,25 @@ These are methods that return scalar value from SNMP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $cisco->vendor()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Returns 'cisco'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $cisco->eigrp_id()
 | 
					=item $cisco->eigrp_id()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(C<cEigrpAsRouterId>)
 | 
					(C<cEigrpAsRouterId>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $switch->cisco_comm_indexing()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns 1 when the device is likely to need vlan indexing.
 | 
				
			||||||
 | 
					Determined by checking C<vtpVersion>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
					=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					=head2 Globals imported from SNMP::Info::CDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
				
			||||||
@@ -233,10 +267,6 @@ See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoRTT
 | 
					=head2 Globals imported from SNMP::Info::CiscoRTT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
 | 
				
			||||||
@@ -253,6 +283,10 @@ See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					=head2 Globals imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
				
			||||||
@@ -280,6 +314,10 @@ Returns a mapping between C<ifIndex> and the PVID or default VLAN.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::LLDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					=head2 Table Methods imported from SNMP::Info::CDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -288,10 +326,6 @@ See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoRTT
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoRTT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -308,6 +342,10 @@ See documentation in L<SNMP::Info::CiscoConfig/"TABLE METHODS"> for details.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoPower/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStpExtensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoStpExtensions/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
				
			||||||
@@ -32,61 +32,54 @@
 | 
				
			|||||||
package SNMP::Info::Layer3::CiscoASA;
 | 
					package SNMP::Info::Layer3::CiscoASA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::CiscoVTP;
 | 
					 | 
				
			||||||
use SNMP::Info::CDP;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoStats;
 | 
					use SNMP::Info::CiscoStats;
 | 
				
			||||||
use SNMP::Info::CiscoImage;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoRTT;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoQOS;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoConfig;
 | 
					 | 
				
			||||||
use SNMP::Info::CiscoPower;
 | 
					 | 
				
			||||||
use SNMP::Info::Layer3;
 | 
					use SNMP::Info::Layer3;
 | 
				
			||||||
use SNMP::Info::Layer3::Cisco;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::CiscoASA::ISA = qw/SNMP::Info::CiscoVTP SNMP::Info::CDP
 | 
					@SNMP::Info::Layer3::CiscoASA::ISA = qw/
 | 
				
			||||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoImage
 | 
					    SNMP::Info::CiscoStats
 | 
				
			||||||
    SNMP::Info::CiscoRTT  SNMP::Info::CiscoQOS
 | 
					 | 
				
			||||||
    SNMP::Info::CiscoConfig SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
    SNMP::Info::Layer3::Cisco
 | 
					 | 
				
			||||||
    SNMP::Info::Layer3
 | 
					    SNMP::Info::Layer3
 | 
				
			||||||
    Exporter/;
 | 
					    Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer3::CiscoASA::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::CiscoASA::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
 | 
				
			||||||
       %SNMP::Info::Layer3::Cisco::MIBS,
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS
 | 
				
			||||||
       %SNMP::Info::Layer3::Cisco::GLOBALS,
 | 
					    = ( %SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, );
 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
       %SNMP::Info::Layer3::Cisco::FUNCS,
 | 
					    %SNMP::Info::Layer3::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoStats::FUNCS,
 | 
				
			||||||
    'mac_table' => 'ifPhysAddress',
 | 
					    'mac_table' => 'ifPhysAddress',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MUNGE = (
 | 
					%MUNGE = (
 | 
				
			||||||
       %SNMP::Info::Layer3::Cisco::MUNGE,
 | 
					    %SNMP::Info::Layer3::MUNGE,
 | 
				
			||||||
    'mac_table'  => \&SNMP::Info::munge_mac, );
 | 
					    %SNMP::Info::CiscoStats::MUNGE,
 | 
				
			||||||
 | 
					    'mac_table' => \&SNMP::Info::munge_mac,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub b_mac {
 | 
					sub b_mac {
 | 
				
			||||||
    my ($asa) = shift;
 | 
					    my ($asa) = shift;
 | 
				
			||||||
    my $macs = $asa->mac_table();
 | 
					    my $macs = $asa->mac_table();
 | 
				
			||||||
    my @macs;
 | 
					    my @macs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # gather physical addresses
 | 
					    # gather physical addresses
 | 
				
			||||||
    foreach my $i ( keys %$macs ) {
 | 
					    foreach my $i ( keys %$macs ) {
 | 
				
			||||||
        my $mac = $macs->{$i};
 | 
					        my $mac = $macs->{$i};
 | 
				
			||||||
               # don't catch the bad macs with zeroed OUI
 | 
					
 | 
				
			||||||
               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 );
 | 
					            push( @macs, $mac );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        @macs = sort(@macs);
 | 
					        @macs = sort(@macs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # return the least mac
 | 
					    # return the least mac
 | 
				
			||||||
    return $macs[0];
 | 
					    return $macs[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -135,13 +128,15 @@ Moe Kraus
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head1 DESCRIPTION
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Subclass for Cisco ASAs
 | 
					Subclass for Cisco ASA Devices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Inherited Classes
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer3::Cisco
 | 
					=item SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -149,11 +144,11 @@ Subclass for Cisco ASAs
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item F<CISCO-EIGRP-MIB>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -176,77 +171,25 @@ configured interface name instead of "Adaptive Security Appliance
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoStats
 | 
					=head2 Globals imported from SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoImage
 | 
					=head2 Global Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoRTT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoRTT/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoQOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoQOS/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::CiscoPower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoPower/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Globals imported from SNMP::Info::Layer3::Cisco
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are methods that return tables of information in the form of a
 | 
					These are methods that return tables of information in the form of a
 | 
				
			||||||
reference to a hash.
 | 
					reference to a hash.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CDP
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CDP/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoImage
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoImage/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoRTT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoRTT/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::CiscoQOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::CiscoQOS/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
@@ -31,34 +31,31 @@
 | 
				
			|||||||
package SNMP::Info::Layer3::CiscoFWSM;
 | 
					package SNMP::Info::Layer3::CiscoFWSM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
use Exporter;
 | 
					use Exporter;
 | 
				
			||||||
use SNMP::Info::Layer3::Cisco;
 | 
					use SNMP::Info::CiscoStats;
 | 
				
			||||||
 | 
					use SNMP::Info::Layer3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SNMP::Info::Layer3::CiscoFWSM::ISA = qw/SNMP::Info::Layer3::Cisco
 | 
					@SNMP::Info::Layer3::CiscoFWSM::ISA = qw/SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
						SNMP::Info::Layer3
 | 
				
			||||||
	Exporter/;
 | 
						Exporter/;
 | 
				
			||||||
@SNMP::Info::Layer3::CiscoFWSM::EXPORT_OK = qw//;
 | 
					@SNMP::Info::Layer3::CiscoFWSM::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
 | 
				
			||||||
    %SNMP::Info::Layer3::Cisco::MIBS,
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
%GLOBALS = (
 | 
					%GLOBALS
 | 
				
			||||||
    %SNMP::Info::Layer3::Cisco::GLOBALS,
 | 
						= ( %SNMP::Info::Layer3::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, );
 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
%FUNCS = (
 | 
					%FUNCS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::Cisco::FUNCS,
 | 
						%SNMP::Info::Layer3::FUNCS,
 | 
				
			||||||
 | 
						%SNMP::Info::CiscoStats::FUNCS,
 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
%MUNGE = (
 | 
					 | 
				
			||||||
    %SNMP::Info::Layer3::Cisco::MUNGE,
 | 
					 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoStats::MUNGE, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# For FWSMs, the ipNetToPhysicalPhysAddress table appears to be of the form:
 | 
					# For FWSMs, the ipNetToPhysicalPhysAddress table appears to be of the form:
 | 
				
			||||||
# $ifindex.$inetaddresstype.$proto.$ip_address -> $mac_address
 | 
					# $ifindex.$inetaddresstype.$proto.$ip_address -> $mac_address
 | 
				
			||||||
@@ -135,8 +132,8 @@ __END__
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=head1 NAME
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules for
 | 
					SNMP::Info::Layer3::CiscoFWSM - SNMP Interface to Firewall Services Modules
 | 
				
			||||||
features not covered elsewhere.
 | 
					for features not covered elsewhere.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 AUTHOR
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -166,7 +163,9 @@ Subclass for Cisco Firewall Services Modules
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item SNMP::Info::Layer3::Cisco
 | 
					=item SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -176,15 +175,21 @@ Subclass for Cisco Firewall Services Modules
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=item Inherited Classes' MIBs
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
 | 
					See L<SNMP::Info::CiscoStats/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 GLOBALS
 | 
					=head1 GLOBALS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Global Methods imported from SNMP::Info::Layer3::Cisco
 | 
					=head2 Globals imported from SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Global Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head1 TABLE METHODS
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -216,8 +221,12 @@ the MIB to provide that information isn't supported on FWSM.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
 | 
					See documentation in L<SNMP::Info::CiscoStats/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=cut
 | 
					=cut
 | 
				
			||||||
							
								
								
									
										190
									
								
								lib/SNMP/Info/Layer3/CiscoSwitch.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								lib/SNMP/Info/Layer3/CiscoSwitch.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,190 @@
 | 
				
			|||||||
 | 
					# SNMP::Info::Layer3::CiscoSwitch
 | 
				
			||||||
 | 
					# $Id$
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (c) 2014 Eric Miller
 | 
				
			||||||
 | 
					# All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					# modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     * Redistributions of source code must retain the above copyright notice,
 | 
				
			||||||
 | 
					#       this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					#     * Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					#       notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					#       documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					#     * Neither the name of the University of California, Santa Cruz nor the
 | 
				
			||||||
 | 
					#       names of its contributors may be used to endorse or promote products
 | 
				
			||||||
 | 
					#       derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
				
			||||||
 | 
					# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
				
			||||||
 | 
					# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
				
			||||||
 | 
					# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
				
			||||||
 | 
					# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
				
			||||||
 | 
					# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
				
			||||||
 | 
					# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
				
			||||||
 | 
					# POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package SNMP::Info::Layer3::CiscoSwitch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					use warnings;
 | 
				
			||||||
 | 
					use Exporter;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoAgg;
 | 
				
			||||||
 | 
					use SNMP::Info::CiscoPortSecurity;
 | 
				
			||||||
 | 
					use SNMP::Info::Layer3::Cisco;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SNMP::Info::Layer3::CiscoSwitch::ISA = qw/
 | 
				
			||||||
 | 
					    SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					    SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					    SNMP::Info::Layer3::Cisco
 | 
				
			||||||
 | 
					    Exporter
 | 
				
			||||||
 | 
					/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SNMP::Info::Layer3::CiscoSwitch::EXPORT_OK = qw//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MIBS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::Cisco::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::MIBS,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%GLOBALS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::Cisco::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::GLOBALS,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%FUNCS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::Cisco::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::FUNCS,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::Cisco::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
				
			||||||
 | 
					    %SNMP::Info::CiscoAgg::MUNGE,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub cisco_comm_indexing { return 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SNMP::Info::Layer3::CiscoSwitch - Base class for L3 Cisco switches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 AUTHOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Eric Miller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 SYNOPSIS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 # Let SNMP::Info determine the correct subclass for you. 
 | 
				
			||||||
 | 
					 my $switch = new SNMP::Info(
 | 
				
			||||||
 | 
					                        AutoSpecify => 1,
 | 
				
			||||||
 | 
					                        Debug       => 1,
 | 
				
			||||||
 | 
					                        # These arguments are passed directly to SNMP::Session
 | 
				
			||||||
 | 
					                        DestHost    => 'myswitch',
 | 
				
			||||||
 | 
					                        Community   => 'public',
 | 
				
			||||||
 | 
					                        Version     => 2
 | 
				
			||||||
 | 
					                        ) 
 | 
				
			||||||
 | 
					    or die "Can't connect to DestHost.\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 my $class      = $switch->class();
 | 
				
			||||||
 | 
					 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 DESCRIPTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Base subclass for Cisco Layer 2/3 Switches.  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These devices have switch specific characteristics beyond those in
 | 
				
			||||||
 | 
					traditional routers covered by L<SNMP::Info::Layer3::Cisco>. For example,
 | 
				
			||||||
 | 
					port security interface information from L<SNMP::Info::CiscoPortSecurity>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For speed or debugging purposes you can call the subclass directly, but not
 | 
				
			||||||
 | 
					after determining a more specific class using the method above. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 my $swich = new SNMP::Info::Layer3::CiscoSwitch(...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Inherited Classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item SNMP::Info::Layer3::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Required MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item Inherited Classes' MIBs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::CiscoPortSecurity/"Required MIBs"> for its own MIB
 | 
				
			||||||
 | 
					requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See L<SNMP::Info::Layer3::Cisco/"Required MIBs"> for its own MIB requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 GLOBALS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are methods that return scalar value from SNMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $switch->cisco_comm_indexing()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns 1.  Use vlan indexing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Global Methods imported from SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Globals imported from SNMP::Info::Layer3::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer3::Cisco/"GLOBALS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head1 TABLE METHODS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are methods that return tables of information in the form of a reference
 | 
				
			||||||
 | 
					to a hash.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoAgg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoAgg/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::CiscoPortSecurity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::CiscoPortSecurity/"TABLE METHODS"> for
 | 
				
			||||||
 | 
					details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=head2 Table Methods imported from SNMP::Info::Layer3::Cisco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See documentation in L<SNMP::Info::Layer3::Cisco/"TABLE METHODS"> for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=cut
 | 
				
			||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
 | 
					    %SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
 | 
				
			||||||
							
								
								
									
										126
									
								
								lib/SNMP/Info/Layer3/DLink.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								lib/SNMP/Info/Layer3/DLink.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
				
			|||||||
 | 
					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.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MIBS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::MIBS,
 | 
				
			||||||
 | 
					    'DLINK-ID-REC-MIB' => 'dlink',
 | 
				
			||||||
 | 
					    'SWPRIMGMT-DES3200-MIB' => 'dlink-des3200SeriesProd',
 | 
				
			||||||
 | 
					    'SWPRIMGMT-DES30XXP-MIB' => 'dlink-des30xxproductProd',
 | 
				
			||||||
 | 
					    'SWPRIMGMT-DES1228ME-MIB' => 'dlink-des1228MEproductProd',
 | 
				
			||||||
 | 
					    'SWDES3528-52PRIMGMT-MIB' => 'dlink-Des3500Series', 
 | 
				
			||||||
 | 
					    'DES-1210-28-AX' => 'des-1210-28ax',
 | 
				
			||||||
 | 
					    'DES-1210-10MEbx' => 'des-1210-10mebx',
 | 
				
			||||||
 | 
					    'DES-1210-26MEbx' => 'des-1210-26mebx',
 | 
				
			||||||
 | 
					    'DES-1210-52-BX' => 'des-1210-52bx',
 | 
				
			||||||
 | 
					    'DES-1210-52-CX' => 'des-1210-52-cx',
 | 
				
			||||||
 | 
					    'DGS-1210-24-AX' => 'dgs-1210-24ax',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%GLOBALS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::GLOBALS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::GLOBALS,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%FUNCS = (
 | 
				
			||||||
 | 
					    %SNMP::Info::Layer3::FUNCS,
 | 
				
			||||||
 | 
					    %SNMP::Info::LLDP::FUNCS,
 | 
				
			||||||
 | 
					    'dlink_fw' => 'probeSoftwareRev',
 | 
				
			||||||
 | 
					    'dlink_hw' => 'probeHardwareRev',
 | 
				
			||||||
 | 
					    'dlink_stp_i_root_port' => 'MSTP_MIB__swMSTPInstRootPort',
 | 
				
			||||||
 | 
					    'dlink_serial_no' => 'AGENT_GENERAL_MIB__agentSerialNumber',
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub model {
 | 
				
			||||||
 | 
					    my $dlink=shift;
 | 
				
			||||||
 | 
					    my $id = $dlink->id();
 | 
				
			||||||
 | 
					    my $model = &SNMP::translateObj($id);
 | 
				
			||||||
 | 
					    return $id unless defined $model;
 | 
				
			||||||
 | 
					    if (defined $model && $model !~ /dlink-products/) {
 | 
				
			||||||
 | 
						return $model;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					    	#If don't have a device MIB
 | 
				
			||||||
 | 
						return $dlink->description();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub vendor {
 | 
				
			||||||
 | 
					    return 'dlink';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub serial {
 | 
				
			||||||
 | 
					    my $dlink = shift;
 | 
				
			||||||
 | 
					    my $model = $dlink->model();
 | 
				
			||||||
 | 
					    my $id = $dlink->id();
 | 
				
			||||||
 | 
					    my $serial;
 | 
				
			||||||
 | 
					    if ($model =~ /1210/) {
 | 
				
			||||||
 | 
						#Due to the zoo of MIB from DLink by 1210 series
 | 
				
			||||||
 | 
						$serial->{0} = $dlink->session()->get($id.'.1.30.0');
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
						$serial = $dlink->dlink_serial_no();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $serial->{0} if ( defined $serial->{0} and $serial->{0} !~ /^\s*$/ and $serial->{0} !~ 'NOSUCHOBJECT' );
 | 
				
			||||||
 | 
					    return $dlink->SUPER::serial();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fwver {
 | 
				
			||||||
 | 
					    my $dlink=shift;
 | 
				
			||||||
 | 
					    my $model = $dlink->model();
 | 
				
			||||||
 | 
					    my $id = $dlink->id();
 | 
				
			||||||
 | 
					    my $fw;
 | 
				
			||||||
 | 
					    if ($model =~ /1210/) {
 | 
				
			||||||
 | 
						#Due to the zoo of MIB from DLink by 1210 series
 | 
				
			||||||
 | 
						$fw->{0} = $dlink->session()->get($id.'.1.3.0');
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
						$fw = $dlink->dlink_fw();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $fw->{0} if ( defined $fw->{0} and $fw->{0} !~ /^\s*$/ and $fw->{0} !~ 'NOSUCHOBJECT');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub hwver {
 | 
				
			||||||
 | 
					    my $dlink=shift;
 | 
				
			||||||
 | 
					    my $model = $dlink->model();
 | 
				
			||||||
 | 
					    my $id = $dlink->id();
 | 
				
			||||||
 | 
					    my $hw;
 | 
				
			||||||
 | 
					    if ($model =~ /1210/) {
 | 
				
			||||||
 | 
						#Due to the zoo of MIB from DLink by 1210 series
 | 
				
			||||||
 | 
						$hw->{0} = $dlink->session()->get($id.'.1.2.0');
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
						$hw = $dlink->dlink_hw();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $hw->{0} if ( defined $hw->{0} and $hw->{0} !~ /^\s*$/ and $hw->{0} !~ 'NOSUCHOBJECT');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub stp_i_root_port {
 | 
				
			||||||
 | 
					    my $dlink=shift;
 | 
				
			||||||
 | 
					    my $model = $dlink->model();
 | 
				
			||||||
 | 
					    my $id = $dlink->id();
 | 
				
			||||||
 | 
					    my $stp_i_root_port;
 | 
				
			||||||
 | 
					    if ($model =~ /1210-(?:10|26)/) {
 | 
				
			||||||
 | 
						#Due to the zoo of MIB from DLink by 1210 series
 | 
				
			||||||
 | 
						$stp_i_root_port->{0} = $dlink->session()->get($id.'.6.1.13.0');
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
						$stp_i_root_port = $dlink->dlink_stp_i_root_port();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $stp_i_root_port if ( defined $stp_i_root_port->{0} and $stp_i_root_port->{0} !~ /^\s*$/ and $stp_i_root_port->{0} !~ 'NOSUCHOBJECT');
 | 
				
			||||||
 | 
					    return $dlink->SUPER::stp_i_root_port();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
 | 
					__END__
 | 
				
			||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS,
 | 
				
			||||||
@@ -153,6 +153,48 @@ sub serial {
 | 
				
			|||||||
    return $dell->SUPER::serial();
 | 
					    return $dell->SUPER::serial();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# check all fans, and report overall status
 | 
				
			||||||
 | 
					sub fan {
 | 
				
			||||||
 | 
					    my $dell = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $fan   = $dell->dell_fan_desc()  || {};
 | 
				
			||||||
 | 
					    my $state = $dell->dell_fan_state() || {};
 | 
				
			||||||
 | 
					    my @messages = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach my $k (keys %$fan) {
 | 
				
			||||||
 | 
					        next if $state->{$k} and $state->{$k} eq 'normal';
 | 
				
			||||||
 | 
					        push @messages, "$fan->{$k}: $state->{$k}";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    push @messages, ((scalar keys %$fan). " fans OK")
 | 
				
			||||||
 | 
					      if scalar @messages == 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (join ", ", @messages);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub _ps_status {
 | 
				
			||||||
 | 
					    my ($dell, $unit) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $status = 'unknown';
 | 
				
			||||||
 | 
					    return $status if !defined $unit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $desc  = $dell->dell_pwr_desc()  || {};
 | 
				
			||||||
 | 
					    my $state = $dell->dell_pwr_state() || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach my $k (keys %$desc) {
 | 
				
			||||||
 | 
					        next unless $desc->{$k} and $desc->{$k} eq "ps1_unit$unit";
 | 
				
			||||||
 | 
					        return ($state->{$k} || $status);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $status;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub ps1_type { return 'internalRedundant' }
 | 
				
			||||||
 | 
					sub ps2_type { return 'internalRedundant' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub ps1_status { return (shift)->_ps_status(1) }
 | 
				
			||||||
 | 
					sub ps2_status { return (shift)->_ps_status(2) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub interfaces {
 | 
					sub interfaces {
 | 
				
			||||||
    my $dell    = shift;
 | 
					    my $dell    = shift;
 | 
				
			||||||
    my $partial = shift;
 | 
					    my $partial = shift;
 | 
				
			||||||
@@ -193,25 +235,6 @@ sub i_duplex_admin {
 | 
				
			|||||||
    return \%i_duplex_admin;
 | 
					    return \%i_duplex_admin;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Use same methods as netgear.  Some device didn't implement the bridge MIB
 | 
					 | 
				
			||||||
# forwarding table and some don't return MACs for VLANs other than default yet
 | 
					 | 
				
			||||||
# don't support community indexing, so we use the Q-BRIDGE-MIB forwarding
 | 
					 | 
				
			||||||
# table.  Fall back to the orig functions if the qb versions don't
 | 
					 | 
				
			||||||
# return anything.
 | 
					 | 
				
			||||||
sub fw_mac {
 | 
					 | 
				
			||||||
    my $dell = shift;
 | 
					 | 
				
			||||||
    my $ret  = $dell->qb_fw_mac();
 | 
					 | 
				
			||||||
    $ret = $dell->orig_fw_mac() if ( !defined($ret) );
 | 
					 | 
				
			||||||
    return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub fw_port {
 | 
					 | 
				
			||||||
    my $dell = shift;
 | 
					 | 
				
			||||||
    my $ret  = $dell->qb_fw_port();
 | 
					 | 
				
			||||||
    $ret = $dell->orig_fw_port() if ( !defined($ret) );
 | 
					 | 
				
			||||||
    return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub _vendor {
 | 
					sub _vendor {
 | 
				
			||||||
    my $dell = shift;
 | 
					    my $dell = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -232,6 +255,10 @@ sub _vendor {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# dot1qTpFdbTable uses dot1qVlanIndex rather than dot1qFdbId as index,
 | 
				
			||||||
 | 
					# so pretend we don't have the mapping
 | 
				
			||||||
 | 
					sub qb_fdb_index {return}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -327,6 +354,26 @@ id().  Defaults to 'dlink'.
 | 
				
			|||||||
Returns 'dell', 'dlink', or 'ibm' based upon the IANA enterprise number in
 | 
					Returns 'dell', 'dlink', or 'ibm' based upon the IANA enterprise number in
 | 
				
			||||||
id().  Defaults to 'dlink'.
 | 
					id().  Defaults to 'dlink'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $dell->fan()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the status of all fans from the F<Dell-Vendor-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $dell->ps1_type()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the type of the first power supply from the F<Dell-Vendor-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $dell->ps2_type()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the type of the second power supply from the F<Dell-Vendor-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $dell->ps1_status()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the status of the first power supply from the F<Dell-Vendor-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $dell->ps2_status()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return the status of the second power supply from the F<Dell-Vendor-MIB>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Overrides
 | 
					=head2 Overrides
 | 
				
			||||||
@@ -406,22 +453,9 @@ sometimes not unique.
 | 
				
			|||||||
Returns reference to hash of iid to current link administrative duplex
 | 
					Returns reference to hash of iid to current link administrative duplex
 | 
				
			||||||
setting.
 | 
					setting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $dell->fw_mac()
 | 
					=item $dell->qb_fdb_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns reference to hash of forwarding table MAC Addresses.
 | 
					Returns nothing to work around incorrect indexing of C<dot1qTpFdbTable>
 | 
				
			||||||
 | 
					 | 
				
			||||||
Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
 | 
					 | 
				
			||||||
the C<Q-BRIDGE-MIB> forwarding table.  Fall back to the C<BRIDGE-MIB> if
 | 
					 | 
				
			||||||
C<Q-BRIDGE-MIB> doesn't return anything.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $dell->fw_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of forwarding table entries port interface
 | 
					 | 
				
			||||||
identifier (iid)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
 | 
					 | 
				
			||||||
the C<Q-BRIDGE-MIB> forwarding table.  Fall back to the C<BRIDGE-MIB> if
 | 
					 | 
				
			||||||
C<Q-BRIDGE-MIB> doesn't return anything.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
 | 
					use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$VERSION = '3.04_001';
 | 
					$VERSION = '3.40';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%MIBS = (
 | 
					%MIBS = (
 | 
				
			||||||
    %SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
 | 
					    %SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
 | 
				
			||||||
@@ -149,27 +149,47 @@ sub i_duplex_admin {
 | 
				
			|||||||
    return $enterasys->mau_i_duplex_admin($partial);
 | 
					    return $enterasys->mau_i_duplex_admin($partial);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Normal BRIDGE-MIB has issues on some devices, duplicates and
 | 
					#  TimeFilter implementation continuously increments when walked
 | 
				
			||||||
# non-increasing oids, Use Q-BRIDGE-MIB for macsuck
 | 
					 | 
				
			||||||
sub fw_mac {
 | 
					 | 
				
			||||||
    my $enterasys = shift;
 | 
					 | 
				
			||||||
    my $partial   = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $enterasys->qb_fw_mac($partial);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub fw_port {
 | 
					 | 
				
			||||||
    my $enterasys = shift;
 | 
					 | 
				
			||||||
    my $partial   = shift;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $enterasys->qb_fw_port($partial);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#  LLDP table timefilter implementation continuously increments when walked
 | 
					 | 
				
			||||||
#  and we may never reach the end of the table.  This behavior can be
 | 
					#  and we may never reach the end of the table.  This behavior can be
 | 
				
			||||||
#  modified with the "set snmp timefilter break disable" command,
 | 
					#  modified with the "set snmp timefilter break disable" command,
 | 
				
			||||||
#  unfortunately it is not the default.  Query with a partial value of zero
 | 
					#  unfortunately it is not the default.  Query with a partial value of zero
 | 
				
			||||||
#  which means no time filter.
 | 
					#  which means no time filter for tables with and index containing a
 | 
				
			||||||
 | 
					#  TimeFilter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub qb_fdb_index {
 | 
				
			||||||
 | 
					    my $bridge  = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $qb_fdb_ids = $bridge->dot1qVlanFdbId(0) || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Strip the TimeFilter
 | 
				
			||||||
 | 
					    my $vl_fdb_index = {};
 | 
				
			||||||
 | 
					    for my $fdb_entry (keys(%$qb_fdb_ids)) {
 | 
				
			||||||
 | 
					        (my $vlan = $fdb_entry) =~ s/^\d+\.//;
 | 
				
			||||||
 | 
					        $vl_fdb_index->{$qb_fdb_ids->{$fdb_entry}} = $vlan;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $vl_fdb_index;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership {
 | 
				
			||||||
 | 
					    my $bridge  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # dot1qVlanCurrentTable TimeFilter index
 | 
				
			||||||
 | 
					    my $v_ports = $bridge->qb_cv_egress(0) || $bridge->qb_v_egress();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $bridge->_vlan_hoa($v_ports, $partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub i_vlan_membership_untagged {
 | 
				
			||||||
 | 
					    my $bridge  = shift;
 | 
				
			||||||
 | 
					    my $partial = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # dot1qVlanCurrentTable TimeFilter index
 | 
				
			||||||
 | 
					    my $v_ports = $bridge->qb_cv_untagged(0) || $bridge->qb_v_untagged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $bridge->_vlan_hoa($v_ports, $partial);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub lldp_ip {
 | 
					sub lldp_ip {
 | 
				
			||||||
    my $enterasys = shift;
 | 
					    my $enterasys = shift;
 | 
				
			||||||
@@ -373,22 +393,11 @@ See documentation for mau_i_duplex() in L<SNMP::Info::MAU/"TABLE METHODS">.
 | 
				
			|||||||
See documentation for mau_i_duplex_admin() in
 | 
					See documentation for mau_i_duplex_admin() in
 | 
				
			||||||
L<SNMP::Info::MAU/"TABLE METHODS">.
 | 
					L<SNMP::Info::MAU/"TABLE METHODS">.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $enterasys->fw_mac()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of forwarding table MAC Addresses.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=item $enterasys->fw_port()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Returns reference to hash of forwarding table entries port interface
 | 
					 | 
				
			||||||
identifier (iid).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(C<dot1qTpFdbPort>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=back
 | 
					=back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=head2 Link Layer Discovery Protocol (LLDP) Overrides
 | 
					=head2 Time Filter Table Index Overrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The LLDP table time filter implementation continuously increments when
 | 
					The time filter C<TimeFilter> implementation continuously increments when
 | 
				
			||||||
walked and we may never reach the end of the table.  This behavior can be
 | 
					walked and we may never reach the end of the table.  This behavior can be
 | 
				
			||||||
modified with the C<"set snmp timefilter break disable"> command,
 | 
					modified with the C<"set snmp timefilter break disable"> command,
 | 
				
			||||||
unfortunately it is not the default.  These methods are overridden to
 | 
					unfortunately it is not the default.  These methods are overridden to
 | 
				
			||||||
@@ -396,6 +405,12 @@ supply a partial value of zero which means no time filter.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
=over
 | 
					=over
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $enterasys->qb_fdb_index()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $enterasys->i_vlan_membership()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=item $enterasys->i_vlan_membership_untagged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $enterasys->lldp_if()
 | 
					=item $enterasys->lldp_if()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=item $enterasys->lldp_ip()
 | 
					=item $enterasys->lldp_ip()
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user